目录

如何拥有一个属于自己的 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 在资源占用和性能上的优势是非常明显的,因此它非常适合在硬件配置不高的服务器搭建。

官网:https://gogs.io

演示站:https://try.gogs.io/

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 端口。

/post_images/image-20211130223902655.png

二、配置域名与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 的配置,直接一步到位。

/post_images/image-20211130232845697.png

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

/post_images/image-20211130233728858.png

现在我们可以开始填写 Gogs 的配置了。

三、配置 Gogs

此时我们已经配置好了 HTTPS 访问,那么在配置 Gogs 中有几处域名的设置需要注意。下面是一份样例配置,几处需要注意的域名我用红框标注出来了。

/post_images/image-20211130235300442.png

填写完配置后,点击立即安装,就完成了。

/post_images/image-20211130235544814.png

那么剩下的就跟 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