记录gitlab仓库搭建

  • gitlab
  • 介绍
  • 离线下载rpm包
  • 前期准备环境
  • 环境依赖包安装及防火墙配置
  • 安装gitlab并启动服务
  • gitlab数据库连接外部
  • gitlab 关闭自带的nginx服务配置
  • 邮件发送配置
  • 汉化
  • 备份&还原
  • gitlab 维护管理常用命令行记录
  • 问题记录
  • 管理员忘记密码--使用rails脚本重置密码
  • 内存比较小
  • https 配置 gitlab 登录 422报错
  • git 迁移 `commit:pending`问题
  • 更新配置文件


gitlab

介绍

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用。

离线下载rpm包

Gitlab的rpm包集成了它需要的软件,简化了安装步骤,所以直接安装rpm包即可,rpm包的获取从官方网站或者国内镜像源

gitlab rpm下载地址:(清华大学开源软件镜像站点)

前期准备环境

注:gitlab系统要求2G内存以上,不然可能会500报错

# 使用阿里云作加速
cd /etc/yum.repos.d/ 
mkdir bak
mv *.repo ./bak
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

环境依赖包安装及防火墙配置

# 安装依赖包
yum install -y pygpgme yum-utils
yum install -y curl policycoreutils-python openssh-server
yum install -y git

# 防火墙永久开启http
firewall-cmd --permanent --add-service=http
systemctl reload firewalld

# 安装postfix邮件服务
yum install postfix
systemctl enable postfix
systemctl start postfix

安装gitlab并启动服务

# 安装rpm 包
cd /tmp
rpm -ivh gitlab-ce-11.4.5-ce.0.el7.x86_64.rpm

# gitlab预配置
vi /etc/gitlab/gitlab.rb
# 找到并修改external_url 'http://gitlab.example.com'
external_url 'http://服务器IP'

# 自动配置gitlab
gitlab-ctl reconfigure

# 启动所有服务
gitlab-ctl start

gitlab数据库连接外部

由于我们服务器已经有了数据库,所以需要停用gitlab自带的postgresql.
配置方式如下

# 数据库配置
gitlab_rails['db_adapter'] = "postgresql"
gitlab_rails['db_encoding'] = 'utf8'

postgresql['enable'] = false
gitlab_rails['db_database'] = "dbname"
gitlab_rails['db_host'] = 'ip'
gitlab_rails['db_port'] = '5432'
#上个步骤创建的用户
gitlab_rails['db_username'] = 'name'
gitlab_rails['db_password'] = '**********'

gitlab 关闭自带的nginx服务配置

nginx['enable'] = false
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "127.0.0.1:8021"

邮件发送配置

# 阿里云默认屏蔽25端口

## qq邮箱配置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "1****15359@qq.com"
gitlab_rails['smtp_password'] = "********" # qq邮箱smtp生成密码,不是登录密码
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = "1****15359@qq.com"
gitlab_rails['gitlab_email_reply_to'] = '1****15359@qq.com'
gitlab_rails['smtp_openssl_verify_mode'] = 'none'

## 阿里企业邮箱配置
gitlab_rails['smtp_enable'] = true 
gitlab_rails['smtp_address'] = "smtp.mxhichina.com" 
gitlab_rails['smtp_port'] = 465 
gitlab_rails['smtp_user_name'] = "test@test.com" 
gitlab_rails['smtp_password'] = "z_di@1234" 
gitlab_rails['smtp_domain'] = "smtp.mxhichina.com" 
gitlab_rails['smtp_authentication'] = "login" 
gitlab_rails['smtp_enable_starttls_auto'] = true 
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'test@test.com'
gitlab_rails['gitlab_email_reply_to'] = 'test@test.com' 
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
user['git_user_email'] = "test@test.com"




# 发送测试邮件,检查邮件配置是否有问题
$ gitlab-rails console 
irb(main):001:0> Notify.test_email('z_di@qq.com', 'Message Subject test', 'Message Body test').deliver_now

汉化

虚拟机上试验了汉化补丁,发现汉化没有多大的意义,还不如原始的英文版本好看

# 查看gitlab版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
git clone https://gitlab.com/xhang/gitlab.git
cd gitlab/
## 生成补丁
git diff v10.0.2 v10.0.2-zh > ../10.0.2-zh.diff
# 打补丁
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < 10.0.2-zh.diff   #不停回车

备份&还原

# 设置配置文件
vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab/backups"    //gitlab备份目录
gitlab_rails['backup_archive_permissions'] = 0644       //生成的备份文件权限
gitlab_rails['backup_keep_time'] = 7776000              //备份保留天数为3个月(即90天,这里是7776000秒)

# 生成备份文件夹 
mkdir -p /data/gitlab/backups
chown -R git.git /data/gitlab/backups
chmod -R 777 /data/gitlab/backups
  
如上设置了gitlab备份目录路径为/data/gitlab/backups,最后使用下面命令重载gitlab配置文件,是上述修改生效!
gitlab-ctl reconfigure

gitlab-ctl restart

gitlab-rake gitlab:backup:create

# 还原 吧备份文件cp到设置的备份目录下
gitlab-rake gitlab:backup:restore BACKUP=1528446365_2018_06_08_10.8.4
# 恢复命令:gitlab-rake gitlab:backup:restore BACKUP=备份文件时间戳,恢复的时候如果版本不一致,可能报错

gitlab 维护管理常用命令行记录

# 生成配置启动服务(重新加载配置文件/etc/gitlab/gitlab.rb,如配置文件有更改需要重新加载生效)
gitlab-ctl reconfigure

# 启动
gitlab-ctl start

# 停用
gitlab-ctl stop

# 重启
gitlab-ctl restart

# 查看状态
gitlab-ctl status

# 查看日志
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

问题记录

管理员忘记密码–使用rails脚本重置密码

# 启动 rails
gitlab-rails console production

# 修改密码脚本
user = User.where(id: 1).first
user.password = '123'
user.password_confirmation = '123'
user.save!

内存比较小

# 如果内存比较小的话建议修改配置文件
unicorn['worker_processes'] = 1  #默认为2,1不能在线创建文件或修改

https 配置 gitlab 登录 422报错

原因是Nginx需要配置https

# https 
  nginx['proxy_set_headers'] = {
    "X-Forwarded-Proto" => "https",
    "X-Forwarded-Ssl" => "on"
  }
#http
  nginx['proxy_set_headers'] = {
    "X-Forwarded-Proto" => "http",
    "CUSTOM_HEADER" => "VALUE"
  }

git 迁移 commit:pending问题

取消Default to Auto DevOps pipeline for all projects的选择框。

更新配置文件

# 修改配置文件之后需要停止gitlab所有服务--
gitlab-ctl stop

# 更新配置文件
gitlab-ctl reconfigure

# 重启gitlab
gitlab-ctl restart

# 查看gitlab 服务状态
gitlab-ctl status