Перейти к основному содержимому
Вернуться в категорию

Установка Nextcloud: Self-Hosted облачное хранилище и совместная работа

Установка Nextcloud с Docker, настройка Apache/Nginx, установка базы данных, SSL-сертификат, синхронизация файлов, магазин приложений и оптимизация производительности.

Время чтения: 16 мин Самостоятельный хостинг
nextcloudоблачное хранилищеself-hostingdockerсинхронизация файловсовместная работа
Автор
REXE Teknoloji Network & Security Team
Редактор
REXE Teknoloji Technical Editorial
Первая публикация
Последнее обновление

Установка Nextcloud: Self-Hosted облачное хранилище и совместная работа

Nextcloud — это open-source, self-hosted альтернатива облачным хранилищам, таким как Google Drive, Dropbox и OneDrive. Помимо хранения и синхронизации файлов, он предлагает календарь, контакты, видеоконференции, редактирование документов и многое другое. В этом руководстве рассматривается установка Nextcloud с Docker Compose, настройка Nginx reverse proxy и оптимизация производительности.

Что такое Nextcloud?

Nextcloud — платформа для совместной работы, дающая вам полный контроль над данными:

  • Хранение файлов: Неограниченное хранилище (ограничено только ёмкостью диска)
  • Синхронизация: Клиенты для Windows, macOS, Linux, iOS, Android
  • Магазин приложений: 200+ приложений (Nextcloud Talk, Calendar, Contacts, Office)
  • Управление пользователями: Интеграция LDAP/AD, управление группами
  • Безопасность: Сквозное шифрование, 2FA, журнал аудита

Системные требования

  • Ubuntu 22.04 или Debian 12
  • Минимум 2 ГБ ОЗУ (рекомендуется 4 ГБ)
  • Минимум 20 ГБ диска (дополнительное место для хранения)
  • Установлены Docker и Docker Compose

Установка с Docker Compose

Создание структуры каталогов

hljs bash
mkdir -p /opt/nextcloud/{data,db,redis}
cd /opt/nextcloud

Файл docker-compose.yml

hljs yaml
version: '3.8'

services:
  db:
    image: postgres:16-alpine
    container_name: nextcloud-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: надёжный-пароль-бд
    volumes:
      - ./db:/var/lib/postgresql/data
    networks:
      - nextcloud-net

  redis:
    image: redis:7-alpine
    container_name: nextcloud-redis
    restart: unless-stopped
    command: redis-server --requirepass пароль-redis
    volumes:
      - ./redis:/data
    networks:
      - nextcloud-net

  app:
    image: nextcloud:28-fpm-alpine
    container_name: nextcloud-app
    restart: unless-stopped
    depends_on:
      - db
      - redis
    environment:
      POSTGRES_HOST: db
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: надёжный-пароль-бд
      NEXTCLOUD_ADMIN_USER: admin
      NEXTCLOUD_ADMIN_PASSWORD: пароль-администратора
      NEXTCLOUD_TRUSTED_DOMAINS: cloud.example.com
      REDIS_HOST: redis
      REDIS_HOST_PASSWORD: пароль-redis
      PHP_MEMORY_LIMIT: 512M
      PHP_UPLOAD_LIMIT: 10G
    volumes:
      - ./data:/var/www/html
    networks:
      - nextcloud-net

  nginx:
    image: nginx:alpine
    container_name: nextcloud-nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./data:/var/www/html:ro
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/ssl/nextcloud:ro
    depends_on:
      - app
    networks:
      - nextcloud-net

  cron:
    image: nextcloud:28-fpm-alpine
    container_name: nextcloud-cron
    restart: unless-stopped
    volumes:
      - ./data:/var/www/html
    entrypoint: /cron.sh
    depends_on:
      - db
      - redis
    networks:
      - nextcloud-net

networks:
  nextcloud-net:
    driver: bridge

SSL-сертификат

hljs bash
# Сертификат Let's Encrypt с Certbot
apt install certbot -y
certbot certonly --standalone -d cloud.example.com

# Копирование сертификатов
mkdir -p /opt/nextcloud/ssl
cp /etc/letsencrypt/live/cloud.example.com/fullchain.pem /opt/nextcloud/ssl/
cp /etc/letsencrypt/live/cloud.example.com/privkey.pem /opt/nextcloud/ssl/

# Автоматическое обновление через cron
echo "0 3 * * * certbot renew --quiet && cp /etc/letsencrypt/live/cloud.example.com/*.pem /opt/nextcloud/ssl/ && docker restart nextcloud-nginx" | crontab -

Запуск Nextcloud

hljs bash
cd /opt/nextcloud
docker compose up -d

# Следить за логами
docker compose logs -f app

# После установки откройте:
# https://cloud.example.com

Команды occ

Управляйте Nextcloud с помощью инструмента командной строки occ:

