gitlab替换公钥docker部署ee版
为啥使用gitlab ee
对开发最大的好处就是ee版可以结合elasticsearch进行代码搜索。
在上一家,一开始部署的gitlab也是ce版本,后来发现基本没法全局搜索代码,就换成了ee试用。
当时怎么部署的基本忘了,这几天重新部署了下,写个文档记录。
gitalb ee许可证相关操作
gitlab ee的许可证密钥文件是提供给用户可以自行替换的,然后就能颁发许可证,并且也给了使用说明文档:https://www.rubydoc.info/gems/gitlab-license/
而许可证的生成可以查看usage用例里面直接写着的怎么生成需要的license文件了,就差没设置plan属性。。。。结合license定义文件就知道有哪些可以设置的了:https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/models/license.rb
并且不用自行搭建ruby环境,直接在gitlab容器内,sudo gitlab-rails console
进入ruby环境,同时省去各种依赖的下载安装和引入。
参考https://www.rubydoc.info/gems/gitlab-license/中的Usage,在设置license.restrictions时把plan也写上。
irb(main):043:1* license.restrictions = {
irb(main):044:1* active_user_count: 10000,
irb(main):045:1* plan: 'ultimate'
irb(main):046:0> }
结合docker的挂载替换文件功能,就可以把许可证密钥替换成自己签发的,然后再上传生成的许可证文件即可。
- '{{GITLAB_HOME}}/license/license_key.pub:/opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub'
这应该不算破解。。。毕竟人家连许可证公钥的生成都直接提供文档了。。。
部署gitlab
用ansible结合gitlab部署,最为重要的是这个模板文件:
version: '2.2'
services:
web:
image: 'gitlab/gitlab-ee:14.0.10-ee.0'
restart: always
hostname: '{{SERVICE_FQDN}}'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://{{SERVICE_FQDN}}'
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '{{SERVICE_ADDR}}:80:80'
- '{{SERVICE_ADDR}}:443:443'
- '{{SERVICE_ADDR}}:22:22'
volumes:
- '{{GITLAB_HOME}}/config:/etc/gitlab'
- '{{GITLAB_HOME}}/logs:/var/log/gitlab'
- '{{GITLAB_HOME}}/data:/var/opt/gitlab'
- '{{GITLAB_HOME}}/license/license_key.pub:/opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub'
- '/etc/letsencrypt/live/{{SERVICE_FQDN}}/fullchain.pem:/etc/gitlab/ssl/{{SERVICE_FQDN}}.crt'
- '/etc/letsencrypt/live/{{SERVICE_FQDN}}/privkey.pem:/etc/gitlab/ssl/{{SERVICE_FQDN}}.key'
networks:
- gitlabinner
es:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.1
container_name: es
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /srv/elasticsearch/data:/usr/share/elasticsearch/data
networks:
- gitlabinner
networks:
gitlabinner:
driver: bridge
第一次docker-compose up后进入gitlab ruby环境生成license_key.pub文件和设置过plan的许可证文件,再第二次docker-compose up。
其它
每三个月手动跑以下命令更新证书。
sudo certbot certonly --manual --agree-tos -m XXX@XXXX.cn --no-eff-email --manual-public-ip-logging-ok --preferred-challenges=dns -d XXXXX.com.cn
参考上述[manually-configuring-https]https://docs.gitlab.com/omnibus/settings/nginx.html#manually-configuring-https时候设置 letsencrypt[‘enable’] false后会出错,不设置此项。
在gitlab管理界面中配置http://es:9200
,并且开启index。
中文搜索功能,还得按[说明]https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-smartcn.html配置下es
可以设置双ip,让gitlab通过第二个ip来暴露22端口(主机的ssh指定了第一个IP),即模板文件中的SERVICE_ADDR。
参考
https://www.rubydoc.info/gems/gitlab-license/,usage用例里面直接写着怎么生成需要的license文件了,就差没设置plan属性。。。。结合license定义文件就知道有哪些可以设置的了:https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/models/license.rb
不用gem install,然后这个’gitlab-license’是gitalb官方的,它也引用了这个,上面的文章其实都不用自己搭建ruby环境,只要在已有的gitlab带的环境中干这事就行了,然后也不用修改rb文件,只要在用gitlab-license生成license时候指定plan参数就行。最后其实关键的一点就是替换带原有的pub文件就行,才会认,所以这个不算破解,因为它都把这些列出来让人用了。。。。
https://docs.gitlab.com/ee/install/docker.html
让docker用其它ip的22端口,https://stackoverflow.com/questions/25036895/how-to-expose-docker-containers-ip-and-port-to-outside-docker-host-without-port