Имеется: Сервер Linux (Fedora, CentOS, RedHat, Debian, Ubuntu)
Необходимо поднять сервер Wiki.JS (не в докер)
Для docker можно воспользоваться официальной документацией на сайте
RHEL:
dnf install postgresql-15 postgresql-15-contrib -y
DEBIAN:
apt install postgresql postgresql-contrib -y
Создаем БД и делегируем полномочия:
sudo su - postgres
psql
postgres=# CREATE ROLE wikijs WITH LOGIN;
postgres=# \password wikijs
postgres=# CREATE DATABASE wikidb;
postgres=# GRANT ALL PRIVILEGES ON DATABASE wikidb TO wikijs;
postgres=# \q
exit
NVM актуальная версия GitHub
Важно: Установка производится под выделенной УЗ, из под которой будет запускаться служба node.js
Создаем пользователя
useradd -m wikijs
sudo su wikijs
cd ~
Скачиваем скрипт
wget https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh
См. актуальную версию по ссылке
Запускаем скрипт и перегружаем переменные окружения
/bin/bash install.sh
source ~/.bash_profile
(или ~/.zshrc, ~/.profile, ~/.bashrc в зависимости от версии ОС)
Ищем последнюю LTS-версию Node.JS
nvm list-remote
Устанавливаем последнюю версию Node.JS
nvm install v20.11.1
Проверяем установленную версию
nvm list
which node
Копируем полный путь к node, он пригодится при создании службы Node.JS в интересах Wiki.JS
Выходим из пользователя wikijs и под root создаем службу
/usr/lib/systemd/system/wikijs.service:
[Unit]
Description=Wiki.js
After=network.target
[Service]
Type=simple
ExecStart=/home/wikijs/.nvm/versions/node/v20.11.1/bin/node server
Restart=always
User=wikijs
Environment=NODE_ENV=production
WorkingDirectory=/var/www/wikijs
[Install]
WantedBy=multi-user.target
Запрещаем пользователю интерактивный вход
usermod -s /usr/sbin/nologin wikijs
Создаем каталог для Wiki.JS
mkdir /var/www/wikijs
cd /var/www/wikijs
Скачиваем последнюю версию Wiki.JS
wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
Распаковываем
tar xzf wiki-js.tar.gz -C ./
Конфигурация
mv config.sample.yml config.yml
Вписываем параметры нашего Postgresql:
db:
type: postgres
host: localhost
port: 5432
user: wikijs
pass: wikijsrocks
db: wikidb
Также лучше пересадить на localhost:
bindIP: 127.0.0.1
Порт оставляем 3000 и закрываем к нему доступ в FW
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 3000 -j DROP
iptables -A INPUT -p tcp --dport 5432 -j DROP
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW -j ACCEPT
ip6tables -A INPUT -p tcp --dport 3000 -j DROP
ip6tables -A INPUT -p tcp --dport 5432 -j DROP
ip6tables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW -j ACCEPT
Подробнее про настройку iptables/nftables можно почитать здесь
Установка необходимых пакетов
dnf install nginx certbot certbot-nginx -y
или для Ubuntu
apt install nginx certbot python2-certbot-nginx -y
Конфигурация nginx
/etc/nginx/conf.d/wikijs.conf (или /etc/nginx/sites-enabled/wikijs.conf для Ubuntu)
server {
listen 80 default_server;
server_name <our-dns-host>;
root /var/www/wikijs;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}
}
Проверяем конфигурацию nginx
nginx -t
Запускаем nginx
systemctl start nginx
Далее генерируем сертификат Let’s Encrypt. Скрипт автоматически обнаружит host в конфиге nginx и запросит на него сертификат.
Важно: Должна быть запись A в DNS и соответствовать IP-адресу сервера
Важно: сервер должен быть доступен по http
certbot
После отрабатывания скрипта certbot - конфигурация /etc/nginx/conf.g/wikijs.conf автоматически изменится для использования https и пересылки с http на https
Запускаем службы:
nginx -s reload
systemctl daemon-reload
systemctl enable --now nginx wikijs
systemctl status nginx wikijs