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