Установка Nextcloud 10 на CentOS 7 с Nginx, PHP7-FPM и MariaDB
Важно: этот материал предназначен для системных администраторов, знакомых с командной строкой и базовой администрированием Linux.
О чём этот документ
Это практическая инструкция по развёртыванию Nextcloud версии 10 на сервере CentOS 7 с Nginx и PHP7-FPM, использованием MariaDB в качестве СУБД. Приведены команды, конфигурации и советы по безопасности и совместимости. Определение: Nextcloud — открытое ПО для синхронизации файлов и совместной работы, форк проекта ownCloud.
Основные варианты использования
- Личный облачный хостинг для файлов, календарей и контактов.
- Корпоративное решение для совместной работы на собственной инфраструктуре.
- Тестовый стенд для изучения Nextcloud и интеграций.
Содержание
- Предварительные требования
- Шаги установки (1–8)
- Настройка безопасности и SELinux
- Альтернативные подходы и когда они подходят
- Проверка работоспособности и критерии приёмки
- Рекомендации по обслуживанию и резервному копированию
- Краткий словарь и чек-листы ролей
Предварительные требования
- Сервер с CentOS 7 (64‑bit). Рекомендуется чистая установка или тестовая среда.
- Доступ root или пользователь с sudo-привилегиями.
- Домен или DNS-имя (в примерах используется cloud.nextcloud.co).
Совет: для production используйте валидный сертификат от CA (Let’s Encrypt или платный), а в тестовой среде можно временно использовать самоподписанный.
Шаг 1 — Установка Nginx и PHP7-FPM
Перед установкой добавим репозиторий EPEL и репозиторий для PHP7.
Установите EPEL:
yum -y install epel-releaseУстановите Nginx:
yum -y install nginxДобавьте репозиторий webtatic (в этом руководстве использован webtatic):
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpmУстановите PHP7-FPM и необходимые расширения (подходит для Nextcloud 10):
yum -y install php70w-fpm php70w-cli php70w-gd php70w-mcrypt php70w-mysql php70w-pear php70w-xml php70w-mbstring php70w-pdo php70w-json php70w-pecl-apcu php70w-pecl-apcu-develПроверка версии PHP:
php -vПримечание: если вы используете другой репозиторий PHP (Remi, SCL), команды и имена пакетов будут отличаться.
Шаг 2 — Конфигурация PHP7-FPM
Настроим php-fpm для работы с Nginx. Процесс-фабрикат: php-fpm будет запущен от пользователя nginx и слушать порт 9000.
Откройте файл конфигурации:
vim /etc/php-fpm.d/www.confИзмените пользователя и группу на nginx (строки user и group):
user = nginx
group = nginxУбедитесь, что php-fpm слушает на 127.0.0.1:9000:
listen = 127.0.0.1:9000Активируйте переменные окружения php-fpm (уберите комментирование):
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmpСоздайте директорию для PHP-сессий и назначьте владельца:
mkdir -p /var/lib/php/session
chown nginx:nginx -R /var/lib/php/session/Запустите службы и включите автозапуск:
sudo systemctl start php-fpm
sudo systemctl start nginx
sudo systemctl enable php-fpm
sudo systemctl enable nginxВажно: проверяйте системный журнал (journalctl) при ошибках: systemctl status php-fpm и systemctl status nginx.
Шаг 3 — Установка и настройка MariaDB
Установим MariaDB из репозиториев CentOS:
yum -y install mariadb mariadb-serverЗапустите и включите MariaDB:
systemctl start mariadb
systemctl enable mariadbЗапустите скрипт безопасной настройки:
mysql_secure_installationСледуйте подсказкам: установите root‑пароль, удалите анонимных пользователей и тестовую базу, запретите удалённый вход для root (если это требуется).
Создайте базу и пользователя для Nextcloud (замените пароль на надёжный):
mysql -u root -p
# В консоли mysql:
create database nextcloud_db;
create user nextclouduser@localhost identified by 'nextclouduser@';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'nextclouduser@';
flush privileges;
exit;
Примечание: используйте сложный пароль вместо примера. Для production окружения рекомендуется выделенная база и отдельный пользователь с минимальными правами.
Шаг 4 — Самоподписанный SSL (или используйте Let’s Encrypt)
Для защиты данных используйте HTTPS. В тестовой среде можно создать самоподписанный сертификат, в production лучше получить сертификат от CA.
Создайте директорию для сертификатов:
mkdir -p /etc/nginx/cert/Сгенерируйте сертификат OpenSSL:
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.keyОграничьте права доступа:
chmod 700 /etc/nginx/cert
chmod 600 /etc/nginx/cert/*
Совет: для автоматического и бесплатного SSL используйте certbot и Let’s Encrypt.
Шаг 5 — Скачивание и установка Nextcloud
Установите wget и unzip, затем скачайте архив Nextcloud:
yum -y install wget unzip
cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-10.0.2.zip
unzip nextcloud-10.0.2.zip
mv nextcloud/ /usr/share/nginx/html/Создайте папку для данных и назначьте владельца:
cd /usr/share/nginx/html/
mkdir -p nextcloud/data/
chown nginx:nginx -R nextcloud/Шаг 6 — Виртуальный хост Nginx для Nextcloud
Создайте конфигурацию в /etc/nginx/conf.d/nextcloud.conf и вставьте следующий блок (проверьте server_name):
upstream php-handler {
server 127.0.0.1:9000;
}
server {
listen 80;
server_name cloud.nextcloud.co;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name cloud.nextcloud.co;
ssl_certificate /etc/nginx/cert/nextcloud.crt;
ssl_certificate_key /etc/nginx/cert/nextcloud.key;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
root /usr/share/nginx/html/nextcloud/;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
client_max_body_size 512M;
fastcgi_buffers 64 4K;
gzip off;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location / {
rewrite ^ /index.php$uri;
}
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/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
location ~* \.(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
access_log off;
}
}Проверьте конфигурацию и перезапустите Nginx:
nginx -t
systemctl restart nginxПримечание: замените cloud.nextcloud.co на ваш домен. Если используете UNIX-сокет PHP-FPM, измените upstream на server unix:/var/run/php-fpm/www.sock;.
Шаг 7 — SELinux и firewalld
Для работы при включённом SELinux нужно пометить каталоги корректным типом:
Установите утилиты управления SELinux:
yum -y install policycoreutils-python-utilsВыполните команды (под root), замените путь при необходимости:
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.user.ini'
restorecon -Rv '/usr/share/nginx/html/nextcloud/'Настройка firewall-cmd:
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reloadВажно: SELinux повышает безопасность, но требует корректной настройки контекстов. При проблемах временно переключите SELinux в режим permissive для диагностики: setenforce 0 (не рекомендуется для production).
Шаг 8 — Мастер установки Nextcloud (веб-интерфейс)
Откройте браузер и перейдите по доменному имени вашего сервера, например https://cloud.nextcloud.co. Если вы используете самоподписанный сертификат, браузер предупредит о ненадёжном сертификате.
Введите имя администратора и пароль. В разделе базы данных укажите параметры, созданные ранее (nextcloud_db, nextclouduser, пароль).
Нажмите “Finish Setup” (Завершить настройку). После успешной установки откроется панель администратора и файловый менеджер.



Критерии приёмки
- Веб-интерфейс Nextcloud доступен по https и отвечает 200.
- Войдите под аккаунтом администратора и загрузите файл > 1 MB.
- Проверьте календарь/контакты (если используете эти приложения).
- В логах Nginx и PHP-FPM нет ошибок fatal при выполнении операций.
- SELinux не блокирует доступ (ausearch/semodule при ошибках).
Полезные проверки и отладка
- Просмотр логов Nginx: journalctl -u nginx или /var/log/nginx/error.log
- Логи PHP-FPM: journalctl -u php-fpm или /var/log/php-fpm/www-error.log
- Логи Nextcloud: /usr/share/nginx/html/nextcloud/data/nextcloud.log
- Проверка прав файлов: ls -la и chown/chmod при необходимости
Альтернативные подходы
- Использовать Apache вместо Nginx. Apache проще в настройке для некоторых модулей, но Nginx часто эффективнее по памяти.
- Использовать UNIX-сокет для PHP-FPM (server unix:/var/run/php-fpm/www.sock) вместо TCP-порта — чуть быстрее на локальной машине.
- Для SSL в production используйте Let’s Encrypt (certbot) для автоматического продления.
- Рассмотрите контейнеризированную установку (Docker, Podman) для изоляции и упрощения обновлений.
Когда этот метод не подходит
- Если у вас ограниченный тариф хостинга без root‑доступа — нельзя установить компоненты.
- Если вам нужна высокая доступность и масштабирование — требуется кластеризация БД и файловой подсистемы, этот гайд для одиночного сервера.
Безопасность: дополнительные рекомендации
- Отключите PHP-функции, которые не нужны (например, exec, shell_exec) в php.ini.
- Настройте автоматическое обновление безопасности через тестовые политики и регулярное планирование обновлений.
- Ограничьте доступ к административной панели по IP (если возможно).
- Включите двухфакторную аутентификацию для админ-аккаунтов.
- Регулярно проверяйте логи и настраивайте мониторинг (уместно Zabbix/Prometheus).
Резервное копирование и восстановление
Минимальный набор для бекапа:
- Дамп базы данных: mysqldump nextcloud_db > nextcloud_db.sql
- Резерв каталога данных (nextcloud/data)
- Резерв каталога конфигурации (nextcloud/config/)
Пример простого плана:
- Остановите web-сервер или переведите систему в режим обслуживания.
- Выполните mysqldump.
- Создайте архив каталога data и config (tar + gz).
- Храните бэкапы вне сервера (в облаке/на NAS).
Чек-листы ролей
Системный администратор:
- Установить ОС и обеспечить доступ.
- Настроить репозитории и установить пакеты.
- Настроить SELinux и firewall-cmd.
- Настроить бэкапы и мониторинг.
DevOps-инженер:
- Настроить CI для обновлений/патчей.
- Подготовить контейнерную альтернативу.
- Автоматизировать развёртывание и бекапы.
Администратор Nextcloud:
- Настроить пользователей и группы.
- Включить нужные приложения (Calendar, Contacts и т.д.).
- Настроить политики паролей и 2FA.
Совместимость и миграция
- При миграции с ownCloud проверяйте версию и совместимость приложений. Некоторые плагины могут требовать ручной миграции.
- При обновлении Nextcloud делайте тестовое обновление на staging перед production.
Краткий словарь (1 строка)
- Nextcloud — серверное ПО для синхронизации файлов и совместной работы.
- Nginx — веб-сервер/обратный прокси, часто используется с PHP-FPM.
- PHP-FPM — менеджер процессов PHP с поддержкой пуулов воркеров.
- MariaDB — СУБД, fork MySQL.
Контрольные тесты (минимум)
- Авторизация: вход по администраторскому аккаунту.
- Загрузка файла 100 MB и скачивание обратно.
- Создание календарного события и синхронизация с мобильного клиента.
- Проверьте права и SELinux, выполнив операции записи в data.
Итог
Nextcloud 10 можно успешно запустить на CentOS 7 с Nginx, PHP7-FPM и MariaDB. Следуйте шагам: установка пакетов, настройка php-fpm, база данных, SSL, виртуальный хост, SELinux и firewall. После установки пройдите через веб-мастер и выполните проверочные тесты. Для production окружений замените самоподписанный сертификат на сертификат от доверенного CA и настройте регулярные бэкапы.
Ссылки и источники
- Официальная документация Nextcloud: https://docs.nextcloud.com/
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента