====== 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 корректно работают внутри опубликованного образа.