已经有很多现成的 docker-compose 文件可以直接部署使用
这里主要记录下如果需要分开部署的配置,可根据需要进行选择
不一定都要配置使用或都为 nextcloud 创建新的容器,可以选择性利用现有容器共享,不过毕竟可能还是一个更隔离的环境问题更少一些
首先不要去 nextcloud 官网找 all in one 的镜像,貌似网上没有什么是基于这个镜像做的
请认准:https://hub.docker.com/_/nextcloud
对应 GitHub 项目:https://github.com/nextcloud/docker
1、使用 Redis 做为缓存
部署 Redis
docker run -d -p 6379:6379 \ --restart=always \ --name nextcloud-redis redis
然后需要在 config/config.php 配置文件中增加或修改配置:
<?php $CONFIG = array ( //'memcache.local' => '\\OC\\Memcache\\APCu', 'memcache.local' => '\\OC\\Memcache\\Redis', 'memcache.distributed' => '\\OC\\Memcache\\Redis', 'memcache.locking' => '\\OC\\Memcache\\Redis', 'redis' => array( 'host' => 'redis', 'port' => 6379 ), 'filelocking.enabled' => 'true', );
2、使用 MySQL 做为数据库
部署 MySQL
docker run -d -p 3306:3306 \ --restart=always \ -v /home/nextcloud/my.cnf:/etc/mysql/my.cnf \ -v /home/nextcloud/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=pwdofnextcloudmysql \ -e MYSQL_DATABASE=nextcloud \ --name nextcloud-mysql mysql
按此配置初始化后,在部署后需要填写的相关信息如下:
账号:root
密码:pwdofnextcloudmysql(请自行按需更改)
数据库名:nextcloud
主机名:mysql
3、在 docker 中部署 nextcloud 容器
将 /var/www/html 映射到宿主机,以便持久化数据
然后链接 MySQL 和 Redis 到 nextcloud 容器以便使用 mysql 与 redis 作为别名访问(非必须,仍可通过 ip 地址访问)
# 部署 nextcloud docker run -d -p 8080:80 \ --restart=always \ -v /home/nextcloud/html:/var/www/html \ --link nextcloud-mysql:mysql \ --link nextcloud-redis:redis \ --name nextcloud nextcloud:latest
部署后第一次初始化数据库请谨慎选择,后期不能轻易更换,官方有迁移指导,未尝试过
1、为了消除“您的安装没有设置默认的电话区域。”的警告,需要在 config/config.php 配置文件中增加或修改配置:
<?php $CONFIG = array ( 'default_phone_region' => 'CN', );
2、为了消除“此实例中的 php-imagick 模块不支持 SVG。” ,可使用以下命令进入容器内安装:
docker exec -it nextcloud /bin/bash apt-get update apt install libmagickcore-6.q16-6-extra
如果默认的 Debian 源获取速度太慢,可以考虑找一个镜像站替换其源
3、如果遇到网络问题,无法在 nextcloud 系统内直接下载插件,可前往:
https://apps.nextcloud.com/
下载离线安装包(压缩包,注意对应好版本)
解压至 apps 或 custom_apps 目录中即可
4、配置 nginx 做为 nextcloud 的反向代理,并使用 https 协议
参考自:https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html
如果不需要 https,请自行进行相应修改吧。。
示例配置如下:
http { # 私有云盘 nextcloud - 测试 server { listen 80; server_name nextcloud.yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。 server_name nextcloud.yourdomain.com; ssl_certificate /ssl_certs/nextcloud.yourdomain.com.pem; # 指定证书的位置,绝对路径 ssl_certificate_key /ssl_certs/nextcloud.yourdomain.com.key; # 绝对路径,同上 ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。 ssl_prefer_server_ciphers on;
# 处理 nextcloud 要求:"Strict-Transport-Security" HTTP 头未设为至少 "15552000" 秒。 add_header Strict-Transport-Security "max-age=15552000; includeSubDomains"; location / { proxy_pass http://10.0.0.2:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; }
# 处理 nextcloud 要求:处理 CardDav、CalDav 兼容性问题 location /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } } }
然后需要在 config/config.php 配置文件中增加或修改配置:
<?php $CONFIG = array ( 'overwritehost' => 'nextcloud.yourdomain.com', 'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'https://nextcloud.yourdomain.com',
);
the end...
参考:https://blog.weiyigeek.top/2020/5-22-100.html
https://blognas.hwb0307.com/linux/docker/234
https://hexo.chensmallx.top/2021/04/08/nextcloud-on-docker/#Nginx%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6