呓语 | 杨英明的个人博客

专注于c++、Python,欢迎交流

By

使用 gogs 搭建私人 git 服务器 | nginx 添加反向代理到二级域名

前言

最近一直在云主机的 linux 系统上开发,久而久之也积累了一些代码,另外有些个人文件夹需要在不同电脑上增量编辑,比如在公司和实验室的电脑上共同维护自己的工作日志,于是需要一个类似于 github 的网站统一管理这些私人的代码和文件夹。

在这里给大家提供一个搭建 私人 git 服务器 的思路,我选择的是 gogs。

什么是 gogs?

它是一个基于 web 页面的可视化 git 服务器,相当于一个有无限私有仓库的 github,可以帮助你管理你的私有代码仓库。

简单来说,有些代码你不想放到 github 上的公有仓库给别人看,私有仓库又要收费,于是自己搭建 git 服务器就是一个不错的选择。

为什么使用 gogs?

裸的 git 服务器很容易搭建,可以参照廖雪峰的博客有关 git 的最后一节,缺点是没有web界面,不便于管理。

提供 web 界面的开源 git 服务器,知名的有:gitlab、bitbucket 以及 gogs

为什么使用 gogs 呢?

在这三个 git 服务器中我主要尝试了 gitlab 以及 gogs,最开始考虑的是 gitlab,原因是它在这个领域中知名度很高,功能比较齐全,项目迭代速度快,可靠性高。于是尝试搭建,但没多久便发现他们的开发团队只提供 64 位的安装包,也就是说只能安装到 64 位操作系统上。WTF,装了这么多年软件,遇到过只支持32位不兼容64位的软件,只支持64位的还是第一次碰到,我一个用 32位 ubuntu VPS 的渣渣只能放弃这个方案了 ╮(╯▽╰)╭

然后便在不知道哪里的一篇文章上看到 gogs,了解了一下,gogs 是用 golang 开发的一款开源 git 服务器,小巧灵活,轻量稳定,目前已经有不少个人开发者和公司在使用,在写这篇博文的时候最新发布的版本才迭代到 0.11.19,可谓潜力巨大。

相对于繁重臃肿的 gitlab,轻量级的 gogs 更适合个人开发者。

准备工作

  1. 一台 云主机/VPS/远程主机,总之要有独立的 IP地址可供远程访问

  2. 独立域名,比如:www.yangyingming.com

  3. 软件:nginx(反向代理)、mysql(管理用户等)

搭建 gogs 流程

gogs 一个最显著的特点便是 部署十分方便

这里是 gogs 的下载地址官方网站 | github

首先要在远程主机上 创建一个新的用户 git,用于放置 gogs 项目文件以及启动 gogs。

root@iZ2zegis1iqwk7ddw7voqtZ:~$ useradd git
root@iZ2zegis1iqwk7ddw7voqtZ:~$ passwd git

进入 git 用户目录,生成 ssh 密钥:

git@iZ2zegis1iqwk7ddw7voqtZ:~$ ssh-keygen -t rsa

下载安装包:我在 github 上下载了编译过的二进制安装包 linux_386.tar.gz,版本是 0.11.19,下载到本地后用 WinSCP 的 FTP 服务把安装包传送到我的远程主机(VPS)上。

git@iZ2zegis1iqwk7ddw7voqtZ:~$ ls
linux_386.tar.gz

解压安装包 linux_386.tar.gz,解压之后会多出来一个 gogs 目录

git@iZ2zegis1iqwk7ddw7voqtZ:~$ tar -zxvf linux_386.tar.gz
……
git@iZ2zegis1iqwk7ddw7voqtZ:~$ ls
gogs  linux_386.tar.gz

这个时候 gogs 其实已经可以使用 ./gogs web 启动了,但是我们还要准备一下 mysql 数据库,以支持 gogs 的正确运行,有两个工作要做:

  1. 在 mysql 中创建 gogs 数据库
  2. 在 mysql 中创建 gogs 用户

第一个工作,作用是在数据库中储存 gogs 服务的重要信息,比如用户数据。可以运行 gogs/scripts 目录中内置的 mysql 脚本自动完成:

$ mysql -u root -p < scripts/mysql.sql
Enter password:

第二个工作,作用是将操作数据库 gogs 的所有权限赋给用户 gogs:

