From 2566f3003b3095c06454da4a80f10c50eb8e92c3 Mon Sep 17 00:00:00 2001 From: zailon Date: Fri, 15 May 2026 14:41:07 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20docs/services/vm-205/nextcloud.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/services/vm-205/nextcloud.md | 425 ++++++++++++++++++++++++++++++ 1 file changed, 425 insertions(+) create mode 100644 docs/services/vm-205/nextcloud.md diff --git a/docs/services/vm-205/nextcloud.md b/docs/services/vm-205/nextcloud.md new file mode 100644 index 0000000..32a06a3 --- /dev/null +++ b/docs/services/vm-205/nextcloud.md @@ -0,0 +1,425 @@ +# Nextcloud Hub 26 — Сервер Olimp (nc.zailon.ru) + +| Параметр | Значение | +|----------|----------| +| **Домен** | `nc.zailon.ru` (проксируется через NPM) | +| **Контейнер/Хост** | LXC на Proxmox | +| **Порт внутри** | `80/443` (Nginx) | +| **Версия Nextcloud** | 33.0.3.2 (Hub 26 Winter) | +| **PHP** | 8.3.22 (FPM) | +| **БД** | MariaDB 10.11.11 (socket) | +| **Кэш** | APCu (local) + Redis (locking) | +| **Хранилище** | `/mnt/cloud/data` (отдельный диск) | + +- [🤖 Роль Ansible](../../ansible/roles/nextcloud.md) *(заглушка на будущее)* + +## 📋 Описание + +Полнофункциональное облачное хранилище с поддержкой файлов, календарей, контактов, заметок и мультимедиа. Развёрнуто вручную на Debian 12 с Nginx + PHP-FPM. Проксируется через Nginx Proxy Manager (NPM) для получения SSL-сертификатов Let's Encrypt. + +### Особенности текущей установки: +✅ **Безопасность**: самоподписанные сертификаты внутри контейнера + Let's Encrypt на уровне NPM +✅ **Производительность**: Redis для блокировок, APCu для локального кэша, OPcache включён +✅ **Масштабируемость**: данные вынесены на отдельный диск `/mnt/cloud` +✅ **Автономность**: cron через системный демон, не через веб +✅ **Память**: добавлен swap 2 ГБ для стабильности при пиковых нагрузках + +## 🗂️ Структура файлов + +```text +/ +├── etc/ +│ ├── nginx/ +│ │ ├── sites-enabled/ +│ │ │ └── nextcloud.conf # Основной конфиг Nginx для Nextcloud +│ │ └── ssl/ +│ │ ├── cert.pem # Самоподписанный сертификат (для NPM) +│ │ └── cert.key # Приватный ключ +│ ├── php/8.3/fpm/pool.d/ +│ │ └── www.conf # Настройки пула PHP-FPM +│ └── letsencrypt/ # НЕ используется внутри контейнера +├── var/ +│ ├── www/nextcloud/ # Ядро Nextcloud +│ │ ├── config/config.php # Основной конфиг приложения +│ │ ├── apps/ # Установленные приложения +│ │ └── data/ -> /mnt/cloud/data # Ссылка на внешнее хранилище +│ └── log/ +│ ├── nginx/ +│ └── apache2/ # Не используется, но установлен +├── mnt/ +│ └── cloud/ +│ ├── data/ # Пользовательские файлы, БД превью, логи +│ └── (другие сервисы) # Общие данные для медиа-сервисов +└── run/ + └── php/ + └── php8.3-fpm.sock # Socket для связи Nginx ↔ PHP + +## ⚙️ Установка и настройка (ручная) + +### Шаг 1: Подготовка системы + +```bash +# Обновление пакетов +apt update && apt upgrade -y + +# Установка базовых зависимостей +apt install -y nginx php8.3-fpm php8.3-cli php8.3-mysql \ + php8.3-gd php8.3-imagick php8.3-redis php8.3-apcu \ + php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip \ + php8.3-intl php8.3-bcmath php8.3-gmp mariadb-server redis-server + +# Настройка прав для PHP-FPM +usermod -a -G www-data redis +systemctl enable --now nginx php8.3-fpm mariadb redis-server + +### Шаг 2: Настройка базы данных + +```bash +# Создание БД и пользователя +mysql -u root -p < 'nc-nextcloud-202605', + 'trusted_domains' => array ('nc.zailon.ru', '192.168.1.205'), + 'datadirectory' => '/mnt/cloud/data', + 'dbtype' => 'mysql', + 'dbhost' => 'localhost:/run/mysqld/mysqld.sock', + 'memcache.local' => '\\OC\\Memcache\\APCu', + 'memcache.locking' => '\\OC\\Memcache\\Redis', + 'redis' => array ('host' => 'localhost', 'port' => 6379), + 'overwrite.cli.url' => 'https://nc.zailon.ru', + 'loglevel' => 2, + 'logfile' => '/mnt/cloud/data/nextcloud.log', + 'enable_previews' => true, + 'preview_max_x' => 2048, + 'preview_max_y' => 2048, + 'preview_max_memory' => 256, +); + +## 🔄 Обновление Nextcloud + +### Через встроенный updater (рекомендуется) + +```bash +# Включаем режим обслуживания +sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on + +# Запуск обновления +cd /var/www/nextcloud/updater +sudo -u www-data php updater.phar + +# После обновления +sudo -u www-data php /var/www/nextcloud/occ upgrade +sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off + +### Ручное обновление (если updater не работает) + +```bash +# Бэкап +tar -czf /root/nextcloud-backup-$(date +%F).tar.gz /var/www/nextcloud +mysqldump nextcloud > /root/nextcloud-db-$(date +%F).sql + +# Скачивание новой версии +cd /tmp +wget https://download.nextcloud.com/server/releases/nextcloud-X.Y.Z.tar.bz2 +tar -xjf nextcloud-X.Y.Z.tar.bz2 +rsync -av nextcloud/ /var/www/nextcloud/ --exclude='config/' --exclude='data/' + +# Обновление БД +sudo -u www-data php /var/www/nextcloud/occ upgrade + +## 🧰 Полезные команды + +### Управление сервисами + +```bash +# Перезапуск стека +systemctl reload nginx +systemctl reload php8.3-fpm +systemctl restart mariadb + +# Проверка статусов +systemctl status nginx php8.3-fpm mariadb redis-server + +### Nextcloud CLI (occ) + +```bash +# Проверка статуса +sudo -u www-data php /var/www/nextcloud/occ status + +# Режим обслуживания +sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on +sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off + +# Сканирование файлов +sudo -u www-data php /var/www/nextcloud/occ files:scan --all + +# Проверка целостности +sudo -u www-data php /var/www/nextcloud/occ integrity:check-core + +# Обновление приложений +sudo -u www-data php /var/www/nextcloud/occ app:update --all + +### База данных + +```bash +# Подключение к БД +mysql -u nextcloud -p nextcloud + +# Размер БД +mysql -e "SELECT table_schema AS 'DB', ROUND(SUM(data_length+index_length)/1024/1024,2) AS 'MB' FROM information_schema.tables WHERE table_schema='nextcloud' GROUP BY table_schema;" + +# Оптимизация таблиц +mysqlcheck -u root -p --optimize --all-databases + +### Логи и мониторинг + +```bash +# Логи Nextcloud +tail -f /mnt/cloud/data/nextcloud.log | grep -E '"level":3|"level":4' + +# Логи Nginx +tail -f /var/log/nginx/error.log + +# Использование ресурсов +htop +df -h / /mnt/cloud +free -h + +## 🚨 Решение проблем + +| Проблема | Причина | Решение | +|----------|---------|---------| +| `502 Bad Gateway` | PHP-FPM не отвечает | `systemctl status php8.3-fpm`, проверить сокет `/run/php/php8.3-fpm.sock` | +| `Maintenance mode enabled` | Забыли выключить после обновления | `sudo -u www-data php occ maintenance:mode --off` | +| `Could not decrypt session data` | Смена секретного ключа | Очистить куки в браузере, перелогиниться | +| `Превью не генерируются` | Нет прав на appdata | `chown -R www-data:www-data /mnt/cloud/data/appdata_*` | +| `Cron не работает` | Ошибка в crontab | Проверить `crontab -l -u www-data`, убедиться что пользователь `www-data` может выполнять `php` | +| `SSL ошибка в браузере` | Самоподписанный сертификат внутри | Довериться сертификату в браузере или настроить NPM правильно | +| `Память заканчивается` | Мало RAM + нет swap | Добавить swap: `fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile` | + +## 🔐 Безопасность + +### Настройки для продакшена + +✅ **Reverse Proxy**: Все запросы идут через NPM с Let's Encrypt, внутри контейнера — самоподписанные сертификаты +✅ **Защита файлов**: В Nginx запрещён доступ к `config/`, `data/`, `.ht*` +✅ **HSTS**: Заголовок `Strict-Transport-Security` включён +✅ **PHP-FPM**: Работает от пользователя `www-data`, не от root +✅ **БД**: Доступ только через socket, не по TCP +✅ **Redis**: Слушает только `127.0.0.1`, без пароля (локальная сеть) +✅ **Cron**: Запускается от `www-data`, не через веб-интерфейс + +### Дополнительные меры + +```bash +# Ограничить доступ к admin.php +# В nginx.conf добавить: +location ~ ^/(admin|settings) { + allow 192.168.1.0/24; + deny all; +} + +# Включить двухфакторную аутентификацию +sudo -u www-data php /var/www/nextcloud/occ twofactorauth:enable totp + +# Регулярные бэкапы (пример cron) +0 3 * * * /root/scripts/backup-nextcloud.sh + +## 🤖 БЛОК ДЛЯ ИИ + +```text +[AI INSTRUCTION BLOCK — DO NOT REMOVE] +Server: Olimp (Nextcloud LXC) +Domain: nc.zailon.ru (proxied via NPM) +Stack: Debian 12, Nginx 1.22, PHP 8.3-FPM, MariaDB 10.11, Redis 7 +Paths: + - Webroot: /var/www/nextcloud + - Data: /mnt/cloud/data + - Nginx config: /etc/nginx/sites-enabled/nextcloud.conf + - PHP-FPM pool: /etc/php/8.3/fpm/pool.d/www.conf + - Nextcloud config: /var/www/nextcloud/config/config.php +Services: + - nginx (active, ports 80/443) + - php8.3-fpm (active, socket /run/php/php8.3-fpm.sock) + - mariadb (active, socket /run/mysqld/mysqld.sock) + - redis-server (active, port 6379 localhost) +Cron: */5 * * * * php -f /var/www/nextcloud/cron.php (user: www-data) +SSL: Self-signed inside container (/etc/nginx/ssl/), Let's Encrypt via NPM externally +Key configs: + - memcache.local: APCu + - memcache.locking: Redis + - dbtype: mysql (socket) + - loglevel: 2 (warnings) + - overwrite.cli.url: https://nc.zailon.ru +Troubleshooting tips: + - If 502: check php8.3-fpm status and socket permissions + - If maintenance mode stuck: occ maintenance:mode --off + - If preview issues: chown www-data:www-data /mnt/cloud/data/appdata_* + - If cron fails: verify www-data crontab and php CLI path +Update procedure: + 1. maintenance:mode --on + 2. Run updater.phar or manual rsync + 3. occ upgrade + 4. maintenance:mode --off + 5. Clear caches if needed +Security notes: + - Never expose port 443 directly, always via NPM + - Keep PHP 8.3+ for Nextcloud 34+ compatibility + - Regular backups of /mnt/cloud/data and DB dump + - Monitor /mnt/cloud/data/nextcloud.log for level 3/4 errors +``` \ No newline at end of file