Gitlab EE/JH “体验版” 教程
前言
Gitlab我去年就已经搭好了, 不过今年才用上, 一路过来踩了太多坑了, 实在是被搞的忍不住了, 稍微动动手为后人造福吧
本来都不需要写教程的, 这破gitlab升到了15版本后, 就有点小问题了, 正好这次我给研究了个大概的明白, 好了不废话了
环境
Gitlab-EE 15.1.2 Docker-CE 20.10.9 Portainer-CE 2.14.0
⚠注意: 若使用 Gitlab CE 版, 请先自行转换到 Gitlab EE 版本
Gitlab EE 配置
关于Gilab搭建: 以后有机会再写教程, 目前我用的是 Portainer 里的 Stacks 功能, 编写个 docker-compose 可快速更新配置
Gitlab EE 映射路径
确保已经将配置文件夹映射出来, 并且自己需要找得到目录, 后续需要使用
volumes: - <you volume>/config:/etc/gitlab # gitlab 的配置文件目录 - <you volume>/logs:/var/log/gitlab # gitlab log目录 - <you volume>/data:/var/opt/gitlab # gitlab 数据目录
Gitlab EE 版本确认
由于Gitlab的升级比较麻烦, 必须根据官方给的升级路径来弄, 所以先确认好自己的版本, 低于 15 的版本操作手法是有点不一样的, 后面会讲到
若想要升级, 请先自行到官方文档, 查询自己的版本如何进行 !!!备份!!! 先 !备份! 先 !备份! 先 !备份! 然后根据官方给的 升级路径, 一个版本一个版本的升上 15
官方文档链接: 英文(比较全/新) https://docs.gitlab.com/ee 中文(勉强能用) https://docs.gitlab.cn/jh/index.html
进入配置文件目录, 添加脚本文件
在映射出来的配置文件目录创建 license 文件夹
添加文件 gen.rb, 部分信息可自行修改
require "openssl" require "gitlab/license" key_pair = OpenSSL::PKey::RSA.generate(2048) File.open("license_key", "w") { |f| f.write(key_pair.to_pem) } public_key = key_pair.public_key File.open("license_key.pub", "w") { |f| f.write(public_key.to_pem) } private_key = OpenSSL::PKey::RSA.new File.read("license_key") Gitlab::License.encryption_key = private_key license = Gitlab::License.new license.licensee = { "Name" => "RuyeNet", # 可自行更改 "Company" => "RuyeNet", # 可自行更改 "Email" => "[email protected]", # 可自行更改 } license.starts_at = Date.new(2020, 1, 1) # 开始时间 license.expires_at = Date.new(2099, 12, 31) # 结束时间 license.notify_admins_at = Date.new(2099, 12, 1) license.notify_users_at = Date.new(2099, 12, 1) license.block_changes_at = Date.new(2099, 12, 31) license.restrictions = { active_user_count: 10000 } # 授权的用户数 puts "License:" puts license data = license.export puts "Exported license:" puts data File.open("Gitlab.gitlab-license", "w") { |f| f.write(data) } public_key = OpenSSL::PKey::RSA.new File.read("license_key.pub") Gitlab::License.encryption_key = public_key data = File.read("Gitlab.gitlab-license") $license = Gitlab::License.import(data) puts "Imported license:" puts $license unless $license raise "The license is invalid." end if $license.restricted?(:active_user_count) active_user_count = 10000 if active_user_count > $license.restrictions[:active_user_count] raise "The active user count exceeds the allowed amount!" end end if $license.notify_admins? puts "The license is due to expire on #{$license.expires_at}." end if $license.notify_users? puts "The license is due to expire on #{$license.expires_at}." end module Gitlab class GitAccess def check(cmd, changes = nil) if $license.block_changes? return build_status_object(false, "License expired") end end end end puts "This instance of GitLab Enterprise Edition is licensed to:" $license.licensee.each do |key, value| puts "#{key}: #{value}" end if $license.expired? puts "The license expired on #{$license.expires_at}" elsif $license.will_expire? puts "The license will expire on #{$license.expires_at}" else puts "The license will never expire." end
添加文件 flash.sh
#!/bin/sh # 清理旧 license 文件 rm -f Gitlab.gitlab-license rm -f license_key rm -f license_key.pub # 生成 license 文件 ruby gen.rb # 备份秘钥文件 if [ ! -f "/etc/gitlab/license/.license_encryption_key.pub.bak" ]; then cp /opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub \ /etc/gitlab/license/.license_encryption_key.pub.bak fi # 备份 license 逻辑文件 if [ ! -f "/etc/gitlab/license/license.rb.bak" ]; then cp /opt/gitlab/embedded/service/gitlab-rails/ee/app/models/license.rb \ /etc/gitlab/license/license.rb.bak fi # 对 license 逻辑进行修改 cp /etc/gitlab/license/license.rb.bak /etc/gitlab/license/license.rb sed -i 's/restricted_attr(:plan).presence || STARTER_PLAN/restricted_attr(:plan).presence || ULTIMATE_PLAN/g' \ /etc/gitlab/license/license.rb # 覆盖原文件 cp -f /etc/gitlab/license/license_key.pub /opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub cp -f /etc/gitlab/license/license.rb /opt/gitlab/embedded/service/gitlab-rails/ee/app/models/license.rb
进入Gitlab容器内执行脚本
非 Docker 用户, 自行判断如何执行
可 docker exec -it 也可用 Portainer
进入 /etc/gitlab/license 确保文件已映射
运行 flash.sh 脚本: ./flash.sh
这时候可以将这一大串密匙复制出来, 也可以提取 Gitlab.gitlab-license 文件, 这就是之后要用的 许可证
重启容器, 进入Gitlab管理员页面
跑完脚本一定要重启容器(Gitlab服务)! 不然刷入的密匙无法生效
打开Gitlab设置面板: https://<YOU GITLAB HOST>/admin/application_settings/general
拉到最底部, 添加许可证, 可 上传文件 也可 直接输入 许可证内容
这样就搞定拉, 不过要注意一下方案是不是 Ultimate , 如果不是的话, 自行去修改 license.rb 文件并且覆盖源文件, 并重启
简单来说, 就是定位 def plan, 然后修改下面那行代码, 将 || 后面的字替换成 ULTIMATE_PLAN , 就ok了 (别人写的教程好多都没讲清楚, 我一开始都一头雾水)
Gitlab EE 15 版本以下的用户注意 由于我现在升上来了, 不清楚下面版本的 添加许可证文件 这玩意放哪去了
14版的如果按照上面的方法找不到 添加许可证 直接访问这个链接去添加 https://<YOU GITLAB HOST>.com/admin/license/new
更低的版本我就不清楚了, 没用过, 请自行查阅官方文档吧, 这玩意还是有写的
关于 Gitlab JH 版
读源码可知, 极狐版用的是 jh 目录下的东西
直接在脚本文件末尾加上覆盖就好了
if [ -f "/opt/gitlab/embedded/service/gitlab-rails/jh/.license_encryption_key.pub" ]; then
cp -f /etc/gitlab/license/license_key.pub /opt/gitlab/embedded/service/gitlab-rails/jh/.license_encryption_key.pub
fi
尾声
"体验版"自己玩玩就好了, 别张扬, 老实说我现在没给玩明白这EE有啥好用的功能
哎, 国内关于Gitlab的文章还是太乱七八糟了, 我写个CI/CD的脚本, 都费劲的一批, 完全看不懂, 最后还是抄官方的软件才稍微懂了点, 这玩意比Github难用多了, 非必要别碰, 真的
贴两个曾经帮到我的文章吧 https://conf.top/post/506 https://shaffer.cn/qingyou/gitlab-ee-license-crack
转载自:
版权声明:
作者:RuyeNet
链接:https://www.iloveu.top/archives/143
来源:RuyeNet
文章版权归作者所有,未经允许请勿转载。

共有 0 条评论