Gogs搭建纪实
一直想搭一个私有Git,加上刚刚加了个项目组,组内希望用私有Git做版本控制——这个任务就落到我头上来了。
本来想搭Gitlab的,然后我看了看Requirements: Minimal 4GB of RAM。
See you!!!!!!!!
在这个时候,我看到了Gogs,用Go语言写的轻量Git系统。很棒,因为就我们项目组在使用,短期内这个东西够用了,如果后期需要的话去租一个内存更大的VPS搭了Gitlab然后全部git push上去就完了。
其实也没搭过多少项目,这次也是折腾了一段时间,就写点东西记录一下吧。
主机是腾讯云的学生一元主机,跑的是Debian 8.2 64位。
搭建过程
安装依赖
1 2
sudo apt-get update sudo apt-get install git mysql-server mysql-client
Gogs用MySQL做数据库,所以要装一下MySQL。在安装MySQL的时候会要求设置root密码,注意一下。
新建用户
不要把所有东西拿到
root
下面跑,不然很吓人的。1 2
sudo adduser git su - git
我们新建一个
git
用户并且切换到这个用户,确保之后的所有操作都是在这个用户下。下载Gogs
直接访问下载页面选择合适的下载方式下载并解压就行。
这边因为我直接用的二进制版本,就没有编译的事情了。如果想自己编译并安装,请看文档。
我是放在了
git
这个用户的home文件夹下面。1
cd ~/gogs
配置MySQL
官方在包里面写好了一份表,我们直接导入就行。
1
mysql -u root -p < scripts/mysql.sql
然后是配置一下MySQL
1 2 3 4 5
mysql -u root -p > CREATE USER 'gogs'@'localhost' IDENTIFIED BY '<password>'; > GRANT ALL PRIVILEGES ON gogs.* TO 'gogs'@'localhost'; > FLUSH PRIVILEGES; > EXIT;
运行配置
现在差不多弄完了,直接执行
./gogs web
就能开起来了。访问 http://ip:3000/install 进行一下基本配置就能使用了。
额外设置
Nginx反向代理配置
服务是跑起来了,但是有个很奇妙的问题,当我用80端口来跑的时候Log报错Permission Denied
,用root
是没问题的,但是如果用root
跑就和我的初衷违背了。以前有用过nginx,所以这次我也是用nginx做一个反代。
安装nginx
很简单,直接跑这个命令就行:
1
sudo apt-get install nginx
nginx配置
切换到
/etc/nginx/sites-available/
,新建任意一个文件,输入:1 2 3 4 5 6 7 8
server { server_name <your_domain>; listen 80; location / { proxy_pass http://127.0.0.1:<localport>/ } }
保存,然后来到
/etc/nginx/sites-enabled
,执行一下ln -s ../sites-available/<config>
。Gogs配置
1
cd /home/git/gogs/custom/conf
Gogs的配置就存在这个目录下面的
app.ini
文件里面,改一下如下字段:1 2
HTTP_ADDR = 127.0.0.1 HTTP_PORT = <localport>
这里要注意一下,上下两个文件的
<localport>
部分要相同而且要本地没有占用的端口。建议设置完了后直接把这个端口封死在内网。可以用iptables
,我是直接腾讯云安全组搞定了。重启nginx
这个时候就ok了,直接重启一下nginx就能用了:
1
udo service nginx restart
全站SSL
既然都用了Nginx,为什么不直接搞一个全站SSL呢?
服务用的Let’s Encrypt,之前也用过很多次了。怎么获取一个证书就不谈了,倒是获取的时候要记得使用stand-alone
,方便取用。
修改nginx配置文件
回到刚才的nginx配置文件,改成这个样子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
server { server_name <your_domain>; listen 443; # SSL认证是通过443端口 ssl on; ssl_certificate /etc/letsencrypt/live/<your_domain>/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/<your_domain>/privkey.pem; location / { proxy_pass http://127.0.0.1:<localport>; } } # 给80端口做301重定向 server { server_name <your_domain>; listen 80; return 301 https://<your_domain>$request_uri; }
修改Gogs配置文件
1
ROOT_URL = https://<your_domain>
好了,重启一下nginx,就能看到大大的绿锁了~。
服务启动Gogs
Gogs的默认逻辑还是本地程序,kill了当前的SSH seesion就没了,不过官方写好了脚本,就在scripts
目录下面,各种各样的很全,我用的是systemd
,直接改一下就行,注意是这一行:
|
|
其他的没啥可谈的,直接把gogs.service
整个复制到/etc/systemd/system/
目录下面,然后service gogs start
就ok了。
以后就有私有git啦哈哈哈哈哈哈哈哈
(其实DDM的服务器被占了,还是比较难受的