当前位置: 首页 > news >正文

【惊喜福利】Docker容器化部署nextcloud网盘,享受高速稳定的文件共享体验!

Docker搭建nextcloud网盘

NextCloud是一款开源网络硬盘系统,它是一个私有、安全且功能完整的文件同步与共享解决方案,可以搭建一套属于自己或团队的云同步网盘。NextCloud的客户端覆盖了各种平台,包括Windows、Mac、Android、iOS、Linux等,也提供了网页端以及WebDAV接口,支持文件共享、权限控制、在线编辑、文件版本控制等功能,同时还有许多插件可以扩展其功能。

这次规划是全部组件使用docker容器进行部署: docker部署见之前的文章:Docker安装

相关组件:

  • nextcloud:v25.0.3(主程序容器)
  • mysql:latest(数据库)
  • redis:v6.2(缓存)
  • onlyoffice:latest(在线office文档编辑和查看)
  • clamav:(文件杀毒-在nextcloud容器内安装)
  • cron同步任务(容器内部署)

最终实现效果:使用mysql作为数据存储,通过redis缓存数据提高访问速度,能够实现文档的在线查看与编辑,附带文件定时杀毒功能,进行安全防护,所有容器进行端口映射到宿主机。

mysql数据库容器部署

# 创建容器,挂载本地/keli/data/目录,设置root密码
docker run -d --name mysql -v /keli/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345678 mysql
# 进入容器创建数据库和用户并分配权限
docker exec -it mysql /bin/bash
# 登录数据库
mysql -uroot -p
# 创建数据库
create database nextcloud \
default character set utf8 \
collate utf8_general_ci;
# 创建用户、分配权限
CREATE USER nextcloud@'%' IDENTIFIED BY 'nextcloud';
GRANT ALL ON nextcloud.* TO nextcloud@'%';
flush privileges;

redis容器

1、拉取镜像

docker pull redis

2、下载配置文件,因为redis需要配置文件进行设置,从网上下载一份挂载到容器内目录。

wget https://raw.githubusercontent.com/redis/redis/6.2/redis.conf
# 修改配置文件
# bind 127.0.0.1注释掉外部机器才能连接
# protected-mode no 设置为no关闭保护模式

3、创建并运行redis容器

# requirepass redis 连接密码
# daemonize : 是否后台运行,将其设为no,表示前台运行。
# appendonly : 是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
docker run -p 6379:6379 \
--name redis \
-v /keli/redis/redis.conf:/etc/redis/redis.conf \
-v /keli/redis/data:/data  \
redis redis-server /etc/redis/redis.conf --appendonly yes \
--privileged=true

参考配置:https://blog.csdn.net/sh2018/article/details/128044669

onlyoffice容器部署

OnlyOffice是一个在线办公套件,旨在提供一个安全、高效的协作环境。它支持多种文档格式的编辑和协作处理,包括Word、Excel、PowerPoint等,可以在浏览器、电脑、手机或平板电脑上使用。OnlyOffice支持多种云服务集成,如Box、Moodle、Nextcloud、Odoo、Wordpress等,方便用户在不同平台和应用程序之间进行切换。

onlyoffice部署完成之后需要再nextcloud上使用插件连接。

23版本的nextcloud需要通过官网应用商店下载onlyoffice插件上传到/var/www/html/apps/下,一般将目录映射到宿主机,因此传输到宿主机目录即可。

官网链接:https://apps.nextcloud.com/apps/onlyoffice

docker run -i -t -d -p 8888:80 --restart=always --name onlyoffice \
-v /keli/onlyoffice/log:/var/log/onlyoffice \
-v /keli/onlyoffice/data:/var/www/onlyoffice/Data \
-v /keli/onlyoffice/lib:/var/lib/onlyoffice \
-v /keli/onlyoffice/db:/var/lib/postgresql onlyoffice/documentserver

onlyoffice设置
onlyoffice设置

