記一次gitlab程式碼倉清空還原覆盤

linyb極客之路發表於2021-11-03

前言

故事發生在一個夜黑風高的晚上,一通看著不怎麼尋常的電話過來,說是業務趕著上線,但他們的API包上傳不了到公司的maven私庫,領導叫我支撐下看怎麼解決。經過多年不怎麼靠譜的直覺,應該是磁碟滿了。於是利索地敲下

df -lh

果然磁碟滿了,其中/var/lib/docker/overlay 這個玩意兒基本上把磁碟佔滿。接著輸入

docker system df

檢視docker所佔的磁碟大小。在思考是申請流程單叫運維擴容下磁碟,還是手動清理下磁碟的時候,電話再次過來,說找到問題沒,能不能趕緊解決。接完電話後,心情莫名煩躁,於是敲下了如下命令

docker system prune

這個命令可以用於清理磁碟,刪除關閉的容器、無用的資料卷和網路,以及dangling映象(即無tag的映象)。接著一通電話又過來,說gitlab訪問不了,我當時給的答案是磁碟滿了,gitlab應該是停止了,我稍等重啟下gitlab容器,就在我打算重啟gitlab時,敲下命令

docker ps -a

想撈一下gitlab容器,然後完犢子了,docker ps -a 看不到任何容器。因為之前gitlab的容器是前架構師安裝,我壓根就不清楚他當時是以什麼形式安裝,於是就把這個問題反饋給領導,通過領導拿到當時啟動gitlab的docker-compose.yml.樣例如下

version: '2'

services:
  redis:
    restart: always
    container_name: gitlab_redis
    image: sameersbn/redis:latest
    command:
    - --loglevel warning
    volumes:
    - /usr/local/docker/gitlab/redis:/var/lib/redis:Z
    network_mode: bridge

  postgresql:
    restart: always
    container_name: gitlab_postgresql
    image: sameersbn/postgresql:9.6-2
    volumes:
    - /usr/local/docker/gitlab/postgresql:/var/lib/postgresql:Z
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm
    network_mode: bridge

  gitlab:
    restart: always
    container_name: gitlab
    image: sameersbn/gitlab:10.4.2-1
    links:
    - redis
    - postgresql
    network_mode: bridge
    ports:
    - "10080:80"
    - "10022:22"
    volumes:
    - /usr/local/docker/gitlab/gitlab:/home/git/data: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.common.com
    - GITLAB_PORT=
    - GITLAB_SSH_PORT=10022
    - GITLAB_RELATIVE_URL_ROOT=

看了一下檔案,我看到有做檔案目錄掛載,然後我就去掛載的檔案目錄下,看檔案有沒有在,還好檔案都在,於是我就放心敲下

docker-compose -f gitlab.yml up -d

這命令一敲下,覆盤之路華麗的拉開了序幕...

正文

在我敲下命令,看到容器都顯示正常啟動,打算繼續清理磁碟之時,突然微信接到好幾個開發人員的資訊,說他們gitlab登陸,都顯示使用者或者密碼無效,於是我也用我的賬號,我的賬號可是管理員賬號,哈哈,一股王八之氣,在介面上輸入我那耳熟能詳的使用者名稱和密碼,出乎意料的提示我的使用者名稱或者密碼無效,心裡莫名有點慌,感覺我幹了一件挺了不得的大事。

事情有點超出我的認知,在我看來如果有做了掛載,正常不會出現資料丟失才對,於是就找朋友救急,後面和他交流一下,就是先用備份資料還原,如果有備份的話。然後我在掛載gitlab的目錄下,看到backups目錄,看到裡面的tar,突然有一種挖到寶藏的感覺,但寶藏有了,開寶藏的鑰匙在哪裡,我要如何把備份的資料恢復回來呢。因為我對sameersbn也不瞭解,於是就去他們的github找了下,他們的github連結如下

https://github.com/sameersbn/docker-gitlab

通過他們的github找到如下介紹

When using docker-compose you may use the following command to execute the restore.

docker-compose run --rm gitlab app:rake gitlab:backup:restore # List available backups
docker-compose run --rm gitlab app:rake gitlab:backup:restore BACKUP=1515629493_2020_12_06_13.10.0 # Choose to restore from 1515629493

照貓畫虎,敲下如下命令

docker-compose -f gitlab.yml run --rm gitlab app:rake gitlab:backup:restore

大約過了一首歌的時間,我再次開啟gitlab登入介面,懷著忐忑的心情,輸入使用者名稱密碼,很驚喜的發現登入成功了,看一下倉庫,都還在

總結

羅裡吧嗦說了一堆,其實總結出來就幾句話,就是備份,備份,備份,重要的事情說三遍,其次在做一些可能刪資料或者改變資料的命令,要小心,小心,再小心。最後遇到問題,如果谷歌百度都找不到答案,記得去官方網站或者他們的github網站找找答案,比如sameersbn-gitlab連結
https://github.com/sameersbn/docker-gitlab

相關文章