標籤: 備份

  • 伺服器轉移的 Check List

    伺服器轉移的 Check List

    伺服器轉移的時機點包括了:

    • 更換系統(e.g. centOS -> Debian)
    • 更換主機商
    • 主機需求迫不得已需要轉移

    各種各樣的問題,而如果不是使用 panel,或是沒有提供/規劃快速轉移的服務的話,這邊列一個轉移前後需要檢查的點,目前以 LEMP 環境,帶一些常用的服務/語言為主:

    1. 有上 git 的檔案
      • 如果不要完整備份,是否有備份 config, uploads, logs, writeable 等 ignore 的檔案?
      • 如果要完整備份,是否有把 .git 檔案包含在其中?
    2. 全部檔案
      • 除了 document root 資料夾之外,有沒有外部/連結/其他服務所使用到的資料夾?
      • Compose 等是否需要重新 build?
    3. 網站設定/環境
      • 程式本身使用到哪些服務/設定: user.ini, .htaccess 等等
      • 其他環境使用到哪些服務/設定:Node.js, python, Memcached, Redis 等等。
    4. GIT 使用的 private key 是否可重複使用,或是需要重新申請。
    5. PHP 使用的版本、擴充套件、啟用的套件、環境設定等。
    6. Nginx 的 vhost 設定,包含 log 路徑位置等;Apache 設定。
    7. SSL 的證書,其他服務可能使用到的憑證等。
    8. DNS 設定是否需要更動。
    9. FTP 的用戶、密碼與路徑(如果有用的話)
    10. Docker 的 image, compose, container 或是 dockerFile 等(如果有的話)
    11. IP 防火牆設定,請注意主機商或主機內都有機會設定。
    12. MySQL/MariaDB 或是其他資料庫服務等備份,請注意用戶權限,建議是備份成為 .sql 檔案,參考備份的 shell Script
    13. Cron 中對於網站的設定,注意除了網址呼叫之外,是否有針對路徑的呼叫?路徑是否有改變。
    14. Linux 的安全設定,包含是否有 ip 限制 SSH 連線、VPS 的設定等等以及驗證。
    15. Email 的設定,如果新的 server 不支援 email 設定的話可能得把這塊移轉到其他伺服器/服務商上面。
    16. 其他服務串接:包含了可能串接對方服務會有 ip 驗證或是作為 server 端, client 呼叫可能會產生的問題(例如設計上直接呼叫 ip)等。

    寫一寫發現有點多,主要還是怕避免落人口舌就越寫越多,肯定是還有遺漏的,畢竟我不是專職做系統工程師的角色,而伺服器鬼故事很多,天知道配合的 SE 是哪方天神。愛惜自己的肝,請從良好的配置習慣開始。

    1. 培養資料管理的態度和原則,一開始分類、整理好,以後採雷少。
    2. 建立一個關於自己技術成長的規則,避免自己被自己搞死
      • 例如我會利用每一台伺服器來做分類,舊的伺服器會遵循同一個資料管理的方法並且適時的更新,等於是對自己的技術作版本管理。
    3. 如果是接別人的 server/code ,除非自己能夠重構或是改好,要不遵守對方的規則為上策。等於是做一個版本的 branch 。
    4. 萬一很複雜(而且沒有管理系統),做文件是好的。
    5. 如果查看修改的頻率不高,做文件是好的。
    6. 最好的管理是給使用者自主管理,讓使用者有意識到那是他的東西,讓他懂得維護的方法。
      • 當然要做好期待管理以及費用的問題。通常使用者就是客戶。

    以上。

  • 使用 Dropbox 實作異地備份

    使用 Dropbox 實作異地備份

    這邊是以線上運作中的 web 網站作為目標備份,備份包含運作中、不包含git內的上傳檔案、資料庫資料內容。不包含系統環境、環境設定檔。在講異地備份之前,提一下自己心目中的異地備份服務是從 VPS 廠商出發的:

    1. 如果資料庫是獨立服務,可以把資料庫當成一個獨立伺服器的運作方式,如果不是,則需要定期/手動操作把 sql 檔案轉換出來。
    2. 對於一個獨立伺服器,確定他是否使用額外硬碟。如果是額外硬碟責備份額外硬碟即可。
    3. 廠商提供備份與下載服務。如果沒有下載,應該也能夠提供備份至不同地區的資料中心的服務。
    4. 提供備援(備份且恢復資料)服務。

    如果廠商提供異地備援(備份+還原)的功能,這會是好的。需要考慮的有:

    1. 網站使用的狀態,會考慮到需要備份的頻率。
    2. 網站重要性。是否不能斷線?是否有資安問題、金流問題?是否實時有用戶在使用?
    3. 有沒有需要備份可編輯的原始碼?
    4. 能不能正確的抵擋天災、人禍?

    這次因為種種原因,以從系統環境的層級著手處理異地備份。

    異地備份如果要把檔案下載到電腦上再儲存起來實嫌麻煩,嘗試讓他跟自己常用的服務做雲端傳輸就好。於是我選了使用 Dropbox 做備份,筆記下來。

    實作的目標是:備份檔案、資料庫。
    使用的服務與環境是:debian 11, dropbox, Dropbox-Uploader, mysql_backup.sh

    這邊採用手動單次操作,如果需要用 cront job 動作的話要請配置好一個 script。

    手動操作的流程是:

    1. zip 要備份的檔案
    2. 透過 dropbox-uploader 上傳
    3. backup mysql 資料庫們
    4. 透過 dropbox-uploader 上傳

    幾個注意事項:

    1. 網站檔案記得先 zip ,要不檔案(尤其是 uploads/ )多到會瘋掉。
    2. 資料庫備份預設會被壓縮成 .sql.gz 。
    3. mysql 備份檔案內不會有對 database 的 use / drop / create 動作,要的話要自己加。
    4. dropbox-uploader 會執行多個會單個操作,其實沒啥影響,都是用同一個 upload 指令。
    5. 如果使用終端機 ssh 進去 server 的話,建議 keep session 操作避免長時間等待不小心離線,我是使用 screen 來實現,這是介紹

    再來關於兩個 shell script 的操作說明。

    關於 mysql_backup.sh 操作:

    請先下載 shell 或是創建以後複製貼上,記得更新權限

    chmod +x mysql_backup.sh

    設定其中的資料夾位置、帳號密碼,如果 mysql 路徑不一樣的話記得變更 PATH 變數, KEEP_BACKUPS_FOR 他會檢查路徑中舊的檔案來保留/移除,如果是用 cron job 動作的話好用。

    這定完成以後執行即可,會有資訊顯示。

    ./backup_mysql.sh

    關於 Dropbox-Uploader 的操作:

    首先先下載 script

    curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

    設定權限並且執行他

    chmod +x dropbox_uploader.sh
    ./dropbox_uploader.sh

    系統會提示怎麼做,主要幾個步驟:

    1. 請開啟 dropbox developer 創建一個 app ,選擇 App folder 的 type 並且創建好名字。
    2. 創建完之後,在 Permissions 的 tab 中選擇 “files.metadata.read/write” 和 “files.content.read/write” 這四個權限。記得點擊 Submit 送出。
    3. 在 Settings 的 tab 中找到 App key 並且點擊 show 顯示 App secret ,記錄起來。
    4. 回到指令列上,依照要求輸入 key, secret
    5. 接著會跳出 access token 的請求網址,用瀏覽器開啟,會得到一組 token,依照要求把這組 token 輸入進去。
    6. 提示是否確認,輸入確認「y」之後就可以使用了。

    可用的指令可參考官網,這邊附上範例和中文翻譯:

    基本上會使用到的就是 upload 這個指令而已。

    另外,如果資料輸入錯誤,或是手動上傳完畢了不想留資料,除了移除 dropbox 的 app 之外,記得執行刪除設定檔的動作:

    rm ~/.dropbox_uploader

    以上。

    同場加映