如果无法连接出现token错误,需要到容器内找到对应秘钥 位置:/etc/onlyoffice/documentserver/local.json onlyoccice链接:https://blog.csdn.net/weixin_45261899/article/details/128118162

nextcloud容器

# 拉取镜像
docker pull nextcloud
# 创建运行容器
docker run -d --name nextcloud -h nextcloud --restart=always \
--link mysql:mysql \
--link redis:redis \
--link onlyoffice:onlyoffice \
-v /mnt/nextcloud/html/:/var/www/html/ \
-p 8520:80 nextcloud:25.0.3


# 使用link链接组件容器,映射nextcloud主目录到宿主机的/mnt/nextcloud/html,宿主机端口可以自行设置,容器内默认是80端口。

Clamav安全杀毒

ClamAV的核心是一个以共享库形式提供的反病毒引擎,它可检测数百万种病毒、蠕虫、特洛伊木马和其他恶意软件,包括宏病毒和移动恶意软件。如果是在docker部署,需要在容器内使用apt安装,记得先更新apt源。安装完成后也是使用nextcloud插件形式连接ClamAV。

# 先安装
apt-get install clamav clamav-daemon

#
 手动更新病毒库
/usr/bin/freshclam
# 下载插件应用Antivirus for files

clamav杀毒
clamav杀毒

cron后台任务配置

nextcloud运行后需要执行一些后台cron任务,但是好像自带会有点问题,建议使用cron部署,在容器内部署。

#首先安装cron服务
apt-get update && apt-get install cron

#
 安装完了立马把原来的cron任务停了, 因为貌似是不好用的。
crontab -u www-data -e

#
 将里面的任务删除。
# 接下来,将任务运行在当前docker的root用户下面:
crontab -e
# 其中的任务表, 这里假设你把nextcloud安装到/var/www/html下边了:
*/5 * * * * sudo -u www-data php -f /var/www/html/cron.php

#
 分配权限给www-data
chmod 755 cron.php

#
 有可能需要将www-data的用户shell修改才能执行定时任务
usermod -s /bin/bash www-data

#
 查看定时任务
crontab -l

标准示例总结

# mysql数据库
docker run -d --restart=always --name mysql -v /mnt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=KELI81958899 -h mysql mysql
# 登录容器
docker exec -it mysql /bin/bash
# 登录数据库
mysql -uroot -p
# 创建数据库
create database nextcloud \
default character set utf8 \
collate utf8_general_ci;
# 创建用户、分配权限
CREATE USER nextcloud@'%' IDENTIFIED BY 'nextcloud';
GRANT ALL ON nextcloud.* TO nextcloud@'%';
flush privileges;

#
 redis容器
docker run -d -h redis --name redis --restart=always \
-v /mnt/redis/redis.conf:/etc/redis/redis.conf \
-v /mnt/redis/data:/data  \
redis redis-server /etc/redis/redis.conf --appendonly yes


#
 onlyoffice,最好自定义好秘钥
docker run -d --restart=always --name onlyoffice -h onlyoffice \
--link redis:redis \
-v /mnt/onlyoffice/log:/var/log/onlyoffice \
-v /mnt/onlyoffice/data:/var/www/onlyoffice/Data \
-v /mnt/onlyoffice/lib:/var/lib/onlyoffice \
-v /mnt/onlyoffice/db:/var/lib/postgresql onlyoffice/documentserver

#
 nextcloud部署
docker run -d --name nextcloud -h nextcloud --restart=always \
--link mysql:mysql \
--link redis:redis \
--link onlyoffice:onlyoffice \
-v /mnt/nextcloud/html/:/var/www/html/ \
-p 8520:80 nextcloud:25.0.3

#
 安全,安装apt更新,然后下载clamav杀毒,执行定时任务
