Поиск по сайту:

Как установить Wiki.js на Rocky Linux 9


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите PostgreSQL и утилиты
  4. Шаг 3. Настройка PostgreSQL
  5. Шаг 4. Установите Node.js
  6. Шаг 5. Загрузите Wiki.js
  7. Шаг 6. Настройка и запуск Wiki.js
  8. Шаг 7. Настройка службы Systemd
  9. Шаг 8. Установите Nginx
  10. Шаг 9. Установите SSL
  11. Шаг 10. Настройка SELinux
  12. Шаг 11. Настройка Nginx
  13. Шаг 12. Завершите установку
  14. Заключение

Wiki.js — это легкое вики-программное обеспечение с открытым исходным кодом. Он построен на основе JavaScript-фреймворка Node.js. Его можно использовать для написания документации, вики и веб-контента с помощью редактора Markdown для разработчиков и редактора WYSIWYG для нетехнических специалистов. Он поддерживает несколько типов контента, включая диаграммы UML, математические выражения с использованием синтаксиса Tex или MathML и код. Он включает в себя несколько модулей для различных функций, включая аналитику, аутентификацию, ведение журналов, сторонние поисковые системы и несколько служб хранения для синхронизации вашего контента.

В этом руководстве вы научитесь устанавливать Wiki.js на сервер Rocky Linux 9, используя базу данных PostgreSQL и сервер Nginx для проксирования.

Предпосылки

  • A server running Rocky Linux 9.

  • A non-root user with sudo privileges.

  • A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use wiki.example.com as the domain name.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Шаг 1. Настройте брандмауэр

Первым шагом является настройка брандмауэра. Rocky Linux использует Firewalld Firewall. Проверьте состояние брандмауэров.

$ sudo firewall-cmd --state
running

Брандмауэр работает с разными зонами, и мы будем использовать публичную зону по умолчанию. Перечислите все службы и порты, активные на брандмауэре.

$ sudo firewall-cmd --permanent --list-services

Он должен показать следующий вывод.

cockpit dhcpv6-client ssh

Для работы Wiki.js необходимы порты HTTP и HTTPS. Откройте их.

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

Перезагрузите брандмауэр, чтобы применить изменения.

$ sudo firewall-cmd --reload

Шаг 2 — Установите PostgreSQL и утилиты

Rocky Linux 9 поставляется с более старой версией PostgreSQL. Мы установим Postgres 14 для нашего руководства.

Установите RPM-репозиторий для PostgreSQL.

$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Установите сервер PostgreSQL 14.

$ sudo dnf install -y postgresql14-server postgresql14-contrib

Инициализировать базу данных.

$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

Включите и запустите службу PostgreSQL.

$ sudo systemctl enable postgresql-14 --now

Проверить статус услуги.

$ sudo systemctl status postgresql-14
? postgresql-14.service - PostgreSQL 14 database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2022-10-22 09:52:41 UTC; 2s ago
       Docs: https://www.postgresql.org/docs/14/static/
    Process: 103857 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
   Main PID: 103862 (postmaster)
      Tasks: 8 (limit: 5915)
     Memory: 16.6M
        CPU: 61ms
     CGroup: /system.slice/postgresql-14.service
             ??103862 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/
             ??103863 "postgres: logger "
             ??103865 "postgres: checkpointer "
             ??103866 "postgres: background writer "
             ??103867 "postgres: walwriter "
             ??103868 "postgres: autovacuum launcher "
             ??103869 "postgres: stats collector "
             ??103870 "postgres: logical replication launcher "

Oct 22 09:52:41 wiki.example.com systemd[1]: Starting PostgreSQL 14 database server...

Шаг 3 — Настройте PostgreSQL

Войдите в оболочку PostgreSQL.

$ sudo -i -u postgres psql

Создайте новую базу данных для Wiki.js.

postgres=# CREATE DATABASE wikidb;

Создайте нового пользователя базы данных с надежным паролем.

postgres=# CREATE USER wikiuser WITH ENCRYPTED PASSWORD 'wikipassword';

Предоставьте пользователю права на использование базы данных.

postgres=# GRANT ALL PRIVILEGES ON DATABASE wikidb TO wikiuser;

Выйдите из оболочки Postgres.

postgres=# \q

Шаг 4 — Установите Node.js

Wiki.js поддерживает Node v16 на момент написания этого руководства.

