Как установить веб-редактор Etherpad

Etherpad – это веб-приложение, благодаря которому вы можете редактировать текст в браузере совместно с другими пользователями в режиме реального времени. Он написан на Node.js и его можно запускать на различных платформах и операционных системах.

В этом руководстве мы установим Etherpad, используя ​​БД SQLite для хранения данных. Затем мы установим и настроим Nginx в качестве обратного прокси, а также получим SSL-сертификаты от центра Let’s Encrypt, чтобы защитить HTTPS-соединения с нашей копией Etherpad.

Требования

  • Сервер Ubuntu 20.04 с базовой настройкой. Пожалуйста, выполните этот мануал, чтобы подготовить свой сервер к работе.
  • Node.js версии 14 или выше. Чтобы узнать, как установить последнюю версию Node.js с помощью пакетов NodeSource, читайте раздел 2 мануала Установка Node.js в Ubuntu 20.04.
  • Доменное имя, связанное с внешним IP-адресом вашего сервера (к примеру, это может быть example.com или etherpad.example.com).

1: Установка и настройка Etherpad

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

Сопровождающая сторона Etherpad рекомендует запускать программное обеспечение от имени отдельного пользователя, поэтому первым нашим шагом будет создание пользователя по имени etherpad с помощью команды adduser:

sudo adduser --system --group --home /opt/etherpad etherpad

Флаг –system создает пользователя, который не может войти в систему напрямую и не имеет пароля или оболочки. Мы даем ему домашний каталог /opt/etherpad, чтобы иметь возможность загрузить и настроить Etherpad. Также команда создает группу etherpad, используя флаг –group.

Теперь нам нужно выполнить несколько команд от имени пользователя etherpad. Воспользуемся командой sudo, чтобы открыть оболочку bash от имени пользователя etherpad, а затем перейдем в каталог /opt/etherpad:

sudo -u etherpad bash
cd /opt/etherpad

Командная строка обновится, чтобы отразить, что вы перешли в сессию пользователя etherpad (вы увидите префикс типа etherpad@host:~$).

Теперь клонируйте репозиторий Etherpad в каталог /opt/etherpad с помощью Git:

git clone --branch master https://github.com/ether/etherpad-lite.git .

Эта команда перенесет главную ветку исходного кода Etherpad в текущий каталог (.). Когда это будет сделано, запустите сценарий installDeps.sh для установки зависимостей:

./bin/installDeps.sh

Это может занять некоторое время. Когда сценарий будет выполнен, нужно вручную установить последнюю зависимость. Перейдите в папку src и установите пакет sqlite3.

Сначала перейдите в нужный каталог:

cd src

Затем установите пакет sqlite3 с помощью npm:

npm install sqlite3

Наша последняя задача в качестве пользователя etherpad – обновить конфигурационный файл Etherpad settings.json, чтобы настроить поддержку БД SQLite и Nginx. Вернитесь в каталог /opt/etherpad:

cd /opt/etherpad

Затем откройте файл settings с помощью текстового редактора:

nano settings.json

Вы увидите на экране файл, отформатированный как JSON, но с подробными комментариями, объясняющими каждый параметр. Здесь можно многое настроить, но пока нас интересуют два значения, отвечающие за конфигурацию базы данных:

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

Прокрутите файл и найдите разделы dbType и dbSettings. В качестве dbType укажите sqlite, а в filename укажите имя файла:

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

Затем прокрутите файл еще немного вниз, найдите параметр trustProxy и замените его значение на true:

"trustProxy": true,

Сохраните и закройте файл.

Когда сделаете это, не забудьте выйти из оболочки пользователя etherpad:

exit

Вы вернетесь в оболочку обычного пользователя.

Итак, редактор Etherpad установлен и настроен. Далее мы создадим сервис systemd для запуска и управления рабочим процессом Etherpad.

2: Создание сервиса systemd для Etherpad

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

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

Мы создадим определение сервиса на основе данных из документации Etherpad. На этой странице (где можно узнать, как развернуть Etherpad Lite в качестве сервиса) приведен хороший пример конфигурации – чтобы она работала в нашей ситуации, нужно внести всего пару изменений.

Добавьте в файл следующие строки, затем сохраните и закройте файл:

