参考文档

  1. https://docs.gitlab.com/ee/install/docker.html
  2. GitLab 14 轻量化运行方案 - 苏洋博客

安装概述

基于docker-compose安装,简化运维,方便数据迁移和备份,提升安全。

通过端口映射将Gitlab的http服务绑定定到宿主机本地3000端口,将ssh服务绑定到外网22端口(需要先修改用于ssh登录的openSSH端口),不使用Gitlab的https服务。

通过宿主机Nginx反向代理http服务,并使用https进行访问,需要提前设置git.midlane.top二级域名解析,以及申请对应的HTTPS证书。(腾讯云免费的HTTPS证书只能和一个域名绑定,能够绑定多域名和泛域名的证书要收费)。

修改openSSH端口

编辑/etc/ssh/sshd_config,将#Port 22这行注释取消,并修改成指定的端口即可,保存后重启ssh服务使参数生效(/etc/init.d/ssh restart或service ssh restart)

添加域名解析和申请HTTPS证书

添加一条git的A记录,如下:

添加之后可以解析二级域名git.midlane.top。

接下来为该域名申请HTTPS证书,在“我的证书”页面选择免费证书进行申请即可。

docker-compose安装Gitlab

使用下面的docker-compose.yml进行安装:

version: "3"

networks:
  gitlab:
    external: false

services:
  gitlab:
    # 这里替换成指定的版本
    image: gitlab/gitlab-ce:xx.xx.xx-ce.0
    container_name: gitlab
    hostname: git.midlane.top
    restart: "always"
    ports:
      - "127.0.0.1:3000:80"
      - "22:22"
    networks:
      - gitlab
    volumes:
      - ./config:/etc/gitlab
      - ./logs:/var/log/gitlab
      - ./data:/var/opt/gitlab
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://git.midlane.top'
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        
        # 容器内nginx仍然使用80端口, 不监听https
        nginx['listen_port'] = 80
        nginx['listen_https'] = false

        # 关闭电子邮件相关功能
        gitlab_rails['smtp_enable'] = false
        gitlab_rails['gitlab_email_enabled'] = false
        gitlab_rails['incoming_email_enabled'] = false

        # 禁用 PUMA 集群模式
        puma['worker_processes'] = 0

        # 降低后台守护进程并发数
        sidekiq['max_concurrency'] = 10

        # 关闭监控
        prometheus_monitoring['enable'] = false
        alertmanager['enable'] = false
        node_exporter['enable'] = false
        redis_exporter['enable'] = false
        postgres_exporter['enable'] = false
        pgbouncer_exporter['enable'] = false
        gitlab_exporter['enable'] = false
        grafana['enable'] = false
        sidekiq['metrics_enabled'] = false 

        # 关闭Gitlab Pages
        gitlab_pages['enable'] = false
        pages_nginx['enable'] = false

        # 关闭容器仓库功能
        gitlab_rails['gitlab_default_projects_features_container_registry'] = false
        gitlab_rails['registry_enabled'] = false
        registry['enable'] = false
        registry_nginx['enable'] = false

        # 包仓库、依赖管理
        gitlab_rails['packages_enabled'] = false
        gitlab_rails['dependency_proxy_enabled'] = false

        # Usage Statistics
        gitlab_rails['usage_ping_enabled'] = false
        gitlab_rails['sentry_enabled'] = false
        grafana['reporting_enabled'] = false

        # GitLab KAS
        gitlab_kas['enable'] = false
        gitlab_rails['gitlab_kas_enabled'] = false
        # Terraform
        gitlab_rails['terraform_state_enabled'] = false
        # Kerberos 文档说EE only,但是默认值为 true
        gitlab_rails['kerberos_enabled'] = false
        # Sentinel
        sentinel['enable'] = false
        # Mattermost
        mattermost['enable'] = false
        mattermost_nginx['enable'] = false

        gitlab_ci['gitlab_ci_all_broken_builds'] = false
        gitlab_ci['gitlab_ci_add_pusher'] = false

相关命令:

  1. docker-compose up -d:启动容器并在后台运行,会先拉取镜像。
  2. docker-compose logs -f:查看容器日志。
  3. docker-compose down:关闭容器。
  4. docker-compose restart:重启容器。
  5. docker exec -it gitlab bash:进入容器命令行进行交互操作。

容器运行之后Gitlab的配置文件位于宿主机的./config/gitlab.rb,修改该配置文件后,需要进入容器内部执行gitlab-ctl reconfigure使配置生效。(考虑移植性,建议通过docker-compose传递环境变量的方式来修改配置。)

配置Nginx反向代理并启用HTTPS

修改Nginx配置文件,新增以下虚拟主机部分:

    server {
        listen 443 ssl;
        server_name  git.midlane.top;

        ssl_certificate      /root/nginx/key/Nginx/git.server.crt;
        ssl_certificate_key  /root/nginx/key/Nginx/git.server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            proxy_connect_timeout 300s;
            proxy_send_timeout 300s;
            proxy_read_timeout 300s;
            proxy_buffer_size 128k;
            proxy_buffers 32 128k;
            proxy_busy_buffers_size 128k;
            client_max_body_size 512m;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:3000;
        }
    }


另外还需要将http请求全部重定向到https,可以使用以下配置(这条配置是针对整个站点,只需要一个即可):

server {
        listen       80;
        server_name  midlane.top;
	    return 301 https://$host$request_uri;
        ....
    }

注意事项

  1. 关于docker-compose.yml,如果设置external_url 'http://git.midlane.top:3000',那么容器内Gitlab自带的Nginx也会监听3000端口,要通过nginx['listen_port'] = 80将其改成80端口,否则端口映射是不对的。






  • 无标签