GitLab使用外部nginx容器化部署并适配小内存服务器

前言

没办法啊没办法,服务器2C4G,像gitlab这种内存大户,启动之后负载直接飙满。就连执行个docker ps,负载到20你敢信。记录一下部署过程, 主要是在使用外部nginx时走了不少弯路。

预备安装

路径信息

  • 配置目录:/export/server/gitlab
  • 日志目录:/export/logs/gitlab
  • 数据目录:/export/data/gitlab

其他事项

  1. 数据目录为避免迁移导致各种问题建议放置在留有较大空间的分区上,高可用方案可以参考基于DRBD实现方式
  2. ssh端口22与gitlab冲突,建议修改本机ssh端口为其他。
  3. 外部nginx在本机,所以443端口不可能给gitlab,因此自定义服务端口为:8999,利用nginx反向代理gitlab服务,https配置在外部nginx。

部署

一行shell即可启动

1
2
3
4
5
6
7
8
9
10
docker run \
-d \
--name gitlab \
-p 8999:8999 \
-p 22:22 \
--name gitlab \
--volume /export/server/gitlab:/etc/gitlab \
--volume /export/logs/gitlab:/var/log/gitlab \
--volume /export/data/gitlab:/var/opt/gitlab \
gitlab/gitlab-ce

配置

Gitlab

如果你也是2C4G,那么下面配置直接追加到文件结尾即可。
默认配置使用资源比较充分,但对于低配服务器来说有些太满了。除了一些必要的配置,额外减少一些gitlab服务使用资源也是一个不错的选择。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// /export/server/gitlab/gitlab.rb
# gitlab domain
external_url 'https://git.lucat.fun'

# disable self nginx
nginx['enable'] = false

# external nginx config
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "0.0.0.0:8999"
web_server['external_users'] = ['nginx']

# security settings
gitlab_rails['rack_attack_git_basic_auth'] = {
'enabled' => true,
'ip_whitelist' => ["127.0.0.1"],
'maxretry' => 10,
'findtime' => 60,
'bantime' => 3600
}

# email
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.xxxxx.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "gitlab@xxxxx.com"
gitlab_rails['smtp_password'] = "xxxxx"
gitlab_rails['smtp_domain'] = "xxxxx.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_from'] = "gitlab@xxxxx.com"
gitlab_rails['gitlab_email_reply_to'] = "gitlab@xxxxx.com"
gitlab_rails['smtp_tls'] = true
user["git_user_email"] = "gitlab@xxxxx.com"

# optimal configuration
unicorn['worker_timeout'] = 60
unicorn['worker_processes'] = 2
unicorn['worker_memory_limit_min'] = "300 * 1 << 20"
unicorn['worker_memory_limit_max'] = "500 * 1 << 20"
sidekiq['concurrency'] = 9
postgresql['shared_buffers'] = "256MB"
postgresql['max_worker_processes'] = 8

Nginx

nginx配置注意一下上传文件大小,其他普通反向代理配置即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@liyao gitlab]# cat /etc/nginx/conf.d/gitlab.https.conf
server {
listen 443 ssl;
server_name xxxx;

ssl_certificate ssl/xxxx.pem;
ssl_certificate_key ssl/xxxx.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8999;
client_max_body_size 1024m;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

测试

修改完配置后,执行docker exec gitlab gitlab-ctl reconfigure使配置生效。启动完毕后在宿主机使用curl 127.0.0.1:8999测试,没问题上nginx即可。

常用命令

1
2
3
4
docker exec gitlab gitlab-ctl reconfigure   # 重新应用配置
docker exec gitlab gitlab-ctl status # 查看gitlab服务状态
docker logs -f gitlab # 查看gitlab服务日志
docker rm -f gitlab # 删除容器