services: postgres: image: postgres:16-alpine container_name: gitea-postgres restart: unless-stopped environment: - POSTGRES_USER=gitea - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=gitea volumes: - postgres_data:/var/lib/postgresql/data gitea: image: gitea/gitea:latest container_name: gitea depends_on: - postgres environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=postgres:5432 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=${POSTGRES_PASSWORD} restart: unless-stopped volumes: - gitea_data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro - ./backup:/tmp/backup ports: - "3008:3000" - "100.75.252.111:2222:22" gitea-backup: image: alpine:3.21 container_name: gitea-backup depends_on: - gitea restart: unless-stopped environment: - BACKUP_RETAIN_DAYS=7 volumes: - /var/run/docker.sock:/var/run/docker.sock - ./backup:/backup - ./backup.sh:/usr/local/bin/backup.sh:ro - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro entrypoint: /bin/sh command: - -c - | apk add --no-cache docker-cli echo "0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1" > /etc/crontabs/root touch /var/log/backup.log crond -f -l 2 volumes: gitea_data: postgres_data: