--- services: server: image: docker.io/gitea/gitea:latest container_name: gitea-server environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432} - GITEA__database__NAME=${POSTGRES_DB:?POSTGRES_DB not set} - GITEA__database__USER=${POSTGRES_USER:?POSTGRES_USER not set} - GITEA__database__PASSWD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD not set} - GITEA__server__SSH_PORT=2221 - GITEA__server__ROOT_URL=https://gitshop.cc volumes: - gitea-data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "2221:22" depends_on: - db labels: - traefik.enable=true - traefik.http.services.gitea.loadbalancer.server.port=3000 - traefik.http.services.gitea.loadbalancer.server.scheme=http - traefik.http.routers.gitea-https.entrypoints=websecure - traefik.http.routers.gitea-https.rule=Host(`gitshop.cc`) # <-- Replace with your FQDN - traefik.http.routers.gitea-https.tls=true - traefik.http.routers.gitea-https.tls.certresolver=cloudflare # <-- Replace with your certresolver networks: - frontend - backend restart: unless-stopped db: image: docker.io/library/postgres:17.5 container_name: gitea-db environment: - POSTGRES_USER=${POSTGRES_USER:?POSTGRES_USER not set} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD not set} - POSTGRES_DB=${POSTGRES_DB:?POSTGRES_DB not set} networks: - backend volumes: - gitea-db:/var/lib/postgresql/data restart: unless-stopped runner: image: docker.io/gitea/act_runner:latest environment: GITEA_INSTANCE_URL: "${INSTANCE_URL}" GITEA_RUNNER_REGISTRATION_TOKEN: "${REGISTRATION_TOKEN}" GITEA_RUNNER_NAME: "${RUNNER_NAME}" GITEA_RUNNER_LABELS: "${RUNNER_LABELS}" depends_on: - db - server volumes: - /gitea/data:/data - /var/run/docker.sock:/var/run/docker.sock networks: - frontend - backend volumes: gitea-data: driver: local gitea-db: driver: local networks: frontend: name: frontend driver: bridge backend: name: backend driver: bridge