编辑
2023-05-25
Application
00
请注意,本文编写于 530 天前,最后修改于 374 天前,其中某些信息可能已经过时。

目录

一、环境准备
1. 下载二进制包
2. 创建gitea用户
3. 数据库初始化
二、安装配置
1. 安装
2. 配置nginx反向代理
3. systemd管理
4. 配置ssh密钥
三、遇到问题
四、参考文档

随着自己的服务越来越多,目前大概几十个,有些放在Github上,有些直接是放在本地的磁盘上,另外还有些自动化管理脚本,备份以及恢复脚本,内容管理工具等等,总体上比较杂乱,需要一个版本管理工具来系统记录一下。之前安装过Gogs,感觉也不错,可是当时没有太深入探究,倒是也能运行,遇到了不能使用ssh管理仓库的问题,然后就搁置了。前几天越发觉得需要一个这样的工具,于是找到了Gitea。Gitea是从Gogs这个开源代码Fork过来的,稍微了解了下两者的关系,多少有点恩怨的意思,如果描述属实,我还是比较站Gitea。

here is the test line, which will be seen on https://blog.rustle.cc/gitea, but can not be found on https://blog.rustle.cc/30

一、环境准备

整体思路:user → VPS(frps) → CrossChain(frpc) → CrossChain(nginx)

和其他火爆的应用一样,Gitea支持非常多种安装方案,具体可以参考Gitea文档,一如既往,这里还是选择使用本地化二进制安装包部署的方式,虽然最近我也有在了解Docker,并且安装了Docker和Docker的图形化管理工具Portainer,目前还在研究阶段,等了解差不多了之后可能会考虑这种部署方式。

1. 下载二进制包

https://dl.gitea.com/gitea/下载gitea,放在系统路径下,建议是`/usr/local/bin/`目录下,让所有人都可以访问。

bash
wget -O gitea https://dl.gitea.com/gitea/1.19.3/gitea-1.19.3-linux-amd64 chmod +x gitea mv gitea /usr/local/bin/

2. 创建gitea用户

因为gitea不支持root用户安装使用,所以需要为这个应用单独创建一个用户,而且是需要可登录类型的,密码可以设定,也可以不设定。另外还要准备gitea安装的相关目录,并且owner要设定为之前新建的用户。

bash
adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/gitea gitea mkdir -p /opt/webdav/gitea/ mkdir -p /opt/webdav/gitea/custom/conf mkdir -p /opt/webdav/gitea/data mkdir -p /opt/webdav/gitea/log touch /opt/webdav/gitea/custom/conf/app.ini chown -R gitea:gitea /opt/webdav/gitea/

3. 数据库初始化

如下应该也是比较常见的初始化MySQL数据库的语句,之前搭建nextcloud,koel,jellyfin,cloudreve或者monica的时候都用过好多次,文档中也给出了基本示例,可以参考。

sql
CREATE DATABASE gitea CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'; CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'PASSWORD'; GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost'; FLUSH PRIVILEGES; # Delete if necessary DROP DATABASE gitea; DROP USER 'gitea'@'localhost';

二、安装配置

gitea有着完善的文档支持,而且源码在Github上托管,理论上在安装配置以及使用上,有任何问题都能够在上面找到issue,我自己在实践的过程中也遇到了一些问题,大多也是这样解决的。

1. 安装

bash
sudo -u gitea gitea web --install-port 8111 --custom-path /opt/source-code/gitea/custom/ --work-path /opt/source-code/gitea/ --config /opt/source-code/gitea/custom/conf/app.ini

之前说过,gitea是不允许使用root权限安装的,所以需要使用创建好的新用户执行如上命令,控制台输出没问题的话,我们就可以打开浏览器,输入http://localhost:8111,此时应该可以看到如下界面。

上述使用的是域名访问,因为我提前做了域名解析,并通过frp透传到内网的8111端口所部署的服务——Gitea,如下是刚安装好的时候的界面,看起来还是比较清爽的。

2. 配置nginx反向代理

在第一步中,看到可以使用域名进行访问,这里是需要配置nginx反向代理之后才能实现,gitea文档中也贴心的给出了相关的配置,可参考修改,如下是我线上环境的配置。

server { server_name gitea.rustle.cc; listen [::]:443 ssl http2; listen 443 ssl http2; charset utf-8; access_log logs/gitea.access.log main; ssl_certificate /opt/configs/certs/rustle.cc.cer; ssl_certificate_key /opt/configs/certs/rustle.cc.key; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header Cache-Control no-cache; proxy_pass http://localhost:8111; # 如果您要使用本地存储策略,请将下一行注释符删除,并更改大小为理论最大文件尺寸 client_max_body_size 4000M; } }

3. systemd管理

大部分情况下使用systemd来管理服务还是非常方便的,如下算是通用流程了,其他服务也可以参照修改。

bash
cp gitea.service /lib/systemd/system/ systemctl daemon-reload systemctl start gitea.service # 如下是service内容 # [Unit] # Description=Gitea # After=syslog.target # After=network.target # # [Service] # RestartSec=2s # Type=simple # User=gitea # Group=gitea # ExecStart=/usr/local/bin/gitea web --port 8111 --custom-path /opt/webdav/gitea/custom/ --work-path /opt/webdav/gitea/ --config /opt/webdav/gitea/custom/conf/app.ini # Restart=always # # [Install] # WantedBy=multi-user.target

4. 配置ssh密钥

和Github使用方法完全一致,使用ssh-keygen -t rsa -b 4096 -C "mffan0922@163.com"命令生成id_rsa和id_rsa.pub两个文件,将后者配置在Gitea网站上,前者自行保留,配置到客户端~/.ssh/config文件中即可。

三、遇到问题

整体过程中,遇到的问题只有一个,那就是配置好ssh之后,无法使用ssh进行clone/push/pull等操作,先说结论:原因是,服务部署在内网,访问时是通过frp进行透传导致的。另外,之前Gogs的问题应该也是相同的原因导致的。

默认app.ini配置文件中,监听的ssh端口是22,原来使用frp透传ssh访问的时候,用的是VPS的54321端口,所以使用ssh进行clone/push/pull操作的时候实际访问的是VPS的22端口,但是VPS上既没有gitea用户,也没有gitea服务,自然就会失败。这个时候有两种解决方案:一种是将VPS的22端口作为frp的ssh转发端口,VPS本身的ssh端口修改成其他的;另一种方案是,在VPS上配置gitea服务,则什么问题都没有。

很显然,使用后者不切实际,这里采用的是前者的方案,修改好之后ssh还是无法执行clone/push/pull等操作,最终还是在issue中找到了问题所在,需要先执行一下图示的两个任务,后面就很顺利的使用ssh的功能了。

另外,如果是使用Docker安装的Gitea,因为容器和宿主机需要端口映射,所以为了使得ssh操作顺利执行,宿主机的默认ssh端口22,要修改成别的,Container的ssh端口映射成宿主机的22号端口。不同的是,不需要执行上图中的两个任务,也能使用ssh功能了。

Warning

宿主机和VPS的22端口均不可以配置在/etc/ssh/sshd_config文件中,否则会被当成主机ssh服务端口进行访问

四、参考文档

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Manford Fan

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!