hljs bash
# Выполнение команды occ
docker exec -u www-data nextcloud-app php occ [команда]

# Проверка статуса системы
docker exec -u www-data nextcloud-app php occ status

# Переключение режима обслуживания
docker exec -u www-data nextcloud-app php occ maintenance:mode --on
docker exec -u www-data nextcloud-app php occ maintenance:mode --off

# Добавление отсутствующих индексов
docker exec -u www-data nextcloud-app php occ db:add-missing-indices

# Сканирование файлов (обнаружение новых файлов)
docker exec -u www-data nextcloud-app php occ files:scan --all

# Очистка кэша
docker exec -u www-data nextcloud-app php occ cache:clear

# Список пользователей
docker exec -u www-data nextcloud-app php occ user:list

Установка приложений

hljs bash
# Список доступных приложений
docker exec -u www-data nextcloud-app php occ app:list

# Установка приложений
docker exec -u www-data nextcloud-app php occ app:install calendar
docker exec -u www-data nextcloud-app php occ app:install contacts
docker exec -u www-data nextcloud-app php occ app:install talk
docker exec -u www-data nextcloud-app php occ app:install onlyoffice

Оптимизация производительности

Кэширование Redis

Redis уже настроен в docker-compose.yml. Добавьте в конфигурацию Nextcloud:

hljs bash
docker exec -u www-data nextcloud-app php occ config:system:set redis host --value="redis"
docker exec -u www-data nextcloud-app php occ config:system:set redis port --value=6379 --type=integer
docker exec -u www-data nextcloud-app php occ config:system:set redis password --value="пароль-redis"
docker exec -u www-data nextcloud-app php occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu"
docker exec -u www-data nextcloud-app php occ config:system:set memcache.distributed --value="\\OC\\Memcache\\Redis"
docker exec -u www-data nextcloud-app php occ config:system:set memcache.locking --value="\\OC\\Memcache\\Redis"

Настройки безопасности

hljs bash
# Добавление доверенного домена
docker exec -u www-data nextcloud-app php occ config:system:set trusted_domains 1 --value="cloud.example.com"

# Защита от брутфорса
docker exec -u www-data nextcloud-app php occ config:system:set auth.bruteforce.protection.enabled --value=true --type=boolean

# Принудительное использование 2FA
docker exec -u www-data nextcloud-app php occ twofactorauth:enforce --on

Рекомендуем использовать SSD-хранилище для Nextcloud на серверах REXE. Производительность NVMe SSD имеет критическое значение при передаче больших файлов.

Часто задаваемые вопросы

После установки Nextcloud получаю ошибку 'Trusted domain'.

Эта ошибка возникает, потому что домен, к которому вы обращаетесь, не находится в списке доверенных доменов Nextcloud. Добавьте домен командой: 'docker exec -u www-data nextcloud-app php occ config:system:set trusted_domains 1 --value="cloud.example.com"'. Или отредактируйте /opt/nextcloud/data/config/config.php и добавьте его в массив trusted_domains.

При загрузке больших файлов получаю ошибку тайм-аута.

Увеличьте значения PHP_UPLOAD_LIMIT и PHP_MEMORY_LIMIT в docker-compose.yml. Также обновите значение client_max_body_size в конфигурации Nginx. Установите fastcgi_read_timeout на 3600 или выше. Перезапустите контейнеры после внесения изменений.

Nextcloud работает очень медленно, как его ускорить?

Убедитесь, что кэширование Redis активно. Включите APCu. Добавьте индексы базы данных с помощью 'occ db:add-missing-indices'. Если используете PostgreSQL (быстрее MySQL), выполните VACUUM ANALYZE. Проверьте, что cron-задание для генерации превью работает регулярно.

Что нужно сделать для обновления Nextcloud?

Обновите версию образа в docker-compose.yml (например, nextcloud:28 → nextcloud:29). Выполните 'docker compose pull && docker compose up -d'. После обновления запустите 'occ upgrade' и 'occ db:add-missing-indices'. Всегда делайте резервную копию перед обновлением основных версий.

Nextcloud Talk (видеоконференции) не работает.

Приложению Talk требуется TURN/STUN-сервер. Настройте Coturn или используйте бесплатный STUN-сервер Nextcloud. Настройте адрес STUN/TURN-сервера в настройках Talk. Убедитесь, что порты 3478 (UDP/TCP) и 5349 (TLS) открыты.

Как добавить внешнее хранилище (S3, FTP, SMB)?

Включите приложение 'External Storage Support' в Nextcloud. Перейдите в Settings → Administration → External Storages в панели администратора. Вы можете добавить типы хранилищ: S3, FTP, SFTP, SMB/CIFS, WebDAV. Для каждого пользователя или группы можно определить разное внешнее хранилище.

Связанные статьи

Сетевой трафикВходящий GbpsИсходящий Gbps