Используемые термины: Ubuntu , Apache , MariaDB , PHP , Redis .
ownCloud — облачный сервис для совместной работы (преимущественно, с файлами). Это приложение, разработанное на PHP и для своей работы требует настроенного веб-сервера в связки с СУБД и интерпретатором данного языка программирования. В данной инструкции мы рассмотрим процесс настройки сервиса в связке, рекомендованной разработчиком — Apache + MariaDB + Redis. После развертывания мы выполним оптимизацию и проверим конфигурацию сервера. Работать будем на Linux Ubuntu.
Предварительная настройка системы
Установка и настройка СУБД
Конфигурирование веб-сервера
Установка ownCloud
Настройка кэширования (Redis)
Фоновые задания в cron
Дополнительная информация
Подготовка к установке
Прежде чем перейти к установке и настройке компонентов owncloud, выполним предварительные действия.
Системные требования
С актуальными системными требованиями можно ознакомиться на странице System requirements (нам интересны рекомендованные). Необходимо убедиться, что наш сервер соответствует им.
Особое внимание нужно уделить программным требованиям, а именно:
- Дистрибутиву и версии операционной системы.
- СУБД.
- Вариантам веб-сервера.
- Версии PHP.
Мы можем выбрать из вариантов версий и компонентов, но разработчики рекомендуют остановить свой выбор на конкретных пунктах, которые они выделили в отдельном разделе Officially Recommended Environment . На момент обновления данной инструкции актуальная версия ownCloud была 10 с рекомендованными требованиями:
- Ubuntu 20.04 LTS.
- MariaDB 10.11.
- Redis 6 и выше.
- Apache 2.4.
- PHP 7.4.
Именно эти компоненты и будут использоваться в данной инструкции. Если по каким-либо причинам у вас нет возможности использовать именно эти программные компоненты, обратите внимание на раздел ниже официальной документации, где перечислены все поддерживаемые.
Настройка времени
Чтобы мы могли видеть правильную метку времени создания и изменения файлов, необходимо, чтобы время было корректным на сервере.
Устанавливаем утилиту chrony:
apt install chrony
… и запускаем ее:
systemctl enable chrony
Выставляем нужный часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере московское время.
Брандмауэр
По умолчанию в Ubuntu не требуется открывать порты, так как брандмауэр разрешает все. Но если в вашем случае действует запрещающая политика, открываем веб-порты 80 и 443:
iptables -I INPUT -p tcp —dport 80 -j ACCEPT
iptables -I INPUT -p tcp —dport 443 -j ACCEPT
Для сохранения правил используем iptables-persistent:
apt install iptables-persistent
netfilter-persistent save
Сервер баз данных
Проверим версию mariadb, которая будет установлена из штатного репозитория:
apt search —names-only ‘^mariadb-server-[0-9]{2}.[0-9]{1,2}$’
В моем случае был ответ:
mariadb-server-10.6…
Значит, для установки версии 10.11 нужно настроить репозиторий. Переходим по ссылке downloads.mariadb.org/mariadb/repositories и выбираем свою версию операционной системы и нужную версию СУБД:
Ниже отобразится информация для настройки репозитория. Устанавливаем пакеты:
apt update
apt install apt-transport-https curl
* где:
- apt-transport-https — дополнение для возможности использовать репозитории по https.
- curl — отправка веб-запросов, в частности, для загрузки файлов.
Создаем каталог хранения ключей репозиториев:
mkdir -p /etc/apt/keyrings
Сохраняем ключ репозитория mariadb в созданный каталог:
curl -o /etc/apt/keyrings/mariadb-keyring.pgp ‘https://mariadb.org/mariadb_release_signing_key.pgp’
Создаем файл с настройкой репозитория:
vi /etc/apt/sources.list.d/mariadb.sources
X-Repolib-Name: MariaDB
Types: deb
URIs: https://mirror.docker.ru/mariadb/repo/10.11/ubuntu
Suites: jammy
Components: main main/debug
Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp
Устанавливаем:
apt update
apt install mariadb-server
Подключаемся к MariaDB, создаем базу данных и пользователя:
mysql
> CREATE DATABASE owncloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON owncloud.* TO owncloud@localhost IDENTIFIED BY ‘owncloud’;
> quit
Веб-сервер + PHP
Как было сказано выше, для owncloud необходим веб-сервер. Само приложение написано на языке PHP и также требуется одноименный интерпретатор.
Apache
ownCloud можно развернуть на NGINX или Apache. В данной инструкции будем использовать последний.
Устанавливаем веб-сервер:
apt install apache2
Создаем виртуальный домен и настраиваем его для работы с облачным сервисом:
vi /etc/apache2/sites-enabled/owncloud.conf
<VirtualHost *:80>
Define root_domain owncloud.remontka.com
ServerName ${root_domain}
Redirect / https://${root_domain}/
</VirtualHost>
<VirtualHost *:443>
Define root_domain owncloud.remontka.com
Define root_path /var/www/owncloud
ServerName ${root_domain}
DocumentRoot ${root_path}
SSLEngine on
SSLCertificateFile ssl/cert.pem
SSLCertificateKeyFile ssl/cert.key
<Directory ${root_path}>
Options +FollowSymlinks
AllowOverride All
Require all granted
<IfModule mod_headers.c>
Header always set Strict-Transport-Security «max-age=15552000; includeSubDomains; preload»
</IfModule>
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
# <FilesMatch .php$>
# SetHandler «proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost»
# </FilesMatch>
</VirtualHost>
* где обращаем внимание на директивы:
- owncloud.remontka.com — домен, на котором будет работать сервис.
- ssl/cert.pem — открытый сертификат. Его мы создадим ниже по инструкции.
- ssl/cert.key — путь до ключа закрытого сертификата. Его мы создадим ниже по инструкции.
- /var/www/owncloud — каталог с порталом. В него мы распакуем исходники.
** обратите внимание на закомментированные строки. Если в вашей системе несколько версий PHP, хорошей идеей будет указать конкретный путь до сокетного файла php-fpm.
Разрешаем модули:
a2enmod ssl rewrite headers env dir mime unique_id
* где:
- ssl — поддержка шифрования.
- rewrite — модуль, позволяющий выполнять перенаправления на уровне apache.
- headers — позволяет менять заголовки при http-ответах.
- env — управление системными переменными, которые используются другими модулями Apache.
- dir — для поиска скрипта по умолчанию и отображения файлов в каталоге.
- mime — назначает метаданные при ответах.
- unique_id — предоставляет переменную среды с уникальным идентификатором для каждого запроса.
Создаем каталог для хранения сертификатов и переходим в него:
mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
Генерируем сертификат:
openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=owncloud.remontka.com/CN=owncloud»
* данная команда создаст сертификат на 4 года для URL owncloud.remontka.com или owncloud .
Для первичного запуска ownCloud достаточно самоподписанного сертификата. Однако, для продуктивной среду лучше его купить или запросить бесплатный у Let’s Encrypt .
Проверяем конфигурацию apache:
apachectl configtest
… если видим:
…
Syntax OK
* мы увидим предупреждение Warning: DocumentRoot [/var/www/owncloud] does not exist . Оно означает, что каталога /var/www/owncloud не существует. Игнорируем — мы создадим его позже.
Перезапускаем сервис апача:
systemctl restart apache2
PHP
Помимо PHP, нам также нужно установить расширения языка программирования. Актуальный их список можно найти на официальном сайте .
На момент последнего обновления инструкции, рекомендовалось установить PHP версии 7.4. Для дальнейшего удобства работы, мы сохраним ее в переменную:
export PHP_VER=7.4
Посмотреть, какая версия будет установлена из репозитория системы можно командой:
apt search —names-only ‘^php[.0-9]{3}$’
а) Если она соответствует рекомендации ownCloud, вводим команду для установки PHP, PHP-FPM и необходимых расширений:
apt install php php-fpm php-ctype php-curl php-dom php-gd php-iconv php-intl php-json php-xml php-pdo php-phar php-posix php-simplexml php-xmlwriter php-zip php-mysqli php-mbstring
б) Если рекомендованной PHP версии в репозитории нет, переходим к инструкции Установка разных версий PHP на Linux Ubuntu . Устанавливаем PHP нужной версии, а после расширения:
apt install php${PHP_VER} php${PHP_VER}-fpm php${PHP_VER}-ctype php${PHP_VER}-curl php${PHP_VER}-dom php${PHP_VER}-gd php${PHP_VER}-iconv php${PHP_VER}-intl php${PHP_VER}-json php${PHP_VER}-xml php${PHP_VER}-pdo php${PHP_VER}-phar php${PHP_VER}-posix php${PHP_VER}-simplexml php${PHP_VER}-xmlwriter php${PHP_VER}-zip php${PHP_VER}-mysqli php${PHP_VER}-mbstring
После установки PHP и расширений, выполним несколько настроек.
Разрешаем в Apache модули для fcgi и php-fpm:
a2enmod proxy_fcgi setenvif
a2enconf php${PHP_VER}-fpm
Настраиваем php.ini:
vi /etc/php/${PHP_VER}/fpm/php.ini
post_max_size = 512M
realpath_cache_size = 4M
upload_max_filesize = 512M
enable_post_data_reading = On
Перезапускаем Apache и php-fpm:
systemctl restart apache2 php${PHP_VER}-fpm
Установка ownCloud
Переходим во временную папку:
cd /tmp
и скачиваем исходник для установки с последней версией портала:
curl -OL https://download.owncloud.com/server/stable/owncloud-latest.tar.bz2
* при необходимости скачать другую версию ownCloud, переходим по ссылке download.owncloud.com/server/stable .
Распаковываем скачанный архив:
tar -xjf owncloud-latest.tar.bz2
* если мы загрузили не последнюю версию owncloud, то имя файла будет другим.
И переносим содержимое архива в каталог /var/www :
mv owncloud /var/www
Задаем права доступа:
chown -R www-data:www-data /var/www/owncloud
Открываем браузер и переходим по адресу https://owncloud.remontka.com , где owncloud.remontka.com — адрес облачного сервиса, который мы прописали в настройках apache.
Задаем логин и пароль для администратора, оставляем путь до каталога с данными или задаем свой:
В качестве базы данных выбираем MySQL/MariaDB (если предлагается выбор) и вводим в качестве логина, пароля и базы (в нашем случае, owncloud ):
Завершаем установку.
Настройка кэширования
В общих сведениях настроек owncloud мы получим предупреждение о необходимости кэширования и транзакционной блокировке файлов. Данные проблемы решаются с помощью базы резидентского типа, например, Memcache или Redis. Мы рассмотрим вариант установки и настройки последней.
Выполняем установку компонентов:
apt install redis-server php-redis
Если мы устанавливали не нативную версию PHP, то наша команда будет:
apt install redis-server php${PHP_VER}-redis
Перезапускаем apache:
systemctl restart apache2
Отредактируем конфигурационный файл owncloud:
vi /var/www/owncloud/config/config.php
Добавляем:
…
‘filelocking.enabled’ => true,
‘memcache.locking’ => ‘OCMemcacheRedis’,
‘memcache.local’ => ‘OCMemcacheRedis’,
…
Кэширование настроено.
Выполнение фоновых заданий в cron
После установки ownCloud фоновые задания выполняются с помощью AJAX при посещении страниц пользователем. Это не позволит выполнять задачи планировщика при отсутствии активности.
Для решения проблемы переходим в настройки:
Кликаем по Основные :
В разделе «Cron (планировщик задач)» выбираем Cron:
Идем в консоль сервера и устанавливаем cron:
apt install cron
Cоздаем задание от пользователя www-data:
crontab -e -uwww-data
*/15 * * * * /usr/bin/php -f /var/www/owncloud/occ system:cron
Пробуем вручную выполнить задания:
sudo -u www-data /usr/bin/php -f /var/www/owncloud/occ system:cron
Читайте также
Другие полезные материалы:
1. Установка и настройка локального сервера Collabora и его связка с Nextcloud/Owncloud .