MAATRIX / Блог / Wiki.js на Ubuntu 24.04: пошаговая установка

Wiki.js на Ubuntu 24.04: пошаговая установка

MAATRIX

Если команда выросла из гугл-докладов и общих папок, но Confluence кажется избыточным и дорогим, а обычная вики на MediaWiki выглядит как музейный экспонат — Wiki.js закрывает эту нишу. Современный интерфейс, markdown из коробки, полноценное версионирование через Git и десяток способов авторизации — от локальных аккаунтов до LDAP и OAuth. Ниже — рабочая установка на чистый VPS с Ubuntu 24.04, PostgreSQL в качестве хранилища и Nginx в роли reverse proxy.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Wiki.js и зачем он вам

Wiki.js — это open-source вики-платформа на Node.js, которая с версии 2.x переписана практически с нуля. От старых движков вроде MediaWiki или DokuWiki её отличает несколько вещей:

  • Редактор markdown с live-превью, плюс визуальный редактор и AsciiDoc — на выбор.
  • Версионирование содержимого можно синхронизировать с внешним Git-репозиторием: каждая правка страницы коммитится, историю можно смотреть в GitLab/GitHub, откатывать через git revert.
  • Гибкая авторизация: локальные пользователи, LDAP/AD, Google, GitHub, GitLab, Keycloak, Auth0 и ещё десяток провайдеров одновременно.
  • Поиск из коробки на встроенном движке, с возможностью подключить Elasticsearch или Algolia для больших баз знаний.
  • Права доступа на уровне групп и страниц — можно закрыть разделы для конкретных отделов.

Для внутренней документации компании, базы знаний поддержки или личной вики разработчика это одно из самых практичных решений — не тяжелее, чем Nextcloud, но заточено именно под текст и структуру знаний.

Системные требования скромные: 1 vCPU и 1 ГБ RAM достаточно для команды до 20-30 человек, для более активной нагрузки лучше взять 2 vCPU / 2 ГБ. Диск — от 10 ГБ, если не планируете хранить в вики гигабайты вложений.

Подготовка сервера

Начинаем с чистого сервера на Ubuntu 24.04. Обновляем систему и ставим базовые пакеты:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https

Если вы ещё не настроили SSH-доступ по ключу и базовый firewall — сделайте это до установки любых сервисов, это входит в минимальную гигиену для продакшен-сервера. Есть отдельные разборы про настройку SSH-ключей вместо пароля и firewall на UFW — там же список портов, которые нужно открыть.

Для Wiki.js понадобится минимум 22 (SSH), 80 и 443 (HTTP/HTTPS через Nginx). Сам Wiki.js слушает порт 3000 только на localhost — наружу его открывать не нужно.

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Node.js

Wiki.js требует Node.js версии LTS (на конец августа 2026 актуальна ветка 20.x или новее — проверьте на сайте nodejs.org, какая LTS-версия поддерживается на момент установки). Используем официальный репозиторий NodeSource:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node -v
npm -v

Проверьте, что node установился именно из репозитория NodeSource, а не устаревшей версии из стандартных репозиториев Ubuntu — она обычно заметно старее и Wiki.js с ней может не запуститься.

Установка и настройка PostgreSQL

Wiki.js поддерживает PostgreSQL, MySQL/MariaDB, SQLite и MS SQL, но в документации проекта и в сообществе PostgreSQL рекомендуют как основной вариант для продакшена — он лучше держит полнотекстовый поиск и историю правок при росте базы. Если у вас уже есть развёрнутый PostgreSQL по отдельной инструкции — используйте его, ниже минимальный вариант с нуля.

sudo apt install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql

Создаём базу и пользователя под Wiki.js:

sudo -u postgres psql -c "CREATE USER wikijs WITH PASSWORD 'смените_на_свой_пароль';"
sudo -u postgres psql -c "CREATE DATABASE wikijsdb OWNER wikijs;"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE wikijsdb TO wikijs;"

Пароль сгенерируйте сложный — например, openssl rand -base64 24 — и сохраните его, он понадобится при первичной настройке Wiki.js через веб-интерфейс.

По умолчанию PostgreSQL слушает только localhost, что нам и нужно — Wiki.js будет ходить в базу локально, наружу порт 5432 открывать не требуется.

Установка Wiki.js

Wiki.js распространяется тарболом с готовой сборкой — компилировать из исходников не нужно. Скачиваем актуальный релиз с GitHub (проверьте номер версии на странице релизов проекта, ниже пример с плейсхолдером):

sudo mkdir -p /opt/wikijs
cd /opt/wikijs
sudo wget https://github.com/requarks/wiki/releases/latest/download/wiki-js.tar.gz
sudo tar xzf wiki-js.tar.gz
sudo rm wiki-js.tar.gz

Создаём отдельного системного пользователя, от которого будет работать процесс — запускать веб-сервис от root не стоит:

sudo useradd -r -s /bin/false -d /opt/wikijs wikijs
sudo chown -R wikijs:wikijs /opt/wikijs

Конфигурация Wiki.js хранится в config.yml, который генерируется при первом запуске. Открываем нужный порт для проверки (временно, до настройки Nginx) и стартуем сервис вручную, чтобы убедиться, что всё поднимается:

cd /opt/wikijs
sudo -u wikijs node server

При первом запуске Wiki.js создаст config.yml и config.sample.yml в рабочей директории и начнёт слушать порт 3000. В логе должна появиться строка вида Server running at http://0.0.0.0:3000. Останавливаем (Ctrl+C) — дальше настроим постоянный запуск через systemd.

