使用docker-compose安装GitLab并使用Nginx进行反向代理

先决条件


  1. Ubuntu22.04 4c8g
  2. 安装好docker及docker-compose
  3. 良好的网络环境

步骤


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

posted @   QyQj  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
主题色彩
点击右上角即可分享
微信分享提示