Установка и настройка биллинговой системы ABillS

На тесте буду устанавливать в чистую систему Ubuntu Server 18.04 LTS (при установке системы выбрал standart system utilities и OpenSSH server).

Переключимся на пользователя root:

sudo -i

Перед началом установки обновим систему и выполним перезапуск:

apt-get update
apt-get upgrade
apt-get dist-upgrade
reboot

Установим необходимые компоненты:

sudo -i
apt-get install -yq mysql-server mysql-client libmysqlclient-dev apache2 apache2-utils libexpat1 ssl-cert build-essential rrdtool librrdtool-oo-perl arping curl

Перейдем в директорию /usr и загрузим в неё последнюю версию с сайта
http://sourceforge.net/projects/abills/

cd /usr
wget https://sourceforge.net/projects/abills/files/abills/0.80/abills-0.80.04.tgz

Распакуем скачанный архив с ABillS:

tar zxvf abills-0.80.04.tgz

Создадим необходимые директории и установим права:

mkdir /var/log/httpd/
mkdir /usr/abills/var/db/rrd/
mkdir /usr/abills/backup
mkdir -p /usr/abills/var/log
touch /usr/abills/var/log/abills.log
mkdir /usr/abills/var/log/nas_logs/
touch /usr/abills/var/log/nas_logs/nas.log
ls -l /usr/abills/
chown -Rf www-data:www-data /usr/abills/cgi-bin
chown -Rf www-data:www-data /usr/abills/Abills/templates
chown -Rf www-data:www-data /usr/abills/backup
touch /usr/abills/var/log/sql_errors
chown nobody /usr/abills/var/log/sql_errors
chmod 666 /usr/abills/var/log/sql_errors

Скопируем веб-конфигурацию abills в директорию Apache2:

cp /usr/abills/misc/apache/abills_httpd.conf /etc/apache2/sites-enabled/

В начале конфигурации добавим ваш ServerName, например:

ServerName bill.ixnfo.com:9443

Убедимся в корректности конфигурации:

sudo apachectl -t

Создадим сертификат (в Common name укажем имя хоста):

/usr/abills/misc/certs_create.sh apache

Или установим Certbot: Установка Certbot в Ubuntu

Активируем необходимые модули Apache2:

a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include
a2enmod cgi

И перезапустим Apache2 чтобы применить изменения:

/etc/init.d/apache2 restart

Подключимся к mysql серверу:

mysql --default-character-set=utf8 -u root -p

Создадим пользователя и базу данных (где sqlpassword — укажем свой пароль):

use mysql;
GRANT ALL ON abills.* TO `abills`@localhost IDENTIFIED BY "sqlpassword"; 
CREATE DATABASE abills DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci;
flush privileges;
quit

Импортируем данные mysql базы данных:

mysql --default-character-set=utf8 -u root -p -D abills < /usr/abills/db/abills.sql

В случае ошибки выполним команду нижу и повторим импорт базы данных:

sed -i -e "1 s/^/SET SQL_MODE='NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO';/;" /usr/abills/db/abills.sql

Смотрите также — Решение ошибки ERROR 1067 (42000) at line 211: Invalid default value for ‘blablabla’

Установим необходимые perl модули:

cd /usr/abills/misc/
perl perldeps.pl apt-get -batch

Если какие-то модули не установились, доустановим:

apt-get install -yq cpanminus build-essential
cpanm MODULE

В дальнейшем можно проверить все ли необходимые perl модули установлены:

cd /usr/abills/misc/
./perldeps.pl test

Также запустим скрипт который поможет найти ошибки:

cd /usr/abills/misc/
./post-install.sh

Установим Freeradius, например как я описывал в статье ниже:
Установка Freeradius

В следующем файле конфигурации укажем параметры соединения с mysql базой:

cp /usr/abills/libexec/config.pl.default /usr/abills/libexec/config.pl
nano /usr/abills/libexec/config.pl

Настроим ротацию логов FreeRADIUS, например:

nano /etc/logrotate.d/radiusd
/var/log/radius.log {
    rotate 2
    weekly
    create
    compress
    missingok
}

Внесем в cron задания:

nano /etc/crontab
*/5  *      *    *     *   root   /usr/abills/libexec/billd -all > /dev/null 2>&1
1     0     *    *     *   root    /usr/abills/libexec/periodic daily NO_ADM_REPORT=1 > /dev/null 2>&1
1     1     *    *     *   root    /usr/abills/libexec/periodic monthly NO_ADM_REPORT=1 > /dev/null 2>&1
1     3     *    *     *   root    /usr/abills/libexec/periodic backup > /dev/null 2>&1

Смотрите также справку:

/usr/abills/libexec/periodic help

Создадим файл для логов и назначим права:

touch /usr/abills/var/log/sql_errors && chmod 666 /usr/abills/var/log/sql_errors

Создадим символические ссылки на gzip и mysqldump для создания бэкапов базы:

ln -s /bin/gzip /usr/bin/gzip
ln -s /usr/bin/mysqldump /usr/local/bin/mysqldump

Веб-интерфейс ABillS администратора можно открыть по адресу (стандартный логин — abills, пароль — abills):
https://HOST:9443/admin/
Для пользователей:
https://HOST:9443/

