Wiki is under a full-reconstruction. Please be patient and look for updates!
Оптимизация Nextcloud
Ниже — набор практик для повышения производительности и отзывчивости Nextcloud.
Шаги оптимизации
Раздел «Шаги оптимизации»Пошаговый план настройки:
- reverse proxy SWAG через cloudflare
- Nextcloud
- Redis
- Mariadb
- Collabora
- Notify push
- Talk high performance backend
- Whiteboard
- Imaginary
- Draw.io
- Maintenance
SWAG
Раздел «SWAG»- Создайте аккаунт Cloudflare и укажите его как nameserver для вашего домена.
- Создайте DNS-записи для
domain.comи*.domain.comс WAN IP вашего дома, отключите orange cloud. - Настройте проброс
443на ваш сервер в домашнем роутере. - Добавьте SWAG в docker compose и запустите.
swag: image: lscr.io/linuxserver/swag:latest container_name: swag cap_add: - NET_ADMIN environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC - URL=domain.com - VALIDATION=dns - SUBDOMAINS=wildcard - DNSPLUGIN=cloudflare - PROPAGATION=60 - SWAG_AUTORELOAD=true volumes: - /path/to/swag:/config ports: - 443:443 - 80:80 restart: unless-stopped- Создайте API token Cloudflare с правами
DNS:Read, DNS:Editдляdomain.comи скопируйте токен. - Откройте
/path/to/swag/dns-conf/cloudflare.ini, удалите содержимое и вставьте:
dns_cloudflare_api_token = token- Переименуйте
/path/to/swag/nginx/proxy-confs/nextcloud.subdomain.conf.sampleвnextcloud.subdomain.conf. - Отредактируйте
/path/to/swag/nginx/ssl.confи раскомментируйте HSTS и все дополнительные заголовки внизу. - Перезапустите SWAG и убедитесь, что
domain.comоткрывает welcome page с валидным сертификатом.
Nextcloud
Раздел «Nextcloud»nextcloud: image: lscr.io/linuxserver/nextcloud:latest container_name: nextcloud environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC volumes: - /path/to/nextcloud/config:/config - /path/to/nextcloud/data:/data restart: unless-stopped depends_on: - mariadbmariadb: image: lscr.io/linuxserver/mariadb:latest container_name: mariadb environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC - MYSQL_ROOT_PASSWORD=nextcloud_root_password - MYSQL_DATABASE=nextcloud_db - MYSQL_USER=nextcloud_user - MYSQL_PASSWORD=nextcloud_password volumes: - /path/to/mariadb:/config restart: unless-stoppedredis: image: redis:alpine container_name: redis restart: unless-stopped- Перейдите на
https://nextcloud.domain.comи заполните данные для Nextcloud и Mariadb.
- Выберите рекомендуемые приложения для установки.
- Выполните команды.
docker exec nextcloud occ app:disable richdocumentscodedocker exec nextcloud occ maintenance:repair --include-expensivedocker exec nextcloud occ db:add-missing-indicesdocker exec -u abc nextcloud mkdir -p /config/log/nextclouddocker exec nextcloud occ config:system:set overwrite.cli.url --value='https://nextcloud.domain.com'docker exec nextcloud occ config:system:set memcache.local --value='\\OC\\Memcache\\APCu'docker exec nextcloud occ config:system:set memcache.locking --value='\\OC\\Memcache\\Redis'docker exec nextcloud occ config:system:set memcache.distributed --value='\\OC\\Memcache\\Redis'docker exec nextcloud occ config:system:set logfile --value='/config/log/nextcloud/nextcloud.log'docker exec nextcloud occ config:system:set trusted_proxies 0 --value='172.16.0.0/12'docker exec nextcloud occ config:system:set trusted_proxies 1 --value='127.0.0.1'docker exec nextcloud occ config:system:set trusted_proxies 2 --value='::1'docker exec nextcloud occ config:system:set redis host --value='redis'docker exec nextcloud occ config:system:set redis port --value=6379 --type=integerdocker exec nextcloud occ config:system:set loglevel --value=2 --type=integerdocker exec nextcloud occ config:system:set log_rotate_size --value=10485760 --type=integerdocker exec nextcloud occ config:system:set maintenance_window_start --value=1 --type=integerdocker exec nextcloud occ config:system:set filesystem_check_changes --value=1 --type=integerdocker exec nextcloud occ config:system:set filelocking.enabled --value=true --type=boolean- Добавьте в
/path/to/nextcloud/config/php/www2.conf:
pm = dynamicpm.max_children = 120pm.start_servers = 12pm.min_spare_servers = 6pm.max_spare_servers = 18- Перезапустите Nextcloud, чтобы применить изменения.
Collabora
Раздел «Collabora»- Добавьте Collabora в docker compose и запустите.
collabora: image: collabora/code container_name: collabora environment: - DONT_GEN_SSL_CERT=1 - aliasgroup1=https://nextcloud.domain.com - dictionaries=en_US - server_name=nextcloud.domain.com - extra_params=--o:security.capabilities=false --o:ssl.enable=false --o:ssl.termination=true --o:logging.level=caution --o:net.post_allow.host[0]=.+ --o:home_mode.enable=true --o:mount_jail_tree=false --o:mount_namespaces=false --o:remote_font_config.url=https://nextcloud.domain.com/apps/richdocuments/settings/fonts.json restart: unless-stopped cap_add: - SYS_CHROOT - MKNOD- Добавьте следующие location-блоки в
/path/to/swag/nginx/proxy-confs/nextcloud.subdomain.confвнутриserver.
location ^~ /browser/ { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app collabora; set $upstream_port 9980; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port;}location ^~ /hosting/ { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app collabora; set $upstream_port 9980; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port;}location ^~ /cool/ { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app collabora; set $upstream_port 9980; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port;}- Выполните команды.
docker exec nextcloud occ app:enable richdocumentsdocker exec nextcloud occ config:app:set richdocuments wopi_url --value https://nextcloud.domain.comdocker exec nextcloud occ config:app:set richdocuments wopi_allowlist --value=0.0.0.0/0docker exec nextcloud occ config:app:set richdocuments doc_format --value=ooxml- Отключите dark mode Collabora в View > Dark Mode.
Notify Push
Раздел «Notify Push»- Добавьте переменную окружения в Nextcloud compose и пересоздайте контейнер.
environment: - DOCKER_MODS=linuxserver/mods:nextcloud-notify-pushTalk high performance backend
Раздел «Talk high performance backend»- Сгенерируйте 3 секрета командой ниже и вставьте их в compose.
openssl rand -hex 32- Добавьте high performance backend в docker compose и запустите.
talk: image: nextcloud/aio-talk:latest container_name: talk init: true ports: - 3478:3478/tcp - 3478:3478/udp environment: - NC_DOMAIN=nextcloud.domain.com - TALK_HOST=talk.domain.com - TZ=Etc/UTC - TALK_PORT=3478 - TURN_SECRET=secret - SIGNALING_SECRET=secret - INTERNAL_SECRET=secret restart: unless-stopped- Добавьте в конец
/path/to/swag/nginx/proxy-confs/nextcloud.subdomain.conf:
server { listen 443 ssl; listen [::]:443 ssl; server_name talk.*; include /config/nginx/ssl.conf; client_max_body_size 0;
location / { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app talk; set $upstream_port 8081; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; }}- Выполните команды с секретами, сгенерированными ранее.
docker exec nextcloud occ talk:signaling:add --verify https://talk.domain.com SIGNALING_SECRETdocker exec nextcloud occ talk:stun:add talk.domain.com:3478docker exec nextcloud occ talk:turn:add --secret TURN_SECRET turn talk.domain.com:3478 udp,tcp- По желанию пробросьте
3478на роутере.
Whiteboard
Раздел «Whiteboard»- Сгенерируйте секрет командой и вставьте ниже.
openssl rand -hex 32- Добавьте Whiteboard в docker compose и запустите.
whiteboard: image: ghcr.io/nextcloud-releases/whiteboard:release container_name: whiteboard environment: - NEXTCLOUD_URL=https://nextcloud.domain.com - STORAGE_STRATEGY=redis - REDIS_HOST=redis - JWT_SECRET_KEY=secret restart: unless-stopped- Добавьте в конец
/path/to/swag/nginx/proxy-confs/nextcloud.subdomain.conf:
server { listen 443 ssl; listen [::]:443 ssl; server_name whiteboard.*; include /config/nginx/ssl.conf; client_max_body_size 0;
location / { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app whiteboard; set $upstream_port 3002; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; }}- Выполните команды.
docker exec nextcloud occ app:enable whiteboarddocker exec nextcloud occ config:app:set whiteboard collabBackendUrl --value="https://whiteboard.domain.com"docker exec nextcloud occ config:app:set whiteboard jwt_secret_key --value="secret"Imaginary
Раздел «Imaginary»- Добавьте Imaginary в docker compose и запустите.
imaginary: image: nextcloud/aio-imaginary:latest container_name: imaginary restart: unless-stopped- Выполните команды.
docker exec nextcloud occ config:system:set enable_previews --value=true --type=booleandocker exec nextcloud occ config:system:set enabledPreviewProviders 0 --value='OC\\Preview\\Imaginary'docker exec nextcloud occ config:system:set enabledPreviewProviders 1 --value='OC\\Preview\\Movie'docker exec nextcloud occ config:system:set enabledPreviewProviders 2 --value='OC\\Preview\\MP4'docker exec nextcloud occ config:system:set preview_imaginary_url --value='http://imaginary:9000'Diagrams
Раздел «Diagrams»- Добавьте draw.io в docker compose и запустите.
drawio: image: jgraph/drawio:alpine container_name: drawio restart: unless-stopped- Добавьте location-блок в
/path/to/swag/nginx/proxy-confs/nextcloud.subdomain.confвнутриserver.
location ^~ /draw/ { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app drawio; set $upstream_port 8080; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port;}- Выполните команды.
docker exec nextcloud occ app:enable drawiodocker exec nextcloud occ config:app:set drawio DrawioUrl --value="https://nextcloud.domain.com/draw"Maintenance
Раздел «Maintenance»- Раз в несколько недель вручную обновляйте образы и пересоздавайте контейнеры.
- Проверяйте
docker logs mariadbна инструкции по апгрейду. - Выполняйте команды ниже.
docker exec nextcloud occ maintenance:repair --include-expensivedocker exec nextcloud occ db:add-missing-indicesdocker exec nextcloud occ app:update --all