Как организовать развертывание приложения в разные Docker-контейнеры?

Здравствуйте! У меня есть проект в GitLab CI/CD, который успешно деплоится на наш сервер (prod). Мне нужно разобраться, как корректно настроить деплой на другой сервер, который работает с Docker-контейнерами, разделенными на dev и test. У нас есть основная ветка в GitLab, и я создал ветку dev. В этой связи у меня возник вопрос: как GitLab будет определять значения для переменных `root` и `ip`, если проект остаётся тем же, но используются разные ветки? Достаточно ли будет создать нового `ssh1_user` и `ssh1_host`, или же потребуется создать новый проект с теми же файлами? 

В итоге, главный вопрос: как настроить деплой из одного проекта GitLab на сервер prod и на другой сервер, разделенный на контейнеры, для деплоя в dev и test?
  • 13 декабря 2024 г. 2:23
Ответы на вопрос 2
На самом деле, организовать развертывание приложения в разные Docker-контейнеры можно эффективно, используя систему CI/CD в GitLab. Вам не нужно создавать новый проект; достаточно настроить разные окружения и использовать переменные для управления процессом развертывания. Ниже приведен пошаговый план, как это сделать.

### Шаг 1: Настройка переменных окружения

В вашем проекте GitLab вы можете использовать переменные окружения, чтобы указать параметры развертывания для разных веток. Для этого перейдите в настройки вашего проекта:

1. Откройте раздел `Settings` -> `CI/CD`.
2. Найдите раздел `Variables` и добавьте там необходимые переменные. Например:
   - Для ветки `dev`:
     - `SSH_USER_DEV`: ваш пользователь для доступа к серверу dev
     - `SSH_HOST_DEV`: IP-адрес или хост для сервера dev
     - `ROOT_DIR_DEV`: путь до директории на сервере dev
   - Для ветки `test`:
     - `SSH_USER_TEST`: ваш пользователь для доступа к серверу test
     - `SSH_HOST_TEST`: IP-адрес или хост для сервера test
     - `ROOT_DIR_TEST`: путь до директории на сервере test
   - Для ветки `prod`:
     - `SSH_USER_PROD`: ваш пользователь для доступа к серверу prod
     - `SSH_HOST_PROD`: IP-адрес или хост для сервера prod
     - `ROOT_DIR_PROD`: путь до директории на сервере prod

### Шаг 2: Создание `.gitlab-ci.yml`

Создайте или отредактируйте файл `.gitlab-ci.yml`, чтобы описать ваши задачи для развертывания. Пример:

```yaml
stages:
  - deploy

deploy_dev:
  stage: deploy
  only:
    - dev
  script:
    - ssh $SSH_USER_DEV@$SSH_HOST_DEV "cd $ROOT_DIR_DEV && docker-compose up -d --build"

deploy_test:
  stage: deploy
  only:
    - test
  script:
    - ssh $SSH_USER_TEST@$SSH_HOST_TEST "cd $ROOT_DIR_TEST && docker-compose up -d --build"

deploy_prod:
  stage: deploy
  only:
    - master
  script:
    - ssh $SSH_USER_PROD@$SSH_HOST_PROD "cd $ROOT_DIR_PROD && docker-compose up -d --build"
```

### Шаг 3: Обеспечение безопасности

Убедитесь, что у вас настроена безопасная передача данных. Например, вы можете использовать SSH ключи для аутентификации на ваших серверах. Генерируйте ключи и добавьте публичный ключ в файл `~/.ssh/authorized_keys` на каждом из ваших серверов.

### Шаг 4: Тестирование

Проверьте работу вашего пайплайна для веток `dev`, `test` и `master`, убедитесь, что каждое развертывание проходит без ошибок.

### Шаг 5: Управление Docker-контейнерами

Убедитесь также, что ваши Docker-контейнеры настроены корректно (например, используя `docker-compose.yml`), чтобы обеспечить нужную конфигурацию для каждого окружения.

### Резюме

С помощью вышеописанных шагов вы сможете управлять развертыванием вашего приложения в разные окружения (dev, test и prod) из одного проекта в GitLab, используя git-ветки и переменные окружения. Таким образом, вам не нужно создавать новый проект, и вы сможете легко настраивать и управлять процессом развертывания.
Используйте для разных окружений разные .env файлы, например - а название окружения в CI переменной крутите.
Похожие вопросы