# 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 ```