众所周知,GitHub时常处于存在或是不存在的薛定谔状态之中,若是自己的代码托管在上面,在紧急情况时,必须使用魔法才能够获得。
显而易见的是,不是每个人都是魔法师。所以,若是有一个能够存储自己的代码,并且不会失联的托管网站就好了。
在国内规模比较大的代码托管网站是Gitee,但对于我们这种只想将自己的代码托管在网站上,而不指望有人fork的小透明来说,搭建一个属于自己的代码托管服务显然是最好的。
比较知名的开源托管服务有:GitLab,Gitea,Gogs等。
GitLab是功能最多,体量最庞大的。它至少需要4G的内存来支撑运行。但对于我们个人或是3-5人的小团队来说,冗杂而无必要的功能只会增加不必要的开销。
这是一张服务对比图,来自Gitea官网
Gogs和Gitea就不一样了,它们是基于Go语言的轻量级托管服务,甚至可以在资源有限的树莓派Zero等低端微型电脑上流畅运行(当然,处理时间会比高级的要长一些。)
Gitea在Gogs的基础上增加了许多很有必要的功能,如GPG签名提交等。但是内存占用量与Gogs相比差距较大,据我的测试,在树莓派上,Gogs会占用20-30M的运存,而Gitea占用100-200M内存,所以我不建议树莓派1、2、Zero等内存在1G以下的设备安装Gitea。
根据标题,我这一篇文章主要讲树莓派4B安装Gitea。至于树莓派Zero安装Gogs是另外一篇文章。
一、前期准备工作
1.首先要更新树莓派上的源和软件。
sudo apt update //更新源
sudo apt upgrade //升级软件包
2.安装依赖
sudo apt install mariadb-server git unzip
3.完成MySQL的安装(使用安全安装)
sudo mysql_secure_installation
在这一过程中会设置root用户的密码,这个要妥善保存,因为其他要使用MySQL服务的应用都可能要使用它。
4.进入MySQL命令行界面
sudo mysql -u root -p
之后你需要输入安装时设置的root用户密码。
5.创建gitea数据库
CREATE DATABASE gitea;
6.为了其他数据库安全起见,我们创建一个专门用来管理gitea数据库的用户
GRANT ALL PRIVILEGES ON gogs.* TO '用户名'@'localhost' IDENTIFIED BY '密码';
7.刷新特权表
FLUSH PRIVILEGES;
8.接下来可以用ctrl+d或者输入exit来退出MySQL命令行模式
9.与数据库类似,为了系统的安全,我们专门创建一个用于处理git相关事务的账户,用“ -disabled-login ”参数确保它不可作为登录的账户
sudo adduser --disabled-login git
我在此将之命名为git,但你也可以选择其他的命名方式,不过鉴于Gitea等配置时默认都是这个名字,还是建议不要改。
网图,我自己实现时并未截图。
二、开始安装Gitea
1.树莓派使用的Raspberry Pi OS属于Debian的一个分支,因此它属于Linux系统。而Gitea并没有针对Linux的独立安装包,因此我们只能通过二进制文件来安装。
cd /home/git
sudo wget https://dl.gitea.io/gitea/1.12.2/gitea-1.12.2-linux-arm64 -O gitea
现在我们已经将名为gitea的二进制文件下载到git用户对应的个人文件夹下了,下载链接会随时间或是系统而变化。我使用的是树莓派官方的测试版64位系统,因此要下载arm64版本,如果是正式版或是不同架构的设备,那就应该按照自己的情况选择对应的版本。附上下载地址。
2.接下来我们对它赋予可执行权限
sudo chmod +x gitea
之后我们就可以直接运行来测试一下了。
./gitea web
测试完可以直接ctrl+c终止运行来退出。
3.如果我们不想每次关掉命令行窗口服务都会中断,我们必须将之配置为service
有两种方式可以做到,本文只介绍其中的systemd方式,而另一种supervisor,请看官方文档。
首先,我们要在指定目录为它创建系统服务文件
sudo nano /etc/systemd/system/gitea.service
我在此使用的是nano,因为其操作简单,当然使用vim也是没问题的。
之后我们需要将官方的示例代码粘贴进去,并作出修改。
如果你按照之前的步骤配置,那么示例代码中仅有以下部分是必要的:
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/home/pi/gitea/ //工作目录,配置在gitea文件所在的目录即可
# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file
# (manually creating /run/gitea doesn't work, because it would not persist across reboots)
#RuntimeDirectory=gitea
ExecStart=/home/pi/gitea web --config /home/pi/custom/conf/app.ini //配置文件位于工作目录下的custom/conf文件夹中
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/home/pi/ //按照工作目录配置
# If you want to bind Gitea to a port below 1024, uncomment
# the two values below, or use socket activation to pass Gitea its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
###
[Install]
WantedBy=multi-user.target
配置完成后,保存退出,运行以下命令将服务加载,并启动。
sudo systemctl daemon-reload
sudo systemctl start gitea
如果想要开机自启,还必须运行以下命令:
sudo systemctl enable gitea
到此为止,安装完成。
三、配置Gitea
1.访问你服务器所在IP地址的3000端口就会进入主界面,地址格式如下:
http://<IP地址>:3000
界面如上图所示
2.接下来点击Sign In,第一次安装会跳转至配置界面
如上图所示
数据库类型我们选择MySQL,用户名和密码按照我们之前的配置,使用我们专属的giteauser即可。
域名和应用URL,如果有域名可以直接填写,没有的话可以稍后运行以下命令,编辑文件来配置:
sudo nano /home/git/custom/conf/app.ini
电子邮箱设置需要注意的是STMP服务器地址要带端口号,如:
stmp.qq.com:465
管理员账号不是必须的,因为系统会将创建的第一个账户默认为管理员。
可选设置可以按需要配置,如avatar等相关设置在国内就是无效的,需要魔法才能使用。
点击立刻安装,根据设备情况会花费不同时间,最后会看到以下界面,代表安装成功。
四、反向代理
我们会发现如果按照上述步骤做完,是不能直接通过域名访问Gitea网站的,因此我们需要做反向代理,通过Nginx或是Apache等反向代理服务来实现直接通过域名访问。
本文只介绍Nginx,Apache相关请看官方文档。
Nginx的反向代理官网上解释得很详细,本文只补充HTTPS相关内容。
要配置HTTPS,有两种方式,一种是在gitea的app.ini中,按照下图指示来配置:
我们需要在文件中设置:
PROTOCOL = https
CERT_FILE = /你的/证书/文件/地址/路径
KEY_FILE = /你的/私钥/文件/地址/路径
在此之后,需要在反向代理中将:
proxy_pass http://localhost:3000;
修改为:
proxy_pass https://localhost:3000;
以上是第一种方法,第二种方法是在Nginx配置文件中配置,下面给出一个配置样例:
server { //将http全部重定向为https
listen 80;
listen [::]:80;
server_name git.ourdocs.cn;
location / {
rewrite ^(.*)$ https://$host$1 permanent;
}
}
server {
# SSL configuration
#
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /home/pi/Csr/*.ourdocs.cn_chain.crt;
ssl_certificate_key /home/pi/Csr/*.ourdocs.cn_key.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
server_name git.ourdocs.cn;
location / {
proxy_pass http://localhost:3000;
}
}
修改完配置文件后,使用下述代码使Nginx重新加载:
sudo nginx -s reload
本教程到此结束,附上安装完成后的截图一张: