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

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: UbuntuApacheMariaDB, PHPRedis.

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.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.

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

Создаем администратора во время установки 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' => '\OC\Memcache\Redis',
  'memcache.local' => '\OC\Memcache\Redis',
  ...

Кэширование настроено.

Выполнение фоновых заданий в 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.

# Ubuntu # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет