docker:mbcabinetapi

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

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

Создайте файл:

/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 можно использовать 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

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

Логи располагаются на хосте:

/var/log/mikbill/cabinetapi/

Примеры:

sudo tail -100 /var/log/mikbill/cabinetapi/error.log
sudo tail -100 /var/log/mikbill/cabinetapi/debug.log

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 — это Docker-образ с nginx, PHP-FPM, ionCube и PHP-модулями.

Для обновления runtime:

cd /opt/mikbill/mbcabapi_docker
 
docker compose pull
docker compose up -d

Код Cabinet API при этом не изменяется.


Когда появится 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

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

Pipeline после публикации проверяет:

php -v
php -m | grep -i ioncube

Это подтверждает, что PHP и ionCube корректно работают внутри опубликованного образа.

  • docker/mbcabinetapi.txt
  • Последнее изменение: 34 ч. назад
  • vs