使用docker-compose安装GitLab并使用Nginx进行反向代理
先决条件
- Ubuntu22.04 4c8g
- 安装好docker及docker-compose
- 良好的网络环境
步骤
1. 创建GitLab文件夹
注:本文在root文件夹下创建,读者可以自行选择
mkdir gitLab
cd gitLab
2. 创建docker-compose.yml
touch docker-compose.yml
编辑内容
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: '您的域名'
environment:
GITLAB_OMNIBUS_CONFIG: |
# 预配置gitlab.rb中的配置项,每行一项
external_url 'https://您的域名'
gitlab_rails['gitlab_shell_ssh_host'] = '您的域名'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
puma['worker_processes'] = 2
sidekiq['concurrency'] = 10
nginx['listen_port'] = 80
nginx['listen_https'] = false
ports:
- '8080:80'
- '2222:22'
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'
shm_size: '256m'
docker-compose.yml修改自官方文档-Install GitLab by using Docker Compose
GITLAB_OMNIBUS_CONFIG预配置gitlab.rb参考官方文档-Pre-configure Docker container
配置解读
external_url 'https://您的域名
GitLab的基础访问地址,这会是http克隆仓库时的url前缀
gitlab_rails['gitlab_shell_ssh_port'] = 2222
告诉GitLab ssh应该使用的端口,这里修改是为了不占用/不使用宿主机的22端口,修改后在仓库页面上点击克隆按钮显示的ssh链接会自动带上 2222
的端口
gitlab_rails['gitlab_shell_ssh_host'] = '您的域名'
告诉GitLab ssh应该使用的域名,在仓库页面上点击克隆按钮显示的ssh链接使用此域名
puma['worker_processes'] = 2
sidekiq['concurrency'] = 10
GitLab是非常吃性能的,鉴于本文使用的宿主机配置不高,限制部分并发性能,详情参考官方文档-Running GitLab in a memory-constrained environment
,性能强劲的机器可以无视
nginx['listen_port'] = 80
nginx['listen_https'] = false
本文中我们使用自己的nginx进行反代并配置https,nginx与GitLab之间仅使用http通信,而上面我们为GitLab配置的基础url中使用了https,如果不使用这两个配置将会导致gilab因为检测到nginx的http访问导致重定向到https的地址(即使我们本身访问的是https)从而导致无限重定向,参考官方文档-Configure a reverse proxy or load balancer SSL termination
ports:
- '8080:80'
- '2222:22'
向外暴露端口并映射到宿主机,由于后面会使用nginx进行反代,就只使用80端口了,https相关的都在nginx上配置,这里2222可以随意修改成您想要的端口,只需在nginx反代中配置反代2222端口到该端口即可
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'
挂载GitLab数据文件夹到当前目录下,方便修改配置,查看日志
3. 启动容器
docker-compose up -d
容器启动耗时较长,下面配置Nginx反向代理
4. 配置Nginx反向代理
环境:另一台VPS,Ubuntu22.0.4,使用apt安装了nginx,本文默认您的环境与本文一致
为nginx添加一个配置文件 /etc/nginx/sites-enabled/gitlab
server {
listen 80;
server_name 您的域名;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name 您的域名;
ssl_session_timeout 30m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_certificate 您的证书地址;
ssl_certificate_key 您的证书密钥地址;
# 本文的证书使用ohttps自动续签、部署
ssl_session_cache shared:SSL:10m;
location / {
client_max_body_size 256m;
proxy_pass http://(GitLab宿主机ip/域名,nginx在宿主机上时使用localhost,请无视括号):8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_intercept_errors on;
}
}
这里强行使用https,如使用http请自行修改
在 /etc/nginx/nginx.conf
中添加ssh端口反代
stream {
server {
listen 2222;# 上面docker-compose中gitlab_shell_ssh_port配置的ssh端口
proxy_pass (GitLab宿主机ip/域名,nginx在宿主机上时使用localhost,请无视括号):# 上面docker-compose中对应ssh端口映射到宿主机的端口;
}
}
保存重启nginx即可
5. 初次登录
此时使用您的域名应该即可访问GitLab,若配置不高启动会比较久
默认管理员用户名为root,初始密码在 /root/gitlab/config/initial_root_password
中,若您未使用root目录请自行修改
本文可能随时更新,原始地址:https://blog.akadot.net/post/2025/1/24/deploy-gitlab-with-docker-compose-and-reverse-proxy-it-with-nginx-zh-cn
欢迎转载、引用,请务必申明出处与作者
园子博客是为了优化SEO,最新文章请访问我的博客:https://blog.akadot.net
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了