2017 年 6 月 16 日
GitLab 搭建以及配置 2
硬件配置
硬件配置可参见gitlab官方的硬件配置手册,以下是简单翻译:
硬盘
gitlab的需要的硬盘的容量是根据仓库的数量来决定的。一般来说如果一台服务器只跑gitlab的话,40G的硬盘是足够的。
CPU
- 1核的CPU能够支撑100个用户,但是gitlab应用会比较慢,因为所有的后台进程都是用跑在一个核上
- 推荐配置是2核CPU,能够支撑500个用户
- 4核能支撑2,000个用户
- 8核能支撑5,000个用户
- 16核能支撑10,000个用户
- 32核能支撑20,000个用户
- 64核能支撑40,000个用户
内存
- gitlab需要至少4GB的内存(RAM swap),因为操作系统和其他应用进程都会使用内存。如果服务器的内存低于4G,配置gitlab的时候将会出错,使用gitlab的时候将有更多错误。
- 1GB RAM 3GB swap 是最低的配置,但是强烈建议不要用这种配置
- 2GB RAM 2GB swap 能够支撑100个用户,但是gitlab运行会非常慢
- 4GB RAM是推荐的配置,能够支撑100个用户
- 8GB RAM能支撑1,000个用户
- 16GB RAM能支撑2,000个用户
- 32GB RAM能支撑4,000个用户
- 64GB RAM能支撑8,000个用户
- 128GB RAM能支撑16,000个用户
- 256GB RAM能支撑32,000个用户
- 除了以上的配置,gitlab官方还建议在服务器上至少能有2GB的swap,即使已经有了足够大的RAM。
操作系统
gitlab官方推荐的操作系统是Ubuntu 16.04LTS版本,考虑到16.04LTS版本比较新,这里使用Ubuntu 14.04LTS版本
安装
安装相关依赖包
1
|
$ sudo apt-get install curl openssh-server ca-certificates postfix
|
在安装postfix的时候,如果弹出图形界面,请选择internet Site
选择gitlab的版本
- 由于社区对gitlab汉化的进度比较慢,如果安装最新的gitlab版本可能打不上汉化补丁,所以选择一个能够汉化的gitlab的版本进行安装,当前gitlab的汉化版本是8.14
- 汉化版的gitlab的地址是:https://gitlab.com/xhang/gitlab
- 执行以下命令:
12$ curl -JLO https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/trusty/gitlab-ce_8.14.4-ce.0_amd64.deb/download$ sudo dpkg -i gitlab-ce_8.14.4-ce.0_amd64.deb
配置
域名和端口号
- 打开gitlab的默认配置文件
1$ sudo vim /etc/gitlab/gitlab.rb - 将external_url的值设置为以下文本(这里填入自己的域名):
1external_url \'https://git.adair.com\' - 在/etc/hosts当中加入127.0.0.1和设置好的域名的映射
1127.0.0.1 git.adair.com
路径
- 配置gitlab资料备份的路径(在/etc/gitlab/gitlab.rb配置文件当中找到gitlab_rails[‘backup_path’]配置项,修改为以下文本)
1gitlab_rails[\'backup_path\'] = "/opt/gitlab/gitlab_backup" - 配置gitlab仓库存储的路径(在/etc/gitlab/gitlab.rb配置文件当中找到git_data_dirs配置项,修改为以下文本)
1git_data_dirs({"default" => "/opt/gitlab/git_data"})
https
- 首先确认自己使用的域名有没有https证书,如果没有的话,可以去startssl免费申请一个https证书,安装证书的方式可以参考阿里云CentOS 6.5系统LNMP环境安装SSL证书
- 申请完证书之后,建立ssl目录
12$ sudo mkdir /etc/gitlab/ssl$ sudo chmod 700 /etc/gitlab/ssl - 拷贝https证书到ssl目录
1$ sudo cp git.adair.com.crt git.adair.com.key /etc/gitlab/ssl/ - 打开gitlab的默认配置文件
1$ sudo vim /etc/gitlab/gitlab.rb - 将nginx的配置设置为以下文本
123nginx[\'redirect_http_to_https\'] = truenginx[\'ssl_certificate\'] = "/etc/gitlab/ssl/gjit.adair.com.crt"nginx[\'ssl_certificate_key\'] = "/etc/gitlab/ssl/git.adair.com.key" - 打开ubuntu的ufw
1$ sudo ufw allow https - 这里需要使用以下命令来让配置先生效
1$ sudo gitlab-ctl reconfigure - 打开gitlab的nginx的配置文件
1$ sudo vim /var/opt/gitlab/nginx/conf/gitlab-http.conf - 找到443端口(https的端口)的配置,并修改为以下的格式:
123456listen *:443 default_server;ssl on;ssl_certificate /etc/gitlab/ssl/git.adair.com.crt;ssl_certificate_key /etc/gitlab/ssl/git.adair.com.key;ssl_protocols SSLv3 TLSv1;ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4 RSA: HIGH: MEDIUM; - 接着再创建一个
/var/opt/gitlab/nginx/conf/index.conf
文件用来HTTP跳转HTTPS
12345server {listen *:80;server_name git.adair.com;rewrite ^(.*)$ https://$host$1 permanent;} - 最后修改
/var/opt/gitlab/nginx/conf/nginx.conf
配置文件, 在其中加入以下内容, 来让nginx载入index.conf
12include /var/opt/gitlab/nginx/conf/index.conf;include /var/opt/gitlab/nginx/conf/gitlab-http.conf;
重启服务
配置https完成之后,使用gitlab-ctl restart来重启所有服务
1
|
$ sudo gitlab-ctl restart
|
汉化gitlab
- 首先拿到汉化作者发布的源代码
1$ git clone https://gitlab.com/xhang/gitlab.git
拿到的gitlab代码默认分支是8-14-stable-zh
- 停止gitlab
1$ sudo gitlab-ctl stop - 应用汉化
12$ cd gitlab/$ sudo cp -r ./* /opt/gitlab/embedded/service/gitlab-rails/ - 重启gitlab
1$ sudo gitlab-ctl start
执行完这一步,gitlab的部署就告一段落,更加高级的功能请往下看
关闭开放注册
一般来说,使用gitlab的都是公司,而非社区,不希望自己搭建的gitlab能够被公司外的人员注册进去,更加希望由管理员来分配登录帐号,这就用到了gitlab的关闭开放注册的功能。
- 使用root账户登录gitlab,
1.jpg
2.jpg
去掉开启注册
选中即可
配置git代理
由于gitlab能够直接导入github上的仓库,如果gitlab部署在境内的服务器上的话,使用这个功能导入速度将会很慢,而且失败率很高,这个时候就可以使用shadowsocks来让gitlab提速。
Ubuntu 安装shadowsocks命令行客户端
- 先更新apt源
1$ sudo apt-get update - 安装shadowsocks客户端依赖
1$ sudo apt-get install python-pip python-setuptools m2crypto - 安装shadowsocks客户端
1$ sudo pip install shadowsocks
shadowsocks.json
在home
目录当中创建shadowsocks.json
文件,将以下文本填入当中:
1
2
3
4
5
6
7
8
|
{
"server":"***.***.***.***",
"server_port":***,
"local_port":1080,
"password":"******",
"timeout":600,
"method":"aes-256-cfb"
}
|
启动shadowsocks客户端
- 执行以下命令:
1$ nohup sslocal -c ~/gitlabInstall/shadowsocks.json 2>&1 & - 检测是否启动成功:
1$ telnet 127.0.0.1 1080
如果telnet成功,说明启动成功
配置代理
- 在gitlab服务器上切换到root用户,将以下文本填入
/var/opt/gitlab/.gitconfig
当中:
1234[https]proxy = socks5://127.0.0.1:1080[http]proxy = socks5://127.0.0.1:1080
迁移github仓库
- 首先需要在gitlab上新建一个project:
3.jpg
- 点击github按钮
4.jpg
- 然后在”Personal Access Token”框当中填入github的access token,这样才能导入github的仓库
5.jpg
- 生成access token的方法,是登录网址:https://github.com/settings/tokens,登录github,然后再点击”Generate new token”:
6.jpg
- 在Token description当中填写CardInfoLink,勾选repo,最后点击”Generate token”,将会生成一个密钥
7.jpg
- 把token填入gitlab当中,点击import按钮,即可将github上的仓库导入到gitlab当中。
8.jpg
端口访问权限控制
为了gitlab使用更加安全,可以关闭除了80,443以外的其他端口的外网访问。
方法一:阿里云直接设置
如果gitlab服务器使用的是阿里云,那么可以直接使用阿里云的安全组规则:
9.jpg
10.jpg
方法二:使用iptables进行设置
- Ubuntu安装iptables
1$ sudo apt-get install iptables - 查看防火墙的配置信息
1$ sudo iptables -L
一般能看到一下信息,说明防火墙允许所有的请求:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
- 编辑iptables配置文件
1$ sudo vim /etc/iptables.rules - 填入以下文本(中文字是注释,填入的时候需要删掉)
123456789101112131415161718192021222324252627282930*filter表示FORWARD表的默认策略是ACCEPT:FORWARD ACCEPT [0:0]表示OUTPUT表的默认策略是ACCEPT:OUTPUT ACCEPT [0:0]开启syn-flood攻击的默认策略:syn-flood - [0:0]允许所有本机向外的访问-A OUTPUT -j ACCEPT允许回环网卡-A INPUT -i lo -j ACCEPT允许已建立的连接接收数据-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT开放80端口(http端口)-A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT开放443端口(https端口)-A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT开放9418端口(git端口)-A INPUT -m state --state NEW -p tcp --dport 9418 -j ACCEPT仅仅对公司办公外网(xxx.xxx.xxx.xxx)开放22号端口(ssh端口)-A INPUT -m state --state NEW -s xxx.xxx.xxx.xxx -p tcp --dport 22 -j ACCEPT允许ping-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPTsyn-flood防御-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN-A syn-flood -j DROP禁止其它未允许的规则访问:-A INPUT -j REJECT --reject-with icmp-port-unreachableCOMMIT - 加载iptables配置文件
1$ sudo iptables-restore < /etc/iptables.rules - 配置服务器开机的时候自动加载配置文件
编辑/etc/network/interface文件1$ sudo vim /etc/network/interface
在文件的末端插入以下文本:
1
|
pre-up iptables-restore < /etc/iptables.rules
|
卸载gitlab
- 首先停止gitlab
1$ sudo gitlab-ctl stop - 使用dpkg卸载gitlab
1$ sudo dpkg -r gitlab-ce - 删除安装文件
1$ sudo rm -rf /opt/gitlab /etc/gitlab /var/opt/gitlab /var/log/gitlab
gitlab服务器维护
查看gitlab-ce的运行状态
1
|
$ sudo gitlab-ctl status
|
如果运行正常的话,会看到以下的状态
run: gitlab-workhorse: (pid 8127) 20813s; run: log: (pid 8064) 20818s
run: logrotate: (pid 16845) 2813s; run: log: (pid 8115) 20814s
run: nginx: (pid 8089) 20816s; run: log: (pid 8088) 20816s
run: postgresql: (pid 7641) 20848s; run: log: (pid 7640) 20848s
run: redis: (pid 7608) 20850s; run: log: (pid 7607) 20850s
run: sidekiq: (pid 8048) 20820s; run: log: (pid 8047) 20820s
run: unicorn: (pid 8014) 20822s; run: log: (pid 8013) 20822s
这些进程的状态都是run就说明gitlab状态正常
重启gitlab
如果发现gitlab-ce的运行状态有问题,应该尝试重新启动gitlab-ce的所有组件
1
|
$ sudo gitlab-ctl restart
|
gitlab资料全量备份和恢复
- gitlab-rake备份资料
1$ sudo gitlab-rake gitlab:backup:create
执行完成之后可以看到在/opt/gitlab/gitlab_backup
目录下生成了一个tar包: 1478507134_gitlab_backup.tar,其中1478507134是备份时间的时间戳
注意:在配置文件当中配置的目录的owner需要是git,否则执行的时候会报错:Errno::EACCES: Permission denied
- gitlab-rake恢复资料(需要停服)
停止相关数据库的连接服务12$ sudo gitlab-ctl stop unicorn$ sudo gitlab-ctl stop sidekiq
从1478507134编号备份当中恢复
1
|
$ gitlab-rake gitlab:backup:restore BACKUP=1478507134
|
启动gitlab所有组件
1
|
$ sudo gitlab-ctl start
|
gitlab配置备份和恢复
- 备份:
gitlab的配置文件存储目录是/etc/gitlab,首先建立配置的备份目录:1$ mkdir -p /opt/gitlab/etc_gitlab_backup/
通过以下命令进行备份:
1
|
$ sudo bash -c \'cd /opt/gitlab/etc_gitlab_backup/; tar -zcvf $(date " etc-gitlab-%Y-%m-%d.tar.gz") /etc/gitlab\'
|
- 还原:
还原配置前,先备份当前配置:1$ sudo mv /etc/gitlab /etc/gitlab.$(date %Y-%m-%d %H:%M:%S)
解压包含了所备份配置的压缩包
1
|
$ sudo tar -zxvf etc-gitlab-2016-11-08.tar.gz -C /
|