Корпоративная Википедия на DokuWiki

DokuWiki «Докувики» — это простая в использовании вики совместимая со стандартами и лёгкая в использовании, предназначена в первую очередь для создания разного рода документации. Докувики ориентирована на команды разработчиков, рабочие группы и небольшие компании. Все данные хранятся в простых текстовых файлах, поэтому для работы не требуется система база данных (СУБД). Простой, но мощный синтаксис облегчает создание структурированных текстов и позволяет при необходимости читать файлы данных даже за пределами Wiki. Автор проекта — Андреас Гор (Andreas Gohr).

На основе DokuWiki, немецкой компанией, создана ICKEwiki (существует Free версия) - корпоративная вики для малого и среднего бизнеса. Если вы только выбираете себе движок Вики под свой проект, обратите внимание на ресурс WikiMatrix, где в удобной форме можно сравнить возможности всех популярных WIKI.

Как установить DokuWiki на веб-сервер Nginx и php-fpm

В этом руководстве по установке DokuWiki на веб-сервер Nginx (php-fpm), подразумевается, что Nginx уже установлен, если нет изучите статью Простая установка LEMP (LNMP) сервера (Linux Nginx PHP MySQL). В этом примере я не использую панель управления хостингом, все делаем руками.

Системной окружение, в котором будем устанавливать DokuWiki:

# nginx -v
nginx version: nginx/1.20.2
# php -v
PHP 7.4.29 (cli) (built: Apr 12 2022 10:55:38) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.29, Copyright (c), by Zend Technologies
wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz
  • Распаковка скачанного архива и создание корневого каталога (/var/www/dokuwiki) для файлов сайта:
