LOVEJOAN

文章 分类 评论
76 9 1453

站点介绍

人生是一场孤独的旅行,没有终点。。。

Docker搭建nextcloud网盘

chuck 2023-03-15 552 37条评论 LinuxDocker服务器应用 Docker

首页 / 正文

Docker搭建nextcloud网盘

通过容器化搭建高效稳定易用的个人网盘系统。通过mysql提供数据库存储,Redis提供缓存,onlyoffice提供在线协同编辑的功能,然后将容器数据挂载实现数据持久化。

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

拉取镜像

docker pull redis

下载配置文件

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

创建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

nextcloud

docker pull nextcloud
# nextcloud配置文件在/var/ww/html/config/config.php
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => [
    'host' => 'localhost',
    'port' => 6379,
],
# 修改nextcloud电话区域
'default_phone_region' => 'CN',

onlyoffice

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

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

安全杀毒

# 先安装
apt-get install clamav clamav-daemon
# 手动更新病毒库
/usr/bin/freshclam
# 下载插件应用Antivirus for files

持久性

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

# 查看定时任务

标准示例

# 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 /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,刷新浏览器缓存。

评论(37)

  1. 1 游客 2025-03-27 22:40 回复

    1

  2. 1 游客 2025-03-27 22:35 回复

    555

  3. 1 游客 2025-03-27 22:34 回复

    ../../../../../../../../../../etc/passwd%00.jpg

  4. 1 游客 2025-03-27 22:33 回复

    (select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

  5. 1 游客 2025-03-27 22:32 回复

    555

  6. 1 游客 2025-03-27 22:31 回复

    555

  7. 1 游客 2025-03-27 22:30 回复

    555

  8. 1 游客 2025-03-27 22:29 回复

    555

  9. 1 游客 2025-03-27 22:27 回复

    555

  10. @@XVN3l 游客 2025-03-27 22:25 回复

    555

  11. 1-1 waitfor delay '0:0:15' -- 游客 2025-03-27 22:23 回复

    555

  12. 1-1; waitfor delay '0:0:15' -- 游客 2025-03-27 22:22 回复

    555

  13. 1 游客 2025-03-27 22:20 回复

    555

  14. 1 游客 2025-03-27 22:19 回复

    555

  15. 1 游客 2025-03-27 22:18 回复

    555

  16. 1 游客 2025-03-27 22:15 回复

    555

  17. 1 游客 2025-03-27 22:14 回复

    555

热门文章

最新评论

  • 1

    555fulIdEqZ' OR 160=(SELECT 160 FROM PG_SLEEP(15))--

  • 1

    555-1)) OR 58=(SELECT 58 FROM PG_SLEEP(15))--

  • 1

    555-1) OR 13=(SELECT 13 FROM PG_SLEEP(15))--

  • 1

    555-1 OR 475=(SELECT 475 FROM PG_SLEEP(15))--

  • 1

    555

  • 1

    555

  • 1

    5554FobGRsu') OR 696=(SELECT 696 FROM PG_SLEEP(15))--

  • 1

    555C9F0upP1' OR 504=(SELECT 504 FROM PG_SLEEP(15))--

  • 1

    555

  • 1-1; waitfor delay '0:0:15' --

    555

日历

2025年05月

    123
45678910
11121314151617
18192021222324
25262728293031

文章目录