У меня есть приложение node, оно отлично работает в VS Code, и я могу запустить его с помощью команды сценария из окна терминала.
Это просто утилита, которую я хотел бы запустить в фоновом режиме на моей машине разработки. Он отслеживает нажатия клавиш и устанавливает индикатор занятости/ожидания для других приложений. Он использует iohook, если вам интересно, чтобы сделать это.
Как я могу развернуть его, чтобы он просто работал в фоновом режиме (все время, в том числе при запуске)? Я собираюсь развернуть его как веб-сервер, чтобы мне не приходилось возиться со службами Linux.
У меня уже есть apache, nginx и все остальные компоненты веб-сервера, установленные из многочисленных руководств, которые я сделал, но я не знаю, как выполнить развертывание на любом из них.
Я пробовал это:
https://plainenglish.io/blog/deploying-a-localhost-server-with-node-js-and-express-js
но это позволяет запускать только из кода vs или командной строки, это не настоящий «сервер», который работает все время, не требует окна терминала и запускается при запуске системы.
Мне нужно, чтобы это работало от apache или nginx или чего-то в этом роде.
Я пытался:
Чтобы получить доступ к скрипту Node.js из Интернета, установите модули Apache proxy и proxy_http с помощью команд:
sudo a2enmod proxy
sudo a2enmod proxy_http
После завершения установки перезапустите Apache, чтобы изменения вступили в силу:
sudo service apache2 restart
@ Конрад, нет, сэр. Это не переживет перезагрузку. Я хочу сделать свою машину-разработчика «веб-сервером» в смысле devops, с некоторым процессом «веб-сервера», запускающим мое приложение как один из его «веб-сайтов». Вместо того, чтобы публиковать мое приложение nodejs на внешнем «веб-хосте» в хостинговой компании, я хочу опубликовать его на своей машине разработки. Есть смысл?
Я этого не понял, но вот как запустить команду при запуске системы askubuntu.com/questions/228304/…
Я собираюсь развернуть его как веб-сервер, чтобы мне не приходилось возиться со службами Linux — я тоже этого не понимаю.
@Конрад, посмотри последнюю ссылку в моем отредактированном вопросе. Это то, что я пытаюсь сделать. Может быть, я использую неправильные модные словечки, чтобы вы поняли.
Если вы хотите использовать прокси, ваш сервер должен работать одновременно. Вы не можете запустить сервер узла с помощью apache или nginx
@Konrad, в этой ссылке прямо вверху написано: «Хотя сценарии JavaScript Node.js с открытым исходным кодом можно запускать из командной строки с помощью экрана, запуск сценариев как службы с использованием диспетчера процессов PM2 дает сценариям более надежный набор. поведения. При таком запуске в качестве службы сценарии автоматически перезапускаются при перезагрузке сервера или сбое сценария». Это как запустить приложение nodejs на apache. Так что да?
@Konrad, спасибо за ваши усилия и, пожалуйста, посмотрите мой ответ ниже, который я протестировал и работает. Теперь вы понимаете, теперь, когда вы видите ответ? Пожалуйста, помогите мне в будущем, что такого было в моем вопросе, что оттолкнуло вас от решения, совершенно отличного от того, каким я представлял ответ? Я пытаюсь работать над своими коммуникативными навыками. Это случается со мной часто, когда мои вопросы неправильно понимают огромное количество людей. Какой термин я бы использовал, чтобы вы могли понять фактический ответ ниже, вместо термина, который я фактически использовал?
Я рад, что тебе это удалось. Ваш вопрос в целом ясен :)





sudo apt-get install nodejssudo apt-get install apache2sudo npm install -g pm2sudo systemctl status apache2localhostcd /home/homer-simpson/websites/home/homer-simpson/websites/hello-app/var/www/html/hello-app/hello.jssudo chmod 755 hello.jshello.jsnode hello.jshttp://localhost:4567/sudo pm2 start hello.jssudo pm2 startup systemdpm2 savesudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart/etc/apache2/sites-available/000-default.conf000-default.confsudo systemctl restart apache2http://localhost/hello-appПривет, мир!
/home/homer-simpson/websites/another-appsudo pm2 start another-app.jspm2 saveLocation с номером порта нового приложения (должен быть уникальным): sudo xed /etc/apache2/sites-available/000-default.confsudo systemctl restart apache2hostnamehostname tazerface/etc/hosts/etc/hostnamepm2 listhttp://tazerface/hello-appsudo a2enmod sslsudo openssl req -x509 -nodes -days 999999 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt tazerfaceopenssl verify apache-selfsigned.crtsudo xed /etc/apache2/sites-available/000-default.confsudo systemctl restart apache2https://tazerface/hello-appпривет.js
var http = require('http');
//create a server object:
const port = 4567
http.createServer(function (req, res) {
res.write('Hello World!'); //write a response to the client
res.end(); //end the response
}).listen(port); //the server object listens on port 4567
// Console will print the message
console.info(`Server running at ${port}`);
000-default.conf (без ssl)
<VirtualHost *:80>
ServerName example.com
<Directory /var/www/>
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /hello-app>
ProxyPass http://127.0.0.1:4567
ProxyPassReverse http://127.0.0.1:4567
</Location>
</VirtualHost>
000-default.conf (ssl)
# The only thing in the firewall that needs to be open is 80/443
<VirtualHost *:80>
Redirect / https://tazerface/
</VirtualHost>
<VirtualHost *:443>
ServerName tazerface
<Directory /var/www/>
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /hello-app>
ProxyPass http://127.0.0.1:4567
ProxyPassReverse http://127.0.0.1:4567
</Location>
</VirtualHost>
НЕ размещайте код вашего сервера node.js в корне документа apache!
Потому что браузер может получить ваш код и найти риски безопасности и потенциальные учетные данные жесткого кода. Неужели так сложно представить себе, что может случиться, если коды ваших дырявых приложений попадут не в те руки? Дело не в личных предпочтениях, а в безопасности и передовой практике. Нет абсолютно никакой причины, по которой клиент мог бы загрузить код вашего сервера node.js. Но что я знаю, 10+ лет работы администратором Linux и 4+ года инженером по разработке. Но, пожалуйста, продолжайте давать плохие советы...
Вы можете отказаться от всей обработки статических активов в apache. Апач работает как обратный прокси. Переместите свой код в другое место, например. /opt/myapp, удалите директиву «<Directory» из конфигурации apache, и все будет готово.
@Марк, я последовал твоему совету и протестировал его на своей машине, и он работает, и я обновил инструкции. Надеюсь, я не допустил никаких новых ошибок безопасности. Спасибо за ваше время!
Отвечает ли это на ваш вопрос? Запустите сценарий оболочки и сразу же запустите его в фоновом режиме, но сохраните возможность проверять его вывод