利用gogs为本地搭建git服务器
gogs是一个用go仿的github,得益于go的编译成二进制文件,可以方便在所有平台布署。
1. 安装数据库,可选mysql postgresql 我这使用了postgresql. 安装方式在官网有详细说明https://www.postgresql.org/download/,本次使用的ubuntu虚拟机
# 添加源:sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
#添加keywget --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数据库
#切换到rootsu
#新建一个用户专用一个数据库提高安全性useradd dbGogs
#进入PostgreSQL控制台,psql单独使用只有默认的postgres用户可以使用,这个相当于数据库的超级用户su postgrespsql
#为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/gitGogssu gitGogs
-
(https://dl.gogs.io/)这里选择下载系统适用的版本,如本次是linux amd64平台的。
-
解压并运行安装
#解压unzip gogs_0.12.2_linux_amd64.zip
#if tar.gztar -zxvf gogs_0.12.2_linux_amd64.tar.gz
#安装./gogs/gogs web
- 浏览器打开(http://localhost.com:3000/)进行安装,首次安装填写我们上面配置的好数据库名dbGogs 数据库用户密码dbGogs password(根据实际情况改)
这里的localhost 为本机,如果你的服务器不是在本机而是在nas上或者树梅派软路由之类的那么这里要写个域名比如:git .me,然后通过路由器或者host进行映射
4.配置守护进程,下载的程序里有个script文件夹,我这是linux系统把 script/system/gogs.service 复制一份到/etc/systemd/system/gogs.service 并修改
[Unit]Description=GogsAfter=syslog.targetAfter=network.targetAfter=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=65535Type=simpleUser=gitGogsGroup=gitGogsWorkingDirectory=/home/gitGogs/gogsExecStart=/home/gitGogs/gogs/gogs webRestart=alwaysEnvironment=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=fullPrivateDevices=yesPrivateTmp=yesNoNewPrivileges=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反射代理就可以了。
#安装依赖: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; }}
- 启动nginx
systemctl 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,根据实际情况改写。
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
,编辑
#星期一1点0分执行上面写好的脚本,并且不要执行日志邮件0 1 * * 1 /bin/sh /home/zzerd/shell/gogs_back.sh >/dev/null 2>&1