services: postgres: image: postgres:latest volumes: - ${DATA_DIR:-/var/lib/homelab}/postgres:/var/lib/postgresql/data environment: POSTGRES_DB: ${DB_NAME} POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} forgejo: image: codeberg.org/forgejo/forgejo:8-rootless depends_on: - postgres volumes: - ${DATA_DIR:-/var/lib/homelab}/forgejo:/data stop_signal: SIGKILL ports: - "3000:3000" - "2222:2222" environment: FORGEJO__server__ROOT_URL: https://${FORGEJO_ROOT_URL} FORGEJO__server__START_SSH_SERVER: true FORGEJO__server__SSH_PORT: 2222 FORGEJO__server__SSH_DOMAIN: ${FORGEJO_ROOT_URL} FORGEJO__database__DB_TYPE: postgres FORGEJO__database__HOST: postgres:5432 FORGEJO__database__NAME: ${DB_NAME} FORGEJO__database__USER: ${DB_USER} FORGEJO__database__PASSWD: ${DB_PASSWORD} FORGEJO__security__INSTALL_LOCK: "true" FORGEJO__repository__ENABLE_PUSH_CREATE_USER: "true" woodpecker: image: woodpeckerci/woodpecker-server:latest volumes: - ${DATA_DIR:-/var/lib/homelab}/woodpecker:/var/lib/woodpecker stop_signal: SIGKILL ports: - "8008:8000" environment: WOODPECKER_OPEN: "true" WOODPECKER_HOST: https://${WOODPECKER_ROOT_URL} WOODPECKER_AGENT_SECRET: ${WOODPECKER_AGENT_SECRET} WOODPECKER_FORGEJO: "true" WOODPECKER_FORGEJO_URL: https://${FORGEJO_ROOT_URL} WOODPECKER_FORGEJO_CLIENT: ${WOODPECKER_FORGEJO_CLIENT} WOODPECKER_FORGEJO_SECRET: ${WOODPECKER_FORGEJO_SECRET} WOODPECKER_GRPC_ADDR: ":9000" woodpecker-agent: image: woodpeckerci/woodpecker-agent:latest command: agent restart: always depends_on: - woodpecker volumes: - /var/run/docker.sock:/var/run/docker.sock environment: WOODPECKER_SERVER: woodpecker:9000 WOODPECKER_AGENT_SECRET: ${WOODPECKER_AGENT_SECRET} WOODPECKER_MAX_PROCS: ${WOODPECKER_MAX_PROCS:-2} WOODPECKER_HEALTHCHECK: "false" networks: - default volumes: forgejo-data: woodpecker-data: postgres-data: