docker 搭建 最新版本的 gitlab,使用HTTPS访问,以及gitlab的基础使用讲解

杰哥的技术杂货铺 2024-08-12 08:37:01 阅读 95

文章目录

一、环境准备1.1 docker 安装

二、gitlab 搭建2.1 环境准备2.2 启动gitlab容器2.3 验证 GitLab 启动2.4 备份和恢复2.5 升级 GitLab

三、已搭建的gitlab升级为HTTPS访问3.1 准备 SSL 证书3.2 创建目录3.3 复制证书3.4 修改 GitLab 配置3.5 重新配置并重启 GitLab3.6 重启 GitLab 容器:

四、生成 Cloudflare Origin CA 证书和私钥4.1 Cloudflare 如何获取SSL 证书和私钥4.2 下载并保存证书和私钥文件

五、gitlab浏览器使用5.1 修改初始密码5.1.1 获取默认密码5.1.2 修改初始密码

5.2 创建新用户5.2.1 使用 Web 界面5.2.2 使用命令行(API)

5.3 创建新项目5.3.1 通过 Web 界面创建项目5.3.2 通过命令行使用 API 创建项目

5.4 分配角色5.4.1 分配项目角色5.4.2 分配组角色

5.5 允许用户上传和下载代码5.5.1 上传代码5.5.2 下载代码

六、常见错误处理6.1 端口被占用6.2 浏览器访问时显示 Error code 5226.2.1 检查服务器防火墙配置(云厂商安全组)6.2.2 确认服务器端口开放6.2.3 确认 Docker 容器端口映射6.2.4 检查服务器上的 GitLab 配置

6.3 浏览器访问时显示 Error code 5216.3.1 确认 Web 服务器正在运行6.3.2 检查 Web 服务器日志6.3.3 检查 Docker 容器端口映射6.3.4 检查服务器防火墙配置(云厂商安全组)6.3.5 确认 Cloudflare 的 SSL/TLS 配置6.3.6 为 GitLab 设置单独的 Page Rule

七、常见的 gitlab-ctl 命令7.1 基本操作7.2 配置管理7.3 日志管理7.4 备份与恢复7.5 缓存管理

一、环境准备

1.1 docker 安装

卸载旧版本的Docker(如果已安装)

sudo apt-get remove docker docker-engine docker.io containerd runc

更新Ubuntu的软件包列表:

sudo apt update

安装Docker所需的依赖包

sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

添加Docker的官方GPG密钥:

添加Docker的官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加Docker的APT存储库:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

再次更新软件包列表,并安装Docker引擎

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io -y

启动Docker服务并设置为开机自启:

sudo systemctl start docker

sudo systemctl enable docker

验证Docker安装是否成功

docker version

二、gitlab 搭建

2.1 环境准备

镜像下载

docker pull gitlab/gitlab-ee:16.11.4-ee.0

创建持久化数据目录

创建目录用于持久化存储配置(config)、日志(logs)、数据(data)和证书(SSL):

sudo mkdir -p /data/gitlab/config /data/gitlab/logs /data/gitlab/data /data/gitlab/ssl

复制 SSL 证书

将SSL 证书文件(例如 gitlab.example.com.crt 和 gitlab.example.com.key)复制到 /data/gitlab/ssl 目录:

sudo cp /path/to/your/gitlab.example.com.crt /data/gitlab/ssl/

sudo cp /path/to/your/gitlab.example.com.key /data/gitlab/ssl/

确保文件权限正确:

sudo chmod 600 /data/gitlab/ssl/gitlab.example.com.crt

sudo chmod 600 /data/gitlab/ssl/gitlab.example.com.key

2.2 启动gitlab容器

使用 Docker 启动 GitLab 容器,配置 HTTPS 和持久化存储:

sudo docker run --detach \

--hostname gitlab.example.com \

--publish 80:80 --publish 443:443 --publish 2222:22 \

--name gitlab \

--restart always \

--volume /data/gitlab/config:/etc/gitlab \

--volume /data/gitlab/logs:/var/log/gitlab \

--volume /data/gitlab/data:/var/opt/gitlab \

--volume /data/gitlab/ssl:/etc/gitlab/ssl \

--env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.com'; nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.example.com.crt'; nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.example.com.key';" \code>

gitlab/gitlab-ee:16.11.4-ee.0

例如:

docker run --detach \

--hostname gitlab.book.com \

--publish 80:80 --publish 443:443 --publish 2222:22 \

--name gitlab \

--restart always \

--volume /data/gitlab/config:/etc/gitlab \

--volume /data/gitlab/logs:/var/log/gitlab \

--volume /data/gitlab/data:/var/opt/gitlab \

--volume /data/gitlab/ssl:/etc/gitlab/ssl \

--env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.cashbook.cc'; nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.book.com.crt'; nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.book.com.key';" \code>

gitlab/gitlab-ee:16.11.4-ee.0

参数解释及作用

1、docker run --detach:

docker run: 启动一个新的 Docker 容器。

--detach: 以分离模式运行容器,即在后台运行。

2、--hostname gitlab.example.com:

设置容器的主机名,这将是 GitLab 实例在网络上的标识。

3、--publish 80:80 --publish 443:443 --publish 2222:22:

--publish (或 -p): 映射主机端口到容器端口。

80:80: 将主机的 80 端口映射到容器的 80 端口,用于 HTTP 访问。

443:443: 将主机的 443 端口映射到容器的 443 端口,用于 HTTPS 访问。

2222:22: 将主机的 2222 端口映射到容器的 22 端口,用于 SSH 访问。

4、--name gitlab:

指定容器的名称为 gitlab。

--restart always:

设置容器的重启策略为总是重启,即使容器崩溃或 Docker 服务重启后,容器也会自动重启。

5、--volume /srv/gitlab/config:/etc/gitlab:

挂载主机的 /srv/gitlab/config 目录到容器的 /etc/gitlab 目录,用于存储 GitLab 配置文件。

6、--volume /srv/gitlab/logs:/var/log/gitlab:

挂载主机的 /srv/gitlab/logs 目录到容器的 /var/log/gitlab 目录,用于存储 GitLab 日志文件。

7、--volume /srv/gitlab/data:/var/opt/gitlab:

挂载主机的 /srv/gitlab/data 目录到容器的 /var/opt/gitlab 目录,用于存储 GitLab 数据。

8、--volume /srv/gitlab/ssl:/etc/gitlab/ssl:

挂载主机的 /srv/gitlab/ssl 目录到容器的 /etc/gitlab/ssl 目录,用于存储 SSL 证书文件。

9、--env GITLAB_OMNIBUS_CONFIG=...:

设置环境变量 GITLAB_OMNIBUS_CONFIG,用于配置 GitLab。

10、external_url 'https://gitlab.example.com': 配置 GitLab 的外部访问 URL 为 https://gitlab.example.com。

11、nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.example.com.crt': 配置 Nginx 使用的 SSL 证书路径。

12、nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.example.com.key': 配置 Nginx 使用的 SSL 证书密钥路径。

gitlab_rails['gitlab_shell_ssh_port'] = 2222: 配置 GitLab 使用的 SSH 端口为 2222。

13、gitlab/gitlab-ee:latest:

指定使用的 Docker 镜像为 gitlab/gitlab-ee 的最新版本。

2.3 验证 GitLab 启动

使用以下命令检查 GitLab 容器的状态:

# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

878788361f54 gitlab/gitlab-ee:16.11.4-ee.0 "/assets/wrapper" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:2222->22/tcp, :::2222->22/tcp gitlab

在浏览器中访问 https://gitlab.example.com(替换为实际域名)。初次访问时会要求设置管理员密码。

2.4 备份和恢复

备份 GitLab 数据

sudo docker exec -t gitlab gitlab-backup create

备份文件存放在 /data/gitlab/data/backups 目录下。

恢复 GitLab 数据

将备份文件复制到指定目录,并恢复:

sudo docker cp /path/to/backup.tar gitlab:/var/opt/gitlab/backups/

sudo docker exec -t gitlab gitlab-backup restore BACKUP=<timestamp_of_backup>

2.5 升级 GitLab

拉取最新稳定版本的镜像并重启容器:

sudo docker pull gitlab/gitlab-ee:latest

sudo docker stop gitlab

sudo docker rm gitlab

sudo docker run --detach \

--hostname gitlab.example.com \

--publish 80:80 --publish 443:443 --publish 22:22 \

--name gitlab \

