В этой статье я расскажу о размещении приложения Node.js на серверах виртуального хостинга Namecheap с использованием cPanel. В этой статье я не буду обсуждать настройку сервера базы данных или внешнего интерфейса React для вашего веб-приложения. Вместо этого я хочу сосредоточиться на проблемах, с которыми вы можете столкнуться при запуске приложения Node в среде общего хостинга.
== Не откладывайте, принимайте сегодня! ==
Прежде чем вы зайдете слишком далеко на пути разработки своего веб-приложения, рекомендуется разместить стабильную версию в Интернете. Это может быть в вашей производственной среде или в промежуточной среде, аналогичной вашей производственной среде. Большинство людей будут ждать, пока их приложение будет почти завершено, прежде чем размещать его в Интернете, и именно это я сделал при разработке своего первого веб-приложения React и Node. Однако на тот момент у меня было много проблем с запуском моего сервера Node API, и мне также пришлось внести много изменений в мое приложение React. Вот почему я рекомендую размещать онлайн-версию как можно раньше, чтобы вы могли внести коррективы, прежде чем писать слишком много кода.
== Использование виртуального хостинга ==
Серверы виртуального хостинга Namecheap используют cPanel в качестве интерфейса панели управления для управления сервером Apache. Эти инструкции также должны помочь всем, кто использует общий хостинг с cPanel, такой как A2 Hosting и GoDaddy.
У меня также настроен сервер Namecheap с сертификатом SSL, а cPanel по умолчанию перенаправляет весь HTTP-трафик на HTTPS. Таким образом, весь трафик на мой сервер защищен.
Вы найдете множество руководств, в которых рассказывается, как разместить приложение Node на службе хостинга VPS (Virtual Private Server), такой как DigitalOcean. Если вы начинаете с нуля, то хостинг с использованием такой услуги даст вам больше контроля. Но обычно это дороже, чем виртуальный хостинг. И в моем случае я уже заплатил за услугу виртуального хостинга Namecheap.
Некоторые преимущества использования cPanel и виртуального хостинга:
- Управляется с помощью простой веб-консоли управления
- Простота настройки
- Дешево, особенно если вы уже размещаете сайт/домен
- Может легко создавать динамические веб-сайты с использованием других технологий, таких как PHP и т. д., если вы изучаете различные технологии.
Некоторые недостатки:
- Меньше âÃÂÃÂконтроля, поскольку у вас нет доступа к базовой операционной системе
- Не масштабируется
== Куда все идет? ==
Сначала вам нужно создать папку для всех исходных файлов ваших приложений Node. Я создал папку с именем âÃÂÃÂnodejsâÃÂàв каталоге /home/username, а затем в этой папке создаю подпапку для каждого приложения. Теперь загрузите все ваши исходные файлы в эту подпапку. Убедитесь, что вы также включили файл package.json. Вы не загружаете папку âÃÂÃÂnode_modules, так как она будет создана с помощью менеджера пакетов потом.
Помните, что мы просто размещаем сервер Node API в нашем примере архитектуры веб-приложения. Мы не будем размещать приложение React с помощью Node (подробнее об этой теме в следующей статье).
httpsdavenewman.tech/wp-content/uploads/2020/06/Diagram-5_1.jpg Макет папки показывает исходные файлы Node в папке /home/username/nodejs/mynodeapi, а также .htaccess в папке /home/username/public_html/myapi
== Проблема âÃÂàПриложение Node не может получить доступ к портам ==
Самая большая проблема для меня заключалась в том, чтобы запустить мое приложение Node API. Проблема заключалась в том, что пример кода, приведенный в документации по поддержке Namecheap, просто не работал! Он пытается создать https-сервер для прослушивания на порту 80 и http **s**-сервер на порту 443. Однако я всегда получал ошибку EACCESS, говорящую, что у меня нет разрешения использовать эти порты.
== Решение âÃÂàУзлу не нужен доступ к порту! ==
В конце концов я нашел решение, прочитав комментарий пользователя SibProgrammer в ветке о Plesk, еще одной панели управления хостингом. cPanel использует сервер приложений Phusion Passenger для размещения приложений Node, как и Plesk. В итоге:
Когда вы отправляете запрос из своего браузера, он отправляется на сервер Apache, затем в Phusion Passenger, а затем в ваше приложение Node. Вашему приложению Node не нужно владеть портом, так как он обрабатывается вышестоящими серверами приложений Apache и Phusion Passenger.
Это упрощает код для создания https-сервера в вашем файле www.js (или app.js):
* www.js * Тестирование создания http сервера для Namecheap. * Дэйв */ const http = require('http http.createServer(function(request, response) { response.writeHead(200, {'Content-Type': 'text/html response.endh1>Hello Worldh1 listen(process.env .PORT); console.log('Приложение запущено
Несколько замечаний:
— слушать на process.env.PORT (вместо ручной установки 80 или 443). При тестировании я заметил, что process.env.PORT не определен! Но что интересно, в данном случае это не имеет значения.
- Используйте http-сервер, даже если у вас настроен SSL. cPanel настроил Apache для перенаправления всего HTTP-трафика на HTTPS и, следовательно, для ответа на все запросы по HTTPS. Вам не нужно вручную настраивать приложение Node для настройки https-сервера и считывания ваших SSL-сертификатов.
== Заключительные шаги для сервера Node API ==
Теперь это должен быть относительно простой процесс следования инструкциям по настройке вашего приложения Node.
httpsdavenewman.tech/wp-content/uploads/2020/06/Diagram-5_2.jpg Скриншот страницы конфигурации Node.js cPanel
- Выберите подходящую версию Node.js и режим приложения (рекомендуется Production).
- âÃÂÃÂКорень приложения âÃÂàбудет папкой, в которую вы ранее загрузили исходные файлы (âÃÂànodejs/mynodeapiâÃÂàв приведенном выше примере).
- âÃÂÃÂApplication URLâÃÂàбудет URL-адресом, используемым для доступа к вашему API (âÃÂÃÂmyapià ¢ÃÂàв примере). Имя, которое вы укажете в этом поле, будет использоваться для создания подпапки в вашей папке /home/username/public_html. Оно не должно совпадать с именем папки «Корень приложения» (но часто будет).
- «Файл запуска приложения» будет иметь имя www.js или app.js в зависимости от того, как вы создали приложение Node.
- Это зависит от вас, как вы хотите настроить файл журнала Passenger.
- После того, как вы создали приложение, вы увидите кнопку «Запустить установку NPM». ¢ÃÂÃÂ. Запустите это, и он создаст папку «node_modules» со всеми зависимыми модулями, которые нужны вашему приложению.
После того, как вы настроите свое приложение Node и запустите его, оно создаст подпапку в вашей папке /home/public_html. Теперь вам нужно будет перейти в эту папку и отредактировать файл .htaccess и добавить следующую строку:
RewriteEngine off
Это не позволяет серверу Apache переписывать (или перенаправлять) какие-либо запросы, которые должны без изменений направляться на ваш сервер API.
И это все! Теперь ваше приложение Node API должно работать и отвечать на ваши вызовы API.
== Так что же дальше? ==
Теперь, когда мы настроили сервер Node API, мы можем изменить интерфейс React в нашей среде разработки, чтобы он указывал на этот сервер API. Или мы могли бы использовать Postman для тестирования наших вызовов API.
В следующей статье мы рассмотрим размещение приложения React на Namecheap и cPanel.