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

Как установить Etherpad Collaborative Web Editor на Rocky Linux 8


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

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите Git
  4. Шаг 3. Установите MariaDB
  5. Шаг 4. Настройка MariaDB
  6. Шаг 5. Загрузите и установите Etherpad
  7. Шаг 6. Настройка Etherpad
  8. Шаг 7. Создание службы Etherpad
  9. Шаг 8. Установите SSL с помощью Lets Encrypt
  10. Шаг 9. Установка и настройка Nginx
  11. Обновление Etherpad
  12. Заключение

Etherpad — это онлайн-редактор с открытым исходным кодом, обеспечивающий совместное редактирование в режиме реального времени в браузере. Он написан на Node.js и может быть размещен самостоятельно для работы с различными платформами, такими как WordPress, Drupal, Odoo, Discourse, Joomla и т. д.

В этом руководстве мы установим Etherpad на сервер Rocky Linux 8, используя базу данных MariaDB для хранения наших данных. Мы также будем использовать Nginx в качестве обратного прокси-сервера для приложения и установим SSL-сертификат с помощью Lets Encrypt, чтобы включить HTTPS-подключения к нашему экземпляру Etherpad.

Предпосылки

  1. A system running Rocky Linux 8.

  2. A non-root user with sudo privileges.

  3. A domain name pointed to the server.

  4. Nodejs installed. Follow our guide on installing Nodejs on Rocky Linux 8 server. Use any of the two methods specified.

  5. Make sure everything is updated.

    $ sudo dnf update
    

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

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

$ sudo firewall-cmd --state
running

Это указывает на то, что он успешно запущен.

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

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

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

cockpit dhcpv6-client ssh

Разрешить порты HTTP и HTTPS.

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

Откройте порт 9001, используемый приложением Etherpad.

$ sudo firewall-cmd --permanent --add-port=9001/tcp

Перепроверьте состояние брандмауэра.

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

Вы должны увидеть аналогичный вывод.

cockpit dhcpv6-client http https ssh

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

$ sudo firewall-cmd --reload

Шаг 2 — Установите Git

Перед установкой Etherpad нам нужно установить Git. Выполните следующую команду, чтобы установить Git.

$ sudo dnf install git

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

$ git --version
git version 2.27.0

Добавьте первоначальную конфигурацию.

$ git config --global user.name "YourName"
$ git config --global user.email ""

Перечислите конфигурацию, которую вы только что установили.

$ git config --list
user.name=YourName

Шаг 3 — Установите MariaDB

Поскольку мы будем использовать базу данных MariaDB для хранения данных Etherpads, нам необходимо сначала установить и настроить ее.

Репозиторий Rocky Linux AppStream поставляется с MariaDB. Чтобы вывести список всех доступных установленных версий MariaDB, выполните следующую команду.

$ sudo dnf module list mariadb
Last metadata expiration check: 1:15:26 ago on Thu 21 Oct 2021 10:20:01 AM UTC.
Rocky Linux 8 - AppStream
Name                          Stream                         Profiles                                         Summary
mariadb                       10.3 [d]                       client, galera, server [d]                       MariaDB Module
mariadb                       10.5                           client, galera, server [d]                       MariaDB Module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Версия по умолчанию установлена на 10.3. Однако вы можете установить последнюю версию, используя следующую команду.

$ sudo dnf module enable mariadb:10.5

Установите МариаБД.

$ sudo dnf install mariadb-server

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

$ sudo systemctl enable mariadb --now

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

$ sudo systemctl status mariadb

Защитите сервер MariaDB.

$ sudo mysql_secure_installation

Вы столкнетесь с различными подсказками. Ответьте на них следующим образом.

Enter current password for root (enter for none): Press Enter
Switch to unix_socket authentication [Y/n] Type y
Change the root password? [Y/n] Type n
Remove anonymous users? [Y/n] Type y
Disallow root login remotely? [Y/n] Type y
Remove test database and access to it? [Y/n] Type y
Reload privilege tables now? [Y/n] Type y

Теперь вы можете подключиться к серверу MariaDB, используя следующую команду.

$ sudo mysql 

Шаг 4 — Настройте MariaDB

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

$ sudo mysql

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

$ create database `etherpad_lite_db`;

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

$ CREATE USER 'etherpaduser'@'localhost' identified by 'password';

Используйте надежный пароль.

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

$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad_lite_db`.* to '<etherpaduser>'@'localhost';

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

$ exit

Шаг 5 — Скачайте и установите Etherpad

Чтобы установить Etherpad, мы загрузим его исходный код и соберем его.

Первый шаг — создать нового пользователя etherpad с помощью следующей команды.

$ sudo adduser --system --home /opt/etherpad --create-home --user-group etherpad

Эта команда создает пользователя --system, что означает, что он не может войти в систему и не имеет пароля. Мы также даем ему домашнюю директорию /opt/etherpad, откуда можно скачать Etherpad. Флаг --create-home создает домашний каталог с правильными разрешениями. Флаг --user-group создает группу с тем же именем, что и имя пользователя.

Переключитесь на пользователя etherpad, чтобы загрузить и установить приложение.

$ sudo -u etherpad bash

Перейдите в каталог /opt/etherpad.

[ user] cd /opt/etherpad

Скопируйте репозиторий Etherpad в каталог /opt/etherpad.

[ ~]$ git clone --branch master git://github.com/ether/etherpad-lite.git

Переключитесь на только что загруженный каталог.

[ ~]$ cd etherpad-lite

Запустите скрипт Etherpads run.sh, чтобы настроить и установить зависимости.

[ etherpad-lite]$ src/bin/run.sh

Вы можете запустить URL-адрес http://YOURSERVERIP:9001 в браузере, чтобы запустить Etherpad. Вы получите следующий экран.

Возникла проблема с вышеуказанной установкой. Это требует, чтобы вы держали текущую оболочку открытой, а Node работал на переднем плане. Чтобы сделать постоянную установку, нам нужно запустить Etherpad как службу. Нажмите Ctrl + C на своем терминале, чтобы остановить запуск Etherpad.

Шаг 6 — Настройте Etherpad

Прежде чем продолжить, нам нужно установить некоторые параметры и настроить нашу установку в соответствии с нашими потребностями. Etherpad сохраняет свои настройки в файле settings.json в каталоге установки.

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

[ etherpad-lite]$ nano settings.json

Файл настроек имеет формат JSON. Первое, что вам нужно настроить, это параметры базы данных.

Найдите следующий код и закомментируйте его, поставив перед ним //.

//  "dbType": "dirty",
//  "dbSettings": {
//    "filename": "var/dirty.db"
//  },

Затем найдите следующий код и измените его значения следующим образом. Обязательно удалите /* и */ в начале и в конце.

  "dbType" : "mysql",
  "dbSettings" : {
    "user":     "etherpaduser",
    "host":     "localhost",
    "port":     3306,
    "password": "password",
    "database": "etherpad_lite_db",
    "charset":  "utf8mb4"
  },

Наконец, прокрутите немного вниз, чтобы найти параметр trustProxy и измените его значение с false на true.

  "trustProxy": true,

Этот параметр необходим для того, чтобы Etherpad работал вместе с Nginx.

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

Выйдите из пользовательской оболочки Etherpad.

[ etherpad-lite]$ exit

Шаг 7 — Создайте службу Etherpad

Чтобы запустить Etherpad при загрузке и управлять процессом с помощью systemctl, нам нужно создать служебный файл.

Создайте и откройте файл службы.

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

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

[Unit]
Description=Etherpad, a collaborative web editor.
After=syslog.target network.target

[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /opt/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
Restart=always

[Install]
WantedBy=multi-user.target

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

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

$ sudo systemctl daemon-reload

Включите Запуск службы Etherpad.

$ sudo systemctl enable etherpad --now

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

$ sudo systemctl status etherpad
? etherpad.service - Etherpad, a collaborative web editor.
   Loaded: loaded (/etc/systemd/system/etherpad.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-10-21 15:06:53 UTC; 6s ago
 Main PID: 47228 (node)
    Tasks: 13 (limit: 11411)
   Memory: 102.8M
   CGroup: /system.slice/etherpad.service
           ??47228 /usr/bin/node --experimental-worker /opt/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
.......

Шаг 8. Установите SSL с помощью Lets Encrypt

Чтобы установить SSL-сертификат с помощью Lets Encrypt, нам нужно установить инструмент Certbot.

Во-первых, вам нужно скачать и установить репозиторий EPEL.

$ sudo dnf install epel-release

Выполните следующие команды, чтобы установить Certbot.

$ sudo dnf install certbot

Создайте SSL-сертификат.

$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m  -d example.com

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

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

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

Создайте корневой каталог вызова для автоматического обновления Lets Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Создайте задание Cron для обновления SSL. Он будет запускаться каждый день для проверки сертификата и его обновления при необходимости. Для этого сначала создайте файл /etc/cron.daily/certbot-renew и откройте его для редактирования.

$ sudo nano /etc/cron.daily/certbot-renew

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

#!/bin/sh
certbot renew --cert-name etherpad.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

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

Измените права доступа к файлу задачи, чтобы сделать его исполняемым.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Шаг 9 — Установите и настройте Nginx

Rocky Linux поставляется со старой версией Nginx. Чтобы установить последнюю версию, вам нужно добавить репозиторий Nginx.

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

$ 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 при появлении запроса после завершения.

Установите Нгинкс.

$ sudo dnf install nginx

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

$ sudo systemctl enable nginx

Затем создайте и откройте файл /etc/nginx/conf.d/etherpad.conf для редактирования.

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

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

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

    access_log  /var/log/nginx/etherpad.access.log;
    error_log   /var/log/nginx/etherpad.error.log;
    
    ssl_certificate      /etc/letsencrypt/live/etherpad.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/etherpad.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/etherpad.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        rewrite  ^/$ / break;
        rewrite  ^/locales/(.*) /locales/$1 break;
        rewrite  ^/locales.json /locales.json break;
        rewrite  ^/admin(.*) /admin/$1 break;
        rewrite  ^/p/(.*) /p/$1 break;
        rewrite  ^/static/(.*) /static/$1 break;
        rewrite  ^/pluginfw/(.*) /pluginfw/$1 break;
        rewrite  ^/javascripts/(.*) /javascripts/$1 break;
        rewrite  ^/socket.io/(.*) /socket.io/$1 break;
        rewrite  ^/ep/(.*) /ep/$1 break;
        rewrite  ^/minified/(.*) /minified/$1 break;
        rewrite  ^/api/(.*) /api/$1 break;
        rewrite  ^/ro/(.*) /ro/$1 break;
        rewrite  ^/error/(.*) /error/$1 break;
        rewrite  ^/jserror(.*) /jserror$1 break;
        rewrite  ^/redirect(.*) /redirect$1 break;
        rewrite  /favicon.ico /favicon.ico break;
        rewrite  /robots.txt /robots.txt break;
        rewrite  /(.*) /p/$1;
        
        proxy_pass         http://127.0.0.1:9001;
        proxy_buffering    off;
        proxy_set_header   Host $host;
        proxy_pass_header  Server;

        # proxy headers
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_http_version  1.1;

        # websocket proxying
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
    }
}

# we're in the http context here
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

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

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

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

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если вы получите следующую ошибку, вам нужно будет отредактировать файл /etc/nginx/nginx.conf, чтобы добавить/настроить размер переменной server_names_hash_bucket_size.

nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size

Откройте файл /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 еще раз.

Наконец, запустите службу Nginx, чтобы активировать новую конфигурацию.

$ sudo systemctl start nginx

Запустите URL-адрес https://etherpad.example.com в своем браузере, и откроется домашняя страница Etherpad. Теперь вы можете использовать его для редактирования документов и приглашения соавторов.

Обновление Etherpad

Обновить Etherpad очень просто. Первый шаг — переключиться на пользовательскую оболочку Etherpad.

$ sudo -u etherpad bash

Перейдите в каталог /opt/etherpad/etherpad-lite.

[ user] cd /opt/etherpad/etherpad-lite

Загрузите последний репозиторий Etherpad в каталог /opt/etherpad/etherpad-lite.

[ ~]$ git pull origin

Запустите скрипт Etherpads run.sh, чтобы установить последнюю версию Etherpad.

[ etherpad-lite]$ src/bin/run.sh

Заключение

В этом руководстве мы настроим Etherpad Collaborative Editor с сервером Nginx и защитим его с помощью SSL-сертификатов Lets Encrypt. Ваша установка Etherpad готова к использованию, которую вы можете расширить с помощью дополнительных функций, включая аутентифицированных пользователей, плагины и настройки пользовательского интерфейса.

Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.