如何在 Ubuntu 18.04 LTS 上使用 Docker 安装 Gitlab 服务器
本教程适用于这些操作系统版本
- Ubuntu 20.04(Focal Fossa)
- Ubuntu 18.04(仿生海狸)
在此页
- 先决条件
- 第 1 步 - 安装依赖项
- 第 2 步 - 更改您的系统 SSH 端口
- 第 3 步 - 配置防火墙
- 第 4 步 - 安装 Docker
- 第 5 步 - 安装 Docker Compose
- 第 6 步 - 安装 Gitlab
- 第 7 步 - 运行 Gitlab
- 第 8 步 - 配置 Gitlab
- 配置 SMTP
- 配置 Gitlab 配置文件
- 更改用户名
- 限制公开注册
- 添加 SSH 密钥
Gitlab CE 或社区版是用于托管 Git 存储库的开源应用程序。自托管 Git 存储库可让您完全控制数据,同时为您和您的团队成员提供易于使用的界面。
在本指南中,我们将介绍如何使用 Gitlabs 免费产品(社区版)安装 Git 存储库。如果您想要合并批准、路线图、投资组合管理、灾难恢复、容器扫描等高级功能,那么您可以选择升级到企业版。
先决条件
- 具有非根 sudo 用户的基于 Ubuntu 18.04 的服务器。
- 根据 Gitlab CE 的指定硬件要求,您需要一个至少具有 2 个 CPU 内核和 8GB RAM 的 VPS,它将支持 100 个用户。即使您可以用交换空间代替 RAM,也不建议这样做,因为应用程序运行速度会变慢。
第 1 步 - 安装依赖项
在我们安装 Gitlab 之前,我们需要确保我们的服务器具有 Gitlab 正常运行所需的某些软件。运行以下命令来安装依赖项。
$ sudo apt update $ sudo apt install ca-certificates curl openssh-server ufw apt-transport-https -y
上面的某些软件可能已为您预装。
第 2 步 - 更改您的系统 SSH 端口
Gitlab 将使用端口 22 通过 SSH 推送存储库。您的服务器 SSH 也在其上运行,这将产生冲突。有两种方法可以解决这个问题。您可以更改用于连接到系统的 SSH 端口,也可以更改 Gitlab 将用于 SSH 的端口。在本教程中,我们将更改服务器本身的 SSH 端口。
为此,我们需要编辑 /etc/ssh/sshd_config 文件。在 nano 文本编辑器中打开文件。
$ sudo nano /etc/ssh/sshd_config
找到下面这一行,把22改成6622,去掉前面的#。您可以选择任何您想要的端口。
# Port 22
按 Ctrl + X 关闭文件,然后按 Y 保存更改。
重新启动 SSH 服务。
$ sudo systemctl restart sshd
关闭您当前的 SSH 会话并使用端口 6622 创建一个新会话并再次连接到您的服务器。
$ ssh -p 6622
第 3 步 - 配置防火墙
在我们之前的步骤中,我们安装了 ufw(简单防火墙)。在继续安装 Gitlab 之前,我们需要对其进行配置。
启用 SSH 和我们刚刚创建的端口,这样我们就不会被锁定。
$ sudo ufw allow OpenSSH $ sudo ufw allow 6622
启用 ufw 防火墙。
$ sudo ufw enable
我们还需要开启 http 和 https 才能让 Gitlab 运行。
$ sudo ufw allow http $ sudo ufw allow https
检查防火墙的状态。
$ sudo ufw status
您应该会看到如下所示的输出。
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 6622 ALLOW Anywhere 80/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 6622 (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6)
第 4 步 - 安装 Docker
将 Dockers GPG 密钥添加到您的系统。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
验证下载密钥的指纹。
$ sudo apt-key fingerprint 0EBFCD88
您应该会看到如下所示的输出。
pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <> sub rsa4096 2017-02-22 [S]
添加 Docker 存储库。
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
更新您的包数据库。
$ sudo apt update
安装 Docker-CE。 CE 是 Docker 的社区版。
$ sudo apt install docker-ce -y
现在应该安装 Docker。检查它是否正在运行。
$ sudo systemctl status docker
输出应类似于以下内容。
? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-10-11 21:10:31 UTC; 32s ago Docs: https://docs.docker.com Main PID: 19128 (dockerd) Tasks: 12 CGroup: /system.slice/docker.service ??19128 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
按 q 退出。
将您的受限 Linux 用户帐户添加到 docker 组,这样您就可以在没有 sudo 的情况下运行 docker。
sudo usermod -aG docker $USER
$USER 变量将选择当前登录的用户并将其添加到 docker 组。如果您当前未使用该用户登录,请将 $USER 替换为实际用户名。
切换到我们刚刚添加的用户。即使您已经登录,您仍然需要再次切换到它以重新加载权限。
$ su - ${USER}
通过运行内置的“Hello World”程序检查一切是否正常运行。
$ docker run hello-world
您应该看到以下输出,这将告诉 Docker 已安装并正常工作。
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly.
第 5 步 - 安装 Docker Compose
可以跳过此步骤并继续,但安装 Docker Compose 将使运行 Gitlab 变得更加容易,特别是如果您想在多个服务器上执行此操作。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
在编写本教程时,1.24.1 是 Docker Compose 当前的稳定版本。您可以从他们的 Github 页面检查最新的发布版本。
将可执行权限应用于 docker compose 二进制文件。
$ sudo chmod +x /usr/local/bin/docker-compose
将命令完成添加到 Docker Compose。
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
验证您的安装是否成功。
$ docker-compose --version
它将打印出以下输出。
docker-compose version 1.24.1, build 4667896b
第 6 步 - 安装 Gitlab
从 Dockerhub 下载 Gitlabs Docker 镜像。此映像包含运行 Docker 所需的一切 - nginx、PostgreSQL、Redis 等。运行以下命令下载映像。
$ docker pull gitlab/gitlab-ee:latest
尽管本教程是关于安装社区版的,但我们将获取 Gitlab 的企业版映像。这是因为企业版的行为与社区版完全一样,除非您通过输入许可证升级到它。将社区版安装升级到企业版会带来更多的复杂性。
下载完整的图像需要一些时间。作业完成后,您可以运行以下命令来检查当前系统上的所有图像。
$ docker images
输出应类似于以下内容。
REPOSITORY TAG IMAGE ID CREATED SIZE gitlab/gitlab-ee latest 4bacb2356d28 4 days ago 1.87GB hello-world latest fce289e99eb9 9 months ago 1.84kB
第 7 步 - 运行 Gitlab
此时,我们可以通过在单个命令中提供所有选项来直接运行 Gitlab 容器,但这意味着每次需要运行容器时,都需要提供这些变量。 Docker Compose 使这个过程更容易,因为它允许您将配置保存到一个 .yml 文件中,该文件随后将用于运行和启动容器。
创建一个 docker-compose.yml。
$ nano docker-compose.yml
粘贴以下代码。
web: image: 'gitlab/gitlab-ee:latest' container_name: 'gitlab-howtoforge-tutorial' 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'] = "smtp.gmail.com" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "" gitlab_rails['smtp_password'] = "app-password" gitlab_rails['smtp_domain'] = "smtp.gmail.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false gitlab_rails['smtp_openssl_verify_mode'] = 'peer' # Add any other gitlab.rb configuration here, each on its own line ports: - '80:80' - '443:443' - '22:22' - '587:587' volumes: - '/srv/gitlab/config:/etc/gitlab' - '/srv/gitlab/logs:/var/log/gitlab' - '/srv/gitlab/data:/var/opt/gitlab'
让我们看看上面每个选项的含义。
- image是指Gitlab的Docker镜像在Dockerhub上的位置。
- container_name 允许您将标签应用于 docker 容器,以便在 Docker 网络中引用容器时使用。
- hostname 定义容器内部主机名,或者在我们的例子中,是安装 Gitlab 的 URL。
- restart 指定容器的重启策略。我们已经将它设置为 always,这意味着容器如果退出,将自动重新启动。
- environment 提供变量 GITLAB_OMNIBUS_CONFIG,它允许您输入任何 Gitlab 配置设置。在这种情况下,我们提供了 Gitlab 应该使用的外部 URL。
- volume 定义安装在服务器上的目录以存储持久数据。这三个卷/目录存储应用程序数据、日志文件和配置文件。分号左边的值是服务器上的本地目录,右边的值是容器内部的目录。
- publish 告诉容器向主机发布端口或一系列端口。由于 Gitlab 需要端口 22(SSH)、80(HTTP)、443(HTTPS) 和 587(SMPT - MSA),我们在这里指定了它们。如果您希望 Gitlab 在您的服务器上使用非标准端口(可能是因为它不可用),您将首先提供主机端口,然后再提供容器端口。例如,由于您的服务器已经在使用 SSH(22) 端口,您可以告诉 Gitlab 通过不同的端口使用 SSH,比如 3333。然后您可以将上述文件中的 22:22 更改为 3333:22。您还需要在上面的 GITLAB_OMNIBUS_CONFIG 下添加行 gitlab_rails[gitlab_shell_ssh_port]=3333。
- external_url 指的是您的 Gitlab 将安装到的域。我们选择了 https,它将自动为我们安装 Lets Encrypt SSL 证书。
- 我们还添加了额外的配置来配置 Gitlab 使用 Gmail 发送邮件。您可以使用任何第 3 方 SMTP 邮件服务。 Gitlab 文档维护了有关如何使用它配置各种 SMTP 服务的详细指南。
确保您与 docker-compose.yml 位于同一目录中。运行以下命令启动 Gitlab。
$ docker-compose up -d
你会看到类似下面的内容。
Creating gitlab-howtoforge-tutorial ... done
还需要几分钟才能通过浏览器访问Gitlab。您可以通过以下命令了解有关启动过程的更多信息。
$ docker logs -f gitlab-howtoforge-tutorial
要退出日志监控进程,请按 Ctrl + C。
在浏览器中加载 Gitlab 站点。如果您在启动容器后不久就尝试加载它,您将收到 502 错误。如果发生这种情况,请再等几分钟,然后重试。
如果一切正常,那么您将在浏览器中看到以下页面。
第 8 步 - 配置 Gitlab
为 Gitlabs 管理员密码提供密码。接下来您将被带到登录屏幕。使用root作为您刚刚选择登录的用户名和密码。
配置 SMTP
在我们之前,我们需要启用 SMTP 设置
配置 Gitlab 配置文件
单击右上角的用户图标以显示下拉菜单并选择设置。
您将被带到您的个人资料设置页面。在此处添加您的姓名和电子邮件。您需要确认您的电子邮件地址才能更新。如果需要,您还可以在此处添加更多关于您自己的信息。
完成后单击更新配置文件设置。
更改用户名
接下来,我们需要将我们的用户名从 root 更改为其他用户名,因为 root 是一个很常见的可猜测用户名。单击左侧边栏中的帐户。
将用户更改为您想要保留的任何用户名。单击更新用户名以完成。您还应该在此处启用双因素身份验证以提高安全性。
限制公开注册
默认情况下,Gitlab 安装允许任何人注册。如果你不想要它,你应该禁用它。单击顶部栏中的扳手图标以访问管理区域。
要调整设置,请单击左侧边栏中的设置。
在这里,向下滚动到注册限制,然后单击展开按钮。取消选中启用注册框,完成后单击保存更改。
您仍然可以通过管理界面添加新用户。
添加 SSH 密钥
最后一步是添加我们的 SSH 密钥。如果您有 SSH 密钥,则可以跳过以下命令。如果您没有,可以使用以下命令创建一个。
$ ssh-keygen
此命令对 Mac OS、Linux 和 Windows 上的 Git Bash/WSL 通用。接受默认值并将密码字段留空。
Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/gitlab Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in gitlab. Your public key has been saved in gitlab.pub. The key fingerprint is: SHA256:6dNGAPyd8JAkHAikYOW2PsFjGlzBBpwy4XQ9RQgVwK8 The key's randomart image is: +---[RSA 2048]----+ |+*OB=*O=.. | |B+o+o+oo+ | |oo.+. ...= . | |. + .. .o+ | | o *. S . | | =Eo . o | | . o o o | | . o | | | +----[SHA256]-----+
您可以通过以下命令显示您的公钥
$ cat ~/.ssh/gitlab.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUf64YH7uJimFWVJSy/mgYiLRqBxVB6JJMTxZZ96DwExoINhWVRhQAgMgExBWGpUCpWXhLcNuIM+EfFRtCq+YYyLC+GlHsNdnLgecGgop72p8BEi8UckgCiCSuMrWCMAOFh5NKs2YHpF7bOUjXQRVvGujLuV1UBof7SXQ/za7e3aybNiH3KpA6oWSSmpqnOt8rZT54IjLnVFUSLx7ZxWDVW1bO29mI8NjWwzZGLAtNIkJQEOqVo8nhVkroFHvBTrZnUsmr5oFOWG++LPqED9EUSPTpO8PNnogYT3xsVncBMMAEt0pPE7ATmstQc161SEtqAUa98Qb0RRKqCKcKStOp
返回您的配置文件设置区域并从侧边栏访问 SSH 密钥。
将 SSH 密钥粘贴到提供的框中,然后单击“添加密钥”继续。
现在,您无需提供 Gitlab 凭据即可创建和提交您的存储库。
第 9 步 - 创建您的第一个项目
Gitlab 中的每个存储库都属于一个项目。项目包括存储库、问题跟踪器、合并请求、wiki、持续集成和持续交付 (CI/CD) 管道以及许多其他功能。
要创建您的第一个存储库,请单击创建项目。
您将被带到新项目页面。输入项目名称。您可以将项目 slug 更改为不同的东西。如果您愿意,可以输入项目描述,并根据需要更改项目的可见性。您可以使用 README 文件初始化您的存储库。完成后,单击创建项目。
您将被带到您的存储库页面,其中只有一个空白的 README.md 文件。
现在我们的存储库已经上线,让我们尝试从命令行添加一个变更日志。
在您的计算机上输入以下命令以创建一个 CHANGELOG 文件并将其推送回您的存储库。确保你的电脑上安装了 Git。
克隆存储库。您可以使用 SSH 或 HTTPS 进行克隆。
使用 SSH 克隆。
$ git clone :user/howtoforge-test.git
或使用 HTTPS 克隆。
$ git clone https://gitlab.example.com/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 master
第 10 步 - 管理 Gitlab 容器
要查看所有正在运行的容器,请运行以下命令。
$ docker-ps
要停止 Gitlab 容器,请运行以下命令。
$ docker stop gitlab-howtoforge-tutorial
要再次启动您的容器,请使用以下命令。
$ docker start gitlab-howtoforge-tutorial
如果您想删除容器,可以通过以下命令执行此操作。
$ docker container rm gitlab-howtoforge-tutorial
第 11 步 - 升级 Gitlab
如果你想升级Gitlab到最新版本,你需要停止并删除现有的容器,拉取最新的镜像,然后重新创建容器。
$ docker stop gitlab-howtoforge-tutorial $ docker rm gitlab-howtoforge-tutorial $ docker pull gitlab/gitlab-ee:latest $ docker-compose up -d
在您询问之前,即使您移除容器,您的数据也是安全的。
我们关于使用 Docker 在 Ubuntu 18.04 服务器上设置 Gitlab 的教程到此结束。如果您有任何问题,请在下面的评论中发表。