GitLab CE 在 macOS Docker 下通过 localhost 部署复盘
下面用一步步提纲方式,带你快速回顾从零到可通过 http://localhost
访问的完整流程。
1. 环境准备
-
安装 Docker Desktop for Mac(支持 Intel & Apple Silicon)。
-
在主目录创建持久化目录:
bashmkdir -p ~/gitlab/{config,data,logs}
/etc/gitlab
存配置/var/opt/gitlab
存仓库 & 数据库/var/log/gitlab
存日志
2. 拉取合适镜像
-
Intel (x86_64):
bashdocker pull gitlab/gitlab-ce:latest
-
Apple Silicon (ARM64):
bashdocker pull yrzr/gitlab-ce-arm64v8:latest
3. 启动 Docker 容器
核心:显式
-p HOST:CONTAINER
绑定,且通过环境变量注入external_url
bash
# 如果已跑过旧容器,先停掉并删掉它
docker stop gitlabce && docker rm gitlabce
# 启动新容器
docker run -d \
--name gitlabce \
--hostname gitlab.local \
-p 80:80 \ # 宿主机 80 → 容器 80
-p 443:443 \ # 宿主机 443 → 容器 443
-p 2222:22 \ # 宿主机 2222 → 容器 22(SSH)
-e GITLAB_OMNIBUS_CONFIG="external_url 'http://localhost'" \
-v ~/gitlab/config:/etc/gitlab \
-v ~/gitlab/data:/var/opt/gitlab \
-v ~/gitlab/logs:/var/log/gitlab \
--restart unless-stopped \
gitlab/gitlab-ce:latest
GITLAB_OMNIBUS_CONFIG
:自动写入external_url 'http://localhost'
,首启动即生效--hostname
会影响内部external_url
默认值;也可改成gitlab.local
并修改/etc/hosts
4. 验证端口 & 访问
-
查看端口映射:
bashdocker ps --format "table {{.Names}}\t{{.Ports}}"
应显示
0.0.0.0:80->80/tcp
等映射信息。 -
本机测试:
bashcurl -I http://localhost
预期返回
HTTP/1.1 200 OK
。 -
第一次登录
-
默认用户:
root
-
初始密码:
bashdocker exec gitlabce grep 'Password:' /etc/gitlab/initial_root_password
-
5. 后续可选项
-
修改配置
bashdocker exec -it gitlabce bash vi /etc/gitlab/gitlab.rb # 改 external_url、SSH 端口等 gitlab-ctl reconfigure exit
-
启用 HTTPS
把gitlab.crt
/gitlab.key
放到~/gitlab/config/ssl
,在gitlab.rb
里配置nginx['ssl_certificate']
、nginx['ssl_certificate_key']
,然后重跑reconfigure
。 -
备份与恢复
bash# 备份 docker exec gitlabce gitlab-backup create # 恢复(指定 BACKUP 文件名) docker exec -it gitlabce gitlab-backup restore BACKUP=TIMESTAMP docker exec gitlabce gitlab-ctl reconfigure
6. 常见冲突 & 解决
- 若宿主机 80/443 被占用,删掉旧
-p 80:80
或改成-p 8080:80
,并同步更新external_url 'http://localhost:8080'
。 - 如需自定义域名,编辑
/etc/hosts
,把127.0.0.1 gitlab.local
加入,配置external_url 'http://gitlab.local'
即可。
至此,你已在 macOS 上通过 Docker 成功跑通 GitLab CE 并可用 http://localhost
访问。
接下来可接入 Runner、LDAP、监控等,打造完整 DevOps 流水线!