Установка wiki.js на debian 12

Wiki.js — это современное и мощное вики-приложение с открытым исходным кодом, основанное на Node.js, Git и Markdown. Wiki.js работает на быстром движке Node.js и оптимизирован для экономии ресурсов. Некоторые функции Wiki.js:

  • Редактирование Markdown с поддержкой Git
  • Легкий, но чрезвычайно мощный
  • Красивый дизайн для современного Интернета
  • Интегрированный контроль доступа
  • Интуитивное управление активами
  • Встроенная поисковая система

Устанавливаем nodejs и npm

$ sudo apt install nodejs npm

проверить версию можно командами

$ node -v
$ npm -v

Установим базу данных PostgreSQL

$ sudo apt install postgresql
В логе установки будет примерно такое сообщение
update-alternatives: используется /usr/share/postgresql/15/man/man1/postmaster.1.gz для предоставления /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) в автоматическом режиме
вместо 15 может быть другое число.

После установки базы данных запускаем сервер командой

$ sudo systemctl start postgresql@15-main
и проверяем вывод
$ sudo systemctl status postgresql@15-main
должно быть что-то похожее на
● postgresql@15-main.service - PostgreSQL Cluster 15-main
    Loaded: loaded (/lib/systemd/system/postgresql@.service; enabled-runtime; preset: enabled)
    Active: active (running) since Tue 2024-03-26 15:51:26 +03; 17h ago
  Main PID: 11176 (postgres)
     Tasks: 8 (limit: 4645)
    Memory: 62.0M
       CPU: 23.754s
    CGroup: /system.slice/system-postgresql.slice/postgresql@15-main.service
            ├─11176 /usr/lib/postgresql/15/bin/postgres -D /var/lib/postgresql/15/main -c config_file=/etc/postgresql/15/main/postgresql.conf
            ├─11177 "postgres: 15/main: checkpointer "
            ├─11178 "postgres: 15/main: background writer "
            ├─11180 "postgres: 15/main: walwriter "
            ├─11181 "postgres: 15/main: autovacuum launcher "
            ├─11182 "postgres: 15/main: logical replication launcher "
            ├─15608 "postgres: 15/main: dbwiki wiki 127.0.0.1(35912) idle"
            └─15610 "postgres: 15/main: dbwiki wiki 127.0.0.1(35928) idle"

мар 26 15:51:23 n61740l systemd[1]: Starting postgresql@15-main.service - PostgreSQL Cluster 15-main...
мар 26 15:51:26 n61740l systemd[1]: Started postgresql@15-main.service - PostgreSQL Cluster 15-main.
Можно подключиться к базе данных с учетной записью postgres, созданной во время установки
$ sudo -u postgres psql
Флаг -u postgres указывает, с каким пользователем запускать psql .

Выйти из postgreSQL можно следующей командой

postgres=# \q

Настроим PostgreSQL

Создаем нового пользователя базы данных

$ sudo -u postgres createuser --interactive
Enter name of role to add: wiki
Пользователь wiki — пример, можно вводить любое другое имя
Shall the new role be a superuser? (y/n)
жмем Y и затем ENTER.

Создаем базу данных postgres

Теперь вам нужно создать две базы данных. По умолчанию для пользователя wiki и еще одну для Wiki.js.

Запустим следующие команды

$ sudo -u postgres createdb dbwiki
$ sudo -u postgres createdb wiki
Создадим отдельного пользователя в системе, чтобы не запускать сервис от рута (для безопасности)
$ sudo groupadd --system wiki
$ sudo useradd -s /sbin/nologin --system -g wiki wiki
Этот пользователь создается без домашней папки и права входа в консоль.

Теперь подключимся к базе данных

$ sudo -u postgres psql
Изменим пароль пользователя базы данных
postgres=# \password dbwiki
Enter new password: dbpwd
Enter it again: dbpwd

Теперь будем ставить Wiki.js

Создадим отдельную папку для проекта

$ sudo mkdir /opt/wiki
Назначим владельцем этой папки, ранее созданного пользователя wiki
$ sudo chown wiki:wiki /opt/wiki
Переходим в папку wiki
$ cd /opt/wiki
Запустим оболочку командной строки от пользователя wiki
$ sudo -u wiki /bin/bash
Скачаем архив с wiki.js
$ wget https://github.com/requarks/wiki/releases/download/v2.5.301/wiki-js.tar.gz
Распакуем архив в папку /opt/wiki
$ tar xzf wiki-js.tar.gz -C /opt/wiki
Переименуем пример конфигурационного файла
$ mv config.sample.yml config.yml
Отредактируем конфиг
$ nano config.yml
Найдем следующий блок и изменим имя пользователя и пароль
...
# PostgreSQL / MySQL / MariaDB / MS SQL Server only:
host: localhost
port: 5432
user: dbwiki
pass: wiki
db: wiki
ssl: false
...
Сохраним файл, нажав CTRL+X, и затем Y.

Замечания по конфигу:

  • Сразу бросаются в глаза нестандартные порты. Они тут неспроста. Если поменять 3000 на 80, из-за этого будет косяк, т.к. порты до 1024 может использовать только пользователь root. Если нужно чтобы работало сразу, оставляем 3000;
  • SSL должен быть выключен.

Для запуска Wiki.js можно использовать менеджер процессов, PM2. Это позволит запустить приложение в фоновом режиме системы. Выйдем из оболочки командной строки пользователя wiki и  установим PM2

$ exit
$ sudo npm install pm2 -g
Снова запустим оболочку командной строки от пользователя wiki
$ sudo -u wiki /bin/bash
Теперь в каталоге приложения (/opt/wiki) можно запустить приложение следующей командой:
$ pm2 start server --name wiki
НО, после установки, первый запуск приложения советую сделать классическим способом, чтобы инициализировать ваше приложение и посмотреть, есть ли какие ошибки
$ node server
Остановить свое приложение можно нажав CTRL+C.

После того, как убедились что все хорошо, запустим приложение с PM2

$ pm2 start server --name wiki
можно остановить приложение с именем файла
$ pm2 stop wiki
Чтобы запустить приложение, можно использовать более короткую команду
$ pm2 start wiki
И чтобы перезапустить приложение, запустим команду
$ pm2 restart wiki

Сервис

Сейчас Вики запущена как приложение, если нажать в сессии SSH Ctrl-Z, приложение закроется.

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

$ sudo nano /etc/systemd/system/wiki.service
Далее помещаем туда текст и сохраняем
[Unit]
Description=Wiki.js
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always
User=wiki
Environment=NODE_ENV=production
WorkingDirectory=/opt/wiki

[Install]
WantedBy=multi-user.target
Дадим команду демону сервисов, чтобы пересканировал все конфиги
$ sudo systemctl daemon-reload
Включим в автозагрузку нам новый сервис
$ sudo systemctl enable wiki
и запускаем его
$ sudo systemctl start wiki
Узнать состояние сервиса можно командой
$ sudo systemctl status wiki
Должно быть что-то похожее
● wiki.service - Wiki.js
    Loaded: loaded (/etc/systemd/system/wiki.service; enabled; preset: enabled)
    Active: active (running) since Wed 2024-03-27 09:22:24 +03; 2h 2min ago
  Main PID: 15547 (node)
     Tasks: 11 (limit: 4645)
    Memory: 151.2M
       CPU: 36.199s
    CGroup: /system.slice/wiki.service
            └─15547 /usr/bin/node server

Установка Nginx и настройка Reverse Proxy

Ваше приложение работает и слушает 3000 порт на localhost. Когда запрос выполняется из браузера, используя доменное имя или ip адрес, он обращается к порту 80 вашей машины (порт веб-сервера Nginx). Но приложение Wiki.js работает на порту 3000 по умолчанию. У Nginx есть роль прокси. Он перенаправляет запросы в сервис (Node.js application), назначенный настроенному доменному имени. Вам нужно настроить Nginx, чтобы сообщить, что доменное имя wiki.example.com соответствует приложению Wiki.js, localhost:3000.

Чтобы установить Nginx на свой сервер, выполним следующую команду

$ sudo apt install nginx
Для автоматического запуска Nginx при запуске сервера выполним следующую команду
$ sudo systemctl enable nginx
Создадим конфигурацию Nginx для вашего доменного имени
$ sudo nano /etc/nginx/sites-available/wiki.example.com.conf
Напишем это в файле
server {
  listen 80 default_server;

  server_name wiki.example.com;

  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}
listen указывают на порт прослушивания Nginx, стандартный порт 80 (http).

server_name содержит все доменные имена, которые прикреплены к настроенному приложению.

Блок «location» указывает на две вещи. Первый, на «/», путь URL, который дает доступ к вашему приложению. В этом примере это «http://wiki.example.com/», корень вашего доменного имени, который дает доступ к приложению, указанному в конфигурационном файле.

Далее внутри блока «location» находится поле «proxy_pass». Поле proxy_pass является локальной ссылкой приложения http://localhost:[PORT]. Помните, что приложение работает на порту 3000, поэтому ссылка «http://localhost:3000».

Сохраняем файл нажатием CTRL+X, затем Y, потом проверяем синтаксические ошибки следующей командой

$ sudo nginx -t
Создаем символьную ссылку для активации сайта с wiki.js
$ sudo ln -s /etc/nginx/sites-available/wiki.example.com.conf /etc/nginx/sites-enabled
Перезапускаем Nginx.
$ sudo systemctl restart nginx
После всех манипуляций переходим в браузер для дальнейшей настройки. Вводим адрес wiki.example.com или ip адрес.

Тут страничка первоначальной настройки:

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

После того как введем данные (телеметрию надо отключить) и жмем INSTALL, произойдет первичное заполнение базы.

Установка завершена, теперь главное чтобы все работало после перезагрузки сервера. Достаем бубен, начинаем молиться и отправляем сервер в перезагрузку с надеждой, что все будет хорошо 🙂