Gitlab 类似于 Github,Github 自建服务器版非常昂贵,可以在此查看价格:https://github.com/pricing#feature-comparison。
而 Gitlab 有社区版 (ce) 即开源的可供自建的服务器,免费!使用心得可以参见之前的文章:点击此处。
其实,Gitlab 还有个与 ce 相比功能更丰富的 ee 版本 (企业版),但是价格并不算便宜,https://about.gitlab.com/pricing/#self-managed,Gitlab 的各版本功能差异:https://about.gitlab.com/pricing/self-managed/feature-comparison/。
Gitlab ee 提供全功能试用版,通过搜索,发现了 Gitlab ee 学习版的实现机制,这里有几个网址可供参考:
https://www.rubydoc.info/gems/gitlab-license/1.0.0/file/README.md
https://github.com/hadesy/gitlab-license/blob/master/License.php
这里做个更为具体的笔记,也是笔者实际的体验结果:
笔者使用的是 xampp,同时 openssl 已加入系统 path 中,可以直接在 xampp 下的任意一个 web 目录里,通过 shell 命令行输入以下内容,进行公钥密钥生成。
私钥:
openssl genrsa -out rsakey0.pem 2048
P.S:根据 https://www.rubydoc.info/gems/gitlab-license/1.0.0/file/README.md 需要实施 2048 加密规格。
然后根据自己的私钥生成公钥:
openssl rsa -in rsakey0.pem -pubout -out rsakey0-pub.pem
2、将脚本 https://github.com/hadesy/gitlab-license/blob/master/License.php 下载下来,放到本地的 web 服务器里,这里给出 https://github.com/hadesy/gitlab-license/commit/4197dc9e47dc8007328ee161b9ecb49c6ab3235d 的原文:
<?php class License { const GITLAB_PUBLIC_KEY = '-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Hxv3MkkZbMrKtIs6np9 ccP4OwGBkNhIvhPjcQP48hbbascv5RqsOquQGrYSD2ZrE/kbkRdkIcoHEeTZLif+ bDKFZFI7o5x0H92o9/GSvxHJhQ8mkmvwxD7lssGShwZEm8WG+U7BZqUV/gGmCDqe 9W8H8Fq2B0ck8IXjbQ4Zz+JlyV/NHZTZcs69plFiLKh4N6GYVftOVwSomh0bbypP OB9WnLC7RC9a2LRrhtf8sqa2rRFmtyMMfgFFzLMzS+w+1K4+QLnWP1gKQVzaFnzk pnwKPrqbGFYbRztIVEWbs8jPYlLkGb8ME4C84YVtQgbQcbyisU/VW3wUGkhT+J0k xwIDAQAB -----END PUBLIC KEY-----'; const YOUR_PUBLIC_KEY = '----'; const YOUR_PRIVATE_KEY = '----'; /** * @param string $license * @return string */ public static function decrypt(string $license) { $json_data = base64_decode($license); $encryption_data = json_decode($json_data, true); $encrypted_data = base64_decode($encryption_data["data"]); $encrypted_key = base64_decode($encryption_data["key"]); $aes_iv = base64_decode($encryption_data["iv"]); openssl_public_decrypt($encrypted_key, $aes_key, openssl_pkey_get_public(self::GITLAB_PUBLIC_KEY)); $data = openssl_decrypt( $encrypted_data, 'aes-128-cbc', $aes_key, OPENSSL_RAW_DATA, $aes_iv ); return $data; } /** * @param array $license * @return string * @throws Exception */ public static function encrypt(array $license) { $encryption_data = json_encode($license); $key = random_bytes(16); $ivLength = openssl_cipher_iv_length('aes-128-cbc'); $iv = openssl_random_pseudo_bytes($ivLength, $isStrong); $data = openssl_encrypt( $encryption_data, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv ); openssl_private_encrypt($key, $encrypted, openssl_pkey_get_private(self::YOUR_PRIVATE_KEY)); return base64_encode(json_encode([ "data" => base64_encode($data), 'key' => base64_encode($encrypted), 'iv' => base64_encode($iv) ])); } }
其中的 YOUR_PUBLIC_KEY 和 YOUR_PRIVATE_KEY 需要填充为自己刚才在第一步时生成的证书内容,证书内容可以通过使用 notepad++等工具打开查看到内容。
3、在 web 服务器上进行签发自己的 gitlab 证书,github 仓库里给出了方法,这里抄了过来,可以根据自己的实际需要修改 license 证书里的内容,例如 name、email、company 等,但请保持结构:
$license = [ 'version' => 1, 'licensee' => [ 'Name' => 'custom', 'Email' => 'custom@custom.com', 'Company' => 'custom' ], 'issued_at' => '2019-01-01', 'expires_at' => '2030-01-01', 'notify_admins_at' => '2030-01-01', 'notify_users_at' => '2030-01-01', 'restrictions' => [ 'id' => 99999, 'previous_user_count' => null, 'trueup_quantity' => null, 'trueup_from' => null, 'trueup_to' => null, 'active_user_count' => 10000, 'add_ons' => [], 'subscription_id' => null, 'plan' => 'ultimate', 'trial' => 0 ] ]; $license = License::encrypt($license);
4、一般需要直接 echo 打印出上面的 $license 结果,即签发的最终 gitlab 证书。
5、根据 https://about.gitlab.com/upgrade/#ubuntu 说明,从 ce 升级到 ee,建议添加清华大学镜像源,原 ce 的镜像可以留着,因为当升级为 ee 时会自动卸载 ce 且之后更新只会从 ee 更新,另外,其实现在的 ee 没有证书时就是 ce,如果有证书就是 ee,证书到期如果不删除证书还会是 ee,但是是功能限制版。
6、将自己签发的公钥替换 gitlab 的目录,位于/opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub
7、使用 sudo gitlab-ctl reconfigure 重建 gitlab,然后使用 sudo gitlab-ctl restart 重启 gitlab,访问后台管理-证书-复制自己在第 4 步签发的证书,即可激活所有服务,并使用最高的 ee 版本全部功能。
8、请备份原证书文件和自己的公钥文件,即第 6 步,自己覆盖的证书和原版证书,当版本更新后要重新覆盖公钥证书并重建 gitlab 和重启 gitlab,即需要重复第 6、7 步,但不需要再在 gitlab 后台上传证书。
截止到 2019 年 5 月,暂时没有从代码中发现其他暗桩或额外验证模式,似乎仅需要替换公钥证书即可,可以说学习版的实现离不开官方的放一马,因为这比想象中的要容易,建议学习版还是低调使用,仅作学习。
以上方式仅供学习参考,请勿用于商业或非法用途。另外,因版本升级或官方变更策略等,导致数据永久丢失,本文作者概不负责;使用 ee,请遵守相关协议,为所有需要的用户购买许可证。
以上是通过 php 的方式解决,下面给出另外一种方式供大家参考:
https://blog.starudream.cn/2020/01/19/6-crack-gitlab/