如何使用 Docker 部署 GitLab

简介: 如何使用 Docker 部署 GitLab

你否曾经想托管自己的GitLab存储库以确保代码永远不会落入坏人之手?尽管在第三方云主机上托管你的存储库有很多优势(例如可用性和可靠性),但要完全控制你的存储库,这样任何人都可以在未经你批准的情况下访问它。


在Docker的帮助下,您可以做到这一点。我将向你展示它是如何完成的。它并不过分复杂,但需要许多步骤。所以,事不宜迟,让我们开始工作吧。要完成此任务,需要一个正在运行的 Ubuntu Server  实例和一个具有sudo权限的用户。Ubuntu 实例可以托管在你的服务器上,甚至可以托管在你的云托管帐户中(尽管通过第三方托管它会违背自托管存储库的目的)。


640.png


安装依赖项


我们要做的第一件事是安装所需的依赖项。登录到你的 Ubuntu 实例并使用以下命令安装所需的软件:


sudo apt install ca-certificates curl openssh-server apt-transport-https gnupg lsb-release -y


接下来,我们需要安装 Docker 社区版。为此,我们将添加官方 Docker GPG 密钥:


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


接下来,添加 Docker 存储库:


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


使用以下命令更新 apt:


sudo apt-get update


最后,安装 Docker 社区版:


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


使用以下命令将您的用户添加到 docker 组:


sudo usermod -aG docker $USER


注销并重新登录以使更改生效。到目前为止,一切都很好。让我们继续。


更改默认 SSH 端口


因为 GitLab 使用默认的 SSH 端口,所以必须更改默认的 SSH 服务器端口。否则,就会发生冲突。使用以下命令打开 SSH 配置文件:


sudo vi /etc/ssh/sshd_config


在该文件中,查找以下行:


#prot 22


将该行更改为:


prot 2222


启用端口 22 以通过防火墙:


sudo ufw allow 2022


确保使用以下命令测试与另一个登录名的 SSH 连接:


ssh USER@SERVER -p 2022


其中 USER 是您的远程用户名,SERVER 是托管服务器的 IP 地址或域。


创建一个新的 Docker 卷


我们现在已经准备好进入 Docker 方面了。我们要做的第一件事是创建一个目录。首先,创建一个目录来存放文件:


sudo mkdir -p /srv/gitlab


接下来,创建一个目录来存放我们的 Docker compose 文件:


mkdir ~/docker-gitlab


使用以下命令切换到该目录:


cd ~/docker-gitlab


创建一个文件来存放环境变量:


vi .env


将以下内容粘贴到该新文件中:


GITLAB_HOME=/srv/gitlab


保存并关闭文件。


创建 Docker 撰写文件


创建一个新的文件:


vi compose.yml


在该文件中,粘贴以下内容(确保以粗体更改任何内容以适应您的环境/需要):


version:'3.6'
services:
web:
image:'gitlab/gitlab-ee:latest'
container_name:'gitlab-server'
restart:always
hostname:'<b>gitlab.example.com</b>'
environment:
GITLAB_OMNIBUS_CONFIG:|
external_url'https://<b>DOMAIN_OR_IP</b>'
gitlab_rails['smtp_enable']=true
gitlab_rails['smtp_address']="<b>SMTP_SERVER</b>"
gitlab_rails['smtp_user_name']="<b>SMTP_SERVER_USERNAME</b>"
gitlab_rails['smtp_password']="<b>SMTP_SERVER_PASSWORD</b>"
gitlab_rails['smtp_domain']="<b>DOMAIN</b>"
gitlab_rails['smtp_enable_starttls_auto']=true
gitlab_rails['smtp_port']=587
gitlab_rails['smtp_authentication']="login"
gitlab_rails['gitlab_email_from']='<b>FROM_EMAIL</b>'
gitlab_rails['gitlab_email_reply_to']='<b>REPLY_EMAIL</b>'
# 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'


保存并关闭文件。


部署容器


我们现在已准备好部署容器。为此,请发出以下命令:


docker-compose up -d


