在本教程中,您将学习如何使用 Docker 和 Docker Compose 来搭建 GitLab 代码仓库管理平台,并配置 SSL 加密与 LDAP 认证。GitLab 是一个流行的 Git 仓库管理工具,广泛用于源代码管理与团队协作。本教程将帮助您在Linux环境中轻松搭建一个私有 GitLab 服务,并通过 LDAP 实现集中的用户认证。

  1. 环境准备
    • 安装 Docker 和 Docker Compose
    • 设置 GitLab 所需的端口与文件路径
  2. 配置 GitLab 服务
    • 使用 Docker Compose 安装 GitLab
    • 配置 SSL 加密
    • 配置 LDAP 认证
  3. 配置 SMTP 邮件发送
  4. 启动 GitLab 服务并访问
    • 启动 GitLab 容器
    • 登录 GitLab 并验证配置
  5. (可选)配置 GitLab 的 Git SSH 功能

在开始之前,您需要准备一个 Linux 服务器并安装 Docker 和 Docker Compose。可以通过以下命令进行安装:

# 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo DOWNLOAD_URL=https://mirrors.ustc.edu.cn/docker-ce sh get-docker.sh

# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

我们将使用 Docker Compose 来启动 GitLab 服务,确保 Docker 容器能够持久存储数据和配置。

1. 创建 docker-compose.yml 配置文件

在您的服务器上,创建一个新的目录用于存放 GitLab 的配置和数据。进入该目录并创建 docker-compose.yml 文件。

mkdir ~/gitlab
cd ~/gitlab
nano docker-compose.yml

将以下内容粘贴到 docker-compose.yml 文件中:

version: '3'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest' # 或者是 gitlab-ce 版本
    container_name: 'gitlab'
    restart: always
    hostname: 'gitlab.algs.tech'
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.algs.tech'
        nginx['ssl_certificate'] = "/etc/gitlab/ssl/cert.pem"
        nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/key.pem"
        gitlab_rails['ldap_enabled'] = true
        gitlab_rails['ldap_servers'] = YAML.load <<-EOS
          main:
            label: 'LDAP'
            host: 'openldap.algs.tech'  # 替换为您的 LDAP 服务器地址
            port: 389  # LDAP 端口
            uid: 'uid'  # LDAP 用户名属性
            bind_dn: 'cn=admin,dc=webcoding,dc=tech'  # LDAP 管理员 DN
            password: 'abc2024XYZ'  # LDAP 管理员密码
            encryption: 'plain'  # 如果需要加密,改为 'start_tls' 或 'simple_tls'
            verify_certificates: true  # 如果使用 TLS 并需要跳过证书验证,设置为 false
            active_directory: true  # 如果使用 Active Directory,设置为 true
            allow_username_or_email_login: false  # 是否允许使用用户名或邮件登录
            lowercase_usernames: false
            block_auto_created_users: false
            base: 'dc=webcoding,dc=tech'  # LDAP 基础 DN
            user_filter: ''  # 额外的用户过滤条件
            group_base: ''
            admin_group: ''  # 可以设置管理员组
            sync_ssh_keys: false
        EOS
        # SMTP 配置
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = "smtphz.qiye.163.com"  # SMTP 服务器地址
        gitlab_rails['smtp_port'] = 465  # SMTP 端口
        gitlab_rails['smtp_user_name'] = "noreply.gitlab@aiapp.pro"  # 发件邮箱
        gitlab_rails['smtp_password'] = "password"  # 发件邮箱密码
        gitlab_rails['smtp_domain'] = "qiye.163.com"  # 域名
        gitlab_rails['smtp_authentication'] = "login"  # 认证方式,可选"plain", "login", "cram_md5"
        gitlab_rails['smtp_enable_starttls_auto'] = false  # 启用 STARTTLS
        gitlab_rails['smtp_tls'] = true
        gitlab_rails['smtp_openssl_verify_mode'] = 'peer'  # SSL 验证模式,可选"none", "peer", "client_once", "fail_if_no_peer_cert"
        gitlab_rails['gitlab_email_from'] = 'noreply.gitlab@aiapp.pro'
        user['git_user_email'] = 'noreply.gitlab@aiapp.pro'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
      - '/etc/certs/ssl/algs.tech:/etc/gitlab/ssl'
    shm_size: '256m'

2. 配置 SSL 证书

确保您已经拥有有效的 SSL 证书和密钥,将它们放置在 /etc/certs/ssl/algs.tech/ 目录下,并且它们的权限设置正确。

3. 启动 GitLab

在配置好 Docker Compose 文件后,您可以使用以下命令启动 GitLab 服务:

docker-compose up -d

此命令会启动 GitLab 容器并在后台运行。

  1. 打开浏览器并访问 https://gitlab.algs.tech
  2. 默认情况下,GitLab 会要求您设置管理员密码。
  3. 使用您的管理员账号登录。

在 GitLab 登录页面,尝试使用 LDAP 用户进行登录。确保您正确配置了 LDAP 地址、端口、管理员 DN 和密码。

如果需要启用 Git 通过 SSH 的方式推送和拉取代码,可以配置 GitLab 使用 SSH。您可以参考 GitLab 官方文档 了解更多配置内容。

结语

恭喜!您已经成功搭建了一个内网 GitLab 代码仓库管理平台,并实现了 SSL 加密和 LDAP 集成。通过这个平台,您的团队可以更加安全、高效地进行代码管理。

你可以将这个过程录制成教程视频,并将其发布到 YouTube 或比例比例平台,帮助更多的开发者和 IT 管理员搭建类似的环境。