如何通过容器化在Linux上快速部署GitLab,轻松实现高效协作?
- 内容介绍
- 文章标签
- 相关推荐
在公司内部或团队协作中。往往会遇到以下痛点:
- 手动安装 GitLab 过程繁琐,依赖库冲突导致部署失败。
- 不同机器环境不统一,迁移或扩容时需要重复配置。
- HTTPS 证书申请与续期麻烦,安全性难以保障。怎么说呢,
- 后期维护缺乏统一的脚本支持。耗时且出错率高,
通过容器化技术,将这些痛点一次性击破。只需几条命令即可在 Linux 上快速搭建稳定的 GitLab 环境,实现高效协作?" src="/img01/3521264587,121308797&fm=253&app=138&f=jpg"/>
一、环境准备与目录规划
1.1 安装 Docker 与 Docker Compose
确保你的 Linux 程序已安装最新的 Docker 引擎和 Docker Compose。若未安装,可使用以下命令一键搞定,避免手动下载导致的版本不匹配问题:
# 更新 apt 源
sudo apt update
# 安装必要组件
sudo apt install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo \
"deb \
从https来看。//download.docker.com/linux/ubuntu $ stable" | \
sudo tee /etc/apt/sources.list.d/docker.list> /dev/null
# 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动并开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$-$" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker --version
docker-compose --version
1.2 创建专用目录并设置权限
为避免数据丢失和后期备份困难,建议在宿主机上预先划分好持久化目录:
# 创建目录结构
sudo mkdir -p /srv/gitlab/{config,logs,data}
# 将目录所有者设置为容器内部默认使用者,防止权限冲突
sudo chown -R 1000:1000 /srv/gitlab
痛点对策:一次性完成环境准备后即可在任何相同规格的机器上复制这些目录,实现“即插即用”。
二、使用 Docker Compose 部署 GitLab
2.1 编写 docker-compose.yml
在刚才创建的专用目录下新建 docker-compose.yml 并粘贴下面内容。通过 YAML 定义可以让部署过程可视化,降低人为错误概率。
services:
gitlab的观点是,image: gitlab/gitlab-ce:latest # 使用社区版镜像,可自行替换为 EE 镜像
container_name: gitlab
restart: always # 容器异常退出自动重启,提高可用性
hostname: gitlab.example.com # 替换为实际域名或 IP
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com' # 后续可改为 https 并开启 Let’s Encrypt
# 以下示例开启邮件通知等常用功能,可根据需求自行添加
gitlab_rails = 'Asia/Shanghai'
nginx = '250m'
说到ports,- "80:80" # HTTP 接口
- "443:443" # HTTPS 接口
- "22:22" # SSH 服务。用于 Git over SSH
volumes:
- /srv/gitlab/config:/etc/gitlab # 配置文件持久化
- /srv/gitlab/logs:/var/log/gitlab # 日志持久化
- /srv/gitlab/data:/var/opt/gitlab # 数据持久化
shm_size: '256m' # 防止大文件推送时出现 “No space left on device”
2.2 启动 GitLab 服务
进入该目录后执行下面的命令,即可拉取镜像并启动容器:
# 切换到存放 docker‑compose.yml 的目录,例如:
cd /srv/gitlab
# 拉取镜像并后台运行
sudo docker-compose up -d
# 检查容器状态,确保 all services are up
sudo docker ps --filter name=gitlab
痛点对策:一次指令完成所有组件的拉取、创建和启动,省去手动执行多个 doker run ... 命令导致的遗漏风险。
三、首次登录与初始密码获取
3.1 获取 root 初始密码
GitLab 首次启动会随机生成 root 使用者的密码,保存在容器内部文件中。使用下面命令即可快速读取:
3.2 登录并修改密码
- 打开浏览器访问
- User的观点是,root
- Password:上一步获取到的临时密码。
- 登录后程序会强制要求更改密码,请设置一个符合公司安全策略的新密码。
Pain Point 消除:PaaS 化部署让你不必再手动登录服务器查找日志或编辑配置文件,一条命令即可拿到凭证。
If you want to expose GitLab via a domain name and enable HTTPS automatically with Let’s Encrypt,edit .enviroment.GITLAB_OMNIBUS_CONFIG.
Edit file。n apply changes:
This eliminates “手工申请 SSL” 痛点,让证书自动续期成为默认行为。
-
Cron 时区:
# 在 GITLAB_OMNIBUS_CONFIG 中添加: - LFS 与大文件上传限制: 默认 10 MiB,经常被团队成员误报错。其实,将其提高至 250 MiB 或更高:
mem_limit 和 shm_size 参数提高性能。说到例如,
Pain Point 消除说明:
- AWS/ECS 等云网站迁移时只需拷贝 `/srv/gitlab` 整个挂载卷。即可恢复全部数据,无需额外数据库导入导出步骤。
- LFS 大文件推送不再因默认阈值报错,提高团队开发效率。
- a) 定期备份数据卷:
# 创建每日备份脚本 backup_gitlab.sh
#!/bin/bash
DATE=$
BACKUP_DIR="/backup/gitlab/$DATE"
mkdir -p "$BACKUP_DIR"
docker exec gitlab tar czf - \
/etc/gitmail \
/var/log/gitmail \
/var/opt/gitmail | gzip> "$BACKUP_DIR/gitlab.tar.gz"
# 可配合 crontab 每天凌晨执行:
0 3 * * * root /usr/local/bin/backup_gitlab.sh>/dev/null 2>&1
- b) 无缝升级策略:
-
Labeled version tag:在
doker pull gitlab/...:` 中指定明确版本号,而非 latest;防止意外升级导致兼容性问题。不过, - Suspend service:先停止旧容器。再拉取新镜像并启动,如果新镜像异常,可直接回滚至旧容器,因为数据卷未变更。
- 安全加固建议:
- - 禁止 root SSH 登录宿主机,仅通过 GitLab SSH key 推送代码;
- - 为 API token 设置过期时间;
- - 开启两因素认证;
- - 定期审计管理员账号列表。
Simplify your workflow – 一键部署、一键备份、一键升级。让团队把更多时间投入到代码本身,而不是底层运维细节上。
在公司内部或团队协作中。往往会遇到以下痛点:
- 手动安装 GitLab 过程繁琐,依赖库冲突导致部署失败。
- 不同机器环境不统一,迁移或扩容时需要重复配置。
- HTTPS 证书申请与续期麻烦,安全性难以保障。怎么说呢,
- 后期维护缺乏统一的脚本支持。耗时且出错率高,
通过容器化技术,将这些痛点一次性击破。只需几条命令即可在 Linux 上快速搭建稳定的 GitLab 环境,实现高效协作?" src="/img01/3521264587,121308797&fm=253&app=138&f=jpg"/>
一、环境准备与目录规划
1.1 安装 Docker 与 Docker Compose
确保你的 Linux 程序已安装最新的 Docker 引擎和 Docker Compose。若未安装,可使用以下命令一键搞定,避免手动下载导致的版本不匹配问题:
# 更新 apt 源
sudo apt update
# 安装必要组件
sudo apt install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo \
"deb \
从https来看。//download.docker.com/linux/ubuntu $ stable" | \
sudo tee /etc/apt/sources.list.d/docker.list> /dev/null
# 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动并开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$-$" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker --version
docker-compose --version
1.2 创建专用目录并设置权限
为避免数据丢失和后期备份困难,建议在宿主机上预先划分好持久化目录:
# 创建目录结构
sudo mkdir -p /srv/gitlab/{config,logs,data}
# 将目录所有者设置为容器内部默认使用者,防止权限冲突
sudo chown -R 1000:1000 /srv/gitlab
痛点对策:一次性完成环境准备后即可在任何相同规格的机器上复制这些目录,实现“即插即用”。
二、使用 Docker Compose 部署 GitLab
2.1 编写 docker-compose.yml
在刚才创建的专用目录下新建 docker-compose.yml 并粘贴下面内容。通过 YAML 定义可以让部署过程可视化,降低人为错误概率。
services:
gitlab的观点是,image: gitlab/gitlab-ce:latest # 使用社区版镜像,可自行替换为 EE 镜像
container_name: gitlab
restart: always # 容器异常退出自动重启,提高可用性
hostname: gitlab.example.com # 替换为实际域名或 IP
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com' # 后续可改为 https 并开启 Let’s Encrypt
# 以下示例开启邮件通知等常用功能,可根据需求自行添加
gitlab_rails = 'Asia/Shanghai'
nginx = '250m'
说到ports,- "80:80" # HTTP 接口
- "443:443" # HTTPS 接口
- "22:22" # SSH 服务。用于 Git over SSH
volumes:
- /srv/gitlab/config:/etc/gitlab # 配置文件持久化
- /srv/gitlab/logs:/var/log/gitlab # 日志持久化
- /srv/gitlab/data:/var/opt/gitlab # 数据持久化
shm_size: '256m' # 防止大文件推送时出现 “No space left on device”
2.2 启动 GitLab 服务
进入该目录后执行下面的命令,即可拉取镜像并启动容器:
# 切换到存放 docker‑compose.yml 的目录,例如:
cd /srv/gitlab
# 拉取镜像并后台运行
sudo docker-compose up -d
# 检查容器状态,确保 all services are up
sudo docker ps --filter name=gitlab
痛点对策:一次指令完成所有组件的拉取、创建和启动,省去手动执行多个 doker run ... 命令导致的遗漏风险。
三、首次登录与初始密码获取
3.1 获取 root 初始密码
GitLab 首次启动会随机生成 root 使用者的密码,保存在容器内部文件中。使用下面命令即可快速读取:
3.2 登录并修改密码
- 打开浏览器访问
- User的观点是,root
- Password:上一步获取到的临时密码。
- 登录后程序会强制要求更改密码,请设置一个符合公司安全策略的新密码。
Pain Point 消除:PaaS 化部署让你不必再手动登录服务器查找日志或编辑配置文件,一条命令即可拿到凭证。
If you want to expose GitLab via a domain name and enable HTTPS automatically with Let’s Encrypt,edit .enviroment.GITLAB_OMNIBUS_CONFIG.
Edit file。n apply changes:
This eliminates “手工申请 SSL” 痛点,让证书自动续期成为默认行为。
-
Cron 时区:
# 在 GITLAB_OMNIBUS_CONFIG 中添加: - LFS 与大文件上传限制: 默认 10 MiB,经常被团队成员误报错。其实,将其提高至 250 MiB 或更高:
mem_limit 和 shm_size 参数提高性能。说到例如,
Pain Point 消除说明:
- AWS/ECS 等云网站迁移时只需拷贝 `/srv/gitlab` 整个挂载卷。即可恢复全部数据,无需额外数据库导入导出步骤。
- LFS 大文件推送不再因默认阈值报错,提高团队开发效率。
- a) 定期备份数据卷:
# 创建每日备份脚本 backup_gitlab.sh
#!/bin/bash
DATE=$
BACKUP_DIR="/backup/gitlab/$DATE"
mkdir -p "$BACKUP_DIR"
docker exec gitlab tar czf - \
/etc/gitmail \
/var/log/gitmail \
/var/opt/gitmail | gzip> "$BACKUP_DIR/gitlab.tar.gz"
# 可配合 crontab 每天凌晨执行:
0 3 * * * root /usr/local/bin/backup_gitlab.sh>/dev/null 2>&1
- b) 无缝升级策略:
-
Labeled version tag:在
doker pull gitlab/...:` 中指定明确版本号,而非 latest;防止意外升级导致兼容性问题。不过, - Suspend service:先停止旧容器。再拉取新镜像并启动,如果新镜像异常,可直接回滚至旧容器,因为数据卷未变更。
- 安全加固建议:
- - 禁止 root SSH 登录宿主机,仅通过 GitLab SSH key 推送代码;
- - 为 API token 设置过期时间;
- - 开启两因素认证;
- - 定期审计管理员账号列表。
Simplify your workflow – 一键部署、一键备份、一键升级。让团队把更多时间投入到代码本身,而不是底层运维细节上。

