gitlab部署手册
硬件配置
硬件配置可参见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
- 执行以下命令:
1 | curl -JLO https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/trusty/gitlab-ce_8.14.4-ce.0_amd64.deb/download |
配置
域名和端口号
打开gitlab的默认配置文件
1
sudo vim /etc/gitlab/gitlab.rb
将external_url的值设置为以下文本(这里填入自己的域名):
1
external_url 'https://git.adair.com'
在/etc/hosts当中加入127.0.0.1和设置好的域名的映射
1
127.0.0.1 git.adair.com
路径
配置gitlab资料备份的路径(在/etc/gitlab/gitlab.rb配置文件当中找到gitlab_rails[‘backup_path’]配置项,修改为以下文本)
1
gitlab_rails['backup_path'] = "/opt/gitlab/gitlab_backup"
配置gitlab仓库存储的路径(在/etc/gitlab/gitlab.rb配置文件当中找到git_data_dirs配置项,修改为以下文本)
1
git_data_dirs({"default" => "/opt/gitlab/git_data"})
https
首先确认自己使用的域名有没有https证书,如果没有的话,可以去startssl免费申请一个https证书,安装证书的方式可以参考阿里云CentOS 6.5系统LNMP环境安装SSL证书
申请完证书之后,建立ssl目录
1
2sudo 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的配置设置为以下文本
1
2
3nginx['redirect_http_to_https'] = true
nginx['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的端口)的配置,并修改为以下的格式:
1
2
3
4
5
6listen *: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跳转HTTPS1
2
3
4
5server {
listen *:80;
server_name git.adair.com;
rewrite ^(.*)$ https://$host$1 permanent;
}最后修改
/var/opt/gitlab/nginx/conf/nginx.conf
配置文件, 在其中加入以下内容, 来让nginx载入index.conf1
2include /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
应用汉化
1
2cd gitlab/
sudo cp -r ./* /opt/gitlab/embedded/service/gitlab-rails/重启gitlab
1
sudo gitlab-ctl start
关闭开放注册
一般来说,使用gitlab的都是公司,而非社区,不希望自己搭建的gitlab能够被公司外的人员注册进去,更加希望由管理员来分配登录帐号,这就用到了gitlab的关闭开放注册的功能。
- 使用root账户登录gitlab,
去掉开启注册
选中即可
配置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 | { |
启动shadowsocks客户端
- 执行以下命令:
1 | nohup sslocal -c ~/gitlabInstall/shadowsocks.json 2>&1 & |
- 检测是否启动成功:
1 | telnet 127.0.0.1 1080 |
如果telnet成功,说明启动成功
配置代理
- 在gitlab服务器上切换到root用户,将以下文本填入
/var/opt/gitlab/.gitconfig
当中:1
2
3
4
5[https]
proxy = socks5://127.0.0.1:1080
[http]
proxy = socks5://127.0.0.1:1080
迁移github仓库
- 首先需要在gitlab上新建一个project:
- 点击github按钮:
- 然后在”Personal Access Token”框当中填入github的access token,这样才能导入github的仓库:
- 生成access token的方法,是登录网址:https://github.com/settings/tokens,登录github,然后再点击”Generate new token”:
- 在Token description当中填写CardInfoLink,勾选repo,最后点击”Generate token”,将会生成一个密钥
- 把token填入gitlab当中,点击import按钮,即可将github上的仓库导入到gitlab当中
端口访问权限控制
为了gitlab使用更加安全,可以关闭除了80,443以外的其他端口的外网访问。
方法一:阿里云直接设置
如果gitlab服务器使用的是阿里云,那么可以直接使用阿里云的安全组规则:
方法二:使用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 |
- 填入以下文本(中文字是注释,填入的时候需要删掉)
1 | *filter |
- 加载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恢复资料(需要停服)
停止相关数据库的连接服务
1 | sudo gitlab-ctl stop unicorn |
从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 /