搭建使用 Let’s Encrypt 的 Git 服务网站

目标

  • 搭建一个私有的 Git 服务网站用于存放作业等非公开项目
  • 不需要开放注册,最好有 HTTPS
  • 邮件通知最好是有的(其实没有也无所谓)

使用的主要服务及软件

  • Apache2:网站服务器软件
  • Let’s Encrypt:免费 HTTPS 证书源
  • Gogs:Git 服务网站

搭建流程

    1. 参考 Gogs 官方文档搭建好 Gogs 服务,先使用自带的网页服务测试是否能够正常运行 Gogs。
    2. 安装 Apache 2 用于提供网页服务,能显示出来刚装好的示例页面就可以,这里还涉及不到转发。使用 Apache 2 而不是直接利用 Gogs 自带的网页服务的理由主要有两点:
      • 80 端口和 443 端口只能被 root 用户利用,所以使用 git 用户运行的 Gogs 无法直接使用 80 或 443 端口,虽然该问题可通过配置 iptables 转发进行解决,但是转发却无法解决下面的问题;
      • 想要通过 Let’s Encrypt 的 bot 简单直接的获取证书,他的 bot 会注入一个网页来验证网站的所有者,如果使用 Gogs 自带的网页服务需要手动插入一个网页然后再手动验证,十分麻烦,使用 Apache 是最简单直接的方法,全自动一步到位,git 证书到手。
    3. 使用 Let’s Encrypt 的 Bot 为网站获取证书,跟着他官网教程走就好。(在这里我选的是把所有 HTTP 服务重定向到 HTTPS,所以之后修改网页代理我也只修改了 <name>-le-ssl.conf)。
    4. 为 Apache 启用 proxy 和 proxy_http 插件。
    5. 修改虚拟主机的配置,为 Apache 添加反向代理,主要是添加下面四行(7480 是我设置的 Gogs 网页服务的端口,可以根据需求修改):
      ProxyPreserveHost On
      ProxyRequests off
      ProxyPass / http://127.0.0.1:7480/
      ProxyPassReverse / http://127.0.0.1:7480/
      
    6. 修改 Gogs 配置,把涉及端口和协议的部分修改好,主要是下面的几个,域名和端口看情况修改:
      [server]
      PROTOCOL         = http
      HTTP_PORT        = 7480
      DOMAIN           = git.mrwhoami.com
      ROOT_URL         = https://git.mrwhoami.com/
      
    7. (可选)为 Gogs 添加开机启动服务,参考官方 FAQ
    8. 重启 Gogs 服务和 Apache2 服务。

注意事项

  • 每次修改 Apache 2 的配置记得 restart 或者 reload 服务。
  • Email 可以通过配置 SMTP 解决,也是参考 Gogs 官方文档就好,发不出去有可能是VPS 或者 IPS 给屏蔽了,请联系服务提供商。
  • Gogs 配置里的 Protocol 依然是 HTTP,实际 HTTPS 是由 Apache 验证的。Gogs 的本地端口可以通过防火墙限制外来访问,这样外部就只存在 HTTPS 或者 SSH 访问了。

发表回复