个人重要信息文件同步保存在阿里云oss

发表于 LINUX 分类,标签:

背景交代:   本人使用mac办公,想保存个人重要信息,感觉使用百度网盘,有道云笔记,oss客户端无法实现同步保存,所以有此一贴

由于历史原因,最初本人购买的ECS在青海,但是本人工作在深圳,如果使用ossfs将bucket挂载在青海ECS上网络会很卡,体验非常差。

接下来准备在mac上编译安装ossfs,但是折腾了很久还是没有编译成功,并且把我的mac环境整的非常脏,导致有的软件出现莫名其妙的问题(可能是技术还不到位,后续还是要继续折腾)

由于只是把本地文件同步至oss,没有考虑做双向同步,如果本地不要了的文件,删除就好了,但是oss还保留着,这样即使哪天想恢复,也可以通过客户端去oss上去找。

为什么不考虑阿里云的Nas,主要是nas太贵,并且好像本地无法挂载,只能挂载在ECS上。

所以最终的方案是这样:   mac --> docker --> centos容器--> ossfs --> mount oss -->并且容器运行命令就是while true rsync local remoteoss_dir;sleep 1800


开干,过程很简单。我相信如果大家使用windows,也应该是可以采用此方法的。大家可以尝试之后给我回复,感谢。


首先我们看dockerfile,内容如下,请将BUCKET_NAME:ACCESS_KEY:ACCESS_KEY_SECRET修改为你自己的内容,怎么获取这里不做说明

cat Dockerfile

FROM centos:latest
Add ./start.sh /start.sh
RUN yum -y install wget curl \
    && mkdir -p /etc/yum.repos.d/bak \
    && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ \
    && wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
    && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
    && yum clean all \
    && yum makecache fast \
    && yum -y install yum-utils gcc gcc-c++ vim screen lrzsz net-tools wget curl unzip zip dos2unix rsync telnet zip unzip tree \
    && cd /tmp/ && wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.5_centos7.0_x86_64.rpm \
    && yum -y localinstall ossfs_1.80.5_centos7.0_x86_64.rpm \
    && echo BUCKET_NAME:ACCESS_KEY:ACCESS_KEY_SECRET > /etc/passwd-ossfs \
    && chmod 640 /etc/passwd-ossfs \
    && mkdir /aliOssStone /localOssStone \
    && rm -f /anaconda-post.log /tmp/ossfs_1.80.5_centos7.0_x86_64.rpm /tmp/yum.log \
    && yum clean all && chmod +x /start.sh
CMD /start.sh


接下来我们看启动脚本

cat start.sh

#!/bin/bash
#/usr/bin/rsync
# 挂载阿里云OSS,需要保证宿主机有网络才行 如下是将深圳节点下的BUCKET_NAME挂载到 /aliOssStone
ossfs BUCKET_NAME /aliOssStone -ourl=http://oss-cn-shenzhen.aliyuncs.com
if [ $? != 0 ];then
    echo "failed"
    exit 2
else
    echo "succedd"
fi
sleep 3

while true
do
    /usr/bin/rsync -var /localOssStone/ /aliOssStone >> /tmp/rsync.log
    # 将本地localOssStone目录的内容同步至aliOssStone,也就是我们的oss
    sleep 60
done

将脚本里面的BUCKET_NAME以及节点,目录信息替换成你自己的就行了。


接下来我们来看docker-compose.yml

cat docker-compose.yml

version: "3"
services:
  ossrsync:
    image: ossrsync:stone
    container_name: aliOssRsync
    hostname: aliOssRsync
    privileged: true
    cap_add:
      - ALL
    volumes:
      - "/PATH/ossSync:/localOssStone"

将本机/PATH/ossSync目录挂载映射至容器/localOssStone,然后容器启动之后会将/localOssStone同步到aliOssStone

容器启动一定要加privileged=true这个参数,要不然oss无法挂载,无法fuse,再怎么modprobe fuse都没用,大家可以尝试一下。

只有加了这个参数,容器里面的root用户才是真正的root用户,要不然是个假root,很多涉及系统设备相关的命令无法正常使用

加了之后甚至可以在容器里面安装docker再运行容器都行,当然生产环境就不要这么搞了,由于这里是个人电脑,所以无所谓啦。


此方式oss走外网,尽量oss开在和自己工作城市较近的节点。工作深圳--> oss深圳节点,体验还不错,尽量还是存文档类,软件还是尽量用网盘啥的,如果豪,当然你可以连电影都存上去。

目前只做了单向同步,将本地文件同步至阿里云oss,如果大家换环境,换工作,只需要保留好自己这3个文件,然后立马就可以运行起来,然后进容器,将启动脚本里面的rsync反过来执行一遍就可以将oss里面的文档全部同步到本地。


请保护好此镜像,里面涉及到自己的BUCKET_NAME:ACCESS_KEY:ACCESS_KEY_SECRET,请勿推到公有仓库,或者将那个密码文件挂载进去也行,方法大家随意


缺点:   

1  阿里oss是花钱的,大家可以尝试其余厂商的存储,比如七牛云就有免费的10g存储空间、每月的流量10g

2  这样是没有版本控制的


docker run -itd --privileged ossrsync:stone bash

docker run -t -i -v /d/PycharmProjects:/test ldzm/myubuntu:14.04 /bin/bash


以下是相关参考

https://bbs.aliyun.com/simple/t291405.html

https://segmentfault.com/q/1010000004670542/a-1020000004672753

https://help.aliyun.com/document_detail/32196.html

0 篇评论

发表我的评论