В этой статье я расскажу о размещении приложения 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.