Docker容器技术
Docker基础概念
Docker安装配置
通过docker registry搭建私有仓库
Dockerfile编写学习
数据卷管理
Docker 镜像
Docker容器管理
daemon.json配置示例
Dcocker网络互联
Docker部署nextcloud网盘
Watchtower-容器的自动升级
想要轻松上手Docker?Portainer帮你实现零基础快速部署!
Nextcloud搭建
Docker搭建Mrdoc
Mrdoc迁移记录
Docker部署wordpress博客
Docker部署个人密码管理平台bitwarden
Docker-compose安装配置
Docker-compose搭建小说阅读器
Docker搭建青龙面板
Docker搭建自己的导航页dashy
uptime-kuma监控面板部署
容器搭建Nas-tool及相关套件
本文档使用 MrDoc 发布
-
+
首页
Nextcloud搭建
# Docker搭建nextcloud网盘 NextCloud是一款开源网络硬盘系统,它是一个私有、安全且功能完整的文件同步与共享解决方案,可以搭建一套属于自己或团队的云同步网盘。NextCloud的客户端覆盖了各种平台,包括Windows、Mac、Android、iOS、Linux等,也提供了网页端以及WebDAV接口,支持文件共享、权限控制、在线编辑、文件版本控制等功能,同时还有许多插件可以扩展其功能。 这次规划是全部组件使用docker容器进行部署: docker部署见之前的文章:[Docker安装](https://mp.weixin.qq.com/s?__biz=MzU1Mjc0NTI0NQ==&mid=2247484048&idx=1&sn=719d07b08c6097a48d93bbe1874bae35&chksm=fbfc22e2cc8babf48ed687e216e998d933dd185720fd0972e3f14f56367a5cd337e926eb0283#rd) 相关组件: - nextcloud:v25.0.3(主程序容器) - mysql:latest(数据库) - redis:v6.2(缓存) - onlyoffice:latest(在线office文档编辑和查看) - clamav:(文件杀毒-在nextcloud容器内安装) - cron同步任务(容器内部署) 最终实现效果:使用mysql作为数据存储,通过redis缓存数据提高访问速度,能够实现文档的在线查看与编辑,附带文件定时杀毒功能,进行安全防护,所有容器进行端口映射到宿主机。 ## mysql数据库容器部署 ```docker # 创建容器,挂载本地/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 docker pull redis ``` 2、下载配置文件,因为redis需要配置文件进行设置,从网上下载一份挂载到容器内目录。 ```shell wget https://raw.githubusercontent.com/redis/redis/6.2/redis.conf # 修改配置文件 # bind 127.0.0.1注释掉外部机器才能连接 # protected-mode no 设置为no关闭保护模式 ``` 3、创建并运行redis容器 ```shell # 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 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 ```  如果无法连接出现token错误,需要到容器内找到对应秘钥 位置:`/etc/onlyoffice/documentserver/local.json` onlyoccice链接:https://blog.csdn.net/weixin_45261899/article/details/128118162 ## nextcloud容器 ```docker # 拉取镜像 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。 ```shell # 先安装 apt-get install clamav clamav-daemon # 手动更新病毒库 /usr/bin/freshclam # 下载插件应用Antivirus for files ```  ## cron后台任务配置 nextcloud运行后需要执行一些后台cron任务,但是好像自带会有点问题,建议使用cron部署,在容器内部署。 ```shell #首先安装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 ``` ## 标准示例总结 ```shell # 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配置文件示例 ```shell <?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 的值。 解决方法: ```shell # 进入容器 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,刷新浏览器缓存。 ```linux docker restart onlyoffice docker restart nextcloud ``` Nextcloud可以实现多端同步,需配合客户端实现,以后再看下。 最终实现在线网盘,集成mysql、redis、在线文档编辑、杀毒功能,但是的确稍微复杂,过程中也出现很多问题,最新的其实已经可以使用docker-compose部署了,还没整理出来,以后再试下一键部署吧,大概思路如上。
Chuck
2023年12月1日 17:39
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码