Fedora 43: как установить WebSocket сервер

Короткий ответ: на Fedora 43 простой WebSocket сервер удобнее всего поднять через Node.js и пакет ws. Установите Node.js, создайте маленький сервер, откройте порт в firewall, проверьте подключение, а для продакшена поставьте Nginx reverse proxy и wss://

Установка Node.js

sudo dnf install nodejs npm
node -v
npm -v

Если версии выводятся, можно создать проект:

mkdir websocket-server
cd websocket-server
npm init -y
npm install ws

Минимальный сервер

server.js:

const { WebSocketServer } = require("ws");

const wss = new WebSocketServer({ port: 8080 });

wss.on("connection", (socket) => {
  socket.send(JSON.stringify({ type: "hello" }));

  socket.on("message", (message) => {
    socket.send(JSON.stringify({
      type: "echo",
      payload: message.toString(),
    }));
  });
});

console.log("WebSocket server: ws://0.0.0.0:8080");

Запуск:

node server.js

Firewall

Если подключаетесь с другой машины, откройте порт:

sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Проверьте, что порт слушается:

ss -lntp | grep 8080

systemd-сервис

Для постоянного запуска создайте сервис:

[Unit]
Description=WebSocket Server
After=network.target

[Service]
WorkingDirectory=/opt/websocket-server
ExecStart=/usr/bin/node server.js
Restart=always
User=websocket

[Install]
WantedBy=multi-user.target

Команды:

sudo systemctl daemon-reload
sudo systemctl enable --now websocket-server
sudo systemctl status websocket-server

Nginx и wss

Для публичного сайта лучше не открывать Node.js напрямую. Схема:

client -> wss://example.com/ws -> nginx -> ws://127.0.0.1:8080

В Nginx нужны Upgrade-заголовки:

location /ws {
  proxy_pass http://127.0.0.1:8080;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_set_header Host $host;
}

TLS-сертификат настраивается на уровне Nginx

Где хранить проект

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

sudo mkdir -p /opt/websocket-server
sudo cp server.js package.json package-lock.json /opt/websocket-server/
sudo chown -R websocket:websocket /opt/websocket-server

Отдельный пользователь websocket снижает риск: если приложение скомпрометируют, оно не будет работать от root

Логи и диагностика

Проверяйте systemd-логи:

journalctl -u websocket-server -f

Если клиент не подключается, идите по цепочке: Node-процесс запущен, порт слушается, firewall открыт, Nginx прокидывает Upgrade, браузер использует правильный ws или wss

Обновления и безопасность

После установки не оставляйте сервер без обновлений:

sudo dnf upgrade

Если WebSocket принимает внешние сообщения, добавьте лимиты размера, авторизацию и проверку формата JSON. Минимальный echo-сервер хорош для проверки, но в продакшене он не должен принимать любые данные от любого клиента

Частые ошибки

Первая ошибка — сервер слушает localhost, а вы подключаетесь с другой машины. Используйте 0.0.0.0 или reverse proxy

Вторая ошибка — забыть firewall

Третья ошибка — использовать ws:// на HTTPS-сайте. Для продакшена нужен wss://

Четвертая ошибка — не настроить systemd, из-за чего сервер падает после закрытия SSH-сессии

Пятая ошибка — открывать порт 8080 наружу, хотя приложение должно быть доступно только через Nginx. В production чаще открывают 80/443, а внутренний WebSocket слушает локальный адрес

Fedora-нюансы

На Fedora стоит отдельно помнить про SELinux и firewall. Если приложение работает напрямую на 127.0.0.1:8080, а наружу смотрит только Nginx на 443 порту, обычно проще диагностировать систему: сначала проверяете Node.js локально, потом Nginx, потом TLS. Если же вы открываете нестандартный порт наружу, проблема может быть не в WebSocket-коде, а в сетевом доступе или политике безопасности

Практичный порядок такой: локальный запуск, ss -lntp, проверка curl или тестового WebSocket-клиента на сервере, потом проверка с внешней машины. Так вы не смешиваете ошибки приложения, firewall и proxy в одну большую непонятную проблему

Самопроверка

Запустите сервер, подключитесь из браузера или тестового клиента, отправьте ping и получите echo. Затем перезапустите сервис через systemctl restart websocket-server и убедитесь, что он поднялся снова

Что почитать дальше по WebSocket

Если нужен общий маршрут по теме, откройте рубрику WebSocket. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x