Гид по технологиям

Установка Nextcloud 17 на CentOS 8 с Nginx, PHP‑FPM 7.3 и MariaDB

7 min read Linux Обновлено 21 Oct 2025
Nextcloud 17 на CentOS 8 с Nginx и PHP 7.3
Nextcloud 17 на CentOS 8 с Nginx и PHP 7.3

Введение

Иллюстрация: логотип Nextcloud или облачная папка

Nextcloud — свободное (open source) облачное ПО для синхронизации и совместной работы с файлами, форк проекта ownCloud. Nextcloud написан на PHP и JavaScript и поддерживает несколько СУБД: MySQL/MariaDB, PostgreSQL, Oracle и SQLite.

Чтобы держать файлы синхронизированными между десктопом и сервером, Nextcloud предоставляет клиентские приложения для Windows, Linux и macOS, а также мобильные приложения для Android и iOS.

В этом руководстве показано, как установить Nextcloud 17 с веб‑сервером Nginx, PHP‑FPM 7.3 и базой MariaDB на сервере CentOS 8. Мы также настроим SELinux и получим бесплатный SSL‑сертификат от Let’s Encrypt.

Краткие системные требования для примера в руководстве: 2 ГБ оперативной памяти, 25 ГБ свободного места и 2 CPU.

Что мы сделаем:

  • Установим Nginx
  • Установим PHP‑FPM 7.3 из репозитория REMI
  • Настроим PHP‑FPM (php.ini, opcache)
  • Установим и настроим MariaDB
  • Получим SSL‑сертификат Let’s Encrypt
  • Скачиваем и устанавливаем Nextcloud 17
  • Настроим виртуальный хост Nginx для Nextcloud
  • Настроим SELinux для корректной работы Nextcloud
  • Выполним постустановочные шаги и проверим систему

Перед началом — важные понятия

  • PHP‑FPM — FastCGI‑процесс менеджер для PHP; отвечает за выполнение PHP‑скриптов.
  • SELinux — система управления доступом, может блокировать веб‑серверы от записи в каталоги без корректных меток.
  • certbot — клиент для автоматической выдачи сертификатов Let’s Encrypt.

Шаг 1 — Установка Nginx

Описание: установим Nginx из AppStream и откроем порты HTTP/HTTPS в firewalld.

Установите Nginx:

sudo dnf install nginx

Запустите и добавьте в автозагрузку:

systemctl start nginx
systemctl enable nginx

Проверьте статус сервиса:

systemctl status nginx

Вы должны увидеть, что сервис запущен.

Запуск Nginx через systemd

Откройте HTTP и HTTPS порты в firewalld:

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

После этого Nginx будет доступен по 80/443.

Настройка брандмауэра

Шаг 2 — Установка PHP‑FPM 7.3 (REM I)

Nextcloud 17 рекомендует PHP 7.2 или 7.3. В этом руководстве используем PHP 7.3 из репозитория REMI.

Включим PowerTools и добавим репозитории EPEL и REMI:

sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Проверьте список репозиториев:

dnf repolist

Включите модуль PHP 7.3 из REMI:

dnf module list php
dnf module enable php:remi-7.3

Добавление репозитория Remi в CentOS 8

Установите PHP и необходимые расширения для Nextcloud:

sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zip

После установки перейдём к настройке PHP‑FPM.

Шаг 3 — Настройка PHP‑FPM 7.3

Отредактируйте /etc/php.ini и замените/раскомментируйте параметры:

vim /etc/php.ini

Измените:

memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0

Примечание: установите date.timezone в ваш часовой пояс (например Europe/Moscow).

Отредактируйте настройки opcache в /etc/php.d/10-opcache.ini:

vim /etc/php.d/10-opcache.ini

Рекомендуемые параметры:

opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Отредактируйте пул www в /etc/php-fpm.d/www.conf — пользователь и группа должны быть nginx:

vim /etc/php-fpm.d/www.conf

Измените:

user = nginx
group = nginx
listen = /run/php-fpm/www.sock

Раскомментируйте переменные окружения и настройку opcache-файлового кэша:

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_value[opcache.file_cache] = /var/lib/php/opcache

Создайте директории для сессий и opcache и назначьте права:

mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}

Запустите и добавьте в автозагрузку PHP‑FPM:

systemctl enable php-fpm
systemctl start php-fpm

Проверьте сокет и статус:

netstat -pl | grep php
systemctl status php-fpm

Настройка PHP 7.3

PHP‑FPM сокет и статус

В результате PHP‑FPM должен слушать unix-сокет /run/php-fpm/www.sock.

Шаг 4 — Установка и настройка MariaDB

Установим MariaDB, зададим root‑пароль и создадим базу для Nextcloud.

sudo dnf install mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb

Настройка MariaDB

Запустите скрипт безопасной настройки:

mysql_secure_installation

Ответьте позитивно на вопросы и задайте root‑пароль.

Затем войдите в MySQL и создайте базу и пользователя (замените пароли на надёжные):

mysql -u root -p
# Введите root‑пароль
create database nextcloud_db;
create user nextclouduser@localhost identified by 'nextcloudpassdb';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'nextcloudpassdb';
flush privileges;

Создание базы данных для Nextcloud

Совет безопасности: используйте сложный пароль и при необходимости ограничьте доступ по хосту.

Шаг 5 — Получение SSL‑сертификата Let’s Encrypt

Установите certbot (из EPEL) и получите сертификат через webroot (используется каталог /usr/share/nginx/html):

sudo dnf install certbot
certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.io

После выполнения сертификаты будут в /etc/letsencrypt/live/cloud.hakase-labs.io/

ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/

Важно: замените доменное имя и e‑mail на свои. Настройте автоматическое обновление (cron/systemd timer) для certbot.

Шаг 6 — Скачивание и установка Nextcloud 17

Установите unzip, скачайте архив Nextcloud и извлеките его в /var/www:

sudo dnf install unzip
cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip
unzip nextcloud-17.0.2.zip

Создайте каталог данных и назначьте владельца nginx:

mkdir -p /var/www/nextcloud/data/
sudo chown -R nginx:nginx /var/www/nextcloud

Скачивание Nextcloud

Шаг 7 — Конфигурация виртуального хоста Nginx для Nextcloud

Создайте файл /etc/nginx/conf.d/nextcloud.conf и вставьте конфигурацию. Замените server_name и пути к сертификатам на свои.

(Ниже сохранён конфигурационный блок без изменений — поместите его в nextcloud.conf):

upstream php-handler {
 #server 127.0.0.1:9000;
 server unix:/run/php-fpm/www.sock;
}
 
server {
 listen 80;
 listen [::]:80;
 server_name cloud.hakase-labs.io;
 # enforce https
 return 301 https://$server_name:443$request_uri;
}
 
server {
 listen 443 ssl http2;
 listen [::]:443 ssl http2;
 server_name cloud.hakase-labs.io;
 
 # Use Mozilla's guidelines for SSL/TLS settings
 # https://mozilla.github.io/server-side-tls/ssl-config-generator/
 # NOTE: some settings below might be redundant
 ssl_certificate /etc/ssl/nginx/fullchain.pem;
 ssl_certificate_key /etc/ssl/nginx/privkey.pem;
 
 # Add headers to serve security related headers
 # Before enabling Strict-Transport-Security headers please read into this
 # topic first.
 #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
 #
 # WARNING: Only add the preload option once you read about
 # the consequences in https://hstspreload.org/. This option
 # will add the domain to a hardcoded list that is shipped
 # in all major browsers and getting removed from this list
 # could take several months.
 add_header Referrer-Policy "no-referrer" always;
 add_header X-Content-Type-Options "nosniff" always;
 add_header X-Download-Options "noopen" always;
 add_header X-Frame-Options "SAMEORIGIN" always;
 add_header X-Permitted-Cross-Domain-Policies "none" always;
 add_header X-Robots-Tag "none" always;
 add_header X-XSS-Protection "1; mode=block" always;
 
 # Remove X-Powered-By, which is an information leak
 fastcgi_hide_header X-Powered-By;
 
 # Path to the root of your installation
 root /var/www/nextcloud;
 
 location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }
 
 # The following 2 rules are only needed for the user_webfinger app.
 # Uncomment it if you're planning to use this app.
 #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
 #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
 
 # The following rule is only needed for the Social app.
 # Uncomment it if you're planning to use this app.
 #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
 
 location = /.well-known/carddav {
 return 301 $scheme://$host:$server_port/remote.php/dav;
 }
 location = /.well-known/caldav {
 return 301 $scheme://$host:$server_port/remote.php/dav;
 }
 
 # set max upload size
 client_max_body_size 512M;
 fastcgi_buffers 64 4K;
 
 # Enable gzip but do not remove ETag headers
 gzip on;
 gzip_vary on;
 gzip_comp_level 4;
 gzip_min_length 256;
 gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
 gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
 
 # Uncomment if your server is built with the ngx_pagespeed module
 # This module is currently not supported.
 #pagespeed off;
 
 location / {
 rewrite ^ /index.php;
 }
 
 location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
 deny all;
 }
 location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
 deny all;
 }
 
 location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.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;
 # Avoid sending the security headers twice
 fastcgi_param modHeadersAvailable true;
 # Enable pretty urls
 fastcgi_param front_controller_active true;
 fastcgi_pass php-handler;
 fastcgi_intercept_errors on;
 fastcgi_request_buffering off;
 }
 
 location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
 try_files $uri/ =404;
 index index.php;
 }
 
 # Adding the cache control header for js, css and map files
 # Make sure it is BELOW the PHP block
 location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
 try_files $uri /index.php$request_uri;
 add_header Cache-Control "public, max-age=15778463";
 # Add headers to serve security related headers (It is intended to
 # have those duplicated to the ones above)
 # Before enabling Strict-Transport-Security headers please read into
 # this topic first.
 #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
 #
 # WARNING: Only add the preload option once you read about
 # the consequences in https://hstspreload.org/. This option
 # will add the domain to a hardcoded list that is shipped
 # in all major browsers and getting removed from this list
 # could take several months.
 add_header Referrer-Policy "no-referrer" always;
 add_header X-Content-Type-Options "nosniff" always;
 add_header X-Download-Options "noopen" always;
 add_header X-Frame-Options "SAMEORIGIN" always;
 add_header X-Permitted-Cross-Domain-Policies "none" always;
 add_header X-Robots-Tag "none" always;
 add_header X-XSS-Protection "1; mode=block" always;
 
 # Optional: Don't log access to assets
 access_log off;
 }
 
 location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
 try_files $uri /index.php$request_uri;
 # Optional: Don't log access to other assets
 access_log off;
 }
}

Проверьте конфигурацию и перезапустите Nginx:

nginx -t
systemctl restart nginx

Проверьте открытые порты:

netstat -plntu

Настройка Nginx для Nextcloud

Шаг 8 — Настройка SELinux для Nextcloud (enforcing)

Если SELinux включён в режиме enforcing, нужно назначить правильные контексты для директорий Nextcloud:

Установите утилиты управления SELinux:

sudo dnf install policycoreutils-python-utils

Добавьте правила контекстов и примените их:

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'

restorecon -Rv '/var/www/nextcloud/'

После этого веб‑сервер сможет записывать в нужные каталоги.

Шаг 9 — Веб‑установка Nextcloud

Откройте браузер и перейдите по адресу вашего Nextcloud (пример):

https://cloud.hakase-labs.io/

Вы увидите веб‑мастер установки. Создайте административную учётную запись, укажите тип базы данных MySQL/MariaDB и данные, которые вы создали ранее (имя базы, пользователь, пароль). Нажмите “Finish Setup” — установка начнётся и может занять несколько минут.

Веб‑установщик Nextcloud

После завершения вы попадёте в панель управления Nextcloud.

Nextcloud на CentOS 8

Критерии приёмки

Проверьте базовые пункты приёмки:

  • Страница логина Nextcloud открывается по HTTPS.
  • Админ‑панель доступна и показывает версию 17.
  • Возможность входа под созданной админ‑учётной записью.
  • Создание пользователя и загрузка небольшого файла (проверка записи в data).
  • Логи Nginx и PHP без критических ошибок.
  • Certbot настроен на автоматическое обновление сертификатов.

Рекомендации по безопасности и эксплуатационные заметки

  • Регулярно обновляйте систему и пакеты Nextcloud.
  • Используйте сильные пароли и при возможности внешний ключ/2FA для админа.
  • Ограничьте доступ к базе данных (разрешите подключение только с localhost или из вашей сети).
  • Настройте мониторинг дискового пространства — Nextcloud интенсивно использует дисковую подсистему при синхронизации больших данных.
  • Настройте резервное копирование: конфигурация Nextcloud (/var/www/nextcloud/config), папка данных (/var/www/nextcloud/data) и дамп базы данных.