[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/node_modules/ep_etherpad-lite/node/server.js
Restart=always

[Install]
WantedBy=multi-user.target

Этот файл предоставляет сервису systemd всю информацию, необходимую для запуска Etherpad, включая имя пользователя и группу, от имени которой он будет запускаться, а также саму команду для запуска процесса (ExecStart=…).

После закрытия файла перезагрузите systemd, чтобы включить новую конфигурацию:

sudo systemctl daemon-reload

Затем включите сервис etherpad. Это означает, что он будет запускаться всякий раз, когда ваш сервер перезагружается.

sudo systemctl enable etherpad

И, наконец, запустите сервис:

sudo systemctl start etherpad

Убедитесь, что сервис запустился правильно, запросив его состояние:

sudo systemctl status etherpad

Вы должны получить такой результат:

etherpad.service - Etherpad, a collaborative web editor.
     Loaded: loaded (/etc/systemd/system/etherpad.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2021-09-09 14:12:43 UTC; 18min ago
   Main PID: 698 (node)
      Tasks: 13 (limit: 1136)
     Memory: 152.0M
     CGroup: /system.slice/etherpad.service
             └─698 /usr/bin/node --experimental-worker /opt/etherpad/node_modules/ep_etherpad-lite/node/server.js

Выходные данные должны указывать, что состояние сервиса – active (running).

Итак, Etherpad работает, но пока что не доступен в сети, потому что порт 9001 заблокирован брандмауэром. В следующем разделе мы сделаем Etherpad общедоступным, настроив Nginx в качестве обратного прокси для Etherpad.

3: Установка и настройка Nginx

Добавление веб-сервера, такого как Nginx, может повысить производительность – это происходит за счет разгрузки кеширования, сжатия и более эффективного обслуживания статических файлов. Мы установим Nginx и настроим его на проксирование запросов к Etherpad (то есть Nginx позаботится о передаче запросов от ваших пользователей к Etherpad и обратно).

Сначала обновите список пакетов, затем установите Nginx с помощью apt:

sudo apt update
sudo apt install nginx

Разрешите трафик на порты 80 и 443 (HTTP и HTTPS), активировав профиль UFW «Nginx Full»:

sudo ufw allow "Nginx Full"

Rule added
Rule added (v6)

Затем откройте новый конфигурационный файл Nginx в каталоге /etc/nginx/sites-available. Мы назовем наш файл etherpad.conf, но вы можете использовать другое имя.

sudo nano /etc/nginx/sites-available/etherpad.conf

Вставьте в новый файл следующее (обязательно заменив your_domain_here доменом, который связан с вашим сервером Etherpad).

server {
    listen       80;
    listen       [::]:80;
    server_name  your_domain_here;

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

    location / {
        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 "upgrade";
    }
}

Наша конфигурация в общих чертах основана на конфигурации, представленной в документации Etherpad. На данный момент она настраивает только HTTP, так как пока у нас нет поддержки SSL (мы займемся этим на следующем этапе). Остальная часть конфигурации определяет места для логов, а затем передает весь трафик на http://127.0.0.1:9001 (на копию Etherpad, которую мы запустили на предыдущем шаге). Также мы определили в ней заголовки, необходимые для корректного проксирования и для работы веб-сокетов (постоянных HTTP-соединений, обеспечивающих двустороннюю связь в реальном времени).

Сохраните и закройте файл, а затем включите конфигурацию, связав файл симлинком с /etc/nginx/sites-enabled/:

sudo ln -s /etc/nginx/sites-available/etherpad.conf /etc/nginx/sites-enabled/

Теперь используйте nginx -t, чтобы проверить ошибки в конфигурационном файле:

sudo nginx -t

Вы получите такой результат:

[secondary_lable Output]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

В завершение перезагрузите сервис nginx, чтобы активировать новую конфигурацию:

sudo systemctl reload nginx

Ваш сайт Etherpad теперь должен быть доступен в браузере по обычному протоколу HTTP.

Итак, сайт запущен и работает по HTTP, а значит, пришло время защитить соединение с помощью сертификатов Certbot и Let’s Encrypt.

4: Установка Certbot и настройка сертификатов SSL

Благодаря клиенту Certbot и бесплатному центру сертификации Let’s Encrypt настройка SSL-шифрования для Etherpad выполняется всего в две команды.

Сначала нам нужно установить Certbot и его плагин для Nginx:

sudo apt install certbot python3-certbot-nginx

А после этого мы запускаем команду certbot в режиме –nginx и указываем свое доменное имя, которое использовали ранее в директиве server_name в конфигурации Nginx.

sudo certbot --nginx -d your_domain_here

Вам будет предложено принять условия использования Let’s Encrypt и ввести адрес электронной почты.

После этого клиент спросит, хотите ли вы перенаправить весь HTTP-трафик на HTTPS. Выбор за вами, но обычно рекомендуется делать именно так, потому что это безопасно.

После этого Let’s Encrypt подтвердит ваш запрос, и Certbot загрузит сертификат. На экране появится:

Congratulations! You have successfully enabled https://etherpad.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=etherpad.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/etherpad.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/etherpad.example.com/privkey.pem
   Your cert will expire on 2021-12-06. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

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

Заключение

В этом руководстве мы установили Etherpad с прокси-сервером Nginx и SSL-сертификатами от Let’s Encrypt. Теперь ваша копия Etherpad готова к использованию. При желании вы можете самостоятельно включить дополнительные настройки: добавить аутентифицированных пользователей и плагины, изменить интерфейс и многое другое.

С поддержкой SQLite ваш редактор сможет обрабатывать небольшое количество активных пользователей. Если же вы ожидаете, что трафик будет очень высоким, вы можете настроить БД MySQL или PostgreSQL вместо SQLite.

Все параметры конфигурации Etherpad задокументированы на официальной вики-странице.

Tags: , ,

Добавить комментарий