gitlab是一個非常方便的程式碼管理工具。直接安裝設定 gitlab 十分麻煩,還容易把環境搞壞。而通過 docker,則可以在一個隔離的環境快速部署 gitlab。通過 docker 執行起來之後,還需要對 gitlab 進行一些設定。雖然是 docker 環境,還是有資料備份和恢復的需求。
1 docker 安裝 gitlab
需要安裝 docker,如何安裝 docker,請參考本網站。
1.1 docker 取得映像(非必要)
一般來說並不需要,如果 docker 執行時發現缺少相關包,會自動拉取。但也可手動操作 gitlab-ce(Community Edition):
docker pull gitlab/gitlab-ce
docker images | grep gitlab
1.2 用 docker 啟動 gitlab
BASEDIR=/data/.docker
docker run \
-d \
-p 444:443 \
-p 8083:80 \
-p 222:22 \
--name gitlab \
--restart always \
-v $BASEDIR/config:/etc/gitlab \
-v $BASEDIR/logs:/var/log/gitlab \
-v $BASEDIR/data:/var/opt/gitlab \
gitlab/gitlab-ce
- 埠對映
444埠對映443埠,gitlab 支援用 https8083埠對映80埠,gitlab 支援 http222埠對映22埠,用於 ssh
- 儲存對映
/etc/gitlab記錄了設定/etc/log/gitlab是 log 檔案/var/opt/gitlab中記錄了進階設定
要等待一段時間(gitlab 啟動速度真是慢呢)。在宿主機上訪問localhost:8083就能進入 gitlab 的設定頁面了。
然而通常宿主機是沒有圖形介面的,而是在另外的機器上通過http://host_ip:8083的方式訪問。此時需要在宿主機(host)上開啟防火牆8083埠。
2 設定 gitlab
2.1 賬戶密碼設定
首先會讓設定 root 賬戶的密碼。root 賬戶 id 是 1。root 賬戶密碼一定要設定,後面再在建立自己賬戶的時候,需要這個賬戶的同意。

設定完成之後退出 root 賬戶,再“註冊”一個賬戶,後面所有操作都在新註冊的賬戶上進行。註冊完成之後,還需再次登陸 root 賬戶,同意自己註冊的那個賬戶。
2.2 git clone 網址設定
git clone時候可以選擇 http 或者 ssh 協定。這些協定預設地址是容器名字,出了容器環境就不能使用了,需要修改為宿主機上地址。另外,在宿主機上的 gitlab 的 ssh 埠被對映為222,也需要設定。有兩種方式可以修改:
宿主機中修改$BASE_DIR/config/gitlab.rb
# 配置http协议所使用的访问地址,如果不加端口号默认为80
external_url 'http://10.10.10.11:8083'
# 这里修改会影响nginx的运行端口,修改完成之后需要修改docker运行的命令
gitlab_rails['gitlab_ssh_host'] = '10.10.10.11'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口
一定要轉發 22 埠到自己設定的 gitlab_shell_ssh_port。刪除原來的容器重新啟動:
docker stop gitlab
docker rm gitlab
BASEDIR=/data/.docker
docker run \
-d \
-p 444:443 \
-p 8083:8083 \
-p 222:22 \
--name gitlab \
--restart always \
-v $BASEDIR/config:/etc/gitlab \
-v $BASEDIR/logs:/var/log/gitlab \
-v $BASEDIR/data:/var/opt/gitlab \
gitlab/gitlab-ce
使用環境變數
在 docker 啟動的命令新增環境變數:
docker stop gitlab
docker rm gitlab
BASEDIR=/data/.docker
IP=host_ip
GITLAB_PORT=8083
docker run \
-d \
-p 444:443 \
-p $GITLAB_PORT:8083 \
-p 222:22 \
--name gitlab \
--restart always \
-v $BASEDIR/config:/etc/gitlab \
-v $BASEDIR/logs:/var/log/gitlab \
-v $BASEDIR/data:/var/opt/gitlab \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://${IP}:${GITLAB_PORT}'; \
gitlab_rails['lfs_enabled'] = true; \
gitlab_rails['gitlab_ssh_host'] = '${IP}'; \
gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_SSH_PORT};"
gitlab/gitlab-ce
再進入網頁,就會發現 ssh 和 http 的地址都變了。
3 gitlab 備份與恢復
3.1 備份 gitlab 到檔案
資料備份很重要,要支援備份,則需要在啟動過程中新增環境變數:
gitlab_rails['manage_backup_path'] = true; \
gitlab_rails['backup_path'] = '${CONTAINER_PATH_FOR_GITLAB_BACKUP}'; \
gitlab_rails['backup_archive_permissions'] = 0644; \
gitlab_rails['backup_keep_time'] = 604800;" \
要進行備份的時候,執行:
docker exec -it gitlab gitlab-rake gitlab:backup:create
然後就會在${CONTAINER_PATH_FOR_GITLAB_BACKUP}這個地方生成備份檔案。
3.2 從檔案恢復 gitlab
還是用 docker:
docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=path_to_backup_file
注意這裡的path_to_backup_file是絕對路徑。在恢復過程中可能有些 warning,可以不用管。
總結
本文介紹了用 docker 執行 gitlab-ce 的方式,包括初次執行以及外部訪問時候路徑的設定。最後介紹了 gitlab 資料的備份以及從備份恢復資料的方式。