Перейти до змісту

Сервер DokuWiki

Передумови та припущення

  • Екземпляр Rocky Linux, встановлений на сервері, контейнері або віртуальній машині.
  • Зручно змінювати конфігураційні файли з командного рядка за допомогою редактора (наші приклади тут використовуватимуть vi, але ви можете замінити свій улюблений редактор).
  • Деякі знання про веб-програми та налаштування.
  • У нашому прикладі буде використано Apache Sites Enabled для налаштування, тому радимо переглянути цю процедуру, якщо ви плануєте продовжувати.
  • У цьому прикладі ми будемо використовувати «example.com» як доменне ім’я.
  • У цьому документі ми припускатимемо, що ви є користувачем root або можете отримати доступ за допомогою sudo.
  • Ми припускаємо нове встановлення ОС, однак це НЕ є вимогою.

Вступ

Документація в організації може приймати різні форми. Наявність репозиторію, на який можна посилатися на цю документацію, є неоціненною. Вікі (що на гавайській мові означає швидкий) — це спосіб централізованого зберігання документації, нотаток процесів, корпоративних баз знань і навіть прикладів коду. ІТ-фахівці, які підтримують wiki, навіть таємно, мають вбудований поліс страхування від забуття незрозумілої процедури.

DokuWiki — це зріла, швидка вікі, яка працює без бази даних, має вбудовані функції безпеки та відносно проста в розгортанні. Щоб дізнатися більше про можливості DokuWiki, перегляньте їх веб-сторінку.

DokuWiki — це лише одна з багатьох доступних вікі, хоча вона досить хороша. Одним із великих плюсів є те, що DokuWiki відносно легка і може працювати на сервері, на якому вже запущено інші служби, за умови, що у вас є простір і пам’ять.

Встановлення залежностей

Мінімальна версія PHP для DokuWiki тепер становить 7.2, і це саме те, що поставляється з Rocky Linux 8. Rocky Linux 9.0 поставляється з PHP версії 8.0, яка також повністю підтримується. Тут ми вказуємо пакети, які вже можуть бути встановлені:

dnf install tar wget httpd php php-gd php-xml php-json php-mbstring

Ви побачите список додаткових залежностей, які буде встановлено, і таке повідомлення:

Is this ok [y/N]:

Далі відповідайте "y" і натисніть "Enter", щоб установити.

Створення каталогів і зміна конфігурації

Конфігурація Apache

Якщо ви прочитали процедуру Apache Sites Enabled, ви знаєте, що нам потрібно створити кілька каталогів. Ми почнемо з додавання каталогу конфігурації httpd:

mkdir -p /etc/httpd/{sites-available,sites-enabled}

Нам потрібно відредагувати файл httpd.conf:

vi /etc/httpd/conf/httpd.conf

І додайте це в самий низ файлу:

Include /etc/httpd/sites-enabled

Створіть файл конфігурації сайту в sites-available:

vi /etc/httpd/sites-available/com.example

Файл конфігурації має виглядати приблизно так:

<VirtualHost *>
  ServerName    example.com
  DocumentRoot  /var/www/sub-domains/com.example/html

  <Directory ~ "/var/www/sub-domains/com.example/html/(bin/|conf/|data/|inc/)">
      <IfModule mod_authz_core.c>
                AllowOverride All
          Require all denied
      </IfModule>
      <IfModule !mod_authz_core.c>
          Order allow,deny
          Deny from all
      </IfModule>
  </Directory>

  ErrorLog   /var/log/httpd/example.com_error.log
  CustomLog  /var/log/httpd/example.com_access.log combined
</VirtualHost>

Зауважте, що наведений вище пункт «AllowOverride All» дозволяє працювати файлу .htaccess (захист для певного каталогу).

Зв’яжіть файл конфігурації з підтримкою сайтів, але поки що не запускайте веб-служби:

ln -s /etc/httpd/sites-available/com.example /etc/httpd/sites-enabled/

Apache DocumentRoot

Нам також потрібно створити наш DocumentRoot. Для цього:

mkdir -p /var/www/sub-domains/com.example/html

Встановлення DokuWiki

На вашому сервері перейдіть до кореневого каталогу.

cd /root

