GitLab在Linux上的容器化应用实践
导读:Linux 上容器化部署 GitLab 的完整实践 一 环境与资源准备 操作系统与软件:建议使用 Ubuntu 20.04+/CentOS 7+,安装 Docker 20.10+ 与 Docker Compose 2.0+。可用官方脚本快...
Linux 上容器化部署 GitLab 的完整实践
一 环境与资源准备
- 操作系统与软件:建议使用 Ubuntu 20.04+/CentOS 7+,安装 Docker 20.10+ 与 Docker Compose 2.0+。可用官方脚本快速安装 Docker:
curl -fsSL https://get.docker.com -o get-docker.sh & & sudo sh get-docker.sh,并将当前用户加入 docker 组:sudo usermod -aG docker $USER。资源方面建议至少 2 核 CPU、4GB 内存、20GB 磁盘,生产环境可适当提升。开放防火墙端口 80/443/22(或自定义映射端口)。
二 快速部署方案
-
方案一 Docker Run(适合快速试用)
- 创建持久化目录:
mkdir -p /srv/gitlab/{ config,data,logs} - 启动容器(示例将 SSH 映射到 2222 以避免与宿主机 SSH 冲突):
docker run -d \ --hostname 192.168.1.10 \ --publish 443:443 --publish 80:80 --publish 2222:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest - 首次访问:浏览器打开 http://服务器IP,设置 root 管理员密码。
- 查看初始 root 密码:
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password - 如自定义 SSH 端口,需同步配置:
gitlab_rails['gitlab_shell_ssh_port'] = 2222,然后执行docker exec -it gitlab gitlab-ctl reconfigure生效。
- 创建持久化目录:
-
方案二 Docker Compose(更易维护)
- 示例 docker-compose.yml(HTTP 8080、HTTPS 8443、SSH 2222):
version: "3.6" services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always hostname: gitlab.example.com environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab.example.com:8080' gitlab_rails['gitlab_shell_ssh_port'] = 2222 ports: - "8080:80" - "8443:443" - "2222:22" volumes: - ./config:/etc/gitlab - ./logs:/var/log/gitlab - ./data:/var/opt/gitlab - 启动:
docker-compose up -d,查看日志:docker-compose logs -f gitlab。 - 如需 HTTPS,放置证书至
./data/certs/gitlab.crt与gitlab.key,并在GITLAB_OMNIBUS_CONFIG中设置external_url 'https://gitlab.example.com:8443'与 Nginx SSL 证书路径,然后reconfigure生效。
- 示例 docker-compose.yml(HTTP 8080、HTTPS 8443、SSH 2222):
三 关键配置与运维要点
- 持久化与目录映射:将宿主机的 /srv/gitlab/{ config,data,logs} 分别映射到容器内 /etc/gitlab、/var/opt/gitlab、/var/log/gitlab,确保配置、仓库与日志不随容器销毁而丢失。
- 端口与 external_url 一致性:当自定义 HTTP/SSH 端口时,务必保证
external_url中的端口与-p映射一致,并在gitlab.rb中设置gitlab_rails['gitlab_shell_ssh_port']为映射后的 SSH 端口,然后执行gitlab-ctl reconfigure使配置生效。 - 首次登录与初始密码:默认管理员为 root,初始密码可通过容器文件 /etc/gitlab/initial_root_password 获取(首次设置后建议妥善保管)。
- 备份与恢复:
- 备份:
docker exec -it gitlab gitlab-backup create(备份文件位于 /var/opt/gitlab/backups,若已挂载则位于宿主机映射目录)。 - 恢复:先
docker exec -it gitlab gitlab-ctl stop,再执行docker exec -it gitlab gitlab-backup restore BACKUP=备份文件名前缀,随后gitlab-ctl start并检查日志。
- 备份:
- 升级策略:采用“停容器—拉新镜像—按原参数重建容器”的方式升级,避免直接覆盖运行中的实例;生产环境建议固定镜像版本号而非使用 latest。
四 CI/CD 与 Runner 容器化
- 部署 Runner:
docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ gitlab/gitlab-runner:latest - 注册 Runner:进入容器执行
docker exec -it gitlab-runner gitlab-runner register,按提示输入 GitLab 实例 URL 与 注册令牌,选择 executor(如 shell/docker)。 - 示例 .gitlab-ci.yml(构建并运行应用):
stages: - build - deploy variables: DOCKER_IMAGE: myapp:latest build: stage: build script: - docker build -t $DOCKER_IMAGE . - docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY deploy: stage: deploy script: - docker pull $DOCKER_IMAGE - docker run -d --name myapp -p 80:80 $DOCKER_IMAGE - 在项目中配置 CI_REGISTRY、CI_REGISTRY_USER、CI_JOB_TOKEN 等变量后,推送代码即可触发流水线。
五 常见问题与排查
- 端口冲突:若宿主机 22 已被占用,将容器 22 映射到 2222/10022 等自定义端口,并在
gitlab.rb中设置gitlab_rails['gitlab_shell_ssh_port']为相同端口,同时external_url与-p保持一致。 - 配置未生效:修改 /etc/gitlab/gitlab.rb 后必须执行
gitlab-ctl reconfigure;必要时gitlab-ctl restart使服务重载。 - 无法访问:核对云防火墙/本机防火墙与云安全组已放行 80/443/22(或自定义端口);使用
docker ps与docker logs -f gitlab排查容器状态与启动日志。 - 备份恢复失败:确认备份文件位于容器 /var/opt/gitlab/backups 或正确挂载目录,文件名前缀与
BACKUP=参数一致,恢复前停止相关服务以避免数据一致性问题。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: GitLab在Linux上的容器化应用实践
本文地址: https://pptw.com/jishu/789099.html
