您的位置:首頁 > 滾動 >

世界微動態丨gitlab遠古版本備份&還原&升級

2023-03-09 22:13:37 來源:騰訊云

背景:

gitlab 8.5.8版本.參照:https://github.com/sameersbn/docker-gitlab.git.太多年了也沒有升級,現在準備備份還原到一個新的服務器然后升級一下。gitlab服務器開始是docker-compose搭建的后面遷移到了kubernetes上(記得當時還是1.14),后面kubernetes 版本持續升級到了1.21。基礎環境如下:

kubectl get nodeskubectl get pods -n gitlab

外鏈圖片轉存中...(img-3i4prQtR-1678333347024)


(資料圖)

外鏈圖片轉存中...(img-8oHZOTIX-1678333347025)

image 鏡像的版本如下:

kubectl get deployment -n gitlab -o yaml|grep image:

外鏈圖片轉存中...(img-rba3rIG7-1678333347025)

升級的過程參考了:升級公司的 GitLab,基本版本是8.5.8 -8.12.13-9.5.10-10.8.7-11.1.4(8的小版本先升級到穩定的8.12,然后到8的最高版本,然后每個大版本進行升級)

注:我這里的gitlab的基礎鏡像并不是sameersbn/gitlab當時有漢化twang2218/gitlab-ce-zh鏡像直接使用了漢化的鏡像,直接使用了twang2218/gitlab-ce-zh的鏡像為例!存儲直接掛載了nfs存儲未使用pv,pvc方式,如下:

image.png

Kubernetes下備份gitlab

進入gitlab容器執行備份命令:

登陸一臺CVM節點,當然了前提是可以exec進入gitlab容器控制臺。也可以其他可視化dashboard進入,我這里直接在k8s-master-01節點操作了VM-4-34-rockylinux為操作還原升級節點,這里也備注強調一下:

kubectl exec -it gitlab-77d7878db-j8kqh bash -n gitlabgitlab-rake gitlab:backup:create
xgLOzzPxvF.png
CobWGEpysj.png

確認一下數據的備份目錄:

cat /etc/gitlab/gitlab.rb |grep back

默認的備份目錄為:/var/opt/gitlab/backups目錄

image.png

進入/var/opt/gitlab/backups得到生成的備份文件如下

image.png

很漫長得到一個20多G的壓縮包!

COPY備份文件到新的存儲路徑

20g的文件copy 或者mv很慢很慢,尤其是在copy騰訊云cfs文件存儲上面的文件。當時還找存儲的小伙伴問過,當時他們推薦了使用rclone傳輸,體驗了是很快!

安裝rclone

安裝rclone,參照:https://cloud.tencent.com/document/product/582/83114(還是在kubernetes 控制節點操作的,當然了其實可以在任何一個局域網內節點安裝,然后掛載10.0.0.24的nfs)

wget https://downloads.rclone.org/v1.53.4/rclone-v1.53.4-linux-amd64.zip --no-check-certificateunzip rclone-v1.53.4-linux-amd64.zipchmod 0755 ./rclone-*/rclonecp ./rclone-*/rclone /usr/bin/rm -rf ./rclone-*

掛載nfs:

源nfs 10.0.0.24目的nfs 10.0.4.134在k8s控制節點掛載。文件夾路徑可以自定義。

sudo mount -t nfs -o vers=4.0,noresvport 10.0.0.24:/ /nfs5sudo mount -t nfs -o vers=4.0,noresvport 10.0.4.134:/ /nfs10

外鏈圖片轉存中...(img-2SyA4mTA-1678333347028)

rclone同步文件到新文件系統

rclone sync同步文件到目的nfs(也可以是其他文件系統)

rclone sync  /nfs5/data/github/gitlab/backups/1678096354_gitlab_backup.tar /nfs10/data/github/gitlab/backups/ -Pvv --transfers 32 --checkers 64 --copy-links --local-no-check-updated

