侧边栏壁纸
博主头像
可乐没气的猫博主等级

四分之一的职业法师|二次元的分享家

  • 累计撰写 12 篇文章
  • 累计创建 6 个标签
  • 累计收到 19 条评论

目 录CONTENT

文章目录

20220307 Docker自建一个永不限速的云盘

可乐没气的猫
2022-03-07 / 0 评论 / 0 点赞 / 2,039 阅读 / 4,557 字

前言

NextCloud是一款开源网络硬盘系统。任何人都可以自由的获取 NextCloud 程序,在家庭或公司构建私有且免费的网络硬盘。它是完全由你用户控制的私有、安全且功能完整的文件同步与共享解决方案。

Nextcloud是个人云存储服务,提供云存储服务,内置了Office文档、图片相册、日历联系人、两步验证、文件管理、RSS阅读等丰富的应用。

有了 NextCloud 你可以在自己的计算机上共享任何文件或文件夹,并将它们与 NextCloud 服务器同步。当你把文件放入共享目录,这些文件就会立即同步到 NextCloud 服务器以及所有相关联的 NextCloud / ownCloud 桌面客户端、Android 客户端或 iOS客户端。

具体可以参考NextCloud官方安装文档,支持安装在本地或云主机,本文采用Docker进行部署,拉取官方Docker镜像。

Docker部署NextCloud

使用docker-compose.yml部署【未安装过mysql】

由于Nextcloud还需要数据库的支持,如果单独用docker的话,需要手动依次运行2个容器,因此使用docker-compose部署(从零开始安装,优选这个方式),docker-compose.yml文件内容如下:

# nextcloud docker-compose file
# by Late find<2210395546@qq.com>

version: '2'

services:
  mysql:
    image: mysql:5.7
    container_name: nextmysql
    restart: always
    ports:
      - 3306:3306 # 对外使用3306端口
    volumes: # 数据库持久化存储
      - /root/mysql/db:/var/lib/mysql
      - /root/mysql/conf:/etc/mysql/conf.d
    environment: # 数据库账号和密码
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_PASSWORD=123456
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
  nextcloud:
    image: nextcloud 
    container_name: nextcloud
    restart: always
    ports:
      - 8060:80 # 对外使用8060端口
    volumes:
      - /root/nextcloud:/var/www/html
networks:
  default:
    external:
      name: halongwiz# 替换你自己的容器网络

关于docker-compose.yml文件,需要说明几点:
1、数据库使用镜像mysql:5.7,服务名为mysql。因为是同一容器网络,所以后面界面安装Nextcloud时,连接的数据库主机将localhost->mysql。设置数据库名称、用户和密码和docker-compose.yml文件一致。
2、Nextcloud使用镜像nextcloud,对外提供8060端口,因为笔者云主机的80端口需要做反向代理。
3、为了持久化存储,两个容器都进行目录的挂载。

执行命令,拉取镜像

docker-compose up -d

服务成功启动后,查看其状态:

docker container ls
CONTAINER ID   IMAGE                                COMMAND                  CREATED       STATUS                PORTS                                                                    NAMES
6b974d284dc2   nextcloud                            "/entrypoint.sh apac…"   4 hours ago   Up 3 hours            0.0.0.0:8060->80/tcp                                                     nextcloud
cfc95a223ac5   mysql                                "docker-entrypoint.s…"   10 days ago   Up 7 days             0.0.0.0:3306->3306/tcp, 33060/tcp                                        mysql

状态正常,可以看到nextcloud对外开放了8060(映射到内部的80端口),mysql对外开放了3306(映射到内部的3306端口),因为是部署在公网,不会直接操作数据库,所以防火墙侧不开放上述端口。

使用docker命令行部署【已安装过mysql】

由于笔者之前已经独立安装过mysql,因此只需要独立部署nextcloud。

docker run \
-d \
--name nextcloud \
-p 8060:80 \
-v /root/nextcloud:/var/www/html \
--network halongwiz \ # nginx反向代理网络
--restart=always \
nextcloud

由于我之前安装过mysql,因此需要进入mysql的docker镜像,创建nextcloud的db存储。

docker exec -it mysql bash
mysql -h localhost -u root -p # 按提示输入密码
create database if not exists nexcloud;
create user nxtcloud@localhost identified by '123456'; 
grant all privileges on nextcloud.* to nxtcloud@localhost identified by '123456'; 
flush privileges; 
exit;

配置COS对象存储

