前言

①什么是 Gogs?

Gogs 是一款极易搭建的自助 Git 服务。

②Gogs使用介绍

Gogs是一款类似Github/GitLab的开源文件/代码管理系统(基于Git)。

③目前功能基本介绍

远程代码仓库管理
代码仓库权限分配、管理
团队管理
代码审查

④选择原因

Gogs是轻量级Git服务器的不二选择,因为GitLab比较重,对资源要求比较高,而且搭建流程相对复杂(使用docker搭建除外)。

我们可以看到Gogs的硬件要求:

最低的系统硬件要求为一个廉价的树莓派
如果用于团队项目管理,建议使用 2 核 CPU 及 512MB 内存
当团队成员大量增加时,可以考虑添加 CPU 核数,内存占用保持不变
相对于GitLab的2核4G起步,Gogs可以说是对硬件要求非常低了。

好了,下面开始详细的搭建流程。

1.环境准备

默认环境已经安装Nginx,Mysql,git,这里不做详细介绍。

不知道的可以参考这篇安装WordPress的配置教程:最新阿里(腾讯)云主机LANMP搭建WordPress详细教程

因为本次配置中我们使用到了邮箱,所以我们申请了域名邮箱。

域名邮箱建议使用网易免费企业邮箱或者腾讯企业邮箱。

2.下载与安装

下载linux 64位安装包:

wget https://dl.gogs.io/0.11.91/gogs_0.11.91_linux_amd64.tar.gz

解压:

tar -xvf gogs_0.11.91_linux_amd64.tar.gz

3.运行配置

①预置数据库

使用root用户登录:

mysql -u root -p 

为用户创建一个数据库(gogs):

mysql> create database gogs;

创建gogs用户并授予上面创建的gogs数据库所有权限:

mysql> grant all on gogs.* to gogs@localhost Identified by "19921111Yasin#$";
mysql> flush privileges;

grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”

②配置Nginx

因为gogs默认使用3000端口,所以我们将80端口对gogs的请求反向代理到3000端口。

增加Nginx配置文件:

vim /etc/nginx/conf.d/gogs.conf

添加下面的内容:

server {
    listen 80;
    server_name gogs.site;   # 修改为你的域名
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
    }
}

server {
   server_name www.gogs.site;
   return 301 $scheme://gogs.site$request_uri;
}

重启Nginx:

systemctl restart nginx

③创建git用户

# 创建用户 git
adduser git
# 修改文件夹权限
chown git:git gogs -R

④创建gogs服务

首先修改配置文件,将gogs工作目录修改为你自己存放的目录:

cd gogs
vim scripts/systemd/gogs.service

主要修改配置文件中的WorkingDirectoryExecStart

[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=git
Group=git
WorkingDirectory=/yasin/gogs
ExecStart=/yasin/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git

# 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

将服务文件复制到system文件夹:

cp scripts/systemd/gogs.service /etc/systemd/system/

设为开机启动:

systemctl enable gogs.service

启动服务:

systemctl start gogs.service

查看状态:

systemctl status gogs.service

⑤安装配置

上面一切正确的话,我们打开网页输入我们的域名就可以进入首次安装配置了。

(1)数据库配置

填写我们上面预置的账号和密码:

gogs.mysql

(2)应用基本设置

根据你自己的配置进行填写:

gogs_app

(3)邮件服务设置

填写自己邮箱的SMTP服务器地址:

gogs_mail

这里要注意的是,上面网易免费企业邮箱的SMTP地址应该为smtp.ym.163.com

注意,邮件配置这里坑比较多,在配置完邮箱后发现还是不能发送邮件。但是这时候使用Foxmail是可以连接邮箱并发送邮件的,于是排查服务器本身。

发送测试邮件示例:

gogs_mail_test

最终发现是云主机服务商把25端口给封了,这时候需要去阿里云或者腾讯云申请解封25端口,具体流程就不叙述了。

申请解封完再选择发送测试邮件,终于成功了!

gogs_mail_ok

⑥配置HTTPS

因为环境采用的LANMP配置,所以Aapache和Nginx都需要配置。

(1)安装ssl模块

如果已经安装可以跳过。

yum -y install mod_ssl

(2)修改Apache配置

使用命令httpd -M查看已安装的模块,默认开启,没有的话在http.conf配置文件中开启下面的配置:

LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
LoadModule proxy_ftp_module libexec/apache2/mod_proxy_ftp.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
LoadModule proxy_balancer_module libexec/apache2/mod_proxy_balancer.so

添加配置文件:

vim /etc/httpd/cond.d/gogs.conf

增加下面的内容,配置证书并将请求反向代理给Gogs服务端口:

<VirtualHost *:443>
  ServerName gogs.site
  SSLEngine on
  SSLProxyEngine On
  SSLCertificateFile /yasin/ssl/gogs.site/2_gogs.site.crt
  SSLCertificateKeyFile /yasin/ssl/gogs.site/3_gogs.site.key
  SSLCertificateChainFile /yasin/ssl/gogs.site/1_root_bundle.crt

  ProxyRequests off  
  ProxyPreserveHost On

  <Proxy />
    Order deny,allow
    Allow from all
  </Proxy>

  <Location />
    ProxyPass https://127.0.0.1:3000/      
    ProxyPassReverse https://127.0.0.1:3000/     
  </Location>

</VirtualHost>


<VirtualHost *:443>
 ServerName www.gogs.site
 Redirect permanent / https://gogs.site/

</VirtualHost>

重启服务:

systemctl restart httpd

(3)修改Nginx配置

将80端口全部重定向到https链接。

vim /etc/nginx/cond.d/gogs.conf

修改配置:

server {
   listen 80;
   server_name www.gogs.site gogs.site;
   return 301 https://gogs.site.com$request_uri;
}

重启服务:

systemctl restart nginx

如果只用Nginx一个服务器的话,参考下面的配置:

server {
    listen 443;
    server_name www.host.com;
    ssl on;
    ssl_certificate /home/git/gogs/custom/https/fileName.pem;
    ssl_certificate_key /home/git/gogs/custom/https/fileName.key;
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    location / {
        #这里主要也要将http://修改为https://
        proxy_pass https://localhost:3000;
    }
}
server {
    #HTTP跳转HTTPS
    listen  80;
    server_name www.host.com;
    rewrite ^(.*)$  https://$host$1 permanent;
}

(4)修改gogs配置

打开配置文件:

cd gogs
vim custom/conf/app.ini 

修改server配置:

[server]
DOMAIN           = gogs.site
HTTP_PORT        = 3000
PROTOCOL         = https
ROOT_URL         = https://gogs.site/
CERT_FILE        = /yasin/ssl/gogs.site/2_gogs.site.crt
KEY_FILE         = /yasin/ssl/gogs.site/3_gogs.site.key
DISABLE_SSH      = false
SSH_PORT         = 22
START_SSH_SERVER = false
OFFLINE_MODE     = false

重启gogs:

systemctl restart gogs.service

如果一切顺利的话,这时候再输入你的域名,比如 https://gogs.site,你会发现HTTPS启用成功!

4.Enjoy

好了,至此Gogs配置教程已经全部完毕,更多功能等待你去慢慢探索!

使用界面

gogs_view

gogs_repo

gogs_user

在线体验

https://try.gogs.io/