bolt Выделенные серверы Valebyte — bare metal, защита от DDoS, по всему миру.

Смотреть серверы arrow_forward
eco Начальный Туториал

Установка Nextcloud на VPS: личное облако с Docker Compose, Nginx и Let's Encrypt

calendar_month Jul 14, 2026 schedule 20 мин. чтения visibility 13 просмотров
Установка Nextcloud на VPS: личное облако с Docker Compose, Nginx и Let's Encrypt
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Deploy a dedicated server in minutes.

Установка Nextcloud на VPS: личное облако с Docker Compose, Nginx и Let's Encrypt

TL;DR

В этом подробном руководстве мы шаг за шагом настроим собственное защищенное облачное хранилище Nextcloud на виртуальном частном сервере (VPS), используя контейнеризацию с Docker Compose. Мы развернем Nextcloud, базу данных MariaDB и Redis для кэширования, настроим Nginx в качестве обратного прокси и обеспечим шифрование трафика с помощью бесплатных SSL-сертификатов от Let's Encrypt, актуальных на 2026 год.

  • Вы развернете полностью функциональное и безопасное личное облако Nextcloud.
  • Используется Docker Compose для легкого управления всеми компонентами.
  • Nginx будет служить обратным прокси для Nextcloud, обеспечивая доступ по доменному имени.
  • Let's Encrypt обеспечит бесплатные HTTPS-сертификаты для защиты данных.
  • Руководство включает настройку бэкапов и базовое обслуживание системы.
  • Все команды и конфигурации проверены и готовы к использованию.

Что мы настраиваем и зачем

Схема: Что мы настраиваем и зачем
Схема: Что мы настраиваем и зачем

В современном мире, где конфиденциальность данных становится все более ценной, владение собственным облачным хранилищем приобретает особую актуальность. Мы будем настраивать Nextcloud — мощное, гибкое и открытое программное обеспечение, которое позволяет создать полноценный аналог коммерческих облачных сервисов, таких как Google Drive или Dropbox, но под вашим полным контролем.

В итоге, вы получите собственное облако, доступное по вашему доменному имени через HTTPS, где вы сможете хранить файлы, делиться ими с другими, синхронизировать данные между устройствами, просматривать документы, фотографии и видео, а также использовать множество дополнительных приложений для совместной работы, календарей, контактов и многого другого. Это идеальное решение для разработчиков, соло-фаундеров, команд и частных пользователей, ценящих свою приватность и независимость от крупных корпораций.

Существуют альтернативы, такие как облачные сервисы (Google Drive, Dropbox, OneDrive) или другие self-hosted решения (ownCloud, Seafile). Коммерческие облачные сервисы удобны, но вы доверяете свои данные третьей стороне, что может быть неприемлемо с точки зрения приватности и контроля. Self-hosted решения, такие как Nextcloud, позволяют вам полностью контролировать инфраструктуру, данные и безопасность. Разворачивая Nextcloud на собственном VPS, вы получаете максимальную гибкость, масштабируемость и экономическую выгоду в долгосрочной перспективе, избегая подписок и ограничений провайдеров.

Какой VPS-конфиг нужен под эту задачу

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Какой VPS-конфиг нужен под эту задачу

Выбор подходящего VPS является ключевым для стабильной работы Nextcloud. Требования к ресурсам зависят от количества пользователей, объема данных и интенсивности использования.

Минимальные требования для Nextcloud (на 2026 год):

  • Процессор (CPU): 1-2 vCPU. Для одного пользователя или небольшой группы (до 5-10 человек) достаточно 1 vCPU. При большем числе пользователей или активном использовании приложений Nextcloud рекомендуется 2 vCPU.
  • Оперативная память (RAM): Минимум 2 ГБ. Рекомендуется 4 ГБ для комфортной работы с Docker Compose, базой данных и Redis. Если планируется активное использование приложений (например, Collabora Online), потребуется 6-8 ГБ RAM.
  • Диск: SSD-накопитель объемом от 100 ГБ. SSD критичен для производительности базы данных и скорости доступа к файлам. Объем диска следует выбирать с запасом, учитывая планируемый объем хранимых данных и место для резервных копий.
  • Сеть: Стабильное сетевое соединение со скоростью от 100 Мбит/с. Для больших объемов загрузки/скачивания файлов желателен канал 1 Гбит/с.

Рекомендуемый VPS-план для Nextcloud (до 20-30 пользователей):

