Управление бэкендом с клиента
Как можно реализовать такой процесс:
На сервере я запускаю приложение node server_1.js На клиенте в input ввожу команду: server_1.js stop, server_2.js start На сервере: server_1.js приняв команду запускает server_2.js, а сам закрывается |
А что должно произойти с подключенным клиентом?
Надо наверное какой-нибудь агент, к которому подключается клиент, и агент управляет созданием/удалением процессов. https://nodejs.org/api/child_process.html https://medium.freecodecamp.org/node...w-e69498fe970a |
Сейчас у меня на сервере стоит nodemon, а серверный скрипт я правлю через winscp с открытием в sublimeText.
Я хочу избавится от установки на ПК любого софта кроме браузера. Цель: Я хочу зайдя на свою страницу администратора, ввести в input команду скажем get server.js сервер возвращает его код, я в редакторе на самой странице правлю скрипт, нажимаю сохранить. И server.js перезапускается. То есть на клиенте я ввожу команду на получения ресурсов сервера для редактирования и последующего сохранения на сервере с перезапуском. Это вроде CMS называется. Вообщем я не хочу быть привязанным к ПК, чтобы я буквально с телефона мог редактировать серверный код. Вроде как онлайн-редактор бэкенда моего сайта со страницы администратора. |
Раз есть страница администратора, тогда не понятно зачем вводить какие-то команды.
Банальный fileexplorer в браузере, ходи по папкам и выбирай файл, поправил файл, нажал кнопку перезапустить. Даже редактор кода можно вставить. буквально 1 минута на поиск) https://www.npmjs.com/package/node-file-manager https://codemirror.net/ http://pm2.keymetrics.io/ |
Хочу поднять эту тему. У меня тоже есть аналогичная потребность.
Цитата:
Что необходимо: чтобы я на смартфоне (на своей веб-странице "mypage") ввел какой-то параметр (пусть в простой input), нажал кнопку "OK" и после этого myserver.js должен перезапуститься с учетом нового параметра. То есть, сервер, слушающий на каком-то порту XXXXX, должен получить такую вот "команду" с параметром и сам себя полностью перезапустить, да еще и работать в режиме daemon. Как такое сделать? Нюанс в том, что с новым параметром myserver.js может запуститься, но свалиться по ошибке. Тогда вообще уже mypage станет бесполезной (она просто не откроется). Рассмотрю любые идеи. На сервере Centos 7 стоит Apache и PHP 7. Может страницу mypage открывать на PHP и с помощью PHP как-то запускать/перезапускать myserver.js? Это как бы независимый от Node.js канал работы с сервером. Например что-то вроде такого: exec('node myserver.js'); |
Цитата:
|
Цитата:
Для понимания задачи давайте упраздним и это. Задача сводится к тому, чтобы иметь свою страницу https://mysite.com/mypage.html с тремя кнопками "Рестарт", "Стоп" и "Пуск". Понятное дело, что если остановить сервер, генерирующий, страницу mypage.html, то дальше мрак. Но хотя бы вариант с одной кнопкой "Рестарт" можно сделать? Как это реализовать через браузер? |
Маэстро,
Какой в этом смысл? если нужно перегружать при изменении файлов поставьте nodemon если просто так от скуки то reload подойдет |
Цитата:
Я нахожусь в одной стране, предприятие с локальной сетью в другой, вебсервер физически в третьей. Умные дяденьки (сисадмины) настроили следующую цепочку доступа к серверу: Сначал я должен с помощью удаленного доступа (Microsoft) войти в локальную сеть предприятия (логин/пароль раз), подключиться к моей виртуальной рабочей станции в сети. Только из локальной сети я могу запустить программу winscp (логин/пароль два), чтобы подключиться к серверу и что-то на него скопировать. Чтобы выполнить какие-то команды на сервере или перезапустить Node.js-сервер я еще должен запустить Путти, зайти под SSH (логин/пароль три). Кроме всего этого виртуальная станция настроена таким образом, что через 5 минут (?!) бездействия она лочится и логин/пароль приходится вводить заново (N раз). Я уважаю информационную безопасность, но для частной задачи хотелось бы не проходить крым/рым/медные трубы. Неужели никому больше не требуется удаленно перезапускать Node-сервер? |
Цитата:
Спасибо за совет. Но можете подробнее? Как оперируя только одной вебстраницей сделать reload сервера? |
Цитата:
|
Цитата:
|
Надо у старика Мюнхаузена спросить, он что-то подобное проделывал.
|
Сам себя за волосы не вытащишь. Тут помощники нужны. В помощники я взял nodemon и Apache/PHP, которые уже стоят на сервере.
Решение задачи: Создаем HTML-форму, которая POST-запросом отправляет на сервер содержимое input-поля с именем "s". Форма вызывает PHP-скрипт startstop.php Данный скрипт принимает числовой параметр s и сохраняет его в файл startstop.js в тот же каталог, где лежит server.js Nodemon, как известно, засекает изменение файла startstop.js в каталоге и перегружает server.js упрощенный код startstop.php: <? if (!isset($_POST['s'])) exit; $s = trim(substr($_POST['s'],0,10)); settype($s,"integer"); file_put_contents('путь_к_каталогу_сервера/startstop.js', $s); echo $s."\n"; ?> начало кода в server.js var command = fs.readFileSync('startstop.js'); if (command == 1) { var s = 'server stopped ' + "\n"; fs.appendFileSync('имя_лог_файла',s); return; // завершение работы сервера } else { // действия при старте server.js var absd = command; }; Примечания: 1. в HTML-форме есть еще поле password, которое опущено в данном примере 2. файл startstop.js сначала хотел назвать startstop.txt, но nodemon на него не реагирует, несмотря на то, что в настройках значится watching:*.* (пока не понял почему) 3. для автора этого поста: HTML-форму можно сделать на PHP, добавить в неё чтение файла server.js и отправку в браузер в поле TEXTAREA. Соответственно, после внесения изменений, отправить POST-запросом на сервер, где скрипт startstop.php сначала сохранит новый файл server.js, что перезапустит Node.js-сервер с новым кодом. |
Apache зачем? nodejs прекрасно принимает пост запросы и работает с файлами.
|
Цитата:
|
Цитата:
|
Цитата:
|
Хех. Ну вот я напейсал такой модуль под названием childProcessExecFile.js
var execFile = require('child_process').execFile; function childProcessExecFile(p, ...args) { return new Promise(function(resolve, reject) { execFile(p, args, function(err) { if(err) resolve(err); resolve('OK'); }); }); } module.exports = childProcessExecFile; Потом напейсал такой модуль var childProcessExecFile = require('./childProcessExecFile'); childProcessExecFile('node', 'absolute_path_to_serv/server.js') .then( ok => { console.log(ok); }) .catch( err => { console.log(err); }); И запустил приложение. Видимо, это может значить, что на том же VPS можно параллельно запустить ещё один сайтик и через него запускать/останавливать соседний. |
Часовой пояс GMT +3, время: 14:34. |