使用 Docker 部署 GitLab 并持久化數(shù)據(jù)的實例步驟
使用 Docker 部署 GitLab 并持久化數(shù)據(jù)
本文將詳細(xì)介紹如何使用 Docker 部署 GitLab,并將數(shù)據(jù)(如倉庫、配置、日志等)持久化到主機(jī)磁盤。我們還將解決常見的端口沖突問題,并介紹如何從另一臺 GitLab 恢復(fù)數(shù)據(jù)到新的 GitLab 實例。
環(huán)境準(zhǔn)備
- 一臺 Linux 服務(wù)器(本文以 CentOS 為例)。
- 已安裝 Docker 和 Docker Compose。
- 確保服務(wù)器有足夠資源(建議至少 4GB 內(nèi)存和 2 核 CPU)。
步驟 1:創(chuàng)建目錄
在主機(jī)上創(chuàng)建用于存儲 GitLab 數(shù)據(jù)的目錄:
mkdir -p /home/middleware/gitlab/{config,data,logs}
config
:用于存儲 GitLab 配置文件。data
:用于存儲 GitLab 倉庫數(shù)據(jù)。logs
:用于存儲 GitLab 日志。
步驟 2:運(yùn)行 GitLab 容器
使用以下命令啟動 GitLab 容器,并將數(shù)據(jù)目錄映射到主機(jī):
docker run -d \ --hostname 192.168.1.1 \ # 替換為你的域名或 IP --publish 443:443 --publish 80:80 --publish 2222:22 \ # 映射 HTTP、HTTPS 和 SSH 端口 --name gitlab \ --restart always \ --volume /home/middleware/gitlab/config:/etc/gitlab \ # 映射配置文件 --volume /home/middleware/gitlab/logs:/var/log/gitlab \ # 映射日志 --volume /home/middleware/gitlab/data:/var/opt/gitlab \ # 映射數(shù)據(jù) gitlab/gitlab-ce:latest
參數(shù)說明:
--hostname
:設(shè)置 GitLab 的域名或 IP 地址。--publish
:映射端口:80
:HTTP 端口。443
:HTTPS 端口。2222
:SSH 端口(避免與主機(jī) SSH 端口沖突)。
--volume
:將主機(jī)目錄映射到容器內(nèi)目錄,確保數(shù)據(jù)持久化。--restart always
:設(shè)置容器隨 Docker 自動啟動。
步驟 3:修改 GitLab 配置
GitLab 容器啟動后,會自動生成配置文件。我們需要修改配置以使用新的 SSH 端口。
編輯配置文件:
vi /home/middleware/gitlab/config/gitlab.rb
找到以下行并修改(如果不存在,可以手動添加):
gitlab_rails['gitlab_shell_ssh_port'] = 2222
保存并退出。
重新配置 GitLab 以使更改生效:
docker exec -it gitlab gitlab-ctl reconfigure
重啟 GitLab 容器:
docker restart gitlab
步驟 4:訪問 GitLab
- 等待 GitLab 初始化完成(可能需要幾分鐘)。
- 打開瀏覽器,訪問
http://192.168.1.1
。 - 默認(rèn)用戶名:
root
,初始密碼可以通過以下命令獲取:
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
步驟 5:驗證 GitLab SSH 訪問
如果 GitLab 的 SSH 端口已修改為 2222
,克隆 Git 倉庫時需要指定端口。例如:
git clone ssh://git@192.168.1.1:2222/username/repo.git
步驟 6:從另一臺 GitLab 恢復(fù)數(shù)據(jù)
如果你有另一臺 GitLab 的備份數(shù)據(jù),可以將其恢復(fù)到新的 GitLab 實例中。
1. 備份舊 GitLab 數(shù)據(jù)
在舊 GitLab 服務(wù)器上運(yùn)行以下命令創(chuàng)建備份:(如果沒有舊數(shù)據(jù)恢復(fù)跳過當(dāng)前步驟)
docker exec -it <舊GitLab容器名> gitlab-backup create
備份成功
備份文件會存儲在舊 GitLab 容器的 /var/opt/gitlab/backups
目錄中(如果你做了映射管理則備份文件在/home/middleware/gitlab/backups/ 文件夾,復(fù)制出去即可不用使用命令)。將其復(fù)制到本地:
docker cp 指令的作用是 將 Docker 容器內(nèi)部的文件復(fù)制到宿主機(jī)的指定目錄
docker cp <舊GitLab容器名>:/var/opt/gitlab/backups/<備份文件名>.tar /home/middleware/gitlab/backups/
2. 將備份文件復(fù)制到新 GitLab
將備份文件從舊服務(wù)器復(fù)制到新服務(wù)器的 /home/middleware/gitlab/data/backups
目錄:
scp /home/middleware/gitlab/backups/<備份文件名>.tar root@192.168.1.1:/home/middleware/gitlab/data/backups/
3. 恢復(fù)備份
在新 GitLab 服務(wù)器上運(yùn)行以下命令恢復(fù)備份:
停止 GitLab 服務(wù):
docker exec -it gitlab gitlab-ctl stop
恢復(fù)備份:
docker exec -it gitlab gitlab-backup restore BACKUP=<備份文件名>
重新啟動 GitLab 服務(wù):
docker exec -it gitlab gitlab-ctl start
4.檢查恢復(fù)是否成功:
- 訪問 GitLab,確認(rèn)項目和用戶數(shù)據(jù)已恢復(fù)。
- 運(yùn)行以下命令檢查日志:
docker logs -f gitlab
手動恢復(fù)另一臺備份gitlab數(shù)據(jù),先下載到本地電腦,再復(fù)制到目標(biāo)服務(wù)器
我的目標(biāo)服務(wù)器備份文件夾位于 /home/middleware/gitlab/data/backups
,那么我
手動上傳已下載的備份文件到該目錄再執(zhí)行還原備份操作:
5.確認(rèn)備份文件是否存在
- 首先,確保備份文件 1741245298_2025_03_06_14.6.1_gitlab_backup.tar
確實存在于 /home/middleware/gitlab/data/backups
目錄中。
- 你可以通過以下命令檢查:bash ls -l /home/middleware/gitlab/data/backups/1741245298_2025_03_06_14.6.1_gitlab_backup.tar
6.將備份文件復(fù)制到 GitLab 容器的默認(rèn)備份目錄
- GitLab 容器默認(rèn)會從
/var/opt/gitlab/backups
目錄讀取備份文件。你需要將備份文件復(fù)制到容器內(nèi)的這個目錄。 - 使用
docker cp
命令將備份文件復(fù)制到容器中:
docker cp /home/middleware/gitlab/data/backups/1741245298_2025_03_06_14.6.1_gitlab_backup.tar gitlab:/var/opt/gitlab/backups/
確認(rèn)文件已成功復(fù)制:
docker exec -it gitlab ls -l /var/opt/gitlab/backups/
設(shè)置正確的文件權(quán)限
- 確保備份文件在容器內(nèi)的權(quán)限正確,GitLab 需要以
git
用戶的身份訪問該文件。 - 運(yùn)行以下命令修改文件權(quán)限:
docker exec -it gitlab chown git:git /var/opt/gitlab/backups/1741245298_2025_03_06_14.6.1_gitlab_backup.tar docker exec -it gitlab chmod 600 /var/opt/gitlab/backups/1741245298_2025_03_06_14.6.1_gitlab_backup.tar
8.運(yùn)行恢復(fù)命令
現(xiàn)在可以嘗試運(yùn)行恢復(fù)命令:
docker exec -it gitlab gitlab-backup restore BACKUP=1741245298_2025_03_06_14.6.1
注意:BACKUP=
參數(shù)只需要指定備份文件的基本名稱(即 1741245298_2025_03_06_14.6.1
),不需要包含 _gitlab_backup.tar
后綴。
9.如果報錯
如果恢復(fù)過程中報錯,可能是備份文件本身有問題。你可以手動解壓備份文件,檢查其內(nèi)容:
docker exec -it gitlab mkdir -p /tmp/gitlab_backup docker exec -it gitlab tar -xf /var/opt/gitlab/backups/1741245298_2025_03_06_14.6.1_gitlab_backup.tar -C /tmp/gitlab_backup docker exec -it gitlab ls -l /tmp/gitlab_backup
檢查是否存在 backup_information.yml
文件:
docker exec -it gitlab cat /tmp/gitlab_backup/backup_information.yml
如果文件缺失或損壞,說明備份文件可能有問題,需要重新獲取備份。
10.修改 GitLab 備份目錄(可選)
- 如果你希望 GitLab 直接從 /home/middleware/gitlab/data/backups
目錄讀取備份文件,可以通過掛載卷的方式實現(xiàn)。
- 在啟動 GitLab 容器時,將主機(jī)目錄掛載到容器的 /var/opt/gitlab/backups
目錄:
docker run -d \ --name gitlab \ -v /home/middleware/gitlab/data/backups:/var/opt/gitlab/backups \ -v /home/middleware/gitlab/config:/etc/gitlab \ -v /home/middleware/gitlab/logs:/var/log/gitlab \ -v /home/middleware/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
- 這樣,GitLab 會直接從 `/home/middleware/gitlab/data/backups` 目錄讀取備份文件。
總結(jié)
- 將備份文件復(fù)制到 GitLab 容器的默認(rèn)備份目錄
/var/opt/gitlab/backups/
。 - 確保文件權(quán)限正確。
- 運(yùn)行恢復(fù)命令。
- 如果問題仍然存在,檢查備份文件是否完整。
步驟 7:備份與恢復(fù)
備份
GitLab 提供了備份命令,可以備份所有數(shù)據(jù)(包括倉庫、數(shù)據(jù)庫等):
docker exec -it gitlab gitlab-backup create
備份文件會存儲在 /home/middleware/gitlab/data/backups
目錄中。
恢復(fù)
如果需要恢復(fù)備份,可以運(yùn)行以下命令:
docker exec -it gitlab gitlab-backup restore BACKUP=<備份文件名>
步驟 8:升級 GitLab
如果需要升級 GitLab 版本,可以按照以下步驟操作:
停止并刪除當(dāng)前容器:
docker stop gitlab docker rm gitlab
拉取最新版本的 GitLab 鏡像:
docker pull gitlab/gitlab-ce:latest
重新運(yùn)行容器(使用相同的卷映射):
docker run -d \ --hostname 192.168.1.1 \ --publish 443:443 --publish 80:80 --publish 2222:22 \ --name gitlab \ --restart always \ --volume /home/middleware/gitlab/config:/etc/gitlab \ --volume /home/middleware/gitlab/logs:/var/log/gitlab \ --volume /home/middleware/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
常見問題
1. 端口沖突
如果主機(jī)的 22
端口已被占用,可以將 GitLab 的 SSH 端口映射到其他端口(如 2222
),并修改 gitlab.rb
配置文件。
2. 配置文件未生成
如果 /home/middleware/gitlab/config/gitlab.rb
文件未生成,可能是容器初始化失敗??梢試L試手動生成配置文件:
docker exec -it gitlab gitlab-ctl reconfigure
總結(jié)
通過以上步驟,你可以成功使用 Docker 部署 GitLab,并將數(shù)據(jù)持久化到主機(jī)磁盤。同時,我們還介紹了如何從另一臺 GitLab 恢復(fù)數(shù)據(jù)到新的 GitLab 實例。這種方法不僅簡單高效,還能確保數(shù)據(jù)安全。如果你在部署過程中遇到問題,歡迎在評論區(qū)留言討論!
- Docker快速部署gitlab+gitlab-runner實例
- 如何修改Docker部署gitlab的外部訪問地址和端口
- docker?部署?gitlab-ce?16.9.1的詳細(xì)過程
- ubuntu服務(wù)器部署gitlab docker并配置nginx反向代理https訪問的過程解析
- Gitlab-runner+Docker實現(xiàn)自動部署SpringBoot項目
- docker+gitlab+jenkins從零搭建自動化部署
- docker+gitlab+gitlab-runner部署詳解
- 使用Docker快速部署Gitlab的方法
- Docker-compose一鍵部署gitlab中文版的方法步驟
- Docker-compose部署gitlab的方法步驟
相關(guān)文章
Jenkins打包微服務(wù)構(gòu)建Docker鏡像運(yùn)行的實現(xiàn)
本文主要介紹了Jenkins打包微服務(wù)構(gòu)建Docker鏡像運(yùn)行的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09Docker部署Java應(yīng)用程序的實現(xiàn)步驟
本文主要介紹了Docker部署Java應(yīng)用程序的實現(xiàn)步驟,通過將Java應(yīng)用程序打包成一個Docker鏡像,可以實現(xiàn)快速部署、資源隔離和靈活擴(kuò)展,感興趣的可以了解一下2024-03-03Docker 部署 Prometheus的安裝詳細(xì)教程
這篇文章主要介紹了Docker 部署 Prometheus及安裝方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08Docker以掛載方式安裝RocketMQ的實現(xiàn)方式
Docker中安裝和使用RocketMQ有多種方式,本文主要介紹了Docker以掛載方式安裝RocketMQ的實現(xiàn)方式,具有一定的參考價值,感興趣的可以了解一下2024-06-06