--restart always \

--volume /srv/gitlab/config:/etc/gitlab \

--volume /srv/gitlab/logs:/var/log/gitlab \

--volume /srv/gitlab/data:/var/opt/gitlab \

--volume /srv/gitlab/ssl:/etc/gitlab/ssl \

--env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.com'; nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.example.com.crt'; nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.example.com.key';" \code>

gitlab/gitlab-ee:latest

三、已搭建的gitlab升级为HTTPS访问

3.1 准备 SSL 证书

准备 PEM 证书文件,分别需要crt和key文件

3.2 创建目录

sudo mkdir -p /data/gitlab/ssl

3.3 复制证书

将 PEM 证书文件复制到该目录,并命名为 gitlab.example.com.crt 和 gitlab.example.com.key。例如:

sudo cp /path/to/your/cloudflare_certificate.pem /data/gitlab/ssl/gitlab.example.com.crt

sudo cp /path/to/your/cloudflare_private_key.key /data/gitlab/ssl/gitlab.example.com.key

3.4 修改 GitLab 配置

编辑 GitLab 配置文件 gitlab.rb 以启用 HTTPS 并指定 SSL 证书和密钥路径。

1、打开 gitlab.rb 文件进行编辑:

vim /data/gitlab/config/gitlab.rb

2、添加或修改以下配置:

external_url 'https://gitlab.example.com'

nginx['redirect_http_to_https'] = true

nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt"

nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"

3.5 重新配置并重启 GitLab

重新配置 GitLab:

sudo docker exec -it gitlab gitlab-ctl reconfigure

3.6 重启 GitLab 容器:

sudo docker restart gitlab

注:通过上述步骤,我们可以将 GitLab 从 HTTP 升级到 HTTPS 访问。如果在配置过程中遇到问题,可以查看 GitLab 和 Nginx 的日志以获取更多调试信息。

四、生成 Cloudflare Origin CA 证书和私钥

如果在 Cloudflare 中生成的证书只有 PEM 格式的文件而没有私钥文件,可能您使用的是 Cloudflare 提供的“Origin CA”证书。这个证书是用来在 Cloudflare 和您的服务器之间建立安全连接的。在这种情况下,您需要使用 Cloudflare 的 Origin CA 来生成证书和私钥文件。

4.1 Cloudflare 如何获取SSL 证书和私钥

登录 Cloudflare 控制台。选择您的域名。导航到 SSL/TLS -> Origin Server。点击 Create Certificate。选择 Let Cloudflare generate a private key and a CSR。点击 Next。选择 PEM 格式并点击 Create.

生成后,您会得到两个文件:

Origin Certificate(证书文件,通常为 .pem 格式)。Private Key(私钥文件,通常为 .key 格式)。

4.2 下载并保存证书和私钥文件

下载生成的证书和私钥文件,并将它们保存到您的服务器上。例如:

origin-cert.pem(证书文件)origin-key.pem(私钥文件)

五、gitlab浏览器使用

5.1 修改初始密码

默认用户名和密码

默认用户名: root

默认密码: 在 GitLab 的 Docker 容器首次启动时,默认密码会在日志中生成,或者使用在 gitlab.rb 文件中设置的密码。

5.1.1 获取默认密码

默认密码会存储在容器内的文件中,可以通过以下命令获取:

sudo docker exec -it gitlab cat /etc/gitlab/initial_root_password

输出内容会包含类似如下的信息:

# WARNING: This value is valid only in the following conditions

# 1. You access the account via the web interface.

# 2. You have not already changed the password.

#

Password: <your_initial_password>

5.1.2 修改初始密码

通过Web页面设置

登录后,点击右上角的头像,然后选择 Edit Profile在左侧菜单中选择 Password输入当前密码和新密码,然后点击 Save password

通过文件设置

如果我们在 gitlab.rb 文件中设置了自定义的初始密码,可以通过以下配置进行设置:

gitlab_rails['initial_root_password'] = '密码'

然后重新配置 GitLab:

sudo docker exec -it gitlab gitlab-ctl reconfigure

5.2 创建新用户

5.2.1 使用 Web 界面

登录到 GitLab 管理界面(以管理员身份)。在左侧导航栏中,点击 Admin Area。在顶部导航栏中,选择 Users。点击 New user 按钮。填写用户的详细信息(如姓名、用户名、邮箱地址等)。

