如何在 Ubuntu 22.04 上安装带有 Docker 的 GitLab
本教程适用于这些操作系统版本
- Ubuntu 22.04(果酱水母)
- Ubuntu 18.04(仿生海狸)
在此页
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 安装依赖项
- 第 3 步 - 更改系统 SSH 端口
- 第 4 步 - 安装 Docker 和 Docker Compose
- 第 5 步 - 设置 Docker 卷
- 第 6 步 - 使用 Docker Compose 安装 Gitlab
- 第 7 步 - 配置 Gitlab
- 访问 Gitlab
- 限制公开注册
- 配置 Gitlab 配置文件
- 更改根密码
- 更改用户名
- 禁用 Prometheus 指标并改善隐私
- 添加您的 SSH 密钥
- 创建项目
Gitlab Server 是云托管 Gitlab 版本控制的开源版本。自托管存储库相对于云托管的优势在于对代码的完全控制。
本指南将教您如何在 Ubuntu 22.04 服务器上使用 Docker 安装 Gitlab Server。 Gitlab 服务器提供两个版本——免费社区版和付费企业版。我们将安装社区版。如果您想要更多功能,可以轻松将其升级到企业版。
先决条件
-
A server running Ubuntu 22.04.
-
A non-root user with sudo privileges.
-
Uncomplicated Firewall(UFW) is enabled and running.
-
A Fully Qualified domain name (FQDN) pointing to the server like,
gitlab.example.com
. -
Everything is updated.
$ sudo apt update && sudo apt upgrade
第 1 步 - 配置防火墙
安装任何包之前的第一步是配置防火墙以允许 HTTP 和 HTTPS 连接。
检查防火墙的状态。
$ sudo ufw status
您应该会看到如下内容。
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
允许 HTTP 和 HTTPs 端口。
$ sudo ufw allow http $ sudo ufw allow https
打开 587 端口,用于通过 SMTP 接收邮件。您的 SMTP 邮件程序可能使用了不同的端口。
$ sudo ufw allow http $ sudo ufw allow 587
再次检查状态以确认。
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere 587 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6) 587 (v6) ALLOW Anywhere (v6)
第 2 步 - 安装依赖项
在安装 Gitlab 之前,我们需要安装教程过程中需要的某些包。
$ sudo apt install ca-certificates curl openssh-server apt-transport-https gnupg lsb-release -y
其中一些软件包可能已预先安装在您的系统上。
第 3 步 - 更改系统 SSH 端口
Gitlab 使用默认的 SSH 端口,这将与系统 SSH 端口冲突。为获得最佳效果,最好更改系统默认端口。
为此,打开
/etc/ssh/sshd_config
文件进行编辑。$ sudo nano /etc/ssh/sshd_config
找到以下行,删除它前面的哈希 (#) 并将值从 22 更改为您选择的任何其他值。对于我们的教程,我们通过更改选择了 2425
#Port 22
到
Port 2425
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
重新启动 SSH 服务。
$ sudo systemctl restart sshd
在防火墙中打开端口 2425。
$ sudo ufw allow 2425
关闭当前的 SSH 会话并使用新端口重新登录。
$ ssh <serverIP> -p 2425
第 4 步 - 安装 Docker 和 Docker Compose
添加 Dockers 官方 GPG 密钥。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
运行以下命令以添加 Docker 存储库。
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新系统以包含 Dockers 存储库。
$ sudo apt update
安装泊坞窗。
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
本教程将使用 Docker Compose v2 插件而不是旧的遗留二进制文件。因此,运行它的命令从
docker-compose
更改为docker compose
,这反映在这里。Docker 以提升的权限运行,因此您需要经常使用
sudo
来运行命令。更好的选择是将您的 Linux 用户帐户添加到docker
用户组。$ sudo usermod -aG docker ${USER}
$ {USER}
变量获取当前登录的系统帐户。如果您未使用要授予权限的用户登录,请将$ {USER}
替换为用户名。要申请新的组成员资格,请退出服务器并重新登录,或使用以下命令。系统将提示您输入用户密码。
$ su - $(USER)
第 5 步 - 设置 Docker 卷
在继续安装之前,我们需要设置要通过 Docker 卷访问的 Gitlab 数据和配置的位置。
创建 Docker 卷目录。
$ sudo mkdir /srv/gitlab -p
为 Docker 组合文件创建一个目录。
$ mkdir ~/gitlab-docker
切换到目录。
$ cd ~/gitlab-docker
创建一个环境变量文件并打开它进行编辑。
$ nano .env
粘贴以下代码以定义
$GITLAB_HOME
变量。GITLAB_HOME=/srv/gitlab
Gitlab 容器使用主机挂载的卷来存储持久数据。下表显示了 Gitlab 目录的本地位置到容器位置的映射以及它们各自的用法。
Local Location Container Location Usage $GITLAB_HOME/data /var/opt/gitlab For storing application data. $GITLAB_HOME/logs /var/log/gitlab For storing logs. $GITLAB_HOME/config /etc/gitlab For storing Gitlab configuration. 第 6 步 - 使用 Docker Compose 安装 Gitlab
确保你在 Gitlab 的 Docker compose 目录中。
创建并打开 Docker compose 配置文件进行编辑。
$ nano docker-compose.yml
将以下代码粘贴到其中。
version: '3.6' services: web: image: 'gitlab/gitlab-ee:latest' container_name: 'gitlab-howtoforge' restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.example.com' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "email-smtp.us-west-2.amazonaws.com" gitlab_rails['smtp_user_name'] = "SESUsername" gitlab_rails['smtp_password'] = "SESKey" gitlab_rails['smtp_domain'] = "example.com" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_authentication'] = "login" gitlab_rails['gitlab_email_from'] = '' gitlab_rails['gitlab_email_reply_to'] = '' # Add any other gitlab.rb configuration here, each on its own line ports: - '80:80' - '443:443' - '22:22' - '587:587' volumes: - '$GITLAB_HOME/config:/etc/gitlab' - '$GITLAB_HOME/logs:/var/log/gitlab' - '$GITLAB_HOME/data:/var/opt/gitlab' shm_size: '256m'
让我们看一下文件中定义的所有选项。
- image是指Gitlab的Docker镜像在Dockerhub上的位置。
- container_name 允许您将标签应用于 docker 容器,以便在 Docker 网络中引用容器时使用。
- restart 指定容器的重启策略。将它设置为 always 意味着容器如果退出,将自动重新启动。
- hostname 定义容器内部主机名,或者在本例中,是将安装 Gitlab 的 URL。
- environment 提供变量 GITLAB_OMNIBUS_CONFIG,它允许您输入任何 Gitlab 配置设置。
- external_url 指的是您的 Gitlab 将安装到的域。使用
https
协议可确保自动安装 Lets Encrypt SSL 证书。 - SMTP 详细信息 - 我们包含了 SMTP 详细信息,以便 Gitlab 实例可以发送重要的电子邮件和通知。对于我们的教程,我们使用亚马逊的 SES 服务。但是,您可以使用您选择的任何服务。查看 SMTP 邮件程序的 Gitlab 文档以了解如何配置它们。
- 端口告诉容器向主机发布端口或一系列端口。由于Gitlab需要22(SSH)、80(HTTP)、443(HTTPS)、587(SMTP)端口,所以已经暴露给系统。如果您希望 Gitlab 在您的服务器上使用非标准端口(可能是因为它不可用),您将首先提供主机端口,然后再提供容器端口。例如,由于您的服务器已经在使用 SSH(22) 端口,您可以告诉 Gitlab 通过不同的端口使用 SSH,比如 3333。然后您可以将上述文件中的 22:22 更改为 3333:22。您还需要在上面的 GITLAB_OMNIBUS_CONFIG 下添加行
gitlab_rails[gitlab_shell_ssh_port]=3333
。 - volume 定义了服务器上存储持久数据的目录。如第 5 步中所定义,
$GITLAB_HOME
现在可以在 compose 文件中用于将相关目录挂载到容器上。 - shm_size 是指容器使用的共享内存。默认情况下,Docker 分配 64MB 给共享内存目录(挂载在
/dev/shm
)。这对于 Gitlab 容器生成的 Prometheus 指标来说是不够的。因此,最少256MB的共享内存保证了docker的流畅运行。您可以根据系统的 RAM 增加它的值。或者,您可以在安装后从管理区域禁用 Prometheus 指标。我们将在下一步中探讨这一点。
启动 Gitlab Docker 容器。
$ docker compose up -d
该过程需要几分钟才能完成。您可以使用 Docker 日志跟踪进度。
$ docker logs gitlab-howtoforge -f
按Ctrl+C退出日志的监听。
您可以使用以下命令检查 Gitlab 容器的状态。
$ docker ps
从 Gitlab 14.0 开始,它会自动生成一个 root 密码,并将其存储在
initiall_root_password
文件中。该文件可以在/srv/gitlab/config
目录中找到。运行以下命令查看root密码。$ sudo cat /srv/gitlab/config/initial_root_password
您将收到类似的输出。
# WARNING: This value is valid only in the following conditions # 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run). # 2. Password hasn't been changed manually, either via UI or via command line. # # If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password. Password: Hz3t7Etn18wB6VAfBWyDlYbN2VQdMCO0xIIENfDHcFo= # NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
复制密码并保存以备后用。现在一切都已设置,我们可以继续进行配置。
第 7 步 - 配置 Gitlab
访问 Gitlab
在浏览器中打开 URL
https://gitlab.example.com
,您将看到以下登录屏幕。输入
root
作为用户名和密码,您在上一步中登录 Gitlab 仪表板。登录后,您将被带到以下仪表板屏幕。可以看到,Gitlab已经创建了一个项目来监控实例。
限制公开注册
默认情况下,任何人都可以创建一个帐户并获得访问权限。如果您不想要它,可以将其关闭。幸运的是,它的设置在仪表板上以弹出屏幕的形式显示。单击关闭按钮以限制 Gitlab 实例上的公共注册。这样做会将您重定向到以下设置页面。
取消选中启用注册选项以限制它们。按按钮保存更改以应用设置。
如果您没有在仪表板中看到弹出窗口,您可以通过单击菜单按钮并从那里访问管理面板来访问设置页面。
进入管理面板后,将鼠标悬停在左侧栏中的“设置”选项上,然后单击“常规”子菜单。从那里您可以访问注册限制面板。
配置 Gitlab 配置文件
您的默认配置文件非常平淡,没有任何可显示的内容。要更改它,请单击左上角的用户图标以调出下拉菜单并选择“编辑配置文件”选项。
您将被带到个人资料设置页面,您可以在其中添加您的姓名、电子邮件和其他有关您自己的信息。完成后单击更新配置文件设置。不要返回主页,因为我们还有一些东西要在这里配置。
更改根密码
这是最重要的步骤之一。您应该立即更改您的默认 root 密码。在早期版本中,Gitlab 要求您将其作为安装的一部分进行更改,但现在已将其设为可选。要更改密码,请单击左侧栏中的“密码”菜单。
输入您的密码详细信息,然后单击保存密码以进行更改。您将退出您的实例,并且必须重新登录。
更改用户名
您可以将默认的 Gitlab 用户名从
root
更改为您选择的任何内容。为此,请单击左侧栏中的“帐户”菜单。进入页面后,输入您的新用户名并单击“更新用户名”按钮进行更改。系统将再次提示您进行确认。再次按下更新用户名按钮以确认更改。
您还应该在此处启用双因素身份验证以提高您的帐户安全性。
禁用普罗米修斯指标并改善隐私
在上一步中,我们讨论了增加 Droplet 的共享内存大小并将其保持在至少 256 MB。主要需要将Prometheus metrics相关数据存储在磁盘上。如果您不使用该功能,则应禁用该功能。您只能在安装后执行此操作。要禁用它,请从菜单栏打开管理面板。
进入管理面板后,打开设置 >> 指标和分析菜单选项。
在 Metrics 页面上,展开 Metrics - Prometheus 部分并取消选中 Enable health and performance metrics endpoint 选项。单击保存更改按钮以实施更改。
Gitlab 还从每个安装中收集使用信息。如果您重视隐私并且不希望它发生,请展开同一页面上的使用统计选项并取消选中启用服务 Ping 选项。单击保存更改按钮以实施更改。
第 8 步 - 创建您的第一个项目
让我们尝试创建我们的第一个项目并推送一个提交。
添加 SSH 密钥
在继续之前,我们应该添加我们的 SSH 密钥。这允许我们在不使用任何密码的情况下与我们的安装进行交互。如果您有 SSH 密钥,则可以跳过以下命令。如果您没有,可以使用以下命令创建一个。
$ ssh-keygen -t ed25519 -C "gitlab.example.com"
此命令对 macOS、Linux 和 Windows 上的 Git Bash/WSL 通用。接受默认值并输入强密码。我们正在 Windows Powershell 终端上创建 SSH 密钥。
Generating public/private rsa key pair. Generating public/private ed25519 key pair. Enter file in which to save the key (C:\Users\<username>/.ssh/id_ed25519): Enter same passphrase again: Your identification has been saved in C:\Users\<username>/.ssh/id_ed25519. Your public key has been saved in C:\Users\<username>/.ssh/id_ed25519.pub. SHA256:CI3Ja1LSTN+j4LQnDYkAoP+DvZB8SWrD26zDyUBRbUY gitlab.example.com +--[ED25519 256]--+ |* ..+E | |. + / o o | | o = B o . | |. o B = S | |.o X + | | +X.* | | .=B o | +----[SHA256]-----+
将私钥身份添加到 SSH 身份验证代理中。如果您使用的是 Windows,请确保 OpenSSH Authentication Agent 服务正在运行。如果您使用的是 Linux 或 macOS,请运行以下命令。
$ eval $(ssh-agent -s)
添加密钥。
$ ssh-add C:\Users\<username>/.ssh/id_ed25519
在 Linux 和 macOS 上,命令将更改为
$ ssh-add ~/.ssh/id_ed25519
系统将提示您输入密码。输入它,将添加密钥。
接下来,我们需要将这些设置保存到
~/.ssh/config
文件中。在 Windows 上,这将是C:\Users\
目录。将以下代码粘贴到文件末尾。\.ssh Host gitlab.example.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_ed25519
在此文件中,路径名将在所有操作系统中保持相同。保存文件。
接下来,我们需要将公钥复制到我们的 Gitlab 帐户中。您可以通过以下命令显示您的公钥。路径名将再次适用于此处的所有操作系统。
$ cat ~/.ssh/id_ed25519.pub
您将获得类似的输出。
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAml2KPhmGkdMWv7jksLKO13u3g1zI9CumKDQSpv7lYh gitlab.example.com
在 Gitlab 中打开您的配置文件设置,然后从左侧栏中选择 SSH 密钥菜单。
将 SSH 密钥粘贴到提供的框中,然后单击“添加密钥”继续。
接下来,我们需要测试我们的 SSH 连接是否成功。在您的 PC 终端上运行以下命令。
$ ssh -T
您将获得类似的输出。首先,系统会要求您将 SSH 密钥添加到系统的已知主机列表中。输入 yes 继续。您还会收到一条警告,指出 Gitlab 实例的 SSH 密钥和您的服务器 IP 不相同,并且会再次询问您是否要继续。再次输入是。最后,您将收到一条成功消息,确认您已连接到 Gitlab 实例。
The authenticity of host 'gitlab.example.com (192.0.2.0)' can't be established. ECDSA key fingerprint is SHA256:g5mOqAY2A3lhXW0flnLGdSU7RrDnbRFKVJCquAhLXqk. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'gitlab.example.com' (ECDSA) to the list of known hosts. Warning: the ECDSA host key for 'gitlab.example.com' differs from the key for the IP address '192.0.2.0' Are you sure you want to continue connecting (yes/no)? yes Offending key for IP in C:\Users\navjo/.ssh/known_hosts:7 Welcome to GitLab, @navjot!
现在,我们可以继续创建我们的第一个存储库并进行一些提交。
创建项目
Gitlab 中的每个存储库都属于一个项目。项目包括存储库、问题跟踪器、合并请求、wiki、持续集成和持续交付 (CI/CD) 管道以及许多其他功能。
要创建您的第一个存储库,请单击主页上的新建项目按钮。
您将被带到“新建项目”页面,您将在其中获得有关如何创建新项目的多个选项。
选择创建空白项目选项以继续。在下一页上,输入项目名称。从项目 URL 选项的下拉菜单中选择您的用户名。设置你的项目 slug。如果您愿意,可以输入项目描述,并根据需要更改项目的可见性。您可以使用
README
文件初始化您的存储库。完成后,单击创建项目。您将被带到只有一个空白
README.md
文件的存储库页面。现在我们的存储库已经上线,让我们尝试从命令行添加一个变更日志。在您的计算机上输入以下命令以创建一个
CHANGELOG
文件并将其推送回您的存储库。确保你的电脑上安装了 Git。第一步是克隆存储库。您可以使用 SSH 或 HTTPS 进行克隆。使用 SSH 克隆。您将被要求输入密码。
$ git clone :user/howtoforge-test.git
输入其余命令以创建和推送
CHANGELOG
文件。$ cd howtoforge-test $ touch CHANGELOG # Or create the file in your editor and enter a project description $ git add CHANGELOG $ git commit -m "add Changelog" $ git push -u origin main
在推送命令期间,系统将再次提示您输入密码。
回到你的 Gitlab 项目页面,你会在里面看到
CHANGELOG
文件。恭喜!您已经成功创建了您的第一个项目并向其提交了一个文件。第 9 步 - 管理 Gitlab 容器
让我们看看如何使用简单的命令来管理 Gitlab 容器。
如果您想在任何时候停止容器,请从 Docker compose 目录中发出以下命令。
$ docker compose down
要再次启动它们,请发出以下命令。
$ docker compose up -d
如果要更改任何设置或向 Gitlab 实例添加设置,可以通过编辑 GITLAB_OMNIBUS_CONFIG 变量下的
docker-compose.yml
文件来实现。进行更改后,您将需要重新启动容器以实施更改。发出以下命令以使用新配置更新容器。$ docker compose down --remove-orphans $ docker compose up -d
要重新启动容器,请发出以下命令。不过,以下重启命令不会获取对 Docker 组合文件所做的任何更改。
$ docker compose restart
访问容器外壳。
$ docker exec -it <container name> bash
第 10 步 - 备份 Gitlab
备份 Gitlab 可以通过一个命令完成。
$ docker exec -t gitlab-howtoforge gitlab-backup create
备份文件保存在
/srv/gitlab/data/backups
目录下。此备份不包含您的gitlab-secrets.json
配置文件。此文件位于/srv/gitlab/config
目录中。因此,您需要单独备份此文件。还有一个配置文件,gitlab.rb
,里面包含了Gitlab实例的所有设置。但在我们的例子中,我们在 compose 文件中使用了 GITLAB_OMNIBUS_CONFIG 变量,因此 Gitlab 不使用该文件。要对 Gitlab 进行任何更改,您需要通过变量定义它们。因此,您还需要备份撰写文件。您可以创建一个 cron 条目来定期备份您的 Gitlab 安装。
第 11 步 - 恢复 Gitlab
要恢复 Gitlab,您应该在另一个系统上安装了可用的 Gitlab。您还需要复制配置目录并覆盖现有的安装配置。
恢复 Gitlab 需要运行几个命令。首先,您需要停止连接到数据库的进程。
$ docker exec -it <name of container> gitlab-ctl stop puma $ docker exec -it <name of container> gitlab-ctl stop sidekiq
将
替换为新服务器上容器的名称。在继续之前验证进程是否已关闭。
$ docker exec -it <name of container> gitlab-ctl status
将备份文件复制到
/srv/gitlab/data/backups
目录。如果目录不存在,则创建该目录。运行恢复命令。您需要从命令中删除文件名的
_gitlab_backup.tar
部分。$ docker exec -it <name of container> gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
复制
gitlab-secrets.json
文件并覆盖新服务器的/srv/gitlab/config
目录中的现有副本。此外,将备份的 compose 文件中的所有 Gitlab 设置复制到较新容器上的文件中。重启 Gitlab 容器。我们不能直接使用
docker compose restart
命令,因为它不会选择对我们需要的 compose 文件所做的任何更改。$ docker compose down --remove-orphans $ docker compose up -d
检查 Gitlab。
$ docker exec -it <name of container> gitlab-rake gitlab:check SANITIZE=true
第 12 步 - 升级 Gitlab
升级Gitlab,第一步就是如上一站所示进行备份。
接下来,切换到 Gitlabs Docker compose 目录。
$ cd ~/gitlab-docker
接下来,停止并移除现有容器。不过,您的数据将被保留。
$ docker compose down --remove-orphans
拉取最新版本的 Gitlab docker 镜像。
$ docker compose pull
再次启动容器。
$ docker compose up -d
此过程适用于在 Gitlab 的次要版本之间升级,但是当您升级到主要版本时,您将需要执行额外的步骤并采取预防措施。在执行升级之前,您应该参考 Gitlabs 文档。
结论
我们的教程到此结束,您在其中学习了如何在 Ubuntu 22.04 服务器上使用 Docker 安装 Gitlab。您还创建了第一个项目并从您的 PC 向其提交了一个文件。如果您有任何问题,请在下面的评论中发表。