在 Docker 上搭建 GitLab 服务器

GitLab 是一个流行的 Git 仓库管理工具,具有完整的 CI/CD 集成和强大的项目管理功能。


1. 准备工作

在开始之前,请确保你的服务器或计算机已安装了 Docker 和 Docker Compose。如果尚未安装,可以参考以下链接进行安装:

此外,确保你的服务器已经配置好相关端口(如 HTTP/HTTPS 和 SSH),并可以访问外部网络以拉取 Docker 镜像。


2. 拉取 GitLab Docker 镜像

GitLab 提供了两种主要版本的 Docker 镜像:

  • GitLab CE(Community Edition):免费的开源版本。
  • GitLab EE(Enterprise Edition):包含企业级功能的付费版本。

在本教程中,我们将使用 GitLab CE 镜像。

使用以下命令拉取 GitLab 镜像:

docker pull gitlab/gitlab-ce:latest

3. 创建 Docker Compose 配置文件

我们将使用 docker-compose.yml 文件来简化 GitLab 容器的部署和管理。创建一个名为 docker-compose.yml 的文件,并添加以下内容:

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.example.com:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2424
    ports:
      - '8929:8929'
      - '2424:22'
    volumes:
      - '/data/soft/gitlab/config:/etc/gitlab'
      - '/data/soft/gitlab/logs:/var/log/gitlab'
      - '/data/soft/gitlab/data:/var/opt/gitlab'
    shm_size: '256m'
  • external_url:定义 GitLab 的访问 URL,确保将 gitlab.example.com 替换为实际的域名或 IP 地址。
  • ports:映射宿主机端口到容器端口,这里将宿主机的 8929 端口映射到容器内的 8929(HTTP),将宿主机的 2424 端口映射到容器内的 22(SSH)。
  • volumes:持久化配置、日志和数据,将本地目录映射到容器中。

注意: 请根据实际情况修改 /path/to/gitlab 为你希望存储配置、日志和数据的路径。

可以在这里,看详细的版本:https://hub.docker.com/r/gitlab/gitlab-ce/tags/


4. 启动 GitLab 容器

在配置文件准备好后,使用以下命令启动 GitLab 容器:

docker-compose up -d

此命令会在后台启动 GitLab 服务,并创建一个名为 gitlab 的 Docker 容器。可以使用以下命令查看容器的运行状态:

docker ps

5. 访问 GitLab

一旦 GitLab 容器成功启动,你可以通过浏览器访问 GitLab:

http://gitlab.example.com:8929

默认情况下,GitLab 会为 root 用户创建一个初始密码,并在容器启动时显示在日志中。如果你没有看到密码,可以通过以下命令重置密码:

docker exec -it gitlab bash
gitlab-rails runner "user = User.find_by(username: 'root'); user.password = 'new_password'; user.password_confirmation = 'new_password'; user.save!"

将 'new_password' 替换为你希望设置的新密码。


6. 配置 Nginx 反向代理(可选)

如果你希望通过端口 80 或 443 来访问 GitLab(并启用 HTTPS),你可以配置一个 Nginx 反向代理。

假设 GitLab 容器运行在 8929 端口,你可以配置 Nginx 将流量转发到 GitLab:

server {
    listen 80;
    server_name gitlab.example.com;

    location / {
        proxy_pass http://127.0.0.1:8929;
        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;
    }
}

对于 HTTPS 访问,还需要配置 SSL 证书并修改 Nginx 配置。


7. GitLab 的其他管理
  • 停止 GitLab 容器:

    docker-compose down
    
  • 查看日志:
    使用以下命令查看 GitLab 容器的日志:

    docker logs gitlab
    
  • 备份和恢复:
    GitLab 提供了备份工具来保护你的数据。在容器内运行以下命令来备份 GitLab 数据:

    gitlab-rake gitlab:backup:create
    

    你可以将备份文件保存在宿主机上的某个位置,方便恢复:

    gitlab-rake gitlab:backup:restore BACKUP=timestamp_of_backup
    

8. 常见问题和故障排除
  1. GitLab 容器无法启动:

    • 检查容器日志,确认是否有配置问题或端口冲突。
    • 查看 /var/log/gitlab/gitlab-rails/ 中的 production.log 或 startup.log 获取详细信息。
  2. 端口被占用:

    • 如果容器启动时遇到端口冲突,尝试更改宿主机端口或检查是否有其他服务占用了这些端口。
  3. 数据库连接问题:

    • 确保 GitLab 能够访问数据库服务,检查数据库配置和防火墙设置。

总结

通过 Docker 安装和运行 GitLab 是一种简便且灵活的方式,尤其适合小规模的项目和开发环境。本文介绍了从安装 GitLab 到配置 Nginx 反向代理的完整过程,同时也涵盖了常见的配置和管理任务。如果你需要进一步的自定义或扩展功能,可以参考 GitLab 官方文档进行更多配置。

在这里插入图片描述

更多推荐