Настройка сервера ownCloud + Apache на Ubuntu
Используемые термины: 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.dmosk.ru
ServerName ${root_domain}
Redirect / https://${root_domain}/
</VirtualHost>
<VirtualHost *:443>
Define root_domain owncloud.dmosk.ru
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.dmosk.ru — домен, на котором будет работать сервис.
- 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.dmosk.ru/CN=owncloud"
* данная команда создаст сертификат на 4 года для URL owncloud.dmosk.ru или 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.dmosk.ru, где owncloud.dmosk.ru — адрес облачного сервиса, который мы прописали в настройках 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' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\Redis',
...
Кэширование настроено.
Выполнение фоновых заданий в 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.