Установите репозиторий Node с помощью следующей команды.

$ curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -

Установить узел.

$ sudo dnf install nodejs -y

Проверьте установку узла.

$ node --version
v16.18.0

Шаг 5 — Загрузите Wiki.js

Создайте папку для установки Wiki.js.

$ sudo mkdir -p /var/www/wikijs

Установите текущего пользователя в качестве владельца папки.

$ sudo chown $USER:$USER /var/www/wikijs

Перейдите в каталог и загрузите архив кода Wiki.js.

$ cd /var/www/wikijs && wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz

Распакуйте скачанный архив.

$ tar xzf wiki-js.tar.gz

Шаг 6. Настройте и запустите Wiki.js

Создайте файл конфигурации из примера.

$ cp config.sample.yml config.yml

Откройте файл конфигурации для редактирования.

$ nano config.yml

Найдите следующие параметры базы данных и обновите их значения на значения, настроенные на шаге 3.

# PostgreSQL / MySQL / MariaDB / MS SQL Server only:
host: localhost
port: 5432
user: wikiuser
pass: wikipassword
db: wikidb
ssl: false

Найдите строку bindIP: 0.0.0.0 и обновите ее следующим образом.

bindIP: 127.0.0.1

Это заставит WIki.js прослушивать петлевой адрес, потому что мы будем использовать прокси-сервер Nginx для доступа к нему извне.

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Запустите Wiki.js с помощью следующей команды.

$ node server

Вы получите аналогичный вывод, подтверждающий успешную установку.

2022-10-22T10:25:48.187Z [MASTER] info: =======================================
2022-10-22T10:25:48.190Z [MASTER] info: = Wiki.js 2.5.289 =====================
2022-10-22T10:25:48.191Z [MASTER] info: =======================================
2022-10-22T10:25:48.191Z [MASTER] info: Initializing...
2022-10-22T10:25:49.079Z [MASTER] info: Using database driver pg for postgres [ OK ]
2022-10-22T10:25:49.086Z [MASTER] info: Connecting to database...
2022-10-22T10:25:49.117Z [MASTER] info: Database Connection Successful [ OK ]
2022-10-22T10:25:49.467Z [MASTER] warn: DB Configuration is empty or incomplete. Switching to Setup mode...
2022-10-22T10:25:49.468Z [MASTER] info: Starting setup wizard...
2022-10-22T10:25:49.740Z [MASTER] info: Starting HTTP server on port 3000...
2022-10-22T10:25:49.741Z [MASTER] info: HTTP Server on port: [ 3000 ]
2022-10-22T10:25:49.745Z [MASTER] info: HTTP Server: [ RUNNING ]
2022-10-22T10:25:49.745Z [MASTER] info: .......................................
2022-10-22T10:25:49.745Z [MASTER] info:
2022-10-22T10:25:49.746Z [MASTER] info: Browse to http://YOUR-SERVER-IP:3000/ to complete setup!

Нажмите Ctrl + C, чтобы остановить процесс.

Шаг 7 — Настройка службы Systemd

Описанный выше процесс поддержания работоспособности Wiki.js является временным. Чтобы сделать этот процесс постоянным, нам нужно создать службу systemd для Wiki.js, чтобы запускать ее в качестве фоновой службы. Это позволит Wiki.js запускаться при перезагрузке системы.

Создайте служебный файл systemd для Wiki.js и откройте его для редактирования.

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

Вставьте в него следующий код. Замените значение переменной User именем пользователя вашей системы.

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