apt update  更新apt
apt list --upgradable  更新下载软件列表
apt-get install clamav clamav-daemon 安装杀毒
/usr/bin/freshclam 手动更新病毒库
下载nextcloud插件,设置杀毒策略

nextcloud配置文件示例

<?php
$CONFIG = array (
  'htaccess.RewriteBase' => '/',
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'redis' => [
        'host' => 'redis',
        'port' => 6379,
  ],
  'apps_paths' =>
  array (
    0 =>
    array (
      'path' => '/var/www/html/apps',
      'url' => '/apps',
      'writable' => false,
    ),
    1 =>
    array (
      'path' => '/var/www/html/custom_apps',
      'url' => '/custom_apps',
      'writable' => true,
    ),
  ),
  'instanceid' => 'ocejidmi08mu',
  'passwordsalt' => 'EMyIvJh/XZMha6JXyt3CWwDPlQX+TJ',
  'secret' => 'TO2HAPGS2Z1dwHnv/Hh3te2rnIQ9ishwIBjlSqVHkxngqDNj',
  'trusted_domains' =>
  array (
    0 => '10.10.1.1',
  ),
  'datadirectory' => '/var/www/html/data',
  'dbtype' => 'mysql',
  'version' => '25.0.3.2',
  'overwrite.cli.url' => 'http:/10.10.1.1',
  'dbname' => 'nextcloud',
  'dbhost' => 'mysql:3306',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'nextcloud',
  'dbpassword' => 'nextcloud',
  'installed' => true,
  'default_language' => 'zh_CN',
  'default_locale' => 'zh',
  'allow_local_remote_servers' => true,
  'default_phone_region' => 'CN',
);

性能优化与故障处理

1、PHP OPcache 模块没有正确配置。更多信息请参见文档 ↗。 OPcache 内部字符串缓存几乎已满。为确保重复的字符串可以被有效地缓存,建议在您的 PHP 设置中 opcache.interned_strings_buffer 设置一个高于 16 的值。

解决方法:

# 进入容器
docker exec -it nextcloud bash
# 使用vim编辑文件,如果没有先安装vim
vim /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
# 添加下面配置
opcache.memory_consumption=128
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.save_comments=1
# 然后重启php

2、添加onlyoffice 将windows系统的字体复制到/usr/share/fonts/truetype/custom/fonts/下 在容器内执行/usr/bin/documentserver-generate-allfonts.sh脚本更新程序 重启容器,清除浏览器缓存

修改onlyoffice字号设置 将容器内文件/var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main/app.jsf复制到宿主机进行修改 在{value:8,displayValue:“8”}前面增加相应的显示。

{value:42,displayValue:"初号"},{value:36,displayValue:"小初"},{value:26,displayValue:"一号"},{value:24,displayValue:"小一"},{value:22,displayValue:"二号"},{value:18,displayValue:"小二"},{value:16,displayValue:"三号"},{value:15,displayValue:"小三"},{value:14,displayValue:"四号"},{value:12,displayValue:"小四"},{value:10.5,displayValue:"五号"},{value:9,displayValue:"小五"},{value:7.5,displayValue:"六号"},{value:6.5,displayValue:"小六"},{value:5.5,displayValue:"七号"},{value:5,displayValue:"八号"},

然后重启onlyoffice和nextcloud,刷新浏览器缓存。

docker restart onlyofficedocker restart nextcloud

Nextcloud可以实现多端同步,需配合客户端实现,以后再看下。

最终实现在线网盘,集成mysql、redis、在线文档编辑、杀毒功能,但是的确稍微复杂,过程中也出现很多问题,最新的其实已经可以使用docker-compose部署了,还没整理出来,以后再试下一键部署吧,大概思路如上。

本文由 mdnice 多平台发布

相关文章:

【惊喜福利】Docker容器化部署nextcloud网盘,享受高速稳定的文件共享体验!

