Skip to content

利用gogs为本地搭建git服务器

gogs是一个用go仿的github,得益于go的编译成二进制文件,可以方便在所有平台布署。

1. 安装数据库,可选mysql postgresql 我这使用了postgresql. 安装方式在官网有详细说明https://www.postgresql.org/download/,本次使用的ubuntu虚拟机

Terminal window
# 添加源:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
#添加key
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
#安装:
sudo apt-get update && sudo apt-get -y install postgresql

2. 配置数据库,填加一个用户和一个gogs数据库

Terminal window
#切换到root
su
#新建一个用户专用一个数据库提高安全性
useradd dbGogs
#进入PostgreSQL控制台,psql单独使用只有默认的postgres用户可以使用,这个相当于数据库的超级用户
su postgres
psql
#为postgres设置一个密码
\password postgres
#创建数据库用户dbGogs,并设置密码。
CREATE USER dbGogs WITH PASSWORD 'password';
#创建用户数据库,这里为gogsDB,并指定所有者为dbGogs。
CREATE DATABASE gogsDB OWNER dbGogs;
#将gogsDB数据库的所有权限都赋予dbGogs,否则dbGogs只能登录控制台,没有任何数据库操作权限。
GRANT ALL PRIVILEGES ON DATABASE gogsDB to dbGogs;
\q

3.安装配置gogs

  • 先切换回普通用户,建议新建一个专用的gitGogs用户
useradd gitGogs -md /home/gitGogs
su gitGogs
Terminal window
#解压
unzip gogs_0.12.2_linux_amd64.zip
#if tar.gz
tar -zxvf gogs_0.12.2_linux_amd64.tar.gz
#安装
./gogs/gogs web

这里的localhost 为本机,如果你的服务器不是在本机而是在nas上或者树梅派软路由之类的那么这里要写个域名比如:git .me,然后通过路由器或者host进行映射

4.配置守护进程,下载的程序里有个script文件夹,我这是linux系统把 script/system/gogs.service 复制一份到/etc/systemd/system/gogs.service 并修改

[Unit]
Description=Gogs
After=syslog.target
After=network.target
After=mariadb.service mysqld.service postgresql.service memcached.service redis.service
[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
Type=simple
User=gitGogs
Group=gitGogs
WorkingDirectory=/home/gitGogs/gogs
ExecStart=/home/gitGogs/gogs/gogs web
Restart=always
Environment=USER=gitGogs HOME=/home/gitGogs
# Some distributions may not support these hardening directives. If you cannot start the service due
# to an unknown option, comment out the ones not supported by your version of systemd.
ProtectSystem=full
PrivateDevices=yes
PrivateTmp=yes
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target

运行systemctl start gogs,设置开机启动systemctl enable gogs

5.使用nginx反代(可选)如果你是用的root用户也可以选择修改守护配置文件为/home/gitGogs/gogs web --port 80.非root用户只能使用1024以下端口,gogs默认使用的为3000端口,访问git.me要使用http://git.me:3000这样。如果不想加端口那么配置一下nginx反射代理就可以了。

Terminal window
#安装依赖:
sudo apt install curl gnupg2 ca-certificates lsb-release
#添加源:
echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
#添加密钥:
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
#安装
sudo apt update && sudo apt install nginx
  • 添加nginx配置
cd /etc/nginx/conf.d/
touch git.me.conf
vi git.me.conf
server {
listen 80;
server_name git.me;
access_log /var/log/nginx/git.me.access.log main;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
  • 启动nginxsystemctl start nginx配置开机启动systemctl enable nginx

这个仓库的密钥不能和nas的登陆密钥一样,不然报does not appear to be a git repository错误,解决办法是更换一个

6.配置天翼云备分

基本思路是用cron运行shell脚本,配合天天翼云盘的cli进行备分。cli可以自己选用,我这用是cloundpan189-cli

先写脚本,gogs备分目录为/home/zzerd/gogs-backup,根据实际情况改写。

/bin/bash
DEST=/home/zzerd/gogs-backup
# 本地保留最近三次的备分,删除其它的。
find $DEST -name "*.zip" |xargs ls -1t | tail -n +4 | xargs rm -f
#gogs 备分
/home/zzerd/gogs/gogs backup --target /home/zzerd/gogs-backup
#云端只保最新的删除旧的,因为删除到回收站也会有30天才删除的。
/home/zzerd/bin/c189 rm /git-server
/home/zzerd/bin/c189 mkdir /git-server
#取最新的文件名
backName=$(ls -1t /home/zzerd/gogs-backup | head -n 1)
#up clound 189
/home/zzerd/bin/c189 u /home/zzerd/gogs-backup/$backName /git-server/

配置cron输入crontab -e,编辑

Terminal window
#星期一1点0分执行上面写好的脚本,并且不要执行日志邮件
0 1 * * 1 /bin/sh /home/zzerd/shell/gogs_back.sh >/dev/null 2>&1