Условия
инструкции предполагают root-доступ (sudo).
я рекомендую создать отдельного системного пользователя wikijs — чтобы сервис не работал от root.
Wiki.js — на Node.js, поэтому всё делаем через nvm(виртуальное окружение для js).
sudo useradd -m -d /var/wiki -s /bin/bash wikijs
sudo mkdir -p /var/wiki
sudo chown -R wikijs:wikijs /var/wiki
sudo yum install -y git curl gcc-c++ make
на CentOS8 можно использовать dnf, но yum тоже работает
Выполни команды под пользователем wikijs — либо переключись:
sudo -iu wikijs
Теперь в сессии
wikijs
:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install --lts
nvm alias default node
проверить
node -v
npm -v
Примечание: nvm — per-user менеджер. Мы устанавливаем nvm внутри wikijs user, чтобы Node «принадлежал» этому окружению.
sudo yum install -y postgresql-server postgresql-contrib
sudo postgresql-setup initdb # CentOS7/8
sudo systemctl enable --now postgresql
sudo -u postgres psql -c "CREATE DATABASE wikijs;"
sudo -u postgres psql -c \"CREATE USER wikiuser WITH ENCRYPTED PASSWORD 'StrongPasswordHere';\"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE wikijs TO wikiuser;"
Запомни wikiuser и пароль — они понадобятся в мастере установки Wiki.js.
Останься под wikijs пользователем в каталоге /var/wiki:
cd /var/wiki
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
vi config.yml
убедись, что nvm загружен: (в одной строке)
export NVM_DIR="$HOME/.nvm"; [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
node server
Wait until you are invited to open to the setup page in your browser.
Открой: http://<IP_сервера>:3000 — запустится мастер установки (выбор базы данных, создание администратора и т.д.). Введи параметры PostgreSQL.
Когда убедишься, что всё работает — нажми Ctrl+C и останови процесс, чтобы сделать systemd-юнит.
Systemd не загружает ~/.bashrc, поэтому делаем старт через bash -lc 'source ... && node server'.
Создать файл
vi /etc/systemd/system/wikijs.service
[Unit]
Description=Wiki.js
After=network.target
[Service]
Type=simple
User=wikijs
WorkingDirectory=/var/wiki
Environment=NODE_ENV=production
ExecStart=/bin/bash -lc 'export NVM_DIR="/home/wikijs/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && nvm use default > /dev/null 2>&1 && node server'
Restart=always
RestartSec=5
LimitNOFILE=10000
[Install]
WantedBy=multi-user.target
Применяем и запускаем:
sudo systemctl daemon-reload
sudo systemctl enable --now wikijs
sudo journalctl -u wikijs -f # смотреть логи в реальном времени
sudo yum install -y nginx
sudo systemctl enable --now nginx
server {
listen 80;
server_name wiki.example.com;
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;
}
}
Перезагрузить nginx:
sudo nginx -t && sudo systemctl reload nginx
sudo yum install -y certbot python3-certbot-nginx
sudo certbot --nginx -d wiki.example.com
Открыть HTTP/HTTPS (если используется firewalld):
sudo firewall-cmd --add-service=http --add-service=https --permanent
sudo firewall-cmd --reload
Если SELinux включён и nginx не может проксировать на 127.0.0.1:3000, разреши соединения:
sudo setsebool -P httpd_can_network_connect 1
/bin/bash -lc 'source /home/wikijs/.nvm/nvm.sh && nvm run --silent node -v'
sudo journalctl -u wikijs -f
sudo -iu wikijs
export NVM_DIR="$HOME/.nvm"; [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
nvm install 20
nvm alias default 20
Wiki.js requires one of the many supported database engines.
PostgreSQL is the recommended engine for best performance, features and future compatibility.
db:
type: postgres
host: localhost
port: 5432
user: wikijs
pass: wikijsrocks
db: wiki
Notes:
db:
type: mysql
host: localhost
port: 3306
user: wikijs
pass: wikijsrocks
db: wiki
Notes:
db:
type: mariadb
host: localhost
port: 3306
user: wikijs
pass: wikijsrocks
db: wiki
Notes:
db:
type: mssql
host: localhost
port: 1433
user: wikijs
pass: wikijsrocks
db: wiki
Notes:
SQLite is not recommended for production use. It is only provided for low-end systems and development purposes.
db:
type: sqlite
storage: db.sqlite
Ты хочешь, чтобы после создания бэкапа:
.sql (дамп базы)
.tar.gz (архив файлов)
они отправлялись по SSH на другой сервер (удалённый бэкап-сервер).
ssh user@backup-server
Если всё работает — отлично.
Если требует пароль, можно настроить доступ по SSH-ключу, чтобы всё шло без пароля:
ssh-keygen -t ed25519
При запросе
passphrase
просто жмите enter 2 раза, если не хотите дополнительно вводить пароль для ssh ключа
Отправляем ключ на удаленный сервер-бэкап
ssh-copy-id user@backup-server
Теперь SSH будет работать без ввода пароля.
Допустим, твой бэкап хранится в /backup/wiki/.
Отправить всё можно одной командой:
scp /backup/wiki/wiki_backup_2025-10-14.sql user@backup-server:/backups/wiki/
scp /backup/wiki/wiki_files_2025-10-14.tar.gz user@backup-server:/backups/wiki/
🔹 user@backup-server — это логин и хост удалённого сервера
🔹 /backups/wiki/ — папка, куда будут загружаться файлы (должна существовать на целевом сервере)
Сначала создадим файл, где будет хранится пароль для базы данных Postgres
Создай файл:
vi ~/.pgpass
Добавь строку (всё в одну строку):
localhost:5432:wikidb:wikijs:ТВОЙ_ПАРОЛЬ
где:
localhost — хост БД
5432 — порт PostgreSQL
wikidb — имя базы
wikijs — пользователь
ТВОЙ_ПАРОЛЬ — пароль
Защити файл:
chmod 600 ~/.pgpass
Теперь можно выполнять бэкап без пароля:
pg_dump -U wikijs -h localhost wikidb > /backup/wiki/wiki_backup_$(date +%F).sql
vi /usr/local/bin/wiki-backup.sh
Добавляем следующий код
#!/bin/bash
# === НАСТРОЙКИ ===
DB_USER="wikijs"
DB_NAME="wikidb"
BACKUP_DIR="/backup/wiki"
REMOTE_USER="user"
REMOTE_HOST="backup-server"
REMOTE_DIR="/backups/wiki"
FILES_DIR="/var/wiki"
DATE=$(date +%F)
# === БЭКАП БАЗЫ ===
pg_dump -U "$DB_USER" -h localhost "$DB_NAME" > "$BACKUP_DIR/wiki_backup_$DATE.sql"
# === БЭКАП ФАЙЛОВ ===
tar -czf "$BACKUP_DIR/wiki_files_$DATE.tar.gz" -C /var wiki
# === ОТПРАВКА ПО SSH ===
scp "$BACKUP_DIR/wiki_backup_$DATE.sql" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
scp "$BACKUP_DIR/wiki_files_$DATE.tar.gz" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
# === (ОПЦИОНАЛЬНО) — УДАЛЕНИЕ СТАРЫХ БЭКАПОВ ===
find "$BACKUP_DIR" -type f -mtime +7 -delete
# Очистка старых бэкапов на удалённом сервере
ssh "$REMOTE_USER@$REMOTE_HOST" "find $REMOTE_DIR -type f -mtime +7 -delete"
chmod +x /usr/local/bin/wiki-backup.sh
crontab -e
Добавить, например, чтобы бэкап шел каждую ночь в 03:00:
0 3 * * * /usr/local/bin/wiki-backup.sh >> /var/log/wiki-backup.log 2>&1