魔百盒折腾记——搭建自己的github
系列文章
- 魔百盒折腾记
- 魔百盒折腾记——救砖
- 魔百盒折腾记——刷机
- 魔百盒折腾记——搭建自己的视频服务
- 魔百盒折腾记——内网穿透(原理篇)
- 魔百盒折腾记——内网穿透(实操篇)
- 魔百盒折腾记——搭建自己的github【当前文章】
- 魔百盒折腾记——搭建自己的网盘
一、背景
在学习过程中,总是会写一些小工具。就我个人而言,有多台设备。经常会换设备,甚至搞坏系统。那么给这些代码找一个集中的家
就非常有必要了。于是,产生了一个非常自然而又实际的需求——使用git仓库来管理这些代码。
很多种选择,可以使用github、gitlab之类的国外的开源代码托管网站,也可以使用国内的如码云之类的,还可以直接使用一个nas目录的。但是,无论选择哪种都有各种缺陷。国外的网络不稳定,经常抽风无法访问,搭梯子费事又费钱。国内的又有各种限制,文件大小、访问形式等等,也是烦不胜烦。甚至可能完全无法使用,比如我曾经使用了一个语言模型,就超出了码云对单个文件大小的限制,以至于无法上传,很是郁闷。nas目录的话又不方便管理和维护。
最终,我选择自建一个git服务器,基本的要求如下:
- 可以给项目分组,比如,根据不同用途、不同语言对各种项目进行分组管理。
- 每个工程可以有一些简单的介绍,以便日后可以方便快速地唤醒沉睡的记忆。
- 支持搜索,以方便以后查找。
- 方便运行和维护,毕竟是自己搭建的,没有那么多精力去运行和维护它,一定要尽量做到免维护、自动备份。出了问题随时恢复。
- 如果支持多用户,可以方便地分享给其他人就更好了。
简单来说,就是想自己搞一个github网站自己用,不需要跟github一样强大,但是,核心的功能当然是越多越好。
二、自建git服务器
开源的git服务器有很多,重量级最有名的就是gitlab,功能很全。但是,太耗资源了。管理、升级都很复杂。很多年前刚刚使用git时,曾经用搭建过一个,整整花了两天时间才搭好。记得当时的电脑还都是4G内存左右,gitlab运行就需要4G内存以上,为此还稍稍下狠心配了8G内存。不过,当初还是从微软的Visual Source Safe升级过来的,使用体验非常好,简直就是从农业时代直接进入了信息时代。
后来无意中发现了gogs这个服务器,一下子就被吸引住了。非常轻量级,只需要一个可执行文件即可运行,配置文件也非常清晰明了。并且也是通过这个程序才开始体会到go语言的那种单文件可执行程序带来的巨大便利性。
再后来又发现了一个基于gogs分叉出来的gitea,同样非常轻量级,配置文件也非常清晰。但是,比gogs功能更加丰富。
至于使用gitea还是gogs,完全看个人选择。gogs对于新手更加友好一些,更容易入门。gitea的文档也很完善,但是,因为功能多,所以,文档也会更复杂一些。
我曾经使用了很多年的gogs,但是,后来总觉得gogs对markdown的支持实在太鸡肋了。自己虽然也尝试加过一些特性,但是,总归无法合并到官方版本中,每次升级再改一遍很麻烦。于是,心一横切换到了gitea。至今没有起过对它动刀的念头。所以,下面的介绍均以gitea为主,gogs的方法相似。
三、gitea搭建方法
3.1 手动搭建
-
下载二进制包
在GITHUB上面下载最新的二进制包即可,下载地址:
https://github.com/go-gitea/gitea/releases
如果无法访问github的话,也可以尝试去官网下载,地址为:
https://dl.gitea.com/gitea/
例如,我在魔百盒中就可以使用下面的命令:
wget https://dl.gitea.com/gitea/1.19.2/gitea-1.19.2-linux-arm64 chmod a+x gitea-1.19.2-linux-arm64
-
运行程序
非常简单,只需要下面一个命令即可。
./gitea-1.19.2-linux-arm64
-
安装与配置
在浏览器中访问:
http://IP:3000
即可进入gitea的安装页面。安装方法非常简单,只是需要设置一个数据库、配置一下默认选项、并添加管理员账号即可。这个时候所选择的所有配置都会被保存到gitea程序所在的data目录中。如果需要可以删除重建或者自己修改其中的配置文件注意:
- 对于个人或者用户量比较少的情况,建议选择sqlite3。可以减少部署难度,也方便备份可恢复。
- 在正式使用前多做一些验证,等熟悉以后在转正式使用。这样可以避免掉很多弯路。
- 如果想作为生产力工具使用,建议通读一遍官方文档。
-
作为服务启动
跟其他服务一样,自己写一个简单的service文件即可,例如:
/etc/systemd/system/gitea.service
[Unit] Description=gitea service After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple ExecStart=/opt/gite/gitea # ExecReload=target_dir/restart.sh # ExecStop=target_dir/shutdown.sh SuccessExitStatus=0 [Install] WantedBy=multi-user.target
管理命令跟其他服务一样:
- 启动:
systemctl start gitea
- 开机自动启动:
systemctl enable gitea
- 停止:
systemctl stop gitea
- 重启:
systemctl restart gitea
- 启动:
3.2 使用docker搭建
无论何时何地,但凡可以使用docker,都是推荐使用docker来搭建服务的。除了docker本身带来的好处之外,还有很多额外的好处。比如手动搭建时其实还可能会遇到好多问题,比如git、比如各种权限问题等等。
如果想给data目录换个位置,docker部署的话,可以做到无缝支持。而手动搭建的就会非常麻烦。因为每个工程的配置文件中都会有路径名,不更改就会各种报错,更改的话又是一个不小的工作量。建立软连接也行,总觉得不那么优雅。
dacker部署gitea非常容易,只需要一个命令:
docker run -itd -p 3000:3000 -v `pwd`/data:/data -v `pwd`/db:/db gitea/gitea:latest
启动成功后,依旧是去web界面中配置安装即可。
如果想要开启ssh,可以修改data/gitea/conf/app.ini
中关于ssh的配置项,然后再把ssh的端口从docker容器中映射出来就可以了。
3.3 高可用
对于个人用户或者用户量比较少的情况而言,高可用的意义不大。因为高可用必然会带来高成本,用户量少也就无法均摊成本。但是,数据的自动备份一定是需要的。比如使用双硬盘,然后用rsync
做同步实现主备。比如,通过shell+cron定时备份数据,实现每日或者每周备份,然后再定期进行刻盘存档或者使用多磁盘存档。
四、内网穿透
经过上面的一番努力后,在局域网中就可以快乐地使用自己的git服务器了。如果想通过公网访问,就要再次请出内网穿透这个老伙计了。具体方法可以参考《魔百盒折腾记——内网穿透(实操篇)》。下面是frpc中的参考配置如下:
[gitea_web]
type = http
local_ip = 127.0.0.1
local_port = 3000
subdomain = gitea
[gitea_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 3001
remote_port = 3001
五、其他
这儿仅仅是一些很简单的入门配置。您如果真的要使用,还可能会遇到各种各样的问题。比如,手动部署的话会遇到git权限问题、ssh服务的调用问题等等。如果使用docker部署,也可能会遇到各种端口的困惑。如果再使用了内网穿透,就更加会面临安全方面的一些风险。只有在不停犯错,不停寻找解决方案的过程中,才能学习并锻炼自己。也才可以从这个过程中学习到别人的设计优点,再应用到自己的工作中,不停实践、不停改进、不停成长。
系列文章
- 魔百盒折腾记
- 魔百盒折腾记——救砖
- 魔百盒折腾记——刷机
- 魔百盒折腾记——搭建自己的视频服务
- 魔百盒折腾记——内网穿透(原理篇)
- 魔百盒折腾记——内网穿透(实操篇)
- 魔百盒折腾记——搭建自己的github【当前文章】
- 魔百盒折腾记——搭建自己的网盘