Gogs搭建
$Gogs$ 是一种用 $Golang$ 语言编写的 $Git$ 服务器,用法与 $Github$ 类似,特点是比较轻量级
Preprocessing
针对 $ubuntu$,安装 $Git$
sudo apt update
sudo apt install git
git --version # 验证
安装 $mysql$
sudo apt install mysql-server-8.0
安装 $ssh$
sudo apt install openssh-server
创建 $Git$ 用户,一个新的系统用户
sudo adduser --system --group --disabled-password --shell /bin/bash --home /home/git --gecos 'Gogs' git
会创建新用户并设置用户文件夹为
/home/git
创建并配置数据库
sudo mysql
# mysql> # 进入mysql
# 创建用户,xx代表密码
create user 'gogs'@'%' identified by 'xx';
# 赋予权限
grant all privileges on *.* to 'gogs'@'%' with grant option;
# 更改加密规则
ALTER USER 'gogs'@'%' IDENTIFIED WITH mysql_native_password BY 'xx';
# 刷新权限
flush privileges;
# 创建数据库
create database gogs;
Installing Gogs pkg
推荐使用二进制安装,
Gogs installation,找到自己的系统版本,下载压缩包
# 例如ubuntu
wget https://dl.gogs.io/0.12.10/gogs_0.12.10_linux_amd64.zip
解压到
/home/git
目录
sudo unzip -d gogs_*_linux_amd64.zip /home/git/
修改 $Gogs$ 安装目录的归属用户和归属用户组为 $git$
sudo chown -R git: /home/git/gogs
$Gogs$ 自带
systemd
单元文件,为了方便管理和配置,将它复制到系统管理员目录,这样可以设置开机自启动等功能
不过可能会遇到个小问题,因为 $Gogs$ 需要连接数据库,如果自启动时数据库还没启动的话,会报错
所以可以加个延时启动,在
Service
里面添加
RestartSec
# 报错
[FATAL] [...o/gogs/internal/route/install.go:75 GlobalInit()] Failed to initialize ORM engine: open database: dial tcp 127.0.0.1:3306: connect: connection refused
sudo vim /home/git/gogs/scripts/systemd/gogs.service
---
[Service]
RestartSec=120 # 延时120s
---
sudo cp /home/git/gogs/scripts/systemd/gogs.service /etc/systemd/system/
如果已经启动后,再修改,需要重新加载
systemd
的配置文件
sudo systemctl daemon-reload
开启 $Gogs$ 服务
sudo systemctl start gogs
sudo systemctl enable gogs
sudo systemctl status gogs # 验证状态
接下来就可以网页可视化安装了,进入
http://ip:3000
,默认是 $3000$ 端口,需要开启
根据上面的配置,设置,很多是默认好的。如果关闭注册,需要填写管理员账号,这样就完成了
Nginx proxy
现在 $Gogs$ 服务的 $url$ 地址是
http://ip:3000
,可以将它绑定到自己的二级域名上
gogs.example.com
$SSL$ 证书可以在
Let's encrypt 申请,并放到合适的位置,例如
/etc/letsencrypt/live/gogs.example.com/chain.pem
# 编辑nginx的配置
sudo vim /etc/nginx/sites-enabled/gogs.example.com
server {
listen 80;
server_name gogs.example.com;
include snippets/letsencrypt.conf;
return 301 https://gogs.example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name gogs.example.com;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
client_max_body_size 50m;
# Proxy headers
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
# SSL parameters
ssl_certificate /etc/letsencrypt/live/gogs.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gogs.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/gogs.example.com/chain.pem;
include snippets/letsencrypt.conf;
include snippets/ssl.conf;
# log files
access_log /var/log/nginx/gogs.example.com.access.log;
error_log /var/log/nginx/gogs.example.com.error.log;
# Handle / requests
location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:3000;
}
}
重启 $nginx$ 服务
sudo service nginx restart
然后修改 $Gogs$ 的配置文件,自定义配置 $Gogs$ 都可以在这里进行
sudo vim /home/git/gogs/custom/conf/app.ini
# 修改
[server]
DOMAIN = gogs.example.com
ROOT_URL = https://gogs.example.com/
# EXTERNAL_URL = https://gogs.example.com/
重启 $Gogs$ 服务
sudo systemctl restart gogs
$Over\ !$
Reference