打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
我与阿里云的一千零一夜-006-建立私人云存储

0x0 前言

容器在过去几年很火,但容器所依赖的技术却很早就出现了,CGroup、namespace和UnionFS。

我们常见的systemd就是依赖于CGroup的一个系统程序。例如我们常用的命令:
service nginx restartservice nginx force-reloadsystemctl status nginx
都是systemd的一部分。

利用已有的云服务器和WebDAV协议可以构建云存储功能,利用systemd可以实现将该功能强化为底层基础设施,增加可靠性和可维护性,服务于其他系统功能。

0x1 hacdias/webdav部署WebDAV网络存储(需求)

常用的文件共享有三种:FTP、Samba、WebDAV,它们各有优缺点,了解后才能更好地根据自己的需求选择方案。

FTP属于古老的文件共享方式了,因为安全性,现代浏览器最新已默认不能打开FTP协议。SFTP在FTP基础上增加了加密,在Linux上安装OpenSSH后可以直接用SFTP协议传输。使用SFTP临时传送文件还可以,但做文件共享,性能不高,速度较慢。

Samba是Linux下CIFS协议的实现,优势在于对于小白使用简章,和Windows系统文件共享访问一样,不需要安装第三方软件,而且移动端也有大量APP支持。苹果手机文件APP中添加网络存储用的就是这种方式。Windows下文件共享使用445端口,且不能更改。445端口常常受黑客关照,在广域网上大多运营封掉了访端口,所以这种文件共享只适合在内网使用。

WebDAV 基于 HTTP 协议的通信协议,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。因为基于HTTP,在广域网上共享文件有天然的优势,移动端文件管理APP也大多支持WebDAV协议。使用HTTPS还能保安全性。Apache和Nginx支持WebDAV,可作为WebDAV文件共享服务器软件。也可以使用专门的WebDAV软件部署。


使用WebDAV可以给APP文件同步、配置同步,实现一定的云存储功能。

# 第一步:获取可执行单文件wget https://hub.fastgit.org/hacdias/webdav/releases/download/v4.1.1/linux-amd64-webdav.tar.gz# 解压缩tar -zxf linux-amd64-webdav.tar.gz# 第二步:建立配置文件# config.yml```# Server related settingsaddress: 0.0.0.0port: 8080auth: truetls: falsecert: cert.pemkey: key.pemprefix: /
# Default user settings (will be merged)scope: .modify: truerules: []
# CORS configurationcors: enabled: true credentials: false allowed_headers: - Depth allowed_hosts: - http://localhost:* allowed_methods: - GET - POST - HEAD    - PUT exposed_headers: - Content-Length - Content-Range
users:# 这里是示例 - username: admin password: admin scope: /a/different/path - username: encrypted password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi" - username: "{env}ENV_USERNAME" password: "{env}ENV_PASSWORD" - username: basic password: basic modify: false rules: - regex: false allow: false path: /some/file - path: /public/access/ modify: true```# 第三步:测试是否可用webdav -c config.yml#查看系统端口netstat -nltp# 如果有8080端口开放说明成功

接下来我们利用systemd和Nginx让云存储成为一种可靠的基础设施。

# 第一步:建立systemd的service文件# webdav.service# 注意,这里我们的程序只有单文件,命令也只有一行,所以比较简单# 分为单元、服务、安装三个部分# Unit部分标明名称和依赖[Unit]Description=WebDAV serverAfter=network.target
# service标明运行类型、用户以及执行行为命令[Service]Type=simpleUser=rootExecStart=/root/webdav/webdav -c /root/webdav/config.ymlRestart=on-failure
# install表示开机启动的依赖[Install]WantedBy=multi-user.target
# 第二步:移动到systemd service目录cp webdav.service /usr/lib/systemd/system/webdav.service
# 第三步:启动服务并加入启动项中service webdav startsystemctl enable webdav# 查看服务情况systemctl status webdav

加入至systemd service的应用程序将同样受CGroup监管,可以通过通过配置service文件进行cpu、内存资源的限定,也可以通过命令对资源进行限定。

# 限定cpu资源命令举例systemctl set-property webdav.service CPUShares=50# 查看CGroup资源消耗情况systemd-cgtop

服务已经建好了,但不安全,当然也没法满足负载均衡的要求。在这里,我们将它挂到nginx上做反向代理为https。这时候,我们只需要访问我们的https://<域名或者IP>/webdav/,输入用户名和密码即可实现云存储的访问。

location /webdav { proxy_pass http://127.0.0.1:8080/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; }

通过已有的一些客户端软件可以实现不同操作系统下的云盘操作,例如windows下面的Winscp、安卓下的MiXplorer等,当然许多APP支持WebDAV协议的数据备份。

最后,将阿里云的控制台里的安全组设置一下,我们做完之后并不需求80端口和8080端口对外开放,用户也能使用到安全的https服务。

0x2 小结

做一个相对固定的云存储还是比较简单的,实现大量存储的管理、优化、负载均衡还有很多工作要做,但那不暂时是本文讨论的内容。

雄关漫道真如铁,而今迈步从头越,接下来我们要做一些基础性工作支撑一下未来阿里云实践的故事。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ASP.NET Core在CentOS上的最小化部署实践
Nginx 在 Linux 上托管 ASP.NET Core 6.0应用
海量图片存储--MogileFS分布式存储集群的实现
Seafile Pro 8 在CentOS 7上的部署
RSShub配置记录 | 码农网
WebDAV extension · Seafile Server Manual
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服