Skip to content

Instantly share code, notes, and snippets.

@erguotou520
Last active February 13, 2020 12:03
Show Gist options
  • Save erguotou520/a677ed5262146c208d159dacd0aed812 to your computer and use it in GitHub Desktop.
Save erguotou520/a677ed5262146c208d159dacd0aed812 to your computer and use it in GitHub Desktop.
gogs+drone+traefix docker-compose config file
# 顶级域名
SERVER_DOMAIN=erguotou.me
# Time Zone
TIME_ZONE=Asia/Shanghai
# ACME
ACME_EMAIL=erguotou525@gmail.com
# Drone
DRONE_SECRET=xx
DRONE_ADMIN=erguotou
version: '3'
services:
bitwarden:
image: bitwardenrs/server:latest
container_name: bitwarden
hostname: bitwarden
restart: always
environment:
- WEBSOCKET_ENABLED=true
# 成功后改为false
- SIGNUPS_ALLOWED=true
# 成功后设置 - INVITATIONS_ALLOWED=false
- DOMAIN=https://bitwarden.erguotou.me
- DATABASE_URL=/data/bitwarden.db
# - ROCKET_WORKERS=1
- WEB_VAULT_ENABLED=true
volumes:
- ./data:/data
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik_webgateway"
- "traefik.http.routers.bitwarden.rule=Host(`bitwarden.erguotou.me`)"
- "traefik.http.routers.bitwarden.entrypoints=websecure"
- "traefik.http.routers.bitwarden.tls.certresolver=mytlschallenge"
- "traefik.http.routers.bitwarden.service=bitwarden"
- "traefik.http.services.bitwarden.loadbalancer.server.port=80"
- "traefik.http.routers.bitwarden-websocket.rule=Host(`bitwarden.erguotou.me`) && Path(`/notifications/hub`)"
- "traefik.http.routers.bitwarden-websocket.entrypoints=websecure"
- "traefik.http.routers.bitwarden-websocket.tls.certresolver=mytlschallenge"
- "traefik.http.routers.bitwarden-websocket.service=bitwarden-websocket"
- "traefik.http.services.bitwarden-websocket.loadbalancer.server.port=3012"
networks:
traefik:
external:
name: traefik_webgateway
version: "3.5"
services:
traefik:
# The official Traefik docker image
image: traefik:latest
container_name: traefik
# Enables the web UI and tells Traefik to listen to docker
command:
- "--api.insecure=true"
# 这里如果不改为debug会导致bitwarden不能启动
- "--log.level=DEBUG"
- "--providers.docker=true"
- "--providers.docker.network=traefik_webgateway"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.websecure.address=:443"
- "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
# - "--certificatesResolvers.mytlschallenge.acme.httpchallenge.entryPoint=web"
- "--certificatesResolvers.mytlschallenge.acme.email=${ACME_EMAIL}"
- "--certificatesResolvers.mytlschallenge.acme.storage=/etc/acme/acme.json"
ports:
- "443:443"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- "./devops/acme:/etc/acme"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
environment:
- TZ=${TIME_ZONE}
networks:
- traefik_webgateway
# whoami:
# image: "containous/whoami"
# container_name: "simple-service"
# labels:
# - "traefik.enable=true"
# - "traefik.http.services.whoami.loadbalancer.server.port=80"
# - "traefik.http.routers.whoami.rule=Host(`whoami.${SERVER_DOMAIN}`)"
# - "traefik.http.routers.whoami.entrypoints=websecure"
# - "traefik.http.routers.whoami.tls.certresolver=mytlschallenge"
gogs:
container_name: gogs
image: gogs/gogs
restart: always
hostname: gogs
ports:
- "10022:22"
volumes:
- ./devops/gogs:/data
environment:
- TZ=${TIME_ZONE}
networks:
- traefik_webgateway
labels:
- "traefik.enable=true"
- "traefik.http.services.gogs.loadbalancer.server.port=3000"
- "traefik.http.routers.gogs.rule=Host(`gogs.${SERVER_DOMAIN}`)"
- "traefik.http.routers.gogs.entrypoints=websecure"
- "traefik.http.routers.gogs.tls.certresolver=mytlschallenge"
drone-server:
container_name: drone-server
image: drone/drone
restart: always
hostname: drone-server
volumes:
- ./devops/drone-server:/var/lib/drone/
environment:
- TZ=${TIME_ZONE}
- DRONE_GOGS_SERVER=https://gogs.${SERVER_DOMAIN}
- DRONE_RPC_SECRET=${DRONE_SECRET}
- DRONE_SERVER_HOST=drone.${SERVER_DOMAIN}
- DRONE_SERVER_PROTO=https
- DRONE_USER_CREATE=username:${DRONE_ADMIN},admin:true
networks:
- drone
- traefik_webgateway
labels:
- "traefik.enable=true"
- "traefik.http.routers.drone-server.rule=Host(`drone.${SERVER_DOMAIN}`)"
- "traefik.http.routers.drone-server.entrypoints=websecure"
- "traefik.http.routers.drone-server.tls.certresolver=mytlschallenge"
drone-agent:
container_name: drone-agent
image: drone/agent
restart: always
hostname: drone-agent
depends_on:
- drone-server
networks:
- drone
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=${TIME_ZONE}
- DRONE_RPC_HOST=drone.${SERVER_DOMAIN}
- DRONE_RPC_SECRET=${DRONE_SECRET}
- DRONE_SERVER_PROTO=https
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=${HOSTNAME}
labels:
- "traefik.enable=false"
registry:
container_name: registry
image: registry
restart: always
hostname: registry
networks:
- traefik_webgateway
volumes:
- ./devops/registry:/var/lib/registry
environment:
- TZ=${TIME_ZONE}
- REGISTRY_STORAGE_DELETE_ENABLED=true
labels:
- "traefik.enable=true"
- "traefik.http.routers.registry.rule=Host(`registry.${SERVER_DOMAIN}`)"
- "traefik.http.routers.registry.entrypoints=websecure"
- "traefik.http.routers.registry.tls.certresolver=mytlschallenge"
registry-ui:
container_name: registry-ui
image: quiq/docker-registry-ui
#image: jc21/registry-ui
#image: konradkleine/docker-registry-frontend:v2
restart: always
hostname: registry-ui
depends_on:
- registry
environment:
- TZ=${TIME_ZONE}
#- REGISTRY_HOST=registry.erguotou.me
#- REGISTRY_SSL=true
#- REGISTRY_DOMAIN=registry.erguotou.me
#- ENV_DOCKER_REGISTRY_HOST=registry
#- ENV_DOCKER_REGISTRY_PORT=443
#- ENV_DOCKER_REGISTRY_USE_SSL=1
expose:
- 8000
networks:
- traefik_webgateway
volumes:
- ./devops/registry-ui.yml:/opt/config.yml:ro
labels:
- "traefik.enable=true"
# 使用 echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g 生成用户密钥
- "traefik.http.middlewares.test-auth.basicauth.users=xxx:xxx"
- "traefik.http.middlewares.test-auth.basicauth.removeheader=true"
- "traefik.http.services.registry-ui.loadbalancer.server.port=8000"
- "traefik.http.routers.registry-ui.rule=Host(`registry-ui.${SERVER_DOMAIN}`)"
- "traefik.http.routers.registry-ui.entrypoints=websecure"
- "traefik.http.routers.registry-ui.tls.certresolver=mytlschallenge"
- "traefik.http.routers.registry-ui.middlewares=test-auth@docker"
networks:
traefik_webgateway:
name: traefik_webgateway
driver: bridge
drone:
version: "3"
services:
whoami:
image: "containous/whoami"
container_name: "simple-service"
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik_webgateway"
- "traefik.http.services.whoami.loadbalancer.server.port=80"
- "traefik.http.routers.whoami.rule=Host(`whoami.erguotou.me`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=mytlschallenge"
networks:
traefik:
external:
name: traefik_webgateway
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment