Noonisy
Gogs搭建
2022-09-05
阅读:408

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

最后编辑于:2022 年 10 月 03 日 23:15
邮箱格式错误
网址请用http://或https://开头