services: gitea: image: gitea/gitea:latest container_name: gitea restart: unless-stopped environment: - USER_UID=${GITEA_UID} - USER_GID=${GITEA_GID} - GITEA__server__DOMAIN=${GITEA_DOMAIN} - GITEA__server__ROOT_URL=https://${GITEA_DOMAIN}/ - GITEA__server__SSH_DOMAIN=${GITEA_DOMAIN} - GITEA__server__START_SSH_SERVER=false - GITEA__server__HTTP_PORT=3000 - GITEA__server__SSH_PORT=${GITEA_SSH_PORT} - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=${GITEA_DB_HOST}:${GITEA_DB_PORT} - GITEA__database__NAME=${GITEA_DB_NAME} - GITEA__database__USER=${GITEA_DB_USER} - GITEA__database__PASSWD=${GITEA_DB_PASSWORD} - GITEA__security__INSTALL_LOCK=true - GITEA__service__DISABLE_REGISTRATION=true - GITEA__actions__ENABLED=true - GITEA__actions__DEFAULT_ACTIONS_URL=self volumes: - gitea_data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "${GITEA_SSH_PORT}:22" labels: - traefik.enable=true - traefik.docker.network=${SHARED_NETWORK_NAME} - traefik.http.routers.gitea.rule=Host(`${GITEA_DOMAIN}`) - traefik.http.routers.gitea.entrypoints=websecure - traefik.http.routers.gitea.tls=true - traefik.http.routers.gitea.tls.certresolver=letsencrypt - traefik.http.services.gitea.loadbalancer.server.port=3000 networks: - web gitea-runner: image: gitea/act_runner:latest container_name: gitea-runner restart: unless-stopped depends_on: - gitea environment: - GITEA_INSTANCE_URL=http://gitea:3000 - GITEA_RUNNER_REGISTRATION_TOKEN=${GITEA_RUNNER_REGISTRATION_TOKEN} - GITEA_RUNNER_NAME=${GITEA_RUNNER_NAME} - GITEA_RUNNER_LABELS=${GITEA_RUNNER_LABELS} volumes: - gitea_runner_data:/data - /var/run/docker.sock:/var/run/docker.sock command: >- sh -c " if [ ! -f /data/.runner ]; then act_runner register --no-interactive --instance $${GITEA_INSTANCE_URL} --token $${GITEA_RUNNER_REGISTRATION_TOKEN} --name $${GITEA_RUNNER_NAME}; fi; act_runner daemon " networks: - web volumes: gitea_data: gitea_runner_data: networks: web: external: true name: ${SHARED_NETWORK_NAME}