# 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: