Какой самый простой способ развернуть приложение node в Linux Mint?

У меня есть приложение node, оно отлично работает в VS Code, и я могу запустить его с помощью команды сценария из окна терминала.

Это просто утилита, которую я хотел бы запустить в фоновом режиме на моей машине разработки. Он отслеживает нажатия клавиш и устанавливает индикатор занятости/ожидания для других приложений. Он использует iohook, если вам интересно, чтобы сделать это.

Как я могу развернуть его, чтобы он просто работал в фоновом режиме (все время, в том числе при запуске)? Я собираюсь развернуть его как веб-сервер, чтобы мне не приходилось возиться со службами Linux.

У меня уже есть apache, nginx и все остальные компоненты веб-сервера, установленные из многочисленных руководств, которые я сделал, но я не знаю, как выполнить развертывание на любом из них.

Я пробовал это:

https://plainenglish.io/blog/deploying-a-localhost-server-with-node-js-and-express-js

но это позволяет запускать только из кода vs или командной строки, это не настоящий «сервер», который работает все время, не требует окна терминала и запускается при запуске системы.

Мне нужно, чтобы это работало от apache или nginx или чего-то в этом роде.

https://www.ionos.com/digitalguide/websites/web-development/nodejs-for-a-website-with-apache-on-ubuntu/

Я пытался:

Чтобы получить доступ к скрипту Node.js из Интернета, установите модули Apache proxy и proxy_http с помощью команд:

sudo a2enmod proxy
sudo a2enmod proxy_http

После завершения установки перезапустите Apache, чтобы изменения вступили в силу:

sudo service apache2 restart

@ Конрад, нет, сэр. Это не переживет перезагрузку. Я хочу сделать свою машину-разработчика «веб-сервером» в смысле devops, с некоторым процессом «веб-сервера», запускающим мое приложение как один из его «веб-сайтов». Вместо того, чтобы публиковать мое приложение nodejs на внешнем «веб-хосте» в хостинговой компании, я хочу опубликовать его на своей машине разработки. Есть смысл?

Stupid Questions 16.01.2023 17:52

Я этого не понял, но вот как запустить команду при запуске системы askubuntu.com/questions/228304/…

Konrad 16.01.2023 17:55

Я собираюсь развернуть его как веб-сервер, чтобы мне не приходилось возиться со службами Linux — я тоже этого не понимаю.

Konrad 16.01.2023 17:56

@Конрад, посмотри последнюю ссылку в моем отредактированном вопросе. Это то, что я пытаюсь сделать. Может быть, я использую неправильные модные словечки, чтобы вы поняли.

Stupid Questions 16.01.2023 18:05

Если вы хотите использовать прокси, ваш сервер должен работать одновременно. Вы не можете запустить сервер узла с помощью apache или nginx

Konrad 16.01.2023 18:10

@Konrad, в этой ссылке прямо вверху написано: «Хотя сценарии JavaScript Node.js с открытым исходным кодом можно запускать из командной строки с помощью экрана, запуск сценариев как службы с использованием диспетчера процессов PM2 дает сценариям более надежный набор. поведения. При таком запуске в качестве службы сценарии автоматически перезапускаются при перезагрузке сервера или сбое сценария». Это как запустить приложение nodejs на apache. Так что да?

Stupid Questions 16.01.2023 18:20
pm2 это менеджер процессов, устанавливаемый через npm, к apache отношения не имеет
Konrad 16.01.2023 18:25

@Konrad, спасибо за ваши усилия и, пожалуйста, посмотрите мой ответ ниже, который я протестировал и работает. Теперь вы понимаете, теперь, когда вы видите ответ? Пожалуйста, помогите мне в будущем, что такого было в моем вопросе, что оттолкнуло вас от решения, совершенно отличного от того, каким я представлял ответ? Я пытаюсь работать над своими коммуникативными навыками. Это случается со мной часто, когда мои вопросы неправильно понимают огромное количество людей. Какой термин я бы использовал, чтобы вы могли понять фактический ответ ниже, вместо термина, который я фактически использовал?

Stupid Questions 16.01.2023 22:26

Я рад, что тебе это удалось. Ваш вопрос в целом ясен :)

Konrad 16.01.2023 22:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
10
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

[Linux Mint] Запуск веб-приложения на локальном компьютере