tar xzf dokuwiki-stable.tgz -C /var/www/dokuwiki
cp -Ra dokuwiki-2020-07-29/* /var/www/dokuwiki
  • Изменить владельца, в моем случае все процессы веб-сервера запущены от пользователя с именем nginx
chown -R nginx:nginx /var/www/dokuwiki

Приступим к настройки виртуального хоста в Nginx. Придумывать велосипед не надо, а скачиваем уже готовый конфигурационный файл (раздел Full working config) с официального сайта Nginx для нашего вики-движка DokuWiki.

Мой виртуальный хост будет описан в файле /etc/nginx/sites-enabled/wiki.darkfire.cf.conf, вставляем в него скопированный конфиг. Я изменял такие параметры:

  1. server_name на название нашего сайта, в моем случае буду использовать домен wiki.darkfire.cf;
  2. путь к логам access_log error_log (можете эти директивы удалить или закоментировать);
  3. root указываем путь к файлам сайта
  4. fastcgi_pass меняем на настройки вашей системы

Сохраняем, проверяем синтаксис и перегружаем nginx.

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

# systemctl reload nginx && systemctl status php-fpm
certbot -d wiki.darkfire.cf

Ниже рабочий конфиг, с настройкой редиректа и SSL сертификатами. Вы можете его просто скопировать, поменяв значения выше, и после этого выпустите или замените пути к SSL сертификату. Также в этом файле включена поддержка http2.

server {
  server_name wiki.darkfire.cf;
  root /var/www/dokuwiki;
  autoindex off;
  client_max_body_size 15M;
  client_body_buffer_size 128k;
  index index.html index.htm index.php doku.php;
  access_log  /var/log/nginx/wiki.access.log;
  error_log  /var/log/nginx/wiki.error.log;
 
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
 
  location / {
    try_files $uri $uri/ @dokuwiki;
  }
 
  location ~ ^/lib.*\.(gif|png|ico|jpg)$ {
    expires 30d;
  }
 
  location = /robots.txt  { access_log off; log_not_found off; }
  location = /favicon.ico { access_log off; log_not_found off; }
  location ~ /\.          { access_log off; log_not_found off; deny all; }
  location ~ ~$           { access_log off; log_not_found off; deny all; }
  # Sitemap
  rewrite ^/sitemap\.xml\.gz$ /doku.php?do=sitemap permanent;
 
  location @dokuwiki {
    rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
    rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
    rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
    rewrite ^/(.*) /doku.php?id=$1 last;
  }
 
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  127.0.0.1:9003;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    fastcgi_param  QUERY_STRING     $query_string;
    fastcgi_param  REQUEST_METHOD   $request_method;
    fastcgi_param  CONTENT_TYPE     $content_type;
    fastcgi_param  CONTENT_LENGTH   $content_length;
    fastcgi_intercept_errors        on;
    fastcgi_ignore_client_abort     off;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
  }
 
  location ~ /(data|conf|bin|inc)/ {
    deny all;
  }
 
  location ~ /\.ht {
    deny  all;
  }
 
 
    listen 443 ssl http2; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/wiki.darkfire.cf/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/wiki.darkfire.cf/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
 
}
server {
    if ($host = wiki.darkfire.cf) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
 
  server_name wiki.darkfire.cf;
  listen 80;
    return 404; # managed by Certbot
 
}
  • И только теперь переходим к инсталлятору DokuWiki по адресу https://[ваш_домен]/install.php. Заполняем поля инсталлятора:
  1. Wiki Name. Задаёт опцию title вики. Это имя будет выводиться в верхнем правом углу шаблона по умолчанию (default).
  2. Enable ACL. Остальные опции будут доступны, только если используется список контроля доступа (ACL). «ДокуВики» не требует ACL, но его использование рекомендовано, потому что без него доступ к интерфейсу администрирования будет закрыт.
  3. Superuser. В этом поле указывается имя будущей учётной записи администратора. В имени требуется использовать только ASCII-символы в нижнем регистре. Использование пробелов не разрешается.
  4. Full Name. Реальное имя администратора.
  5. E-Mail. Электронный почтовый адрес администратора. Расширенная проверка введённого адреса не проводится (проверяется только наличие сивола «@»), тем не менее здесь требуется указать действительный адрес.
  6. Password и Once Again. Дважды вводим пароль администратора.
  7. Initial ACL policy. Установщик позволяет вам настроить начальный набор правил ACL. Выбор конкретного варианта зависит прежде всего от того, как вы собираетесь использовать Wiki. Это только начальный этап установки, в дальнейшем вы сможете изменить правила ACL.
  8. Allow users to register themselves. Если флажок не установлен, пользователи не могут зарегистрироваться. Но если вести Вики будет один человек, а не команда, то флажок устанавливать не надо.
  9. Please choose the license you want to put your content under (Выберите лицензию, под которой вы хотите поместить свой контент). Информация о лицензии будет видна в футере вашей Вики.
  10. Once a month, send anonymous usage data to the DokuWiki developers (Раз в месяц отправлять анонимные данные об использовании разработчикам «ДокуВики»). По умолчанию включена, можете выключить.

Жмем Save. Установка DokuWiki закончена. Не забудьте удалить install.php!

Используете веб-сервер, который не использует .htaccess-файлы, вы должны вручную защитить свою установку. Следующие папки не должны быть доступны из сети: bin, conf, data, inc. Чтобы проверить, должны ли вы настроить права доступа попытайтесь получить доступ к http://yourserver.com/dokuwiki/data/pages/wiki/dokuwiki.txt. Вы не должны получить доступ к файлу по этому пути. Если вы видите исходный код - у вас проблема с безопасностью сервера.

Эти настройки должны присутствовать в конфигурационном файле вашего виртуального хоста в Nginx:

  location ~ /(data|conf|bin|inc)/ {
    deny all;
  }
 
  location ~ /\.ht {
    deny  all;
  }

Я посчитал излишним описывать эту процедуру, так как она подробно расписана на официальном сайте. В установке DokuWiki под Apache (mod_php) нет никаких подводных камней, в отличии от установки в Nginx. Тем более если вы используете какую-либо панель управления хостингом, просто скопируйте архив с DokuWiki, распакуйте в директорию сайта и запустите инсталлятор.

Настройки DokuWiki после установки

  • Транслитерация в именах страниц: полная транслитерация
  • Удобочитаемые адреса (URL): .htaccess
  • Задержку индексирования, измененной страницы, устанавливаем в 1 день, вместо 5 по умолчанию (Значение по умолчанию: 60*60*24*5 (60 сек. × 60 мин. × 24 ч. × 5 дн. — т. е. пять дней)). indexdelay:60*60*24*1 Для выключения отложенного индексирования установить её в «0».
  • sitemap:5 - тем самым мы включаем создание файла sitemap.xml (подробнее смотрите ниже)

Все файлы конфигурации хранятся в директории ./conf или в /etc/dokuwiki при установке из Debian-пакета.

«Основные» файлы обычно поставляются вместе с «ДокуВики», в то время как «локальные» файлы обычно создаются администратором вики.

Если какие-то настройки позволено сделать в локальном файле, то лучше сделать именно там, а не в основном файле. Это позволит избежать проблем при обновлении, т. к. основные файлы при нём меняются, а локальные — нет.

«Основной» файл «Локальный» файл Тип настроек Краткое описание
dokuwiki.php local.php
local.protected.php
см. ниже основные настройки вики
acronyms.conf acronyms.local.conf abbreviations автоматические подсказки аббревиатур
entities.conf entities.local.conf entities автоматические подстановки текста
interwiki.conf interwiki.local.conf interwiki сокращения ссылок интервики
mime.conf mime.local.conf MIME настройки mime-типов для загрузки на сервер
smileys.conf smileys.local.conf smileys подстановки графических смайлов
acl.auth.php см. acl настройки листов доступа
users.auth.php см. acl имена пользователей и пароли
license.php license.local.php license перечень доступных лицензий
scheme.conf scheme.local.conf urlschemes ключевые слова URL-ссылок
mediameta.php exif возможные метаданные для изображений
wordblock.conf wordblock.local.conf blacklist спамерские чёрные списки
userscript.js javascript Пользовательские JavaScript-улучшения
userstyle.css css Пользовательские CSS-улучшения

Согласно мануалу, для безопасного добавления дополнительного HTML или PHP к шаблону и чтобы при обновлении движка DokuWiki ваш код не затирался, создайте ваш файл в любом каталоге шаблонов (lib/tpl/dokuwiki/) или ваш conf/ каталоге. Файлы которые подключаются автоматически:

Название файла Позиция вашего HTML
meta.html Внутри HTML <head>, для добавления дополнительных CSS стилей или мета-заголовков
sidebarheader.html В верху сайдбара, перед текстом (если существует)
sidebarfooter.html В низу сайдбара, после текста (если существует)
pageheader.html На странице статьи, выше текстового контента
pagefooter.html На странице статьи, ниже текстового контента
header.html Шапка сайта, выше logo и wiki title
footer.html Подвал сайта, после любого контента на странице
social.html Ниже header.html используйте его, чтобы добавить кнопки социальных сетей (например, Facebook, Twitter, LinkedIn и т.д.).
topheader.html В самом верху страницы сразу после тега <body>

Карта сайта (sitemaps) создаётся, если включена опция «sitemap» в панели управления DokuWiki. По умолчанию, значении 0, чтобы включить sitemap поставить значение, например 5 (то есть данные в sitemap.xml будут обновляться один раз в 5 дней).

Файл карты находится во вложенном каталоге «cache» вашей установки «ДокуВики». Он будет доступен по ссылке: http://your_domain/dokuwiki/?do=sitemap. В зависимости от наличия поддержки gzip в вашем PHP, файл будет именоваться «sitemap.xml.gz» (если gzip доступен) или «sitemap.xml» (если gzip недоступен). Почти во всех современных установках PHP поддержка gzip включена, поэтому файл будет называться скорее всего «sitemap.xml.gz».

Карта сайта будет содержать только ссылки на страницы, которые доступны без авторизации на сайте.
Чтобы карта сайта была пересоздана, попробуйте временно установить для опции «sitemap» большое отрицательное значение.

Dokuwiki sitemap.xml и настройка Яндекс. Мой настройки для Яндекс Вебмастера, чтобы он корректно увидел sitemap.xml. Добавляем директивы Host и Sitemap в файл robotx.txt.

robotx.txt
User-agent: *
Disallow: /bin/
Disallow: /conf/
Disallow: /inc/
Disallow: /lib/
Disallow: /vendor/
Host: wiki.dieg.info
Sitemap: https://wiki.dieg.info/sitemap.xml.gz

Для Apache в файл .htaccess добавляем строку

RewriteRule ^sitemap\.xml\.gz$        doku.php?do=sitemap [L]

Для Nginx, в раздел server добавляем строку редиректа:

rewrite ^/sitemap\.xml\.gz$ /doku.php?do=sitemap permanent;
Так же sitemap.xml.gz можно добавить в Google Search Console, у меня до этих изменений Google видел его в виде /?do=sitemap

Чтобы не вставлять напрямую на сайт коды Яндекс Метрики и Google Analytics правильно всего использовать GTM. Регистрируем наш сайт в Google Tag Manager (https://tagmanager.google.com)

1 способ:

  1. Устанавливаем компонент https://www.dokuwiki.org/plugin:googletagmanager
  2. В меню "Настройки вики"⇒"Googletagmanager" задаем ID нашего сайта из кода выданного GTM.

После установки Google Tag Manager прекрасно работает, но на сайте появляются 2 критические ошибки Валидатор Nu Html Checker W3. Подобных ошибок, да и всех остальных, рекомендую избегать, особенно для информационных сайтов!

2 способ: Ручками добавляем код в файлы шаблона

  1. Создаем файл lib/tpl/dokuwiki/meta.html и в него добавляем основной код. Это безопасное добавление, после обновления движка, это код не затрется.
  2. lib/tpl/dokuwiki/main.php добавляем вторую часть код, после body
    </head>
    <body>
    <!-- Google Tag Manager (noscript) -->

    Здесь будьте осторожны, код может быть затерт при обновлении Dokuwiki. Наслаждайтесь работой без ошибок!!

Все найденные плагин для подключения Google AdSense показались мне старыми: adsense-plugin. Потому принял решение код вставить ручками в шаблон DokuWiki.

Включение рекламы AdSense на правом сайдбаре:

  1. Шаблон должен поддерживать сайдбар, DokuWiki шаблон по умолчанию его поддерживает.
  2. Включить в настройках: "Параметры «Докувики»"→Основные параметры→sidebar Значение по умолчанию:sidebar
  3. Перейдите по адресу http://your-wiki.com/doku.php?id=sidebar, нажмите кнопку «Создать страницу», отредактируйте эту страницу, сохраните, и боковая панель готова. Это всё, сохраненные изменения будут отображаться на боковой панели. Страница не должна быть пустой, я поставил только знак точки.
  4. В lib/tpl/dokuwiki создадим sidebarheader.html в который добавим код AdSense

Наслаждаемся рекламой на своем сайте!:))

Для добавления кода Adsense после первого H1, нужно отредактировать функцию header в файле <dokuwiki installation directory>/inc/parser/xhtml.php.

Находим строку

$this->doc .= "</h$level>".DOKU_LF;

и заменяем ее на код

        $this->doc .= "</h$level>";
        if ($level == 1) {
            $this->doc .= '
<!--noindex-->
 
КОД из AdSense
 
<!--/noindex-->
<br />';
        }
 
        $this->doc .= DOKU_LF;

Плагины и шаблоны DokuWiki

  • Плагин note - данные плагин позволяет выделить текст в виде заметки. http://dokuwiki.ru/plaginy?do=show
  • СacheRevisionsEraser - очищает кэш и удаляет старые версии документов.
  • codebutton - добавляет кнопку позволяющую вставлять код, например
    Insert Code
  • Navigation Issues - шаблон
  • plugin:boxes- позволяет оформлять «боксы» в самых различных цветовых комбинациях.
  • Для вставки видео с youtube я использую плагин Video Share Plugin, синтаксис:
    {{youtube>LWM8YxwqEU}}

    В следующем примера расположить видео по центру, большого размера.

    {{ youtube>LWM8YxwqEU?large }}

Необычное применение движка DokuWiki как landing page для товарных офферов. Устанавливаем дополнения через админку dokuwiki:

  • Bureaucracy Plugin HTML-формы для сбора данных
  • Включение/выключение sidebar: перейдите по адресу http://your-wiki.com/doku.php?id=sidebar, нажмите кнопку «Создать страницу», отредактируйте эту страницу, сохраните, и боковая панель готова.
  • Как вставлять видео на лендинг: Video Share Plugin. Пример вставки большого видео по центру страницы
    {{ youtube>8zqrLLIwte0?large }}
  • Как вставить галереи изображений: Gallery Plugin. Пример загрузки изображений со стороннего сайта:
    {{gallery>https://wow2.top/wp-content/uploads/2022/04/windows-klavishi-win-tab-pereklyuchenie-virtualnyh-rabochih-stolov.jpg}}

    Одно изображение

    {{gallery>:1200px-sqlite370.svg.png}}

Для подключения Bootstrap возможностей к DokuWiki используют плагин Bootstrap Wrapper Plugin. Установите плагин, используя диспетчер плагинов (Plugin Manager).

Чтобы плагин работал у вас должна быть установлен шаблон с поддержкой Bootstrap, например Bootstrap3 Template.

Этот плагин добавляет в вашу «ДокуВики» несколько компонентов Bootstrap. Значения иконок для них можно брать например здесь https://getbootstrap.com/docs/3.3/components/, подробнее о поддерживаемых плагином иконках здесь.

Пример Callouts

Так выглядит Callouts danger
  • Modal (with remote attribute)
  • Popover
  • HtmlMetaTags Plugin SEO плагин, позволяет задавать open graph, description и т.д.

Для использования вписываем в страницу в таком виде

{{htmlmetatags>metatag-robots=() 
metatag-keywords=(apfel,bananne,birne) 
metatag-description=(Allgemeiner Obstbauer)
metatag-media-og:image=(:wiki:image.jpg)
metatag-og:description=(anything else)
metatag-og:any=(anything else 2)
}}

Результат

<meta name="robots" content="noindex,nofollow"/>
<meta name="keywords" content="apfel,bananne,birne"/>
<meta name="description" content="Allgemeiner Obstbauer"/>
<meta property="og:image" content="http://localhost/lib/exe/fetch.php?media=wiki:image.jpg"/>
<meta property="og:description" content="anything else"/>
<meta property="og:any" content="anything else 2"/>

Если возникла надобность при выводе на принтер удалить какие-то объекты или изменить шрифт, можно дополнить/изменит файл lib/tpl/dokuwiki/css/print.css. Это изменит тип media CSS. Например, скроем при печати :

print.css
#footer2d,
#dokuwiki__header,
#dokuwiki__footer {
    display: none;
}

В DokuWiki предусмотрено добавление пользовательских стилей изначально. Для этого требуется создать файл conf/userstyle.css, в который и нужно вписывать CSS правила. Например, для картинок, окруженных div c классом начинающимся на iam_img, задать круглые углы:

div[class^="iam_img"] img {
    border-radius: 10px;
}

Другие варианты добавления CSS смотрите по ссылке: DokuWiki CSS Stylesheets

Подробно: Загрузка JavaScript

  • Для внешней ссылки удалить атрибут rel="nofollow", чтобы разрешить поисковым системам следовать по ней (передача веса). Создадим файл conf/userscript.js Он автоматически загрузится
function doFollow1(){
 jQuery("a[href^='https://example.com']").removeAttr("rel");
}
 
jQuery(function () {
    jQuery(document).click(doFollow1);
});

1 вариант:

  1. Подготавливаем картинку 16х16 пикселей.
  2. Заливаем её lib/tpl/dokuwiki/images/tambourine_16x16.png
  3. В файле lib/tpl/dokuwiki/css/basic.less исправить определение
    ul { list-style: square outside; }

    на

    ul { list-style-image: url('images/tambourine_16x16.png'); } /* your image */

В оглавлении страницы заменить файл /lib/tpl/dokuwiki/images/toc-bullet.png

2 вариант: В файле lib/tpl/dokuwiki/css/_links.css добавляем css код list-style: lower-greek;:

.dokuwiki .page ul li, .dokuwiki .aside ul li {
        /*list-style: hangul-consonant;*/
        list-style: lower-greek;
}

В DokuWiki нельзя настраивать 404 страницы, для этого нужно использовать плагины.

Плагины DokuWiki для настройки 404 страницы:

  1. Redirect Plugin Andreas Gohr Перенаправляет запросы к страницам на другие страницы или внешние сайты с помощью центрального файла конфигурации.
  2. notfound Plugin Andreas Gohr - отображать настраиваемую страницу, когда страница не существует
  3. Page Redirect Plugin Elan Ruusamäe, David Lorentsen 301 редирект страницы вики на другую страницу вики

Каким образом мне в текстовый файл (т.е. страницу wiki) подгрузить или сделать include из php файла?

Ответ: datatables и SQL query plugin

После установки, плагин SQL Query Plugin настраивается через Configuration Manager.

PQ VPS сервера в 28+ странах.