GitLab 是一个利用Ruby on Rails 开发的开源版本控制系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
开源中国代码托管平台 码云 就是基于GitLab项目搭建。
GitLab 分为 GitLab Community Edition(CE) 社区版 和 GitLab Enterprise Edition(EE) 专业版。社区版免费,专业版收费,两个版本在功能上的差异对比,可以参考官方对比说明。
本文以CentOS 7.4 && Ubuntu16.04为例,更多安装方法参考:https://about.gitlab.com/installation/
准备工作
推荐配置至少2C4G.(官方推荐配置,低配机器可自行测试)
安装依赖
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
设置gitlab安装源
官方源安装方法:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
由于网络问题,国内推荐使用清华大学镜像源进行安装:
cat>/etc/yum.repos.d/gitlab-ce.repo<<‘EOF’
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
EOF
安装GitLab
首先可以设置域名,域名需要保证能够正常解析,可以根据使用场景选择公网域名或者是本地hosts测试。
sudo EXTERNAL_URL=“http://gitlab.ikiwi.me” yum install -y gitlab-ce
也可以不设置域名,域名绑定可以随时在配置文件/etc/gitlab/gitlab.rb里进行修改:
external_url ‘http://gitlab.xxx.com’
直接安装:
sudo yum install -y gitlab-ce
安装完成以后,运行下面的命令进行配置:
sudo gitlab-ctl reconfigure
安装依赖
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
sudo apt-get install -y postfix
设置gitlab安装源
官方源安装方法:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
安装GitLab
首先可以设置域名,域名需要保证能够正常解析,可以根据使用场景选择公网域名或者是本地hosts测试。
sudo EXTERNAL_URL=“http://gitlab.ikiwi.me” apt-get install gitlab-ce
也可以不设置域名,域名绑定可以随时在配置文件/etc/gitlab/gitlab.rb里进行修改:
external_url ‘http://gitlab.xxx.com’
直接安装:
sudo apt-get install gitlab-ce
安装完成以后,运行下面的命令进行配置:
sudo gitlab-ctl reconfigure
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.0.3-ce.0.el7.x86_64.rpm/download.rpm
rpm -ivh gitlab-ce-11.0.3-ce.0.el7.x86_64.rpm
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/xenial/gitlab-ce_11.3.8-ce.0_amd64.deb/download.deb
sudo dpkg -i gitlab-ce_11.3.8-ce.0_amd64.deb
安装完成以后,运行下面的命令进行配置:
sudo gitlab-ctl reconfigure
安装完成后,整个Gitlab项目构成:
nginx: 静态web服务器
gitlab-shell: 用于处理Git命令和修改authorized keys列表
gitlab-workhorse: 轻量级的反向代理服务器
logrotate:日志文件管理工具
postgresql:数据库
redis:缓存数据库
sidekiq:用于在后台执行队列任务(异步执行)
unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。
安装目录信息如下:
主配置文件: /etc/gitlab/gitlab.rb
GitLab 文档根目录: /opt/gitlab
默认存储库位置: /var/opt/gitlab/git-data/repositories
GitLab Nginx 配置文件路径: /var/opt/gitlab/nginx/conf/gitlab-http.conf
Postgresql 数据目录: /var/opt/gitlab/postgresql/data
安装工作完成后,登录web界面以及修改账户密码:
访问之前设置的域名http://gitlab.example.com/,初次登录强制要求修改root用户的密码,修改后并登录。
登录成功后的主界面:
GitLab默认是使用HTTP的,可以手动配置为HTTPS.
上传SSL证书
创建ssl目录,用于存放SSL证书
mkdir -p /etc/gitlab/ssl
chmod 0700 /etc/gitlab/ssl
上传证书并修改证书权限
chmod 600 /etc/gitlab/ssl/*
修改GitLab的配置文件
修改配置文件/etc/gitlab/gitlab.rb
external_url “https://gitlab.xxx.com”
nginx[‘redirect_http_to_https’] = true
nginx[‘ssl_certificate’] = “/etc/gitlab/ssl/gitlab.xxx.com.crt”
nginx[‘ssl_certificate_key’] = “/etc/gitlab/ssl/gitlab.xxx.com.key”
重启服务,使其生效
gitlab-ctl restart
以上操作后,GitLab自带的Nginx服务的配置文件 /var/opt/gitlab/nginx/conf/gitlab-http.conf 会被重新修改为:
server {
listen *:80;
server_name gitlab.xxx.com;
server_tokens off; ## Don’t show the nginx version number, a security best practice
return 301 https://gitlab.xxx.com:443$request_uri;
access_log /var/log/gitlab/nginx/gitlab_access.log gitlab_access;
error_log /var/log/gitlab/nginx/gitlab_error.log;
}不用额外再配置,HTTP 会自动跳转到 HTTPS 。记得要对外放行443端口。
#启动所有 gitlab 组件:
gitlab-ctl start
#停止所有 gitlab 组件:
gitlab-ctl stop
#停止所有 gitlab postgresql 组件:
gitlab-ctl stop postgresql
#停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
#重启所有 gitlab 组件:
gitlab-ctl restart
#重启所有 gitlab gitlab-workhorse 组件:
gitlab-ctl restart gitlab-workhorse
#查看服务状态
gitlab-ctl status
#生成配置并启动服务
gitlab-ctl reconfigure
#查看版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
#检查gitlab
gitlab-rake gitlab:check SANITIZE=true --trace
#实时查看日志
gitlab-ctl tail
#数据库关系升级
gitlab-rake db:migrate
#清理redis缓存
gitlab-rake cache:clear
#升级GitLab-ce 版本
yum update gitlab-ce
#升级PostgreSQL最新版本
gitlab-ctl pg-upgrade
#实时查看所有日志
gitlab-ctl tail
#实时检查redis的日志
gitlab-ctl tail redis
#实时检查postgresql的日志
gitlab-ctl tail postgresql
#检查gitlab-workhorse的日志
gitlab-ctl tail gitlab-workhorse
#检查logrotate的日志
gitlab-ctl tail logrotate
#检查nginx的日志
gitlab-ctl tail nginx
#检查sidekiq的日志
gitlab-ctl tail sidekiq
#检查unicorn的日志
gitlab-ctl tail unicorn
GitLab作为公司项目代码的版本管理系统,数据非常重要,所以应做好备份工作。
修改备份目录
GitLab备份的默认目录是/var/opt/gitlab/backups ,如果想改备份目录,可修改/etc/gitlab/gitlab.rb:
gitlab_rails[‘backup_path’] = ‘/data/backups’
修改配置后,记得:
gitlab-ctl reconfigure
备份命令
gitlab-rake gitlab:backup:create
该命令会在备份目录(默认:/var/opt/gitlab/backups/)下创建一个tar压缩包xxxxxxxx_gitlab_backup.tar,其中开头的xxxxxx是备份创建的时间戳,这个压缩包包括GitLab整个的完整部分。
备份保留7天
可设置只保留最近7天的备份,编辑配置文件/etc/gitlab/gitlab.rb
#数值单位:秒
gitlab_rails[‘backup_keep_time’] = 604800
重新加载gitlab配置文件
gitlab-ctl reconfigure
恢复
备份文件:
/var/opt/gitlab/backups/1499244722_2017_07_05_9.2.6_gitlab_backup.tar
停止 unicorn 和 sidekiq ,保证数据库没有新的连接,不会有写数据情况。
#停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
#指定恢复文件,会自动去备份目录找。确保备份目录中有这个文件。
#指定文件名的格式类似:1499242399_2017_07_05_9.2.6,程序会自动在文件名后补上:“_gitlab_backup.tar”
#一定按这样的格式指定,否则会出现 The backup file does not exist! 的错误
gitlab-rake gitlab:backup:restore BACKUP=1499242399_2017_07_05_9.2.6
#启动Gitlab
gitlab-ctl start
Gitlab还支持自动备份文件到阿里云OSS,具体配置如下:
修改配置文件 /etc/gitlab/gitlab.rb
gitlab_rails['backup_upload_connection']={
'provider'=>'aliyun',
'aliyun_accesskey_id'=>'xxxxx', # 阿里云ak
'aliyun_accesskey_secret'=>'xxxxxxxxxxxxxxxx', # 阿里云aks
'aliyun_oss_endpoint'=>'oss-cn-shenzhen-internal.aliyuncs.com', # 阿里云oss连接地址
'aliyun_oss_bucket'=>'xy-gitlab', # oss的bucket地址
'aliyun_oss_location'=>'cn-shenzhen', # oss地域
}
gitlab_rails['backup_upload_remote_directory']='gitlab' # 远端备份路径,即为bucket的子目录
重启gitlab,使配置生效
gitlab-ctl reconfigure
gitlab-ctl restart