目前最为主流的在线Git版本控制系统可以说是非GitHub莫属,对于个人开发者和开源项目可以直接选择GitHub作为Git版本控制系统即可,但是,对于企业内部开发管理的Git版本控制系统,在对保密性有高要求时GitHub就不合适了,这时GitLab作为一个可以完全搭建在企业内部的Git版本控制系统,而且基本囊括了GitHub的所有功能。

目前GitLab已经整合的功能

  1. Repository access
  2. Administration
  3. Issues
  4. Forks
  5. Code review
  6. Wiki
  7. Merge Requests
  8. Web Editor

测试环境

  • 2 core 4GB
  • 50GB HDD
  • CentOS 6.8
  • Gitlab

安装需求

关于GitLab的安装需求,主要是针对用户量然后评估出服务器及相关资源的配置,查看

GitLab 安装

安装配置依赖项

  1. sudo yum install curl openssh-server openssh-clients postfix cronie
  2. sudo service postfix start
  3. sudo chkconfig postfix on
  4. sudo lokkit -s http -s ssh

添加GitLab仓库,并安装到服务器上

  1. curl -sS http://packages.gitlab.cc/install/gitlab-ce/script.rpm.sh | sudo bash
  2. sudo yum install gitlab-ce

启动GitLab并初始化

  1. sudo gitlab-ctl reconfigure

默认登录账号是:root ,你可以在首次打开时设置密码。

GitLab 初始化

开机自启动

  1. vi /etc/rc.local
  2. /opt/gitlab/bin/gitlab-ctl start

GitLab 配置文件

  1. /etc/gitlab/gitlab.rb

SMTP 邮箱配置

如果想使用SMTP代替sendmail来发送邮件,应该在gitlab.rb中启用对应的配置,然后运行gitlab-ctl reconfigure使修改生效。

QQ企业邮箱配置示例
  1. gitlab_rails['smtp_enable'] = true
  2. gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
  3. gitlab_rails['smtp_port'] = 465
  4. gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
  5. gitlab_rails['smtp_password'] = "password"
  6. gitlab_rails['smtp_authentication'] = "login"
  7. gitlab_rails['smtp_enable_starttls_auto'] = true
  8. gitlab_rails['smtp_tls'] = true
  9. gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'

Gmail邮箱配置示例
  1. gitlab_rails['smtp_enable'] = true
  2. gitlab_rails['smtp_address'] = "smtp.gmail.com"
  3. gitlab_rails['smtp_port'] = 587
  4. gitlab_rails['smtp_user_name'] = "my.email@gmail.com"
  5. gitlab_rails['smtp_password'] = "my-gmail-password"
  6. gitlab_rails['smtp_domain'] = "smtp.gmail.com"
  7. gitlab_rails['smtp_authentication'] = "login"
  8. gitlab_rails['smtp_enable_starttls_auto'] = true
  9. gitlab_rails['smtp_tls'] = false
  10. gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

Outlook邮箱配置示例
  1. gitlab_rails['smtp_enable'] = true
  2. gitlab_rails['smtp_address'] = "smtp-mail.outlook.com"
  3. gitlab_rails['smtp_port'] = 587
  4. gitlab_rails['smtp_user_name'] = "username@outlook.com"
  5. gitlab_rails['smtp_password'] = "password"
  6. gitlab_rails['smtp_domain'] = "smtp-mail.outlook.com"
  7. gitlab_rails['smtp_authentication'] = "login"
  8. gitlab_rails['smtp_enable_starttls_auto'] = true
  9. gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

