使用Docker+OSS部署大容量云盘
最近云盘开始普遍关闭,百度云的用户体验也越来越差。所以组建了自己的云服务系统,便于使用。
之前尝试过用Docker部署OwnCloud,使用非常方便,但是由于云服务器磁盘价格较贵,因此仅能作为常用文件的同步盘,无法应用于大量文件存储的场景。OSS相对相比云盘来说,存储价格要低很多,1T一年大概1000块左右,如果把OSS当做磁盘挂载到服务器上,再配合OwnCloud便可以以非常低廉的价格享用高质量的云存储服务。
初步设想
- 在ECS上安装Docker完成OwnCloud服务的部署
- 使用ossfs完成OSS虚拟磁盘的需求
- 使用阿里的免费证书实现Https加密
技术路线
- docker实现OwnCloud的一键安装
- docker-compose负责容器管理
- ossfs实现将oss挂载到本地
- supervisord来维护ossfs进程
搭建步骤
- 安装OSSFS
- 这里可以参考阿里的官方文档
- PS:如果用的是阿里的服务器,我的Centos默认就是阿里的源,可以直接yum install ossfs
安装。
启动时起不来,浪费了很多时间。 - 配置运行OSSFS
- 配置自己的bucket,access id和keyecho my-bucket:my-access-key-id:my-access-key-secret > /etc/passwd-ossfs
- 修改配置文件的权限chmod 640 /etc/passwd-ossfs
- 运行ossfs my-bucket my-mount-point -ourl=my-oss-endpoint
- 一些词的解释- my-bucket 自己的bucket名称
- my-access-key-id 在右上方能查到的access key的id
- my-access-key-secret 同上能查到的secret
- my-mount-point 本机挂载的目录
- -ourl=my-oss-endpoint 阿里云OSS的接入点,就是填系统给的内网或外网地址
- 注意
- 阿里论坛里有篇文档说配置文件放到~/.passwd-ossfs里,我测试时发现这样会导致开机无法读取配置文件,所以不要这么操作。
- my-oss-endpoint是oss的接入点,不要把bucket的名字也写上去了
- 安装Supervisord并配置监视ossfs
- 安装supervisordeasy_install supervisor
- 新建ossfs的启动脚本
- `mkdir /root/ossfs_scripts`
- `vi /root/ossfs_scripts/start_ossfs.sh`
- `# contents of start_ossfs.sh`
- `fusermount -u /mnt/ossfs`
- `ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -ouid=37 -ogid=37 -o allow_other -o umask=007 -f`
- 编辑/etc/supervisor/supervisord.conf,加入配置
- `[program:ossfs]`
- `command=bash /root/ossfs_scripts/start_ossfs.sh`
- `logfile=/var/log/ossfs.log`
- `log_stdout=true`
- `log_stderr=true`
- `logfile_maxbytes=1MB`
- `logfile_backups=10`
- 关闭ossfs并运行测试supervisord是否正常工作
- `umount ....`
- `supervisord`
- 配置supervisord开机自启动(CentOS7系统,其它系统可自行谷歌)
- 在/user/lib/systemd/system下新建supervisord.servicemkdir /user/lib/systemd/system/supervisord.service
- 加入以下配置# supervisord service for sysstemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
ExecStart=/usr/bin/supervisord
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
- 配置开机启动 `systemctl enable supervisord`
- 注意
- 在新建ossfs的启动脚本是,启动代码相比官方增加了`-ouid=37 -ogid=37 -o allow_other -o umask=007 `
- `-ouid=37 -ogid=37` 是设置文件所有权是owncloud的用户,我这里是37,需要按照自己的情况修改
- `-o allow_other` 是允许其它人读写文件
- `-o umask=007` 是设置权限为770,否则777的话,owncloud会报警。
- 安装Docker
- 更新yum update
- 添加源tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
- 安装docker `yum install docker-engine`
- 设置开机自启动 `systemctl enable docker`
- 启动Docker服务 `systemctl start docker`
- 安装docker-compose
- 一键下载安装curl -L "https://github.com/docker/compose/releases/download/1.8.1/docker-compose-$(uname -s)-$(uname -m)" > /usr/local/bin/docker-compose
- 为compose添加执行权限chmod +x /usr/local/bin/docker-compose
- 配置docker-compose.yml
- 建议不要在用户~目录下配置,可以新建个文件夹比如cloud
- 修改配置文件vi docker-compoer.yml
,加入以下配置(注意缩进,我这里Markdown把缩进都丢了)services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: owncloud
MYSQL_DATABASE: owncloud
MYSQL_USER: owncloud
MYSQL_PASSWORD: owncloud_pass
owncloud:
depends_on:
- db
image: owncloud:latest
links:
- db
ports:
- "8000:80"
restart: always
- ports 是设置本机开放用于访问OwnCloud的端口
- volumes 是把存放数据的目录映射到oss挂载的目录上
- 这个配置文件实现了OwnCloud与MySQL的编排,如果不需要可以自行调整。
- 启动和配置OwnCloud服务
- 启动ownclouddocker-compose up -d
- 通过浏览器打开owncloud完成第一次配置- 用户名密码下面有个选项打开可以配置MySQL(比默认的SQLite更高效)
- 数据库信息只需要按照docker-compose里配置的数据库,用户密码配置即可
- 完成!!!开始享用吧~
参考文献