Установка Nextcloud на Fedora 32 с Nginx, PHP 7.4 и MariaDB

О чём эта инструкция
В руководстве описан полный процесс установки Nextcloud — автономного облачного хранилища — на сервер с Fedora 32. Покрываются все ключевые этапы: подготовка сервера, установка PHP и расширений, настройка PHP-FPM, установка Nginx, MariaDB, получение сертификатов Let’s Encrypt, конфигурация SELinux, настройка виртуального хоста для Nextcloud и финальная установка через консоль. В конце — чек‑листы, критерии приёмки и рекомендации по безопасности.
Варианты использования: личное облако, команда малого офиса, тестовый сервер для разработчиков.
Важно: в примерах заменяйте nextcloud.example.com и пароли на свои реальные значения.
Основные понятия (в одну строку)
- Nextcloud: открытое облачное ПО для синхронизации и совместной работы.
- PHP-FPM: менеджер процессов PHP для Nginx.
- MariaDB: СУБД, совместимая с MySQL.
- Certbot: клиент Let’s Encrypt для автоматического получения SSL.
Требования
- Сервер с Fedora 32.
- Ненулевой sudo-пользователь (не root).
- Обновлённая система.
Обновление системы:
$ sudo dnf update
Установите базовые утилиты:
$ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
Некоторые пакеты могут уже быть установлены.
Настройка брандмауэра (Firewalld)
Fedora поставляется с Firewalld. Убедитесь, что служба запущена:
$ sudo firewall-cmd --state
running
Просмотрите текущие разрешённые сервисы:
$ sudo firewall-cmd --permanent --list-services
Обычно вывод похож на:
dhcpv6-client mdns ssh
Разрешите HTTP и HTTPS:
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Проверьте ещё раз и перезагрузите правила:
$ sudo firewall-cmd --permanent --list-services
$ sudo systemctl reload firewalld
Установка PHP 7.4 и расширений
Fedora 32 содержит PHP 7.4, но рекомендуется подключить официальный REMI репозиторий для актуальности пакетов.
Установите REMI:
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
Включите репозиторий remi и отключите remi-modular:
$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular
Установите PHP и нужные расширения:
$ sudo dnf install php-fpm php-cli php-gd php-mbstring php-intl php-mysqlnd php-imagick php-zip php-json php-process php-xml php-bcmath php-gmp php-ftp php-smbclient php-opcache
Проверьте версию PHP:
$ php --version
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies
Настройка PHP-FPM
Откройте файл /etc/php-fpm.d/www.conf и установите пользователя и группу в nginx (в стандартном пакете они могут быть apache):
$ sudo nano /etc/php-fpm.d/www.conf
Найдите и замените:
user = nginx
group = nginx
Раскомментируйте переменные окружения PHP и настройку 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
Сохраните файл (Ctrl+X, затем Y).
Отредактируйте конфигурацию opcache /etc/php.d/10-opcache.ini:
$ sudo nano /etc/php.d/10-opcache.ini
Задайте следующие значения:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
Сохраните и закройте.
Увеличьте лимиты памяти и загрузки файлов в /etc/php.ini:
$ sudo cp /etc/php.ini /etc/php.ini.bak
$ sudo sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php.ini
$ sudo sed -i "s/post_max_size = 8M/post_max_size = 100M/" /etc/php.ini
$ sudo sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/" /etc/php.ini
По умолчанию ряд директорий в /var/lib/php/ принадлежит apache — предоставим nginx доступ через setfacl:
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/session/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/wsdlcache/
Включите и запустите php-fpm:
$ sudo systemctl enable php-fpm
$ sudo systemctl start php-fpm
Установка Nginx
Fedora 32 содержит актуальную стабильную версию Nginx.
$ sudo dnf install nginx -y
Проверьте версию:
$ nginx -v
nginx version: nginx/1.18.0
Запустите и включите сервис:
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Откройте IP сервера в браузере — это должна быть стандартная страница Nginx:

Установка MariaDB
MariaDB — drop-in замена MySQL. Fedora 32 по умолчанию содержит MariaDB 10.4.
$ sudo dnf install mariadb-server
Проверьте установку:
$ mysql --version
mysql Ver 15.1 Distrib 10.4.14-MariaDB, for Linux (x86_64) using EditLine wrapper
Включите и запустите сервис:
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
Запустите безопасную настройку (root‑пароль, удаление анонимных пользователей и т.п.):
$ sudo mysql_secure_installation
Следуйте подсказкам (по умолчанию нажимайте Enter, если хотите принять рекомендованные опции).
Для входа в MariaDB используйте:
$ sudo mysql
Настройка базы данных для Nextcloud
Войдите в MySQL и создайте пользователя и базу данных:
$ sudo mysql
В MySQL Shell:
mysql> CREATE USER 'nextuser'@'localhost' IDENTIFIED BY 'yourpassword';
mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextuser'@'localhost';
mysql> exit
Замените yourpassword на надёжный пароль.
Скачивание Nextcloud
Скачайте и распакуйте последний релиз Nextcloud:
$ wget https://download.nextcloud.com/server/releases/latest.tar.bz2
$ tar -jxvf latest.tar.bz2
$ sudo mv nextcloud /var/www/html/
Создайте каталог для данных и назначьте права владельца nginx:
$ sudo mkdir /var/www/html/nextcloud/data
$ sudo chown -R nginx:nginx /var/www/html/nextcloud
Установка SSL (Let’s Encrypt)
Установим certbot и получим сертификат. Остановите Nginx перед получением сертификата, чтобы certbot мог привязаться к порту 80.
$ sudo dnf install certbot
$ sudo systemctl stop nginx
$ export LDOMAIN="nextcloud.example.com"
$ export LEMAIL="[email protected]"
$ sudo certbot certonly --standalone -d $LDOMAIN --preferred-challenges http --agree-tos -n -m $LEMAIL --keep-until-expiring
$ sudo systemctl start nginx
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Автоматическое продление: откройте crontab с nano и добавьте задачу для ежедневной проверки продления сертификата:
$ sudo EDITOR=nano crontab -e
Добавьте строку (заметьте прямые кавычки):
25 2 * * * /usr/bin/certbot renew --quiet --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
Эта задача будет запускать certbot ежедневно в 02:25 и аккуратно перезапускать Nginx при необходимости.
Настройка SELinux и прав доступа
Чтобы Nextcloud корректно работал с SELinux, настройте контексты для ключевых директорий:
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'
$ sudo restorecon -Rv '/var/www/html/nextcloud/'
Разрешите веб-серверу объединённый доступ (нужно для обновлений через веб-интерфейс):
$ sudo setsebool -P httpd_unified on
Примечание: если путь установки отличается — скорректируйте команды.
Конфигурация Nginx для Nextcloud
Создайте каталоги для серверных блоков и включите их в основной конфиг Nginx:
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
$ sudo nano /etc/nginx/nginx.conf
Вставьте строки после include /etc/nginx/conf.d/*.conf:
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
Создайте файл /etc/nginx/sites-available/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 nextcloud.example.com;
# enforce https
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nextcloud.example.com;
access_log /var/log/nginx/nextcloud.access.log;
error_log /var/log/nginx/nextcloud.error.log;
# 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/letsencrypt/live/nextcloud.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nextcloud.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
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;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Add headers to serve security related headers
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/html/nextcloud;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
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 100M;
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;
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\/.+|.+\/richdocumentscode\/proxy)\.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;
}
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
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;
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap|mp4|webm)$ {
try_files $uri /index.php$request_uri;
access_log off;
}
}
Активируйте конфигурацию и проверьте Nginx:
$ sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
$ sudo nginx -t
$ sudo systemctl reload nginx
Установка Nextcloud через консоль
Выполним установку через командную строку (рекомендуется для воспроизводимости):
$ cd /var/www/html/nextcloud
$ sudo -u nginx php occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextuser" --database-pass "yourpassword" --admin-user "admin" --admin-pass "password"
Эта команда запускается от имени nginx, потому что пользователь должен иметь права на запись.
Добавьте домен и IP в доверенные домены Nextcloud. Откройте config/config.php:
$ sudo nano config/config.php
Измените ‘trusted_domains’ примерно так:
'trusted_domains' =>
array (
0 => 'localhost',
1 => '167.172.35.56',
2 => 'nextcloud.example.com',
),
Сохраните и откройте в браузере https://nextcloud.example.com для завершения первичной настройки интерфейса.

После входа вы увидите главную страницу:

Проверка и отладка
Проверьте журналы при ошибках:
- Nginx: /var/log/nginx/nextcloud.error.log
- PHP-FPM: /var/log/php-fpm/www-error.log (или systemd journal)
- MariaDB: /var/log/mariadb/mariadb.log
Запустите nginx -t и systemctl status для сервисов, если что-то не работает.
Резюме и лучшие практики
- Используйте отдельный поддомен (например, nextcloud.example.com).
- Регулярно обновляйте систему и бэкапьте каталоги data и базу данных.
- Ограничьте доступ к серверу через брандмауэр и SSH (ключи).
- Настройте мониторинг диска и резервное копирование.
Когда этот подход не подходит
- Если нужен облачный сервис с полной поддержкой SLA и масштабируемостью на уровне провайдера, целесообразнее использовать коммерческие решения.
- Для очень больших инсталляций (>1000 активных пользователей) рекомендуется кластеризация, разделение баз данных и файлового хранилища на отдельные сервера.
Альтернативные подходы
- Вместо Nginx можно использовать Apache с модулем PHP-FPM; конфигурация будет отличаться в части virtualhost и настроек mod_headers.
- Для баз данных: PostgreSQL полностью поддерживается Nextcloud и даёт дополнительные возможности резервирования.
- Для SSL можно использовать приобретённые сертификаты и интегрировать их в конфиг Nginx аналогично.
Методика на высоком уровне (mini-methodology)
- Подготовьте сервер и обеспечьте SSH/брандмауэр.
- Установите стек: PHP, Nginx, MariaDB.
- Настройте права и SELinux.
- Получите SSL и настройте Nginx.
- Установите Nextcloud и проверьте работу.
Чек‑лист ролей
Администратор сервера:
- Обновил систему
- Настроил брандмауэр
- Установил и запустил Nginx, PHP-FPM, MariaDB
- Получил SSL и настроил автоматическое обновление
DevOps / инженер по релизам:
- Проверил конфигурации Nginx и PHP на тестовом сервере
- Настроил мониторинг и резервное копирование
Пользователь/администратор Nextcloud:
- Создал администратора и проверил вход
- Настроил доверенные домены
- Синхронизировал клиентские устройства
Критерии приёмки
- Веб‑интерфейс Nextcloud доступен по HTTPS и корректно грузит страницы.
- Пользователь администратор может войти и создать учётных записей.
- Загрузка файлов до 100 МБ проходит успешно.
- Автоматическое продление сертификата завершает работу без вмешательства.
Примеры тестов/приёмка
- Открыть https://nextcloud.example.com, проверить, что главная страница загружена (200).
- Загрузить файл 50–100 МБ через веб‑интерфейс и синхронизацию клиента.
- Провести успешный вход в базу данных из PHP (phpinfo или occ db:check если доступно).
- Выполнить certbot renew –dry-run для проверки автопродления.
Быстрый план действий (SOP / Playbook)
- Обновление: sudo dnf update
- Установка пакетов: PHP, Nginx, MariaDB
- Настройка PHP-FPM и прав доступа
- Настройка виртуального хоста Nginx и SSL
- Установка Nextcloud и добавление trusted_domains
- Тестирование и настройка резервных копий
Примеры типичных ошибок и советы по их устранению
- Ошибка 502 Bad Gateway: проверьте, запущен ли php-fpm и совпадает ли путь сокета в конфиге Nginx (/run/php-fpm/www.sock).
- Проблемы с правами на файлы: проверьте владельца каталога /var/www/html/nextcloud и контексты SELinux.
- Ошибки SSL: убедитесь, что пути к сертификатам в конфиге Nginx корректны и файлы доступны.
Безопасность и рекомендации
- Регулярно обновляйте пакеты безопасности.
- Отключите ненужные расширения PHP.
- Храните бэкапы вне сервера (offsite). Минимальная периодичность — ежедневный бэкап баз данных и данных пользователей.
Короткая галерея пограничных случаев
- Локальная сеть без постоянного DNS: можно использовать IP и сгенерировать сертификаты только при наличии DNS (Let’s Encrypt требует публичный домен).
- Ограниченный диск: настройте квоты Nextcloud и мониторинг используемого пространства.
Короткий глоссарий (1‑строчная)
- PHP-FPM: FastCGI Process Manager для запуска PHP-процессов под веб‑сервером.
- SELinux: механизм мандатного контроля доступа для Fedora.
- Certbot: клиент для получения сертификатов Let’s Encrypt.
Быстрый план восстановления (rollback)
- Откатить изменения конфигурации Nginx (удалить ссылку в sites-enabled).
- Восстановить /etc/php.ini из /etc/php.ini.bak.
- Восстановить файлы Nextcloud и БД из резервной копии.
Decision tree (быстрая проверка):
flowchart TD
A{Сайт недоступен?} -->|Да| B{HTTPS или HTTP?}
B --> |HTTPS| C{Сертификат валиден?}
C -->|Нет| D[Проверить /etc/letsencrypt и выполнить certbot renew]
C -->|Да| E{Nginx отвечает?}
B --> |HTTP| E
E -->|Нет| F[nginx -t && systemctl status nginx]
E -->|Да| G{PHP ошибки?}
G -->|Да| H[systemctl status php-fpm && проверить логи]
G -->|Нет| I[Проверить базу данных и права файлов]Заключение
Это пошаговое руководство покрывает большинство сценариев установки Nextcloud на Fedora 32 с Nginx, PHP 7.4 и MariaDB. После выполнения всех шагов у вас будет функциональный экземпляр Nextcloud с HTTPS, подготовленный для работы и дальнейшей настройки (плагины, бэкапы, мониторинг).
Если возникают вопросы — проверьте логи, выполните тесты, опираясь на чек‑листы выше, и изменяйте конфигурацию в безопасном тестовом окружении.
Похожие материалы
Скрытые меню и коды Roku
Как вручную установить обновления Windows 11
Android Safe Folder: как открыть и защитить файлы
Темы Power BI: как создавать, импортировать, применять