前言
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。
反向代理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 最新版个人网盘
评论区