services: gitea: image: gitea/gitea:1.24.2 container_name: gitea restart: unless-stopped depends_on: postgres: condition: service_healthy env_file: - .env environment: USER_UID: ${PUID} USER_GID: ${PGID} GITEA__server__DOMAIN: ${GITEA_DOMAIN} GITEA__server__ROOT_URL: ${GITEA_ROOT_URL} GITEA__server__SSH_DOMAIN: ${GITEA_DOMAIN} GITEA__server__SSH_PORT: ${GITEA_SSH_PORT} GITEA__server__START_SSH_SERVER: "false" GITEA__database__DB_TYPE: postgres GITEA__database__HOST: postgres:5432 GITEA__database__NAME: ${POSTGRES_DB} GITEA__database__USER: ${POSTGRES_USER} GITEA__database__PASSWD: ${POSTGRES_PASSWORD} GITEA__security__INSTALL_LOCK: "true" GITEA__security__SECRET_KEY: ${GITEA_SECRET_KEY} GITEA__security__INTERNAL_TOKEN: ${GITEA_INTERNAL_TOKEN} ports: - "${GITEA_HTTP_PORT}:3000" - "${GITEA_SSH_PORT}:22" volumes: - ${GITEA_BASE_PATH}/gitea-data:/data healthcheck: test: ["CMD", "wget", "--spider", "--quiet", "http://localhost:3000/api/healthz"] interval: 20s timeout: 5s retries: 10 start_period: 30s postgres: image: postgres:16-alpine container_name: gitea-postgres restart: unless-stopped env_file: - .env environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - ${GITEA_BASE_PATH}/postgres:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 10 start_period: 20s caddy: image: caddy:2.10-alpine container_name: gitea-caddy restart: unless-stopped profiles: ["tls"] env_file: - .env depends_on: gitea: condition: service_healthy ports: - "80:80" - "443:443" volumes: - ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro - ${GITEA_BASE_PATH}/caddy-data:/data - ${GITEA_BASE_PATH}/caddy-config:/config