分享个人 Full-Stack JavaScript 项目开发经验
有时候我们需要在防火墙内对外提供 GitLab 服务,而防火墙限制了标准端口的使用,这时就需要配置 GitLab 服务器以非标准端口提供服务。本文将介绍在 CentOS7 下如何部署和配置使用非标准端口的 GitLab 服务器,并作内存使用优化。
温馨提示,本文使用的 GitLab 版本为 12.5.3-ee,安装成功后可以通过以下命令查询相关版本信息:
gitlab-rake gitlab:env:info
首先需要开放对应的防火墙设置(在云服务器上还需要配置对应的安全组),其中包括的服务有 HTTP、HTTPS 和 SSH。这里的开放规则需要根据你的想要使用的具体端口。这一步非常重要,遗漏设置会直接导致 GitLab 无法访问。
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="https://gitlab.example.com:8000" yum install -y gitlab-ee
安装包大约 800 M,请保持网络畅通。这里直接配置 EXTERNAL_URL 使用的端口为 8000,该地址为 GitLab web 服务器的地址。当然,后面依然可以通过配置文件继续修改该地址及端口。
要查看更多官方安装说明地址,请点击这里。
当安装成功后,通过浏览器首次访问 GitLab web 服务器地址时候会提示重设密码。若果错过了这一步,想要重置 root 账户密码,可以查看这里。
GitLab 在 CentOS7 中的配置文件位置为:/etc/gitlab/gitlab.rb。
该配置文件比较大,编辑时候最好显示行号:
vi /etc/gitlab/gitlab.rb
:set number
下面说明的行号基于版本 12.5.3-ee 的 GitLab。
可以通过 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 查看 GitLab 版本号。
检查 external_url 地址及端口:
23行 external_url 'https://gitlab.example.com:8000'
修改 gitlab_shell_ssh_port,GitLab 用于 ssh 连接的端口:
453行 gitlab_rails['gitlab_shell_ssh_port'] = 2222
修改 nginx 的证书及重定向等配置:
1073行 nginx['redirect_http_to_https'] = true
1074行 nginx['redirect_http_to_https_port'] = 8000
1085行 nginx['ssl_certificate'] = "你的证书公钥路径"
1086行 nginx['ssl_certificate_key'] = "你的证书私钥路径"
解决 GitLab Unicorn 内存泄漏问题:
可查看 Unicorn 日志了解相关信息。
cat /var/log/gitlab/unicorn/unicorn_stderr.log
修改 GitLab Unicorn 配置:
# 设置 unicorn 工作进程的超时时间
737行 unicorn['worker_timeout'] = 60
# 至少为 2,原推荐设置为 CPU (逻辑)核数 + 1
740行 unicorn['worker_processes'] = 9
# 设置 unicorn 工作进程的内存使用阈值
759行 unicorn['worker_memory_limit_min'] = "400 * 1 << 20"
760行 unicorn['worker_memory_limit_max'] = "650 * 1 << 20"
了解更多关于 GitLab Unicorn 内存泄漏介绍,请点击这里。
修改 GitLab Sidekiq 配置:
# 减少 Sidekiq 并发数,默认值为 25
804行 sidekiq['concurrency'] = 15
修改 GitLab PostgreSQL 配置:
# 减少 postgre 数据库的共享缓冲
# 原推荐值为总内存的 1/4,最高 14 G
851行 postgresql['shared_buffers'] = "256MB"
# 限制 postgre 数据库并发数
892行 postgresql['max_worker_processes'] = 8
Grafana 是一款开源的为数据库提供数据分析和监控的平台软件,默认是跟随 Gitlab 开启的,可修改一下配置关闭它:
851行 grafana['enable'] = false
要了解更多有关 Gitlab 中 Grafana 的使用和配置,请点击这里。
gitlab-ctl stop
gitlab-ctl reconfigure
GitLab 的 nginx 配置文件路径为:/var/opt/gitlab/nginx/conf/gitlab-http.conf。需要检查 nginx 监听的 HTTP 端口,HTTP 的 HTTPS 重定向,以及 HTTPS 端口。值得注意,在配置中可以看到 GitLab 的 grafana 服务默认使用了 3000 端口,小心和其它服务有冲突。
gitlab-ctl start
这时候你便可以通过如 https://gitlab.example.com:8000 访问 Gitlab了。当访问时候提示 502,则很可能是 GitLab 的其它服务并未完全启动,稍等片刻即可。
新建一个项目时候,GitLab 会提示初始化项目仓库的各种情况的操作,十分人性化。在后续文章中,将会介绍 GitLab 的邮件配置等其它功能。
为 GitLab 账户添加 ssh 密钥的时候需要注意,一般在操作系统用户的根目录的 .ssh 文件夹下创建默认名称 id_rsa 的密钥对,并把公钥添加到 GitLab 即可。如何使用非默认命名的密钥对,需要另行配置密钥对和请求地址的对应关系。