在云服务器CVM中,云硬盘CBS将以CVM中的本地硬盘的形式挂载在操作系统中,NextCloud 默认使用文件系统存储网盘数据,因此可以直接将 NextCloud 的数据存储在操作系统中的云硬盘。

对象存储COS简介

对象存储COS以HTTP协议对外提供读写接口,需要通过编程的方式访问COS的存储的对象(文件)。对象存储使用对象键(Key,可以理解为文件路径)作为索引,无存储容量的限制。由于使用网络传输,在速度和延时上相对较大,但因为操作是对象级别,因此一个软件完成一个对象的操作后,另一个软件即可马上操作同一对象,适用于对性能要求不高、需要低成本大容量存储或有共享访问需求的场景。由于网盘应用本身通过网络传输,对延时的要求不高,且从网盘客户端到网盘服务端再到COS的链路中,影响速度与时延的因素主要在于客户端所处的网络环境,而COS本身不限速,因此COS更适合搭配网盘应用。

对象存储COS根据地域定价有所不同,且存在预付费和后付费模式,后付费模式为按需付费,上海地域标准存储单价为0.118元/GB/月,在用于NextCloud 时,需要使用与CVM相同地域的COS服务,此时网络流量走腾讯云的内网,不收取流量费用;此外,COS还会涉及一个请求费用,上海地域单价为0.01元/万次,在网盘应用中,该费用每月仅约几分钱,基本可以忽略【其他地域同理,保持cvm和cos是同一地区即可】。

NextCloud配置COS

nextcloud拉取镜像之后,所有的配置文件均在镜像挂载目录/root/nextcloud下,编辑config.php配置cos。

cp /root/nextcloud/config/config.php /root/nextcloud/config/config.php.bak
vi /root/nextcloud/config/config.php

提前编辑好config.php,输入如下内容并根据注释修改相关的值:

<?php
$CONFIG = array(
'objectstore' => array(
'class' => '\\OC\\Files\\ObjectStore\\S3',
'arguments' => array(
  'bucket' => 'nextcloud-1309390030', // 存储桶名称(空间名称)
  'autocreate' => false,
  'key'  => 'AKIDxxxxxxxx', // 替换为用户的 SecretId
  'secret' => 'xxxxxxxxxxxx', // 替换为用户的 SecretKey
  'hostname' => 'cos.<Region>.myqcloud.com', // 将 <Region> 修改为所属地域,如 ap-shanghai
  'use_ssl' => true,
),
),
);

Nextcloud服务

安装nextcloud

使用浏览器打开http://<IP地址>:8060,输入管理员账号和密码,选择Mysql数据,输入在docker-compose.yml文件设置好的参数,点击“安装完成”即可。``
关于nextcloud安装,需要说明几点:
1、展开【存储与数据库】,根据下表说明进行配置:
|配置项|值|
|-------|-------|
|数据名录|/var/www/nextcloud/data(保持默认)|
|配置数据库|MySQL/MariaDB|
|数据库用户|root|
|数据库密码|初始化云数据库 MySQL 时填写的 root 密码|
|数据库名|nextcloud(或其他未被使用的数据库名)|
|数据库主机|(默认localhost),docker网络下填mysql|
2、单击【安装完成】,等待 NextCloud 服务端完成安装。
3、安装完成后,使用管理员账号登录 NextCloud 服务端即可开始使用网页版 NextCloud。

nextcloud配置截图

反向代理nginx配置

nginx配置文件如下:

server {
    listen      80;
    server_name cloud.findmyfun.xyz;
    return 301 https://$server_name$request_uri;
}
server {
    listen       443 ssl;
    server_name  cloud.findmyfun.xyz;
    ...
    client_max_body_size 1024m;
    location / {
           proxy_pass http://nextcloud;
           proxy_set_header HOST $host;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

有一点需要注意下,采用自定义的域名,需要在安装完成后编辑/root/nextcloud/config/config.php文件

'trusted_domains' =>
  array (
    0 => '<RealIP>:8060', 
    1 => 'cloud.findmyfun.xyz',//添加云盘域名
  ),

'overwriteprotocol' => 'https',//添加https,支持客户端访问

结语

接下来,你的私人永不限速的云盘就搭建好了,enjoy it!

参考文档

1、我的docker随笔19:Nextcloud部署
2、使用 NextCloud + COS 搭建个人网盘
3、Nextcloud常见问题及基本优化
4、Docker部署NextCloud 20.0.4 最新版个人网盘

0

评论区