徐高翔的个人网站

Gogs配置使用详解

2018-08-25

软硬件环境

  • 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的用户来讲,绝对是个福音(配置高的买不起啊),还有一点比较吸引人的是,在Gogs上新建仓库,可以选择私有项目,这点要想在github上实现,就必须出点美刀了。

Gogs安装

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

1
2
3
4
5
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,

1
2
3
4
5
cd /home/git
tar xvf linux_386.tar.gz
cd gogs
mysql -u root -p < scripts/mysql.sql
./gogs web

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

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

全站HTTPS

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

Gogs自签名

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

1
2
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中添加二级域名如下

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

nginx配置文件

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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字段

1
2
3
4
5
6
[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插件

1
apt-get install python-certbot-nginx

证书申请

1
certbot --nginx

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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服务

1
/etc/init.d/nginx restart

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

验证git仓库的下载和提交

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

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

1
2
3
4
5
6
7
8
9
10
11
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

参考资料

本文链接 https://xugaoxiang.com/2018/08/25/Gogs配置使用详解/

推荐文章(由hexo文章推荐插件驱动)

使用支付宝打赏
使用微信打赏

请博主喝咖啡!