外鏈圖片轉存中...(img-cI75IBYI-1678333347028)

4分鐘左右同步完成還是很快的,畢竟有20多G文件!

注:以上操作在Kubernetes控制節點上操作

還原gitlab到新環境

一臺新的rocky服務器,主機名:VM-4-34-rockylinux

安裝docker docker-compose

安裝docker docker-compose:

yum update -y ###先update一下sudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo yum makecache fastsudo yum -y install docker-cesudo service docker startsudo docker -v
image.png

注:當然了可以配置一下鏡像加速:

image.png

配置鏡像加速后記得systemctl reload-daemon systemctl restart docker.

docker-compose的安裝:

docker_compose_version=v2.16.0 && curl -L "https://github.com/docker/compose/releases/download/${docker_compose_version}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose && ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
image.png

安裝nfs客戶端,將10.0.4.134掛載到本地

安裝一下nfs客戶端(文件準備同步過來,掛載nfs的!)

yum install nfs*sudo mount -t nfs -o vers=4.0,noresvport 10.0.4.134:/ /data

/data目錄下創建github目錄(與原來nfs實例保證目錄結構一致),github目錄下創建gitlab postgresql redis目錄(gitlab目錄已經存在了其實,上面reclone同步的時候會自動創建目錄):

[root@VM-4-34-rockylinux github]# pwd/data/data/github[root@VM-4-34-rockylinux github]# mkdir gitlab postgresql redis

注意自己掛載的目錄路徑以及文件夾目錄名.

docker-compose啟動gitlab相關應用

VM-4-34-rockylinux 主機操作

首先確認文件以及rclone到指定路徑

image.png

登陸github倉庫查找對應版本docker-compose.yml文件放在/data/data/github目錄下:

image.png

注意:我這里拿得https://github.com/sameersbn/docker-gitlab/blob/v8.9.4/docker-compose.yml的yml文件

修改docker-compose.yml如下:

