zzerd

search

利用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'

#添加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数据库

#切换到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
  • (https://dl.gogs.io/)这里选择下载系统适用的版本,如本次是linux amd64平台的。
  • 解压并运行安装
#解压
unzip gogs_0.12.2_linux_amd64.zip

#if tar.gz
tar -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=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反射代理就可以了。

#安装依赖:
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,编辑

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

Copyright©2014 zzerd.com Rights Reserved 知止而定版权所有

感谢所有关心和支持过 zzerd.com的朋友们

粤ICP备15003502号-1