
本镜像基于Docker构建,用于部署GitLab Community Edition (CE),采用GitLab官方文档中的源码安装方法。支持PostgreSQL和MySQL数据库后端,集成Redis用于键值存储,提供邮件配置、SSL加密、OmniAuth身份验证等功能,适用于企业内部代码托管、版本控制及CI/CD流程。
bashwget -qO- https://get.docker.com/ | sh
拉取镜像
bash# 拉取指定版本 docker pull sameersbn/gitlab:11.6.5 # 拉取最新版本 docker pull sameersbn/gitlab:latest
本地构建
bashdocker build -t sameersbn/gitlab github.com/sameersbn/docker-gitlab
使用docker-compose
下载docker-compose.yml:
bashwget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
生成64位随机密钥(用于加密敏感数据):
bash# 示例:生成GITLAB_SECRETS_DB_KEY_BASE pwgen -Bsv1 64
启动服务:
bashdocker-compose up
手动启动
步骤1:启动PostgreSQL容器
bashdocker run --name gitlab-postgresql -d \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --env 'DB_EXTENSION=pg_trgm' \ --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \ sameersbn/postgresql:10
步骤2:启动Redis容器
bashdocker run --name gitlab-redis -d \ --volume /srv/docker/gitlab/redis:/var/lib/redis \ sameersbn/redis:4.0.9-1
步骤3:启动GitLab容器
bashdocker run --name gitlab -d \ --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \ --publish 10022:22 --publish 10080:80 \ --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \ --env 'GITLAB_SECRETS_DB_KEY_BASE=生成的64位随机字符串' \ --env 'GITLAB_SECRETS_SECRET_KEY_BASE=生成的64位随机字符串' \ --env 'GITLAB_SECRETS_OTP_KEY_BASE=生成的64位随机字符串' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
启动后等待几分钟,访问
http://localhost:10080设置root用户密码。
数据存储
为确保数据持久化,需挂载卷/home/git/data:
bash# 创建存储目录(SELinux用户需设置安全上下文) mkdir -p /srv/docker/gitlab/gitlab sudo chcon -Rt svirt_sandbox_file_t /srv/docker/gitlab/gitlab # 启动容器时挂载卷 docker run --name gitlab -d \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
数据库配置
PostgreSQL(推荐)
外部PostgreSQL服务器
数据库准备:
sqlCREATE ROLE gitlab with LOGIN CREATEDB PASSWORD 'password'; CREATE DATABASE gitlabhq_production; GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production to gitlab; -- GitLab 8.6.0+需加载pg_trgm扩展 \c gitlabhq_production CREATE EXTENSION IF NOT EXISTS pg_trgm;
启动GitLab容器:
bashdocker run --name gitlab -d \ --env 'DB_ADAPTER=postgresql' --env 'DB_HOST=192.168.1.100' \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
链接PostgreSQL容器
使用https://github.com/sameersbn/docker-postgresql%E9%95%9C%E5%83%8F%EF%BC%9A
bash# 启动PostgreSQL容器 docker run --name gitlab-postgresql -d \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --env 'DB_EXTENSION=pg_trgm' \ --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \ sameersbn/postgresql:10 # 链接GitLab容器 docker run --name gitlab -d --link gitlab-postgresql:postgresql \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
MySQL
外部MySQL服务器
数据库准备:
sqlCREATE USER 'gitlab'@'%.%.%.%' IDENTIFIED BY 'password'; CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; GRANT ALL PRIVILEGES ON `gitlabhq_production`.* TO 'gitlab'@'%.%.%.%';
启动GitLab容器:
bashdocker run --name gitlab -d \ --env 'DB_ADAPTER=mysql2' --env 'DB_HOST=192.168.1.100' \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
链接MySQL容器
使用https://github.com/sameersbn/docker-mysql%E9%95%9C%E5%83%8F%EF%BC%9A
bash# 启动MySQL容器 docker run --name gitlab-mysql -d \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --volume /srv/docker/gitlab/mysql:/var/lib/mysql \ sameersbn/mysql:5.7.22-1 # 链接GitLab容器 docker run --name gitlab -d --link gitlab-mysql:mysql \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
Redis配置
外部Redis服务器
bashdocker run --name gitlab -d \ --env 'REDIS_HOST=192.168.1.100' --env 'REDIS_PORT=6379' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
链接Redis容器
使用https://github.com/sameersbn/docker-redis%E9%95%9C%E5%83%8F%EF%BC%9A
bash# 启动Redis容器 docker run --name gitlab-redis -d \ --volume /srv/docker/gitlab/redis:/var/lib/redis \ sameersbn/redis:4.0.9-1 # 链接GitLab容器 docker run --name gitlab -d --link gitlab-redis:redisio \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
邮件配置
SMTP发送邮件(以Gmail为例)
bashdocker run --name gitlab -d \ --env 'SMTP_USER=user@gmail.com' --env 'SMTP_PASS=password' \ --env 'SMTP_DOMAIN=gmail.com' --env 'SMTP_HOST=smtp.gmail.com' \ --env 'SMTP_PORT=587' --env 'SMTP_STARTTLS=true' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
邮件回复功能
bashdocker run --name gitlab -d \ --env 'IMAP_USER=user@gmail.com' --env 'IMAP_PASS=password' \ --env 'IMAP_HOST=imap.gmail.com' --env 'IMAP_PORT=993' \ --env 'IMAP_SSL=true' \ --env 'GITLAB_INCOMING_EMAIL_ADDRESS=user+%{key}@gmail.com' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
SSL配置
生成自签名证书
bash# 生成私钥 openssl genrsa -out gitlab.key 2048 # 生成证书签名请求 openssl req -new -key gitlab.key -out gitlab.csr # 生成证书(有效期10年) openssl x509 -req -days 3650 -in gitlab.csr -signkey gitlab.key -out gitlab.crt # 生成DH参数(加强安全) openssl dhparam -out dhparam.pem 2048
安装证书
将证书文件(gitlab.key、gitlab.crt、dhparam.pem)放入/srv/docker/gitlab/gitlab/certs目录,启动容器时启用HTTPS:
bashdocker run --name gitlab -d \ --publish 10443:443 \ --env 'SSL_SELF_SIGNED=true' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:11.6.5
创建备份
bashdocker exec -it gitlab gitlab-rake gitlab:backup:create
恢复备份
bash# 将备份文件放入/data/backups目录 docker cp 1600000000_2023_10_01_11.6.5_gitlab_backup.tar gitlab:/home/git/data/backups/ # 恢复备份 docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=1600000000_2023_10_01_11.6.5
升级镜像
bash# 停止并备份当前容器 docker stop gitlab && docker rename gitlab gitlab_old # 拉取新版本镜像 docker pull sameersbn/gitlab:11.6.5 # 使用原配置启动新容器 docker run --name gitlab -d [原配置参数] sameersbn/gitlab:11.6.5 # 验证成功后删除旧容器 docker rm gitlab_old
| 环境变量 | 描述 | 默认值 |
|---|---|---|
DB_ADAPTER | 数据库适配器(postgresql/mysql2) | postgresql |
DB_HOST | 数据库主机 | postgresql |
DB_PORT | 数据库端口 | 5432(postgresql)/3306(mysql) |
DB_NAME | 数据库名称 | gitlabhq_production |
DB_USER | 数据库用户 | gitlab |
DB_PASS | 数据库密码 | 空 |
REDIS_HOST | Redis主机 | redisio |
REDIS_PORT | Redis端口 | 6379 |
GITLAB_PORT | HTTP访问端口 | 80 |
GITLAB_SSH_PORT | SSH访问端口 | 22 |
SMTP_HOST | SMTP服务器 | smtp.gmail.com |
SMTP_PORT | SMTP端口 | 587 |
SMTP_USER | SMTP用户名 | 空 |
SMTP_PASS | SMTP密码 | 空 |
SSL_SELF_SIGNED | 是否使用自签名证书 | false |
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务