Centos7 安装gitlab

环境说明:
虚拟机 centos 7 64位
内存:4GB
存储:100GB
CPU: CORE

版本:
gitlab 10.0.3 

  • 配置系统基础环境

配置阿里巴巴 yum 源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

重建yum 的缓存

yum clean all
yum makecache

配置 yum 的本地源

mount ~/CentOS-7-x86_64-DVD-1708.iso /mnt/cdrom/

修改本地 yum 的配置

git clone https://gitlab.com/xhang/gitlab.git

将 baseurl 的参数增加一个列表

git clone https://gitlab.com/xhang/gitlab.git

修改enabled值,改为

enabled=1
  • 安装gitlab 环境准备

安装 git

yum install -y git

创建 gitlab汉化版的源码目录,等一下使用git clone 一份新的代码

mkdir gitlab_zh
cd gitlab_zh
git clone https://gitlab.com/xhang/gitlab.git

当前作者下载汉化源码为10.0.4,但是即将安装的 gitlab 版本为 10.0.3

  • 安装gitlab

安装 gitlab 的依赖包

yum install curl openssh-server openssh-clients postfix cronie policycoreutils-python –y
yum install -y patch

启动 postfix,并且设置为开机启动

systemctl start postfix
systemctl enable postfix

设置防火墙

firewall-cmd --add-service=http --permanent
firewall-cmd --reload

大家从网上下载好 gitlab 的rpm 包后,就可以安装了

rpm -i gitlab-ce-10.0.3-ce.0.el7.x86_64.rpm

gitlab 下载地址:

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

当 shell 中出现以下内容,则证明 gitlab 的程序安装完了

继续安装提示执行配置 gitlab 的命令

gitlab-ctl reconfigure

修改 gitlab 的配置文件

vi /etc/gitlab/gitlab.rb

修改里面的 external_url 参数,例如作者的机器的IP地址为 10.211.55.10

external_url='http://10.211.55.10'

因为修改了配置文件,所以重新加载配置文件

gitlab-ctl reconfigure
  • 汉化 gitlab

使用汉化包来为社区版本的 gitlab 打补丁

停止 gitlab 服务

gitlab-ctl stop

切换到 刚才从 github 上download 的汉化包目录

cd /root/source/gitlab_zh/gitlab/

找出安装的 10.0.3 版本和 汉化版本10.0.4 中的不同点

git diff v10.0.3 v10.0.4-zh > ../10.0.3-zh.diff

目录倒退一层

cd ../

将 10.0.3-zh.diff 的补丁添加到 gitlab 中

patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < 10.0.3-zh.diff

重新启动 gitlab 服务

gitlab-ctl start

重新配置 gitlab

gitlab-ctl reconfigure

软件安装部分就完成了,以下是web 页面配置部分

  • web页面配置

由于作者本机的IP 地址为 10.211.55.10,而且gitlab 默认的端口号为 80,所以使用浏览器访问以下地址:
http://10.211.55.10:80

用户自己在页面上输入 新的密码,该密码为 管理员密码

未来管理员的登陆名为 root,密码为刚才修改的密码

  • 配置gitlab 用户注册时的邮箱通知信息

修改 /etc/gitlab/gitlab.rb 配置文件,该邮箱地址是未来gitlab 向用户发送邮件时的推送邮箱

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"           # 用户输入自己的smtp服务器地址,例如作者的时163 的企业服务地址
gitlab_rails['smtp_port'] = 25                         # 用户smtp 的端口号
gitlab_rails['smtp_user_name'] = "***@qq.com"          # 用户的邮箱地址
gitlab_rails['smtp_password'] = "PASSWORD"             # 用户的邮箱密码
gitlab_rails['smtp_domain'] = "qq.com"                 # 用户邮箱的域名
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = '***@qq.com'       # 用户的邮箱地址
user['git_user_email'] = "***@qq.com"                  # 用户的邮箱地址

作者在这里给大家一个提醒,如果大家安装gitlab 的环境为阿里云,一定要确认25 端口是否能够使用,作者就由于之后在阿里云上部署gitlab时,遇到25 端口无法使用的问题,所以一直导致在注册新用户时,邮件无法发送出去,这个时候解决方法可以选择使用打开 ssl 加密传输,这样端口就不再是 25 端口了,例如qq 的邮件配置应该变为

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"           # 用户输入自己的smtp服务器地址,例如作者的时163 的企业服务地址
gitlab_rails['smtp_port'] = 465                        # 用户smtp 的端口号
gitlab_rails['smtp_user_name'] = "***@qq.com"          # 用户的邮箱地址
gitlab_rails['smtp_password'] = "PASSWORD"             # 用户的邮箱密码
gitlab_rails['smtp_domain'] = "qq.com"                 # 用户邮箱的域名
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = '***@qq.com'       # 用户的邮箱地址
user['git_user_email'] = "***@qq.com"                  # 用户的邮箱地址
gitlab_rails['smtp_tls'] = true                        # 打开 ssl 加密传输

因为修改了配置文件,所以重新加载配置文件

gitlab-ctl reconfigure

因为有时候邮箱的密码需要不定时修改,所以未来管理员也会同步修改登录邮箱的密码,在修改了配置文件后,所以在重新加载后,可以通过以下命令查看刚才修改的内容是否生效

gitlab-ctl show-config | grep smtp_password

管理员还需要在web的管理页面上修改对应的配置,管理员的配置页面可以点击以下按钮

gitlab是否打开新用户注册

如果管理员需要自己手工添加新用户可以在以下页面配置

其他的一些技术点

  • 查看gitlab 的配置
gitlab-ctl show-config
  • 查看gitlab 的运行日志
gitlab-ctl tail
  • 切换gitlab 仓库的数据目录

gitlab 默认的仓库数据目录为 /var/opt/gitlab/git-data/repositories/ ,如果未来用户的数据量大了,需要更换仓库数据目录,可以通过修改 /etc/gitlab/gitlab.rb 配置进行调整。

用户在调整gitlab 的配置之前,建议对其先停止服务。

gitlab-ctl stop

 然后用户创建好未来要迁移的数据目录,并且将原来的数据 迁移 过去,由于作者的 gitlab 是通过 rpm 包安装的,所以gitlab 的系统用户为 git,用户组为 root,所以在拷贝数据后还需要修改新数据目录的用户归属,否者后面gitlab 无法对该目录写入新的数据。

mkdir -p /mnt/gitlab/git-data/
mv /var/opt/gitlab/git-data/repositories/* /mnt/gitlab/git-data/repositories/
chown -R git:root /mnt/gitlab/git-data/*

然后用户就可以对 /etc/gitlab/gitlab.rb 进行调整了。

/etc/gitlab/gitlab.rb 默认对 数据目录 的配置是注释的。

用户可以新增配置信息

git_data_dirs({
  "default" => {
     "path" => "/mnt/gitlab/git-data"
  }
})

然后对 gitlab 重新刷新配置

gitlab-ctl reconfigure

重启 gitlab 服务

gitlab-ctl restart
  •  修改gitlab 的nginx服务端口号

 首先还是需要先关闭gitlab的服务

gitlab-ctl stop

修改 /etc/gitlab/gitlab.rb 文件(作者是在root 用户下直接修改的)

找到以下内容(作者对应是859行),修改为 nginx['listen_port'] = 8080

##! **Override only if you use a reverse proxy**
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#setting-the-nginx-listen-port
# nginx['listen_port'] = nil

同时还需要在 /etc/gitlab/gitlab.rb 文件 找到以下内容(作者对应的是 587 行),将 unicorn['port'] 设置为 8082(因为8080 端口已经被占用了)

### Advanced settings
# unicorn['listen'] = '127.0.0.1'
# unicorn['port'] = 8080

修改后的内容变为

### Advanced settings
# unicorn['listen'] = '127.0.0.1'
unicorn['port'] = 8082

用户还需要在 /var/opt/gitlab/gitlab-rails/etc/unicorn.rb 文件上找到以下内容(作者对应是 第7行 ),将listen 的端口设置为 8082

# What ports/sockets to listen on, and what options for them.
listen "127.0.0.1:8080", :tcp_nopush => true

修改后的内容变为

# What ports/sockets to listen on, and what options for them.
listen "127.0.0.1:8082", :tcp_nopush => true

更新gitlab 的配置

gitlab-ctl reconfigure

用户在 /var/opt/gitlab/nginx/conf/gitlab-http.conf 文件中,找到以下内容(作者对应是38行),将原来默认的的listen *:80 会被刷新为修改后的8080 (nginx 的端口就变为 8080)

upstream gitlab-workhorse {
  server unix:/var/opt/gitlab/gitlab-workhorse/socket;
}


server {
  listen *:8080;

重启 gitlab 服务

gitlab-ctl restart

这里用户一定要注意,如果直接修改 /var/opt/gitlab/nginx/conf/gitlab-http.conf 文件的 内容,则在执行 gitlab-ctl reconfigure 后,修改值会被覆盖。

  • 分享一个错误解决

在gitlab 运行一段时间后,遇到网页出现 500 错误,查看gitlab 的运行log ,发现以下错误信息

这个错误信息的log 日志目录为:/var/log/gitlab/gitlab-rails/production.log

Redis::CommandError (MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.):

是redis 的一个错误。错误的原因大概是机器内存只有4GB,redis 已经使用了快 4GB了, redis 的内存使用得比较紧张了,然后redis 为了避免假死,所以预先申请另外一个4GB的内存,此时就会出现这个错误。

根据网上的介绍,可以通过设置 /etc/sysctl.conf 文件,增加

vm.overcommit_memory = 1

然后执行以下命令,使其生效,从而避免redis 这个错误。

sysctl -p


参考资料:
http://www.cnblogs.com/straycats/p/7637373.html
http://www.cnblogs.com/wenwei-blog/p/5861450.html

http://blog.csdn.net/jackghq/article/details/54954486

http://blog.csdn.net/charlsehan/article/details/46801589

解决阿里云上无法发送邮件的博客:http://www.cnblogs.com/wenwei-blog/p/6286944.html

修改web 服务端口号的博客:http://blog.csdn.net/donglynn/article/details/74002540

http://blog.csdn.net/wizard_rp/article/details/73147129 (这种方法会在 刷新配置时修改内容被覆盖)

原文地址:https://www.cnblogs.com/chenfool/p/7689438.html