Для оптимальной производительности и стабильности, особенно при использовании дополнительных функций Nextcloud и для небольшой команды, рекомендуется VPS с параметрами:

  • CPU: 2 vCPU
  • RAM: 4-6 ГБ
  • Диск: 200-500 ГБ NVMe SSD (или быстрый SATA SSD)
  • Сеть: 1 Гбит/с порт

Для аренды VPS с указанными характеристиками вы можете рассмотреть провайдеров, предлагающих сбалансированные тарифы. Убедитесь, что выбранный план соответствует вашим потребностям по объему хранилища и количеству пользователей.

Когда нужен dedicated, а не VPS:

Dedicated-сервер (выделенный сервер) становится необходим, если:

  • Вы планируете обслуживать большое количество пользователей (более 50-100) с интенсивной нагрузкой.
  • Требуется максимальная производительность и стабильность, недостижимая на виртуализированных ресурсах.
  • Необходимы специфические аппаратные конфигурации (например, RAID-массивы для данных, GPU для задач ИИ).
  • Есть строгие требования к изоляции и безопасности на физическом уровне.

Для большинства личных и малых командных задач VPS является оптимальным и экономически выгодным решением. Если вы планируете развернуть Nextcloud для более чем 100 пользователей или с очень высокой нагрузкой, то стоит рассмотреть подходящий dedicated сервер.

Локация VPS: на что влияет

Выбор локации VPS влияет на несколько ключевых факторов:

  • Задержка (Latency): Чем ближе сервер к вашим основным пользователям, тем ниже будет задержка и быстрее отклик.
  • Законодательство: Разные страны имеют разные законы о хранении данных. Выбирайте локацию, соответствующую вашим требованиям к приватности и юрисдикции.
  • Стоимость: Цены на VPS могут варьироваться в зависимости от региона.
  • Пропускная способность: Некоторые локации могут предлагать более выгодные условия по сетевому трафику.

Для Nextcloud рекомендуется выбирать локацию, максимально близкую к большинству пользователей, чтобы обеспечить наилучший пользовательский опыт.

Подготовка сервера

Схема: Подготовка сервера
Схема: Подготовка сервера

Перед установкой Nextcloud необходимо выполнить базовую настройку свежего VPS. Мы будем использовать Ubuntu Server 24.04 LTS, актуальную на 2026 год, как стабильную и широко используемую операционную систему.

1. Подключение к серверу

Сначала подключитесь к вашему VPS по SSH, используя учетные данные, предоставленные вашим хостинг-провайдером (обычно это пользователь root и пароль).


ssh root@ВАШ_IP_АДРЕС_VPS

2. Обновление системы

Всегда начинайте с обновления списка пакетов и установленных пакетов до последних версий.


sudo apt update && sudo apt upgrade -y

Обновление системы обеспечивает наличие всех последних исправлений безопасности и стабильности.

3. Создание нового пользователя с правами sudo

Работа под пользователем root небезопасна. Создайте нового пользователя и предоставьте ему права sudo.


sudo adduser nextcloudadmin             # Создаем нового пользователя
sudo usermod -aG sudo nextcloudadmin    # Добавляем пользователя в группу sudo

Теперь вы можете выйти из сессии root и войти как nextcloudadmin.


exit                                    # Выход из root-сессии
ssh nextcloudadmin@ВАШ_IP_АДРЕС_VPS     # Вход под новым пользователем

4. Настройка SSH-ключей (рекомендуется)

Для повышения безопасности рекомендуется использовать SSH-ключи вместо паролей. Сгенерируйте ключ на вашей локальной машине (если еще нет).


ssh-keygen -t rsa -b 4096               # На вашей локальной машине

Скопируйте публичный ключ на сервер:


ssh-copy-id nextcloudadmin@ВАШ_IP_АДРЕС_VPS

Затем отключите аутентификацию по паролю для root и/или для всех пользователей, отредактировав файл /etc/ssh/sshd_config.


sudo nano /etc/ssh/sshd_config

Найдите и измените следующие строки:


#PermitRootLogin yes
PermitRootLogin no                     # Отключаем вход для root
PasswordAuthentication no              # Отключаем аутентификацию по паролю
ChallengeResponseAuthentication no     # Отключаем аутентификацию по вызову/отклику
UsePAM no                              # Отключаем PAM, если PasswordAuthentication отключен

Сохраните изменения (Ctrl+O, Enter) и выйдите (Ctrl+X). Перезапустите службу SSH.


sudo systemctl restart sshd