В веб-интерфейсе через меню «Настройка» — «Сервер доступа» добавим сервер доступа и пул IP адресов для него.
В поле RADIUS Параметры можно указывать передаваемые параметры, например:

Session-Timeout=2592000

Session-Timeout можно увеличить так как по умолчанию оно равно 604800 (неделя) и через это время сессия принудительно завершается и поднимается при следующем DHCP запросе или некласифицированном пакете.
Можно отключить передачу радиусом Session-Timeout (потом указать session-timeout в конфигурации accel-ppp например или лучше не указывать вообще):

!Session-Timeout=0

Добавим тарифные платы: «Настройка» — «Internet» — «Тарифные планы». По умолчанию тариф начисляется на 30 дней. В поле «Кредит» можно указать 0.01 чтобы абонентов не отключало когда баланс ноль и тариф оплачен. Если будет переадресация на страницу с уведомлением о негативном депозите, то в поле «Фильтр негативного депозита» укажем имя фильтра, например NEG_DEPOSIT.

Добавим клиента «Клиенты» — «Логины» — «Добавить».

Заведем сервис Internet пользователю: «Клиенты» — (выбрать пользователя) — «Информация» — «Сервисы» — «Internet»

Если используется фильтр негативного депозита, то в Клиенты>Группы отметим каким группам разрешено брать кредит.

Выполним проверку запустив утилиту radtest указав логин и пароль существующего пользователя:

apt-get install freeradius-utils
radtest test 123456 127.0.0.1:1812 0 secretpass 0 127.0.0.1

В файле /usr/abills/libexec/config.pl укажем с каких IP адресов разрешено подключаться администраторам (лучше указать во вкладке Настройка — Администраторы — Доступ):

$conf{ADMINS_ALLOW_IP}='192.168.55.2,192.168.4.3';

Можно указать время сессии в web интерфейса администратора:

$conf{web_session_timeout} = 86000;

Чтобы пользователям с отрицательным балансом в гостевом режиме выдавался тот-же IP что и в рабочем (в этом случае неизвестные не получат IP):

$conf{INTERNET_GUEST_STATIC_IP}=1;

Чтобы при добавлении услуги по умолчанию выбирался какой нибудь IP Pool (где 1 это id пула, его можно посмотреть в Настройка — Сервер доступа — IP POOLs):

$conf{INTERNET_DEFAULT_IP_POOL}=1;

Чтобы абонентам которые не пользовались услугой несколько месяцев не добавляло по несколько списаний (у кого месячный тариф), можно добавить в конфигурацию опцию (при платеже или установке кредита в поле Активация будет установлена текущая дата):

$conf{INTERNET_PAY_ACTIVATE}=1;

Проверить целостность базы данных можно так:

sudo apt-get install libsql-translator-perl
cd /usr/abills/misc/db_check/
sudo ./db_check.pl
db_check.pl --help

Проверка на не созданные таблицы:

/usr/abills/misc/db_check/db_check.pl SHOW_CREATE

Можно импортировать недостающие таблицы:

mysql -u root --default-character-set=utf8 -D abills < /usr/abills/db/Dv.sql
mysql -u root --default-character-set=utf8 -D abills < /usr/abills/db/Tags.sql
mysql -u root --default-character-set=utf8 -D abills < /usr/abills/db/config_variables.sql
mysql -u root --default-character-set=utf8 -D abills < /usr/abills/db/Dhcphosts.sql
mysql -u root --default-character-set=utf8 -D abills < /usr/abills/db/Equipment.sql
mysql -u root --default-character-set=utf8 -D abills < /usr/abills/db/Equipment_models.sql
mysql -u root --default-character-set=utf8 -D abills < /usr/abills/db/Ipn.sql
mysql -u root --default-character-set=utf8 -D abills < /usr/abills/db/Snmputils.sql

Можно проверить правильно ли работает скрипт (встречал ошибку «Table ‘abills.dv_main’ doesn’t exist», исправил ее потом залив Dv.sql в базу):

/usr/abills/libexec/billd -all DEBUG=1
/usr/abills/libexec/billd -all DEBUG=10
/usr/abills/libexec/billd -all DEBUG=10 > billd_debug.txt

В интерфейсе ABillS выберем «Настройка» — «Администраторы», напротив нужного администратора заначек «Права» и установим галочки на необходимые права.

В «Настройка» — «Другое» — «Пути» укажем пути к программам.

Чтобы неизвестные клиенты авторизовывались в гостевом режиме, в Настройка > Сервер доступа > IP POOLs создадим гостевой пул и привяжем его к серверу доступа.

Если проблема с платежными системами, то смотрим логи:

grep UID /usr/abills/var/log/paysys_check.log

Zap all в биллинге используется для чистки таблицы сессий, но не для их завершения, для завершения всех сессий можно воспользоваться скриптом autozh.pl.

Чтобы поисковые ситемы не индексировали страницы биллинга, рекомендую добавить файл /usr/abills/cgi-bin/robots.txt со следующим содержимым:

User-agent: *
Disallow: /

Посмотрим статистику базы данных:

mysql -u root
SHOW ENGINE INNODB STATUS;
quit

Смотрите также мои статьи:

Вливайтесь в общение

1 комментарий

Добавить комментарий

  1. Abils такая дичь)))работал до этого на другом прове, там был самописный!!ТО на много удобнее!)))Но за статью спс