前提

相信大家都用过网盘,比如国外有 Google DriveDropbxOneDrive等,国内有 百度云盘坚果云等,这些都是公共网盘,由于公司业务需要,想架设公司自己用的私有网盘。

目前市面上,稳定、成熟的私有云存储方案有:

Seafile:国内团队开发的一个国际化开源云存储项目
ownCloud:开源专业的私有云存储项目

另外,可以多去关注下 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将所管理的容器分为三层

  1. 工程(project)
  2. 服务(service)
  3. 容器(contaienr)

Docker Compose运行的目录下的所有文件(docker-compose.yml, extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。

一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。

一个服务当中可包括多个容器实例

使用Compose基本上分为三步:

  1. Dockerfile 定义应用的运行环境(镜像)
  2. docker-compose.yml 定义组成应用的各服务
  3. 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
 

再次在浏览器刷新即可!

作者:运维老许

出处:https://www.strives.cn/

联系方式:strive120620@163.com

微信公众号:Linux必修之路

声明1:本站部分资源收集自互联网,仅供个人学习交流,如不慎侵犯了您的权益,请联系我,我将尽快处理!

声明2:本文版权归作者,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利!

最后修改:2021 年 06 月 08 日 09 : 50 AM
请献出你的爱心,你的小小心意,是对博主最大的认可与支持!