[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always

User=navjot
Environment=NODE_ENV=production
WorkingDirectory=/var/www/wikijs

[Install]
WantedBy=multi-user.target

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Перезагрузите системный демон.

$ sudo systemctl daemon-reload

Включите службу Wiki.js.

$ sudo systemctl enable wikijs

Шаг 8 — Установите Nginx

Rocky Linux поставляется со старой версией Nginx. Вам необходимо скачать официальный репозиторий Nginx, чтобы установить последнюю версию.

Создайте и откройте файл /etc/yum.repos.d/nginx.repo для создания официального репозитория Nginx.

$ sudo nano /etc/yum.repos.d/nginx.repo

Вставьте в него следующий код.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Установите сервер Nginx.

$ sudo dnf install nginx -y

Проверьте установку.

$ nginx -v
nginx version: nginx/1.22.1

Включите и запустите сервер Nginx.

$ sudo systemctl enable nginx --now

Проверьте состояние сервера.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2022-10-22 11:15:39 UTC; 49min ago
       Docs: http://nginx.org/en/docs/
    Process: 116236 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 116237 (nginx)
      Tasks: 2 (limit: 5915)
     Memory: 5.0M
        CPU: 245ms
     CGroup: /system.slice/nginx.service
             ??116237 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??116238 "nginx: worker process"

Oct 22 11:15:39 wiki.example.com systemd[1]: Starting nginx - high performance web server...

Шаг 9 — Установите SSL

Мы будем использовать инструмент Certbot с помощью инструмента Snapd для выпуска SSL-сертификатов. Для работы требуется репозиторий EPEL.

$ sudo dnf install epel-release

Мы будем использовать Snapd для установки Certbot. Установите Снапд.

$ sudo dnf install snapd

Включите и запустите службу Snap.

$ sudo systemctl enable snapd.socket --now

Создайте необходимые ссылки для работы Snapd.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Установите основной репозиторий Snapd.

$ sudo snap install core
$ sudo snap refresh core

Установите Сертбот.

$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Сгенерируйте сертификат. Следующая команда также автоматически настроит Nginx.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d wiki.example.com

Приведенная выше команда загрузит сертификат в каталог /etc/letsencrypt/live/wiki.example.com на вашем сервере.

Создайте групповой сертификат Диффи-Хеллмана.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Выполните пробный запуск процесса, чтобы проверить, нормально ли работает обновление SSL.

$ sudo certbot renew --dry-run

Если вы не видите ошибок, все готово. Ваш сертификат будет продлен автоматически.

Шаг 10 — Настройте SELinux

Выполните следующие команды, чтобы применить правильный контекст SELinux к каталогу Wiki.js.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wikijs(/.*)?"
$ sudo restorecon -Rv /var/www/wikijs

Создайте порт для HTTP и назначьте ему 3000, чтобы Wiki.js работал с SELinux.

$ sudo semanage port -a -t http_port_t -p tcp 3000

Разрешите Nginx подключаться к сети.

$ sudo setsebool -P httpd_can_network_connect 1

Шаг 11 — Настройте Nginx

Создайте и откройте файл /etc/nginx/conf.d/wikijs.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/wikijs.conf

Вставьте в него следующий код.

# enforce HTTPS
server {
  listen 80;
  listen [::]:80;
  server_name wiki.example.com;
  return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name wiki.example.com;

    root /var/www/wikijs;

    access_log  /var/log/nginx/wiki.access.log;
    error_log   /var/log/nginx/wiki.error.log;

    http2_push_preload on; # Enable HTTP/2 Server Push

    ssl_certificate /etc/letsencrypt/live/wiki.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wiki.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/wiki.example.com/chain.pem;
    ssl_session_timeout 1d;

    # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
    ssl_protocols TLSv1.2 TLSv1.3;

    # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
    # prevent replay attacks.
    #
    # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
    ssl_early_data on;

    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;

    # OCSP Stapling ---
    # fetch OCSP records from URL in ssl_certificate and cache them
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    add_header X-Early-Data $tls1_3_early_data;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_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_pass http://127.0.0.1:3000;
    }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Замените корневой каталог в указанном выше файле каталогом на вашем сервере.

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Проверьте конфигурацию Nginx.

$ sudo nginx -t

Если вы не видите ошибок, значит, все в порядке.

Запустите службу Wiki.js.

$ sudo systemctl start wikijs

Перезагрузите сервер Nginx.

$ sudo systemctl reload nginx

Шаг 12 — Завершите установку

Посетите URL-адрес https://wiki.example.com, чтобы завершить установку.

Заполните данные учетной записи администратора и URL-адрес. Отключите телеметрию, сняв флажок «Разрешить телеметрию». Вы также можете отключить его из панели администратора. Нажмите кнопку Установить, чтобы продолжить.

Вы попадете на страницу входа.

Введите данные своей учетной записи и нажмите кнопку «Войти», чтобы перейти на страницу администрирования.

Теперь вы можете начать использовать Wiki.js.

Заключение

На этом мы завершаем наше руководство, в котором вы узнали, как установить Wiki.js на сервер Rocky Linux 9. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.