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
Пример:
<config> <parameters> <mysql> <host>MySQL_IP_ADDRESS</host> <username>MySQL_USER</username> <password>MySQL_PASSWORD</password> <dbname>mikbill</dbname> </mysql> <mbdebug>false</mbdebug> <timezone>Europe/Kiev</timezone> <partialUTF8>false</partialUTF8> <error_log>/var/log/mikbill/cabinetapi/error.log</error_log> <debug_log>/var/log/mikbill/cabinetapi/debug.log</debug_log> </parameters> </config>
Загрузка оригинального 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 корректно работают внутри опубликованного образа.