文章目录
  1. 1. 背景
  2. 2. 安装与升级
  3. 3. 配置https
    1. 3.1. SSL配置
    2. 3.2. 修改配置文件
    3. 3.3. 检测gitlab并重启生效
    4. 3.4. nginx的配置文件参考如下:
  4. 4. 备份与还原
  5. 5. 后记

说在前面的话

  1. 网上的参考文档只供了解过程,具体操作还需要实践。
  2. 官网文档更新不及时导致问题不断。
  3. 不同版本之间的Backup 与 restore 不兼容。本例6.9与7.0会提示不兼容,导致repositories无法导入。
  4. 权限问题需要多注意,修改配置文件后先check再重启服务。

背景

团队之前在使用SVN做代码管理,由于无法很好地支持离线办工,加上速度越来越慢,因上经推荐大家使用Git,想着就搭建一套Gitlab吧,和Github一样,操作也方便,小团队合作的利器。
整个搭建过程很顺利,但考虑到后期安全等各种问题,进行了一次升级及迁移,并加上了https。主要是由于没有狠心在Github上多泡10分钟,否则。。。

安装与升级

其实都可以不写的,因为,我采用RPM进行安装。快速、简单、有效。

官网提供Ubuntu 12.04 14.04 、Debian 7 及Centos 6的包。Gitlab-download

安装过程:

  1. 下载和安装软件包
1
2
3
4
wget https://downloads-packages.s3.amazonaws.com/centos-6.5/gitlab-7.0.0_omnibus-1.el6.x86_64.rpm
sudo yum install openssh-server
sudo yum install postfix # Select 'Internet Site', using sendmail or exim is also OK
sudo rpm -i gitlab-7.0.0_omnibus-1.el6.x86_64.rpm
  1. 可以提前通过配置gitlab.rb来预设置gitlab相关的配置文件。我这里只是修改了主机名:
1
2
sudo -e /etc/gitlab/gitlab.rb
external_url "http://gitlab.bubbyroom.com"
  1. 配置和启动服务
1
2
sudo gitlab-ctl reconfigure
sudo lokkit -s http -s ssh
  1. 默认用户名及密码
1
2
Username: root 
Password: 5iveL!fe

配置https

目录说明:
rpm 包安装完成后,不在传统的/etc /home相关目录下。而是集中在 /var/opt/gitlab/opt/gitlb

值得注意的是 /opt/gitlab/embedded/servicc/ ,gitlab的主目录。backup restore check等命令都需要在gitlab-rails目录进行。

由于是采用的 gitlab 7.0 版本,因上网上的现有文档都没有解决https的问题,后来在github上的gitlab最新版本库中找到nginx的配置文件,文件中就包括了配置过程。

文件目录地址: github-gitlabhq

SSL配置

创建ssl目录和证书文件。(ssl目录需要对应gitlab-http.conf)

1
2
3
4
mkdir /opt/gitlab/embedded/ssl
cd /opt/gitlab/embedded/ssl
sudo openssl req -newkey rsa:2048 -x509 -nodes -days 3560 -out gitlab.crt -keyout gitlab.key
sudo chmod o-r gitlab.key

修改配置文件

修改 gitlab-shell/config.yml ,本例完整路径为:/opt/gitlab/embedded/service/gitlab-shell/config.yml

1
2
3
1) Set "gitlab_url" param in `gitlab-shell/config.yml` to `https://git.example.com`
2) Set "ca_file" to `/etc/nginx/ssl/gitlab.crt`
3) Set "self_signed_cert" to `true`

修改 gitlab/config/gitlab.yml,本例完整路径为:/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

1
2
3
1) Define port for http "port: 443"
2) Enable https "https: true"
3) Update ssl for gravatar "ssl_url: https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=mm"

检测gitlab并重启生效

1
2
3
4
5
cd /opt/gitlab/embedded/servicc/gitlab-rails/

bundle exec rake gitlab:env:info RAILS_ENV=production

bundle exec rake gitlab:check RAILS_ENV=production

如有提示权限问题,可以通过:如下命令尝试修复:
/opt/gitlab/embedded/service/gitlab-shell/bin/install
rebuild key: bundle exec rake gitlab:shell:setup RAILS_ENV=production

nginx的配置文件参考如下:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
upstream gitlab {
  server unix:/var/opt/gitlab/gitlab-rails/tmp/sockets/gitlab.socket;
}

server {
  listen *:80;
  server_name gitlab.bubbyroom.com;
  server_tokens off;
  root /nowhere;
  rewrite ^ https://$server_name$request_uri permanent;
}

server {
  listen 443 ssl;
  server_name gitlab.xsjcs.cn;
  server_tokens off;
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  client_max_body_size 20m;

  ssl on;
  ssl_certificate /opt/gitlab/embedded/ssl/gitlab.crt;
  ssl_certificate_key /opt/gitlab/embedded/ssl/gitlab.key;

  ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4';

  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
  ssl_session_cache  builtin:1000  shared:SSL:10m;
  ssl_prefer_server_ciphers   on;

  add_header Strict-Transport-Security max-age=63072000;
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;

  access_log  /var/log/gitlab/nginx/gitlab_access.log;
  error_log   /var/log/gitlab/nginx/gitlab_error.log;

  location / {
    try_files $uri $uri/index.html $uri.html @gitlab;
  }

  location @gitlab {

    gzip off;

    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-Ssl     on;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_set_header    X-Frame-Options     SAMEORIGIN;

    proxy_pass http://gitlab;
  }

  location ~ ^/(assets)/ {
    root /opt/gitlab/embedded/service/gitlab-rails/public;
    gzip_static on; # to serve pre-gzipped version
    expires max;
    add_header Cache-Control public;
  }

  error_page 502 /502.html;
}

备份与还原

RPM包安装的目录:
/opt/gitlab/embedded/service/gitlab-rails

备份:

bundle exec rake gitlab:backup:create RAILS_ENV=production

备份文件在:/var/opt/gitlab/backups
文件名:1403964190_gitlab_backup.tar

新机器安装好后进行还原:

bundle exec rake gitlab:backup:restore RAILS_ENV=production

再次运行 eheck命令进行检查,如有问题可以update repo
bundle exec rake gitlab:gitolite:update_keys RAILS_ENV=production

注意
由于证书没有购买,在clone前,需要在本地运行 git config http.sslVerify false 以忽略证书的合法性。

否则会提示:Unable to clone Git repository due to self signed certificate

参考:CAcert

后记

  1. SSL错误提示如下:
1
SSL certificate problem: Invalid certificate chain

证书问题,需要重新生成和配置。

  1. 关于ACL,修改nginx.conf ,增加一个acl,只允许公司的出口IP访问。

  2. 关于注册,默认不允许注册,可以临时开启,让同事集中注册:

修改配置文件:
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
signup_enabled: true

今天就到此。

参考:
SSL配置:官方文档
SSL配置:jonoCoetzee
备份:官方文档

文章目录
  1. 1. 背景
  2. 2. 安装与升级
  3. 3. 配置https
    1. 3.1. SSL配置
    2. 3.2. 修改配置文件
    3. 3.3. 检测gitlab并重启生效
    4. 3.4. nginx的配置文件参考如下:
  4. 4. 备份与还原
  5. 5. 后记