Сервис MediaWiki

Материал из wolfram
Перейти к навигации Перейти к поиску

Да дело дошло именно до установки собственного сервиса Wiki.

Как это работает? Некий сервис MediaWiki предоставляет веб сервис, с неким функционалом. Веб сервис базируется на железе пользователя. Сервер пользователя хранит все данные, выполняет запросы, к страницам и является веб сервером. Данный веб сервис позволит сделать все то, что делает Wiki. В ней я планирую документировать свои действия связанные со сложными системами, начиная установкой подобных сервисов, изучением Linux, кодированием видео, проектированием, и так далее. Возможно в дальнейшем расширить функционал до нескольких пользователей, с возможностью ими оформлять собственные сложные и интересные процессы познания. =)

Установка данного веб сервиса очень проста. Переходим на официальную страничку установки MediaWiki для Ubunta/Debian. Очень много, но мало толку. Поэтому будет так.


Настройка Proxmox для MediaWiki


Загрузка образа Ubuntu

Получается мы устанавливаем ubuntu server как виртуальную в среде Proxmox.

На данный момент это версия 18.04.4 LTS.

На этот раз ни на какие накопители ничего записывать не нужно.

Требуется загрузить образ в пространство Proxmox, в хранилище. В нашем случае подойдет local.

Выбираем local в узле pve, переходим в “Содержимое”.

Нажимаем “Загрузить” и выбираем наш образ.

Загружаем, ожидаем.

Создание VM

Нажимаем: создать VM:

В разделе Общее:

Узел: pve

VM ID: 106

Имя: mediawiki

В разделе ОС:

Хранилище: local

ISO образ: То, что загрузили с официального сайта Ubuntu.

В разделе Жесткий диск:

Шина: VirtIO Block

Хранилище: local-lvm

Размер: 10

Кэш: Write through

В разделе Процессор:

Ядра: 2

В разделе Память:

Память: 512

Готово.

Установка OS

Описываю только то, на что стоит обратить внимания, так как установить ос для Nginx можно просто по умолчанию.

Тут все также, как и в nexcloud.

Но при вопросе в разделе Filesystem setup выбираем автоматическую, и наш единственный раздел. Для того чтобы, установщик на своё усмотрение разбил диск.  

Тут очень мало важны размеры виртуальной оперативной памяти, так как машина выполняет очень узкую задачу.


Начинается установка. При этом она идет в фоне.

В это время заполняем данные пользователя и машины.

Your name: vova

your server’s name: mediawiki

Pick a username: vova

Choose password: пароль_пользователя

Confirm your password: пароль_пользователя

Готово

На вопрос установить ли ssh соглашаемся, поставив крестик пробелом.

Готово

Ничего не выбираем и говорим Готово. Ждем окончания установки.  

По окончании Reboot

enter

ОС перезагрузится, но уже в установленном виде. С ней бы выполнить стандартный набор операций.  

Обновляем репозитории:

apt-get update

Выполняем обновление пакетов из репозиториев

apt-get upgrade –y

Устанавливаем файловый менеджер mc

ОС готова переходим к установке MediaWiki.

Установка MediaWiki


Установка LAMP

LAMP - включает в себя Linux, Apache, MySQL и PHP

sudo apt-get install apache2 mariadb-server php php-mysql libapache2-mod-php php-xml php-mbstring -y

Да это очень быстро и в одну строку. Но потом настраивать.

MediaWiki

Установкой в данном случае является перемещение файлов веб сервиса в нужную папку. Важно то в какую. Так как я неравнодушен к кратким и красивым URL, моей целью было убрать из строки /mediawiki после доменного имени. Но про это позднее. А пока установка происходит не по интродукциям, а с целю получить вышеуказанное. Суть в том, что сайты запускаются в определенном месте linux. К ним обращается Apache2 на основе конфигурационных файлов. Располагается это все по пути /var/www/html и название "сайта". Это нужно для того, чтобы была возможность установить больше одного на один сервер. Но в нашем случае это не требуется. Сайт будет один. поэтому распаковка веб сервиса будет напрямую в директорию /var/www/html.

Получить архив веб сервиса можно на официальном сайте MediaWiki в разделе загрузок. Предполагается что загрузка выполняется в директорию /home/имя пользователя.

wget https://releases.wikimedia.org/mediawiki/1.34/mediawiki-1.34.1.tar.gz

На момент написания это версия 1.34.1.

Находясь все в той же директории выполняем распаковку архива:

tar -xvzf /tmp/mediawiki-1.34.1.tar.gz

Имя файла будет разным в зависимости от версии.

Теперь переместим распакованные файлы. По стандартной инструкции перемещали бы в /var/www/html/mediawiki.

cp -r mediawiki-1.34.1 /var/www/html/

Сделаем папку /var/www/html/ принадлежащей группе и пользователю www-data, и дадим права на запись маской 777.

chown -R www-data:www-data /var/www/html
chmod -R 777 /var/www/html


Настройка

Любой софт нужно настраивать. Это большая часть работы.

Конфигурация MariaDB

Первичная настройка базы данных:

mysql_secure_installation

Придумываем вводим пароль для входа в базу, отвечаем на все вопросы Y. По у молчанию от пользователя root.

Enter current password for root (enter for none):
Set root password? [Y/n]: N
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]:  Y
Reload privilege tables now? [Y/n]:  Y

Переходим к созданию базы и пользователя:

mysql -u root -p

Эта команда создаст базу с названием "mediadb". Можно указать любое имя.

CREATE DATABASE mediadb;

Создаем пользователя с именем "media" и даём ему пароль. Пароль лучше делать сложный.

CREATE USER 'media'@'localhost' IDENTIFIED BY 'пароль пользователя media';

Даём привилегии выше созданному пользователю:

GRANT ALL ON mediadb.* TO 'media'@'localhost' IDENTIFIED BY 'пароль пользователя media' WITH GRANT OPTION;

Теперь отчищаем привилегии и выходим из настройки:

FLUSH PRIVILEGES;
EXIT;


Настройка Apache2

Переходим к настройке Apache2, по стандартной схеме мы бы создали конфигурационный файл в папке /etc/apache2/sites-enabled с названием нашего сервиса. Но так как у нас mediaWiki в корне var/html/ требуется настраивать корневой файл конфигурации 000-default.conf.

nano /etc/apache2/sites-enabled/000-default.conf

Теперь добавляем в документ нужные элементы. На примере не указаны Коментарии. Добавленные строки выделены утолщенным шрифтом.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    <Directory /var/www/html/>
        Options +FollowSymLinks
        AllowOverride All
        </Directory>
    ErrorLog /var/log/apache2/media-error_log
    CustomLog /var/log/apache2/media-access_log common
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Настройка PHP

Отредактируем файл конфигурации php.ini.

nano /etc/php/7.2/apache2/php.ini

Укажем размеры загружаемого файла в 100 мегабайт.

upload_max_filesize = 100M

Укажем ограничение по оперативной памяти в 256 мегабайт.

memory_limit = 256M

Так же проверим включена ли загрузка файлов.

file_uploads = On

Сохраняем документ, и выполняем перезапуск службы apache2:

systemctl reload apache2


Запуск MediaWiki

После всех выполненных операций можно приступить к проверке того, что все хорошо.

Первичная настройка

Вводим в строке веб поиска адрес нашей машины в моем случае это 192.168.1.122. Это локальный адрес.

http://192.168.1.122

Если все сделано правильно то откроется страница первого запуска. Нужно будет выполнить несколько настроек:

Пример первого запуска MediaWiki

Нажимаем "начать настройку" Далее нам дают выбрать язык, указываем естественно наш родной. Соглашаемся со всем указанным. Попадаем в окно настройки базы SQL.

Имя базы указываем то, что указывали ранее при настройке MariaDB.

mediadb

Имя пользователя базы указываем:

media

Пароль берем все из той же части настройки. Далее.

Даём имя нашей wiki, в моем случае это:

wolfram

Придумаем имя пользователя и пароль.

Далее оставляем все по умолчанию. После чего появится окно с сообщением об окончании настройки. Данные для настроек находятся в сгенерированном файле LocalSettings.php. Который потребуется поместить в корневой каталог веб сервиса, в нашем случае /var/www/html. Нажимаем на ссылку, начинается скачивание. загрузить файл на сервер можно множеством способов, например подключиться через winscp.

Конфигурация LocalSettings.php

После помещения файла в папку /var/www/html, вносим в него первичные правки:

nano /var/www/html/LocalSettings.php

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

$wgServer = "https://wiki.mywolfram.ru";

Разрешим загрузку файлов, это нужно для размещения картинок на страницах.

$wgEnableUploads = true;

Отключить редактирование для не зарегистрированных пользователей.

$wgGroupPermissions['*']['edit'] = false;

На моей wiki вести записи планирую только "Я", поэтому я даю запрет на регистрацию, оставляя возможность добавлять пользователей вручную.

$wgGroupPermissions['*']['createaccount'] = false;

Запрещаю редактирование страниц всем кроме админов (sysop):

$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['sysop']['edit'] = true;

Добавляю путь для иконки сайта. По умолчанию её нет. Файл favicon.ico требуется разместить на сервере в корне сайта /var/www/html.

$wgFavicon = "$wgScriptPath/favicon.ico";

Та же логотип wiki так же можно установить свой, для этого нужно разместить файл в формате png с разрешение 135x135 пикселей, с именем wiki.png, путь /var/www/html/resources/assets/.

С первичной настройкой mediawiki можно закончить. Сайт работает, и выполняет базовый функционал.

Красивые адреса MediaWiki

Что за красивые адреса? В адресной строке браузера отображен путь к страницам. По умолчанию после установки wiki по официально инструкции, чтобы попасть на сайт требуется ввести домен.ru/mediawiki/. Если ввести просто домен то мы попадаем на страницу Apache. Хотелось бы попадать на сайт введя лишь доменное имя. Что мы и исправили установив в нашу mediawiki в папку var/www/html в разделе по установке MediaWiki.

Теперь наш адрес выглядит домен.ru/index.php/Заглавная_страница.

Уже лучше но имеется непонятное index.php, это последствие того что наши страница строятся на основе PHP. Этот файл является конфигом страницы. Он есть всегда. Но его можно скрыть в адресной строке, пользователю эта информация не нужна.

Чтобы это сделать нужно:

Настроить Apache2

Для этого редактируем файл конфигурации 000-default.conf.

nano /etc/apache2/sites-enabled/000-default.conf

В нем вписываем следующее:

...
<Directory /var/www/html/>
 Options +FollowSymLinks
 AllowOverride All
 RewriteEngine On
 RewriteRule ^/(.*):(.*) /index.php/$1:$2
</Directory>
...

Настройка LocalSettings.php

Чтобы убрать index.php нужно внести изменения в 2 переменных $wgArticlePath и $wgActionPaths. Первая нужна для скрытия index.php на обычных страницах. Но на страницах редактирования настроек и так далее все равно останется этот злополучный index.php. Для этого и нужна вторая переменная.

Открываем файл конфигурации LocalSettings.php

nano /var/www/html/LocalSettings.php

и в носим в конце следующее

#Скрываем index.php
$wgArticlePath = "/$1";
$wgUsePathInfo = true;
$wgActionPaths['edit'] = "$wgScriptPath/edit/$1";
$actions = array( 'edit', 'watch', 'unwatch', 'delete','revert', 'rollback', 'protect', 'unprotect', 'markpatrolled', 'render', 'submit', 'history', 'purge', 'info' );
foreach ( $actions as $action ) {
 $wgActionPaths[$action] = "/$1/$action";
}
$wgActionPaths['view'] = "/$1";
$wgArticlePath = $wgActionPaths['view'];

Данные параметры позволят нам скрыть index.php на 90 процентах страниц.

При редактировании и подобных операция будет появляться домен/edit/название страницы.

Настройка .htaccess

Пока не пойму что это, но это не мешает внести в него все что нужно. Это что то очень важно и без него работать не будет.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /index.php/$1 [L,QSA]
RewriteRule ^/([a-z]*)/(.*)$ %{DOCUMENT_ROOT}/index.php [L,QSA]

На этом реврайты можно закончить. Если найдется еще информация о, том как сделать еще лучше, обязательно дополню.

После всех манипуляций перезапускаем службу apache:

systemctl reload apache2


Установка расширений

Для MediaWiki существует множество расширений. Все они что то добавляют.

Удобное редактирование страниц

По умолчанию в MediaWiki редактирование не совсем приветливое, выделение строк и подобные элементы выполняются в ручную. И конечный результат можно увидеть на предпросмотре. Для решения подобной сложности существует расширение Parsoid. Оно внедряется в код MediaWiki и работает как одно целое. На момент создания страницы есть информация о слиянии данного расширения с MediaWiki, сроком указана дата 2020 год. Пока что нет.

Установка абсолютно не интуитивно понятная, и совершенно не последовательная. Хуже того нет никаких мануалов или статей по установке этой связки, кроме самой MediaWiki.

Начинается все с установки Parsoid, как ни странно. Но чтобы он работал нужен еще и VisualEditor. про него есть упоминания, но настолько не очевидно, что можно и не понять что это обязательно.

Parsoid (устарело)!!!


Установка

Устанавливаем какой то там dirmngr, от root.

apt install dirmngr
apt-key advanced --keyserver keys.gnupg.net --recv-keys AF380A3036A03444

Добавляем в репозитории сервер.

apt-add-repository "deb https://releases.wikimedia.org/debian jessie-mediawiki main"

Выполняем установку.

apt install apt-transport-https
apt update && sudo apt install parsoid

Готово Parsoid есть.

Настройка

Переходим к настройке кофига config.yaml, располагается в /etc/mediawiki/parsoid/.

nano /etc/mediawiki/parsoid/config.yaml

В нём нужно

исправить строку uri: 'http:// на

uri: 'http://localhost/api.php'

Так как у нас находится mediawiki в корне html. Больше ничего менять не нужно.

Возможно нужно поменять порт для подключения serverPort, на 8142. Но у меня работает и без этого. В случае если не запускается Parsoid нужно раскоментировать строку и вписать:

serverPort: 8142

Переходим к внесению изменений в LocalSettings.php.

nano /var/www/html/LocalSettings.php

Вписываем в конце следующее в файл:

#Настройка Parsoid
$wgVirtualRestConfig['modules']['parsoid'] = array(
'url' => 'http://localhost:8142',
'domain' => 'localhost',
'prefix' => 'localhost'
);
#Запрет доступа к редактированию кому попало в Pardoid
$local_ip = '127.0.0.1';
if ( $_SERVER['REMOTE_ADDR'] == $local_ip ) {
 $wgGroupPermissions['*']['read'] = true;
 $wgGroupPermissions['*']['edit'] = true;
}else{
 $wgGroupPermissions['*']['read'] = true;
 $wgWhitelistRead = array ("Special:Userlogin", "MediaWiki:Common.css", "MediaWiki:Common.js", "MediaWiki:Monobook.css", "MediaWiki:Monobook.js", "-");
 $wgGroupPermissions['*']['edit'] = false;
}

Больше ничего, дальнейшая настройка происходит в VisualEditor.


VisualEditor


Установка

Переходим по на страницу загрузки, выбираем нашу версию копируем ссылку, и пишем.

wget наша_ссылка

Пример:

wget https://www.mediawiki.org/wiki/Special:ExtensionDistributor/VisualEditor

После загрузке нужно распаковать архив.

tar -xzf то_что_скачалось.tar.gz -C /var/www/html/extensions

Готово.

Настройка

Конфигурируем файл LocalSettings.php.

nano /var/www/html/LocalSettings.php

Вписываем в конце.

#Визуальный редактор
wfLoadExtension( 'VisualEditor' );
$wgDefaultUserOptions['visualeditor-enable'] = 1;

После всех манипуляций перезагружаем parsoid и apache2.

systemctl restart parsoid
systemctl reload apache2

Заходим на любую станицу, нажимаем редактировать, должна пройти загрузка VisualEditor. Готово.

Проблемы

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

MultimediaViewer


Установка

Переходим по на страницу загрузки MultimediaViewer, выбираем нашу версию копируем ссылку, и пишем.

wget наша_ссылка

Пример:

wget https://extdist.wmflabs.org/dist/extensions/MultimediaViewer-REL1_34-30ea768.tar.gz

После загрузке нужно распаковать архив.

tar -xzf то_что_скачалось.tar.gz -C /var/www/html/extensions

Готово.

Настройка

Конфигурируем файл LocalSettings.php.

nano /var/www/html/LocalSettings.php

Вписываем в конце.

#Медиа-просмотрщик
wfLoadExtension( 'MultimediaViewer' );

Готово

Переходим на страницу своей wiki

домен/Special:Version

чтобы убедится что расширение добавлено. Теперь просмотр медиафайлов более удобен.

MassEditRegex

поиск и замена текста в статьях