version: "2"services:  redis:    restart: always    image: sameersbn/redis:latest    command:    - --loglevel warning    volumes:    - /data/data/github/redis:/var/lib/redis:Z  postgresql:    restart: always    image: sameersbn/postgresql:9.4-24    volumes:    - /data/data/github/postgresql:/var/lib/postgresql:Z    environment:    - DB_USER=gitlab    - DB_PASS=passw0rd    - DB_NAME=gitlabhq_production    - DB_EXTENSION=pg_trgm  gitlab:    restart: always    image: twang2218/gitlab-ce-zh:8.5.8    depends_on:    - redis    - postgresql    ports:    - "80:80"    - "10022:22"    volumes:    - /data/data/github/gitlab:/var/opt/gitlab:Z    environment:    - DEBUG=false    - DB_ADAPTER=postgresql    - DB_HOST=postgresql    - DB_PORT=5432    - DB_USER=gitlab    - DB_PASS=password    - DB_NAME=gitlabhq_production    - REDIS_HOST=redis    - REDIS_PORT=6379    - TZ=Asia/Shanghai    - GITLAB_TIMEZONE=Beijing    - GITLAB_HTTPS=false    - SSL_SELF_SIGNED=false    - GITLAB_HOST=gitlab.zhangpeng.com    - GITLAB_PORT=80    - GITLAB_SSH_PORT=10022    - GITLAB_RELATIVE_URL_ROOT=    - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string    - GITLAB_ROOT_PASSWORD=    - GITLAB_ROOT_EMAIL=    - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true    - GITLAB_NOTIFY_PUSHER=false    - GITLAB_EMAIL=notifications@example.com    - GITLAB_EMAIL_REPLY_TO=noreply@example.com    - GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com    - GITLAB_BACKUP_SCHEDULE=daily    - GITLAB_BACKUP_TIME=01:00    - SMTP_ENABLED=false    - SMTP_DOMAIN=www.example.com    - SMTP_HOST=smtp.gmail.com    - SMTP_PORT=587    - SMTP_USER=mailer@example.com    - SMTP_PASS=password    - SMTP_STARTTLS=true    - SMTP_AUTHENTICATION=login    - IMAP_ENABLED=false    - IMAP_HOST=imap.gmail.com    - IMAP_PORT=993    - IMAP_USER=mailer@example.com    - IMAP_PASS=password    - IMAP_SSL=true    - IMAP_STARTTLS=false    - OAUTH_ENABLED=false    - OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=    - OAUTH_ALLOW_SSO=    - OAUTH_BLOCK_AUTO_CREATED_USERS=true    - OAUTH_AUTO_LINK_LDAP_USER=false    - OAUTH_AUTO_LINK_SAML_USER=false    - OAUTH_EXTERNAL_PROVIDERS=    - OAUTH_CAS3_LABEL=cas3    - OAUTH_CAS3_SERVER=    - OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false    - OAUTH_CAS3_LOGIN_URL=/cas/login    - OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate    - OAUTH_CAS3_LOGOUT_URL=/cas/logout    - OAUTH_GOOGLE_API_KEY=    - OAUTH_GOOGLE_APP_SECRET=    - OAUTH_GOOGLE_RESTRICT_DOMAIN=    - OAUTH_FACEBOOK_API_KEY=    - OAUTH_FACEBOOK_APP_SECRET=    - OAUTH_TWITTER_API_KEY=    - OAUTH_TWITTER_APP_SECRET=    - OAUTH_GITHUB_API_KEY=    - OAUTH_GITHUB_APP_SECRET=    - OAUTH_GITHUB_URL=    - OAUTH_GITHUB_VERIFY_SSL=    - OAUTH_GITLAB_API_KEY=    - OAUTH_GITLAB_APP_SECRET=    - OAUTH_BITBUCKET_API_KEY=    - OAUTH_BITBUCKET_APP_SECRET=    - OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=    - OAUTH_SAML_IDP_CERT_FINGERPRINT=    - OAUTH_SAML_IDP_SSO_TARGET_URL=    - OAUTH_SAML_ISSUER=    - OAUTH_SAML_LABEL="Our SAML Provider"    - OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient    - OAUTH_SAML_GROUPS_ATTRIBUTE=    - OAUTH_SAML_EXTERNAL_GROUPS=    - OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=    - OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=    - OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=    - OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=    - OAUTH_CROWD_SERVER_URL=    - OAUTH_CROWD_APP_NAME=    - OAUTH_CROWD_APP_PASSWORD=    - OAUTH_AUTH0_CLIENT_ID=    - OAUTH_AUTH0_CLIENT_SECRET=    - OAUTH_AUTH0_DOMAIN=    - OAUTH_AZURE_API_KEY=    - OAUTH_AZURE_API_SECRET=    - OAUTH_AZURE_TENANT_ID=

只修改了幾個鏡像的tag與kubernetes搭建的版本一致(redis版本其實沒有太大要求),還有ssh的對外映射端口(否則會與主機的22端口沖突,數據庫密碼也直接拿來kubernetes集群中的變量了.......):

外鏈圖片轉存中...(img-FZMftzTd-1678333347030)

為什么不用8.5.8的docker-compose.yaml文件呢?

https://github.com/sameersbn/docker-gitlab/blob/8.5.8/docker-compose.yml

image.png

docker-compose的版本 貌似是V1的起不來服務.....這里就默認用v2的yaml了

cd /data/data/githubdocker-compose up -d 
image.png

等待容器running......

restore 還原gitlab倉庫

進入gitlab容器,進入backups目錄,執行restore命令還原倉庫:

docker exec -it github-gitlab-1 bashcd /var/opt/gitlab/backups/gitlab-rake gitlab:backup:restore BACKUP:1678096354

外鏈圖片轉存中...(img-Kr7gCCEi-1678333347031)

外鏈圖片轉存中...(img-zVCADnM9-1678333347031)

