欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

Gogs配置使用详解

IT技巧 迷途小书童 5年前 (2020-01-15) 8850次浏览 0个评论

软硬件环境

  • ubuntu 16.04 on vps
  • nginx 1.10.3
  • tomcat 8.5.23
  • gogs 0.11.53
  • godaddy
  • mysql 5.7.23

视频看这里

Gogs是什么

Gogs官方的定义是这样的

Gogs的目标是打造一个最简单、最快速和最轻松的方式搭建自助Git服务。使用Go语言开发使得Gogs能够通过独立的二进制分发,并且支持Go语言支持的所有平台,包括LinuxmacOSWindows以及ARM平台。

Gogs是一个类似githubgitlab的基于git的代码托管平台,是一款开源软件,配置非常简单,中文支持得非常好,你完全可以在你的服务器上搭建,而且它还是轻量级的,占用的资源较gitlab少了很多,对于一些使用vps的用户来讲,绝对是个福音(配置高的买不起啊),如果还没有VPS的话,建议购买搬瓦工VPS,综合性价比很高。

Gogs安装

首先我们创建一个新的系统用户,专门用于git相关的操作

sudo apt install git mysql-server

sudo adduser git
su git
cd /home/git/

我们这里全程以新创建的git用户来安装Gogs,当然也可以root来操作,最后做一下chown,防止系统权限问题。

下载地址 https://github.com/gogs/gogs/releases,由于我的vps是32位的ubuntu系统,所以选择下载的是linux_386.tar.gz,

cd /home/git
tar xvf linux_386.tar.gz
cd gogs
mysql -u root -p < scripts/mysql.sql
./gogs web

安装过程傻瓜化,将对应的信息填上就可以了

gogs

gogs

gogs

安装完毕后,就可以直接登录站点使用了,如下图

gogs

全站HTTPS

首先我的主域名跑了个博客程序,是基于nginxtomcat的,现在想增加一个二级域名,比如code.xugaoxiang.com来跑Gogs,证书呢还是想用之前用过的let's encrypt

Gogs自签名

Gogs自带自签名证书的功能,但是,市面上大多数的浏览器都不信任,chromefirefox都是,如果没有其它特殊需要,不建议使用。生成证书的方法如下

cd /home/git/gogs
./gogs cert -ca=true -duration=8400h0m0s -host=code.xugaoxiang.com

生成了2个文件,cert.pemkey.pem

A和CNAME

域名解析中的A记录是IP解析,直接将域名指向某个IP,如果IP有所变动,那么A记录就必须更改。

CNAME是别名解析,是先将域名解析到主机别名再转跳到IP,这样就算主机IP改变了也不用重新解析。

由上可知,经常换IP的,建议用CNAME别名解析,不经常换IP,建议用A记录直接解析到IP。多线空间,必须用CNAME别名解析。

另外,CNAME解析的生效时间要比A记录快,A记录往往要几个小时至48小时,CNAME几分钟即可。

Godaddy中添加二级域名如下

gogs

由于生效需要一定时间,可以通过去ping你的二级域名来确定是否设置成功。

nginx配置文件

进入/etc/nginx/conf.d目录,新建对应二级域名的配置文件,如code.xugaoxiang.com.conf,内容如下

server {
    listen 80;
    server_name code.xugaoxiang.com;
    return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        server_name code.xugaoxiang.com;

    ssl on;

    root /home/git;

        ssl_certificate /home/git/gogs/cert.pem;
        ssl_certificate_key /home/git/gogs/key.pem;

        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        rewrite         ^/gogs/(.*) /$1 break;
                rewrite         ^/gogs$ /$1 break;

        proxy_pass http://localhost:3000;
    }

}

注意到上面的ssl_certificatessl_certificate_key用到了Gogs自签名文件,没有关系,这个配置文件会在接下来的let's encrypt证书申请过程中被更新。

Gogs配置文件

编辑gogs/custom/conf/app.ini中的server字段

[server]
DOMAIN       = code.xugaoxiang.com
HTTP_PORT    = 3000
ROOT_URL     = https://code.xugaoxiang.com
DISABLE_SSH  = true
OFFLINE_MODE = false

let’s encrypt的多域名证书

首先安装let's encryptnginx插件

sudo apt-get install python-certbot-nginx

证书申请

certbot --nginx

按照提示一步步安装,注意我们这里需要对多个域名进行https配置,在选择域名那一项时,直接按回车键,一切OK之后,相应的key文件也是存放在了/etc/letsencrypt/live/你的域名下,同时呢,certbot还会直接修改/etc/nginx/conf.d/下的各子域的配置文件,就是上步中的code.xugaoxiang.com.conf

server {
   if ($host = code.xugaoxiang.com) {
        return 301 https://$host$request_uri;
   } # managed by Certbot

    listen 80;
    server_name code.xugaoxiang.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name code.xugaoxiang.com;

    ssl on;

    root /home/git;

    ssl_certificate /etc/letsencrypt/live/code.xugaoxiang.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/code.xugaoxiang.com/privkey.pem; # managed by Certbot

    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        rewrite         ^/gogs/(.*) /$1 break;
        rewrite         ^/gogs$ /$1 break;

        proxy_pass http://localhost:3000;
    }

}

一切就绪后,重启nginx服务

/etc/init.d/nginx restart

再次访问https://code.xugaoxiang.com,浏览器地址栏的左边已经出现了小绿锁。

gogs

验证git仓库的下载和提交

比如https://code.xugaoxiang.com/xugaoxiang/BasicAPIs.git,用户名及密码就是注册时使用的用户名和密码。

gogs

使用中发现如果提交大文件会报错

Username for 'https://code.xugaoxiang.com': xugaoxiang
Password for 'https://xugaoxiang@code.xugaoxiang.com': 
Counting objects: 13, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (13/13), 14.43 MiB | 11.12 MiB/s, done.
Total 13 (delta 4), reused 0 (delta 0)
error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date

解决方法是

  • 编辑/etc/nginx/nginx.conf,在http字段内添加client_max_body_size 60m;
  • 配置git, git config --global http.postBuffer 60000000

备份与恢复

系统备份

执行命令

su git
cd /home/git/gogs
./gogs backup

备份完毕后,会在当前目录下生成带日期的压缩包,如gogs-backup-20190716012053.zip。通过ftp或者sftp这样的方式下载到本地保存

系统恢复

gogs系统恢复,折腾了好几个小时,最后终于搞定。命令是

./gogs restore --config custom/conf/app.ini -v --from ../gogs-backup-20190716012053.zip -t tmp

这里有几点需要注意:

  • git用户权限问题
  • app.ini问题,这里我使用的安装完后gogs自己生成的,如果用备份的则会失败
  • 不建议使用备份包解压的默认路径/tmp,可以在当前路径下自己创建一个然后加-t参数制定
  • 备份恢复与32bit/64bit系统无关

参考资料

喜欢 (0)

您必须 登录 才能发表评论!