背景交代: 本人使用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
-
« 上一篇:
更换阿里云yum源
-
centos7改网卡名
:下一篇 »