71 lines
3.1 KiB
YAML
71 lines
3.1 KiB
YAML
# 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:
|