
За выходные поднял «свой Dropbox/Google Drive» на Raspberry Pi 5 через Docker-compose: Nextcloud + PostgreSQL + Redis + Nginx Proxy Manager + автокрон. Бонусом — SMTP-уведомления, капча на регистрации и аккуратный config.php. Ключевой инсайт: даже без специфических знаний это реально, если уметь правильно «разговаривать» с ИИ и копипастить команды не глядя в дебри мануалов.
Зачем оно вам — и почему именно сейчас
Контроль над данными. Фотографии, рабочие схемы и документы живут у вас, а не «где-то в облаке».
Скорость и цена. RPi 5 + SSD — это дешево/сердито и очень быстро.
ИИ как «второй мозг». LLM снимает барьер входа: вместо «нужно разбираться в DevOps» — вы формулируете задачу и итеративно доводите конфиг до ума.
Что вы получите в итоге
Nextcloud 32+ с внешней БД (PostgreSQL 17), кэшем и блокировками на Redis.
TLS-сертификат через Nginx Proxy Manager (автообновление).
Фоновый
cron, аккуратные тома, изолированная сеть, healthcheck’и.Рабочую почту (SMTP) для уведомлений/регистрации и готовность к hCaptcha/reCaptcha.
Чеклист бэкапов и минимальную «обвязку» производительности (APCu/OPcache).
Железо и минимум подготовки
Raspberry Pi 5 (4–8 ГБ, лучше 8 ГБ) + нормальный блок питания.
NVMe/SSD (USB 3.2) на 500 ГБ–2 ТБ. Карта microSD — только под систему.
Роутер с пробросом 80/443 (или любой внешний VPS для обратного прокси — не обязательно).
Домен (например,
cloud.example.com).
Обновляем систему и ставим Docker/Compose:
sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Docker Compose v2 обычно ставится вместе с docker-ce (как docker compose)
docker --version && docker compose version
Архитектура (кратко и по делу)
Сеть: два сегмента —
backend-network(всё приватно) иproxy-network(только NPM).Тома: разнесены каталоги
html/,config/,data/,custom_apps/— удобно для бэкапов/миграций.-
Сервисы:
nextcloud-app(Apache + PHP),nextcloud-cron(только/cron.sh),nextcloud_db(Postgres 17),redis-cache(Redis),nginx-proxy-manager(обратный прокси + Let's Encrypt).
Файл .env (секреты — здесь)
Создайте рядом с docker-compose.yml:
# Домен
NEXTCLOUD_DOMAIN=cloud.example.com
# БД
POSTGRES_DB=nextcloud
POSTGRES_USER=nc_user
POSTGRES_PASSWORD=change_me_strong
# Почта (пример)
SMTP_HOST=smtp.yourmail.com
SMTP_PORT=587
SMTP_USER=noreply@yourmail.com
SMTP_PASSWORD=change_me_strong
SMTP_SECURE=tls # tls (587) или ssl (465)
# Таймзона
TZ=Europe/Berlin
docker-compose.yml
version: "3.9"
networks:
backend-network:
driver: bridge
proxy-network:
driver: bridge
volumes:
nextcloud_html:
nextcloud_data:
nextcloud_config:
nextcloud_apps:
postgres_data:
redis_data:
npm_data:
npm_letsencrypt:
services:
nextcloud-app:
image: nextcloud:stable
restart: unless-stopped
depends_on:
- nextcloud_db
- redis-cache
environment:
- TZ=${TZ}
- POSTGRES_HOST=nextcloud_db
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
# Для первой инициализации можно указать админа:
# - NEXTCLOUD_ADMIN_USER=admin
# - NEXTCLOUD_ADMIN_PASSWORD=change_me_strong
# (или создать через веб-мастер)
- PHP_MEMORY_LIMIT=1024M
- PHP_UPLOAD_LIMIT=10240M
volumes:
- nextcloud_html:/var/www/html
- nextcloud_data:/var/www/html/data
- nextcloud_config:/var/www/html/config
- nextcloud_apps:/var/www/html/custom_apps
# Пользовательский php.ini для правки output_buffering и т.п.
- ./php-custom.ini:/usr/local/etc/php/conf.d/zzz-custom.ini:ro
networks:
- backend-network
nextcloud-cron:
image: nextcloud:stable
restart: unless-stopped
depends_on:
- nextcloud-app
entrypoint: /cron.sh
volumes:
- nextcloud_html:/var/www/html
- nextcloud_data:/var/www/html/data
- nextcloud_config:/var/www/html/config
- nextcloud_apps:/var/www/html/custom_apps
networks:
- backend-network
nextcloud_db:
image: postgres:17-bookworm
restart: unless-stopped
environment:
- TZ=${TZ}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- backend-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 10
redis-cache:
image: redis:alpine
restart: unless-stopped
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis_data:/data
networks:
- backend-network
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
restart: unless-stopped
ports:
- "80:80"
- "81:81" # веб-панель NPM
- "443:443"
environment:
- TZ=${TZ}
volumes:
- npm_data:/data
- npm_letsencrypt:/etc/letsencrypt
networks:
- proxy-network
- backend-network
Создайте минимальный php-custom.ini:
; /usr/local/etc/php/conf.d/zzz-custom.ini
output_buffering=0
opcache.enable=1
opcache.enable_cli=1
apc.enable_cli=1
Запускаем:
docker compose up -d
Подружим домен и TLS
DNS: A-запись
cloud.example.com→ на внешний IP (вашего дома/ВПС).-
Откройте
http://<ваш-ip>:81, создайте админа NPM, добавьте Proxy Host:Domain Names:
cloud.example.comScheme:
http, Forward Hostname/IP:nextcloud-app, Forward Port:80Включите Websockets, Cache Assets,
Во вкладке SSL — «Request a new SSL Certificate» → Let’s Encrypt → Force SSL + HTTP/2.
Проверьте
https://cloud.example.com.
Первичная настройка Nextcloud
Пройдите мастер, либо задайте
NEXTCLOUD_ADMIN_*в.env.В Settings → Administration → Basic settings выставьте cron и убедитесь, что «Cron» выбран.
Включите Redis/APCu в
config.php(генерируется автоматически, дополним вручную).
Базовый config.php (фрагмент)
<?php
$CONFIG = [
'overwrite.cli.url' => 'https://cloud.example.com',
'overwritehost' => 'cloud.example.com',
'overwriteprotocol' => 'https',
'trusted_domains' => [
'cloud.example.com',
],
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'redis-cache',
'port' => 6379,
],
'logtimezone' => 'Europe/Berlin',
'default_phone_region' => 'DE',
];
⚠️ Не коммитьте
config.phpс паролями/секретами; держите бэкап отдельно.
Почта и регистрация пользователей
Через Settings → Administration → Basic settings → Email server:
Send mode: SMTP
Encryption: TLS (587) или SSL (465)
From address:
noreply@yourmail.comAuthentication: login/pass из
.env
Проверка:
docker exec -u www-data nextcloud-app php occ config:system:set mail_smtpmode --value="smtp"
docker exec -u www-data nextcloud-app php occ config:system:set mail_smtphost --value="${SMTP_HOST}"
docker exec -u www-data nextcloud-app php occ config:system:set mail_smtpport --value="${SMTP_PORT}"
docker exec -u www-data nextcloud-app php occ config:system:set mail_smtpsecure --value="${SMTP_SECURE}"
docker exec -u www-data nextcloud-app php occ config:system:set mail_smtpauth --value="1"
docker exec -u www-data nextcloud-app php occ config:system:set mail_smtpname --value="${SMTP_USER}"
docker exec -u www-data nextcloud-app php occ config:system:set mail_smtppassword --value="${SMTP_PASSWORD}"
Анти-спам на регистрации. Установите приложение Registration и подключите hCaptcha/reCaptcha (в панели Registration появятся поля ключей). Ключи берём у провайдера капчи, добавляем в настройки приложения.
Производительность и «типичные болячки»
1) output_buffering ругается в логах.
Решение — наш php-custom.ini с output_buffering=0 (см. выше) + перезапуск контейнера.
2) Медленные превью и поиск.
Включите предгенерацию превью по крону и full-text search при необходимости.
docker exec -u www-data nextcloud-app php occ preview:generate-all
# Поиск: установить нужный app из Маркета, выбрать движок (e.g. Tesseract/Elastic)
3) Файловые блокировки и гонки.
Только Redis для memcache.locking. Не используйте file-locking на FS.
4) Прокси и «кривые» URL.
Правильные overwritehost/overwriteprotocol/overwrite.cli.url в config.php лечат 90% редирект-боли.
5) SMTP 587 vs 465.
TLS (587) чаще «заводится» на домашних сетях; SSL (465) — «в лоб и сразу SSL». Если что-то не шлётся — смотрим логи Nextcloud и провайдера почты.
Резервные копии (минимум-миниморум)
Раз в день:
# БД
docker exec nextcloud_db pg_dump -U ${POSTGRES_USER} ${POSTGRES_DB} \
| gzip > ~/backups/nextcloud_$(date +%F).sql.gz
# Важные тома
sudo tar -czf ~/backups/nc_html_$(date +%F).tar.gz /var/lib/docker/volumes/nextcloud_html/_data
sudo tar -czf ~/backups/nc_config_$(date +%F).tar.gz /var/lib/docker/volumes/nextcloud_config/_data
sudo tar -czf ~/backups/nc_data_$(date +%F).tar.gz /var/lib/docker/volumes/nextcloud_data/_data
sudo tar -czf ~/backups/nc_apps_$(date +%F).tar.gz /var/lib/docker/volumes/nextcloud_apps/_data
Храните минимум три ротации офф-сайт (облако/другая машина).
Безопасность по принципу «5 минут — 80% пользы»
2FA для админов + «App Passwords» для клиентов.
Автообновления контейнеров по расписанию (watchtower или ручная проверка раз в неделю).
Fail2ban на уровне роутера/VPS (если есть SSH/панель наружу).
Разделённые сети Docker (как в compose) и минимум открытых портов.
Уменьшите «атаку грубой силы»: капча + лимиты в NPM.
Как именно помог ИИ (и как попросить его правильно)
ИКТ-магии тут нет — весь «джедайизм» в формулировках:
«Сгенерируй
docker-compose.ymlдля Nextcloud + Postgres 17 + Redis на ARM (RPi 5). Отдельный сервис для/cron.sh, два docker-network (backend/proxy), тома для html/config/data/custom_apps. Добавь NPM как обратный прокси».«Покажи минимальный
php.ini, чтобы убрать предупреждениеoutput_bufferingи включить OPcache/APCu».«Дай команды
occдля SMTP (TLS:587) и проверь логи».«Почему редиректит на HTTP? Посмотри на
overwrite*иtrusted_domains— дай минимальныйconfig.php».
ИИ не заменяет документацию, но сильно сокращает цикл «проблема → гипотеза → фикс», особенно на Raspberry Pi с ARM-образами.
Чеклист запуска (можно распечатать)
DNS:
cloud.example.com→ внешний IP.docker compose up -d(все контейнеры healthy).NPM: Proxy Host → сертификат Let’s Encrypt → Force SSL.
Мастер установки Nextcloud → админ.
config.php:trusted_domains,overwrite*, Redis/APCu.SMTP: тест письма, регистрация/восстановление.
Крон: режим «Cron» включён,
nextcloud-cronработает.Бэкапы: скрипты/крон готовы.
2FA, капча, лимиты.
Пробный аплоад 5–10 ГБ, шаринг ссылки, мобильные клиенты.
Полезные команды на каждый день
# Логи Nextcloud
docker exec -u www-data nextcloud-app bash -lc 'tail -n 200 /var/www/html/data/nextcloud.log'
# Обновление приложений
docker exec -u www-data nextcloud-app php occ app:update --all
# Ремонт после «падения электричества»
docker exec -u www-data nextcloud-app php occ maintenance:repair
# Перестроить индексы (иногда ускоряет)
docker exec -u www-data nextcloud-app php occ db:add-missing-indices
Что можно улучшить потом
Object-storage для холодных файлов (S3-совместимый бэкенд).
Отдельный VPS как публичный прокси, а RPi оставить в ЛАН за WireGuard.
Мониторинг (Prometheus + cAdvisor + Grafana) и синтетические health-checks.
Автоматизация бэкапов (borg/restic + off-site).
Расширенная полнотекстовая индексация (Elastic/OpenSearch).



Итоги
Домашний Nextcloud на RPi 5 — это не «проект на месяц», а реально пара вечеров, если подходить прагматично: взять готовые образы, собрать docker-compose, доверить рутину ИИ и не усложнять, где не нужно.
Вы получаете свой приватный облачный диск, быстрый предпросмотр фото/видео, общие папки семьи/команды и взрослые «энтерпрайз-штуки» вроде SSO/2FA/капчи — без абонплаты и с контролем за данными.
Комментарии (2)

Lev3250
10.11.2025 13:32Настройка nextclod вся документирова-передокументирована для любых платформ. Если совсем лень, можно поднять AIO одним композ файлом и потом в веб интерфейсе всё докликать мышкой.
Автоматизация бекапов - это задача не на потом! Это то, без чего нельзя двигаться дальше даже под дулом пистолета. Потому что это будет откладываться на потом, фоточки будут складываться, юзер радоваться... Пока ssd не уйдёт в вальхаллу вместе со всеми фоточками/видосиками котиков
M_AJ
RPi 5 сейчас стоит сравнимо с китайскими неттопами на Intel N100, идущими уже в корпусе, с блоком питания, 16Гб памяти и слотом под SSD, без необходимости покупать Argon NEO еще за $40.