Короткий ответ: на 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. Для соседних задач пригодятся эти разборы:
- OBS WebSocket скачать: как установить плагин и проверить подключение
- Django: как подружить Celery с WebSocket
- Django: как сохранить биржевые данные, полученные по WebSocket
- FastAPI WebSocket: уведомления в браузер



