version: "3"

services:

  gitea:
    # 镜像提前从 docker hub 下载好了, 上传到的私有仓库
    image: registry.services.wait/cwx/gitea:1.18.5
    restart: always

    environment:
      # 自定义运行用户id, 如果是数据卷和新装，就没有必要指定;
      # 因为以前是 bind 挂载所以文件已经有了属主, 所以这里指定只是为了兼容
      - USER_UID=1000
      - USER_GID=1000

      # 指定数据库类型和帐号密码
      - DB_TYPE=mysql
      - DB_HOST=wcn7:3306
      - DB_NAME=gitea
      - DB_USER=gitea
      - DB_PASSWD=passw0rd

      # 随便取一个应用名字
      - APP_NAME=WaitCode
      - RUN_MODE=prod

      # 项目主域，和后续页面上看到的 http 项目地址有关系
      - DOMAIN=git.services.wait

      # 和 ssh clone 时页面看到的地址有关系
      - SSH_DOMAIN=git.services.wait

      # 如果 ssh 使用 22 端口的话，需要宿主机让出22端口或配置 ssh透传
      # 这里简单使用就避开端口就行
      - SSH_PORT=10022

      # 禁止用户注册
      - DISABLE_REGISTRATION=true

      # 需要登陆才能查看项目
      - REQUIRE_SIGNIN_VIEW=true

      # 最终实际的 http 服务地址
      - ROOT_URL=https://git.services.wait/

      # 离线模式, 也就不会用到一些 cdn 或外部的 js 文件等
      - OFFLINE_MODE=true
    volumes:
      - gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro

      # 挂了一个私有CA证书, 因为有向外的 webhook https 请求
      - ./config/cwxCA.pem:/etc/ssl/certs/cwxCA.pem:ro
    ports:
      - "3000:3000"
      # - "10022:10022"
    depends_on:
      - mysql
    labels:
      - "service_name=gitea"

      # 我之前采用的 traefik 做的统一网关, 如果不需要则直接将这一段删除, 并修改一下 ports
      - "traefik.enable=true"
      - "traefik.http.routers.giteaHttps.entrypoints=https"
      - "traefik.http.routers.giteaHttps.service=giteaWeb"
      - "traefik.http.routers.giteaHttps.rule=Host(`git.services.wait`)"
      - "traefik.http.routers.giteaHttps.tls=true"
      - "traefik.http.services.giteaWeb.loadbalancer.server.port=3000"

      - "traefik.tcp.routers.giteaSSH.entrypoints=port10022"
      - "traefik.tcp.routers.giteaSSH.service=giteaSSH"
      - "traefik.tcp.routers.giteaSSH.rule=HostSNI(`*`)"
      - "traefik.tcp.services.giteaSSH.loadbalancer.server.port=10022"

    logging:
      options:
        labels: "service_name"

volumes:
  gitea:
    external: true