Name: 用户的全名,如 “John Doe”。

Username: 用户的唯一标识符,如 “johndoe”。

Email: 用户的电子邮件地址。

Password: 用户的密码(如果需要,可以暂时留空,用户可以通过邮件设置密码)。

设置用户密码(如果需要)。点击 Create user 按钮。

注:

Name 是用户的全名,用于显示在界面上的人类可读的名字。

Username 是用户的唯一标识符,用于登录、URL 和命令行操作。

5.2.2 使用命令行(API)

我们还可以使用 GitLab API 创建用户。以下是一个示例命令:

curl --request POST "https://gitlab.example.com/api/v4/users" \

--header "PRIVATE-TOKEN: <your_access_token>" \

--data "email=new_user@example.com&username=new_user&name=New User&password=password1234"

将 <your_access_token> 替换为管理员访问令牌。

5.3 创建新项目

5.3.1 通过 Web 界面创建项目

进入新项目创建页面:

登录后,在页面的右上角,点击 + 按钮。从下拉菜单中选择 New project。

选择项目类型:

Create blank project:从头开始创建一个空项目。Create from template:使用 GitLab 提供的模板创建项目。Import project:从外部源(如 GitHub、Bitbucket)导入项目。

填写项目详细信息:

Project name:输入项目名称。这将自动生成项目的 URL 路径(可以手动修改)。Project slug:这是项目的 URL 路径(如果未手动修改,将基于项目名称自动生成)。Project description(可选):输入项目的描述信息。Project visibility:选择项目的可见性级别:

Private:只有项目成员可以访问。Internal:所有登录的用户可以访问。

设置其他选项(可选):

Initialize repository with a README:初始化项目时添加一个 README 文件。Add .gitignore:选择一个适合项目的 .gitignore 模板。Add a license:选择一个适合项目的许可证。

创建项目:

填写完所有信息后,点击 Create project 按钮。

5.3.2 通过命令行使用 API 创建项目

我们也可以使用 GitLab API 创建项目。以下是一个示例命令:

curl --request POST "https://gitlab.example.com/api/v4/projects" \

--header "PRIVATE-TOKEN: <your_access_token>" \

--data "name=new_project&visibility=private"

将 <your_access_token> 替换为您的访问令牌,并根据实际情况修改 name 和 visibility 参数。

5.4 分配角色

在 GitLab 中,用户角色通常通过项目或组权限分配。常见的角色包括:Guest、Reporter、Developer、Maintainer 和 Owner。

5.4.1 分配项目角色

登录到 GitLab 管理界面。选择一个项目。在左侧导航栏中,点击 Members。点击 Invite members 按钮。输入新用户的用户名或邮箱地址。选择用户的角色(如 Developer)。点击 Invite 按钮。

5.4.2 分配组角色

登录到 GitLab 管理界面。选择一个组。在左侧导航栏中,点击 Members。点击 Invite members 按钮。输入新用户的用户名或邮箱地址。选择用户的角色(如 Developer)。点击 Invite 按钮。

5.5 允许用户上传和下载代码

只要用户被分配了适当的角色(如 Developer 或以上),他们就可以在项目中进行代码上传和下载。

5.5.1 上传代码

用户可以使用 Git 命令行工具将代码推送到项目中:

git clone https://gitlab.example.com/group/project.git

cd project

# 做出一些更改

git add .

git commit -m "Add new feature"

git push origin main

5.5.2 下载代码

用户可以通过 Git 克隆项目:

git clone https://gitlab.example.com/group/project.git

六、常见错误处理

6.1 端口被占用

错误信息:

docker: Error response from daemon: driver failed programming external connectivity on endpoint gitlab

解决方法

确保端口未被其他服务占用。例如,22 端口可能已经被 SSH 服务占用。

6.2 浏览器访问时显示 Error code 522

访问报错:Connection timed out Error code 522

错误代码 522 通常表示 Cloudflare 无法连接到您的服务器。以下是可能的解决方案:

6.2.1 检查服务器防火墙配置(云厂商安全组)

确保防火墙允许 HTTP(80)、HTTPS(443)和新的 SSH(2222)端口的访问。

6.2.2 确认服务器端口开放