Docker搭建nextcloud网盘 NextCloud是一款开源网络硬盘系统&#xff0c;它是一个私有、安全且功能完整的文件同步与共享解决方案&#xff0c;可以搭建一套属于自己或团队的云同步网盘。NextCloud的客户端覆盖了各种平台&#xff0c;包括Windows、Mac、Android、iOS、Linux等&am…...

WPF实战项目十九(客户端):修改RestSharp的引用

修改HttpRestClient&#xff0c;更新RestSharp到110.2.0&#xff0c;因为106版本和110版本的代码不一样&#xff0c;所以需要修改下代码 using Newtonsoft.Json; using RestSharp; using System; using System.Threading.Tasks; using WPFProjectShared;namespace WPFProject.S…...

kobs-ng 烧写nand中的uboot

如何获取kobs-ng 我是使用buildroot自动编译的imx-kobs&#xff0c;生成了kobs-ng可执行文件。 使用 kobs-ng 烧写 u-boot 1. flash_erase /dev/mtd0 0 0 //擦除uboot所在分区 2. 挂载 debugfs mount -t debugfs debugfs /sys/kernel/debug 如果不挂载为报以下错误&#x…...

【Java】扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问该用户是否要删除该文件

题目如下 扫描指定目录&#xff0c;并找到名称中包含指定字符的所有普通文件(不包含目录)&#xff0c;并且后续询问该用户是否要删除该文件 本题是关于文件I/O知识中对文件系统操作的应用&#xff0c;解答的完整代码如下&#xff08;需要的uu自取&#xff09;⬇️ 在完整…...

PyQt基础_008_ 按钮类控件QSpinbox

