文章目录
  1. 1. 硬件配置
    1. 1.1. 硬盘
    2. 1.2. CPU
    3. 1.3. 内存
  2. 2. 操作系统
  3. 3. 安装
    1. 3.1. 安装相关依赖包
    2. 3.2. 选择gitlab的版本
  4. 4. 配置
    1. 4.1. 域名和端口号
    2. 4.2. 路径
    3. 4.3. https
    4. 4.4. 重启服务
  5. 5. 汉化gitlab
  6. 6. 关闭开放注册
  7. 7. 配置git代理
    1. 7.1. Ubuntu 安装shadowsocks命令行客户端
    2. 7.2. shadowsocks.json
    3. 7.3. 启动shadowsocks客户端
    4. 7.4. 配置代理
  8. 8. 迁移github仓库
  9. 9. 端口访问权限控制
    1. 9.1. 方法一:阿里云直接设置
    2. 9.2. 方法二:使用iptables进行设置
  10. 10. 卸载gitlab
  11. 11. gitlab服务器维护
    1. 11.1. 查看gitlab-ce的运行状态
    2. 11.2. 重启gitlab
    3. 11.3. gitlab资料全量备份和恢复
    4. 11.4. 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
2
$    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的值设置为以下文本(这里填入自己的域名):

    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
    2
    $    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的配置设置为以下文本

    1
    2
    3
    nginx['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
    6
    listen *: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

    1
    2
    3
    4
    5
    server {
    listen *:80;
    server_name git.adair.com;
    rewrite ^(.*)$ https://$host$1 permanent;
    }
  • 最后修改/var/opt/gitlab/nginx/conf/nginx.conf配置文件, 在其中加入以下内容, 来让nginx载入index.conf

    1
    2
    include /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
    2
    $    cd 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
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当中:
    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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
*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 ACCEPT
syn-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-unreachable
COMMIT
  • 加载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
2
$    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 /
文章目录
  1. 1. 硬件配置
    1. 1.1. 硬盘
    2. 1.2. CPU
    3. 1.3. 内存
  2. 2. 操作系统
  3. 3. 安装
    1. 3.1. 安装相关依赖包
    2. 3.2. 选择gitlab的版本
  4. 4. 配置
    1. 4.1. 域名和端口号
    2. 4.2. 路径
    3. 4.3. https
    4. 4.4. 重启服务
  5. 5. 汉化gitlab
  6. 6. 关闭开放注册
  7. 7. 配置git代理
    1. 7.1. Ubuntu 安装shadowsocks命令行客户端
    2. 7.2. shadowsocks.json
    3. 7.3. 启动shadowsocks客户端
    4. 7.4. 配置代理
  8. 8. 迁移github仓库
  9. 9. 端口访问权限控制
    1. 9.1. 方法一:阿里云直接设置
    2. 9.2. 方法二:使用iptables进行设置
  10. 10. 卸载gitlab
  11. 11. gitlab服务器维护
    1. 11.1. 查看gitlab-ce的运行状态
    2. 11.2. 重启gitlab
    3. 11.3. gitlab资料全量备份和恢复
    4. 11.4. gitlab配置备份和恢复