Настройка сервера ownCloud + Apache на Ubuntu

Используемые термины: Ubuntu , Apache , MariaDB , PHP , Redis .

ownCloud — облачный сервис для совместной работы (преимущественно, с файлами). Это приложение, разработанное на PHP и для своей работы требует настроенного веб-сервера в связки с СУБД и интерпретатором данного языка программирования. В данной инструкции мы рассмотрим процесс настройки сервиса в связке, рекомендованной разработчиком — Apache + MariaDB + Redis. После развертывания мы выполним оптимизацию и проверим конфигурацию сервера. Работать будем на Linux Ubuntu.

Подготовка к установке

Прежде чем перейти к установке и настройке компонентов owncloud, выполним предварительные действия.

Системные требования

С актуальными системными требованиями можно ознакомиться на странице System requirements (нам интересны рекомендованные). Необходимо убедиться, что наш сервер соответствует им.

Особое внимание нужно уделить программным требованиям, а именно:

  1. Дистрибутиву и версии операционной системы.
  2. СУБД.
  3. Вариантам веб-сервера.
  4. Версии 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 и выбираем свою версию операционной системы и нужную версию СУБД:

Выбираем версию ОС и mariadb для получения настроек репозитория

Ниже отобразится информация для настройки репозитория. Устанавливаем пакеты:

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.

Задаем логин и пароль для администратора, оставляем путь до каталога с данными или задаем свой:

Создаем администратора во время установки ownCloud

В качестве базы данных выбираем MySQL/MariaDB (если предлагается выбор) и вводим в качестве логина, пароля и базы (в нашем случае, owncloud ):

Настраиваем подключение к базе данных во время установки 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 при посещении страниц пользователем. Это не позволит выполнять задачи планировщика при отсутствии активности.

Для решения проблемы переходим в настройки:

Переходим в настройку ownCloud

Кликаем по Основные :

Переходим к основным параметрам в ownCloud

В разделе «Cron (планировщик задач)» выбираем Cron:

Настраиваем фоновые задания в ownCloud

Идем в консоль сервера и устанавливаем 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 .

2. Установка и настройка OnlyOffice Server на Ubuntu .

EnglishRussianUkrainian