Первый сайт

  1. [Терминал] Установите node.js: sudo apt-get install nodejs
  2. [Терминал] Установите apache: sudo apt-get install apache2
  3. [Терминал] Установить PM: sudo npm install -g pm2
  4. [Терминал] запустить апач: sudo systemctl status apache2
  5. [Браузер] тестовый апач: localhost
  6. [Терминал] Перейдите в корневую папку вашего веб-сайта. Это может быть где угодно: cd /home/homer-simpson/websites
  7. [Nemo][root] Создать папку приложения: /home/homer-simpson/websites/hello-app
  8. [Nemo][root] Создайте файл приветствия node.js: /var/www/html/hello-app/hello.js
  9. [Терминал] Сделать hello.js исполняемым: sudo chmod 755 hello.js
  10. [xed][root] Создайте приложение node.js в этом файле: см. список hello.js
  11. [Терминал] Запустить из терминала в качестве теста: node hello.js
  12. [Браузер] Тестовый веб-сайт: http://localhost:4567/
  13. Завершите работу приложения узла CTRL+C
  14. Запустить приложение в личку: sudo pm2 start hello.js
  15. [Терминал][root] Добавить PM в скрипты запуска: sudo pm2 startup systemd
  16. [Терминал][root] Сохранить приложения PM: pm2 save
  17. [Терминал] включить модули Apache: sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart
  18. [Nemo][root] Открыть как root конфигурация apache: /etc/apache2/sites-available/000-default.conf
  19. [xed][root] добавить/заменить конфигурацию для вашего сайта: см. список 000-default.conf
  20. [Терминал] перезапустить апач: sudo systemctl restart apache2
  21. [Браузер] проверить сайт: http://localhost/hello-app
  22. Привет, мир!

Последующие сайты:

  1. [Nemo][root] Создайте новую папку приложения в корне вашего сайта: /home/homer-simpson/websites/another-app
  2. [Nemo][root] Скопировать туда скрипты и сделать исполняемым
  3. [Терминал] Запустить приложение в личке: sudo pm2 start another-app.js
  4. [Терминал][root] Сохранить конфигурацию PM: pm2 save
  5. [Терминал][root] Добавьте новый веб-сайт в конфигурацию apache под новым тегом Location с номером порта нового приложения (должен быть уникальным): sudo xed /etc/apache2/sites-available/000-default.conf
  6. [Терминал] перезапустить апач: sudo systemctl restart apache2

Посмотреть его по локальной сети:

  1. [Брандмауэр] Установите профиль «Домашний». Входящие запрещены, исходящие разрешены, включено
  2. [Брандмауэр] Добавить правило, простая вкладка, порт 80, имя "Apache"
  3. [Терминал] Получите имя хоста: hostname
  4. [Терминал][root] Измените имя своей машины на что-нибудь прикольное: hostname tazerface
  5. [xed][root] Измените имя хоста в /etc/hosts
  6. [xed][root] Измените имя хоста в /etc/hostname
  7. Перезагрузите тазерфейс. <= теперь это имя вашей машины. Ого, такое классное имя.
  8. Убедитесь, что pm2 запускается автоматически и ваши приложения указаны как «онлайн»: pm2 list
  9. [телефон][браузер] Протестируйте свой сайт: http://tazerface/hello-app
  10. Если это не работает, убедитесь, что tazerface не использует Wi-Fi, предоставляемый сетевым ретранслятором. Он должен быть в той же сети Wi-Fi, что и телефон (но может быть в варианте с частотой 5 ГГц или 2,4 ГГц).

Добавить бесплатный ssl-сертификат:

  1. [Терминал] Добавить модуль ssl: sudo a2enmod ssl
  2. [Брандмауэр] Добавить правило, простая вкладка, порт 443, имя "Apache ssl"
  3. [Терминал] создать самоподписанный бесплатный сертификат: sudo openssl req -x509 -nodes -days 999999 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
  4. [Терминал] Оставьте все ответы по умолчанию (нажав Enter), кроме общего имени, введите tazerface
  5. [Терминал] Тестовый сертификат: openssl verify apache-selfsigned.crt
  6. [Терминал] Замените содержимое .conf на ssl .conf, приведенный ниже: sudo xed /etc/apache2/sites-available/000-default.conf
  7. [Терминал] Перезапустите Apache: sudo systemctl restart apache2
  8. [телефон][браузер] Протестируйте свой сайт: https://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!

Marc 17.01.2023 13:01

Потому что браузер может получить ваш код и найти риски безопасности и потенциальные учетные данные жесткого кода. Неужели так сложно представить себе, что может случиться, если коды ваших дырявых приложений попадут не в те руки? Дело не в личных предпочтениях, а в безопасности и передовой практике. Нет абсолютно никакой причины, по которой клиент мог бы загрузить код вашего сервера node.js. Но что я знаю, 10+ лет работы администратором Linux и 4+ года инженером по разработке. Но, пожалуйста, продолжайте давать плохие советы...

Marc 17.01.2023 20:52

Вы можете отказаться от всей обработки статических активов в apache. Апач работает как обратный прокси. Переместите свой код в другое место, например. /opt/myapp, удалите директиву «<Directory» из конфигурации apache, и все будет готово.

Marc 18.01.2023 07:47

@Марк, я последовал твоему совету и протестировал его на своей машине, и он работает, и я обновил инструкции. Надеюсь, я не допустил никаких новых ошибок безопасности. Спасибо за ваше время!

Stupid Questions 21.01.2023 01:35

Другие вопросы по теме