写在前面
如果你需要一个git服务器,为企业或自己的团队托管代码而又不希望将代码仓库存储到第三方。你可以在自己的服务器上搭建一个gitlab。
本文为我在最初安装配置gitlab服务器的时候留存的笔记,暂未进行系统性整理。
gitlab社区版是MIT许可,这意味着你可以搭建自己的代码服务器为公司托管源码,而没有许可问题。gitlab企业版需要收费订阅。如果不订阅,功能与社区版是相同的。gitlab官方建议如果后续有考虑买服务或者想要试用企业版的用户安装企业版。安装企业版试用期结束后,会自动降级到社区版。不过如果你并没有付费的打算,或者你对开源软件有偏执,建议直接安装gitlab-ce(社区版)。
虽然笔记中存在汉化与锁定版本的方法,但是不建议这样做。汉化后我遇到了部分账户的部分功能出现异常。重装英文版本并将数据备份还原后问题仍无法解决。只能删除有问题的账户,在英文版本上为其重建账户问题才会消失。
建议配置定时升级,因为gitlab-ce升级频率其实还是挺快的,而且漏洞及时修复有助于提升安全性,并减少升级版本跨度。建议按笔记配置定时备份以及邮件通知。
本文有一些初级用户的参考笔记,如果你是高级用户,可以忽略,仅关注gitlab相关内容。其实官网有安装配置教程。
主要需要注意的几点是:
- 配置清华镜像
- 配置邮件
- 配置备份还原
Linux 配置
Linux安装
- 使用CentOS 7 x64位最少安装版安装盘http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso
- 安装时设置ip地址,DNS
- 分区设置,如果不调整仓储存储位置,建议调大root分区
拓展硬盘大小
拓展硬盘分区,常用于虚拟机
http://blog.csdn.net/remote_roamer/article/details/50670802
df -h #查看挂载点
fdisk -l #列出分区表
挂载硬盘
增加新硬盘,分区,挂载
https://www.cnblogs.com/silent2012/p/4586273.html
root home空间重新调整
如果安装时,未配置root home大小,则需重新调整
https://www.linuxidc.com/Linux/2017-03/141301.htm
配置ipv4地址
如果安装时,未配置静态ip,或者后续需要调整ip,则需重新配置。
修改服务器ip,还需可能需要修改gitlab ip配置
vi /etc/sysconfig/network-scripts/ifcfg-em1
DEVICE=... #网卡设备名,可通过ip addr查询
BOOTPROTO="static" #dhcp改为static
ONBOOT="yes" #开机启用本配置
IPADDR=... #静态IP
GATEWAY=... #默认网关
NETMASK=... #子网掩码
DNS1=... #DNS1 配置
DNS2=... #DNS2 配置
service network restart
删除多余内核
如果系统升级更新了内核,需要手动删除老内核
uname -a
rpm -qa | grep kernel
yum remove kernel-3.10.0-229.14.1.el7
yum命令
yum install
yum install gitlab-ce-x.x.x #安装指定的版本
yum remove
yum clean all #清除缓存
linux查看当前路径
pwd 或 pwd -P显示出实际路径
GitLab配置
GitLab安装
设置清华大学GitLab源
https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/
vi /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
sudo yum makecache
命令行安装
访问https://about.gitlab.com/installation/ce-or-ee/?distro=centos-7
点击 Install GitLab Community Edition 查看安装教程
sudo yum install -y curl policycoreutils-python openssh-server openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://yourip" yum install -y gitlab-ce-10.7.1 #可指定安装版本,yourip为你的服务器ip或域名
然后登陆网址设置gitlab管理员root账户初始密码
配置邮箱
https://docs.gitlab.com/omnibus/settings/smtp.html
vi /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.yourdomain.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "gitlabserver@yourdomain.com"
gitlab_rails['smtp_password'] = "..." #需配置正确的密码
gitlab_rails['smtp_domain'] = "smtp.yourdomain.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_ssl'] = true
gitlab_rails['smtp_force_ssl'] = true
gitlab_rails['gitlab_email_from'] = 'gitlabserver@yourdomain.com'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@yourdomain.com'
gitlab-ctl reconfigure
测试SMTP
gitlab-rails console
irb(main):003:0> Notify.test_email('xxx@yourdomain.com', 'test', 'this is a test').deliver_now
迁移后客户端处理
如果迁移服务器而未拷贝密钥,客户端程序会发生man-in-the-middle警告。此时需要所有客户端手动处理。
建议备份时同时备份ssh密钥。
git bash
ssh-keygen -R yourip
ssh -T git@yourip
gitlab配置时区
https://blog.csdn.net/ouyang_peng/article/details/78653790
https://www.cnblogs.com/TechSnail/p/8213490.html
vi /etc/gitlab/gitlab.rb
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab-ctl reconfigure
设置进程数
解决内存消耗过大问题,设置为CPU核心数加一
vi /etc/gitlab/gitlab.rb
unicorn['worker_processes'] = 5
gitlab-ctl reconfigure
修改gitlab ip配置
vi /etc/gitlab/gitlab.rb
external_url 'http://yourip'
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab汉化(不建议汉化,如果实在需要汉化建议从汉化库安装,或禁止gitlab版本更新)
https://gitlab.com/xhang/gitlab/wikis/home
需要先安装patch,git
yum install patch
yum install git
请先使用官方包安装或升级完成,确认当前版本。
gitlab_version=$(sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION)# 获取当前版本
假设当前版本为v9.0.0,并确认汉化版本库是否包含该版本的汉化标签(-zh结尾)。
如果具有相同版本的汉化标签,则首先在本地 clone 仓库。
git clone https://gitlab.com/xhang/gitlab.git # 克隆汉化版本库
git fetch # 如果已经克隆过,则进行更新
然后比较汉化标签和原标签,导出 patch 用的 diff 文件。
git diff v${gitlab_version} v${gitlab_version}-zh > ../${gitlab_version}-zh.diff #导出9.0.0 版本的汉化补丁
执行完毕后将生成当前版本的补丁文件,如 9.0.0-zh.diff
导入汉化补丁:
sudo gitlab-ctl stop #停止 gitlab
sudo patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < ${gitlab_version}-zh.diff
(patch时出现警告是由于该文件曾汉化过,此时直接回车忽略)
确定没有 .rej 文件,重启 GitLab 即可。
sudo gitlab-ctl start
执行重新配置命令
sudo gitlab-ctl reconfigure
如果汉化中出现问题,请重新安装 GitLab(注意备份数据)。
version lock 锁定gitlab版本
由于gitlab汉化版本进程可能晚于实际发布版本,所以对gitlab设置了版本锁
http://www.jb51.net/os/RedHat/154256.html
yum install -y yum-plugin-versionlock.noarch
yum versionlock gitlab-ce-10.7.1
GitLab备份还原
https://docs.gitlab.com/omnibus/settings/backups.html
http://www.cnblogs.com/linkenpark/p/8405436.html
老的gitlab服务器进行备份
gitlab默认备份路径"/var/opt/gitlab/backups"需修改到挂载盘"/mnt/sdb1"
vi /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/mnt/sdb1" #配置为自己的备份位置
gitlab-ctl reconfigure
gitlab-rake gitlab:backup:create
cp /etc/gitlab/gitlab-secrets.json /mnt/sdb1/backupkeys/
cp /etc/ssh/*key* /mnt/sdb1/backupkeys/
cp /etc/ssh/sshd_config /mnt/sdb1/backupkeys/
新的gitlab服务器还原
gitlab-ctl reconfigure
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl status
gitlab-rake gitlab:backup:restore backup=backfilename #backfilename是指gitlab备份包的文件名1525677013_2018_05_07_10.7.1_gitlab_backup.tar
cp -f /mnt/sdb1/backupkeys/gitlab-secrets.json /etc/gitlab/
cp -f /mnt/sdb1/backupkeys/*key* /etc/ssh/
cp -f /mnt/sdb1/backupkeys/sshd_config /etc/ssh/ #需注意覆盖此文件会禁止root ssh登陆,覆盖前需保证配置了账户,详情见 linux配置-root账户安全配置
gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true#检查新gitlab服务器刚刚导入的数据
gitlab-ctl reconfigure
对于不同ip地址的服务器迁移可使用
scp username@src_ip:/var/opt/gitlab/backups/1461165090_gitlab_backup.tar /var/opt/gitlab/backups
Gitlab定时备份
- 每天凌晨两点使用gitlab-rake gitlab:backup:create命令创建备份到备份盘
- 设置备份保存时间为3天
- 每天凌晨两点半备份服务器key(还原key可避免出现man-in-the-middle警告https://docs.gitlab.com/omnibus/settings/backups.html)
创建bakcupkeys目录
cd /mnt/sdb1
mkdir backupkeys
创建备份key sh脚本
vi /mnt/sdb1/backupkeys.sh
#! /bin/sh
cp -f /etc/gitlab/gitlab-secrets.json /mnt/sdb1/backupkeys/
cp -f /etc/ssh/*key* /mnt/sdb1/backupkeys/
cp -f /etc/ssh/sshd_config /mnt/sdb1/backupkeys/
echo key backup done!
创建自动备份计划,并邮件通知
yum install -y mailx
vi /etc/mail.rc
#SMTP
set from=gitlabserver@yourdomain.com
set smtp=smtp.yourdomain.com
set smtp-auth-user=gitlabserver@yourdomain.com
set smtp-auth-password=...
set smtp-auth=login
vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
00 01 * * * root gitlab-rake gitlab:backup:create | mail -s "gitlabbackup" yourname@yourdomain.com,othername@yourdomain.com
30 01 * * * root /mnt/sdb1/backupkeys.sh | mail -s "bakcupkeys" yourname@yourdomain.com,othername@yourdomain.com
00 02 * * * root yum update -y | mail -s "yum update" yourname@yourdomain.com,othername@yourdomain.com
service crond restart
设置备份清理
vi /etc/gitlab/gitlab.rb
gitlab_rails['backup_keep_time'] = 259200 #设置备份保存时长为三天3600 * 24 * 3
gitlab-ctl reconfigure
gitlab-ctl restart
递进升级到目前最新的稳定版本
列出当前gitlab所有版本
yum list gitlab-ce.x86_64 --showduplicates | sort -r
先升级到当前安装主版本的最后一个子版本,再升级到下一个主版本的合适的子版本。
升级完一个版本后,确认无报错,数据正常,再升级到下一个版本。
下面就是从7.x.x升级到10.x.x的升级方法
yum install -y gitlab-ce-7.14.3-ce.1.el7
yum install -y gitlab-ce-8.17.8-ce.0.el7
yum install -y gitlab-ce-9.5.9-ce.0.el7
yum install -y gitlab-ce-10.3.5-ce.0.el7
gitlab-ctl restart
Gitlab常规升级
- 关闭versionlock: yum versionlock clear
- 查看gitlab-ce更新的版本:yum check-update gitlab-ce
- 检查汉化此版本是否已汉化完成,应更新到已汉化的最新版本。查看方法为:访问https://gitlab.com/xhang/gitlab,查看tag
- 锁定最新gitlab版本,以10.8.0为例: yum versionlock gitlab-ce-10.8.0
- 更新 yum update -y
- 重新汉化(patch时出现警告是由于该文件曾汉化过,此时直接回车忽略)
Gitlab重装还原
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:create
cp /etc/gitlab/gitlab.rb /mnt/sdb1 #拷贝配置文件,否则需要重配
yum remove gitlab-ce
mv /opt/gitlab /mnt/sdb1/gitlab-0531 #备份gitlab目录
yum install gitlab-ce
cp /mnt/sdb1/gitlab.rb /etc/gitlab/gitlab.rb
gitlab-ctl reconfigure
gitlab-rake gitlab:backup:restore BACKUP=1527742989_2018_05_31_10.8.2 #根据实际情况填入最新的文件戳
gitlab-ctl reconfigure
gitlab-ctl restart
Gitlab关闭开放注册
gitlab管理员登陆 http://yourip/admin/application_settings
去除Sign-up restrictions - Sign-up enabled 勾选项