Настройка systemd-сервиса

Чтобы Wiki.js поднимался автоматически после перезагрузки и рестартовал при падении, создаём unit-файл:

sudo nano /etc/systemd/system/wikijs.service

Содержимое:

[Unit]
Description=Wiki.js
After=network.target postgresql.service

[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=on-failure
RestartSec=10
User=wikijs
Group=wikijs
Environment=NODE_ENV=production
WorkingDirectory=/opt/wikijs

[Install]
WantedBy=multi-user.target

Применяем и запускаем:

sudo systemctl daemon-reload
sudo systemctl enable --now wikijs
sudo systemctl status wikijs

Если статус active (running) — Wiki.js работает и слушает 127.0.0.1:3000config.yml по умолчанию bind-адрес 0.0.0.0, для порядка можно сузить до localhost, раз наружу всё равно ходим через Nginx).

Nginx как reverse proxy и HTTPS

Открывать Node.js-сервис напрямую в интернет — плохая идея: нет нормальной обработки статики, сложнее подключить SSL и логи. Ставим Nginx перед Wiki.js. Если Nginx уже настроен под другие проекты на сервере — просто добавьте новый server-блок, общая логика reverse proxy разобрана в отдельной статье про Nginx как reverse proxy.

sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/wiki.example.com

Конфиг:

server {
    listen 80;
    server_name wiki.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 90s;
    }
}

Активируем и проверяем синтаксис:

sudo ln -s /etc/nginx/sites-available/wiki.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Прежде чем выпускать сертификат, убедитесь, что A-запись домена wiki.example.com уже указывает на IP вашего сервера — иначе Let's Encrypt не сможет пройти валидацию. Дальше — выпуск бесплатного SSL-сертификата через Let's Encrypt через certbot:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d wiki.example.com

Certbot сам пропишет редирект с HTTP на HTTPS и настроит автообновление сертификата через systemd-таймер — вручную ничего продлевать не нужно.

Первичная настройка через веб-интерфейс

Открываем https://wiki.example.com в браузере — Wiki.js покажет мастер первичной настройки:

  1. Site title и site URL — название вики и полный адрес с https.
  2. Database — здесь пригодится строка подключения к PostgreSQL, которую мы создали выше: хост localhost, порт 5432, имя базы wikijsdb, пользователь wikijs, пароль из шага установки БД.
  3. Administrator account — email и пароль первого администратора. Используйте сложный пароль, это единственная учётная запись с полным доступом на старте.

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

Git-синхронизация страниц и авторизация

Одна из сильных сторон Wiki.js — возможность хранить полную историю правок не только во внутренней БД, но и зеркалировать её в Git-репозиторий. Это включается в разделе Administration → Storage → Git:

  • Укажите URL репозитория (GitHub, GitLab или self-hosted Git-сервер).
  • Настройте SSH-ключ или токен доступа для деплоя.
  • Выберите ветку и режим синхронизации (push при каждом сохранении страницы или по расписанию).

Это удобно, если вы хотите ревьюить изменения документации через pull request или держать резервную копию контента вне сервера. Если планируете организовать полноценный CI/CD вокруг документации — пригодится материал про автодеплой из Git на сервере, логика с webhook там пересекается.

Отдельно стоит настроить авторизацию (Administration → Login). Для команды разумно сразу подключить не только локальных пользователей, но и, например, GitHub или Google OAuth — это снимает необходимость заводить отдельные пароли для вики. LDAP/Active Directory пригодится, если в компании уже есть корпоративный каталог пользователей — Wiki.js подключается к нему по стандартному протоколу без дополнительных плагинов.

Регулярно делайте резервные копии — как минимум дамп PostgreSQL (pg_dump wikijsdb) и содержимое каталога с загруженными файлами /opt/wikijs/data. Git-синхронизация закрывает только текст страниц, но не вложения и не настройки самого Wiki.js.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли поставить Wiki.js через Docker вместо ручной установки?

Да, официальный образ есть в Docker Hub, и это часто даже проще — не нужно вручную ставить Node.js и следить за systemd-юнитом. Ручная установка из этой статьи даёт больше контроля над версиями и меньше накладных расходов на сервере с 1 ГБ RAM, но если у вас уже есть Docker-инфраструктура — контейнерный вариант логичнее.

Какая база данных лучше — PostgreSQL или MySQL?

Обе поддерживаются официально, но PostgreSQL — основной вариант в документации проекта и увереннее ведёт себя при активном полнотекстовом поиске и большой истории правок. Для небольшой вики разница не критична, для команды от полусотни активных пользователей PostgreSQL предпочтительнее.

Wiki.js упал после обновления — что делать?

Перед обновлением всегда делайте бэкап config.yml и дамп базы. Обновление обычно сводится к скачиванию нового тарбола поверх старого каталога (с сохранением config.yml) и перезапуску сервиса systemctl restart wikijs. Если после этого сервис не поднимается — смотрите journalctl -u wikijs -n 100 на предмет ошибок миграции БД.

Нужен ли отдельный сервер под Wiki.js или можно на общем VPS с другими проектами?

Можно на общем — Wiki.js достаточно лёгкий сервис. Главное — не заводить конфликт по портам (3000 занят) и не забыть про отдельного системного пользователя, чтобы процесс не работал от root вместе с остальными сервисами.

Как ограничить доступ к части страниц для конкретной группы?

В разделе Administration → Groups создаёте группу, назначаете права по конкретным путям страниц (rules), а затем добавляете туда пользователей. Права можно комбинировать — например, разрешить чтение всем, а редактирование только выбранной группе.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →