Docker GitLab 域名设置

简介

Docker 是一种开源平台,通过使用容器来轻松创建、部署和运行应用程序。GitLab 是一个用于代码托管、项目管理、CI/CD 等的开源工具。本文将介绍如何使用 Docker 部署 GitLab,并设置自定义域名。

前提条件

在开始之前,确保你已经安装了 Docker 和 Docker Compose,并且拥有一个可用的域名。

步骤

1. 创建 Docker Compose 文件

在你的项目目录下创建一个名为 docker-compose.yml 的文件,并将以下内容添加到文件中:

version: '3.7'

services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.example.com' # 替换为你的域名
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url ' # 替换为你的域名
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'

2. 启动 GitLab 容器

使用以下命令启动 GitLab 容器:

docker-compose up -d

等待一段时间,直到容器启动完成。

3. 配置 DNS

打开你的域名注册商的网站,进入 DNS 管理界面。添加一条新的 DNS 记录,类型为 A 记录,主机记录为 gitlab(或你喜欢的任意名称),IP 地址为你的服务器 IP。

保存并等待 DNS 记录生效,这可能需要几分钟时间。

4. 配置反向代理

为了让 GitLab 可以通过 HTTPS 访问,我们需要使用反向代理。常见的反向代理有 Nginx 和 Apache。下面以 Nginx 为例进行配置。

首先安装 Nginx:

sudo apt-get install nginx

然后创建一个新的 Nginx 配置文件 gitlab.conf

server {
    listen 80;
    server_name gitlab.example.com; # 替换为你的域名

    location / {
        proxy_pass http://localhost:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

gitlab.conf 文件保存到 /etc/nginx/conf.d/ 目录下,并重启 Nginx 服务:

sudo systemctl restart nginx

5. 设置 GitLab 配置

进入 GitLab 容器:

docker-compose exec gitlab bash

编辑 GitLab 配置文件:

vi /etc/gitlab/gitlab.rb

将以下内容添加到文件末尾:

external_url ' # 替换为你的域名
nginx['listen_port'] = 80
nginx['listen_https'] = false
nginx['proxy_set_headers'] = {
  "X-Forwarded-Proto" => "https",
  "X-Forwarded-Ssl" => "on"
}

保存并退出编辑器。

执行以下命令重新配置 GitLab:

gitlab-ctl reconfigure

6. 完成设置

现在你可以通过浏览器访问你的 GitLab 实例了。在地址栏中输入 ` GitLab 的登录页面。

类图

下面是一个简化的 GitLab 类图示例:

classDiagram
    class User {
        + id: int
        + name: string
        + email: string
        + password: string
        + create(): void
        + update(): void
        + delete(): void
    }

    class Project {
        + id: int
        + name: string
        + description: string
        + create(): void
        + update(): void
        + delete(): void
    }

    class Repository {
        + id: int
        + name: string
        + url: string
        + create(): void
        + update(): void
        + delete(): void
    }

    User "1" -- "1..*" Project
    Project