使用 Docker 安装 GitLab CE(官方镜像)

官方文档太繁琐,这里简单记录一下“使用 Docker 安装 GitLab CE (官方镜像)”关键步骤:

1、创建文件夹,例如:~/docker/gitlab-ce,用于保存 data、etc 和 log

mkdir -p ~/docker/gitlab-ce

2、在 Bash 配置文件中设置环境变量:GITLAB_HOME(若不设置,安装时会提示:该变量默认为空,会使用docker-compse.yaml文件所在的路径)

# 打开文件
vi .bashrc

# 写入如下配置
export GITLAB_HOME=~/docker/gitlab-ce

# 使之生效
source .bashrc

3、编写docker-compose.yml

# 说明:此文件用于在 Docker 中部署 GitLab CE(官方版本)
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    hostname: 'gitlab.xxx.com'        # 你的域名或 IP
    environment:
      # 添加 Gitlab-CE 自己的配置(相当于修改 /etc/gitlab/gitlab.rb 配置文件)
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.xxx.com'               # 如果使用宿主机的 nginx 做反代和SSL/TLS,此处必须使用 http://
        gitlab_rails['gitlab_shell_ssh_port'] = 2222       # SSH 端口:访问宿主机的 2222,会连接到容器的 22 端口
        
        # 开启 gitlab pages
        pages_external_url "http://pages.xxx.com"
        gitlab_pages['enable'] = true                      # CI/CD Runner 可部署 Pages
        gitlab_pages['inplace_chroot'] = true              # true 意味着不使用 chroot(沙箱化目录),Pages 直接在原始路径下运行

        # Pages 服务监听端口(内部使用)
        gitlab_pages['redirect_http_to_https'] = false     # 不使用 HTTPS
        gitlab_pages['external_http'] = ['0.0.0.0:8090'].  # 不使用 HTTPS
        #gitlab_pages['redirect_http_to_https'] = true     # 使用 HTTPS
        #gitlab_pages['external_https'] = ['0.0.0.0:443']  # 使用 HTTPS
        #gitlab_pages['cert'] = "/path/to/cert/pages.xxx.com.crt"
        #gitlab_pages['key'] = "/path/to/cert/pages.xxx.com.key"        

        # 启用镜像仓库 (Registry)
        registry_external_url 'http://registry.xxx.com'
        registry['enable'] = true
        registry['registry_http_addr'] = "0.0.0.0:5050"

        # 禁用 Prometheus / Alertmanager / Mattermost
        prometheus_monitoring['enable'] = false
        alertmanager['enable'] = false
        mattermost['enable'] = false

        # 数据库与 Redis 限制
        puma['worker_processes'] = 2
        sidekiq['concurrency'] = 10
        postgresql['shared_buffers'] = "256MB"
        redis['maxmemory'] = "512mb"

        # 关闭邮件
        gitlab_rails['smtp_enable'] = false

    # 端口映射:前者是主机,后者是容器
    ports:
      - '80:80'          # HTTP (如果使用宿主机 nginx 做反代,此处需要修改端口,例如:8080:80)
      - '443:443'        # HTTPS(如果使用宿主机 nginx 做反代和SSL/TLS,此行就不需要了)
      - '2222:22'        # SSH(docker 容器内的 sshd 也会映射(占用)一个宿主机端口,所以此处不能使用22,否则会报错:22端口已被占用)
      - '5050:5050'      # registry 对外的端口
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'      # gitlab 配置目录
      - '$GITLAB_HOME/logs:/var/log/gitlab'    # gitlab 日志目录
      - '$GITLAB_HOME/data:/var/opt/gitlab'    # gitlab 数据目录
    shm_size: '1g'     # 用来配置容器的 共享内存(/dev/shm)大小(默认只有64M),有些软件(特别是数据库、缓存、需要 IPC 的应用)可能需要更大的共享内存,否则会报错或性能下降

    # 限制容器占用的总内存,或者临时方案:docker update --memory="4g" --memory-swap="4g" gitlab
    deploy:
      resources:
        limits:
          memory: 4g

4、运行(漫长的等待)

docker compose up -d

5、可以通过如下命令查看安装日志

docker logs -f <container_id>

首次运行起来之后,需要设置 root 账号密码

docker logs <容器名称或ID> | grep 'Password'

通过 frp 内网穿透搭建的 Gitlab 容器,接下来可能会遇到一个坑:push 会遇到各种失败(即便你有权限、即便你已经把公钥放到 Gitlab 的 ssh key 设置里面了),解决方案:修改本机的 ~/.ssh/config 文件,增加如下内容:

Host gitlab.xxx.com               # 这里必须使用 gitlab.xxx.com,否则无效
    HostName gitlab.xxx.com 
    User root 
    Port 2222

    # 如果你没有使用 frp 进行内网穿透,就不需要下面这个配置
    # ProxyCommand 用 socat 实现 HTTP CONNECT 代理
    ProxyCommand socat - PROXY:xxx.com:%h:%p,proxyport=7002

参考这篇文章:https://www.cnblogs.com/isky0824/p/19053430
官方参考文档:https://docs.gitlab.com/install/docker/installation/

posted @ 2025-08-28 17:09  江南烟雨梦  阅读(120)  评论(0)    收藏  举报