欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

Gogs配置使用详解

IT技巧 迷途小书童 4年前 (2020-01-15) 7102次浏览 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)

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

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.