Тепер, коли наше середовище готове до роботи, давайте отримаємо останню стабільну версію DokuWiki. Ви можете знайти це, перейшовши на сторінку завантаження, і ліворуч на сторінці в розділі "Версія" ви побачите "Стабільна (Рекомендовано) (пряме посилання)."

Клацніть правою кнопкою миші на частині "(пряме посилання)" та скопіюйте адресу посилання. У консолі вашого сервера DokuWiki введіть «wget» і пробіл, а потім вставте скопійоване посилання в терміналі. Ви повинні отримати щось на зразок цього:

wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz

Перш ніж розпакувати архів, подивіться на вміст за допомогою tar ztf, щоб побачити вміст архіву:

tar ztvf dokuwiki-stable.tgz

Помітили названий датований каталог попереду всіх інших файлів, який виглядає приблизно так?

... (more above)
dokuwiki-2020-07-29/inc/lang/fr/resetpwd.txt
dokuwiki-2020-07-29/inc/lang/fr/draft.txt
dokuwiki-2020-07-29/inc/lang/fr/recent.txt
... (more below)

Нам не потрібний цей провідний іменований каталог, коли ми розпаковуємо архів, тому ми збираємося використати деякі параметри з tar, щоб виключити його. Першим варіантом є "--strip-components=1", який видаляє цей провідний каталог.

Друга опція — це опція «-C», яка вказує tar, куди ми хочемо розпакувати архів. Отже, розпакуйте архів за допомогою цієї команди:

tar xzf dokuwiki-stable.tgz --strip-components=1 -C /var/www/sub-domains/com.example/html/

Після того, як ми виконаємо цю команду, весь DokuWiki має бути в нашому DocumentRoot.

Нам потрібно зробити копію файлу .htaccess.dist, який надійшов із DokuWiki, і залишити там старий файл на випадок, якщо нам знадобиться повернутися до оригіналу в майбутнє.

У процесі ми змінимо назву цього файлу просто на .htaccess, що й буде шукати apache. Для цього:

cp /var/www/sub-domains/com.example/html/.htaccess{.dist,}

Тепер нам потрібно змінити право власності на новий каталог і його файли на користувача та групу apache:

chown -Rf apache.apache /var/www/sub-domains/com.example/html

Налаштування DNS або /etc/hosts

Перш ніж ви зможете отримати доступ до інтерфейсу DokuWiki, вам потрібно встановити роздільну здатність імен для цього сайту. Для тестування ви можете використати свій файл /etc/hosts.

У цьому прикладі припустімо, що DokuWiki працюватиме на приватній IPv4-адресі 10.56.233.179. Припустімо також, що ви змінюєте файл /etc/hosts на робочій станції Linux. Для цього запустіть:

sudo vi /etc/hosts

Потім змініть файл hosts, щоб він виглядав приблизно так (зверніть увагу на IP-адресу вище в наведеному нижче прикладі):

127.0.0.1 localhost
127.0.1.1 myworkstation-home
10.56.233.179 example.com     example

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Коли ви завершите тестування та будете готові запустити роботу для всіх, вам потрібно буде додати цей хост до DNS-сервера. Це можна зробити за допомогою приватного DNS-сервера або відкритого DNS-сервера.

Запуск httpd

Перш ніж розпочати httpd, давайте перевіримо, чи наша конфігурація правильна:

httpd -t

Ви повинні отримати:

Syntax OK

Якщо так, ви повинні бути готові запустити httpd, а потім завершити налаштування. Почнемо з увімкнення httpd для запуску під час завантаження:

systemctl enable httpd

А потім почніть наступне:

systemctl start httpd

Тестування DokuWiki

Тепер, коли наше ім’я хоста налаштовано для тестування та веб-службу запущено, наступним кроком буде відкрити веб-браузер і ввести це в адресному рядку:

http://example.com/install.php

Або

http://example.com/install.php

Будь-який має працювати, якщо ви налаштуєте файл hosts, як зазначено вище. Це приведе вас до екрана налаштування, щоб ви могли завершити налаштування:

  • У полі «Wiki Name» введіть назву нашої вікі. Приклад «Технічна документація»
  • У полі «Superuser» введіть ім’я адміністратора. Наприклад, "admin"
  • У полі «Real name» введіть справжнє ім’я адміністратора.
  • У полі «E-Mail» введіть адресу електронної пошти адміністратора.
  • У полі «Password» введіть безпечний пароль користувача-адміністратора.
  • У полі «once again» введіть той самий пароль ще раз.
  • З випадаючого меню «Initial ACL Policy» виберіть варіант, який найкраще підходить для вашого середовища.
  • Виберіть відповідний прапорець для ліцензії, під якою ви хочете розмістити свій вміст.
  • Залиште позначеним (або зніміть, якщо бажаєте) прапорець «Раз на місяць надсилати анонімні дані про використання розробникам DokuWiki»
  • Натисніть кнопку «Зберегти»

