### Описание пайплайна развёртыванияя PostgreSQL-сервиса через Docker Compose
Данный пайплайн предназначен для безопасного и гибкого развёртывания контейнеризованного PostgreSQL-сервиса на удалённых хостах с использованием
Основная задача:
docker compose и mTLS-аутентификации. Поддерживает развёртывание на нескольких серверах в dev-окружении с предварительной настройкой контекста и параметризацией конфигурации.
Условия запуска
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "push"
when: never
- when: always
- Пайплайн не запускается автоматически при
push(например, при коммите в ветку) - Может быть запущен вручную через интерфейс GitLab или API
- Это предотвращает случайные деплои и обеспечивает контроль над процессом
Основные переменные (с параметризацией)
Пайплайн использует настраиваемые CI-переменные, доступные при запуске:
| Переменная | Значение / Опции | Описание |
|---|---|---|
ENV |
"dev" |
Целевое окружение. Сейчас поддерживается только dev. |
HOST |
$APN1_HOST, $APN2_HOST, $DBN1_HOST, $DBN2_HOST |
Выбор сервера для развёртывания. Определяет, на какой хост будет развернут контейнер. |
POSTGRESQL_HOSTNAME_NAME |
— | Имя контейнера/хоста PostgreSQL (например, postgres-db) |
POSTGRES_PORT |
— | Внешний порт, на котором будет доступен PostgreSQL (например, 5432) |
PROXY_NETWORK |
proxy |
Сеть Docker, к которой подключается контейнер (по умолчанию — proxy) |
POSTGRES_DB |
— | Имя основной базы данных |
POSTGRES_USER |
— | Имя пользователя по умолчанию |
POSTGRES_PASSWORD |
— | Пароль пользователя (передаётся безопасно, base64-кодированный) |
Все переменные заполняются вручную при запуске пайплайна, что делает его гибким и пригодным для разных сценариев развёртывания.
Настройка mTLS-аутентификации
Перед запуском задачи выполняется блок before_script, в котором устанавливаются переменные для безопасного подключения к Docker-демону:
.set_docker_context_vars:
case "$HOST" in
"$APN1_HOST") ... export CA_FILE, CERT_FILE, KEY_FILE ;;
...
esac
- Для каждого
HOSTавтоматически подставляются соответствующие пути к сертификатам:CA_FILE— сертификат центра сертификацииCERT_FILE— клиентский сертификатKEY_FILE— закрытый ключ
- Обеспечивается взаимная аутентификация (mTLS) при подключении к удалённому Docker-хосту
Внешний шаблон развёртывания
include:
- project: 'devops/services/gitlab-flow/ci-flow'
ref: v1.0.1
file: 'deploy_docker-compose-context.yml'
- Пайплайн использует централизованный шаблон развёртывания, содержащий стандартные шаги:
- Вход в реестр
- Создание Docker-контекста
- Выполнение
docker compose up
- Гарантирует единообразие и безопасность во всех проектах
Основная задача: deploy_compose
Расширяет шаблон .deploy_from_registry и переопределяет ключевые параметры:
| Параметр | Значение |
|---|---|
extends |
.deploy_from_registry |
environment |
dev |
REGISTRY |
$SED_DOCKER_REGISTRY (внутренний прокси-реестр) |
REGISTRY_USER / REGISTRY_PASSWORD |
$SED_NEXUS_USER, $SED_NEXUS_PASS_BASE64 |
COMPOSE_FILES |
-f ./docker-compose.yml |
before_script |
Установка mTLS-сертификатов через *set-docker-context-vars |
tags |
mmedo — запуск только на специализированных раннерах с поддержкой mTLS |
при запуске происходит:
- Выбор хоста и параметров PostgreSQL
- Установка mTLS-сертификатов в зависимости от
HOST - Вход в Docker-репозиторий nexus (
SED_DOCKER_REGISTRY) - Создание защищённого Docker-контекста с подключением к удалённому хосту
docker compose pull— загрузка актуальных образовdocker compose up -d --force-recreate— пересоздание и запуск контейнера
Как запустить
- Перейдите в CI/CD → Pipelines в GitLab
- Нажмите "Run pipeline"
- Укажите:
HOST— например,dbn1.example.comPOSTGRESQL_HOSTNAME_NAME— имя контейнераPOSTGRES_PORT,POSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORD
- Запустите — приложение будет развёрнуто на выбранном сервере
Важно!!!!!!!!: Убедитесь, что все переменные с паролями и сертификатами корректно настроены в проекте GitLab как CI/CD Variables, желательно с типом File или Masked.