Новые релизы
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
Выбор редакцииОблачные хранилища
Nextcloud — облачное хранилище на вашем сервере: файлы синхронизируются с компьютером и телефоном, папки открываются коллегам по ссылке или по имени, а сверху добавляются календарь, контакты и заметки. Рецепт поднимает сервер, PostgreSQL, Valkey и отдельный контейнер фоновых заданий.
Nextcloud — облачное хранилище, которое живёт на вашем сервере. Файлы синхронизируются с компьютером и телефоном, папки открываются коллегам по имени или по публичной ссылке, а поверх файлов работает привычный набор: календарь, контакты, заметки, задачи и совместное редактирование документов. Подойдёт семье, небольшой команде или тем, кто уходит из Google Drive и Microsoft 365.
Отличие от простой синхронизации файлов — в правах и совместной работе. Здесь есть учётные записи, группы, квоты, сроки жизни ссылок, пароли на публичные папки и журнал действий. Nextcloud — это не «папка на нескольких устройствах», а сервер с пользователями.
Рецепт поднимает четыре контейнера: сам Nextcloud, PostgreSQL, Valkey для
файловых блокировок и кэша и отдельный контейнер фоновых заданий. Без последнего
Nextcloud переключается на AJAX-режим и выполняет обслуживание только когда
кто-то открыл интерфейс. Код, приложения и config.php лежат в Docker volume,
файлы пользователей — в каталоге на хосте.
Уровень reliable заявлен как частичный: база вынесена в отдельный сервис, есть
healthcheck и фоновый обработчик, но в рецепте нет лимитов ресурсов и внешнего
мониторинга.
Nextcloud сложнее остальных приложений каталога в сопровождении. Обновления идут только по одной мажорной версии за раз, а после каждого стоит заглядывать в раздел проверок безопасности.
Контейнеры запускаются без privileged, host network и доступа к Docker socket,
с no-new-privileges; наружу открыт только веб-порт и только на 127.0.0.1.
PostgreSQL и Valkey доступны исключительно внутри сети Compose.
Пароли администратора и базы задаются в .env и попадают в окружение
контейнера: держите файл с правами 600, вне Git, и меняйте значения из
примера до первого запуска. После установки включите двухфакторную
аутентификацию — Nextcloud хранит файлы, календари и контакты сразу нескольких
людей.
Отдельного внимания требует магазин приложений: дополнения выполняют код на сервере с правами Nextcloud, поэтому ставьте только те, которым доверяете. Встроенный раздел «Проверки безопасности и настройки» показывает, чего не хватает конкретно вашей установке; после публикации через HTTPS стоит пройти по списку и закрыть предупреждения.
Основной образ просканирован Trivy; найденные критические CVE перечислены в карточке — это в основном уязвимости системных библиотек Debian, на которых собран образ, и закрываются они очередным релизом upstream. PostgreSQL и Valkey закреплены отдельно от версии Nextcloud и в автоматическую проверку не входят.
Это сохранённые результаты отдельных проверок, а не данные в реальном времени. Неизвестный статус означает, что проверка ещё не выполнялась.
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
Результат отдельного сканирования Docker-образов, а не проверки Compose.
Новый major находится сравнением номеров версий. Вердикт о совместимости заносится вручную после чтения release notes и порядка миграции.
Изменения upstream Compose относительно проверенного рецепта.
Проверка закреплённых тегов образов на наличие новых версий.
От наблюдения к действию
Рецепт уже закрепляет последний известный релиз. Ниже показаны сохранённые основания для этой версии.
v34.0.3v34.0.3Открыть релиз на GitHub ↗ Ссылка нужна для ревизии и сама по себе не доказывает совместимость.
Номера версий не пересекают major-границу совместимости. Вердикт о совместимости не записан.
Смена тегов образов сейчас не планируется.
Миграция, мажоры нельзя пропускать. Шаги конкретного релиза всё равно берутся из release notes и инструкции по установке.
Смена версии сейчас не планируется. Рецепт содержит процедуру backup. Restore проверен.
Точная проверка уровня «Проверен полностью» для этой версии записана 2026-08-31.
Статус показывает, насколько опубликованный рецепт покрывает требования каждого уровня.
Минимальная конфигурация для локальной сети или доступа через VPN.
Рецепт закрывает все требования этого уровня.
Публичная установка с защищённым доступом и резервными копиями.
Рецепт закрывает все требования этого уровня.
Конфигурация для предсказуемой эксплуатации и наблюдаемости.
Нужно добавить вручную: внешний мониторинг, лимиты cpu и памяти.
Собрать под свой сервер
Ответьте на пять вопросов и скачайте готовый комплект Nextcloud.
Сначала прочитайте полную инструкцию: в ней описаны доступ извне, backup и расположение данных.
cp .env.example .envdocker compose up -ddocker compose psДля этого рецепта выделите минимум 2 ядра CPU, 2 ГБ RAM и 20 ГБ диска под сам сервер; рекомендуется 4 ГБ RAM. Это консервативная оценка рецепта: upstream публикует требования к PHP и базе, но не к машине целиком, а расход зависит от числа пользователей и включённых приложений. Место под файлы считайте отдельно. Нужны Ubuntu 22.04+ или Debian 12+ с Docker Engine и Docker Compose v2.24+.
docker --version
docker compose version
nproc && free -m && df -h /srv
mkdir -p ~/services/nextcloud
cd ~/services/nextcloud
cp .env.example .env
chmod 600 .env
sudo mkdir -p /srv/nextcloud/data
sudo chown -R 33:33 /srv/nextcloud/data
sed -i "s|^NEXTCLOUD_DATA_LOCATION=.*|NEXTCLOUD_DATA_LOCATION=/srv/nextcloud/data|" .env
Внутри контейнера Nextcloud работает от www-data с UID 33, поэтому каталог
данных должен принадлежать этому пользователю.
Обязательно замените оба пароля из примера:
sed -i "s|^NEXTCLOUD_DB_PASSWORD=.*|NEXTCLOUD_DB_PASSWORD=$(openssl rand -hex 24)|" .env
sed -i "s|^NEXTCLOUD_ADMIN_PASSWORD=.*|NEXTCLOUD_ADMIN_PASSWORD=$(openssl rand -base64 24)|" .env
NEXTCLOUD_VERSION закрепляет образ; NEXTCLOUD_PORT задаёт локальный порт;
NEXTCLOUD_DATA_LOCATION — каталог с файлами пользователей;
NEXTCLOUD_HTML_VOLUME и NEXTCLOUD_DB_VOLUME — volume с кодом и с базой;
NEXTCLOUD_DB_* и NEXTCLOUD_ADMIN_* задают доступ к базе и первую учётную
запись; NEXTCLOUD_TRUSTED_DOMAINS перечисляет домены, с которых разрешён вход;
NEXTCLOUD_TRUSTED_PROXIES и NEXTCLOUD_OVERWRITE_* нужны при публикации через
reverse proxy; NEXTCLOUD_PHP_* задают лимиты PHP; TZ — часовой пояс.
Пароль базы и имя пользователя меняются только до первого запуска: после инициализации PostgreSQL переменная новую учётную запись не создаст.
docker compose pull
docker compose up -d
docker compose ps
ssh -L 8080:127.0.0.1:8080 user@server.example
Первый запуск дольше обычного: контейнер распаковывает код и выполняет
установку. Администратор создаётся автоматически из переменных, поэтому мастера
установки в браузере не будет — откройте http://localhost:8080 и сразу войдите.
Проверьте, что фоновые задания идут отдельным контейнером, а не через браузер:
docker compose exec -u www-data app php occ config:app:get core backgroundjobs_mode
Ответ должен быть cron.
На VPS оставьте bind 127.0.0.1, закройте порт 8080 снаружи и публикуйте сервис
только через HTTPS reverse proxy. Проверьте состояние стека:
docker compose up -d
docker compose ps
curl --fail http://127.0.0.1:8080/status.php
Все четыре контейнера должны быть подняты, а app, database и redis —
healthy. Учитывайте, что генерация превью и фоновые задания заметно нагружают
слабый VPS: на одном общем ядре стоит отключить генерацию превью для больших
файлов.
Без TLS используйте SSH-туннель или VPN. Если reverse proxy работает на другом
узле доверенной LAN, замените 127.0.0.1 в compose.yaml на конкретный
LAN-адрес сервера, добавьте этот адрес в NEXTCLOUD_TRUSTED_DOMAINS и ограничьте
порт firewall адресом proxy.
Nextcloud не примет запрос с домена, которого нет в NEXTCLOUD_TRUSTED_DOMAINS:
вместо интерфейса вы увидите сообщение о недоверенном домене.
Замените cloud.example.com в выбранном файле из proxy/ одним доменом и
пропишите его в .env:
NEXTCLOUD_TRUSTED_DOMAINS=cloud.example.com
NEXTCLOUD_TRUSTED_PROXIES=172.16.0.0/12
NEXTCLOUD_OVERWRITE_PROTOCOL=https
NEXTCLOUD_OVERWRITE_CLI_URL=https://cloud.example.com
proxy/Caddyfile автоматически получает сертификат; proxy/nginx.conf ожидает
сертификат Certbot; proxy/traefik.yaml использует resolver letsencrypt. Для
Traefik в контейнере замените 127.0.0.1 на доступный ему host gateway.
Все три примера делают две вещи, без которых Nextcloud работает неправильно:
снимают ограничение на размер загружаемого файла и перенаправляют
/.well-known/carddav и /.well-known/caldav на /remote.php/dav — иначе
календарь и контакты не подключаются в клиентах.
docker compose up -d
curl --fail https://cloud.example.com/status.php
chmod +x backup.sh restore.sh
./backup.sh
Скрипт включает maintenance mode, снимает дамп PostgreSQL, архивирует volume с
кодом, приложениями и config.php, затем выключает maintenance mode. Без
maintenance mode копия базы и файлов может разъехаться.
Файлы пользователей в архив не входят: их каталог может занимать терабайты, и копировать его удобнее инкрементально:
rsync -a --delete /srv/nextcloud/data/ /mnt/backup/nextcloud-data/
Полное восстановление требует трёх частей: дампа базы, volume с кодом и каталога файлов. Храните их согласованно и хотя бы одну копию — вне сервера.
Одна деталь, о которую спотыкаются при ручном backup: инсталлятор Nextcloud
заводит для работы отдельную роль PostgreSQL вида oc_<имя_администратора>, и
таблицы принадлежат ей, а не пользователю из .env. Поэтому backup.sh кроме
дампа базы выгружает и список ролей — без него дамп не встанет на чистый
PostgreSQL.
Восстановление заменяет базу и код целиком:
./restore.sh ./backups/nextcloud-YYYYMMDDTHHMMSSZ.tar
docker compose ps
curl --fail http://127.0.0.1:8080/status.php
Перед заменой скрипт создаёт страховочную копию текущего состояния, удаляет volume базы и накатывает дамп на чистую базу. Каталог с файлами пользователей не трогается: если он утрачен, восстановите его из своей копии до запуска, иначе Nextcloud покажет записи без файлов.
После восстановления имеет смысл пересканировать файлы:
docker compose exec -u www-data app php occ files:scan --all
Создайте backup и прочитайте release notes. Обновляйтесь строго по одной мажорной версии: перепрыгнуть с 32 на 34 нельзя, установщик остановит переход.
./backup.sh
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=100 app
docker compose exec -u www-data app php occ status
После обновления загляните в Administration → Overview: там появляются новые рекомендации и предупреждения, если что-то настроено не так.
Миграции базы Nextcloud необратимы: старый образ не запустится на базе, которую
обновила новая версия. Верните прежний NEXTCLOUD_VERSION в .env и
восстановите архив, снятый до обновления:
docker compose pull
./restore.sh ./backups/nextcloud-before-update.tar
docker compose up -d
Файлы, загруженные после обновления, останутся на диске, но записей о них в
восстановленной базе не будет: верните их командой occ files:scan --all.
docker compose down удаляет контейнеры, но сохраняет базу, код и файлы. Полное
необратимое удаление после проверки backup:
docker compose down
docker volume rm nextcloud-html nextcloud-database
sudo rm -rf /srv/nextcloud/data
rm -rf ~/services/nextcloud
Источники: установка в Docker, руководство администратора, reverse proxy, фоновые задания, кэширование и блокировки и backup.
Nextcloud принимает запросы только с доменов из списка. Добавьте нужный в
.env и перезапустите:
grep NEXTCLOUD_TRUSTED_DOMAINS .env
docker compose up -d
docker compose exec -u www-data app php occ config:system:get trusted_domains
Переменная применяется только при старте контейнера; изменить список у
работающего инстанса можно командой
occ config:system:set trusted_domains 1 --value=cloud.example.com.
За reverse proxy Nextcloud не знает, что снаружи HTTPS. Заполните в .env
NEXTCLOUD_TRUSTED_PROXIES, NEXTCLOUD_OVERWRITE_PROTOCOL=https и
NEXTCLOUD_OVERWRITE_CLI_URL, затем перезапустите стек.
Клиенты обращаются к /.well-known/caldav и /.well-known/carddav. Эти адреса
должны перенаправляться на /remote.php/dav — примеры в proxy/ уже содержат
нужные правила. Проверить можно так:
curl -sI https://cloud.example.com/.well-known/caldav | head -3
docker compose ps cron
docker compose exec -u www-data app php occ config:app:get core backgroundjobs_mode
docker compose logs --tail=50 cron
Режим должен быть cron. Значение записывается при первом запуске cron.php,
поэтому сразу после установки поле может быть пустым — контейнер cron
выполняет задание раз в пять минут.
Ограничение чаще ставит reverse proxy, а не PHP. В Nginx нужен
client_max_body_size, в Caddy — request_body max_size, в Traefik —
middleware buffering; примеры в proxy/ уже настроены. Со стороны PHP размер
задаёт NEXTCLOUD_PHP_UPLOAD_LIMIT.
Внутри контейнера Nextcloud работает от UID 33:
ls -ld /srv/nextcloud/data
sudo chown -R 33:33 /srv/nextcloud/data
Nextcloud хранит список файлов в базе и не сканирует каталог автоматически. После ручного копирования выполните:
docker compose exec -u www-data app php occ files:scan --all
Так бывает, если обновление прервалось:
docker compose exec -u www-data app php occ maintenance:mode --off
docker compose exec -u www-data app php occ status
Если сервер жалуется на незавершённое обновление, сначала выполните
occ upgrade, а при неудаче восстановитесь из архива.
Это нормальное состояние сразу после установки: часть проверок относится к HTTPS и заголовкам, которые появляются только после публикации через reverse proxy. Пройдите по списку в Administration → Overview и закрывайте пункты по одному — там же есть ссылки на документацию по каждому.
docker compose logs --tail=200 app | grep -i "error\|upgrade\|migration"
Перепрыгивать через мажорную версию нельзя: обновляйтесь последовательно. Понижение версии не поддерживается — возврат возможен только восстановлением архива, снятого до обновления.
Fossary — независимый информационный каталог, не связанный с разработчиками представленных приложений. Мы собираем сведения из открытых источников и проверяем опубликованные рецепты, но не разрабатываем, не распространяем и не контролируем эти приложения.
Публикация карточки или статус проверки не являются требованием, навязыванием либо персональной рекомендацией использовать приложение. Вы самостоятельно решаете, подходит ли оно вам, и используете его на свой риск. Мы не гарантируем безопасность, доступность или пригодность приложения и, в пределах, допускаемых законом, не отвечаем за вызванные им потери или ущерб. До установки проверьте лицензию, настройки безопасности, обработку данных и резервное копирование.