1. 程式人生 > 其它 >雲上開發之資料備份

雲上開發之資料備份

2020年7月份時,Github 掛了。是的,你沒有聽錯,背靠微軟,坐擁 azure 的 Github 掛了。最近還看到近幾年大火的 Docker 也開始限制 Docker 商業版及 Docker 的其它服務(像Docker Hub)對特定國家和公司的使用。這些都體現了資料備份的重要性,雖然上面的事件對我們小小個人影響不是很大,但覆巢之下,安有完卵。早點掌握資料備份的方法才能從容應對未來突發的“意外”。本文將介紹在 ECS 上搭建類 Github 服務 Gogs, 並且定期備份 ECS 上資料到 OSS上,有條件的可以再將 OSS上的資料備份到自己的群輝 NAS 上。

介紹

“All in Cloud”的時代已經到來。對於公司而言,維護機房的成本太高,所以購買像阿里這樣的雲伺服器就比較靈活且成本可控;而對於個人而言,擁有一臺雲伺服器(可以是阿里雲,也可以是自搭的伺服器【帶公網IP】),在任何機器,任何環境下都擁有同一套自己折騰的環境那也太方便了。下面就來介紹在雲上進行開發中資料備份的那點事。

Gogs搭建

為什麼要搭建 Gogs,因為 Github 也會掛,而且任何人也無法保證它不會受某國的貿易管制影響。
Gogs 是一款極易搭建的 Git 服務,核心功能和 Github,Gitlab一樣,但比二者更加輕量級。專案使用的 MIT 授權協議,可以無任何條件的免費使用。它有如下優點:

  1. 易安裝 二進位制包安裝,同時支援Docker
  2. 跨平臺 Go開發,支援全平臺
  3. 輕量級 廉價的樹莓派即可支援它的執行(2核512M)

這裡使用 Docker 對其進行安裝部署,docker-compose.yml檔案如下:

version: '3'

services:
  gogs:
    image: gogs/gogs
    ports:
      - 10022:22
      - 10080:3000
    volumes:
      - ./data/:/data

通過下方命令啟動服務:

docker stack deploy -c docker-compose.yml gogs

這樣基本就搭建好一個初步的 Git 服務了,通過 IP:10080 就可以訪問。當然第一次登陸需要進行一些設定。這裡可以選擇 SQLite 作為儲存資料庫,在伺服器起來後,其容器的記憶體才 47M ,而單獨啟動一個 MySql 容器,其記憶體佔到 371M。這已經足夠證明 Gogs 的輕量級。

雲機器備份到OSS

當我們將很多的程式碼以及服務放在雲上進行執行時,如果伺服器被黑或者不小心誤刪了資料,此時備份資料可以讓我們降低損失。伺服器資料備份的方法有很多種,比如

  1. 人工定期從伺服器上拷貝檔案,問題是人工成本大,不一定記得住。
  2. 自己伺服器通過crontab啟定時任務,通過rsync或者scp進行檔案備份,前提是你得有臺自己伺服器
  3. 通過群輝 Nas 中 Cloud Sync 進行定期備份,前提是你得有群輝Nas,且 Cloud Sync只支援OSS。

其實第二種是最理想的情況,自己整個樹莓派,定時同步備份,方便快捷。這裡介紹一下第三種方式。前提是你得開通OSS服務,並且建立了Bucket為ws-bakup以及OSS的accessKey(myAccessKeyID:myAccessKeySecret)。

OSS工具安裝

# 獲取二進位制ossutil64檔案,並置於/usr/bin/目錄下
wget http://gosspublic.alicdn.com/ossutil/1.6.18/ossutil64 -O /usr/local/bin/ossutil64
# 給二進位制檔案新增執行許可權
chmod 755 /usr/local/bin/ossutil64
# 配置ossutil64
ossutil64 config

使用預設的配置檔案位置 ~/.ossutilconfig

[Credentials]
language=CH
endpoint=https://oss-cn-shanghai-internal.aliyuncs.com
accessKeyID=myAccessKeyID
accessKeySecret=myAccessKeySecret

crontab配置

指令碼

#! /bin/bash

day=`date  +"%Y%m%d"`
tarname='ali-ws'
echo "ecs_backup_oss: "${day}

# 打包壓縮
tar -czvPf /var/backups/ws/${tarname}-${day}.tar.gz \
    /path/to/gogs \
    > /dev/null

# 備份上傳
cp /var/backups/ws/${tarname}-${day}.tar.gz /var/backups/ws/${tarname}.tar.gz
ossutil64 -f cp /var/backups/ws/${tarname}.tar.gz oss://ws-bakup

# 清理之前的打包檔案
find /var/backups/ws/ -mtime +4 -name "*.tar.gz" -exec rm -rf {} \;
# 每天凌晨一點備份資料到OSS
0 1 * * * sh /root/cron/ws_bakup.sh >> /var/backups/ws/cron.log

OSS備份到Nas

操作流程如下:

  1. 登陸群輝Nas,開啟 Cloud Sync
  2. 選擇雲供應商:阿里雲物件儲存
  3. 填寫myAccessKeyID和myAccessKeySecret,並選擇要備份的Bucket:ws-bakup
  4. 基本配置完成,還可以修改計劃(類似crontab)

這樣整個雲上開發的資料備份流程就整完了。

參考文獻

  1. 阿里雲ECS資料遷移至OSS
  2. Gogs中文文件
  3. Gogs原始碼

如果該文章對您產生了幫助,或者您對技術文章感興趣,可以關注微信公眾號: 技術茶話會, 能夠第一時間收到相關的技術文章,謝謝!
技術茶話會

本篇文章由一文多發平臺ArtiPub自動釋出