feat(docker): separate dev and prod

add separate docker compose configs and env files for development and production
parent 88b2e65b
VIRTUAL_HOST=staging.1.dev.1119.zolotoykod.ru # Define default environment variables, same for dev and prod
BITRIX_PORT=8081 BITRIX_PORT=8081
SITE_PORT=8080 SITE_PORT=8080
# Docker Compose конфиг для Bitrix # Docker Compose конфиг для 1С-Битрикс
## Как с этим работать Это базовый конфиг для запуска Docker окружения 1С-Битрикс на хосте посредством Gitlab CI.
1. Выполнить подготовительную настройку и запушить в репо
1. На хосте:
1. Установить Битрикс
1. Настроить работу миграций
1. На всякий случай, забэкапить директории bitrix и upload
1. На локальной машине:
1. Установить Битрикс
1. Настроить работу миграций
1. Создать шаблон
1. Настроить сборку фронт-энда
1. В конфиге `.gitlab-ci.yml` разблокировать задачи по сборке (build_assets) и миграциям (migrations) (убрать точку перед названием)
1. ???
1. PROFIT!!!
**P.S.** При работе с проектом, если вдруг внесены изменения не требующие выгрузки на сервер, следует добавлять `[skip ci]` в сообщение коммита
**P.P.S** Работать с проектом на сервере стого не рекомендуется!!! Но если ты считаешь себя достаточно крутым и твои изменения еще не затерло следующим билдом, то срочно переноси их в репозиторий, иначе будешь делать все сначала!!!
## Как это работает
Процесс выгрузки содержит 3 стадии: (startup, build, deploy)
На стадии **startup** задача `save_user_data` из директорий bitrix и upload создает артефакт, чтобы использовать его в следующих стадиях. Благодаря переменной GIT_STRATEGY=none, на первом этапе с рабочей директорией ничего не происходит. Артефакт загружается на `git.zolotoykod.ru` и доступен для скачивания в *Pipelines* репо.
Задача `startup` завершает одноименную стадию и запускает Docker контейнеры.
На стадии **build** выполняются задачи `build_assets` и `migrations`.
- `build_assets` устанавливает зависимости для Node.js и выполняет сборку фронт-энда. Из собранных файлов также создается артефакт.
- `migrations` просто выполняет миграции.
Стадия **deploy** состоит из одноименной задачи `deploy`, которая служит для скачивания артефактов с предыдущих стадий.
## Подготовительная настройка
1. Поправить `.env`, находящийся в директории с `docker-compose.yml`:
- `%PROJECT_NUM%` заменить на номер проекта, например `1-111`; ## Как с этим работать
- `HTTP_PORT` установить порт, например `1111`. По этому порту будет доступен 80-й порт контейнера.
2. Настроить репозиторий: 1. Настроить Docker окружение для разработки и продакшена: добавить необходимые сервисы с образами, задать переменные окружения,подключить директорию `www` с проектом и т.д. `zk-entrypoint.sh` и `build.sh` обязательные скрипты!
1. Переменная окружения `VIRTUAL_HOST` должна содержать хост, соответствующий проекту и номеру договора
1. Переименовать `gitlab-ci.yml` в `.gitlab-ci.yml` для работы CI
* В настройках репозитория включить Builds, если не включен ```
* Подключить раннер `111-DEV-HST` $ mv gitlab-ci.yml .gitlab-ci.yml
* Переименовать `gitlab-ci.yml` в `.gitlab-ci.yml` для работы CI ```
3. Настроить сборщик и указать директорию с собранными файлами в `.gitlab-ci.yml` (заменить переменную `BUILD_PATH`) 1. Настроить `.gitlab-ci.yml`:
1. Указать `BUILD_PATH` для сохранения артефактов
1. Настроить `environments` для соответствия проекту и номеру договора
## Запуск ## Особенности
1. Запустить контейнеры Создает 2 хоста по-умолчанию (можно больше): с Битриксом и самим сайтом. Битрикс устанавливается на отдельный хост. Директории `bitrix` и `upload` вынесены в data volume, чтобы не терялись в процессе непрерывной интеграции.
Данная команда создаст/пересоздаст контейнер с проектом Скрипт `link_bx.sh` восстанавливает ссылки на директории `bitrix` и `upload` для сайта. Пример использования:
```bash
docker-compose up -d
``` ```
$ /bin/bash /link_bx.sh /home/bitrix/site
2. Подключиться к контейнеру
```bash
docker-compose exec bitrix bash
``` ```
## Дополнительно Для локальной разработки можно использовать копирования вместо символьной ссылки. Для этого надо в скрипт третим параметром указать `1`
### Установка Битрикс ```
$ /bin/bash /link_bx.sh /home/bitrix/site 1
```
1. Откатиться к первому коммиту ## Как это работает
1. Стартовать контейнеры
1. Открыть в браузере сайт (`dev-%PROJECT_NUM%.zolotoykod.ru` для сервера, `[your-ip]:%PORT%` для локальной версии)
1. Перейти на страницу с установщиком `/bitrixsetup.php`
1. Установить необходимую версию Битрикс
Параметры для подключения к базе данных: Процесс выгрузки содержит 3 стадии: (startup, build, deploy).
- Host: `localhost` ### Стадия `startup`
- User: `root`
- Без пароля
При выборе решения выбрать **Загрузить из Marketplace**, в списке решений выбрать **Чистая установка Битрикс** #### Задача `status`
### Сборщик проектов Startanull Выводит статус репозитория.
Установка зависимостей Node.js для фронт-энда #### Задача `docker`
```bash Перезапускает docker окружение.
npm install
```
Документация по [сборщику](https://github.com/hustlahusky/startanull) Скрипт `start.sh` передает в контейнер переменные окружения `USER_ID` и `GROUP_ID` текущего пользователя на хосте. `zk-entrypoint.sh` изменяет id пользователя и группы в контейнере и обновляет права на домашнюю директорию пользователя, чтобы не сломать права на `www`.
### Миграции для Битрикс ### Стадия `build`
Установка зависимостей Composer #### Задача `staging`
```bash Сборка проекта, скрипт `build.sh`.
composer update
```
Настройка миграций ### Стадия `deploy`
```bash #### Задача `production`
cp vendor/arrilot/bitrix-migrations/migrator migrator
php migrator install
php migrator migrate
```
Для автоматического создания миграций добавить в `bitrix/php_interface/init.php`: Будет деплоить проект на production.
```php Pipeline создается только для ветки `master`. Задача `production` запускается только для тэгов.
include_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
Arrilot\BitrixMigrations\Autocreate\Manager::init($_SERVER["DOCUMENT_ROOT"].'/migrations');
```
Для автоматически созданных миграций требуется: ## TODO
* Исправить форматирование для соответствия стандартам разработки в Золотом Кода 1. Скрипт для деплоя на production
* Добавить подключения модуля инфоблоков 1. Сохранять изменения с сервера
``` ## Полезные ссылки
CModule::IncludeModule('iblock');
```
Документация по [миграциям](https://github.com/arrilot/bitrix-migrations) - [Gitlab CI](https://docs.gitlab.com/ce/ci/)
- [Docker Hub](https://hub.docker.com/explore/)
# Define development environment variables
VIRTUAL_HOST=staging.1.dev.1119.zolotoykod.ru
ENVIRONMENT=development
version: '2'
services:
bitrix:
image: zolotoykod/bitrix:latest
volumes:
- bitrix:/home/bitrix/www/bitrix:Z
- upload:/home/bitrix/www/upload:Z
- data:/var/lib/mysql:Z
- ./docker/zk-entrypoint.sh:/zk-entrypoint.sh:Z
- ./docker/link_bx.sh:/link_bx.sh:Z
- ./docker/build.sh:/build.sh:Z
- ./www:/home/bitrix/site:Z
- ./docker/apache/bitrix.conf:/etc/httpd/bx/conf/default.conf:Z
- ./docker/nginx/bitrix.conf:/etc/nginx/bx/site_avaliable/s1.conf:Z
- ./docker/apache/site.conf:/etc/httpd/bx/conf/site.conf:Z
- ./docker/nginx/site.conf:/etc/nginx/bx/site_enabled/site.conf:Z
ports:
- "${BITRIX_PORT}:8080"
- "${SITE_PORT}:80"
- "22"
environment:
- HOME=/home/bitrix
env_file: ./prod.env
command: /bin/bash /zk-entrypoint.sh
working_dir: /home/bitrix
tty: true
volumes:
data:
driver: local
bitrix:
driver: local
upload:
driver: local
...@@ -24,7 +24,7 @@ services: ...@@ -24,7 +24,7 @@ services:
- "22" - "22"
environment: environment:
- HOME=/home/bitrix - HOME=/home/bitrix
- VIRTUAL_HOST env_file: ./dev.env
command: /bin/bash /zk-entrypoint.sh command: /bin/bash /zk-entrypoint.sh
working_dir: /home/bitrix working_dir: /home/bitrix
tty: true tty: true
......
# Define production environment variables
VIRTUAL_HOST=production.1.dev.1119.zolotoykod.ru
ENVIRONMENT=production
#!/bin/bash #!/bin/bash
export USER_ID="$(id -u `whoami`)" export USER_ID="$(id -u `whoami`)"
export GROUP_ID="$(id -g `whoami`)" export GROUP_ID="$(id -g `whoami`)"
docker-compose down
docker-compose up -d docker-compose up -d
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment