GitLab在Ubuntu上的容器化部署指南
容器化部署GitLab(如使用Docker)能显著提升环境一致性、简化运维流程。以下是基于Ubuntu系统的详细步骤及关键说明:
确保Ubuntu系统包为最新版本,避免依赖冲突:
sudo apt update && sudo apt upgrade -y
Docker是容器化部署的核心工具,通过以下命令安装稳定版:
# 安装必要依赖
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搭配Redis、PostgreSQL),通过以下命令安装:
# 下载最新版Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.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 # 社区版(若需企业版,替换为gitlab/gitlab-ee:latest)
container_name: gitlab
restart: always # 容器异常退出时自动重启
hostname: 'gitlab.example.com' # 主机名(若用域名,需替换为真实域名)
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com:5480' # 外部访问URL(需与ports配置一致)
gitlab_rails['gitlab_shell_ssh_port'] = 5022 # SSH端口(避免与宿主机SSH冲突)
ports:
- '5480:80' # HTTP端口(Web界面)
- '5443:443' # HTTPS端口(可选,需配置SSL)
- '5022:22' # SSH端口(可选,替代宿主机22端口)
volumes:
- '/srv/gitlab/config:/etc/gitlab' # 配置文件卷
- '/srv/gitlab/logs:/var/log/gitlab' # 日志文件卷
- '/srv/gitlab/data:/var/opt/gitlab' # 数据文件卷(仓库、数据库等)
shm_size: '256m' # 共享内存(解决大型仓库克隆慢问题)
在docker-compose.yml所在目录执行以下命令,启动GitLab服务:
cd /srv/gitlab
docker-compose up -d
通过docker-compose ps命令查看容器状态,确认gitlab服务为Up状态。
GitLab容器启动后,初始root用户的密码会保存在容器内的/etc/gitlab/initial_root_password文件中。通过以下命令查看:
docker exec -it gitlab cat /etc/gitlab/initial_root_password
密码有效期为24小时,需及时修改。
在浏览器中输入http://<服务器IP>:5480(若用域名,替换为http://gitlab.example.com:5480),使用root账户及上述密码登录。
若需通过域名访问GitLab,需修改docker-compose.yml中的external_url(如external_url 'http://gitlab.example.com:5480'),并确保域名已解析到服务器IP。修改后重新启动容器使配置生效:
docker-compose down && docker-compose up -d
为保障数据传输安全,建议启用HTTPS。可通过Let’s Encrypt获取免费SSL证书,并修改docker-compose.yml中的external_url为https://gitlab.example.com:5443,同时在GITLAB_OMNIBUS_CONFIG中添加SSL配置:
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.example.com:5443'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/privkey.pem"
将Let’s Encrypt证书(fullchain.pem和privkey.pem)复制到宿主机的/srv/gitlab/ssl目录,并挂载到容器内对应路径。
若宿主机22端口已被占用(如宿主机自身SSH服务),需修改GitLab容器的SSH端口(如5022),并在GITLAB_OMNIBUS_CONFIG中设置gitlab_rails['gitlab_shell_ssh_port'] = 5022。修改后,用户需通过ssh -p 5022 git@gitlab.example.com访问GitLab。
通过以下命令查看GitLab容器的实时日志,排查问题:
docker-compose logs -f
docker-compose stopdocker-compose restartGitLab数据已持久化到宿主机的/srv/gitlab目录,定期备份该目录即可(如使用rsync或tar命令)。
当需要升级GitLab版本时,修改docker-compose.yml中的image标签(如gitlab/gitlab-ce:16.0.0-ce.0),然后执行:
docker-compose pull && docker-compose up -d
升级前建议备份数据,避免升级失败导致数据丢失。
通过以上步骤,即可在Ubuntu系统上完成GitLab的容器化部署。容器化部署不仅简化了GitLab的安装流程,还能通过Docker的特性实现快速迁移、扩展和维护。