services: db: image: postgres:15@sha256:6eb0add3b77c081df18aa518ce43df58fdcc40f2e6d868a6fd08038dc7acd425 restart: always env_file: ../.env labels: - "xiteng.site.component.gitea-db.enabled=true" - "xiteng.site.component.gitea-db.name=Gitea PostgreSQL" - "xiteng.site.component.gitea-db.description=保存仓库平台的账户、Issue、PR 与系统元数据。" - "xiteng.site.component.gitea-db.section=infrastructure" - "xiteng.site.component.gitea-db.category=数据层" - "xiteng.site.component.gitea-db.access=internal" - "xiteng.site.component.gitea-db.access-label=仅容器网络" - "xiteng.site.component.gitea-db.icon=PG" - "xiteng.site.component.gitea-db.icon-url=https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/postgresql.svg" - "xiteng.site.component.gitea-db.accent=blue" - "xiteng.site.component.gitea-db.order=530" volumes: - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d - ./db_data:/var/lib/postgresql/data networks: - homelab_net gitea: image: gitea/gitea:1.27.1 container_name: gitea restart: unless-stopped env_file: ../.env environment: USER_UID: 964 USER_GID: 964 GITEA__database__DB_TYPE: postgres GITEA__database__HOST: db:5432 GITEA__database__NAME: giteadb GITEA__database__USER: gitea GITEA__server__PROTOCOL: http GITEA__server__DOMAIN: gitea.xiteng.site GITEA__server__ROOT_URL: https://gitea.xiteng.site/ GITEA__server__SSH_PORT: 22 GITEA__server__SSH_LISTEN_PORT: 22 GITEA__server__SSH_DOMAIN: git.xiteng.site GITEA__service__ENABLE_PASSWORD_SIGNIN_FORM: "false" GITEA__service__ENABLE_BASIC_AUTHENTICATION: "false" GITEA__service__ENABLE_PASSKEY_AUTHENTICATION: "false" volumes: - ./data:/data - ./custom/extra_links.tmpl:/data/gitea/templates/custom/extra_links.tmpl:ro # 保留 SSH 端口以便通过 SSH 推送代码(可选),移除 HTTP 宿主端口,由 Traefik 暴露 ports: - "3004:3000" labels: # --- 1. Traefik 路由设置 --- - "traefik.enable=true" - "traefik.http.routers.gitea.rule=Host(`gitea.xiteng.site`)" - "traefik.http.services.gitea.loadbalancer.server.port=3000" - "traefik.http.routers.gitea.entrypoints=websecure" - "traefik.http.routers.gitea.middlewares=gitea-scheme" # --- HTTP 入口(来自 cloudflared tunnel)--- - "traefik.http.routers.gitea-http.rule=Host(`gitea.xiteng.site`)" - "traefik.http.routers.gitea-http.service=gitea" - "traefik.http.routers.gitea-http.entrypoints=web" - "traefik.http.routers.gitea-http.middlewares=gitea-scheme" # --- 中间件:强制 X-Forwarded-Proto(Cloudflare Tunnel 用 HTTP 连 Traefik,但用户端是 HTTPS)--- - "traefik.http.middlewares.gitea-scheme.headers.customrequestheaders.X-Forwarded-Proto=https" # --- 开启 TLS 并指定解析器 --- - "traefik.http.routers.gitea.tls=true" - "traefik.http.routers.gitea.tls.certresolver=cfresolver" - "xiteng.site.cache.gitea.enabled=true" - "xiteng.site.cache.gitea.routers=gitea,gitea-http" - "xiteng.site.cache.gitea.paths=/assets/,/css/,/js/,/images/" - "xiteng.site.cache.gitea.edge-ttl=604800" - "xiteng.site.cache.gitea.stale-while-revalidate=86400" # TCP Config (SSH) - "traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)" # SNI must be * for SSH - "traefik.tcp.routers.gitea-ssh.entrypoints=ssh" - "traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22" # --- Xiteng Site dynamic catalog --- - "xiteng.site.component.gitea.enabled=true" - "xiteng.site.component.gitea.name=Gitea" - "xiteng.site.component.gitea.description=自托管代码、Issue、Pull Request 与包管理平台。" - "xiteng.site.component.gitea.section=services" - "xiteng.site.component.gitea.category=开发与协作" - "xiteng.site.component.gitea.url=https://gitea.xiteng.site/liooil" - "xiteng.site.component.gitea.endpoint=git.xiteng.site:22" - "xiteng.site.component.gitea.access=mixed" - "xiteng.site.component.gitea.access-label=公开浏览 · 写操作需登录" - "xiteng.site.component.gitea.icon=GT" - "xiteng.site.component.gitea.icon-url=https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg" - "xiteng.site.component.gitea.accent=green" - "xiteng.site.component.gitea.order=100" - "xiteng.site.component.gitea.navigation=new-tab" - "xiteng.site.component.gitea.portal-link=native" - "xiteng.site.component.gitea.monitor.enabled=true" - "xiteng.site.component.gitea.monitor.url=http://gitea:3000" networks: - homelab_net networks: homelab_net: external: true