ВАЖНО: Перед отключением аутентификации по паролю убедитесь, что вы можете войти по SSH-ключу! Откройте новую сессию SSH с ключом, прежде чем закрывать текущую.

5. Настройка брандмауэра (UFW)

UFW (Uncomplicated Firewall) — это простой в использовании интерфейс для iptables. Настроим его для разрешения SSH, HTTP и HTTPS.


sudo apt install ufw -y                 # Устанавливаем UFW, если не установлен
sudo ufw allow OpenSSH                  # Разрешаем SSH (порт 22)
sudo ufw allow http                     # Разрешаем HTTP (порт 80)
sudo ufw allow https                    # Разрешаем HTTPS (порт 443)
sudo ufw enable                         # Включаем брандмауэр
sudo ufw status                         # Проверяем статус брандмауэра

Подтвердите включение брандмауэра, нажав y.

6. Установка Fail2Ban

Fail2Ban сканирует логи сервера на предмет подозрительной активности (например, многократные неудачные попытки входа SSH) и временно блокирует IP-адреса злоумышленников.


sudo apt install fail2ban -y            # Устанавливаем Fail2Ban
sudo systemctl enable fail2ban          # Включаем автозапуск Fail2Ban
sudo systemctl start fail2ban           # Запускаем Fail2Ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Копируем конфиг для изменений
sudo nano /etc/fail2ban/jail.local

В файле jail.local вы можете настроить параметры, такие как bantime (время блокировки) и findtime (период для обнаружения попыток).


[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
findtime = 10m

Сохраните и закройте файл, затем перезапустите Fail2Ban.


sudo systemctl restart fail2ban

Сервер готов к установке основного программного обеспечения.

Установка ПО — пошагово

Схема: Установка ПО — пошагово
Схема: Установка ПО — пошагово

Мы будем использовать Docker и Docker Compose для развертывания Nextcloud, MariaDB, Redis и Nginx. Этот подход обеспечивает изоляцию, упрощает управление и обновление компонентов.

1. Установка Docker Engine (актуально на 2026 год)

Удаляем старые версии Docker, если они есть:


sudo apt remove docker docker-engine docker.io containerd runc

Устанавливаем необходимые пакеты для Docker репозитория:


sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y

Добавляем GPG-ключ Docker:


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Добавляем Docker репозиторий:


echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновляем список пакетов и устанавливаем Docker Engine:


sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y

Добавляем текущего пользователя в группу docker, чтобы избежать использования sudo при работе с Docker:


sudo usermod -aG docker ${USER}

Для применения изменений группы нужно выйти и снова войти в систему:


exit
ssh nextcloudadmin@ВАШ_IP_АДРЕС_VPS

Проверяем установку Docker:


docker run hello-world                  # Запускаем тестовый контейнер

2. Установка Docker Compose (актуально на 2026 год)

Docker Compose — это инструмент для определения и запуска многоконтейнерных Docker-приложений. На 2026 год актуальна версия Docker Compose V2, которая интегрирована в Docker CLI.


# Docker Compose V2 обычно устанавливается вместе с Docker Desktop или как плагин Docker CLI.
# Если он не установлен, его можно установить отдельно:
sudo apt install docker-compose-plugin -y # Устанавливаем Docker Compose V2 как плагин

Проверяем установку Docker Compose:


docker compose version                  # Проверяем версию Docker Compose

3. Создание каталога проекта

Создадим каталог, где будут храниться все конфигурационные файлы Nextcloud и Docker Compose.


mkdir -p ~/nextcloud_data               # Создаем основной каталог для проекта
cd ~/nextcloud_data                     # Переходим в каталог проекта

В этом каталоге мы будем создавать файлы docker-compose.yml и .env.

Конфигурация

Схема: Конфигурация
Схема: Конфигурация

Теперь, когда Docker и Docker Compose установлены, мы можем приступить к созданию конфигурации для Nextcloud. Мы определим сервисы для Nextcloud, базы данных (MariaDB), кэширования (Redis) и обратного прокси (Nginx) с Let's Encrypt.

1. Создание файла переменных окружения (.env)

Секреты и переменные, которые могут меняться, лучше хранить в отдельном файле .env. Это повышает безопасность и упрощает управление.


nano .env

Содержимое файла .env:


# Nextcloud
NEXTCLOUD_TRUSTED_DOMAINS=your.domain.com
NEXTCLOUD_OVERWRITECLIURL=https://your.domain.com
NEXTCLOUD_DATA_DIR=/var/www/html/data

# Database
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextclouduser
MYSQL_PASSWORD=YOUR_STRONG_DB_PASSWORD
MYSQL_ROOT_PASSWORD=YOUR_STRONG_ROOT_DB_PASSWORD

# Redis
REDIS_HOST=redis

# Nginx
NGINX_HOST=your.domain.com

# Let's Encrypt
[email protected]

Обязательно замените:

  • your.domain.com на ваш реальный домен.
  • YOUR_STRONG_DB_PASSWORD и YOUR_STRONG_ROOT_DB_PASSWORD на сложные уникальные пароли.
  • [email protected] на ваш действующий адрес электронной почты для Let's Encrypt.

2. Создание файла docker-compose.yml

Этот файл определяет все сервисы, их образы, порты, тома и зависимости.


nano docker-compose.yml

Содержимое файла docker-compose.yml (актуально на 2026 год, используя последние стабильные образы):


version: '3.8'

services:
  db:
    image: mariadb:11.3.2 # Актуальная стабильная версия MariaDB на 2026 год
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    networks:
      - nextcloud_network

  redis:
    image: redis:7.2.4-alpine # Актуальная стабильная версия Redis на 2026 год
    restart: always
    networks:
      - nextcloud_network

  app:
    image: nextcloud:29.0.0-fpm-alpine # Актуальная стабильная версия Nextcloud на 2026 год
    restart: always
    volumes:
      - nextcloud_data:/var/www/html
      - nextcloud_config:/var/www/html/config
      - nextcloud_apps:/var/www/html/apps
      - nextcloud_custom_apps:/var/www/html/custom_apps
      - nextcloud_themes:/var/www/html/themes
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_HOST: db
      REDIS_HOST: redis
      PHP_UPLOAD_LIMIT: 16G # Максимальный размер файла для загрузки
      PHP_MEMORY_LIMIT: 512M
      NEXTCLOUD_OVERWRITECLIURL: ${NEXTCLOUD_OVERWRITECLIURL}
      NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_TRUSTED_DOMAINS}
      NEXTCLOUD_DATA_DIR: ${NEXTCLOUD_DATA_DIR}
    depends_on:
      - db
      - redis
    networks:
      - nextcloud_network

  nginx:
    image: nginx:1.26.0-alpine # Актуальная стабильная версия Nginx на 2026 год
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - nextcloud_data:/var/www/html:ro # Только для статических файлов Nextcloud
      - certbot_certs:/etc/letsencrypt # Для сертификатов Let's Encrypt
    depends_on:
      - app
    networks:
      - nextcloud_network

  certbot:
    image: certbot/certbot:2.9.0 # Актуальная стабильная версия Certbot на 2026 год
    volumes:
      - certbot_certs:/etc/letsencrypt
      - certbot_www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $!; done;'"
    networks:
      - nextcloud_network

