版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

简介

gitlab 是一款类似于 github 的开源代码管理工具,支持本地化的部署。

CentOS 7 安装方式

通过官网建议的方式安装,在2C4G 的环境能正常运行,用于生产环境建议至少4C8G。安装过程系统会自动配置数据库组件

升级内核

升级内核能够提升系统的稳定性和增加驱动的兼容性,详细可参考https://wiki.waringid.me/x/MwAS

添加国内镜像源

gitlab 官网的镜像源下载很慢,增加清华大学的镜像源加快下载速度。

代码块
languagebash
cat > /etc/yum.repos.d/gitlab_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
yum makecache

添加 git 用户并安装 gitlab-ce

代码块
languagebash
groupadd -g 1001 git
useradd -u 1001 -g git -c "Gitlab User" git
yum install gitlab-ce

配置 gitlab-ce

CentOS 7 的安装方式中,gitlab-ce 的配置文件位于  /etc/gitlab/gitlab.rb,相关的设置内容都在该文件中

代码块
languagetext
external_url 'http://36.213.20.19'
gitlab_rails['gitlab_ssh_host'] = 'http://36.213.20.19:3389'
gitlab_rails['gitlab_ssh_user'] = 'git'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_shell_ssh_port'] = 22
user['username'] = "git"
user['group'] = "git"
user['uid'] = 1001
user['gid'] = 1001
nginx['listen_port'] = 3389
nginx['listen_https'] = false
代码块
languagebash
gitlab-ctl reconfigure

通过以上的指令完成环境配置并启动 gitlab-ce 服务后就能正常访问了。需要注意的是它会自动初始化 root (管理员)的密码,密码文件存储在  /etc/gitlab/initial_root_password 中。

访问后页面如下图

配置  git  的 ssh 访问

  1. 在服务器生成对应用户的 ssh key 
  2. 将 ssh key 的 pub 部分复制到 gitlab 的配置中
代码块
languagebash
ssh-keygen -t rsa -C '1364444551@139.com'
cat id_rsa.pub

代码提交配置

代码提交的用户需要先配置好 git 客户端,同时需要确保在 gitlab-ce 上已新建对应的用户并且已经配置好 SSH 的 Key。

代码块
languagebash
git config --global user.name "hakase"
git config --global user.email "admin@example.com"
git clone https://hakase@gitlab.hakase-labs.co/hakase/howtoforge.git
cd howtoforge/
vim README.md
git add .
git commit -m 'Add README.md file by hakase-labs'
git push origin master

容器配置方式

先创建和镜像对应的文件夹,然后再启动容器。gitlab 容器中启动了很多服务,主要包括:

  • gitlab
  • redis
  • postgresql
  • nginx
  • sshd
代码块
languagebash
mkdir -p /data/gitlab/{etc,log,data}
docker run \
    --detach \
    --sysctl net.core.somaxconn=1024 \
    --publish 8080:80 \
    --publish 8022:22 \
    --name gitlab \
    --restart unless-stopped \
    --volume /data/gitlab/etc:/etc/gitlab \
    --volume /data/gitlab/log:/var/log/gitlab \
    --volume /data/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce

Gitlab Docker 和宿主服务器共享 SSH(22) 端口

Gitlab Docker 镜像中默认使用的 SSH 账户是 git,那能不能在宿主机器上也建一个账户 git,只是当 git 帐号进行操作的时候,我们转发命令到 gitlab 容器呢?答案是肯定的,宿主机器上非 git 帐号就不受影响了,还可以正常使用。

在宿主机器上创建 git 账户,并且使他的 uid 和 gid 和容器中的值完全一样,Gitlab 容器中 uid 和 gid 都是 998, 修改宿主机器中的值,将便于未来容器的升级。

代码块
languagebash
adduser git
id git
uid=998(git) gid=998(git) groups=998(git)