确保服务器在正确的端口上监听。您可以使用 netstat 或 ss 工具进行检查:

sudo netstat -tuln | grep ':80'

sudo netstat -tuln | grep ':443'

sudo netstat -tuln | grep ':2222'

确保这些命令返回监听状态。

6.2.3 确认 Docker 容器端口映射

检查 Docker 容器的端口映射是否正确:

docker ps

6.2.4 检查服务器上的 GitLab 配置

确保 GitLab 容器内的 NGINX 正常运行并监听正确的端口。进入容器内部检查 NGINX 状态:

sudo docker exec -it gitlab gitlab-ctl status

检查 NGINX 日志:

sudo docker exec -it gitlab gitlab-ctl tail nginx

确保 NGINX 正常启动且没有错误。

6.3 浏览器访问时显示 Error code 521

报错信息:Cloudflare 报错Web server is down Error code 521

错误代码 521 表示 Cloudflare 无法连接到您的服务器。这通常是因为服务器没有响应,或者阻止了来自 Cloudflare 的请求。以下是一些可能的解决方案:

6.3.1 确认 Web 服务器正在运行

确保 GitLab 容器内的 NGINX 服务正在运行。

进入 GitLab 容器内部:

sudo docker exec -it gitlab bash

然后检查 NGINX 服务状态:

gitlab-ctl status nginx

如果 NGINX 没有运行,可以尝试重新启动:

gitlab-ctl restart nginx

6.3.2 检查 Web 服务器日志

查看 NGINX 的日志文件,查找任何错误信息:

gitlab-ctl tail nginx

6.3.3 检查 Docker 容器端口映射

确保 Docker 容器正确映射了 HTTP 和 HTTPS 端口。

运行以下命令来检查容器的端口映射:

docker ps

6.3.4 检查服务器防火墙配置(云厂商安全组)

确保防火墙允许 HTTP(80)、HTTPS(443)和新的 SSH(2222)端口的访问。

6.3.5 确认 Cloudflare 的 SSL/TLS 配置

确保 Cloudflare SSL/TLS 配置正确。推荐使用“Full”或“Full (strict)”模式:

登录 Cloudflare 控制台。选择您的域名。导航到 SSL/TLS 选项卡。确保 SSL/TLS 模式设置为 Full 或 Full (strict)。

注意:如果更改 Cloudflare 的 SSL/TLS 模式可能会影响该域名其他网站的访问,我们可以尝试以下几个步骤来解决 GitLab 的连接问题,而不影响其他网站的正常访问:

6.3.6 为 GitLab 设置单独的 Page Rule

确认 Cloudflare 的 SSL/TLS 配置,推荐使用“Full”或“Full (strict)”模式。为了不影响其他网站,可以为 GitLab 设置单独的 Page Rule。

登录 Cloudflare 控制台。选择您的域名。导航到 Page Rules 选项卡。创建一个新的 Page Rule,规则如下:

URL: *gitlab.example.com/*

Settings: SSL -> Full (strict)

七、常见的 gitlab-ctl 命令

gitlab-ctl 是 GitLab Omnibus 版本中的一个命令行工具,用于管理和配置 GitLab 服务。即使使用 Docker 部署 GitLab,您仍然可以通过在 Docker 容器中执行 gitlab-ctl 命令来管理 GitLab 实例。

7.1 基本操作

启动 GitLab:

gitlab-ctl start

停止 GitLab 服务:

gitlab-ctl stop

重启 GitLab 服务:

gitlab-ctl restart

检查所有 GitLab 组件的运行状态:

gitlab-ctl status

7.2 配置管理

重新配置 GitLab:

当我们修改了配置文件 /etc/gitlab/gitlab.rb 后,需要重新加载配置:

gitlab-ctl reconfigure

测试配置:

gitlab-ctl reconfigure --dry-run

7.3 日志管理

查看所有服务日志:

gitlab-ctl tail

查看指定特定服务的日志,例如查看 Nginx 的日志

gitlab-ctl tail nginx

7.4 备份与恢复

创建备份:

在进行升级前,您可以创建备份:

gitlab-rake gitlab:backup:create

从备份恢复:

gitlab-rake gitlab:backup:restore

7.5 缓存管理

清除 Redis 缓存:

gitlab-rake cache:clear



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。