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

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

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

Время чтения: 16 мин Самостоятельный хостинг
nextcloudоблачное хранилищеself-hostingdockerсинхронизация файловсовместная работа

Содержание

Установка 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 имеет критическое значение при передаче больших файлов.