前提
相信大家都用过网盘,比如国外有 Google Drive、Dropbx、OneDrive等,国内有 百度云盘、坚果云等,这些都是公共网盘,由于公司业务需要,想架设公司自己用的私有网盘。
目前市面上,稳定、成熟的私有云存储方案有:
另外,可以多去关注下 nextcloud 项目,据说 ownCloud
母公司破产后,原项目组的骨干出走并以 ownCloud
项目 folk
出新项目 nextcloud
继续开发。需要说明的是,ownCloud
母公司后来被一家德国公司收购了,ownCloud
项目还在继续开发。
这里主要介绍 ownCloud
的搭建。
ownCloud介绍
ownCloud 是开源的、免费的、专业的私有云存储解决方案,以 AGPL
许可发布,它能帮你快速地在服务器上架设一套专属的私有云文件同步网盘,可以像 Dropbox
那样实现文件跨平台同步、共享与团队协作等。
ownCloud 支持 Windows/Mac桌面端,IOS/Android手机端。基本可以替代在线网盘如百度网盘等。
环境背景:
1. Centos7.6最小化
配置至少4核8G,本博主使用 8核32G(不然docker启动mysql起不来)
2. ownclound 9
3. docker如果一直映射不到宿主机端口,有时有有时无,直接重启一下ECS服务器即可解决此问题
使用需求:
目前我公司要加强公司数据的安全性,担心百度网盘数据存在泄漏风险,准备着手做一个私有网盘,目前ownclound和Nextclound 两者看来最后还是选择了ownclound,因为为了稳定,存储数据包括用户上传数据存在阿里云OSS上,话不多说,开始!
一、创建OSS对象存储并挂载ECS
阿里云对象存储 OSS使用教程
1、对象存储 OSS介绍
结合SAN及NAS的优点,就是对象存储,Ceph可以做三种存储类型,文件存储,块存储,对象存储。
2、对象存储 OSS 购买
3、对象存储 OSS使用
[root@iZ2ze43yllm8g1uqdetx19Z ~]# wget gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm
--2019-12-29 11:40:53-- http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm
Resolving gosspublic.alicdn.com (gosspublic.alicdn.com)... 101.37.183.187, 101.37.183.186
Connecting to gosspublic.alicdn.com (gosspublic.alicdn.com)|101.37.183.187|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1189490 (1.1M) [application/x-redhat-package-manager]
Saving to: ‘ossfs_1.80.6_centos7.0_x86_64.rpm’
100%[=========================================>] 1,189,490 6.26MB/s in 0.2s
2019-12-29 11:40:54 (6.26 MB/s) - ‘ossfs_1.80.6_centos7.0_x86_64.rpm’ saved [1189490/1189490]
[root@iZ2ze43yllm8g1uqdetx19Z ~]# ls
ossfs_1.80.6_centos7.0_x86_64.rpm
[root@iZ2ze43yllm8g1uqdetx19Z ~]# yum -y install ossfs_1.80.6_centos7.0_x86_64.rpm
注意依赖软件也需要安装,自动解决。
3.1 配置账号访问信息
将Bucket名称以及具有此Bucket访问权限的AccessKeyId/AccessKeySecret信息存放在/etc/passwd-ossfs文件中。注意这个文件的权限必须正确设置,建议设为640。
[root@iZ2ze43yllm8g1uqdetx19Z ~]# echo aiopsbucket100:LTAI4FiWiDJBfaaLXUiDjbBd:UohLPZPN2WXt3U5TFqOSmEF5Hohhr7 > /etc/passwd-ossfs
[root@iZ2ze43yllm8g1uqdetx19Z ~]# cat /etc/passwd-ossfs
aiopsbucket100:LTAI4FiWiDJBfaaLXUiDjbBd:UohLPZPN2WXt3U5TFqOSmEF5Hohhr7
[root@iZ2ze43yllm8g1uqdetx19Z ~]# ll /etc/passwd-ossfs
-rw-r--r-- 1 root root 71 Dec 29 11:45 /etc/passwd-ossfs
[root@iZ2ze43yllm8g1uqdetx19Z ~]# chmod 640 /etc/passwd-ossfs
[root@iZ2ze43yllm8g1uqdetx19Z ~]# ll /etc/passwd-ossfs
-rw-r----- 1 root root 71 Dec 29 11:45 /etc/passwd-ossfs
3.2 将Bucket挂载到指定目录
[root@iZ2ze43yllm8g1uqdetx19Z ~]# ossfs aiopsbucket100 /mnt -ourl=oss-cn-beijing.aliyuncs.com -o allow_other
[root@iZ2ze43yllm8g1uqdetx19Z ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 1.8G 36G 5% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 460K 919M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/0
ossfs 256T 0 256T 0% /mnt
-o allow_other 指的是:其他用户也可以访问此OSS挂载目录
3.3 存储数据
[root@iZ2ze43yllm8g1uqdetx19Z ~]# ls /mnt
阿里云1.png
4、对象存储 OSS删除
[root@iZ2ze43yllm8g1uqdetx19Z ~]# umount /mnt
二、Docker compose
2.1、docker软件安装
docker-ce的yum源下载(任选其一)
- 下载docker官方ce版
[root@chuanzhi ~]# wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
- 或者使用aliyun的docker-ce源
[root@chuanzhi ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
docker安装
[root@chuanzhi ~]# yum clean all
[root@chuanzhi ~]# yum install docker-ce -y
PS: 注意要安装docker-ce版,不要安装docker(否则可能安装1.13老版本)
启动服务
[root@chuanzhi ~]# systemctl start docker
[root@chuanzhi ~]# systemctl enable docker
[root@chuanzhi ~]# systemctl status docker
查看版本信息
[root@chuanzhi ~]# docker -v
Docker version 18.09.7, build 2d0083d
[root@chuanzhi ~]# docker info
[root@chuanzhi ~]# docker version
Client:
Version: 18.09.7
API version: 1.39
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:56:06 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.7
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:26:28 2019
OS/Arch: linux/amd64
Experimental: false
2.2、镜像加速器
国内的几个互联网巨头都有自己的容器服务。这里以阿里云为例
阿里云容器镜像服务地址:https://cr.console.aliyun.com/cn-hangzhou/new 申请一个阿里账号登录
[root@chuanzhi ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://42h8kzrh.mirror.aliyuncs.com"]
}
以上要是多个要在尾部,号隔开
[root@chuanzhi ~]# systemctl daemon-reload
[root@chuanzhi ~]# systemctl restart docker
2.3、docker-compose介绍
用容器运行一个服务,需要使用docker run
命令。但如果我要运行多个服务呢?
假设我要运行一个web服务,还要运行一个db服务,那么是用一个容器运行,还是用多个容器运行呢?
一个容器运行多个服务会造成镜像的复杂度提高,docker倾向于一个容器运行一个应用。
那么复杂的架构就会需要很多的容器,并且需要它们之间有关联(容器之间的依赖和连接)就更复杂了。
这个复杂的问题需要解决,这就涉及到了容器编排的问题了。
docker-compose就是可以做容器编排的小工具,它可以在一个文件中定义多个容器,只用一行命令就可以让一切就绪并运行。
三者区别
docker-cpmmpose(轻量级)部署一个或一组容器到一台服务器的网卡下
docker-swarm(中量级)部署一个或一组容器到多台的服务的集群环境
k8s(重量级)部署一个或一组容器到多台的服务的集群环境
2.4、docker-compose部署
方法1: 使用pip
安装,(安装pip可参考前面安装habor章节)
# yum install epel-release -y
# yum install python2-pip -y
# pip2.7 install docker-compose
卸载方法:
# pip uninstall docker-compose
方法2: 直接下载
# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
卸载方法:
# rm /usr/local/bin/docker-compose
安装完后验证
# docker-compose -v
docker-compose version 1.24.1, build 4667896
2.5、使用docker-compose的三个步骤
Docker Compose将所管理的容器分为三层
- 工程(project)
- 服务(service)
- 容器(contaienr)
Docker Compose运行的目录下的所有文件(docker-compose.yml, extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。
一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。
一个服务当中可包括多个容器实例
使用Compose基本上分为三步:
- Dockerfile 定义应用的运行环境(镜像)
- docker-compose.yml 定义组成应用的各服务
- docker-compose up 构建并启动整个应用
2.6、docker compose常见语法
docker compose使用.yml
或.yaml
后缀来
参考: https://docs.docker.com/compose/compose-file/
build
指定镜像构建时的dockerfile目录,格式一般为绝对路径目录或相对路径目录(dockerfile需要命名为Dockerfile)
build: /path/to/build/dir
或者
build: ./dir
image
指定要启动容器的镜像
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
如果镜像不存在,compose尝试拉它.
如果指定了构建, 可以使用指定的选项构建它,并使用指定的tag进行标记。
environment
设置镜像变量,它可以保存变量到镜像里面,也就是说启动的容器也会包含这些变量设置
environment
和 Dockerfile 中的 ENV
指令一样会把变量一直保存在镜像,容器中
格式
environment:
RACK_ENV: development
SHOW: 'true'
或
environment:
- RACK_ENV=development
- SHOW=true
expose
这个标签与Dockerfile中的 EXPOSE
指令一样,用于指定暴露的端口,但只将端口暴露给连接的服务,而不暴露给主机.
expose:
- "3000"
- "8000"
ports
映射端口,可以使用 HOST:CONTAINER
的方式指定端口,也可以指定容器端口(选择临时主机端口),宿主机会随机映射端口
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
restart
指定Docker容器的重启策略
默认值为 no
,即在任何情况下都不会重新启动容器
当值为 always
时,容器退出时总是重新启动;概述:(意思就是容器退出时随之关闭,等我容器再次启动时候相对应服务也随之启动)
当值为 on-failure
时,当出现 on-failure
报错(非正常退出,退出状态非0),才会重启容器
当值为unless-stopped
时, 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
restart: "no"
#restart: always
#restart: on-failure
restart: on-failure:3
restart: unless-stopped
volume
数据卷挂载,可以直接使用 HOST:CONTAINER
这样的格式
或者使用 HOST:CONTAINER:ro
这样的格式,ro代表数据卷是只读的
volumes:
# 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
- /var/lib/mysql
# 使用绝对路径挂载数据卷
- /opt/data:/var/lib/mysql
# 以Compose配置文件为为数据卷挂载到容器。
- ./cache:/tmp/cache
# 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
- ~/configs:/etc/configs/:ro
# 已经存在的命名的数据卷。
- datavolume:/var/lib/mysql
depends_on
此标签解决了容器的依赖、启动先后的问题
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: mysql
使用docker-compose up web
启动,会先启动redis和db,再启动web
links
链接到其它服务的中的容器, 与link
连接一样效果,会连接到其它服务中的容器
web:
links:
- db
- db:database
- redis
2.7、编写Yaml
准备工作:
mkdir -p /docker-compose/ownclound
vim docker-compose.yml
编写Yaml:
version: '2'
services:
owncloud:
image: owncloud
restart: always
links:
- mysql:mysql
volumes:
- "/owncloud/db/ownclound:/var/www/html/data"
ports:
- 80:80
- 443:443
mysql:
image: mysql:5.7
restart: always
volumes:
- "/owncloud/db/mysql:/var/lib/mysql"
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: "******"
MYSQL_DATABASE: *****
MYSQL_USER: *****
MYSQL_PASSWORD: ********
执行:
注意:docker-compose
必须在 docker-compose.yml
文件所在目录中执行,否则会报错:
docker-compost up -d
注意:记得要在阿里云安全组中开启Mysql允许3306对外访问端口不然宿主机没有3306对外提供端口
登录界面:
容器镜像中安装命令
apt-get update
apt-get install vim
其他命令以此类推
2.8、绑定域名访问
1、首先在阿里云DNS做好A记录解析域名
2、进owncloud容器镜像
提前备份好配置文件
vim /etc/apache2/sites-enabled/000-default.conf
3、重启apache
/etc/init.d/apache2 restart
4、owncloud添加信任域名
vim config/config.php
再次在浏览器刷新即可!
作者:运维老许
联系方式:strive120620@163.com
微信公众号:Linux必修之路
声明1:本站部分资源收集自互联网,仅供个人学习交流,如不慎侵犯了您的权益,请联系我,我将尽快处理!
声明2:本文版权归作者,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利!
跨界融合的尝试为文章注入新鲜活力。
结论部分可提出实际应用建议,提升价值。