基本操作 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class spindemo(QWidget):def __init__(self, parentNone):super(spindemo, self).__init__(parent)self.setWindowTitle("SpinBox 例子")self.resize(300,…...

3D点云目标检测:VoxelNex解读

VoxelNext 通用检测器 vs VoxelNext一、3D稀疏卷积模块1.1、额外的两次下采样消融实验结果代码 1.2、稀疏体素删减消融实验&#xff1a;代码 二、稀疏体素高度压缩代码 三、稀疏预测head 通用检测器 vs VoxelNext 一、3D稀疏卷积模块 1.1、额外的两次下采样 使用通用的3D spa…...

opencv-利用DeepLabV3+模型进行图像分割去除输入图像的背景

分离图像中的人物和背景通常需要一些先进的图像分割技术。GrabCut是一种常见的方法&#xff0c;但是对于更复杂的场景&#xff0c;可能需要使用深度学习模型。以下是使用深度学习模型&#xff08;如人像分割模型&#xff09;的示例代码&#xff1a; #导入相关的库 import cv2 …...

中国版的 GPTs:InsCode AI 生成应用

前言 在上一篇文章 《InsCode&#xff1a;这可能是下一代应用开发平台&#xff1f;》中&#xff0c;我们介绍了一个新的应用开发平台 InsCode&#xff0c;它是基于云原生开发环境 云 IDE AI 辅助编程的一站式在线开发平台。 最近&#xff0c;InsCode 又推出了另一种全新的开…...

MySQL 学习笔记(刷题篇)

SQL进阶挑战 聚合分组查询 SQL123 select tag, difficulty, round((sum(score) - max(score) - min(score) ) / (count(score) - 2) ,1) as clip_avg_score from examination_info as ei, exam_record as er where ei.exam_id er.exam_id and ei.tag SQL and ei.diffi…...

windows系统如何配置yarn环境变量

启动前端项目&#xff0c;突然遇到报错&#xff1a; 原因在于没有安装yarn&#xff0c;或没有配置环境变量。 全局安装 yarn 可在vsCode中输入&#xff0c;也可在命令行输入&#xff08;winR&#xff0c;输入cmd&#xff09; npm install -g yarn添加环境变量 找到yarn的安…...

视频中的文字水印怎么去除?这三招学会轻松去视频水印

短视频与我们生活&#xff0c;工作息息相关&#xff0c;日常在在刷短视频时&#xff0c;下载保存后发现带有文字logo水印&#xff0c;如果直接拿来进行二次创作&#xff0c;不仅影响观看效果&#xff0c;平台流量还会受限制。怎么去除视频中的文字水印就成为了当下热门话题之一…...

Java项目学生管理系统二查询所有

学生管理 近年来&#xff0c;Java作为一门广泛应用于后端开发的编程语言&#xff0c;具备了广泛的应用领域和丰富的开发资源。在前几天的博客中&#xff0c;我们探讨了如何搭建前后端环境&#xff0c;为接下来的开发工作打下了坚实的基础。今天&#xff0c;我们将进一步扩展我…...

27.Spring如何避免在并发下获取不完整的Bean?

Spring如何避免在并发下获取不完整的Bean? 1、为什么获取不到完整的Bean? 我们知道, 如果spring容器已经加载完了, 那么肯定所有bean都是完整的了, 但如果, spring没有加载完, 在加载的过程中, 构建bean就有可能出现不完整bean的情况 2、如何解决读取到不完整bean的问题. …...

浅析SD-WAN企业组网部署中简化网络运维的关键技术

网络已经成为现代企业不可或缺的基础设施&#xff0c;它为企业提供了连接全球的桥梁。随着全球化和数字化转型的加速推进&#xff0c;企业面临着越来越多的网络挑战和压力。传统的网络组网方式往往无法满足企业规模扩大、分支机构增多、上云服务等需求&#xff0c;导致网络性能…...

【Rust】快速教程——自定义类型、数字转枚举、Cargo运行

前言 超过一定的年龄之后&#xff0c;所谓人生&#xff0c;无非是一个不断丧失的过程而已。宝贵的东西&#xff0c;会像梳子豁了齿一样从手中滑落下去。你所爱的人会一个接着一个&#xff0c;从身旁悄然消逝。——《1Q84》 \;\\\;\\\; 目录 前言自定义类型数字转枚举Cargo.tom…...

python 实现 AIGC 大语言模型中的概率论:生日相同问题的代码场景模拟

对深度学习本质而言&#xff0c;它实际上就是应用复杂的数学模型对输入数据进行建模&#xff0c;最后使用训练好的模型来预测或生成新的数据&#xff0c;因此深度学习的技术本质其实就是数学。随着大语言模型的发展&#xff0c;人工智能的数学本质被进一步封装&#xff0c;从业…...

SD-WAN组网中的CPE及云服务CPE部署方法

什么是CPE&#xff1f; CPE全称为Customer Premises Equipment&#xff0c;即客户端设备&#xff0c;在SD-WAN中通常为路由器&#xff0c;部署在中心点和分支上&#xff0c;提供连接和路由、协议转换、流量监控等功能。一般可分为硬件CPE和虚拟化CPE&#xff08;virtual CPE&a…...

理解BatchNormalization层的作用

深度学习 文章目录 深度学习前言一、“Internal Covariate Shift”问题二、BatchNorm的本质思想三、训练阶段如何做BatchNorm四、BatchNorm的推理(Inference)过程五、BatchNorm的好处六、机器学习中mini-batch和batch有什么区别 前言 Batch Normalization作为最近一年来DL的重…...

uniapp实现文件预览过程

H5实现预览 <template><iframe :src"_url" style"width:100vw; height: 100vh;" frameborder"0"></iframe> </template> <script lang"ts"> export default {data() {return {_url: ,}},onLoad(option…...

深度学习-学习笔记记录

1、点云语义分割方法分类 分为5类&#xff1a;点、二维投影、体素、融合、集成 2、融合与集成的区别 融合&#xff1a; 概念&#xff1a;主要是将不同来源、类型的模型&#xff0c;例如深度学习、传统机器学习等&#xff0c;的结果或特征进行结合&#xff0c;以得到一个更好的模…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...