版本比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
简介
gitlab 是一款类似于 github 的开源代码管理工具,支持本地化的部署。
CentOS 7 安装方式
通过官网建议的方式安装,在2C4G 的环境能正常运行,用于生产环境建议至少4C8G。安装过程系统会自动配置数据库组件
升级内核
升级内核能够提升系统的稳定性和增加驱动的兼容性,详细可参考https://wiki.waringid.me/x/MwAS
添加国内镜像源
gitlab 官网的镜像源下载很慢,增加清华大学的镜像源加快下载速度。
代码块 | ||
---|---|---|
| ||
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
代码块 | ||
---|---|---|
| ||
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,相关的设置内容都在该文件中
代码块 | ||
---|---|---|
| ||
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 |
代码块 | ||
---|---|---|
| ||
gitlab-ctl reconfigure |
通过以上的指令完成环境配置并启动 gitlab-ce 服务后就能正常访问了。需要注意的是它会自动初始化 root (管理员)的密码,密码文件存储在 /etc/gitlab/initial_root_password 中。
访问后页面如下图
配置 git 的 ssh 访问
- 在服务器生成对应用户的 ssh key
- 将 ssh key 的 pub 部分复制到 gitlab 的配置中
代码块 | ||
---|---|---|
| ||
ssh-keygen -t rsa -C '1364444551@139.com' cat id_rsa.pub |
代码提交配置
代码提交的用户需要先配置好 git 客户端,同时需要确保在 gitlab-ce 上已新建对应的用户并且已经配置好 SSH 的 Key。
代码块 | ||
---|---|---|
| ||
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
代码块 | ||
---|---|---|
| ||
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, 修改宿主机器中的值,将便于未来容器的升级。
代码块 | ||
---|---|---|
| ||
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 这个配置文件,修改其中的行,来使用其他的用户具体请参考这里:
代码块 | ||
---|---|---|
| ||
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 文件中去。
在宿主机器上执行:
代码块 | ||
---|---|---|
| ||
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 所在的行首,结果看起来是这样的:
代码块 | ||
---|---|---|
| ||
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAA......CzGuj git@cn-bj-aliyun-3 |
登录测试一下
代码块 | ||
---|---|---|
| ||
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, 我们恰好可以使用这个脚本来实现转发。
代码块 | ||
---|---|---|
| ||
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 中
代码块 | ||
---|---|---|
| ||
#!/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 文档参考这里
代码块 | ||
---|---|---|
| ||
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 文件
代码块 | ||
---|---|---|
| ||
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": "功能已经完成开发,正在测试"} ] |
gitlab.yml
代码块 | ||
---|---|---|
| ||
version: '3.3'
services:
gitlab:
image: gitlab/gitlab-ce:16.10.6-ce.0
restart:
always
volumes:
- /etc/localtime:/etc/localtime
- /data/gitlab/data:/var/opt/gitlab
- /data/gitlab/log:/var/log/gitlab
- /data/gitlab/etc:/etc/gitlab
ports:
- "8002:80"
- "8022:22"
shm_size: '256m' |
代码块 | ||
---|---|---|
| ||
docker exec -it gitlab-gitlab-1 editor /etc/gitlab/gitlab.rb |
目录 |
---|