https://github.com/bkychblu-6opwuk/compose
A cli wrapper over docker compose for local bitrix projects
https://github.com/bkychblu-6opwuk/compose
bitrix bitrix-cms bitrix-compose bitrix-docker cli devtools docker docker-compose local
Last synced: 12 months ago
JSON representation
A cli wrapper over docker compose for local bitrix projects
- Host: GitHub
- URL: https://github.com/bkychblu-6opwuk/compose
- Owner: BkycHblu-6oPwuK
- License: mit
- Created: 2024-09-29T16:29:02.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-05T13:38:14.000Z (12 months ago)
- Last Synced: 2025-05-08T02:52:09.679Z (12 months ago)
- Topics: bitrix, bitrix-cms, bitrix-compose, bitrix-docker, cli, devtools, docker, docker-compose, local
- Language: Go
- Homepage:
- Size: 13.9 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Docker Compose for Bitrix
Настроенная обертка над docker compose для локальных проектов bitrix
nginx + php (7.4, 8.2, 8.3, 8.4) + mysql + node 23 версии
Для установки можно запустить установочный скрипт с правами суперпользователя:
```bash
curl -sSL https://raw.githubusercontent.com/BkycHblu-6oPwuK/compose/main/scripts/install.sh | sudo sh
```
Либо же можете вручую скачать бинарник (находится в build/docky) и поместить его в ```/usr/local/bin``` и не забудьте дать ему необходимые права (команда ```chmod +x```)
Обновление скрипта происходит точно также, при выполнении команды curl - файл заменяется.
После установки проверьте работу скрипта, можете выполнить команду ```docky --help```
## Публикация docker-compose.yml
Команды выполняются в директории с docker-compose.yml или в любой другой дочерней, но при этом файл docker-compose.yml должен существовать (для всех команд, кроме - init и clean-cache).
Для публикации docker-compose.yml выполните команду:
```bash
docky init
```
Если docker-compose.yml уже существует, то будет предложено создать новый - в таком случае файл будет переименован и после этого вы перейдете к дальшейшей публикации нового файла, а иначе будет произведен выход.
Сам сайт размещается в директории ```site```, которая создается в той же директории где находиться docker-compose.yml
Шаги установки:
1. Выбрать версию php
2. Выбрать версию mysql - 5.7 или 8.0
3. Устанавливать ли node.js - Y или N, если установите Y, то будет создан сервис с node js 23 версии
1. Если будет устанавливаться node.js, то нужно указать корневую директорию для него, то есть директория содержащая файл package.json. Путь указывается относительно корня сайта - local/js/vite или пустое поле если package.json в корне сайта.
4. Устанавливать ли sphinx - Y или N, если установите Y, то будет создан сервис с shphinx версии 2.2.11
После этого в директории где выполнялась команда появиться docker-compose.yml файл с настроенными сервисами.
## Конфигурация yml через файл .env
В этом файле задается версия php, mysql, node, путь к package json и путь к сайту если необходимо заменить стандартный
```
PHP_VERSION=7.4|8.2|8.3|8.4 # по сути не фактическая версия php - используется для построения пути к dockerfile в ```_docker/app/php-{PHP_VERSION}/dockerfile```, в самом докерфайле задается фактическая версия
MYSQL_VERSION={любая версия доступная на docker hub}
NODE_VERSION={любая версия доступная по ссылке - https://deb.nodesource.com/setup_${NODE_VERSION}.x}
NODE_PATH=/var/www/local/js/vite # здесь путь до package json в контейнере, поэтому указывайте вместе абсолютный путь. /var/www - это DOCUMENT_ROOT сайта в контейнере
SITE_PATH={абсолютный или относительный путь к директории сайта} # указывайте если не хотите размещать сайт в директории site по умолчанию
```
## Публикация докерфайлов и файлов конфигурации
Если вам необходимо внести изменения в докерфайлы или файлы конфигурации, или добавить что то свое, то используйте команду:
```bash
docky publish
```
При этом если директория ./_docker уже существует, то она будет переименована.
## SSL сертификаты для nginx
Сертификаты и ключи копируются в контейнер из /_docker/nginx/certs/ и запись о них уже добавлена в nginx.conf.
Свои сертификаты вы так же можете помещать в /_docker/nginx/certs/ и после этого делать build.
Сейчас там используются временные самописные сертификаты которые будут действительны до ~2051 года.
Сервер одинаково настроен на работу как по http, так и по https.
Более подробно - https://github.com/BkycHblu-6oPwuK/compose/tree/main/internal/files/_docker/nginx
## php
Доступные версии php - 7.4, 8.2, 8.3, 8.4.
Конфигурации для каждых из версий находятся по пути - ``` ./_docker/app/php-{PHP_VERSION}/ ```.
Для изменения версии - измените ее в файле .env, переменая ```PHP_VERSION```
## Xdebug
По умолчанию установлен.
Либо же проверьте установку пакетов в dockerfile
```dockerfile
RUN pecl install xdebug && \
docker-php-ext-enable xdebug
```
сервис app в docker-compose yml должен выглядеть вот так
```
app:
build:
context: ${DOCKER_PATH}
dockerfile: ${DOCKER_PATH}/app/php-${PHP_VERSION}/Dockerfile
args:
USERGROUP: ${USERGROUP}
volumes:
- ${SITE_PATH}:/var/www
- ${DOCKER_PATH}/app/php-${PHP_VERSION}/php.ini:/usr/local/etc/php/conf.d/php.ini
- ${DOCKER_PATH}/app/php-${PHP_VERSION}/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini # xdebug ini
- ${DOCKER_PATH}/app/php-fpm.conf:/usr/local/etc/php-fpm.d/zzzzwww.conf
- ${DOCKER_PATH}/app/nginx:/etc/nginx/conf.d
ports:
- 9000:9000
environment: # переенные для xdebug
PHP_IDE_CONFIG: serverName=xdebugServer
XDEBUG_TRIGGER: testTrig
depends_on:
- mysql
networks:
- compose
extra_hosts:
- host.docker.internal:host-gateway # extra host
container_name: app
```
публикуйте файлы конфигурации и настраивайте ```_docker/app/php-${PHP_VERSION}/xdebug.ini``` по своему усмотрению
## Cron
По умолчанию cron включен и выполняется задание на запуск файла ```/var/www/bitrix/modules/main/tools/cron_events.php```
Если необходимо добавить задания, то сделайте публикацию докерфайлов и файлов конфигурации
```bash
docky publish
```
Запись заданий осуществляйте в:
- `_docker/app/cron/appuser.txt` - для пользователя сайта
- `_docker/app/cron/root.txt` - для root пользователя
выполните команду
```bash
docky build
```
## Nginx в php контейнере
Для работы с сокетами в php кентейнер был установлен nginx который проксирует запросы на контейнер nginx.
nginx.conf для контейнера php лежит в _docker/app/nginx.conf
## Mysql
Версия mysql меняется в файле .env, переменная ```MYSQL_VERSION```, версия любая доступная на docker hub для образа mysql
По умолчанию база данных храниться в томе (volumes) mysql_data, если хотите хранить базу локально в директории, то замените mysql_data на вашу директорию, например - ./tmp/db
Так же в сервис прокидывается файл конфигурации my.cnf, он располагается в ./_docker/mysql/my.cnf - туда вы можете вносить свои правки.
## Node и npm, npx
По умолчанию установлена 23 версия.
Так же по умолчанию контейнер работает на двух портах - ``` 5173 ``` и ``` 5174 ```
При установке можно указать корневую директории для вашего фронтенда, то есть та директория, где расположен ``` package.json ```. Контейнер работает внутри данной директории и соответственно там выполняются команды.
Вы можете изменить версию ``` node ``` и корневую директорию, поменяв значение переменных ``` NODE_VERSION ``` и ``` NODE_PATH ``` в файле .env
Скачивание node идет с адреса - https://deb.nodesource.com/setup_${NODE_VERSION}.x, и часто подверсий там нет, указывайте целые числа или можете перейти по ссылке и проверить доступность версии.
Команды npm/npx выполняются слудующим образом:
```bash
docky npm {arg}
docky npx {arg}
```
## Пакет pm2 в node контейнере
В dockerfile node устанавливается пакет pm2, для работы с ним используйте команду
```bash
docky pm2 {arg}
```
Запустить сервер node js можно:
1. командой pm2 - ```docky pm2 start server.js```
2. настроить на запуск при запуске контейнеров - для этого добавьте команду (в сервисе node) - ``` command: sh -c "pm2 start /var/www/local/js/vite/server.js --name node-server & tail -f /dev/null" ```, здесь указывается точка входа к скрипту который будет запускаться
## Почта
Для отправки почты настроен SMTP клиент - ```msmtp```
Для завершения настройки вам необходимо добавить вашу почту (в поля user и from) и пароль в файл:
- `_docker/app/msmtprc`
По умолчанию в этом файле заготовка под почту яндекса, для других сервисов просто сделайте новый блок аккаунта на основе yandex и замените имя аккаунта в строке ```account default```, тогда ваш аккаунт будет по умолчанию использоваться при отправке почты.
Если почта не отправляется или в проверке системы написано что почта не работает, то проверьте логи ```msmtp``` в контейнере, которые находятся в файле ```/home/appuser/msmtp.log```. Вероятнее всего произошла ошибка авторизации или почтовый сервис отклюнил отправку из-за подозрений в спаме.
## Туннелирование локального сайта
Для туннелирования используется Expose (https://github.com/beyondcode/expose) и для того чтобы поделиться вашим локальным сайтом выполните команду:
```bash
docky share
```
Сайт будет доступен 1 час, после этого команду можно выполнить заново.
доступные флаги expose для проброса через команду docky share:
- `--auth`
- `--server`
- `--subdomain`
- `--domain`
- `--server-host`
- `--server-port`
Документация expose - https://expose.dev/docs/introduction
## Sphinx (поисковая система)
sphinx (версия 2.2.11) является сервисом в docker-compose.yml (добавляется при установке) и собирается на основе Dockerfile из _docker/sphinx/Dockerfile, где так же лежит и файл конфигурации sphinx.conf.
После запуска контейнеров можно подключаться к sphinx:
```
sphinx:9306 - протокол MySql
sphinx:9312 - стандартный протокой
```
## Создание новых сайтов
0. Выполните команду ```docky down``` или убедитесь что контейнеры остановлены
1. Для создания сайта выполните команду ``` docky create site ```
2. Введите доменное имя сайта
3. Проверьте что все создано (в директории вашего сайта должна была появиться директории с названием введенного вашего доменного имени)
4. Выполните команду ``` docky build ```
## Символические ссылки
При запуске контейнера app запускается скрипт - _docker/bin/create_simlink.sh, он создает ссылки внутри контейнера и соответственно ссылки внутри сайта распространяются и на хост и другие контейнеры.
Ссылки берутся из файла - _docker/app/simlinks. Структура файла должна быть такой:
```
/var/www/bitrix /var/www//bitrix
/var/www/local /var/www//local
/var/www/upload /var/www//upload
```
Соответственно при добавлении сайта автоматически добавляются символические ссылки на каталоги - bitrix, local, upload для введенного домена.
Если же вам нужно дополнительные ссылки добавить, то формируйте все пути относительно структуры контейнера. После этого необходимо выполнить команду:
```bash
docky build
```
## Создание нового домена для основного сайта
0. Выполните команду ```docky down``` или убедитесь что контейнеры остановлены
1. Для создания выполните команду ``` docky create domain ```
2. Введите доменное имя сайта
3. Выполните команду ``` docky build ```
## Добавление записей в hosts
При создании сайта или домена создается файл hosts в директории с docker-compose.yml
В целом вы можете добавлять в него записи вида:
```
127.0.0.1 new_site
```
После этого можно выполнить команду:
```bash
docky hosts push
```
Но лучше выполнять команду ``` docky create domain ```, если вы хотите чтобы создались сертификаты и конфиги для nginx
И все записи из вашего локального hosts будут добавлены в глобальный (${SYSTEM_DISK}\Windows\System32\drivers\etc\hosts - если wsl, или /etc/hosts - если ubuntu)
(${SYSTEM_DISK} - скрипт через команду powershell попытается найти системный диск)
Если записи уже существуют, то дублирования не будет.
## Описание всех доступных команд
- `init` - Создание docker-compose.yml в текущей директории и создает директорию ```site```
```bash
docky init
```
- `publish` - Публикация файлов конфигурации в директории с docker-compose.yml, доступен флаг ``` service ``` для публикации отдельного сервиса в docker-compose.yml (node или sphinx)
```bash
docky publish
docky publish --service node|sphinx
```
- `clean-cache` - очищает кэш директории скрипта, в ней храняться файлы конфигурации, докерфайлы
```bash
docky clean-cache
```
- `upgrade` - изменяет docker-compose.yml под вторую версия скрипта, при этом старый файл будет переименован и вы всегда можете откатить изменение
```bash
docky upgrade
```
- `create site` - Создание нового сайта в директории сайта (./site/new-site.ru)
```bash
docky create site
```
- `create domain` - Создание нового домена для вашего основного сайта
```bash
docky create domain
```
- `hosts push` - Переносит записи из вашего локального hosts файла в глобальный
```bash
docky hosts push
```
- `share` - Позволяет сделать сайт доступным из интернета
```bash
docky share
```
- `php` - Выполнение команды php в контейнере с php
```bash
docky php -v
```
- `composer` - Выполнение команды composer в контейнере с php
```bash
docky composer install
```
- `npm` - Выполнение команды npm в контейнере с node js если он был установлен
```bash
docky npm install
```
- `npx` - Выполнение команды npx в контейнере с node js если он был установлен
```bash
docky npx create-vite@latest my-app
```
- `pm2` - Выполнение команды pm2 в контейнере с node js если он был установлен. Команда принимает такие же аргументы как и оригинальная pm2
```bash
docky pm2 {arg}
```
- `И все дефолтные команды docker-compose` - Выполнение любой команды docker-compose
```bash
docky up -d
docky down
docky build
```
## Пользователи в контейнерах
- `docky` - в контейнере с php (service app), nginx, node
## Настройка Redis
Для настройки redis выполните следующие шаги:
1. Добавьте сервис сервера redis в docker-compose.yml
```yml
redis:
image: redis
ports:
- "6379:6379"
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis_data:/data
container_name: redis
networks:
- compose
volumes:
...
redis_data:
```
2. В dockerfile вашего app сервиса (_docker/app/php-{PHP_VERSION}/Dockerfile) добавьте установку php модуля redis и igbinary
```dockerfile
RUN pecl install igbinary && \
pecl install -D 'enable-redis-igbinary="yes"' redis && \
docker-php-ext-enable igbinary redis
```
3. Выполните build.
## Настройка memcached
Для настройки memcached выполните следующие шаги:
1. Добавьте сервис сервера memcached в docker-compose.yml
```yml
memcached:
image: memcached
ports:
- "11211:11211"
container_name: memcached
networks:
- compose
```
2. В dockerfile вашего app сервиса (_docker/app/php-{PHP_VERSION}/Dockerfile) добавьте установку php модуля memcached или memcache и нескольких пакетов
```dockerfile
# эти пакеты нужны, если вы используете php модуль memcached
RUN apt-get update && apt-get install -y \
libmemcached-dev \
zlib1g-dev
# используйте один из php модулей для работы с сервером memcached
RUN pecl install memcache && docker-php-ext-enable memcache
RUN pecl install memcached && docker-php-ext-enable memcached
```
3. Выполните build.
## Переход с первой версии на вторую
Для перехода выполните команду:
```bash
docky upgrade
```
Скрипт попытается поменять docker-compose.yml под вторую версию и создаст файл .env.
После выполнения рекомендуется проверить корректность изменения (файл docker-compose.yml, файл .env)