记录,基于Rocky Linux 10 部署 gitlab-ce,文章一共分为三步:安装docker、安装gitlab、后续升级操作。
第一步:安装Docker
添加阿里云docker-ce仓库
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
列出当前系统中所有可安装的docker-ce版本,并按照版本号从高到低进行排序,同时显示重复的版本。
dnf list docker-ce --showduplicates | sort -r
安装最新版本 docker-ce
dnf install -y docker-ce
也可以指定版本安装,例如:
dnf install -y docker-ce-3:29.2.1-1.el10
创建目录,存放 docker 的配置文件
mkdir -p /etc/docker
1. Cgroup用于限制进程的资源使用量,如CPU、内存资源2. 设置 Docker 使用 systemd 作为 Cgroup 驱动;3. registry-mirrors 配置:docker 镜像加速器的地址列表。
创建并写入daemon.json文件
vim /etc/docker/daemon.json
{ "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": [ "https://docker.m.daocloud.io" ]}
设置 docker 开机自启
systemctl enable docker
启动 docker
systemctl start docker
查看 docker 状态
systemctl status docker
第二步:安装 gitlab 社区版
下载 gitlab 社区版
docker pull gitlab/gitlab-ce:latest
安装 gitlab
方式 1: 使用 Docker 直接运行 GitLab CE
# hostname 替换为虚拟机 ipdocker run -d \ --name gitlab \ --hostname 192.168.31.116 \ --restart unless-stopped \ -e GITLAB_OMNIBUS_CONFIG=" external_url 'http://192.168.31.116'; gitlab_rails['gitlab_shell_ssh_port'] = 2222; " \ -p 80:80 \ -p 443:443 \ -p 2222:22 \ -v /home/docker/gitlab-ce/data/config:/etc/gitlab \ -v /home/docker/gitlab-ce/data/logs:/var/log/gitlab \ -v /home/docker/gitlab-ce/data/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
建议使用脚本文件,方便后续便捷操作
mkdir -p /home/docker/gitlab-ce
vim start.sh
#!/bin/bash# GitLab CE Docker 启动脚本# 作者:自定义# 功能:一键启动 GitLab CE 容器,包含前置检查和目录初始化# 定义配置参数(可根据需要修改)GITLAB_HOST="192.168.31.116" # GitLab 访问IP/域名CONTAINER_NAME="gitlab" # 容器名称GITLAB_PORT_HTTP=80 # HTTP 端口映射GITLAB_PORT_HTTPS=443 # HTTPS 端口映射GITLAB_PORT_SSH=2222 # SSH 端口映射DATA_DIR="/home/docker/gitlab-ce/data" # 数据持久化目录# 颜色输出函数(可选,提升脚本可读性)red_echo() { echo -e "\033[31m$1\033[0m"; }green_echo() { echo -e "\033[32m$1\033[0m"; }yellow_echo() { echo -e "\033[33m$1\033[0m"; }# 1. 检查是否为 root 用户(避免权限不足)if [ $UID -ne 0 ]; then red_echo "错误:请使用 root 用户或 sudo 运行此脚本!" exit 1fi# 2. 检查 Docker 是否已安装并运行if ! command -v docker &> /dev/null; then red_echo "错误:未安装 Docker,请先安装 Docker 后再运行!" exit 1fiif ! systemctl is-active --quiet docker; then yellow_echo "提示:Docker 服务未运行,正在启动..." systemctl start docker systemctl enable docker if [ $? -ne 0 ]; then red_echo "错误:Docker 启动失败!" exit 1 fifi# 3. 创建数据持久化目录yellow_echo "提示:创建 GitLab 数据目录..."mkdir -p ${DATA_DIR}/{config,logs,data}chmod -R 755 ${DATA_DIR}if [ $? -eq 0 ]; then green_echo "成功:数据目录创建完成 -> ${DATA_DIR}"else red_echo "错误:数据目录创建失败!" exit 1fi# 4. 检查并停止同名容器(避免冲突)if docker ps -a --format "{{.Names}}" | grep -w "${CONTAINER_NAME}" &> /dev/null; then yellow_echo "提示:发现同名容器 ${CONTAINER_NAME},正在停止并删除..." docker stop ${CONTAINER_NAME} &> /dev/null docker rm ${CONTAINER_NAME} &> /dev/null if [ $? -eq 0 ]; then green_echo "成功:旧容器已删除" else red_echo "错误:旧容器删除失败!" exit 1 fifi# 5. 启动 GitLab 容器yellow_echo "提示:开始启动 GitLab CE 容器..."docker run -d \ --name ${CONTAINER_NAME} \ --hostname ${GITLAB_HOST} \ --restart unless-stopped \ -e GITLAB_OMNIBUS_CONFIG=" external_url 'http://${GITLAB_HOST}'; gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_PORT_SSH}; " \ -p ${GITLAB_PORT_HTTP}:80 \ -p ${GITLAB_PORT_HTTPS}:443 \ -p ${GITLAB_PORT_SSH}:22 \ -v ${DATA_DIR}/config:/etc/gitlab \ -v ${DATA_DIR}/logs:/var/log/gitlab \ -v ${DATA_DIR}/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest# 6. 检查启动结果if [ $? -eq 0 ]; then green_echo "=============================================" green_echo "成功:GitLab 容器启动完成!" green_echo "访问地址:http://${GITLAB_HOST}" green_echo "SSH 端口:${GITLAB_PORT_SSH}" green_echo "初始密码查看命令:docker exec -it ${CONTAINER_NAME} cat /etc/gitlab/initial_root_password" green_echo "容器日志查看:docker logs -f ${CONTAINER_NAME}" green_echo "============================================="else red_echo "错误:GitLab 容器启动失败!" exit 1fiexit 0
给start.sh文件赋予权限
chmod -R 777 start.sh
执行脚本启动gitlab
./start.sh
方式 2:使用 Docker Compose 安装
/home/docker/gitlab-ce 目录下创建 gitlab_deploy.yaml 文件,内容如下:
version: '3.6'services: gitlab: image: 'gitlab/gitlab-ce:latest' container_name: 'gitlab' restart: unless-stopped hostname: '192.168.31.116' # hostname 替换为虚拟机 ip environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://192.168.31.116' # 替换为虚拟机 ip gitlab_rails['gitlab_shell_ssh_port'] = 2222 ports: - '80:80' - '443:443' - '2222:22' volumes: - '/home/docker/gitlab-ce/data/config:/etc/gitlab' - '/home/docker/gitlab-ce/data/logs:/var/log/gitlab' - '/home/docker/gitlab-ce/data/data:/var/opt/gitlab'
# 启动 gitlab 服务docker compose -f gitlab_deploy.yaml up -d# 等待几分钟让 gitLab 完全启动(首次启动可能需要较长时间)# 可以通过 docker ps 查看 gitlab 是否完全启动,如下所示,STATUS 为 healthy 后说明成功启动,如果是 starting 说明还在启动中[root@gitlab ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb4364289a9c2 gitlab/gitlab-ce:latest "/assets/init-contai…" 4 minutes ago Up 4 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# 访问 http://192.168.31.116# 用户名 root # 用户密码在 /home/docker/gitlab-ce/data/config/initial_root_password 文件中# 使用命令 cat /home/docker/gitlab-ce/data/config/initial_root_password 查看登录密码# 里面的Password: 后面的值就是 root 默认的登录密码# 登录 gitlab 后,先重置密码
后续升级 GitLab 到最新版
# 1. 拉取最新镜像docker pull gitlab/gitlab-ce:latest# 2. 停止并删除旧容器(数据在宿主机 /home/docker/gitlab-ce/data,不会丢)docker stop gitlabdocker rm gitlab# 3. 用你之前的 start.sh 重新启动(会自动用新镜像)./start.sh