services: {{ service_name }}: image: docker.io/gitea/gitea:1.25.3 restart: {{ restart_policy }} environment: - USER_UID={{ user_uid }} - USER_GID={{ user_gid }} {% if database_type != 'sqlite' %} - GITEA__database__DB_TYPE={{ database_type }} {% if database_external %} - GITEA__database__HOST={{ database_host }} {% else %} - GITEA__database__HOST={{ service_name }}_db {% endif %} - GITEA__database__NAME={{ database_name }} - GITEA__database__USER={{ database_user }} - GITEA__database__PASSWD=${DATABASE_PASSWORD} {% endif %} - GITEA__server__SSH_PORT={{ ports_ssh }} {% if not traefik_enabled %} - GITEA__server__ROOT_URL={{ gitea_url }} {% else %} - GITEA__server__ROOT_URL=https://{{ traefik_host }}.{{ traefik_domain }} {% endif %} {% if not database_external and (database_type == "postgres" or database_type == "mysql") or traefik_enabled %} networks: {% if not database_external and database_type != 'sqlite' %} - {{ service_name }}_backend {% endif %} {% if traefik_enabled %} - {{ traefik_network }} {% endif %} {% endif %} ports: {% if not traefik_enabled %} - "{{ ports_http }}:3000" {% endif %} - "{{ ports_ssh }}:22" volumes: - {{ service_name }}_data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro {% if traefik_enabled %} labels: - traefik.enable=true - traefik.docker.network={{ traefik_network }} - traefik.http.services.{{ service_name }}_web.loadBalancer.server.port=3000 - traefik.http.routers.{{ service_name }}_http.service={{ service_name }}_web - traefik.http.routers.{{ service_name }}_http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`) - traefik.http.routers.{{ service_name }}_http.entrypoints=web {% if traefik_tls_enabled %} - traefik.http.routers.{{ service_name }}_https.service={{ service_name }}_web - traefik.http.routers.{{ service_name }}_https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`) - traefik.http.routers.{{ service_name }}_https.entrypoints=websecure - traefik.http.routers.{{ service_name }}_https.tls=true - traefik.http.routers.{{ service_name }}_https.tls.certresolver={{ traefik_tls_certresolver }} {% endif %} {% endif %} {% if not database_external and database_type != 'sqlite' %} depends_on: - {{ service_name }}_db {% endif %} {% if not database_external and database_type == "postgres" %} {{ service_name }}_db: image: docker.io/library/postgres:17.7 restart: {{ restart_policy }} environment: - TZ={{ container_timezone }} - POSTGRES_USER={{ database_user }} - POSTGRES_PASSWORD=${DATABASE_PASSWORD} - POSTGRES_DB={{ database_name }} networks: - {{ service_name }}_backend healthcheck: test: ["CMD-SHELL", "pg_isready -U {{ database_user }}"] start_period: 30s interval: 10s timeout: 10s retries: 5 volumes: - {{ service_name }}_db:/var/lib/postgresql/data {% elif not database_external and database_type == "mysql" %} {{ service_name }}_db: image: docker.io/library/mysql:8.1 restart: {{ restart_policy }} environment: - MYSQL_USER={{ database_user }} - MYSQL_PASSWORD=${DATABASE_PASSWORD} - MYSQL_DATABASE={{ database_name }} - MYSQL_ROOT_PASSWORD=${DATABASE_PASSWORD} networks: - {{ service_name }}_backend volumes: - {{ service_name }}_db:/var/lib/mysql {% endif %} volumes: {{ service_name }}_data: driver: local {% if not database_external %} {% if database_type == "postgres" or database_type == "mysql" %} {{ service_name }}_db: driver: local {% endif %} {% endif %} {% if not database_external and (database_type == "postgres" or database_type == "mysql") or traefik_enabled %} networks: {% if not database_external %} {{ service_name }}_backend: driver: bridge {% endif %} {% if traefik_enabled %} {{ traefik_network }}: external: true {% endif %} {% endif %}