这纯粹是为了开发目的。高可用设置的所有服务都在一台机器上运行,只适合于本地测试。
你需要创建一个目录,其中包含一个 docker-compose.yml
文件,替换成对应的值,以及一个 haproxy.cfg
文件。
docker-compose.yml
文件
DRONE_SERVER_PROXY_HOST
用于设置 Drone Server 的代理主机,例如使用 ngrok。下面有更详细的解释。
DRONE_GITHUB_CLIENT_ID
和 DRONE_GITHUB_CLIENT_SECRET
用于设置 GitHub 客户端 ID 和 Secret。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
version: "3.8"
services:
dronea:
image: drone/drone:latest
depends_on:
db:
condition: service_healthy
environment:
- DRONE_SERVER_HOST=localhost
- DRONE_SERVER_PROTO=http
- DRONE_SERVER_PROXY_HOST=${DRONE_SERVER_PROXY_HOST}
- DRONE_SERVER_PROXY_PROTO=https
- DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
- DRONE_COOKIE_SECRET=e8206356c843d81e05ab6735e7ebf075
- DRONE_COOKIE_TIMEOUT=720h
- DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_SECRET}
- DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}
- DRONE_LOGS_DEBUG=true
- DRONE_CRON_DISABLED=true
- DRONE_DATABASE_DRIVER=postgres
- DRONE_DATABASE_DATASOURCE=postgres://postgres:postgres@db:5432/drone?sslmode=disable
- DRONE_REDIS_CONNECTION=redis://redis-server:6379
droneb:
image: drone/drone:latest
environment:
- DRONE_SERVER_HOST=localhost
- DRONE_SERVER_PROTO=http
- DRONE_SERVER_PROXY_HOST=${DRONE_SERVER_PROXY_HOST}
- DRONE_SERVER_PROXY_PROTO=https
- DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
- DRONE_COOKIE_SECRET=e8206356c843d81e05ab6735e7ebf075
- DRONE_COOKIE_TIMEOUT=720h
- DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_SECRET}
- DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}
- DRONE_LOGS_DEBUG=true
- DRONE_CRON_DISABLED=true
- DRONE_DATABASE_DRIVER=postgres
- DRONE_DATABASE_DATASOURCE=postgres://postgres:postgres@db:5432/drone?sslmode=disable
- DRONE_REDIS_CONNECTION=redis://redis-server:6379
depends_on:
- dronea
runner:
image: drone/drone-runner-docker:latest
environment:
- DRONE_RPC_HOST=proxy
- DRONE_RPC_PROTO=http
- DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
- DRONE_TMATE_ENABLED=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- proxy
- droneb
redis-server:
image: redis
proxy:
image: haproxy
ports:
- "8080:80"
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
depends_on:
- dronea
db:
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=drone
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
|
haproxy.cfg
高可用配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
defaults
mode http
timeout connect 5s
timeout client 120s
timeout server 120s
maxconn 128
frontend drone
bind *:80
default_backend drone_servers
backend drone_servers
balance roundrobin
server server1 dronea:80
server server2 droneb:80
http-response add-header X-App-Server %b/%s
|
使用 Ngrok 作为 Drone Server 的代理
Ngrok 允许我们从 GitHub 发送 Webhooks 到我们的本地 Drone 设置。
按照这里的指南 https://dashboard.ngrok.com/get-started/setup
在 8080 端口运行 Ngrok,它将在前台运行。
注意转发的主机名,这是你的 DRONE_SERVER_PROXY_HOST
,例如。
1
|
Forwarding http://c834c33asdde.ngrok.io -> http://localhost:8080
|
现在你可以在你的docker-compose.yml
文件中使用这个 ngrok 主机名作为 DRONE_SERVER_PROXY_HOST
。注意不要包括 http/https。
启动服务
通过 docker-compose up
启动,然后在 http://localhost:8080
打开 Drone 用户界面。