彭俊,资深工程师,微软云计算架构师

现在网盘的需求非常之大,个人用户或者小企业,可能使用百度盘,金山盘之类就够了。但真正的企业和有价值的私有数据,还是建议放在企业内或者可控性更高的地方。那已经使用了或者想上 Azure 的客户,如何使用 Azure 来组合私有网盘方案呢?这里有几个可选项可供参考:

  1. 使用我们的合作伙伴坚果云的方案;
  2. 使用开源方案 nextcloud/seafile 等;
  3. 使用 Azure 存储 /file+ 定制化实现。

我们今天就来聊聊使用 nextcloud 如何实现。先来看看 nextcloud 的好处:

  1. 支持多平台客户端,官方提供 web、Windows、Linux、Mac、IOS、Android、WindowPhone 全家桶套餐;
  2. 支持link外链,而且可单独设置访问密码、共享过期时间;
  3. 使用者操作傻瓜,简单方便;
  4. 支持插件扩展功能,实现简单 OA 流程;
  5. 自带文件预览/影音。

可以参考 nextcloud 官方文档进行手动安装和部署。

通常的安装方式这里不赘述,一贯 的php, nginx,apache2,mysql 的安装方式。我今天来说说使用 docker-compose+ caddy 傻瓜式部署 nextcloud+letsencrypt 的方案。 也来演示一下如何在 Azure 中国使用 docker-compose。

众所周知,国内的 docker 和 docker-compose, docker hub 都很慢。我们使用 daocloud 的安装包和加速器。提高一下使用效率:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

 

 

到此为止,你的 azure docker compose 环境就已经设置好了。

开始编写 docker-compose.yml, 可以到我的 github 项目里看:

version: ‘2’

services:

db:

image: mysql

volumes:

– /datadisk/cloud/mysql:/var/lib/mysql

restart: always

environment:

MYSQL_ROOT_PASSWORD: ***** //你的 mysql 密码

MYSQL_DATABASE: nextcloud

app:

depends_on:

– db

image: nextcloud

volumes:

/datadisk/cloud/config:/var/www/html/config

/datadisk/cloud/data:/var/www/html/data

/datadisk/cloud/apps:/var/www/html/apps // 你的数据盘

links:

– db

restart: always

cron:

image: nextcloud

links:

– db

volumes_from:

– app

user: www-data

entrypoint: |

bash -c ‘bash -s <

trap “break;exit” SIGHUP SIGINT SIGTERM

while /bin/true; do

/usr/local/bin/php /var/www/html/cron.php

sleep 900

done

EOF’

restart: always

caddy:

image: exekias/caddy

ports:

– 80:80

– 443:443

volumes:

– ./Caddyfile:/Caddyfile

– ./caddy:/root/.caddy

restart: always

links:

– app

 

networks:

default:

external:

name: nextcloud

现在是 https /http2 的时代,为了 docker 容器的安全性,我们用 Caddy(当然你也可以用 nginx 做 proxy)+letsencrypt 做 https 加密。

Caddyfile 这样写:

Permanent redirect to HTTPS

0.0.0.0:80 {

log stdout

errors stderr

redir https://**azuredns**.chinaeast.cloudapp.chinacloudapi.cn 301

}

https://**azuredns**.chinaeast.cloudapp.chinacloudapi.cn {

log stdout

errors stderr

tls

proxy / http://app:80 {

keepalive 0

transparent

}

}

配置写到这里,就完成了。接下来就是去 azure portal 给你的虚拟机添加数据盘并开放 80,443 端口:

 

 

 

 

 

格式化成 datadisk,并挂在好,给容器作为 volume。勿忘在 fstab 里更新好,并且在开机脚本里添加 compose。

 

 

 

 

 

 

 

现在开始,启动 docker compose:

 

 

到此,nextcloud https 方案就完成了:

 

 

 

 

 

 

默认所有的请求都会走 443 端口,保证安全性。容器会自动监控容器情况,caddy 会 proxy 请求并自动申请ssl证书。安装插件后,office 和 pdf, 视频音频都可以 preview。 还有邮件,TASK, calender 等功能。到此为止,一个容器搭建的私有云盘 +OA 就此完成,是不是非常容易?

这个是利用 docker compose 完成的单机搭建,下一步我们可以考虑多 VM 搭建容器集群或者用多 VM 搭建高可用方案,这个如果有需求,请与我们专业的微软销售联系。