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自动发布


禹过留声
3 声望0 粉丝

从事推荐系统和知识图谱相关方面的工作。


引用和评论

0 条评论