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

Установка ownCloud 9.1 на CentOS 7 с Nginx, PHP7-FPM и MariaDB

6 min read Серверы Обновлено 26 Nov 2025
Установка ownCloud 9.1 на CentOS 7
Установка ownCloud 9.1 на CentOS 7

Введение

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;

Создание новой базы данных MySQL для ownCloud

Важно: для 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/*

Создание самоподписанного SSL сертификата

Примечание: допустимый срок действия сертификата и алгоритмы следует выбирать в соответствии с политикой безопасности.

Шаг 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

Тест конфигурации Nginx для ownCloud

Примечание: измените 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

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

Панель администратора и файловый менеджер

Настройки пользователя

Панель администратора ownCloud

Поздравляем — 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.
  • Пройдите мастер установки через веб‑интерфейс и включите базовые меры безопасности.

Источники и ссылки

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро