Verification: a143cc29221c9be0

Owncloud не установлен php модуль zip

Owncloud не установлен php модуль zip

Почему мы используем собственный сервер

В нашей школе дистанционное обучение проводится с 2014 года. В тот год первые две недели царил «полнейший аврал», но сдача экзаменов среднего образования прошла без каких-либо эксцессов. Даже был проведен виртуальный выпускной.

К концу учебного года, при 1500 студентов, система стала занимать на диске более 600 Гб. Плюс место для резервных копий. Для резервных копий был выделен внешний жесткий диск. Как понимаете, при таком объеме дискового пространства стоимость выделенного сервера становится недоступной для бюджета учебного заведения. Потому и приходится создавать и обслуживать собственный сервер.

В сети огромное количество мануалов по развертыванию Moodle, но практически все они ориентированы на людей, знающих командную строку. А во многих (особенно небольших) школах, таких специалистов нет. Эта обязанность обычно ложится на учителей.

Этим материалом я постараюсь облегчить процесс установки Moodle. Совсем без командной строки, конечно, не обойтись, но я попробую сделать этот процесс максимально простым и понятным.

Выбираем и регистрируем домен

Стоимость доменного имени составляет около 200 рублей в год. Можно, конечно, обойтись без доменного имени, но тогда на сервер придется заходить по IP-адресу, который не каждый запомнит.

Пример регистрации домена буду показывать на Timeweb, у других регистраторов действия схожи.

Открываем панель управления хостингом, переходим в раздел «Домены и поддомены», кликаем на символ шестеренки и выбираем пункт «Настройки DNS». В поле «А» указываем IP-адрес, выданный вашим провайдером.

Список DNSВ настройках DNS также есть поле «AAAA», это IPv6-адрес. В примере он удален, поскольку не поддерживался нашим провайдером, но именно с IPv6 адресов шло большинство вредоносных запросов. Пока прописываются DNS, переходим к установке сервера.

Создаем сервер

Для начала собираем сам сервер. Минимальные требования можно посмотреть на официальном сайте Moodle. 

На нашем сервере используется следующая конфигурация, и этого хватает с лихвой:

  • Процессор – AMD A8-9600 RADEON R7,
  • Оперативная память – 16 Гб,
  • Жесткий диск – 1 Тб.

Плюс внешний жесткий диск такого же объема, на котором по расписанию создается полная копия образа в архиве, чтобы в случае форс-мажора максимально быстро восстановить систему. Диски самые обычные, не SSD, поскольку бюджет любого муниципального учебного заведения весьма ограничен. Ширина канала - 50 Мбит.

Даже когда сайт достигал пика посещений, а это примерно 400 человек онлайн, потребление ресурсов не превышало 50 процентов. В каждом конкретном случае показатели могут различаться. Поэтому, когда собираете сервер, предусмотрите возможность апгрейда.

Ставим операционную систему

Мне больше нравится Debian, но если вы склоняетесь к Ubuntu, можете поставить ее. Рассмотрим оба варианта, ибо разница между ними минимальна. Остальные OS мы рассматривать не будем. На Windows резко возрастают требования к ресурсам, а стоимость лицензии весьма ощутима.

Скачиваем образ операционной системы с официального сайта. Если выбрали Debian, то загружаем минимальный образ, все остальные пакеты будут загружены в процессе установки. Если душа просит Ubuntu, то скачиваем последнюю версию. Берем обычную версию, никаких «Server edition».    

Далее через Rufus создаем загрузочный USB и ставим систему на сервер.

Если используем Debian, то устанавливаем систему с минимального установочного образа. При выборе пакетов выбираем установку SSH и стандартные системные утилиты.

Если используем Ubuntu, загружаем и инсталлируем SSH командой:

sudo apt install openssh-server

Справка. SSH – это сетевой протокол, позволяющий удаленно работать на компьютере через командную оболочку.

Устанавливаем веб-сервер

Для работы Moodle нам нужен веб-сервер, а именно:

  • Apache – сам сервер,
  • MySQL – система управления базами данных,
  • PHP – язык, на котором написан Moodle.

Человек, знакомый с Linux, все поставит из терминала, но речь не о профи, а о тех, кого пугают строки Linux и сама командная строка. А деваться некуда, работа должна быть сделана. Поэтому предложу длинный, но более понятный путь.

Установка Webmin

Справка. Webmin – это оболочка, которая позволяет через веб-интерфейс (т.е. через обычный браузер) управлять вашим сервером. Это и файловый менеджер, и инструмент для настройки автоматического резервного копирования или создания/удаления баз данных.

Приготовьтесь, сейчас будет самое сложное. Если вы установите Webmin, то большая часть пути уже позади.

Скачиваем и запускаем Putty, в окне host вводим IP-адрес или домен вашего сервера. В открывшемся окне вводим логин и пароль, которые мы указали при установке сервера.

PuttyЧтобы не набирать sudo в начале каждой команды, пишем:

sudo su // в Ubuntu

su // в Debian

Снова вводим пароль.

Обновляем операционную систему:

apt update

apt dist-upgrade

Теперь нам нужно добавить репозиторий для установки Webmin.

Справка. Репозиторий – это хранилище пакетов для установки. В нашем случае мы подключаем репозиторий Webmin.

Вводим:

sudo nano /etc/apt/sources.list

Текст придется набирать вручную.

И добавляем строку:

deb http://download.webmin.com/download/repository sarge contrib

Перемещение курсора делается стрелками на клавиатуре.

Выходим из редактора, нажав Ctrl+X. Подтверждаем изменение файла и нажимаем Enter.

Чтобы наша операционная система доверяла новому репозиторию, добавляем ключи:

wget http://www.webmin.com/jcameron-key.asc

apt-key add jcameron-key.asc

Если на этом этапе возникает ошибка,  значит, вы неверно ввели какие-то команды. Откройте заново sources.list и исправьте ошибку.

source.listСтавим Webmin:

Через несколько минут мы увидим сообщение

Webmin install complete. You can now login to

https://your_server_ip:10000 as root with your

root password, or as any user who can use `sudo`.

Webmin установлен, теперь можно подключиться к серверу через веб-интерфейс. 

В браузере набираем https://имя_сайта:10000. Появится предупреждение о сертификате, игнорируем его и переходим к авторизации.

Если установлен Debian, логин будет root. Если Ubuntu, то вводите логин, который вы задали во время установки.

Устанавливаем Apache и MySQL

Открываем раздел «Неиспользуемые модули», выбираем «Веб-сервер Apache» и нажимаем «Установить». Точно так же устанавливаем «Сервер баз данных MySQL».

Кликаем на «Обновить модули» и в разделе «Службы» видим только что установленные компоненты.

Устанавливаем PHP

Осталось установить PHP.  Снова открываем Putty (если закончилась сессия), заново авторизуемся под суперпользователем (root) и вводим команду:

apt-get install libapache2-mod-php

Будет выведен список пакетов для установки. После подтверждения начнется установка.

На момент написания статьи по умолчанию устанавливается версия 7.3 или 7.4. Любая из версий нас полностью устраивает.

Ставим остальные пакеты, необходимые для запуска Moodle (пример на версии 7.3):

apt install graphviz aspell ghostscript clamav php7.3-pspell php7.3-curl php7.3-gd php7.3-intl php7.3-mysql php7.3-xml php7.3-xmlrpc php7.3-ldap php7.3-zip php7.3-soap php7.3-mbstring

Если у вас установлена другая версия PHP,  то в команде установки ее необходимо изменить.

Устанавливаем Moodle

Загружаем последнюю версию с официального сайта.

Рекомендую выбрать расширенную версию, которая оканчивается на +.  Далее загружаем через файловый менеджер файлы в корневую директорию сайта. У нас эта директория var www.

Создаем базу данных и, открыв в браузере адрес нашего сайта, приступаем к установке.

При установке Moodle будет запущен мастер проверки. Наиболее типичные ошибки на этом этапе:

Установка

Выполняется командой:

git clone https://github.com/kotpoliglot/vestaphpinstaller.git && cd vestaphpinstaller && chmod +x dockerize.sh && bash dockerize.sh -s --5.6

Будет установлен (если не был установлен ранее) docker через унифицированный инсталлятор (проверялся на CentOS7 и Ubuntu).

Последний аргумент в команде — желаемая версия PHP. В настоящий момент доступны версии PHP: 5.2, 5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2 и 7.3. Скрипт создаст шаблон для Vesta и два сервисных файла: docker.httpd и docker.php.56.

Все сервисы выполняют установку/обновление образов, в связи с чем первый запуск (например, подключение шаблона в “Весте”) либо перезапуск при наличии обновлений может занять некоторое время.

PHP запускается от имени www-data. На хосте будет создан (если еще нет) соответствующий пользователь. Владелец директории сайта будет изменен на www-data, группа останется прежняя. Также будет создана директория /opt/docker/ для хранения конфигурационных файлов.

В итоге мы потратим ~700 Мб на установку самого докера и около ~300Мб на образы, но получим прирост производительности. Результаты измерения производительности средствами Bitrix в 1.5-2 раза выше для связки VestaCP + Docker, чем при использовании аналогичной версии PHP в качестве модуля Apache.

Установка на одноядерный процессор

При установке докер-контейнера на сервер с одноядерным процессором (cpu=1) не будет автоматически запускаться контейнер PHP.
В таких случаях необходимо отредактировать файл /etc/systemd/system/docker.php.56.service (где 5.6 - установленная версия PHP):

--cpus=2 изменить на --cpus=1

Далее перезапустить докер:

systemctl stop docker
systemctl start docker

После чего переключить на нужную версию PHP в панели VestaCP. В случае если нужная версия уже выбрана, то необходимо переключить на дефолтную, сохранить и снова переключить на нужную версию PHP.

Схема работы

Схема работы выглядит следующим образом:

Nginx -> apache в контейнере -> php-fpm в контейнере.

Apache потребовалось запаковать в контейнер (~80mb) из-за различий версий между CentOS и Apache. Версия в Centos не позволяет корректно проксировать запросы на fpm.

Apache запускается на порту 9080, поэтому скрипт редактирует конфигурацию nginx. Переключение на стандартный шаблон Vesta (default) вернет прежний порт (8080).

PHP запускается на 9000+version, то есть 9056, 9070, 9072 и т.д.

HTTPD

httpd запускается следующим образом:

docker run --rm --network host
-v /home:/home
-v /var/log/httpd/domains:/var/log/apache2/domains
-v /opt/docker/conf/web:/usr/local/apache2/conf/vhosts
--name docker-httpd kotpoliglot/php:httpd

В /opt/docker/conf/web лежат хосты, httpd в контейнере с минимальным набором модулей из-за экономии ресурсов, хосты для контейнеров хранятся в /opt/docker/conf/web, в директории Vesta (/home/admin/conf/web/) создается пустой файл.

PHP

PHP запускается следующим образом:

docker run --rm --network host --cpus=2
-v /etc/passwd:/etc/passwd
-v /etc/group:/etc/group
-v /etc/hosts:/etc/hosts
-v /var/lib/mysql/mysql.sock:/var/run/mysqld/mysqld.sock
-v /opt/docker/conf/php/56/php.ini:/usr/local/etc/php/conf.d/docker.ini
-v /home:/home --name php-56 kotpoliglot/php:56

passwd и group передаются в контейнер из-за различных требований к uname и uid в CentOS и Ubuntu.

/etc/hosts — внешние адреса доменов Vesta, они нужны в контейнере для корректной работы сокетов в Bitrix, например. Файл обновляется при каждом переключении шаблонов в Vesta.
/opt/docker/conf/php/56/php.ini — файл, с помощью которого можно повлиять на параметры PHP в контейнере.