注:BACKUP后跟備份文件_前面的時間輟格式.除了1678096354_gitlab_backup.tar壓縮包外其他文件是執行過程中解壓產生的文件。這是在CVM主機掛載目錄看到的!

中間會有

This will rebuild an authorized_keys file.You will lose any data stored in authorized_keys file

yes 同意?等待還原完成

image.png

訪問gitlab倉庫驗證

ipor host綁定域名。或是直接綁定域名訪問gitlab:

image.png

外鏈圖片轉存中...(img-xvsxZjJ6-1678333347032)

注:https的操作可以創建負載均衡綁定端口的方式or參照gitlab 15.8 on rocky 8中證書配置設置一下?不知道古老能不能適用,升級高版本了再去嘗試!驗證了一下倉庫 and 用戶權限都沒有什么問題還原到一段落了,下面嘗試一下升級!

其他問題:

項目搜索這里,翻頁貌似會404......我嘗試了線上的github應用也這樣就忽略了.......

image.png

另外ssh-key 的clone沒有成功,嘗試了http的clone沒有問題,先忽略!

gitlab升級之路

正常的更新流程看網上都是說

升級至當前大版本(major version)的最新小版本(latest minor version)升級至目標大版本(target major version)的首個小版本(first minor version)繼續升級至更新的版本

根據 gitlab upgrading guide 的說法,版本低于 8.11.Z時,先更新到 8.12.0是比較穩妥的方案。第一部先升級到8.12吧!

注:我這里的twang2218/gitlab-ce-zh鏡像很多都與官方的不太一樣,還是繼續使用twang2218/gitlab-ce-zh的鏡像進行升級了!

外鏈圖片轉存中...(img-YyueKN9u-1678333347032)

額外強調一下gitlab與postgresql版本的對應關系:

升級gitlab的同時,postgresql的版本也應該同時進行升級的,詳細的版本對應關系可參考以下鏈接:

https://repository.prace-ri.eu/git/help/administration/package_information/postgresql_versions.md

image.png

準備在升級gitlab9的時候升級一下postgresql 。8版本就使用默認的9.4.24了!

8.5.8 -8.12.13

dockerhub倉庫看了一眼:https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=8.12,8.12的版本tag就順手選擇了8.12.13:

image.png

修改鏡像tag

嘗試修改docker-compose.yml中gitlab image tag 為twang2218/gitlab-ce-zh:8.12.13

外鏈圖片轉存中...(img-wQHkVHIg-1678333347033)

外鏈圖片轉存中...(img-hp83WBI3-1678333347034)

docker-compose downdocker-compose up -d
image.png

secret文件問題

[root@VM-4-34-rockylinux github]# docker psCONTAINER ID   IMAGE                            COMMAND                  CREATED              STATUS              PORTS                                                                                 NAMESdbb3e922065e   twang2218/gitlab-ce-zh:8.12.13   "/assets/wrapper"        About a minute ago   Up 1 second         0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp, 0.0.0.0:10022->22/tcp, :::10022->22/tcp   github-gitlab-1bbce8d9fcc7f   sameersbn/redis:latest           "/sbin/entrypoint.sh…"   About a minute ago   Up About a minute   6379/tcp                                                                              github-redis-1da59ea5a2780   sameersbn/postgresql:9.4-24      "/sbin/entrypoint.sh"    About a minute ago   Up About a minute   5432/tcp                                                                              github-postgresql-1
docker logs -f github-gitlab-1

查看日志出現如下報錯:

image.png

嘗試刪除secret文件:

cd /data/data/github/gitlab/gitlab-rails/etcrm -rf secret
image.png

gitlab 參數env缺失

綜上,刪除secret后,繼續重啟gitlab服務:

docker-compose downdocker-compose up -ddocker logs -f github-gitlab-1
image.png

恩 docker-compose.yml少了兩個參數,參照gitlab on kubernetes的配置:

image.png
- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string    - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-strin

其實kubernetes gitllab中是有的,8.9.4的docker-compose.yml中沒有這兩個參數,添加一下:

image.png

repositories目錄權限

注:截圖很多目錄會是/data/data/github1/gitlab/是第二次操作后截圖,為了熟練練手,圖中路徑忽略!

嘗試繼續重啟gitlab服務:

cd /data/data/github/docker-compose downdocker-compose up -d
image.png

查看gitlab服務日志:

docker logs -f github1-gitlab-1

出現如下錯誤,按照日志內容,基本確定是文件夾權限問題!

外鏈圖片轉存中...(img-Kw1i9zQP-1678333347036)

修改文件夾目錄權限:

chmod 2770 -R gitlab/git-data/repositories
image.png

請注意文件目錄路徑,操作命令文件相對路徑在/data/data/github/目錄

重啟gitlab服務:

docker-compose downdocker-compose up -d

外鏈圖片轉存中...(img-kqO7rIIh-1678333347037)

查看日志,等待服務正常啟動!

docker logs -f github-gitlab-1
image.png

登陸web并驗證gitlab服務

用原有gitlab賬戶登陸此gitlab服務器

外鏈圖片轉存中...(img-JkaZ6qaf-1678333347037)

image.png

點擊管理區域查看gitlab版本,確認版本已經升級到8.12.13版本。

image.png

第一步升級算是基本成功!

注:docker-compose 命令都是在/data/data/github目錄下執行(放置docker-compose.yml文件目錄下)。注意文件目錄的切換!

8.12.13-8.17.7

確認并修改docker-compose.yml文件鏡像tag

dockerhub查看8版本最后鏡像tag為8.17,https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=8.17。這里就選擇升級到8.17.7版本

image.png

修改docker-compose.yml文件中鏡像tag:

image.png
image.png

重啟gitlab服務

docker-compose downdocker-compose up -ddocker logs -f github-gitlab-1
image.png

外鏈圖片轉存中...(img-820woXWy-1678333347038)

web訪問并驗證版本升級成功

用原有gitlab賬戶登陸此gitlab服務器,控制臺查看gitlab 服務器版本已經升級到指定8.17.7版本

外鏈圖片轉存中...(img-bVQcK6dP-1678333347039)

外鏈圖片轉存中...(img-rEB76Ib4-1678333347039)

8.17.7-9.5.10

修改gitlab postgresql鏡像版本

參照postgresql 與gitlab對應關系.....gitlab升級到9版本,postgresql也的升級到9.6版本以上:

image.png

參考:https://github.com/sameersbn/docker-gitlab/tree/9.5.5

image.png

還是使用sameersbn 的postgresql鏡像,修改tag

https://hub.docker.com/r/sameersbn/postgresql/tags?page=1&name=9.6

外鏈圖片轉存中...(img-HmFF8HWX-1678333347039)

準備修改postgresql鏡像tag為9.6-3 gitlab鏡像tag9.5.10參照

https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=9.5

image.png
image.png

服務的啟動與postgresql版本問題:

docker-compose downdocker-compose up -ddocker ps
image.png
docker logs -f github1-postgresql-1
image.png

恩 postgresql版本升級會有問題!sameersbn/postgresql中 基礎鏡像中9.4的版本倉庫應該沒有了(畢竟太老了)怎么破?流氓一下,找到最新的postgresql的版本:

image.png

修改docker-compose.yml postgresql鏡像為sameersbn/postgresql:12-20200524

image.png
docker-compose downdocker-compose up -d docker logs -f github-postgresql-1

外鏈圖片轉存中...(img-bbTzSK6N-1678333347041)

等待postgresql升級完成:

image.png
docker ps
image.png

查看gitlab容器日志:

docker logs -f github-gitlab-1

外鏈圖片轉存中...(img-PjVzqlwh-1678333347041)

貌似會有點問題無法登陸。集體重啟一遍docker-compose服務:

docker-compose downdocker-compose up -d docker logs -f github-gitlab-1
image.png

