使用 docker 部署 nextcloud

已经有很多现成的 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

posted @ 2022-07-23 17:09  不是豆豆  阅读(4773)  评论(0编辑  收藏  举报
友情链接:迷途