sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
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
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker # 开机自启
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
# 创建数据目录(用于持久化GitLab配置、日志、数据)
sudo mkdir -p /srv/gitlab/{config,logs,data}
sudo chmod -R 755 /srv/gitlab # 确保目录可读写
# 拉取GitLab社区版镜像(最新版)
docker pull gitlab/gitlab-ce:latest
# 启动GitLab容器
docker run -d \
--hostname your_server_ip_or_domain \ # 替换为服务器IP或域名(如192.168.1.100)
--name gitlab \
--restart always \ # 开机自启
--publish 8080:80 \ # Web界面端口(可自定义,如8929)
--publish 8443:443 \ # HTTPS端口(可选)
--publish 2222:22 \ # SSH端口(避免与宿主机SSH冲突)
--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-compose.yml文件:sudo mkdir -p /srv/gitlab-compose
cd /srv/gitlab-compose
sudo vim docker-compose.yml
hostname为服务器IP或域名):version: '3.8'
services:
gitlab:
image: gitlab/gitlab-ce:latest
restart: always
hostname: your_server_ip_or_domain # 如192.168.1.100
ports:
- "8080:80"
- "8443:443"
- "2222:22"
volumes:
- gitlab_config:/etc/gitlab
- gitlab_logs:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
- /etc/localtime:/etc/localtime:ro # 时钟同步
- /etc/timezone:/etc/timezone:ro # 时区同步
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://your_server_ip_or_domain:8080' # 与ports中的HTTP端口一致
gitlab_rails['gitlab_shell_ssh_port'] = 2222 # 与ports中的SSH端口一致
volumes:
gitlab_config:
gitlab_logs:
gitlab_data:
sudo docker-compose up -d
获取root初始密码: 容器启动后,执行以下命令查看临时密码(仅首次登录有效):
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
输出示例:Password: xxxxxxxx(记下此密码)。
访问GitLab Web界面:
http://your_server_ip_or_domain:8080(若使用HTTPS,替换为https://和对应端口);配置SSH访问(可选):
git@your_server_ip_or_domain:project_name.git);ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
cat ~/.ssh/id_rsa.pub # 复制公钥内容
docker exec -it gitlab bash
gitlab-rails console
user = User.find_by(username: 'root')
user.add_ssh_key("复制的公钥内容")
exit
ufw allow 8080/tcp);docker ps),若未运行,查看日志排查错误(docker logs gitlab)。gitlab_rails['gitlab_shell_ssh_port']与ports中的SSH端口一致;sudo netstat -tulnp | grep 22),若冲突,修改ports中的SSH端口。docker logs -f gitlab),常见原因包括磁盘空间不足、内存不足(需扩容宿主机资源)。volumes挂载的/srv/gitlab目录需长期保留,避免容器删除后数据丢失;docker-compose.yml中添加devices: ['/dev/sda'](需根据实际情况调整);/srv/gitlab目录(包含配置、日志、数据),可使用tar命令压缩归档。通过以上步骤,即可在Ubuntu上使用Docker快速部署GitLab,并实现数据持久化与便捷管理。