HowTo Install GitLab - 图1 ‘smtp_password’字段不应包含任何 Ruby或者YAML语法中的分隔符 (如'),以避免处理配置文件的过程中发生不必要的意外。

GitLab 日常维护

1. 查看服务状态

使用 gitlab-ctl status 查看服务状态

  1. [root@6 ~]# sudo gitlab-ctl status
  2. run: gitaly: (pid 15055) 23089s; run: log: (pid 3142) 55379s
  3. run: gitlab-monitor: (pid 15060) 23088s; run: log: (pid 3325) 55357s
  4. run: gitlab-workhorse: (pid 15063) 23088s; run: log: (pid 3156) 55377s
  5. run: logrotate: (pid 17867) 1487s; run: log: (pid 3197) 55369s
  6. run: nginx: (pid 15077) 23087s; run: log: (pid 3169) 55375s
  7. run: node-exporter: (pid 15083) 23087s; run: log: (pid 3247) 55366s
  8. run: postgres-exporter: (pid 15088) 23086s; run: log: (pid 3311) 55358s
  9. run: postgresql: (pid 15093) 23086s; run: log: (pid 2988) 55412s
  10. run: prometheus: (pid 15101) 23085s; run: log: (pid 3230) 55368s
  11. run: redis: (pid 15109) 23085s; run: log: (pid 2931) 55419s
  12. run: redis-exporter: (pid 15113) 23085s; run: log: (pid 3290) 55364s
  13. run: sidekiq: (pid 17029) 22450s; run: log: (pid 3131) 55380s
  14. run: unicorn: (pid 17001) 22460s; run: log: (pid 3100) 55386s

2. 启动、关闭、重启
  1. # 启动Gitlab所有组件
  2. sudo gitlab-ctl start
  3. # 停止Gitlab所有组件
  4. sudo gitlab-ctl stop
  5. # 重启Gitlab所有组件
  6. sudo gitlab-ctl restart
  7. # 重启单个组件
  8. sudo gitlab-ctl restart sidekiq

3. 控制台实时查看日志
  1. # 查看所有的logs; 按 Ctrl-C 退出
  2. sudo gitlab-ctl tail
  3. # 拉取/var/log/gitlab下子目录的日志
  4. sudo gitlab-ctl tail gitlab-rails
  5. # 拉取某个指定的日志文件
  6. sudo gitlab-ctl tail nginx/gitlab_error.log

GitLab 安装后优化

启用HTTPS

首先,你需要提供一个有可信任CA证书,默认情况下GitLab是没有启用HTTPS的,如果要启用HTTPS时,首先要修改/etc/gitlab/gitlab.rb中的external_url:

  1. # 修改为https
  2. external_url "https://git.ultraera.org"
  3. # 设置默认将http重定向到https
  4. nginx['redirect_http_to_https'] = true

如果你暂时没有https证书,那么你可以临时自己颁发一个证书,注意这个证书是不受信任的。

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

另外,还需要在gitlab-shell中的config.yml中将self_signed_cert 修改为启用:

  1. self_signed_cert = true

设置延迟启动

为保证服务质量,我们可以设置让omnibus-gitlab的服务(Nginx, Redis, Unicorn等) 在指定的文件系统挂载成功后再启动,在/etc/gitlab/gitlab.rb 文件中添加如下内容:

  1. # 等待/var/opt/gitlab 先被挂载
  2. high_availability['mountpoint'] = '/var/opt/gitlab'

注意在修改配置之后,要使用重新reconfigure配置

Backups 备份还原

备份

Gitlab的配置也非常简单,使用一条命令即可创建完整的Gitlab备份:

  1. gitlab-rake gitlab:backup:create

该命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1491989249_2017_04_12_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分,其中开头的1491989249_2017_04_12是备份创建的日期,这也是我们等下恢复是要用的字段。

修改默认备份路径

如果你像我一样,是使用yum安装的,那么GitLab默认的备份目录应该在/var/opt/gitlab/backups,我建议将备份目录修改为其他位置,并添加定时自动备份脚本,可以通过修改/etc/gitlab/gitlab.rb来修改默认位置:

  1. gitlab_rails['backup_path'] = '/mnt/backups'

使用crontab 添加自动备份
  1. # 每天凌晨00:00 自动备份
  2. 00 00 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create

备份恢复
  1. # 停止相关数据连接服务
  2. gitlab-ctl stop unicorn
  3. gitlab-ctl stop sidekiq
  4. # 从1491989249_2017_04_12编号备份中恢复
  5. gitlab-rake gitlab:backup:restore BACKUP=1491989249_2017_04_12
  6. # 启动Gitlab
  7. sudo gitlab-ctl start unicorn
  8. sudo gitlab-ctl start sidekiq

GitLab 迁移

只需将原服务器/var/opt/gitlab/backups目录下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups上即可(如果你没修改过默认备份目录的话), 但是需要注意的是新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同, 比如新服务器安装的是最新的9.0.5版本的Gitlab, 那么迁移之前,最好将老服务器的Gitlab 升级为9.0.5在进行备份。

/Users/Alex/Documents/Hexo/source/_posts/