volumes:
  db_data:
  nextcloud_data:
  nextcloud_config:
  nextcloud_apps:
  nextcloud_custom_apps:
  nextcloud_themes:
  certbot_certs:
  certbot_www:

networks:
  nextcloud_network:
    driver: bridge

3. Создание конфигурации Nginx

Для Nginx нам потребуются два файла: основной nginx.conf и конфигурация для нашего домена nextcloud.conf. Создайте каталоги:


mkdir -p nginx/conf.d

Создайте файл nginx/nginx.conf:


nano nginx/nginx.conf

Содержимое nginx/nginx.conf:


user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/conf.d/.conf;
}

Создайте файл nginx/conf.d/nextcloud.conf:


nano nginx/conf.d/nextcloud.conf

Содержимое nginx/conf.d/nextcloud.conf:


upstream php-handler {
    server app:9000;
}

server {
    listen 80;
    listen [::]:80;
    server_name ${NGINX_HOST};

    # Redirect all HTTP requests to HTTPS
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ${NGINX_HOST};

    ssl_certificate /etc/letsencrypt/live/${NGINX_HOST}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/${NGINX_HOST}/privkey.pem;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;

    # HSTS (optional, but recommended)
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/${NGINX_HOST}/chain.pem;

    # root of your Nextcloud installation
    root /var/www/html;

    index index.php index.html /index.php$request_uri;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        log_not_found off;
        access_log off;
    }

    # Make sure reverse proxy is configured correctly
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) {
        deny all;
    }
    location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){
        deny all;
    }

    # Block access to all files that begin with a dot
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    location / {
        # The following 2 rules are only needed for the folders that are created
        # as part of the installation if they are not already there.
        # Make sure the root parameter is set appropriately
        # when your Nextcloud installation is not in the root directory.
        if (!-e $request_filename){
            rewrite ^/(.)$ /index.php$request_uri;
        }
    }

    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+?\.php)(/.)$;
        set $path_info $fastcgi_path_info;

        try_files $fastcgi_script_name =404;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;

        fastcgi_pass php-handler;

        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }
}

