Docker安装Nextcloud

1、编排配置nextcloud

compose文件由三个组件组成,分别是主程序、缓存、数据库

version: '3.2'

networks:
  default:
    name: nextcloud
    driver: bridge
    ipam:
      config:
        - subnet: 172.10.0.0/16
          gateway: 172.10.0.1

services:
  app:
    image: nextcloud:27.1.4
    restart: unless-stopped
    volumes:
      - /data/nextcloud/app:/var/www/html
    environment:
      - MYSQL_PASSWORD=Quectel@2023
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=Quectel
      - MYSQL_HOST=db
      - TZ=Asia/Shanghai
    ports:
      - 81:80
    networks:
      default:
        ipv4_address: 172.10.0.4
    container_name: Q-nextcloud

  cache:
    image: redis:latest
    restart: unless-stopped
    expose:
     - "6379" 
    volumes:
     - /data/nextcloud/cache:/data
    command: redis-server --requirepass '密码***'
    environment:
      - TZ=Asia/Shanghai
    networks:
      default:
        ipv4_address: 172.10.0.3
    container_name: Q-redis

  db:
    image: mariadb:latest
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
    volumes:
      - /data/nextcloud/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=密码***
      - MYSQL_PASSWORD=密码***
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=admin
      - TZ=Asia/Shanghai
    ports:
      - 8888:3306
    networks:
      default:
        ipv4_address: 172.10.0.2
    container_name: Q-mariadb
    
  nginx:
    image: nginx:1.25.2
    restart: always
    ports:
      - 443:443
      - 85:85
    volumes:
      - /data/nextcloud/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /data/nextcloud/nginx/logs:/var/log/nginx
      - /data/nextcloud/nginx/html:/usr/share/nginx/html
      - /data/nextcloud/nginx/conf.d:/etc/nginx/conf.d      
      - /data/nextcloud/certs:/data/nextcloud/certs
      - /data/nextcloud/www:/data/nextcloud/www
    environment:
      - TZ=Asia/Shanghai
    networks:
      - default
    container_name: Q-nginx
    

查询最新版本号

docker inspect nextcloud

2、配置网盘的缓存

Nextcloud主程序的安装目录,在目录下 config/config.php 配置文件并打开

'memcache.local' => '\\OC\\Memcache\\APCu',
#在memcache.local下面加如下代码
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>   array (
    'host' => 'cache',
    'port' => 6379,
    'password' => 'Quectel@2023',
  ),

配置文件里面,local缓存保持原来的apcu,官方并不推荐local缓存用redis。

然后在配置文件里面随便找个地方加一行这个参数,解决系统关于电话区域的警告。

'default_phone_region' => 'CN',

3、用户默认文档配置

默认在目录core/skeleton下,更改core/Quectel文件夹,

Quectel文件夹新建

还是在config/config.php 配置文件并打开在最后加上

'skeletondirectory' => 'core/Quectel',

⽂件权限为:644

⽬录权限为:755

chmod 755 ./core/Quectel

4、cronie配置定时任务

需要由系统用户“www-data”执行每 5 分钟调用 cron.php 文件

docker exec -u www-data Q-nextcloud php cron.php 

使用cronie 定时任务

crontab -e

添加任务行 5 分钟一次

*/5 * * * * docker exec -u www-data Q-nextcloud php cron.php

5、生成ssl证书

生成私钥和自签名证书

openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/certs/domain.key -x509 -days 36500 -out /data/certs/domain.crt -subj "/C=CN/ST=Jiangsu/L=Changzhou/O=Quectel/OU=IT/CN=10.11.11.11"

6、nginx配置ssl

server {
    listen 443 ssl;
    server_name localhost;

    ssl_certificate /data/nextcloud/certs/domain.crt;
    ssl_certificate_key /data/nextcloud/certs/domain.key;
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always; 

    location / {
        proxy_pass http://172.10.0.2;  
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto 'https';
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

    }
    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 配置文件加信任

#在ip下面增加域名,这时候就不会提示不信任域名了。
'trusted_domains' => 
array (
    0 => '10.11.11.11',
    1 => 'www.xxx.com',
  ),
  

nginx内网段加信任

'trusted_proxies' =>
array (
  0 => '172.10.0.0/24',
  1 => '127.10.0.1',
),

重写端口映射

'overwrite.cli.url' => 'http://10.11.11.11:170,
#如果是有端口需要重新写映射
'overwrite.cli.url' => 'https://www.xxx.com:170,
#overwrite.cli.url使用任何类型的命令行工具在Nextcloud中生成的任何URL的基本URL。例如,此处设置的值将由通知区域使用
'overwritehost' =>  'www.xxx.com:170',
#设置代理的主机名。您还可以指定端口
'overwriteprotocol' => 'https',
#overwriteprotocol设置代理的协议。您可以在 http 和 https 这两个选项之间进行选择。。 


  'overwrite.cli.url' => 'https://10.11.11.11',
  'overwriteprotocol' => 'https',