$ mysql -u root -p
Enter password:
mysql> create user 'gogs'@'localhost' identified by 'your_password';
mysql> grant all privileges on gogs.* to 'gogs'@'localhost';
mysql> flush privileges;
mysql> exit

数据库准备好之后,我们就可以启动 gogs 服务器啦!它的启动十分简单,在 gogs 目录下运行如下命令即可:

git@iZ2zegis1iqwk7ddw7voqtZ:~/gogs$ ./gogs web

看到有日志信息刷出,说明 gogs 服务器启动成功!

gogs 服务器默认监听 3000 端口,我们在浏览器中输入 http://远程主机IP:3000 或者 http://域名:3000 便可以打开 gogs 的 web 界面:

首次运行需要配置一些信息,采用 web 界面来配置很方便。注意最好把下面的 管理员账号 也配置一下,后面会方便不少,gogs 默认 id=1 的账户为管理员账户。注意:貌似账号名不能使用 admin。

配置好之后,我们便可以看到登陆页面:

输入刚刚配置的管理员账号,登陆成功后进入用户界面:

界面和 github 类似,但是更简约,语言也是中文的。

至此,你的私人 git 服务器便启动起来了!

在我的教程之外,这里有两个教程可供你参考:官方文档网友写的一个比较详细的教程

nginx 反向代理至二级域名

git 服务器已经启动成功,但是每次访问都需要加上端口号,比如: http://yangyingming.com:3000 才能访问,未免太丑。

于是我们便有了一个需求,以我的域名为例:设立二级域名 gogs,访问 http://gogs.yangyingming.com 便能跳转到 gogs web 页面。

要做到这一点,需要两步:

1.添加二级域名的 DNS 解析,这里假设要设置的二级域名为 gogs

2.修改 nginx 配置文件,添加反向代理

进入 /etc/nginx/sites-available 目录,创建新的配置文件 gogs

root@iZ2zegis1iqwk7ddw7voqtZ:/etc/nginx/sites-available# vi gogs

在新的配置文件 gogs 中,添加反向代理到二级域名

server {
    server_name gogs.yangyingming.com;
    listen 80;
    #ssl on;

    location /{
        proxy_pass http://127.0.0.1:3000/;
        proxy_redirect default;
    }
}

重启 nginx 服务

root@iZ2zegis1iqwk7ddw7voqtZ:/etc/nginx/sites-available# service nginx restart
nginx stop/waiting
nginx start/running, process 13025

这里解释一下 配置文件 gogs 的意思:server_name 表示主机名,listen 表示这个服务监听的端口,这里监听 80 端口,proxy_pass http://127.0.0.1:3000/; 这条语句将 nginx 和 gogs 联系起来,意思是转发请求到 http://127.0.0.1:3000/。

配置好 nginx 反向代理之后,访问的整个流程 便是

  1. 访问二级域名
  2. DNS 服务器将二级域名解析到远程主机 的 IP 地址的 80 端口( http 服务默认是 80 端口)
  3. 远程主机上的 nginx 服务器监听 80 端口,接收到这个访问请求
  4. nginx 转发请求到 http://127.0.0.1:3000
  5. http://127.0.0.1:3000 端口位置上的 gogs 服务器处理请求
  6. 将请求结果返回到客户端

以上两步配置完成后,我们便可以丢掉端口号,通过二级域名直接访问 gogs web 服务啦!

后台运行 gogs

使用 nohup 可以后台运行 gogs ,这样即使关掉 ssh 连接也不会影响 gogs 的运行,运行如下命令:

git@iZ2zegis1iqwk7ddw7voqtZ:~$ nohup gogs/gogs web > /dev/null 2>&1 &

关闭 gogs 服务:

git@iZ2zegis1iqwk7ddw7voqtZ:~$ ps -aux | grep gogs | grep -v grep
git      12755  0.0  1.6 860788 34012 pts/0    Sl   09:43   0:09 gogs/gogs web
git@iZ2zegis1iqwk7ddw7voqtZ:~$ kill 12755

参考资料

CentOS7下搭建nginx反向代理服务器使得外网可以二级域名访问内网应用

Nginx + Tomcat 反向代理 如何高效的在一台服务器部署多个站点

原创声明

转载请注明:呓语 » 使用 gogs 搭建 git 服务器 + 反向代理到二级域名