Fork me on GitHub

linux系统使用Gogs搭建自己的git服务

一、安装Gogs服务

1.新建用户

Gogs默认以 git 用户运行(你不会想用一个能修改 ssh 配置的程序以 root 用户运行吧)。

sudo adduser git  # 新建git用户。 

以 git 用户登录,到 git 用户的主目录中新建好 .ssh 文件夹。(新建git用户后我的出现在/home目录下)

su git

cd /home/git

mkdir .ssh

2.下载安装包并解压

我使用的是预编译的二进制包。下载链接

https://gogs.io/docs/installation/install_from_binary

查看linux系统是32位还是64位系统命令,32位选择386,64位选择amd64

getconf LONG_BIT

需要从源码编译的话,请参考一般 Go 语言项目的编译。下载后解包到你喜欢的地方,例如 /usr/share/gogs/ 或者 /home/git/gogs/ 。文件夹的内容如下。

gogs  LICENSE  public  README.md  README_ZH.md  scripts  templates

3.创建数据库

创建database,名称为gogs

CREATE DATABASE gogs CHARACTER SET utf8 COLLATE utf8_bin;

GRANT ALL PRIVILEGES ON gogs.* TO 'root'@'localhost' identified by 'root';

FLUSH PRIVILEGES;

在 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;

4.运行 gogs web

进入gogs目录下,并运行gogs

cd /home/git/gogs/gogs

nohup ./gogs web & tail -f nohup.out #并打印日志

nohup ./gogs web & #仅后台运行

 ./gogs web  #前台运行

然后访问 http://服务器IP:3000/ 来进行安装,填写好表单之后提交就可以了。

注意

1.如果访问网页失败,可能防火墙没有打开3000的端口,防火墙相关配置请查看linux系统相关服务这篇博客。

2.还有0.6.9.0903 Beta 版本有个 bug,允许在关闭注册的情况下不添加管理员,这样安装完成之后将没有任何用户可以登录。所以请务必在安装界面指定一个管理员帐号。

5.相关配置

1.配置文件位于 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 配置填入到配置中就好。

2.附app.ini(192.168.120.132为我使用的虚拟机ip)

APP_NAME = Gogs
RUN_USER = git
RUN_MODE = prod

[database]
DB_TYPE  = mysql
HOST     = 127.0.0.1:3306
NAME     = gogs
USER     = gogs
PASSWD   = gogs
SSL_MODE = disable
PATH     = data/gogs.db

[repository]
ROOT = /home/git/gogs-repositories

[server]
DOMAIN           = 192.168.120.132
HTTP_PORT        = 3000
ROOT_URL         = http://192.168.120.132:3000/
DISABLE_SSH      = false
SSH_PORT         = 1111
START_SSH_SERVER = true
OFFLINE_MODE     = false

[mailer]
ENABLED = false

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL     = false
DISABLE_REGISTRATION   = false
ENABLE_CAPTCHA         = true
REQUIRE_SIGNIN_VIEW    = false

[picture]
DISABLE_GRAVATAR        = false
ENABLE_FEDERATED_AVATAR = true

[session]
PROVIDER = file

[log]
MODE      = file
LEVEL     = Info
ROOT_PATH = /home/git/gogs/gogs/log

[security]
INSTALL_LOCK = true
SECRET_KEY   = YfaCLhKinQVLlb7

6.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 就好了,Centos下是

service nginx restart   #重启
/etc/init.d/nginx stop  #停止
/etc/init.d/nginx start #开始

Ubuntu 下是

sudo service nginx restart 。

7.开机自动重启等脚本

在scripts/文件夹下有关于多个系统的服务脚本:

autoboot.sh  build_freebsd.sh  build_linux64.sh  build.sh  init 
launchd  mysql.sql  README  supervisor  systemd  windows

其中init,systemd以及windows目录分别为linux、Windows下服务脚本。
在此仅以CentOS为例:

复制scripts/init/centos/gogs到/etc/init.d/目录下:

sudo cp scripts/init/centos/gogs /etc/init.d/

切换到/etc/init.d/目录为脚本赋予可执行权限

sudo chmod +x gogs

更改gogs脚本内关于GOGS_HOME目录位置的设置(这儿使用vim编辑)

GOGS_HOME=/data/gogs/gogs

使用服务管理命令管理服务

sudo service gogs start/stop/restart/status

配置Gogs开机自启动

sudo chkconfig --add gogs
-------------本文结束感谢您的阅读-------------
您的支持将鼓励我继续创作!