直入入正题,自建代码托管平台其实市面上早有成熟的方案,svn,gitlab,gitea等等。所谓低成本指的是只需一台远程云服务器即可,如果有多备份的需求则追加一台树莓派。随着个人代码量的增长,版本管理经历了本机SVN服务 —> 自建svn —> 自建svn与github并存 —> gitea —> 局域网gitea+远程gitea多备份。跳过中间的演变历程,接下来分享的是局域网gitea+远程gitea多备份的方案。
云服务器选择
远程代码托管需要自备云服务器,如今云服务器早已白菜价国内外的选择很多。特别到了年末各大云厂商的打折套餐相当给力。
搭建Gitea服务
作为个人代码的托管的首选gitea服务,原因也很简单,得益于golang的特性,gitea的配置比gitlab简单,基本就是开箱即用的程度。
参考官方文档使用二进制安装即可:
wget -O gitea https://dl.gitea.io/gitea/1.9.3/gitea-1.9.3-linux-amd64
chmod +x gitea
虽说可以使用官网推荐的服务方式运行,但配合screen却是最简单的
screen ./gitea web
启动后,可以在当前目录下找到custom/conf/app.ini文件,对端口和存放路径做一些个性化调整。
[repository]
ROOT = /home/git/gitea-repositories
[server]
SSH_DOMAIN = localhost
DOMAIN = xxx.xxx.xxx
HTTP_PORT = 6666
ROOT_URL = http://xxx.xxx.xxx:6666/
DISABLE_SSH = false
SSH_PORT = 22
LFS_START_SERVER = true
LFS_CONTENT_PATH = /home/git/data/lfs
LFS_JWT_SECRET = xxxxxxxxxxxx
OFFLINE_MODE = false
仓库镜像管理
gitea服务搭建完成后,除了自己的项目外还可以同步外部镜像,用于镜像加速。
以上步骤已经完成的自建代码托管的全部流程。接下来的树莓派只属于锦上添花,如无必要无需往下阅读
树莓派备份节点
树莓派的应用场景很多,路由器、电视盒子、自建NAS等等都能得到极好的体验。加之低功耗比较合适用来做备份节点。本文使用的是3B+版本(最新的树莓派4有更好的性能)。树莓派官方暂未放出64位版本系统(32位版本系统偶有卡顿),而要发挥出64位硬件的性能只能使用开源的64位的系统。
刷好64位系统,在树莓派上安装gitea。然后重复上面的仓库同步任务就基本完成了代码仓库的局域网备份。在github或外网无法提交时可以先提交到局域网仓库,网络好转时同步到外网即可。
顺带一提很多人会质疑树莓派的性能如何。就我近一年的使用来看,3B+在64位系统的表现来看丝毫不比1核1G的云主机逊色。通常将树莓派当做验证环境使用,下图是其中一台树莓派部署的任务详情。3台树莓派可以组成一个集群验证更复杂的情景。
Nextcloud文件管理
其实写到这里已经超出锦上添花的范畴了。但程序开发时不光是纯粹的文本代码。一些常用的开发工具和大型文档提交到git上会造成极大地性能损耗。如程序的迭代版本打包通常是发布在ftp或云存储上。这时候你可以选择百度云盘等,但下面会介绍一种更友好的文件同步工具——NextCloud。
NextCloud是近年来少有良心私有化云盘开源方案。因服务器上PHP版本是7.0的,选用的15.0.12的版本。最新的版本需要升级到PHP 7.2。为什么说NextCloud良心呢?主要是文档相当完备,安装向导上事无巨细都帮你考虑到了。甚至MySQL上的utf8mb4兼容问题都帮你解答好了。
附上地址:https://docs.nextcloud.com/server/15/admin_manual/installation/index.html
需要微调的是上传文件大小,默认文件最大是512M改成2G的话,编辑文件/var/www/nextcloud/.user.ini
,修改如下配置:
upload_max_filesize=2G
post_max_size=2G
memory_limit=512M
mbstring.func_overload=0
always_populate_raw_post_data=-1
default_charset='UTF-8'
output_buffering=0
还得修改PHP配置,编辑文件/var/www/nextcloud/.htaccess
,修改如下配置:
<IfModule mod_php5.c>
php_value upload_max_filesize 2G
php_value post_max_size 2G
php_value memory_limit 512M
php_value mbstring.func_overload 0
php_value always_populate_raw_post_data -1
php_value default_charset 'UTF-8'
php_value output_buffering 0
<IfModule mod_env.c>
SetEnv htaccessWorking true
</IfModule>
</IfModule>
<IfModule mod_php7.c>
php_value upload_max_filesize 2G
php_value post_max_size 2G
php_value memory_limit 512M
php_value mbstring.func_overload 0
php_value default_charset 'UTF-8'
php_value output_buffering 0
<IfModule mod_env.c>
SetEnv htaccessWorking true
</IfModule>
</IfModule>
下载PC客户端后,可以很方便的同步文件。
在Web端对文件进行删改也会同步到本地
写在最后
自建代码托管和文档管理系统并不是什么刚需,只是代码和文档积累到了自身难以管理的程度的无奈之举。自建的方式虽不复杂,但还是存在一些物质上的成本。也完全可以选用免费的解决方案替代(免费的私有仓库+云盘)。愿每个程序员的代码和文档都能得到妥善的安置。