要完成共享 22 端口,要求 gitlab 容器中的 git 账户的 uid 和 gid 和宿主机器上完全相同,这样读取 SSH Key 时就不会有权限问题。关于如何修改两个系统中 git 账户的 uid 和 gid,可以通过命令 usermod 和 groupmod 手动修改 git 用户的 uid 和 gid参考文档。或者通过编辑 /data/gitlab/etc/gitlab.rb 这个配置文件,修改其中的行,来使用其他的用户具体请参考这里:

代码块
languagebash
user['username'] = 'other-git'
user['group'] = 'other-git'
user['uid'] = 1001
user['gid'] = 1001

修改完成之后,可以在 Docker 容器中执行 gitlab-ctl reconfigure 来使之生效。

在宿主机器上切换到 git 账户:su - git 然后执行 ln -s /data/var/lib/gitlab/data/.ssh .ssh 与 gitlab 容器共享 .ssh 下面的内容。

为了在宿主机器上可以使用 git 账户无密码登录到 gitlab 容器中,需要创建在 .ssh 目录中添加一组密钥,并且把公钥加到 .ssh/authorized_keys 文件中去。

在宿主机器上执行:

代码块
languagebash
ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

添加 no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty 到 ~/.ssh/authorized_keys 所在的行首,结果看起来是这样的:

代码块
languagetext
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAA......CzGuj git@cn-bj-aliyun-3

登录测试一下

代码块
languagebash
ssh -p 8022 127.0.0.1

观察到 ~/.ssh/authorized_keys 其它行都是这样

command="/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-32",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAA......hOtpAl7J
在宿主机看来,每次 git 账户进行操作是都会执行 /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell, 我们恰好可以使用这个脚本来实现转发。

代码块
languagebash
mkdir -p /opt/gitlab/embedded/service/gitlab-shell/bin/
touch gitlab-shell
chmod +x gitlab-shell

并且输入以下内容到 /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell 中


代码块
languagebash
#!/bin/sh

ssh -p 8022 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"


一切就绪了, 可以使用 https://gitlab.example.com/repo.git 或者 git@gitlab.example.com:repo.git 这样的 URL 了。

使用 SMTP 方式配置通知邮箱(腾讯企业邮箱)

Gitlab SMTP 文档参考这里

代码块
languagetext
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'
gitlab_rails['smtp_domain'] = "exmail.qq.com"

改写默认的项目标签(Labels)

添加丰富的标准,方便进行项目管理。修改 issues_labels.rb 文件

代码块
languageruby
labels = [
{"title": "优先级:P0(紧急)", "color": "#E99695", "description": "立即处理"},
{"title": "优先级:P1(高)", "color": "#E99695", "description": "优先处理"},
{"title": "优先级:P2(中)", "color": "#E99695", "description": "有时间再处理"},
{"title": "优先级:P3(低)", "color": "#E99695", "description": "暂不处理"},
{"title": "分类:BUG", "color": "#D4C5F9", "description": "发现的BUG"},
{"title": "分类:功能增强", "color": "#D4C5F9", "description": "增强已有的功能,属于优化的环节"},
{"title": "分类:功能完善", "color": "#D4C5F9", "description": "完善功能"},
{"title": "分类:文档修改", "color": "#D4C5F9", "description": "只是做文档修改"},
{"title": "分类:新功能", "color": "#D4C5F9", "description": "新的功能和需求"},
{"title": "项目:已上线", "color": "#C5DEF5", "description": "已发布上线"},
{"title": "项目:已排期", "color": "#C5DEF5", "description": "已经安排了开发时间milestone"},
{"title": "项目:已确认", "color": "#C5DEF5", "description": "功能已经确认,后续进行排期"},
{"title": "项目:延后", "color": "#C5DEF5", "description": "功能无法确定是否开发,延期处理"},
{"title": "项目:开发中", "color": "#C5DEF5", "description": "功能正在开发"},
{"title": "项目:待讨论", "color": "#C5DEF5", "description": "需求已经提出,但是需要讨论是否需要开发"},
{"title": "项目:测试中", "color": "#C5DEF5", "description": "功能已经完成开发,正在测试"}
]


目录