如何拥有一个属于自己的 Github ?
使用 Gogs 搭建私有 Git Server
自建 Git Server 有什么用?不用再忍受 Github 龟速网、无限数量私有库、数据不用托管在 Github 上,自己说了算。
本文会以 CentOS7 + Nginx + Gogs 为例,教你如何安装配置,拥有一个属于自己的 “Github” 。
Github 的过去
自从 GitHub 在 2018 年被微软收购后,每个账号都能免费创建 5 个私有库了,当时非常高兴,觉得 Github 有微软在背后站台,未来可期。但 3 年后却发生了一件事,又一次提醒了我,原来 Github 已经被资本收购了。
2021 年 7 月,由微软、OpenAI、GitHub 联合出品的自动代码生成 AI - Copilot 在推出后的第二天就深陷侵犯版权的质疑声中,惨遭开源社区网友炮轰。为了训练 Copilot ,GitHub 官方确认了他们会使用所有 GitHub 公开代码来训练 Copilot,并且不区分 License 类别。而在之前,明明官方有过 “Copilot是在GPL代码的基础上训练出来的” 这种说法,但之后 GitHub 的 CEO 又表示:“每天都有数百名 GitHub 的开发者在使用 Copilot ,如果预览版进展顺利的话,我们将计划在未来某个时候将其扩展为付费产品。",完全就是一副视 General Public License 如无物的样子。
富人和大公司带头冲版权,一边冲一边告诉大众,你们要遵守版权,不可以学我。(哄堂大笑
Why Gogs ?
大公司普遍使用的是内部开发的 Git Server,像我们这样的个人开发者,选择一个开源 Git Server 自行搭建是比较适合的。
我知道有几个不错的开源 Git Server 可以考虑:
- GitLab
- Gogs
- Gitea
- GitStack
最终,我选择 Gogs 的主要原因是它资源占用极低,你甚至可以用树莓派来搭建一个 Gogs,1C2G 的配置轻轻松松带 Gogs。
比之 GitLab,Gogs 在资源占用和性能上的优势是非常明显的,因此它非常适合在硬件配置不高的服务器搭建。
Github:https://github.com/gogs/gogs
一、安装 Gogs
adduser git #创建用户 git
passwd git #设置git用户的密码
groupadd git #创建用户组 git
usermod -G git git #将git用户添加到git用户组中
su git #切换到git用户shell
cd ~ #进入/home/git
wget https://dl.gogs.io/0.12.3/gogs_0.12.3_linux_amd64.zip #下载gogs
unzip gogs_0.12.3_linux_amd64.zip #解压gogs压缩包
su #切回root用户
cp /home/git/gogs/scripts/systemd/gogs.service /usr/lib/systemd/system/ #复制service文件
systemctl enable gogs.service #启用gogs服务(开机自启)
systemctl start gogs #启动gogs
systemctl status gogs #查看gogs运行状态
安装完成后,就可以用访问 http://ip:3000 配置 Gogs 了,不过我建议你别急着填下面的配置,先把 SSL 证书搞定,接着往下看吧。
如果无法访问,说明服务器入方向的 3000 端口没有打开。
请在服务器供应商(如阿里云或腾讯云等)提供的控制面板设置对应的 防火墙/安全组 规则,开放入方向的 3000 端口。
如果你使用了类似于宝塔之类的控制面板,请检查面板防火墙中是否中开放了 3000 端口。
二、配置域名与HTTPS
2.1、配置域名访问
将域名解析到服务器 IP 上,在 Nginx 配置文件中新增如下配置:
server
{
listen 80;
server_name git.yourdomain.com; # 域名修改为你自己的
location / {
proxy_pass http://localhost:3000;
}
access_log /www/wwwlogs/yourdomain.access.log;
error_log /www/wwwlogs/yourdomain.error.log;
}
这样就可以通过 HTTP 的方式访问 Gogs 了:http://git.yourdomain.com 。
我们接着配置 SSL 证书,先不急着填写 Gogs 的配置,直接一步到位。
2.2、配置 SSL 证书
你可以按照下面的 Nginx 配置为模板,来配置你的 Gogs 站点。
根据你的需求,你可以自由选择是否强制 HTTPS。
server
{
listen 80;
listen 443 ssl http2;
server_name git.yourdomain.com; # 域名修改为你自己的
ssl_certificate /xxx/xxx/xxx.pem; # 证书修改为你自己的
ssl_certificate_key /xxx/xxx/xxx.pem; # 证书修改为你自己的
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
# HTTP 重定向到 HTTPS
# if ($server_port !~ 443){
# rewrite ^(/.*)$ https://$host$1 permanent;
# }
# error_page 497 https://$host$request_uri;
# 反向代理
location / {
proxy_pass http://localhost:3000;
}
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
access_log /www/wwwlogs/yourdomain.access.log;
error_log /www/wwwlogs/yourdomain.error.log;
}
配置完成后,你就可以通过 HTTPS 的方式访问 Gogs 了:https://git.yourdomain.com
现在我们可以开始填写 Gogs 的配置了。
三、配置 Gogs
此时我们已经配置好了 HTTPS 访问,那么在配置 Gogs 中有几处域名的设置需要注意。下面是一份样例配置,几处需要注意的域名我用红框标注出来了。
填写完配置后,点击立即安装,就完成了。
那么剩下的就跟 Github 一样,添加 SSH Key 到自己的账户中,就可以愉快建库冲浪了。
Gogs 除了安装引导中的配置项,其实还有不少额外的配置。
在
custom/conf/app.ini
文件中修改相应配置项的值即可。完整配置项样例:https://github.com/gogs/gogs/blob/main/conf/app.ini
旧版本配置文件手册参考(中文):https://www.bookstack.cn/read/gogs_zh/advanced-configuration_cheat_sheet.md
REF
https://gogs.io/docs/installation/install_from_binary
https://gogs.io/docs/installation/configuration_and_run
https://www.zhihu.com/question/283143882/answer/434872781
https://www.bookstack.cn/read/gogs_zh/advanced-configuration_cheat_sheet.md