Тепер ваша вікі готова для додавання вмісту.

Захист DokuWiki

Окрім політики ACL, яку ви щойно створили, розгляньте:

Ваш брандмауер

Примітка

Жоден із цих прикладів брандмауера не робить жодних припущень щодо того, які ще служби вам може знадобитися дозволити на вашому сервері Dokuwiki. Ці правила базуються на нашому середовищі тестування й стосуються ТІЛЬКИ дозволу доступу до IP-блоку ЛОКАЛЬНОЇ мережі. Вам знадобиться більше послуг, дозволених для робочого сервера.

Перш ніж сказати що все готово, потрібно подумати про безпеку. По-перше, ви повинні запустити брандмауер на сервері. Ми припустимо, що ви використовуєте один із наведених нижче брандмауерів.

Замість того, щоб усі мали доступ до вікі, ми припустимо, що будь-хто в мережі 10.0.0.0/8 знаходиться у вашій приватній локальній мережі, і це єдині люди, яким потрібен доступ до сайту.

Брандмауер iptables (не підтримується)

Важливо

Процес брандмауера iptables у Rocky Linux 9.0 застарів (все ще доступний, але, ймовірно, зникне в наступних випусках, можливо, вже в Rocky Linux 9.1). З цієї причини ми рекомендуємо перейти до процедури firewalld, наведеної нижче, якщо ви робите це на версії 9.0 або новішій.

Зверніть увагу, що вам можуть знадобитися інші правила для інших служб на цьому сервері, і що цей приклад враховує лише веб-служби.

Спочатку змініть або створіть файл /etc/firewall.conf:

vi /etc/firewall.conf

#IPTABLES=/usr/sbin/iptables

#  Unless specified, the default for OUTPUT is ACCEPT
#  The default for FORWARD and INPUT is DROP
#
echo "   clearing any existing rules and setting default policy.."
iptables -F INPUT
iptables -P INPUT DROP
# web ports
iptables -A INPUT -p tcp -m tcp -s 10.0.0.0/8 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s 10.0.0.0/8 --dport 443 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable

/usr/sbin/service iptables save

Після створення сценарію переконайтеся, що він виконуваний:

chmod +x /etc/firewall.conf

Потім виконайте сценарій:

/etc/firewall.conf

Це виконає правила та збереже їх, щоб вони були перезавантажені під час наступного запуску iptables або під час завантаження.

Брандмауер firewalld

Якщо ви використовуєте firewalld як свій брандмауер (а до цього часу ви, ймовірно, маєте), ви можете застосувати ті самі концепції за допомогою синтаксис firewall-cmd брандмауера.

Ми будемо дублювати правила iptables (вище) правилами firewalld:

firewall-cmd --zone=trusted --add-source=10.0.0.0/8 --permanent
firewall-cmd --zone=trusted --add-service=http --add-service=https --permanent
firewall-cmd --reload

Після додавання наведених вище правил і перезавантаження служби firewalld виведіть свою зону в список, щоб переконатися, що там є все, що вам потрібно:

firewall-cmd --zone=trusted --list-all

який повинен показати вам щось подібне, якщо все вищезазначене спрацювало правильно:

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: 
  sources: 10.0.0.0/8
  services: http https
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

SSL

Для найкращої безпеки вам слід розглянути можливість використання SSL, щоб весь веб-трафік був зашифрований. Ви можете придбати SSL у постачальника SSL або скористатися Let's Encrypt.

Висновок

Незалежно від того, чи потрібно вам задокументувати процеси, політику компанії, програмний код чи щось інше, вікі — чудовий спосіб це зробити. DokuWiki — це безпечний, гнучкий, простий у використанні, відносно простий у встановленні та розгортанні продукт, який є стабільним проектом, який існує вже багато років.

Author: Steven Spencer

Contributors: Ezequiel Bruni, Ganna Zhyrnova