http://www.cnblogs.com/ddr888/archive/2016/01/14/5131028.html
作为个人私有云的一环(虽然是搭建在公共服务器上),一直都很想搭建一个类似 GitHub 的服务,但 GitLab 太复杂了(说句不好听的,GL 就是 Git server 中的 WordPress),别的又相当简陋,于是一直以来都只有围观的份。最近发现上半年关注的Gogs 经过几个版本迭代,已经达到基本可用的状态了。于是搭建了一个自己的服务,用来镜像自己分散在各个服务商处的代码,以及开新坑的时候托管用。这里把安装的过程和一些需要注意的地方记录一下。
安装过程分为这些步骤:
- 新建用户;
- 下载源码编译 / 下载预编译二进制打包;
- 运行安装;
- 配置调整;
- 配置 nginx 反向代理;
- 保持服务运行;
注意,这里默认你已经安装好了 MySQL 服务器和 nginx,如果没有,请自行查找如何安装和配置这些依赖。当然你也可以使用 SQLite 数据库。
新建用户
Gogs 默认以 git 用户运行(你应该也不会想一个能修改 ssh 配置的程序以 root 用户运行吧?)。
运行 sudo adduser git
新建好 git 用户。
su git
以 git 用户登录,到 git 用户的主目录中新建好 .ssh
文件夹。
下载解包
我使用的是预编译的二进制包。需要从源码编译的话,请参考一般 Go 语言项目的编译。下载后解包到你喜欢的地方,例如 /usr/share/gogs/
或者 /home/git/gogs/
。文件夹的内容如下。
$ ls /home/git/gogs/
custom data gogs LICENSE log public README.md README_ZH.md scripts templates
运行安装
首先建立好数据库。在 Gogs 目录的 scripts/mysql.sql
文件是数据库初始化文件。执行 mysql-u root -p< scripts/mysql.sql
(需要输入密码)即可初始化好数据库。
然后登录 MySQL 创建一个新用户 gogs,并将数据库 gogs
的所有权限都赋予该用户。
$ mysql -u root -p
> # (输入密码)
> create user 'gogs'@'localhost' identified by '密码';
> grant all privileges on gogs.* to 'gogs'@'localhost';
> flush privileges;
> exit;
运行 gogs web
把 Gogs 运行起来,然后访问 http://服务器IP:3000/
来进行安装,填写好表单之后提交就可以了。
需要注意的是, 0.6.9.0903Beta
版本有个 bug,允许在关闭注册的情况下不添加管理员,这样安装完成之后将没有任何用户可以登录。所以请务必在安装界面指定一个管理员帐号。
配置调整
配置文件位于 Gogs 目录的 custom/conf/app.ini
,是 INI 格式的文本文件。详细的配置解释和默认值请参考 官方文档 ,其中关键的配置大概是下面这些。
RUN_USER
默认是git
,指定 Gogs 以哪个用户运行ROOT
所有仓库的存储根路径PROTOCOL
如果你使用 nginx 反代的话请使用http
,如果直接裸跑对外服务的话随意DOMAIN
域名。会影响 SSH clone 地址ROOT_URL
完整的根路径,会影响访问时页面上链接的指向,以及 HTTP clone 的地址HTTP_ADDR
监听地址,使用 nginx 的话建议127.0.0.1
,否则0.0.0.0
也可以HTTP_PORT
监听端口,默认3000
INSTALL_LOCK
锁定安装页面- Mailer 相关的选项
其中,Mailer 可以使用 Mailgun 的免费邮件发送服务,将 Mailgun 的 SMTP 配置填入到配置中就好。
nginx 反代
在 /etc/nginx/sites-available
中新建一个文件,把以下内容写入文件中。
server {
server_name 域名或IP;
listen 80; # 或者 443,如果你使用 HTTPS 的话
# ssl on; 是否启用加密连接
# 如果你使用 HTTPS,还需要填写 ssl_certificate 和 ssl_certificate_key
location / { # 如果你希望通过子路径访问,此处修改为子路径,注意以 / 开头并以 / 结束
proxy_pass http://127.0.0.1:3000/;
}
}
然后进入 /etc/nginx/sites-enabled
中,执行 ln-s ../sites-available/配置文件名
启用这个配置文件。
最后重启 nginx 就好了,Ubuntu 下是 sudo service nginx restart
。
服务脚本
此处的服务脚本是针对 Debian 系的 init 脚本。
本节内容于 2015年12月13日 修改:修正随时间发生变化的事实。
在我写这篇文章的时候,最新版本的服务脚本似乎还 有点问题 ,可以使用 这个版本 来代替。 最新版本的服务脚本已经可以正常使用,请在二进制下载的 scripts
文件夹中找到对应你使用发行版的版本。将脚本放在 /etc/init.d
中,文件名为 gogs
,给予执行权限并修改相关参数,以后就可以使用 sudo service gogs start
来启动服务,或者其他子命令来方便地管理。