等待gitlab 容器正常運行:

image.png

外鏈圖片轉存中...(img-FwXa9v8L-1678333347042)

繼續登陸驗證web登陸倉庫

用原有gitlab賬戶登陸此gitlab服務器,控制臺查看gitlab 服務器版本已經升級到指定9.5.10版本:

image.png
image.png
image.png

另外關于postgresql的升級后文件目錄的變化:

外鏈圖片轉存中...(img-DaNKsQIJ-1678333347043)

9.5.10-10.8.7

繼續修改gitlab鏡像tag

繼續升級gitlab到10大版本.到dockerhub參考一下鏡像倉庫版本:

https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=10.8

image.png

修改gitlab鏡像tag為10.8.7

外鏈圖片轉存中...(img-pcZJW4Sv-1678333347043)

image.png

重啟gitlab相關服務

docker-compose downdocker-compose up -ddocker ps -a
image.png
docker logs -f github-gitlab-1

外鏈圖片轉存中...(img-XF8gadcL-1678333347044)

等待的有些漫長

image.png

web登陸gitlab倉庫

image.png

點擊管理區域驗證版本10.8.7:

外鏈圖片轉存中...(img-Izdc7tvY-1678333347044)

image.png

10.8.7-11.1.4

修改gitlab鏡像tag

繼續找到11大版本的最高版本11.1.4

https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=11.1

image.png

外鏈圖片轉存中...(img-8CeJ7Qsx-1678333347045)

image.png

重啟升級gitlab服務

docker-compose downdocker-compose up -ddocker ps -a
image.png

查看日志,等待服務升級:

docker logs -f github1-gitlab-1

外鏈圖片轉存中...(img-CQZraTrX-1678333347046)

web登陸gitlab控制臺驗證

image.png

點擊管理區域:

image.png

確認版本升級到11.1.4:

外鏈圖片轉存中...(img-M4kxmPSB-1678333347046)

就先升級到這里后續用官方鏡像or sameersbn鏡像繼續完成升級到更高版本!

過程中其他出現過的問題:

postgresql配置的時候第一次出現過如下報錯:

image.png

參照csdn的一篇文章:https://blog.csdn.net/weixin_42758299/article/details/117958407,修改了pg_hba.conf

image.png

外鏈圖片轉存中...(img-mJcE5mMD-1678333347047)

然后重啟了postgresql正常啟動了:

image.png
image.png

最近更新

日韩精品人妻一区二区三区四区| 精品国产成人国产在线观看| 国产精品女同一区二区| 在线观看精品国产福利片87| 精品熟女少妇av免费久久| 精品人妻V?出轨中文字幕| 国模精品视频一区二区三区| 日韩精品久久无码中文字幕| 国产伦精品一区二区三区视频猫咪 | 亚洲国产成人精品电影| 国内精品久久久久久麻豆| 欧美黑人巨大精品videos| 99精品久久99久久久久久| 99久久精品国产麻豆| 国产精品2018| 亚洲精品乱码久久久久久蜜桃图片 | 在线观看国产精品普通话对白精品| 日韩精品一区二区三区国语自制| 亚洲欧洲精品视频在线观看| 国产香蕉精品视频在| 国产成人精品一区二区三区| 日韩精品一区二区三区国语自制| 好吊妞视频这里只有精品 | 2019国产精品青青草原| 久久精品国产亚洲网站| 精品久久久久久国产三级| 国产在热线精品视频国产一二| 一本精品中文字幕在线| 亚洲精品不卡视频| 99久久er热在这里只有精品99| 国产精品无码无需播放器| 东北妇女精品BBWBBW| 亚洲性日韩精品一区二区三区| 国产精品情侣自拍| 国产精品成人无码久久久| 精品国产杨幂在线观看| 国产精品白丝AV在线观看播放| 亚洲精品天堂在线观看| 97久久国产亚洲精品超碰热| 国产成人精品免费午夜app| 在线观看精品视频看看播放|