axe/deploy/drone/compose.yaml

71 lines
3.1 KiB
YAML
Raw Normal View History

2026-10-18 19:07:25 +00:00
# Drone CI: server (интерфейс, webhook от Gitea) и docker-runner
# (исполняет шаги .drone.yml в контейнерах этого хоста).
#
# Перед запуском — в Gitea: Настройки → Applications → OAuth2-приложение,
# Redirect URI: http://<хост-drone>:8081/authorize
#
# .env рядом с этим файлом (в git не входит):
# GITEA_SERVER=https://gitea.example.com
# DRONE_GITEA_CLIENT_ID=...
# DRONE_GITEA_CLIENT_SECRET=...
# DRONE_GITEA_ADMIN_USERNAME=admin # аккаунт Gitea, станет админом Drone
# DRONE_SERVER_HOST=drone.example.com
# DRONE_SERVER_PROTO=https
# DRONE_RPC_SECRET= # openssl rand -hex 32
#
# Запуск: docker compose -p drone --env-file .env -f compose.yaml up -d
services:
drone:
image: drone/drone:2
restart: unless-stopped
ports:
# Веб-интерфейс и цель webhook от Gitea; за TLS-терминалом.
- "8081:80"
environment:
DRONE_GITEA_SERVER: ${GITEA_SERVER:?GITEA_SERVER is required}
DRONE_GITEA_CLIENT_ID: ${DRONE_GITEA_CLIENT_ID:?DRONE_GITEA_CLIENT_ID is required}
DRONE_GITEA_CLIENT_SECRET: ${DRONE_GITEA_CLIENT_SECRET:?DRONE_GITEA_CLIENT_SECRET is required}
# Общий секрет server ↔ runner: openssl rand -hex 32.
DRONE_RPC_SECRET: ${DRONE_RPC_SECRET:?DRONE_RPC_SECRET is required}
# Первый залогинившийся через Gitea становится админом Drone.
DRONE_USER_CREATE_OAUTH: username=${DRONE_GITEA_ADMIN_USERNAME:?DRONE_GITEA_ADMIN_USERNAME is required},admin=true
# Внешний адрес интерфейса: его видят Gitea (webhook) и браузер.
DRONE_SERVER_HOST: ${DRONE_SERVER_HOST:?DRONE_SERVER_HOST is required}
DRONE_SERVER_PROTO: ${DRONE_SERVER_PROTO:-https}
volumes:
- drone:/data
networks:
- drone
runner:
image: drone/drone-runner-docker:1
restart: unless-stopped
depends_on:
- drone
environment:
DRONE_RPC_PROTO: http
DRONE_RPC_HOST: drone
DRONE_RPC_SECRET: ${DRONE_RPC_SECRET:?DRONE_RPC_SECRET is required}
# Один конвейер за раз: деплои не должны пересекаться.
DRONE_RUNNER_CAPACITY: "1"
DRONE_RUNNER_NAME: prod-server
# Шаги пайплайнов (и их сервисы — postgres для тестов) поднимаются
# именно в этой сети: имя сети указано явно (name: drone), чтобы
# совпадало со значением DRONE_RUNNER_NETWORKS.
DRONE_RUNNER_NETWORKS: drone
volumes:
# Доступ к docker-демону: сборка образов, compose, деплой.
- /var/run/docker.sock:/var/run/docker.sock
networks:
- drone
networks:
# Имя фиксируем: DRONE_RUNNER_NETWORKS ссылается на него буквально,
# а префикс проекта (drone_drone) runner бы не узнал.
drone:
name: drone
volumes:
drone: