102 lines
3.5 KiB
YAML
102 lines
3.5 KiB
YAML
version: "3.8"
|
||
|
||
services:
|
||
woodpecker-server:
|
||
image: woodpeckerci/woodpecker-server:v3.10.0
|
||
container_name: woodpecker-server
|
||
restart: unless-stopped
|
||
cpus: 0.5
|
||
mem_limit: 512m
|
||
networks:
|
||
- woodpecker
|
||
environment:
|
||
- WOODPECKER_OPEN=true
|
||
- WOODPECKER_HOST=${WOODPECKER_HOST}
|
||
- WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
|
||
- WOODPECKER_ADMIN=${WOODPECKER_ADMIN}
|
||
- WOODPECKER_GITEA=true
|
||
- WOODPECKER_GITEA_URL=${WOODPECKER_GITEA_URL}
|
||
- WOODPECKER_GITEA_CLIENT=${WOODPECKER_GITEA_CLIENT}
|
||
- WOODPECKER_GITEA_SECRET=${WOODPECKER_GITEA_SECRET}
|
||
- WOODPECKER_GITEA_SKIP_VERIFY=true
|
||
# 只把 gRPC(容器 9000) 绑定到本机 Tailscale IP 的 8419
|
||
ports:
|
||
- "${LOCAL_TS_IP}:8419:9000"
|
||
- "${LOCAL_TS_IP}:8420:8000"
|
||
volumes:
|
||
- "./data:/var/lib/woodpecker"
|
||
|
||
woodpecker-agent:
|
||
container_name: woodpecker-agent
|
||
image: woodpeckerci/woodpecker-agent:v3.10.0
|
||
restart: unless-stopped
|
||
# cpus: 0.5
|
||
# mem_limit: 1024m
|
||
depends_on:
|
||
- woodpecker-server
|
||
networks:
|
||
- woodpecker
|
||
environment:
|
||
# 内网 agent 仍然走容器网络直连 server:9000
|
||
# - "WOODPECKER_SERVER=woodpecker-server:9000"
|
||
- WOODPECKER_SERVER=ci-agent.jmsu.top:4443
|
||
- WOODPECKER_GRPC_SECURE=true
|
||
- WOODPECKER_GRPC_VERIFY=true
|
||
- "WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}"
|
||
volumes:
|
||
- "/var/run/docker.sock:/var/run/docker.sock"
|
||
|
||
# === gRPC TCP 注册:HostSNI(`${WOODPECKER_GRPC_HOST}`) -> tcp -> LOCAL_TS_IP:8419 ===
|
||
woodpecker-grpc-registrar:
|
||
image: hashicorp/consul:1.21
|
||
container_name: woodpecker-grpc-registrar
|
||
restart: unless-stopped
|
||
networks:
|
||
- woodpecker
|
||
environment:
|
||
- CONSUL_HTTP_ADDR=http://${CONSUL_SERVER_IP}:8500
|
||
- SERVICE_NAME=woodpecker-grpc
|
||
- SERVICE_ADDR=${LOCAL_TS_IP}
|
||
- SERVICE_PORT=8419 # 对外注册用 8419
|
||
- SERVICE_PROTOCOL=tcp
|
||
- CHECK_TYPE=tcp
|
||
- CHECK_INTERVAL=${CHECK_INTERVAL}
|
||
- CHECK_TIMEOUT=${CHECK_TIMEOUT}
|
||
- DEREG_AFTER=${DEREG_AFTER}
|
||
- TRAEFIK_TCP_ENTRYPOINT=${TRAEFIK_TCP_ENTRYPOINT} # 你在 traefik.yml 里把 :4443 命名为 tcp,.env 已经配置为 tcp
|
||
- SERVICE_PROTOCOL=tcp
|
||
- ROUTE_HOST=${WOODPECKER_GRPC_HOST} # ci-agent.jmsu.top
|
||
- TLS_MODE=terminating # ★ A 方案:Traefik 终止 TLS
|
||
- TRAEFIK_CERT_RESOLVER=alidns # ★ 用你已有的 alidns ACME
|
||
volumes:
|
||
- ./registrar.sh:/registrar.sh:ro
|
||
entrypoint: ["/bin/sh","/registrar.sh"]
|
||
|
||
# === 可选:Web(HTTP) 注册(默认注释掉;若需要对外暴露 Web,再开启) ===
|
||
woodpecker-web-registrar:
|
||
image: hashicorp/consul:1.21
|
||
container_name: woodpecker-web-registrar
|
||
restart: unless-stopped
|
||
networks:
|
||
- woodpecker
|
||
environment:
|
||
- CONSUL_HTTP_ADDR=http://${CONSUL_SERVER_IP}:8500
|
||
- SERVICE_NAME=woodpecker-web
|
||
- SERVICE_ADDR=${LOCAL_TS_IP}
|
||
- SERVICE_PORT=8420 # 若要暴露 Web,请同时在 woodpecker-server 里把 8420:8000 也映射
|
||
- ROUTE_HOST=${WOODPECKER_HOSTNAME}
|
||
- SERVICE_PROTOCOL=http
|
||
- CHECK_TYPE=http
|
||
- CHECK_PATH=${CHECK_PATH}
|
||
- CHECK_INTERVAL=${CHECK_INTERVAL}
|
||
- CHECK_TIMEOUT=${CHECK_TIMEOUT}
|
||
- DEREG_AFTER=${DEREG_AFTER}
|
||
- TRAEFIK_HTTP_ENTRYPOINT=${TRAEFIK_HTTP_ENTRYPOINT}
|
||
volumes:
|
||
- ./registrar.sh:/registrar.sh:ro
|
||
entrypoint: ["/bin/sh","/registrar.sh"]
|
||
|
||
networks:
|
||
woodpecker:
|
||
driver: bridge
|