在Linux中部署GitLab并优化
前言
本文并不包含违反中国大陆当地相关法律的内容。
本文中的斜体+加粗的内容为在另外一篇文章中进行讲解。
先决条件
-
一台安装有Linux的服务器(或者个人电脑)
配件 推荐配置 预测(建议)最低配置 CPU(处理器) x86_64架构(amd64),CPU核心数 >= 4 CPU核心数 * 2 RAM(内存) >= 6GB 4GB DISK(磁盘) >= 20GB(>= 10GB可用) 5GB BandWidth(带宽) >= 100Mbps 10Mbps OS(操作系统) Linux x86_64(本文以Debian Linux为例) Debian Linux Env(环境) Docker Engine(本文以Docker为环境进行部署) [本文暂不讲解裸机安装] -
连接到互联网(由于近期发生的Docker相关网站被阻断或者关停的事件,除非可以访问官方源,否则可以考虑使用自建源)
- 由于本人服务器位于海外,故本文暂不讲解自建源
-
一个人
开始部署
-
拉取镜像:
docker pull gitlab/gitlab-ee:latest
-
在指定目录下分别创建日志、数据、配置目录:(这里以/opt目录为存储目录)
# 创建配置目录 mkdir -p /opt/gitlab-ee/config # 创建日志目录 mkdir -p /opt/gitlab-ee/log # 创建数据目录 mkdir -p /opt/gitlab-ee/data
-
创建Docker容器
docker run --detach \ --hostname git.example.com \ -p 8443:443 \ -p 8080:80 \ -p 8022:22 \ --name gitlab \ --restart always \ -v /opt/gitlab-ee/config:/etc/gitlab \ -v /opt/gitlab-ee/log:/var/log/gitlab \ -v /opt/gitlab-ee/data:/var/opt/gitlab \ --shm-size 256m gitlab/gitlab-ee:latest
-
命令解释:(使用【】括住的端口一定不要与其他服务重复,可以换成别的端口)
docker run --detach \ --hostname 【这里填写你想访问的地址,例如:git.example.com】 \ -p 【HTTPS端口】:443 \ -p 【HTTP端口】:80 \ -p 【SSH端口】:22 \ --name 【容器名称】 \ --restart always \ -v 【上一步创建的配置目录的绝对路径】:/etc/gitlab \ -v 【上一步创建的日志目录的绝对路径】:/var/log/gitlab \ -v 【上一步创建的数据目录的绝对路径】:/var/opt/gitlab \ --shm-size 256m gitlab/gitlab-ee:latest
-
-
优化GitLab
# 编辑gitlab配置 vim /opt/gitlab-ee/config/gitlab.rb
-
找到如下配置项并指定下面给定的值,修改并保存,然后可以重新启动GitLab容器
# 新版gitlab没有unicorn,用的puma,所以把puma关掉 puma['worker_processes'] = 0 # 适当降低了sidekiq的并发 sidekiq['concurrency'] = 15 # 禁用监控 prometheus_monitoring['enable'] = false # 不再使用的内存立即释放 gitlab_rails['env'] = { 'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000' } gitaly['env'] = { 'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000' }
-
-
查看GitLab默认密码:(不可以弄丢)
docker exec -it 【容器名称】 grep 'Password:' /etc/gitlab/initial_root_password
-
配置Nginx(非公网可以跳过)【SSL证书申请也会在其他文章中进行讲解】
# 如果配置的CDN自动跳转HTTPS可以不写这块 server { # HTTP端口监听 listen 80; # 公网访问地址(IP或者域名)【需要与HTTPS的server_name一致】 server_name git.sgtu.org; # 301重定向到HTTPS return 301 https://$server_name$request_uri; } # 这块是必写的 server { # HTTPS端口监听,且启用SSL listen 443 ssl; # 公网访问地址(IP或者域名) server_name git.sgtu.org; # SSL证书路径 ssl_certificate /etc/letsencrypt/live/sgtu.org/fullchain.pem; # SSL证书私钥路径 ssl_certificate_key /etc/letsencrypt/live/sgtu.org/privkey.pem; # 根路径 location / { # 设置代理请求头:用于识别通过代理或负载均衡器方式连接到Web的客户端的原始IP地址和HTTP头字段 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置代理请求头:用于确定客户端发起的请求中使用的初始域名 proxy_set_header X-Forwarded-Host $http_host:$server_port; # 设置代理请求头:用于确定客户端发起的请求中使用的代理服务器 proxy_set_header X-Forwarded-Server $host; # 设置代理请求头:用于确定客户端真实IP proxy_set_header X-Real-IP $remote_addr; # 设置代理请求头:用于确定客户端发起的请求的协议 proxy_set_header X-Forwarded-Proto $scheme; # 目标地址:http://【Docker容器IP地址】:【GitLab的HTTP端口】 proxy_pass http://172.0.0.1:81; # 上传的最大文件大小 client_max_body_size 200m; } }
-
至此就可以在浏览器中进行访问了,默认用户名:root(记得带上你的默认密码,除非已经配置过了)
Comments | NOTHING