群晖下基于Docker安装Nextcloud时常见问题的解决方案

前言

以下内容为本人自己安装的时的笔记内容(用了1周多的时间,前前后后在自己的DS920上折腾了得有五六十遍,不断试错),主要为内容的整理和标注,目的是为后期再折腾或安装时,提供参考。

不是教程,不是教程,不是教程

最终效果:

终于给我一个绿色的对号

Docker jing

Docker镜像

以下镜像全部都是官方镜像

Maridb(做数据库)

phpmyadmin(管理数据库)

nextcloud(主程序)

redis(做nextcloud缓存)

安装Maridb代码

docker run --name 容器名称 --restart=always -v 文件夹映射路径:/var/lib/mysql -e MARIADB_ROOT_PASSWORD=数据库密码 -d mariadb:latest

举例:

docker run --name mariadb --restart=always -v /volume1/docker/mariadb:/var/lib/mysql -e MARIADB_ROOT_PASSWORD=abc123 -d mariadb:latest

解释:

--name mariadb 创建名为mariadb的容器

--restart=always 设备启动后,容器自动重启

-v /volume1/docker/mariadb 映射的本地文件夹路径

-e MARIADB_ROOT_PASSWORD=abc123 添加一个环境变量,root密码为abc123

-d mariadb:latest 拉取最新的镜像

安装phpmyadmin代码

docker run --name myadmin --restart=always -d --link mariadb:db -p 8050:80 phpmyadmin

安装nextcloud代码

docker run --name nextcloud --restart=always -d --link mariadb:mysql -p 5220:80 -v /volume1/docker/nextcloud:/var/www/html nextcloud

注意:--link mariadb:mysql 已经将数据库连接到名称为mariadb的容器,所以在安装Nextcloud的时候,数据库地址一栏,只需填写mysql即可,无需填写IP地址和端口号

微信图片_20230514083528

数据库地址写mysql

安装redis代码

docker run --name redis -v /volume1/docker/redis:/data -d redis

安装

安装时,不要安装推荐的应用。因为推荐应用都是从github下载的,所以基本都被ban了,无法下载安装。

https访问不跳转

config.php中添加如下代码:

'overwriteprotocol' => 'https',

您的安装没有设置默认的电话区域

config.php中添加如下代码:

'default_phone_region' => 'CN',

redis做缓存

config.php中添加如下代码:

'memcache.local' => '\OC\Memcache\APCu',
#以下为添加的内容
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
    'host' => '172.17.0.5',
    'port' => 6379,
),

其中6379为默认的redis端口号,172.17.0.5为redis容器在Docker中的IP。

查询redis容器在Docker中的IP

用以下代码查询:

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

重定向失败问题

nextcloud/.htaccess中找到如下2行代码:

RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]

将以上2行代码替换为如下代码:

RewriteRule ^\.well-known/carddav https://www.abc.com:1234/remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav https://www.abc.com:1234/remote.php/dav/ [R=301,L]

其中https://www.abc.com:1234是你自己的域名和端口号(通常在群晖的反向代理中设置)

安装libmagickcore-6.q16-6-extra

#先运行如下代码:
docker exec -it <nextcloud> apt -y update
#再运行如下代码:
docker exec -it <nextcloud> apt -y install libmagickcore-6.q16-6-extra

其中为你安装nextcloud容器时的名称,比如我安装nextcloud时,用的容器名称就是nextcloud,则只需要输入以下代y码:

docker exec -it nextcloud apt -y update
docker exec -it nextcloud apt -y install libmagickcore-6.q16-6-extra

验证redis是否成功

root下:

# redis-cli
127.0.0.1:6379> PING
PONG                  #说明成功
127.0.0.1:6379>KEYS *      #返回值若为一堆代码,即成功

输入KEYS *后,若出现如下一堆代码,即NEXTCLOUD已经开始使用redis作为缓存

设置和验证你的电子邮件服务器配置

处理方法较为简单,只需要到【基本设置】中输入自己邮箱的smtp相关信息即可,无论是网易163邮箱,还是QQ邮箱,还是XXX邮箱,都有基本的smtp设置方法,可单独百度了解。

无法访问:

config.php中,把https://域名+端口,添加进信任的域名:

'trusted_domains' =>
array (
  0 => '你的内网IP+端口,比如192.168.1.69:1234',
  1 => '你的域名+端口,比如www.abcxyz.com:1234',

无法写入:

config.php权限,新增一个系统权限,让其可读可写。

安装onlyoffice代码:

docker run --name onlyoffice --restart=always -t -d -p 5099:80 \
    -v /volume1/docker/onlyoffice/logs:/var/log/onlyoffice  \
    -v /volume1/docker/onlyoffice/data:/var/www/onlyoffice/Data  onlyoffice/documentserver

同样安装完,进行反向代理,并在路由器设置端口转发。通过https访问后,如果出现如下页面,即成功。若没出现,稍等片刻再试即可。(曾尝试直接通过443,或者直接添加证书的方法,但是https均失败,最后还是反向代理实现。)

参考资料

https://github.com/nextcloud/docker/issues/654
https://www.virtualconfusion.net/docker-nextcloud-module-php-imagick-in-this-instance-has-no-svg-support/
https://blog.lordvan.com/blog/nextcloud-redis/
https://coble.uk/2020/09/24/speeding-up-nextcloud-with-redis/
最后修改:2023 年 05 月 14 日
如果觉得我的文章对你有用,请随意赞赏