Установка ownCloud 9.1 на CentOS 7 с Nginx, PHP7-FPM и MariaDB
Введение
ownCloud — серверное ПО для синхронизации данных и шаринга файлов с удобным веб-интерфейсом и нативными клиентами для Windows, macOS, Linux, Android и iOS. В этом руководстве показана установка ownCloud 9.1 на CentOS 7 с использованием Nginx в качестве веб‑сервера, PHP7-FPM для обработки PHP и MariaDB в роли СУБД.
Важно: это руководство предполагает администраторский доступ (root) и базовый опыт администрирования Linux.
Быстрые требования
- Сервер CentOS 7 (x86_64) обновлённый система
- Доступ root или эквивалент sudo
- Доменное имя, указывающее на сервер (рекомендуется для SSL)
- Понимание системных служб systemd, SELinux и firewalld
Ключевые понятия
- PHP-FPM: PHP FastCGI Process Manager — запускает PHP-процессы отдельно от веб-сервера.
- Nginx: быстрый событийный веб‑сервер и прокси.
- MariaDB: форк MySQL, совместим с MySQL‑клиентами.
- SELinux: механизм мандатного контроля доступа в Linux.
Шаг 1 — Установка Nginx и PHP7-FPM
Перед установкой добавим репозиторий EPEL, который содержит дополнительные пакеты.
yum -y install epel-releaseУстановите Nginx из EPEL:
yum -y install nginxДобавьте репозиторий webtatic для PHP 7 (пример в руководстве):
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpmУстановите PHP7-FPM и необходимые расширения для ownCloud:
yum -y install php70w-fpm php70w-cli php70w-gd php70w-mcrypt php70w-mysql php70w-pear php70w-xml php70w-mbstring php70w-pdo php70w-jsonПроверьте версию PHP:
php -vПримечание: используйте поддерживаемые и обновлённые репозитории для продакшн‑систем. Webtatic — один из вариантов, доступны также Remi и SCL.
Шаг 2 — Настройка PHP7-FPM
Откройте конфигурацию пула FPM:
vim /etc/php-fpm.d/www.confУстановите пользователя и группу, под которыми будет запускаться FPM, на nginx:
user = nginx
group = nginxУбедитесь, что слушатель FPM настроен на 127.0.0.1:9000 (или сокет по вашему выбору):
listen = 127.0.0.1:9000Раскомментируйте системные переменные окружения для 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/Запустите и включите службы:
systemctl start php-fpm
systemctl start nginx
systemctl enable php-fpm
systemctl enable nginxПримечание: если вы используете UNIX-сокет вместо TCP, адаптируйте listen и fastcgi_pass в конфигурации Nginx.
Шаг 3 — Установка и настройка MariaDB
Установите MariaDB:
yum -y install mariadb mariadb-serverЗапустите сервис и задайте root‑пароль:
systemctl start mariadb
mysql_secure_installationСледуйте подсказкам: задайте пароль root, удалите анонимных пользователей, отключите удалённый вход для root, удалите тестовую БД и перезагрузите таблицы привилегий.
Создайте базу данных и пользователя для ownCloud. В примере используются имена owncloud_db и ownclouduser; замените пароль на надёжный.
mysql -u root -p
# в интерактивной консоли MySQL:
create database owncloud_db;
create user ownclouduser@localhost identified by 'ownclouduser@';
grant all privileges on owncloud_db.* to ownclouduser@localhost identified by 'ownclouduser@';
flush privileges;
Важно: для production используйте сложный пароль и рассмотрите выделение отдельного хоста для СУБД.
Шаг 4 — Генерация самоподписанного SSL сертификата
Для безопасного доступа рекомендуется HTTPS. В примере создаётся самоподписанный сертификат OpenSSL (для тестовой среды). Для публичного сервиса используйте Let’s Encrypt или платный сертификат.
Создайте директорию для сертификатов:
mkdir -p /etc/nginx/cert/Сгенерируйте сертификат:
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/owncloud.crt -keyout /etc/nginx/cert/owncloud.keyУстановите строгие права доступа:
chmod 600 /etc/nginx/cert/*
Примечание: допустимый срок действия сертификата и алгоритмы следует выбирать в соответствии с политикой безопасности.
Шаг 5 — Загрузка ownCloud
Установите wget и unzip, если они не установлены:
yum -y install wget unzipСкачайте релиз ownCloud 9.1.2 (пример):
cd /tmp
wget https://download.owncloud.org/community/owncloud-9.1.2.zipРаспакуйте и переместите в корень Nginx:
unzip owncloud-9.1.2.zip
mv owncloud/ /usr/share/nginx/html/Создайте директорию data и установите владельца nginx:
cd /usr/share/nginx/html/
mkdir -p owncloud/data/
chown nginx:nginx -R owncloud/Важно: место хранения данных можно перенести на отдельный диск; при этом учитывайте SELinux и права доступа.
Шаг 6 — Конфигурация виртуального хоста Nginx для ownCloud
Создайте файл конфигурации:
cd /etc/nginx/conf.d/
vim owncloud.confВставьте следующий конфиг (пример из оригинала). Обратите внимание на upstream php-handler, SSL-файлы и root путь.
upstream php-handler {
server 127.0.0.1:9000;
#server unix:/var/run/php5-fpm.sock;
}
server {
listen 80;
server_name data.owncloud.co;
# enforce https
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name data.owncloud.co;
ssl_certificate /etc/nginx/cert/owncloud.crt;
ssl_certificate_key /etc/nginx/cert/owncloud.key;
# 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=15552000; includeSubDomains";
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;
# Path to the root of your installation
root /usr/share/nginx/html/owncloud/;
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;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/acme-challenge { }
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed 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)/ {
return 404;
}
location ~ ^/(?:\. |autotest|occ|issue|indie|db_|console) {
return 404;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
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 $uri/ =404;
index index.php;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~* \.(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
# 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=15552000; includeSubDomains";
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;
# Optional: Don't log access to assets
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log off;
}
}Сохраните файл и проверьте конфигурацию Nginx:
nginx -t
systemctl restart nginx
Примечание: измените server_name на ваш домен и при использовании Unix-сокетов скорректируйте fastcgi_pass.
Шаг 7 — SELinux и firewalld
Если SELinux включён в режиме enforcing, установите инструменты управления SELinux:
yum -y install policycoreutils-pythonРазрешите веб‑серверу записывать нужные каталоги ownCloud:
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/owncloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/owncloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/owncloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/owncloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/owncloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/owncloud/.user.ini'
restorecon -Rv '/usr/share/nginx/html/owncloud/'Настройте firewalld и откройте порты HTTP/HTTPS:
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reloadВажно: если Nginx работает за дополнительным брандмауэром или балансировщиком, откройте порты внешнего интерфейса.
Шаг 8 — Мастер установки ownCloud
Откройте браузер и перейдите на ваш домен, например https://data.owncloud.co. Введите имя администратора и пароль, укажите данные для базы (owncloud_db, ownclouduser) и нажмите Finish Setup.

После установки вы попадёте в панель администратора и файловый менеджер.



Поздравляем — ownCloud установлен и доступен через Nginx, PHP7-FPM и MariaDB на CentOS 7.
Рекомендации по безопасности и эксплуатация
- Используйте реальный SSL-сертификат (Let’s Encrypt) для публичных серверов.
- Регулярно обновляйте систему и пакеты (CentOS, PHP, Nginx, MariaDB, ownCloud).
- Создавайте резервные копии данных и базы данных по расписанию.
- Ограничьте доступ к панели администратора и используйте двухфакторную аутентификацию.
- Мониторьте логи Nginx, PHP-FPM и MariaDB.
Минимальные критерии приёмки
- ownCloud доступен по HTTPS и отвечает на запросы.
- Авторизация администратора проходит успешно.
- Создана БД owncloud_db и пользователь с корректными привилегиями.
- Каталог data доступен для записи пользователю nginx с учётом SELinux.
Диагностика и распространённые ошибки
- Ошибка 502 Bad Gateway: проверьте, запущен ли php-fpm и совпадает ли адрес/порт (127.0.0.1:9000) в Nginx и FPM.
- Ошибка 500: смотрите логи Nginx и свой файл owncloud.log в data/; проверьте права доступа и SELinux.
- Проблемы с загрузкой файлов: проверьте client_max_body_size в конфиге Nginx и настройки PHP (upload_max_filesize, post_max_size).
Пример команд для проверки сервисов:
systemctl status php-fpm
systemctl status nginx
systemctl status mariadb
journalctl -u php-fpm -e
tail -n 200 /usr/share/nginx/html/owncloud/data/owncloud.logАльтернативные подходы
- Использовать Apache вместо Nginx: Apache проще для некоторых конфигураций и модулей, но Nginx обычно эффективнее по памяти в массовых подключениях.
- Применять системные сборки PHP (Remi, SCL) вместо webtatic для более свежих версий и поддержки пакетов.
- Размещать базу данных на отдельном сервере для масштабируемости и отказоустойчивости.
Советы по масштабированию и поддержке
- Выносите каталог data на отдельный диск или NFS/Gluster/Swift для общего доступа между нодами.
- Настройте кэширование (Redis или APCu) для улучшения производительности.
- Используйте балансировщик нагрузки и несколько веб‑нод для высокой доступности.
Роль‑базовые чек‑листы
Администратор сервера:
- Обновить систему
- Настроить NTP
- Установить и проверить SELinux
Веб‑администратор:
- Установить Nginx и PHP-FPM
- Настроить виртуальный хост и SSL
- Проверить fastcgi параметры
DBA:
- Установить MariaDB
- Создать БД и пользователя
- Настроить резервное копирование
Оператор безопасности:
- Включить HTTPS, HSTS с осторожностью
- Настроить 2FA для админов
- План обновлений и патчей
Факт‑бокс
- Версия ownCloud в примере: 9.1.2
- Порты: HTTP 80, HTTPS 443, PHP-FPM 9000 (TCP в примере)
- Рекомендуемая максимальная загрузка: client_max_body_size 512M (можно увеличить)
Когда этот подход не подходит
- Для новых проектов рассмотрите более свежие версии ownCloud или Nextcloud — они имеют активнее поддержку и улучшения безопасности.
- Если необходима интеграция с Active Directory в больших окружениях, продумайте отдельный LDAP/AD сервер и TLS.
Миграция и совместимость
- При переходе с другой версии ownCloud или с другой ветки MySQL убедитесь, что используемые плагины совместимы.
- Перед обновлением создайте полную резервную копию файлов и БД.
Краткое резюме
- Добавьте EPEL и репозиторий PHP, установите Nginx и PHP7-FPM.
- Настройте php-fpm на работу от пользователя nginx и порт 9000.
- Установите MariaDB, создайте БД и пользователя.
- Скачайте ownCloud, разместите в /usr/share/nginx/html/, настройте права.
- Настройте виртуальный хост Nginx, SSL, SELinux и firewalld.
- Пройдите мастер установки через веб‑интерфейс и включите базовые меры безопасности.
Источники и ссылки
- Официальная документация ownCloud: https://doc.owncloud.org/
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента