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

Переглянути сервери arrow_forward
eco Початковий Туторіал

Встановлення Nextcloud на VPS:

calendar_month Jul 14, 2026 schedule 20 хв. читання visibility 19 переглядів
Установка 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.