ci-demo-2/infrastructure/docker-compose.yml

240 lines
7.1 KiB
YAML

---
version: "3.7"
networks:
woodpecker:
forgejo:
proxy:
driver: bridge
volumes:
forgejo:
postgres:
woodpecker:
traefik_config:
traefik_certs:
traefik_logs:
registry:
artifacts_data:
verdaccio_data:
verdaccio_config:
verdaccio_plugins:
services:
traefik:
image: traefik:v2.10.5
container_name: traefik
restart: always
ports:
# The HTTP port
- "8380:80"
# The HTTPS port
- "8543:443"
# SSH port
- "2222:222/tcp"
network_mode: host
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./traefik/traefik.yml:/etc/traefik/traefik.yml:ro"
- "traefik_certs:/etc/certs"
- "traefik_logs:/var/log/traefik"
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`${TRAEFIK_HOST}`)"
- "traefik.http.routers.dashboard.tls=true"
- "traefik.http.routers.dashboard.entrypoints=https"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.services.dashboard.loadbalancer.server.port=8080"
smtp:
image: "maildev/maildev:2.1.0"
networks:
- proxy
ports:
- "1080:1080"
- "1025:1025"
labels:
- "traefik.enable=true"
- "traefik.http.routers.mail.rule=Host(`${MAIL_HOST}`)"
- "traefik.http.routers.mail.tls=true"
- "traefik.http.routers.mail.entrypoints=https"
- "traefik.http.services.mail.loadbalancer.server.port=1080"
forgejo:
image: codeberg.org/forgejo/forgejo:1.20
container_name: forgejo
environment:
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=postgres
- FORGEJO__database__HOST=db:5432
- FORGEJO__database__NAME=forgejo
- FORGEJO__database__USER=forgejo
- FORGEJO__database__PASSWD=forgejo
- FORGEJO__server__ROOT_URL=${FORGEJO_URL}
- FORGEJO__webhook__SKIP_TLS_VERIFY=true
- FORGEJO__webhook__ALLOWED_HOST_LIST=external,*
- FORGEJO__webhook__DELIVER_TIMEOUT=20
- FORGEJO__mailer__SMTP_ADDR=smtp
- FORGEJO__mailer__SMTP_PORT=1025
- FORGEJO__mailer__SMTP_ENABLED=true
- FORGEJO__server__LFS_START_SERVER=true
- FORGEJO__CRON__ENABLED=true
- FORGEJO__service__DISABLE_REGISTRATION=true
restart: always
ports:
- "3000:3000"
networks:
- forgejo
- proxy
volumes:
- forgejo:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
depends_on:
- db
labels:
- "traefik.enable=true"
- "traefik.http.routers.forgejo.rule=Host(`${FORGEJO_HOST}`)"
- "traefik.http.routers.forgejo.entrypoints=https"
- "traefik.http.routers.forgejo.tls=true"
- "traefik.http.services.forgejo.loadbalancer.server.port=3000"
- "traefik.tcp.routers.forgejo-ssh.rule=HostSNI(`*`)"
- "traefik.tcp.routers.forgejo-ssh.entrypoints=ssh"
- "traefik.tcp.routers.forgejo-ssh.service=gitea-ssh-svc"
- "traefik.tcp.services.forgejo-ssh-svc.loadbalancer.server.port=22"
db:
image: postgres:14
restart: always
environment:
- POSTGRES_USER=forgejo
- POSTGRES_PASSWORD=forgejo
- POSTGRES_DB=forgejo
networks:
- forgejo
volumes:
- postgres:/var/lib/postgresql/data
woodpecker-server:
image: woodpeckerci/woodpecker-server:v1.0.5
container_name: woodpecker-server
restart: unless-stopped
cpus: 0.5
mem_limit: 512m
networks:
- woodpecker
- proxy
environment:
- "WOODPECKER_OPEN=true"
- "WOODPECKER_HOST=${WOODPECKER_URL}"
- "WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}"
- "WOODPECKER_ADMIN=${WOODPECKER_ADMIN}"
- "WOODPECKER_GITEA=true"
- "WOODPECKER_GITEA_URL=${WOODPECKER_FORGEJO_URL}"
- "WOODPECKER_GITEA_CLIENT=${WOODPECKER_FORGEJO_CLIENT}"
- "WOODPECKER_GITEA_SECRET=${WOODPECKER_FORGEJO_SECRET}"
- "WOODPECKER_GITEA_SKIP_VERIFY=true"
- "WOODPECKER_LIMIT_MEM=2147483648"
- "WOODPECKER_LIMIT_MEM_SWAP=2147483648"
volumes:
- "woodpecker:/var/lib/woodpecker"
labels:
- "traefik.enable=true"
- "traefik.http.routers.woodpecker.rule=Host(`${WOODPECKER_HOST}`)"
- "traefik.http.routers.woodpecker.tls=true"
- "traefik.http.routers.woodpecker.entrypoints=https"
- "traefik.http.services.woodpecker.loadbalancer.server.port=8000"
woodpecker-agent:
container_name: woodpecker-agent
image: woodpeckerci/woodpecker-agent:v1.0.5
restart: unless-stopped
cpus: 0.5
mem_limit: 512m
depends_on:
- woodpecker-server
networks:
- woodpecker
environment:
- "WOODPECKER_SERVER=woodpecker-server:9000"
- "WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}"
- "WOODPECKER_MAX_WORKFLOWS=2"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
registry:
image: registry:2
container_name: registry
networks:
- proxy
environment:
- REGISTRY_STORAGE_DELETE_ENABLED=true
volumes:
- registry:/var/lib/registry
labels:
- "traefik.enable=true"
- "traefik.http.routers.registry.rule=Host(`${REGISTRY_HOST}`)"
- "traefik.http.routers.registry.tls=true"
- "traefik.http.routers.registry.entrypoints=https,http"
- "traefik.http.services.registry.loadbalancer.server.port=5000"
ui:
image: joxit/docker-registry-ui:latest
environment:
- DELETE_IMAGES=true
- REGISTRY_TITLE=My Private Docker Registry
- NGINX_PROXY_PASS_URL=http://registry:5000
- SINGLE_REGISTRY=true
depends_on: ['registry']
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.regui.rule=Host(`${REGISTRY_UI_HOST}`)"
- "traefik.http.routers.regui.tls=true"
- "traefik.http.routers.regui.entrypoints=https"
- "traefik.http.services.regui.loadbalancer.passhostheader=true"
mvn-registry:
image: ghcr.io/dzikoysk/reposilite:3.4.10
container_name: reposilite
deploy:
resources:
limits:
memory: ${REPOSILITE_MEMORY}
networks:
- proxy
volumes:
- artifacts_data:/app/data
stdin_open: true
environment:
- JAVA_OPTS=-Xmx${REPOSILITE_MEMORY} ${REPOSILITE_JAVA_COMPOSE_OPTS}
- REPOSILITE_OPTS=--port ${REPOSILITE_PORT} ${REPOSILITE_COMPOSE_OPTS}
tty: true
labels:
- "traefik.enable=true"
- "traefik.http.routers.mvn.rule=Host(`${REPOSILITE_HOST}`)"
- "traefik.http.routers.mvn.entrypoints=http"
- "traefik.http.services.mvn.loadbalancer.server.port=${REPOSILITE_PORT}"
verdaccio:
image: verdaccio/verdaccio:5
container_name: verdaccio
volumes:
- verdaccio_data:/verdaccio/storage
- verdaccio_config:/verdaccio/conf
- verdaccio_plugins:/verdaccio/plugins
ports:
- "4873:4873"
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.npm.rule=Host(`${VERDACCIO_HOST}`)"
- "traefik.http.routers.npm.entrypoints=http"
- "traefik.http.services.npm.loadbalancer.server.port=4873"
#
#watchtower:
# image: containrrr/watchtower:latest
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock