====== MikBill Cabinet API Docker ======
Docker runtime для запуска MikBill Cabinet API.
Образ содержит только окружение:
* Debian Bullseye slim
* nginx
* PHP-FPM 7.4
* ionCube Loader
* необходимые PHP-модули
Код Cabinet API, конфигурация, лицензии и скрипты обновления располагаются на хосте в стандартных каталогах MikBill. Это позволяет использовать оригинальный ''cabinetapi_update.sh'' без изменений.
----
===== Используемые образы =====
Для PHP 7.4 используется отдельная runtime-ветка:
mikbill/cabinetapi-runtime-7:latest
mikbill/cabinetapi-runtime-7:7.4.0
Общего образа вида:
mikbill/cabinetapi:latest
не используется, чтобы не смешивать разные PHP-ветки.
При появлении PHP 8 будет использоваться отдельный образ:
mikbill/cabinetapi-runtime-8:latest
----
====== 1. Production установка ======
===== Требования =====
* Docker Engine
* Docker Compose Plugin
* Git
* Доступ к серверам обновлений MikBill: ''*.update.2x.mikbill.pro''
Проверка:
docker --version
docker compose version
git --version
----
===== Клонирование репозитория =====
Выберите каталог для docker-файлов проекта:
sudo mkdir -p /opt/mikbill
sudo chown "$USER":"$USER" /opt/mikbill
cd /opt/mikbill
Склонируйте репозиторий:
git clone https://github.com/mikbill/mbcabapi_docker.git
cd /opt/mikbill/mbcabapi_docker
Создайте ''.env'':
cp .env.example .env
По умолчанию используется:
CABINETAPI_RUNTIME_IMAGE=mikbill/cabinetapi-runtime-7:latest
HTTP_PORT=80
----
===== Создание стандартных каталогов MikBill =====
sudo mkdir -p /var/www/cabinetapi
sudo mkdir -p /var/mikbill
sudo mkdir -p /var/log/mikbill
sudo mkdir -p /var/mikbill/prod/config
sudo mkdir -p /var/mikbill/license
sudo mkdir -p /var/mikbill/updates/cabinetapi
sudo mkdir -p /var/mikbill/www_backups
sudo mkdir -p /var/log/mikbill/cabinetapi
----
===== Настройка stat.xml =====
Создайте файл:
/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
----
===== Загрузка оригинального updater =====
Для установки официального updater можно использовать helper из репозитория:
cd /opt/mikbill/mbcabapi_docker
sudo ./scripts/install_official_update_script.sh
Или скачать вручную:
sudo mkdir -p /var/mikbill/updates/cabinetapi
cd /var/mikbill/updates/cabinetapi
sudo wget http://free.update.2x.mikbill.pro/cabinetapi_update.sh
sudo chmod +x cabinetapi_update.sh
----
===== Первичная установка Cabinet API =====
=== Free версия ===
cd /var/mikbill/updates/cabinetapi
sudo ./cabinetapi_update.sh
=== Pay версия ===
Поместите файлы лицензии:
/var/mikbill/license/client.key
/var/mikbill/license/serv.crt
Убедитесь, что IP сервера прописан в лицензии на стороне MikBill.
Выполните принудительное обновление:
cd /var/mikbill/updates/cabinetapi
sudo ./cabinetapi_update.sh -f
После установки должен появиться файл:
/var/www/cabinetapi/index.php
Проверка:
sudo ls -la /var/www/cabinetapi/index.php
----
===== Запуск контейнера =====
cd /opt/mikbill/mbcabapi_docker
docker compose pull
docker compose up -d
Проверить состояние:
docker compose ps
После запуска API должен быть доступен по адресу:
http://IP_СЕРВЕРА/
----
====== 2. Production эксплуатация ======
===== Проверка состояния =====
docker compose ps
docker compose logs --tail=100
Непрерывный просмотр логов контейнера:
docker compose logs -f
Проверка healthcheck:
curl -i http://127.0.0.1/_health
----
===== Логи Cabinet API =====
Логи располагаются на хосте:
/var/log/mikbill/cabinetapi/
Примеры:
sudo tail -100 /var/log/mikbill/cabinetapi/error.log
sudo tail -100 /var/log/mikbill/cabinetapi/debug.log
----
===== Обновление Cabinet API =====
Docker-образ при обновлении Cabinet API менять не требуется.
Используется штатный updater:
cd /var/mikbill/updates/cabinetapi
sudo ./cabinetapi_update.sh
Для принудительного обновления:
cd /var/mikbill/updates/cabinetapi
sudo ./cabinetapi_update.sh -f
После обновления рекомендуется перезапустить контейнер:
cd /opt/mikbill/mbcabapi_docker
docker compose restart
----
===== Обновление runtime =====
Runtime — это Docker-образ с nginx, PHP-FPM, ionCube и PHP-модулями.
Для обновления runtime:
cd /opt/mikbill/mbcabapi_docker
docker compose pull
docker compose up -d
Код Cabinet API при этом не изменяется.
----
===== Смена runtime-ветки 7 → 8 =====
Когда появится PHP 8 runtime, достаточно поменять образ в ''.env'':
CABINETAPI_RUNTIME_IMAGE=mikbill/cabinetapi-runtime-8:latest
Затем выполнить:
docker compose pull
docker compose up -d
----
===== Перезапуск без обновления =====
docker compose restart
или
docker compose down
docker compose up -d
----
====== 3. Разработка runtime ======
Этот раздел нужен только для разработки Docker-окружения. Клиентам локальная сборка образа не требуется.
===== Локальная сборка =====
cp .env.example .env
docker compose -f docker-compose.yml -f docker-compose.build.yml build
Запуск локально собранного runtime:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d
Логи:
docker compose logs -f
----
===== GitLab CI/CD =====
Pipeline собирает runtime-образ и публикует его:
* в Docker Hub;
* в GitLab Container Registry.
Основные переменные:
RUNTIME_MAJOR: "7"
DOCKERHUB_IMAGE: mikbill/cabinetapi-runtime-${RUNTIME_MAJOR}
GITLAB_IMAGE: $CI_REGISTRY_IMAGE/cabinetapi-runtime-${RUNTIME_MAJOR}
Для PHP 7 публикуется:
mikbill/cabinetapi-runtime-7:latest
mikbill/cabinetapi-runtime-7:7.4.0
При появлении PHP 8 в соответствующей ветке проекта меняется:
RUNTIME_MAJOR: "8"
После этого pipeline будет публиковать:
mikbill/cabinetapi-runtime-8:latest
----
===== Теги образов =====
Для релизов рекомендуется использовать git tags:
git tag v7.4.0
git push origin v7.4.0
Тег ''v7.4.0'' будет опубликован как Docker tag:
mikbill/cabinetapi-runtime-7:7.4.0
Также для текущей runtime-ветки обновляется:
mikbill/cabinetapi-runtime-7:latest
----
===== Проверка runtime-образа =====
Pipeline после публикации проверяет:
php -v
php -m | grep -i ioncube
Это подтверждает, что PHP и ionCube корректно работают внутри опубликованного образа.