====== API Личного Кабинета ======
[[https://documenter.getpostman.com/view/5969645/TVCfXTtK|Протокол API]]
===== Минимальные требования =====
* 1 CPU
* 2 ядра
* 2 ГБ ОЗУ
* OS: Centos 8 / Debian 12
===== Установка =====
- Установка nginx и php
- Загрузка Ioncube Loader
- Подключение Ioncube Loader к php-cli
- Подключение Ioncube Loader к php-fpm
- Установка API Кабинета
- Хост nginx
- Определение путь к сокету php-fpm
- Создание пользователя MySQL
- Файл конфига API
- Обновления API
- Активация платной версии
==== Установка nginx и php ====
* [[#tab-centos|Centos]]
* [[#tab-debian|Debian]]
yum install nginx php php-fpm php-bcmath php-cli php-common php-gd php-curl php-imap php-mbstring php-mysql php-pdo php-pspell php-snmp php-soap php-xml php-xmlrpc php-pear
apt-get install -y apt-transport-https lsb-release ca-certificates wget
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
apt-get update
apt-get install nginx php7.4 php7.4-fpm php7.4-bcmath php7.4-cli php7.4-common php7.4-gd php7.4-curl php7.4-imap php7.4-mbstring php7.4-mysql php7.4-pdo php7.4-pspell php7.4-snmp php7.4-soap php7.4-xml php7.4-xmlrpc
==== Загрузка Ioncube Loader ====
Создадим директорию для Ioncube Loader и перейдем в неё:
mkdir -p /usr/local/ioncube && cd /usr/local/ioncube
\\ Можете скачать Ioncube Loader из [[https://www.ioncube.com/loaders.php|офф. сайта]] для вашей версии php.
\\ Либо загрузить из нашего сервера обновлений:
Определить версию php можно выполнив команду: php -v
* [[#tab-one|PHP 7.2]]
* [[#tab-two|PHP 7.3]]
* [[#tab-three|PHP 7.4]]
wget http://setup.2x.mikbill.pro/setup/roles/ioncube/files/ioncube_loader_lin_7.2.so
wget http://setup.2x.mikbill.pro/setup/roles/ioncube/files/ioncube_loader_lin_7.2_ts.so
wget http://setup.2x.mikbill.pro/setup/roles/ioncube/files/ioncube_loader_lin_7.3.so
wget http://setup.2x.mikbill.pro/setup/roles/ioncube/files/ioncube_loader_lin_7.3_ts.so
wget http://setup.2x.mikbill.pro/setup/roles/ioncube/files/ioncube_loader_lin_7.4.so
wget http://setup.2x.mikbill.pro/setup/roles/ioncube/files/ioncube_loader_lin_7.4_ts.so
=== Подключение Ioncube Loader к php-cli ===
\\ Далее нужно подключить Ioncube Loader к php-cli, для этого нужно создать ini файл.
\\ Что бы определить директорию где нужно создавать файл, выполним команду:
php -i | grep "Scan this dir for additional .ini files"
\\ Результатом будет **/etc/php/7.4/cli/conf.d**:
root@api-test:/usr/local/ioncube# php -i | grep "Scan this dir for additional .ini files"
Scan this dir for additional .ini files => /etc/php/7.4/cli/conf.d
\\ Создадим в этой директории файл 05-ioncube.ini:
cat > /etc/php/7.4/cli/conf.d/05-ioncube.ini << EOF
[Zend]
zend_extension = /usr/local/ioncube/ioncube_loader_lin_7.4.so
zend_extension_ts = /usr/local/ioncube/ioncube_loader_lin_7.4_ts.so
EOF
Обратите внимание что в примере используется Ioncube Loader для php 7.4!
\\ Проверяем что Ioncube Loader загрузился в php, выполним **php -v**:
root@api-test:/usr/local/ioncube# php -v
PHP 7.4.21 (cli) (built: Jul 2 2021 03:59:48) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with the ionCube PHP Loader + ionCube24 v10.4.5, Copyright (c) 2002-2020, by ionCube Ltd.
with Zend OPcache v7.4.21, Copyright (c), by Zend Technologies
\\ Строка **with the ionCube PHP Loader + ionCube24 v10.4.5, Copyright (c) 2002-2020, by ionCube Ltd.** говорит о том, что Ioncube Loader загрузился нормально.
=== Подключение Ioncube Loader к php-fpm ===
\\ Далее нужно подключить Ioncube Loader к php-fpm, для этого нужно создать ini файл.
\\ Для начала определим путь к команде php-fpm, выполним:
find /usr/sbin -iname php*fpm*
Результатом будет:
/usr/sbin/php-fpm7.4
\\ Что бы определить директорию где нужно создавать файл, выполним команду:
/usr/sbin/php-fpm7.4 -i | grep "Scan this dir for additional .ini files"
\\ Результатом будет **/etc/php/7.4/fpm/conf.d**:
root@api-test:~# /usr/sbin/php-fpm7.4 -i | grep "Scan this dir for additional .ini files"
Scan this dir for additional .ini files => /etc/php/7.4/fpm/conf.d
\\ Создадим симлинк ранее подключенного файла из php-cli
ln -s /etc/php/7.4/cli/conf.d/05-ioncube.ini /etc/php/7.4/fpm/conf.d/05-ioncube.ini
\\ Проверяем что Ioncube Loader загрузился в php, выполним **/usr/sbin/php-fpm7.4 -v**:
root@api-test:/usr/local/ioncube# /usr/sbin/php-fpm7.4 -v
PHP 7.4.21 (fpm-fcgi) (built: Jul 2 2021 03:59:48)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with the ionCube PHP Loader + ionCube24 v10.4.5, Copyright (c) 2002-2020, by ionCube Ltd.
with Zend OPcache v7.4.21, Copyright (c), by Zend Technologies
\\ Строка **with the ionCube PHP Loader + ionCube24 v10.4.5, Copyright (c) 2002-2020, by ionCube Ltd.** говорит о том, что Ioncube Loader загрузился нормально.
\\ Теперь перезапустите php-fpm:
service php7.4-fpm restart
Название сервиса можно определить выполнив:
find /etc/systemd -iname "php*fpm*"
==== Установка API Кабинета ====
Скачать скрипт обновления в /var/mikbill/updates/cabinetapi
Скрипт обновления один для обеих версий (платная и бесплатная)
[[http://free.update.2x.mikbill.pro/cabinetapi_update.sh|Скрипт обновления]]:\\
mkdir -p /var/mikbill/updates/cabinetapi
cd /var/mikbill/updates/cabinetapi
wget http://free.update.2x.mikbill.pro/cabinetapi_update.sh
Дать ему права запуска и запустить:
chmod +x cabinetapi_update.sh
./cabinetapi_update.sh
В результате будут созданы все необходимые директории а файл API кабинета будет установлен по пути **/var/www/cabinetapi/index.php**
==== Хост nginx ====
Создадим файл **/etc/nginx/conf.d/cabinetapi_host.conf** с содержимым:
server {
listen *:80;
server_name x.x.x.x;
access_log /var/log/nginx/cabinetapi_access.log;
error_log /var/log/nginx/cabinetapi_error.log;
root /var/www/cabinetapi;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location = /index.php {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/cabinetapi/index.php;
}
# deny other root request
location ~ ^/(.*)\.(php|php5)$ {
deny all;
}
# deny non root request
location ~* ^/(.*)/.*\.(xml|sh|php|php5|phtml|log|sql|txt|html)$ {
deny all;
}
}
Не забудьте поменять x.x.x.x на IP адрес своего сервера или доменное имя!
Так же обратить внимание на путь к сокету php-fpm в строке "fastcgi_pass unix:/var/run/php-worker-socket;"
=== Как определить путь к сокету php-fpm ===
Найдем файл конфига пула php-fpm по умолчанию:
find /etc/php/ -iname www.conf
\\ Результатом будем путь к файлу, пример: **/etc/php/7.4/fpm/pool.d/www.conf**
\\ Теперь найдем путь к сокету в этом файле, выполним:
cat /etc/php/7.4/fpm/pool.d/www.conf | grep "listen ="
\\ Результатом будет путь к сокету, пример: **/run/php/php7.4-fpm.sock**
\\ В конфигурации хоста nginx нужно указать **fastcgi_pass unix:/run/php/php7.4-fpm.sock;**
===== Пользователь mysql =====
Пользователя можно использовать от внешнего ЛК или создать аналогичного пользователя.
\\ [[billing/external/backend_cabinet]]
==== Файл конфигурации ====
Создайте файл конфигурации по пути **/var/mikbill/prod/config/stat.xml**
\\ Содержимое файла:
MySQL_IP_ADDRESS
MySQL_USER
MySQL_PASSWORD
mikbill
false
Europe/Kiev
false
/var/log/mikbill/cabinetapi/error.log
/var/log/mikbill/cabinetapi/debug.log
===== Авто-обновления =====
Добавьте в **/etc/crontab** запуск скрипта обновления каждый день в 6:00:
00 06 * * * root /var/mikbill/updates/cabinetapi/cabinetapi_update.sh
После изменений необходимо перезапустить службу cron
===== Ключи скрипта обновления =====
Скрипт обновления один для обеих версий (платная и бесплатная), для активации платной версии выполните действия ниже
Имеет дополнительные параметры:
* **-f** - принудительное переобновление
* **-t** - установка пре-релиз версии
===== Активация платной версии =====
Для активации лицензии, IP адрес сервера должен быть прописан в лицензии на наших серверах. По этому перед активацией сообщите IP адрес сервера нашему менеджеру
Создать директорию /var/mikbill/license и поместить туда файлы лицензии биллинга (serv.crt и client.key)
mkdir -p /var/mikbill/license
После чего запустить обновление повторно с ключом принудительного (force) обновления
cd /var/mikbill/updates/cabinetapi
./cabinetapi_update.sh -f