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
  • 执行以下命令:
    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能够被公司外的人员注册进去,更加希望由管理员来分配登录帐号,这就用到了gitlab的关闭开放注册的功能。

  • 使用root账户登录gitlab,
    北京网站建设资讯 - GitLab 搭建以及配置 2 - (1)1.jpg
    北京网站建设资讯 - GitLab 搭建以及配置 2 - (2)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当中:
    1
    2
    3
    4
    [https]
    proxy = socks5://127.0.0.1:1080
    [http]
    proxy = socks5://127.0.0.1:1080

迁移github仓库

  • 首先需要在gitlab上新建一个project:
    北京网站建设资讯 - GitLab 搭建以及配置 2 - (3)3.jpg
  • 点击github按钮
    北京网站建设资讯 - GitLab 搭建以及配置 2 - (4)4.jpg
  • 然后在”Personal Access Token”框当中填入github的access token,这样才能导入github的仓库
    北京网站建设资讯 - GitLab 搭建以及配置 2 - (5)5.jpg
  • 生成access token的方法,是登录网址:https://github.com/settings/tokens,登录github,然后再点击”Generate new token”:
    北京网站建设资讯 - GitLab 搭建以及配置 2 - (6)6.jpg
  • 在Token description当中填写CardInfoLink,勾选repo,最后点击”Generate token”,将会生成一个密钥
    北京网站建设资讯 - GitLab 搭建以及配置 2 - (7)7.jpg
  • 把token填入gitlab当中,点击import按钮,即可将github上的仓库导入到gitlab当中。
    北京网站建设资讯 - GitLab 搭建以及配置 2 - (8)8.jpg

端口访问权限控制

为了gitlab使用更加安全,可以关闭除了80,443以外的其他端口的外网访问。

方法一:阿里云直接设置

如果gitlab服务器使用的是阿里云,那么可以直接使用阿里云的安全组规则:
北京网站建设资讯 - GitLab 搭建以及配置 2 - (9)9.jpg

北京网站建设资讯 - GitLab 搭建以及配置 2 - (10)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
  • 填入以下文本(中文字是注释,填入的时候需要删掉)
    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. 模板网站建设这么流行,为什么还要选择定制开发?
  2. 网站推广选择百度竞价有哪些好处
  3. 域名是什么,作用有哪些?
  4. 怎么才能做好网站营销工作?这几点不容忽视!
  5. 网站建设工作流程是什么,要注意哪些问题?
  6. 导致网站优化失败的原因有哪些
  7. 网站优化不同阶段的优化策略
  8. 北京网站建设有哪些要点需要注意?这些不容忽视!
  9. 网站建设一定要注意这五个方面,十分重要!
  10. 高端网站建设的注意事项有哪些?