容器的部署需要一些时间(10 到 30 分钟之间的任何时间,取决于你的网络连接速度),此刻可以处理一些其他任务。部署完成后,需要使用以下命令访问自动生成的 root 密码:


sudo cat /srv/gitlab/config/initial_root_password


应该会看到一长串随机字符,它们将用作你的 root 密码登录。


访问 GitLab


打开 Web 浏览器并将其指向 http://SERVER(其中 SERVER 是服务器的 IP 地址或者域名)。GitLab 登录页面(参见图 1),将在其中键入用户名 root 并粘贴您在_intial_root_password_文件中找到的密码,如上所示。如果站点没有立即出现,请给它一些时间让容器完成部署。


640.png


图 1: GitLab 登录屏幕意味着成功!


另一种部署方法


如果你发现上述部署有问题,这里有另一种方法。使用以下命令设置卷位置:


export GITLAB_HOME=/srv/gitlab


使用此部署容器(确保更改任何粗体内容以满足您的需要):


docker run--detach\
  --hostname<b>HOSTNAME</b>\
  --publish443:443--publish80:80--publish22:22\
  --name gitlab\
  --restart always\
  --volume$GITLAB_HOME/config:/etc/gitlab\
  --volume$GITLAB_HOME/logs:/var/log/gitlab\
  --volume$GITLAB_HOME/data:/var/opt/gitlab\
  --shm-size256m\
  gitlab/gitlab-ee:latest


上述方法之一应该可以部署 GitLab。如果你仍然有问题,你可以将向外的 SSH 端口更改为类似 10022 的端口,这样该选项将类似于_—publish 10022:22。_ 最后,如果在部署 GitLab 时仍然遇到问题,这里有另一个选择:


docker run -d -p 22:22 -p 80:80 -p 443:443 \
--name gitlab --hostname gitlab.example.com \
--restart unless-stopped --shm-size 256m \
-v gitlab_config:/etc/gitlab -v gitlab_logs:/var/log/gitlab \
-v gitlab_data:/var/opt/gitlab gitlab/gitlab-ce:14.7.0-ce.0


现在拥有一个可以在公司内部使用的 GitLab 存储库。


相关文章
|
7月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1069 108
|
5月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
2214 4
|
7月前
|
运维 Devops 持续交付
揭秘 Docker 自动部署神器 Websoft9:热门开源软件一键部署
在企业IT建设中,软件部署常面临效率低、易出错等问题。通过Docker与自动化工具,可实现高效、标准化和可追溯的部署流程,提升企业应用交付效率,降低运维门槛,助力中小企业实现自动化部署。
467 5
揭秘 Docker 自动部署神器 Websoft9:热门开源软件一键部署
|
6月前
|
JavaScript 算法 前端开发
【Docker项目实战】使用Docker部署paopao-ce微社区
【Docker项目实战】使用Docker部署paopao-ce微社区
544 84
【Docker项目实战】使用Docker部署paopao-ce微社区
|
7月前
|
运维 Cloud Native 开发者
Docker:现代化应用开发与部署的神器
Docker:现代化应用开发与部署的神器
284 101
|
7月前
|
设计模式 Linux 开发工具
Docker部署会吗?
本段内容主要介绍了Docker常用命令、Linux基础指令及日志查看方法,还涉及SpringMVC的执行流程、设计模式与注解,适合用于面试中技术能力的展示。
180 0
|
5月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
260 5
|
6月前
|
存储 Docker Python
docker 部署 sftp
本文介绍SFTP服务的部署与配置,包括users.conf用户配置规则、Docker容器运行命令及上传目录权限说明,重点解析atmoz/sftp镜像的chroot机制与子目录映射,确保用户登录后正确访问/upload目录,并提供Python脚本实现文件上传示例。
545 12
docker 部署 sftp
|
6月前
|
运维 Linux 数据库
基于 Docker 部署 n8n 指南,新手一看就会
本教程详解如何通过 Docker 快速部署开源自动化工具 n8n,适合新手快速上手。内容涵盖官方部署步骤、常见难点及第三方一键部署方案,助你高效搭建自动化工作流平台。
1995 6