Важно: перед включением HSTS и preload изучите последствия (невозможность быстрой отмены).

Производительность и масштабирование (кратко)

  • Для небольших инсталляций (до ~100 пользователей) достаточно 2 ГБ RAM и одного CPU, но при активном использовании лучше 4+ ГБ и несколько vCPU.
  • Используйте APCu для кэширования PHP, Redis для сессий и очередь (если требуется масштабирование).
  • Размещение каталога data на отдельном быстром диске (или разделе с SSD/NVMe) повысит производительность.

Типичные ошибки и как их исправить

  1. 502 Bad Gateway после настройки Nginx — проверьте, запущен ли php-fpm и совпадает ли путь сокета /run/php-fpm/www.sock в обоих конфигурациях.
  2. Permission denied при загрузке файлов — проверьте владельца /var/www/nextcloud и контексты SELinux.
  3. Certbot не смог подтвердить владение доменом — убедитесь, что порт 80 открыт и домен указывает на сервер.
  4. Ошибки базы данных — проверьте данные подключения и привилегии пользователя в MariaDB.

План отката / Runbook при сбоях

  1. Если сайт недоступен после изменения конфигурации Nginx: откатите файл /etc/nginx/conf.d/nextcloud.conf к резервной копии и выполните nginx -t && systemctl restart nginx.
  2. Если PHP‑FPM не стартует: просмотрите /var/log/php-fpm/error.log, верните изменения в /etc/php.ini и www.conf.
  3. Если SELinux блокирует запись: временно установите permissive (setenforce 0) для диагностики, затем восстановите правильные fcontext и restorecon.
  4. Если база повреждена: восстановите дамп из резервной копии и проверьте согласованность файлового хранилища.

Контрольный список для развёртывания (роль‑ориентированный)

Администратор сервера:

  • Установить и обновить пакеты (dnf update).
  • Настроить репозитории EPEL/REMI.
  • Установить Nginx, PHP‑FPM, MariaDB, certbot.

DBA:

  • Создать базу и учётную запись для Nextcloud.
  • Настроить резервное копирование и тестирование восстановления дампов.

Системный администратор безопасности:

  • Настроить SELinux контексты.
  • Настроить firewall и правила доступа.
  • Поддерживать обновления и мониторинг сертификатов.

Оператор Nextcloud:

  • Проверить веб‑мастер установки.
  • Настроить внешние интеграции (если нужно) и плагины.

Альтернативные подходы

  • Использовать Apache вместо Nginx — Apache удобен при использовании .htaccess, но Nginx даёт лучшие показатели при больших нагрузках.
  • Применить контейнеризацию (Docker/Kubernetes) — ускоряет развёртывание и масштабирование, но требует опыта в оркестрации.
  • Использовать PostgreSQL вместо MariaDB — PostgreSQL считается более надёжным в некоторых сценариях с высокой конкуренцией транзакций.

Короткий глоссарий

  • PHP‑FPM — менеджер процессов PHP для продакшна.
  • webroot — каталог, используемый certbot для проверки владения доменом.
  • SELinux — механизм расширенной безопасности на уровне ядра Linux.

Итог

Вы установили Nextcloud 17 на CentOS 8 с использованием Nginx, PHP‑FPM 7.3 и MariaDB, настроили SELinux и получили SSL‑сертификат Let’s Encrypt. После базовой проверки по критериям приёмки можно переходить к настройке резервного копирования, мониторинга и интеграции клиентов.

Ссылки и ресурсы


Important: проверяйте версии пакетов в репозиториях — в момент чтения этого руководства версии и пакеты могли измениться.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Уведомления Outlook только от важных отправителей
Продуктивность

Уведомления Outlook только от важных отправителей

Как сделать вкладку Chrome всегда сверху
Браузеры

Как сделать вкладку Chrome всегда сверху

Как лайкать и дизлайкать песни в Spotify
Музыка

Как лайкать и дизлайкать песни в Spotify

Ошибка JavaScript heap out of memory — исправление
Node.js

Ошибка JavaScript heap out of memory — исправление

Alexa: режим Soothe Baby — настройка и советы
Руководства

Alexa: режим Soothe Baby — настройка и советы

Скрыть или удалить историю версий в Google Документах
Google Документы

Скрыть или удалить историю версий в Google Документах