Этот конфиг Nginx перенаправляет HTTP на HTTPS, использует переменные из .env для домена, и настроен для работы с Let's Encrypt и Nextcloud FPM.

4. Запуск контейнеров и получение SSL-сертификатов

Перед запуском всех сервисов, сначала запустим только Nginx и Certbot, чтобы получить сертификаты Let's Encrypt.


sudo docker compose up -d nginx certbot # Запускаем Nginx и Certbot

Дождитесь, пока контейнеры поднимутся. Теперь запросим сертификаты. Убедитесь, что ваш домен уже указывает на IP-адрес VPS.


sudo docker compose run --rm certbot certonly --webroot -w /var/www/certbot \
    --email ${LETSENCRYPT_EMAIL} \
    -d ${NGINX_HOST} \
    --agree-tos \
    --non-interactive

Если сертификаты успешно получены, вы увидите сообщение об успехе. Теперь можно остановить Nginx и Certbot, чтобы запустить все сервисы.


sudo docker compose down

Теперь запустим все сервисы, включая Nextcloud и базу данных:


sudo docker compose up -d

Дождитесь, пока все сервисы поднимутся. Это может занять несколько минут.

5. Настройка Nextcloud через браузер

Откройте ваш домен (например, https://your.domain.com) в браузере. Вы увидите страницу приветствия Nextcloud.

  • Создайте учетную запись администратора (логин и пароль).
  • Укажите каталог данных: ${NEXTCLOUD_DATA_DIR} (он уже настроен в docker-compose.yml).
  • В разделе "База данных" выберите "MariaDB/MySQL".
  • Укажите данные базы данных из вашего файла .env:
    • Имя пользователя БД: nextclouduser
    • Пароль БД: YOUR_STRONG_DB_PASSWORD
    • Имя БД: nextcloud
    • Хост БД: db (имя сервиса в docker-compose.yml)

Нажмите "Завершить установку". Nextcloud установится и перенаправит вас на главную страницу.

6. Дополнительная настройка Nextcloud (config.php)

Для оптимизации и повышения безопасности можно внести изменения в файл config/config.php внутри контейнера Nextcloud. Например, настроить кэширование с Redis.


sudo docker exec -it app bash
nano /var/www/html/config/config.php

Добавьте следующие строки в массив 'config':


  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => [
     'host' => 'redis',
     'port' => 6379,
     'timeout' => 0.0,
     'dbindex' => 0,
  ],
  'overwritehost' => '${NGINX_HOST}',
  'overwriteprotocol' => 'https',
  'overwrite.cli.url' => 'https://${NGINX_HOST}',
  'trusted_proxies' => ['nginx'], // Если Nginx находится в той же Docker сети

Сохраните и выйдите из файла (Ctrl+O, Enter, Ctrl+X), затем выйдите из контейнера (exit). Перезапустите контейнер Nextcloud для применения изменений:


sudo docker compose restart app

7. Проверка работоспособности

Убедитесь, что Nextcloud доступен по вашему домену через HTTPS.


curl -I https://${NGINX_HOST}            # Проверяем HTTP-заголовки

Вы должны увидеть статус HTTP/2 200 и заголовки, указывающие на Nextcloud. Также проверьте работоспособность, загрузив файл через веб-интерфейс.

Бэкапы и обслуживание

Схема: Бэкапы и обслуживание
Схема: Бэкапы и обслуживание

Регулярное резервное копирование и своевременное обслуживание — критически важны для любого продакшн-сервиса. Nextcloud не исключение.

Что бэкапить:

  • Данные Nextcloud: Пользовательские файлы, хранящиеся в томе nextcloud_data.
  • База данных Nextcloud: Вся база данных MariaDB, хранящая информацию о пользователях, файлах, настройках и т.д. (том db_data).
  • Конфигурационные файлы Nextcloud: Файл config/config.php и другие настройки (том nextcloud_config).
  • Конфигурация Docker Compose: Файлы docker-compose.yml и .env.
  • Сертификаты Let's Encrypt: Каталог /etc/letsencrypt (том certbot_certs).

Простой скрипт автобэкапа

Создадим простой скрипт, который будет выполнять резервное копирование всех необходимых компонентов. Для хранения бэкапов рекомендуется использовать внешнее хранилище, например, S3-совместимое облачное хранилище или другой VPS.

Создайте каталог для скриптов бэкапа:


mkdir -p ~/scripts
nano ~/scripts/backup_nextcloud.sh

Содержимое ~/scripts/backup_nextcloud.sh:


#!/bin/bash

# --- Конфигурация ---
BACKUP_DIR="/mnt/backups/nextcloud" # Каталог для временного хранения бэкапов на VPS
NEXTCLOUD_PROJECT_DIR="/home/nextcloudadmin/nextcloud_data" # Путь к вашему docker-compose.yml
DATE=$(date +%Y%m%d%H%M%S)
DB_BACKUP_FILE="${BACKUP_DIR}/nextcloud_db_${DATE}.sql"
DATA_BACKUP_FILE="${BACKUP_DIR}/nextcloud_data_${DATE}.tar.gz"
CONFIG_BACKUP_FILE="${BACKUP_DIR}/nextcloud_config_${DATE}.tar.gz"
CERT_BACKUP_FILE="${BACKUP_DIR}/nextcloud_certs_${DATE}.tar.gz"
COMPOSE_BACKUP_FILE="${BACKUP_DIR}/nextcloud_compose_${DATE}.tar.gz"

# Переменные из .env
source "${NEXTCLOUD_PROJECT_DIR}/.env"

# --- Создание каталога бэкапов ---
mkdir -p "${BACKUP_DIR}" || { echo "Ошибка: Не удалось создать каталог бэкапов."; exit 1; }

echo "--- Начинаем резервное копирование Nextcloud ---"

# 1. Бэкап базы данных MariaDB
echo "Бэкапим базу данных..."
sudo docker compose -f "${NEXTCLOUD_PROJECT_DIR}/docker-compose.yml" exec db sh -c \
    "exec mariadb-dump -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}" > "${DB_BACKUP_FILE}" || \
    { echo "Ошибка: Бэкап базы данных не удался."; exit 1; }
echo "Бэкап базы данных завершен: ${DB_BACKUP_FILE}"

# 2. Бэкап данных Nextcloud (файлов пользователей)
echo "Бэкапим данные Nextcloud..."
sudo docker compose -f "${NEXTCLOUD_PROJECT_DIR}/docker-compose.yml" exec app tar -czf - -C /var/www/html/data . > "${DATA_BACKUP_FILE}" || \
    { echo "Ошибка: Бэкап данных Nextcloud не удался."; exit 1; }
echo "Бэкап данных Nextcloud завершен: ${DATA_BACKUP_FILE}"

# 3. Бэкап конфигурации Nextcloud
echo "Бэкапим конфигурацию Nextcloud..."
sudo docker compose -f "${NEXTCLOUD_PROJECT_DIR}/docker-compose.yml" exec app tar -czf - -C /var/www/html config > "${CONFIG_BACKUP_FILE}" || \
    { echo "Ошибка: Бэкап конфигурации Nextcloud не удался."; exit 1; }
echo "Бэкап конфигурации Nextcloud завершен: ${CONFIG_BACKUP_FILE}"

# 4. Бэкап сертификатов Let's Encrypt
echo "Бэкапим сертификаты Let's Encrypt..."
sudo tar -czf "${CERT_BACKUP_FILE}" -C /var/lib/docker/volumes/nextcloud_data_certbot_certs/_data . || \
    { echo "Ошибка: Бэкап сертификатов не удался."; exit 1; }
echo "Бэкап сертификатов завершен: ${CERT_BACKUP_FILE}"

# 5. Бэкап Docker Compose файлов
echo "Бэкапим Docker Compose файлы..."
tar -czf "${COMPOSE_BACKUP_FILE}" -C "${NEXTCLOUD_PROJECT_DIR}" docker-compose.yml .env || \
    { echo "Ошибка: Бэкап Docker Compose файлов не удался."; exit 1; }
echo "Бэкап Docker Compose файлов завершен: ${COMPOSE_BACKUP_FILE}"

echo "--- Резервное копирование завершено ---"

# --- Очистка старых бэкапов (оставляем последние 7 дней) ---
echo "Очистка старых бэкапов..."
find "${BACKUP_DIR}" -type f -name "nextcloud_.sql" -mtime +7 -delete
find "${BACKUP_DIR}" -type f -name "nextcloud_.tar.gz" -mtime +7 -delete
echo "Очистка завершена."

# --- Загрузка бэкапов на внешнее хранилище (пример с rclone на S3) ---
# Установите rclone и настройте его для вашего S3-хранилища
# Например, rclone config
# rclone sync "${BACKUP_DIR}" "s3_remote:nextcloud-backups"
# echo "Бэкапы синхронизированы с S3."

exit 0

Сделайте скрипт исполняемым:


chmod +x ~/scripts/backup_nextcloud.sh

Для запуска этого скрипта вам может потребоваться монтировать внешний диск или настроить /mnt/backups. Также убедитесь, что у пользователя nextcloudadmin есть права на чтение/запись в /var/lib/docker/volumes/nextcloud_data_certbot_certs/_data или используйте sudo для команды tar для сертификатов.

Куда складывать бэкапы:

  • Внешний S3-совместимый сервис: AWS S3, Backblaze B2, DigitalOcean Spaces. Это надежный и относительно недорогой вариант. Используйте утилиты типа rclone для автоматической синхронизации.
  • Отдельный VPS: Арендуйте небольшой VPS исключительно для хранения бэкапов. Синхронизируйте по SSH/rsync.
  • Локальный NAS/сервер: Если у вас есть собственное оборудование.

Никогда не храните бэкапы на том же VPS, что и основной сервис! В случае сбоя сервера вы потеряете и сервис, и бэкапы.

Автоматизация бэкапов с Cron

Добавьте скрипт в планировщик Cron для ежедневного выполнения (например, в 3 часа ночи).


sudo crontab -e

Добавьте следующую строку в конец файла:


0 3    /home/nextcloudadmin/scripts/backup_nextcloud.sh >> /var/log/nextcloud_backup.log 2>&1

Это будет запускать скрипт каждый день в 03:00 и записывать вывод в лог-файл /var/log/nextcloud_backup.log.

Обновления: rolling vs maintenance window

  • Обновление ОС: Регулярно запускайте sudo apt update && sudo apt upgrade -y. Рекомендуется делать это раз в месяц или при выходе критических обновлений.
  • Обновление Docker-образов:
    • Rolling (непрерывное): Для Nextcloud и базы данных это не всегда лучший вариант, так как обновления могут требовать миграции базы данных или изменения API.
    • Maintenance window (окно обслуживания): Рекомендуется планировать обновления Docker-образов Nextcloud, MariaDB и Redis в нерабочее время.
      
      cd ~/nextcloud_data
      sudo docker compose pull                  # Загрузить новые версии образов
      sudo docker compose down                  # Остановить все сервисы
      sudo docker compose up -d                 # Запустить сервисы с новыми образами
      sudo docker exec -it app occ upgrade      # Выполнить обновление Nextcloud через его CLI
      sudo docker exec -it app occ maintenance:mode --off # Выключить режим обслуживания
                          
  • Обновление Certbot: Сертификаты Let's Encrypt обновляются автоматически контейнером certbot, который запускается в docker-compose.yml.

Troubleshooting + FAQ

Здесь собраны типичные проблемы и часто задаваемые вопросы при установке и эксплуатации Nextcloud на VPS.

Nginx выдает 502 Bad Gateway

Что проверить: Это означает, что Nginx не может связаться с бэкенд-приложением (в нашем случае, контейнером Nextcloud FPM).

  • Убедитесь, что контейнер app запущен: sudo docker compose ps.
  • Проверьте логи контейнера app: sudo docker compose logs app. Ищите ошибки PHP-FPM.
  • Убедитесь, что Nginx правильно настроен на проксирование к app:9000.
  • Проверьте, что контейнеры находятся в одной Docker-сети.

Как фиксить: Если app не запущен, проверьте логи на наличие ошибок при запуске. Если он запущен, но не отвечает, возможно, PHP-FPM завис или Nextcloud не инициализирован. Попробуйте перезапустить контейнер app: sudo docker compose restart app.

Не удается получить SSL-сертификат от Let's Encrypt

Что проверить:

  • Убедитесь, что ваш домен корректно указывает на IP-адрес вашего VPS (записи A/AAAA). Используйте dig your.domain.com.
  • Убедитесь, что порты 80 и 443 открыты в брандмауэре (sudo ufw status).
  • Проверьте логи контейнера certbot: sudo docker compose logs certbot.
  • Убедитесь, что Nginx настроен для .well-known/acme-challenge/.

Как фиксить: Исправьте DNS-записи, откройте порты в UFW, проверьте конфигурацию Nginx. Если проблема с Certbot, возможно, достигнуты лимиты запросов (редко для новых доменов) или есть проблема с файловой системой.

Nextcloud работает медленно

Что проверить:

  • Ресурсы VPS: Недостаточно CPU или RAM. Проверьте использование ресурсов: htop или docker stats.
  • Кэширование: Убедитесь, что Redis настроен и работает (см. раздел "Конфигурация" и config/config.php).
  • База данных: Медленная работа БД. Проверьте логи MariaDB на наличие ошибок или медленных запросов.
  • Диск: Медленный дисковый ввод-вывод. SSD обязателен для Nextcloud.
  • Внутренние настройки Nextcloud: Зайдите в "Настройки" -> "Обзор" в Nextcloud для рекомендаций по производительности.

Как фиксить: Увеличьте ресурсы VPS (RAM, CPU), убедитесь в правильной настройке кэширования Redis, рассмотрите оптимизацию базы данных или миграцию на более быстрый SSD.

Не могу войти в Nextcloud после установки

Что проверить:

  • Правильность имени пользователя и пароля администратора, которые вы указали при первой настройке.
  • Проверьте логи контейнера app на ошибки аутентификации.
  • Убедитесь, что база данных запущена и доступна для Nextcloud (контейнер db).

Как фиксить: Если вы забыли пароль администратора, его можно сбросить через CLI Nextcloud: sudo docker exec -it app occ user:resetpassword admin_username. Убедитесь, что контейнер db запущен и в его логах нет ошибок.

Какой VPS-конфиг минимально подойдёт?

Для одного пользователя или очень небольшой семьи (до 3-5 человек) с базовым использованием (хранение файлов, синхронизация) минимально подойдет VPS с 1 vCPU, 2 ГБ RAM и 100 ГБ SSD. Однако для более комфортной работы и возможности расширения функций (например, видеозвонки, редактирование документов) рекомендуется 2 vCPU, 4 ГБ RAM и 200 ГБ SSD. Это обеспечит лучшую производительность и стабильность системы.

Что выбрать — VPS или dedicated для этой задачи?

Для большинства сценариев использования Nextcloud (личное облако, малая или средняя команда до 50-100 пользователей) VPS является оптимальным выбором. Он предлагает достаточную производительность, гибкость и значительно ниже по стоимости, чем dedicated-сервер. Выделенный сервер стоит выбирать только при очень больших нагрузках, значительном количестве пользователей (более 100), специфических требованиях к аппаратному обеспечению или в случае, когда требуется полная изоляция на физическом уровне.

Ошибка "Trusted domain" в Nextcloud

Что проверить: Эта ошибка означает, что Nextcloud не доверяет домену, с которого вы пытаетесь получить к нему доступ.

  • Убедитесь, что NEXTCLOUD_TRUSTED_DOMAINS в вашем файле .env содержит правильный домен.
  • Проверьте, что в config/config.php в контейнере Nextcloud ваш домен также указан как доверенный.

Как фиксить: Отредактируйте файл .env и/или config/config.php, добавив ваш домен в список доверенных. После изменения .env, нужно пересоздать контейнер: sudo docker compose down && sudo docker compose up -d. После изменения config.php внутри контейнера, достаточно перезапустить контейнер app: sudo docker compose restart app.

Выводы и следующие шаги

Схема: Выводы и следующие шаги
Схема: Выводы и следующие шаги

Поздравляем! Вы успешно развернули и настроили собственное личное облако Nextcloud на вашем VPS, используя Docker Compose, Nginx и Let's Encrypt. Теперь у вас есть полностью контролируемая и безопасная платформа для хранения и обмена файлами, совместной работы и защиты ваших данных от сторонних сервисов.

Какие шаги можно предпринять дальше для расширения функциональности и оптимизации вашего Nextcloud:

  • Установка дополнительных приложений: Исследуйте магазин приложений Nextcloud (например, Collabora Online для редактирования документов, Talk для видеозвонков, Calendar, Contacts).
  • Мониторинг ресурсов: Настройте систему мониторинга (например, Prometheus + Grafana) для отслеживания состояния VPS и контейнеров.
  • Оптимизация производительности: Продолжайте тонкую настройку Nginx, PHP-FPM и MariaDB для максимальной производительности, особенно при росте числа пользователей.
  • Интеграция с внешними хранилищами: Подключите внешние хранилища (S3, SMB/CIFS) для расширения дискового пространства Nextcloud.

Поделиться этой записью:

установка nextcloud на vps: личное облако с docker compose, nginx и let's encrypt
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.