Linux 上容器化部署 GitLab 的完整实践
一 环境与资源准备
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}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
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_passwordgitlab_rails['gitlab_shell_ssh_port'] = 2222,然后执行 docker exec -it gitlab gitlab-ctl reconfigure 生效。方案二 Docker Compose(更易维护)
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。./data/certs/gitlab.crt 与 gitlab.key,并在 GITLAB_OMNIBUS_CONFIG 中设置 external_url 'https://gitlab.example.com:8443' 与 Nginx SSL 证书路径,然后 reconfigure 生效。三 关键配置与运维要点
external_url 中的端口与 -p 映射一致,并在 gitlab.rb 中设置 gitlab_rails['gitlab_shell_ssh_port'] 为映射后的 SSH 端口,然后执行 gitlab-ctl reconfigure 使配置生效。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 并检查日志。四 CI/CD 与 Runner 容器化
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
docker exec -it gitlab-runner gitlab-runner register,按提示输入 GitLab 实例 URL 与 注册令牌,选择 executor(如 shell/docker)。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
五 常见问题与排查
gitlab.rb 中设置 gitlab_rails['gitlab_shell_ssh_port'] 为相同端口,同时 external_url 与 -p 保持一致。gitlab-ctl reconfigure;必要时 gitlab-ctl restart 使服务重载。docker ps 与 docker logs -f gitlab 排查容器状态与启动日志。BACKUP= 参数一致,恢复前停止相关服务以避免数据一致性问题。