Ubuntu中GitLab容器化部署指南(基于Docker Compose)
在部署前,先更新Ubuntu系统的包索引,确保后续安装的软件包为最新版本:
sudo apt update && sudo apt upgrade -y
Docker是容器化部署的核心工具,需先安装Docker CE(社区版):
# 安装必要依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker CE
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
Docker Compose用于管理多容器应用(如GitLab的配置、日志、数据卷),简化部署流程:
# 下载Docker Compose二进制文件(选择最新稳定版,如1.29.2)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装(显示版本号即为成功)
docker-compose --version
GitLab的数据(配置、日志、存储)需持久化到宿主机,避免容器删除后数据丢失。创建专用目录:
sudo mkdir -p /srv/gitlab/{config,logs,data}
sudo chown -R 1000:1000 /srv/gitlab # GitLab容器内用户UID为1000,需匹配权限
在/srv/gitlab目录下创建docker-compose.yml,定义GitLab服务的配置:
version: '3.8'
services:
gitlab:
image: gitlab/gitlab-ce:latest # 使用社区版最新镜像
container_name: gitlab
restart: always # 容器异常退出时自动重启
hostname: 'gitlab.example.com' # 主机名(需与后续配置的external_url一致)
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com' # 外部访问URL(替换为服务器IP或域名)
gitlab_rails['gitlab_shell_ssh_port'] = 2222 # SSH端口(避免与宿主机SSH冲突)
ports:
- '8080:80' # HTTP端口(宿主机8080映射到容器80)
- '8443:443' # HTTPS端口(可选,若启用SSL需修改)
- '2222:2222' # SSH端口(宿主机2222映射到容器2222)
volumes:
- '/srv/gitlab/config:/etc/gitlab' # 配置文件卷
- '/srv/gitlab/logs:/var/log/gitlab' # 日志文件卷
- '/srv/gitlab/data:/var/opt/gitlab' # 数据文件卷(仓库、数据库等)
shm_size: '256m' # 共享内存大小(解决页面加载慢问题)
在/srv/gitlab目录下执行以下命令,启动GitLab服务:
cd /srv/gitlab
docker-compose up -d
等待片刻,容器启动完成后,可通过docker ps命令查看容器状态(需显示“Up”状态)。
打开浏览器,输入http://<服务器IP或域名>:8080(如http://192.168.1.100:8080),进入GitLab初始化页面。
首次访问时,系统会提示设置root用户的密码(需包含大写字母、小写字母、数字和特殊字符,长度≥8位)。设置完成后,使用root账号登录。
若需通过SSH克隆仓库,需修改SSH配置文件(~/.ssh/config),添加以下内容:
Host gitlab.example.com
HostName <服务器IP或域名>
User git
Port 2222
IdentityFile ~/.ssh/id_rsa # 替换为你的私钥路径
然后测试SSH连接:
ssh -T git@gitlab.example.com
若显示Welcome to GitLab, @root!,则SSH配置成功。
若需使用自定义域名(如gitlab.yourdomain.com),需修改docker-compose.yml中的GITLAB_OMNIBUS_CONFIG部分:
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.yourdomain.com'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
修改后,重启容器使配置生效:
docker-compose down && docker-compose up -d
并确保DNS解析已将域名指向服务器IP。
为提升安全性,建议使用Let’s Encrypt免费SSL证书。可通过Docker Compose扩展配置,或使用Nginx反向代理实现(需额外安装Nginx和Certbot)。
若需使用邮件发送通知(如密码重置、合并请求),需编辑/srv/gitlab/config/gitlab.rb文件,添加SMTP配置(以QQ邮箱为例):
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "your_email@qq.com"
gitlab_rails['smtp_password'] = "your_smtp_authorization_code" # 邮箱SMTP授权码
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
修改后,重启容器:
docker-compose restart
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS(若启用)
sudo ufw allow 2222/tcp # SSH
sudo ufw enable
/srv/gitlab目录(包含配置、日志、数据),可使用tar命令或GitLab内置备份工具:docker exec -t gitlab gitlab-backup create STRATEGY=copy
image: gitlab/gitlab-ce:latest替换为具体版本号(如image: gitlab/gitlab-ce:16.9.0-ce.0)。通过以上步骤,即可在Ubuntu系统中完成GitLab的容器化部署,并通过浏览器访问使用。