Как запустить node js на хостинге разберем детали


Node.js: Создание сервера



Новичок Nodejs как на хостинге запустить сервер?

После чего в браузере набираю [адрес сервера] и получаю: Hello World!

Вопрос: как с помощью Nodejs выдать по адресу [сервера] : Hello World! .

По урока создаю скрипт на хостинге server.js

Javascript

После чего иду по адресу [сервера] и ничего не вижу, никакого Hello World ((((((((((((

Для проверки, установил Nodejs себе на ПК и сделал аналогично варианту хостинга
создал server.js файл

Javascript

Сакинул его на C:/
запустил cmd и пишу: node c:/server.js
Запускаю браузер и захожу на http://localhost:8080
Да, я вижу Hello World!

Но как же я могу увидеть Hello World! используя хостинг и Nodejs, пройдя по адресу под домена .
Помогите пожалуйста разобраться

Javascript
07.07.2016, 14:29

Как запустить сессию в nodejs, express?
Здравствуйте, и ещё один вопрос. Как осуществить работу сессий в nodejs и фрэймворком express? .

Ошибка nodejs приложения на хостинге
Здравствуйте, столкнулся с такой вот проблемой, не работает nodejs приложение.

Как запустить сервер (хост) на хостинге?
Есть сервер(я не знаю как назвать то приложение которое запускает ServiceHost). Есть интернет.

Как запустить скрипт Python на хостинге
Здравствуйте! Заранее прошу прощения - с Python сталкиваюсь впервые. Ситуация такова: На хостинге.

Как запустить .ехе файл на сервере, хостинге?
Как запустить .ехе файл на сервере. Нужно запустить и настроить ехе программу на сервере чтобы.

07.07.2016, 19:27 2
Javascript

ошибка гласит, что порт уже занят

для того, чтобы отрисовался ваш файл нужно использовать другой код.

Добавлено через 4 минуты
а ещё нужно настроить проксирование на вашем хостинге.

Javascript
08.07.2016, 14:57 [ТС] 3

$ node sj/public_html/server.js
Server running on port 3060[JS]
но ввожу в ьраузер адрес под домена sj.
и ничего нет

08.07.2016, 14:59 4
08.07.2016, 14:59
11.08.2016, 14:34 [ТС] 5
11.08.2016, 15:36 6
11.08.2016, 17:12 7
14.08.2016, 23:34 8

Если объяснять просто, то за отображение ( не нода ) отвечает apache или nginx, который автоматически ( при заходе на поддомен ) ( т.е. 80 порт ) пытается запустить php/html файл.. js ( nodejs ) по такому принципу не получиться запустить..
что тут нужно понимать.. в nodejs уже встроен apache ( только это не апач, но для понимания пусть будет им ), когда ты говоришь ноду запустить сервер и слушать порт, он по сути делает то же самое что и апач ( которому говоришь слушать порт и вытягивать файлы из такой-то директории ).
НО т.к. на сервере стоит апач и у него уже забиндин порт 80, то нод выдаёт тебе ошибку ( мол порт занят EADDRINUSE ).

Решение: для решения этой проблемы тебе нужно запускать ноду на свободном порту ( этот порт может быть закрыт для внешнего доступа даже ), но настоить апач или nginx таким образом, что бы заходя на 80 порт он тебя виртуально перебрасывал на порт который у тебя в ноде стоит.
ProxyPass и ProxyPassReverse используются для этих целей ( выше есть пример, а так же в сети их полно )

Таким образом, человек заходя на 80 порт виртуально ( апачем ) перебрасывается на другой порт где работает nodejs.

Руководство для начинающих по Node.js от Felix’a¶

В интернете сейчас много информации про Node.js, но, учитывая скорость, с которой идет разработка, достаточно тяжело найти актуальную информацию о том, с чего начать. Это руководство ставит перед собой именно такую цель - оставаться актуальным для последней стабильной версии Node.js.

Сейчас руководство соответствует последним изменениям в версии Node.js 0.4.x., которая является стабильной веткой.

Изучение JavaScript¶

Предполагается, что Вы уже знакомы с JavaScript. Если нет, то можно начать с чтения Eloquent JavaScript, свободно распространяемой книги от Marijn Haverbeke.

Hello World¶

Этот пример продемонстрирует как установить Node.js, включая создание простого http сервера.

Установка Node.js¶

Прежде всего, для того, чтобы использовать Node.js, необходимо иметь под рукой работающую *nix-подобную операционную систему. Рекомендуется Linux или OSX, но также могут подойти FreeBSD или cygwin (под windows). В настоящее время ведутся работы над портированием Node.js под windows, но пока они не доведены до стабильного состояния.

Наиболее распространенный подход для установки Node.js является его компиляция из исходных кодов. Существуют также различные пакеты для пакетных менеджеров, но учитывая то, как часто они обновляются и то, как их обновление может различаться, рекомендуется установка из исходных кодов.

Получить последние исходные коды можно на сайте nodejs.org. Для получения и установки версии 0.4.5 необходимо выполнить следующие команды:

Node.js не имеет внешних зависимостей, кроме python, который используется при сборке. В OSX необходимо установить XCode перед началом установки. В Ubuntu же необходимо выполнить:

Интерактивная оболочка Node.js¶

Если установка прошла без ошибок, то станет доступен вызов интерактивной оболочки Node.js, например:

Интерактивная оболочка (или REPL) удобна для тестирования простых однострочных примеров. Кроме того, она может быть внедрена в любое Node.js приложение. Для того, чтобы выйти из интерактивной оболочки, необходимо просто нажать Ctrl + C.

Оболочка (REPL) обладает множеством удобств, основным среди которых является автодополнение.

Первая программа¶

Для того, чтобы создать приложение для Node.js, необходимо всего лишь создать новый файл с расширением ‘.js’. Например, можно создать файл ‘hello_world.js’ со следующим содержимым:

После того, как файл сохранен, его можно запустить на выполнение из терминала/консоли следующим образом:

hello world http-сервер¶

В наше время вывод на терминал ‘hello world’ не сильно впечатляет. Необходимо идти дальше и написать программу, которая отдает ‘hello world’ по http. Для этого необходимо создать файл ‘hello_http.js’ и поместить в него следующий код:

Для того, чтобы запустить это приложение, необходимо выполнить в терминале/ консоли:

Первое, что бросается в глаза,- это то, что эта программа, в отличие от первой, не прекращается сразу. Это происходит в силу того, что Node.js- приложение будет всегда исполняться, пока не станет ясно, что никакие дальнейшие события невозможны. В этом случае запущенный http сервер - это источник событий, которые будут обеспечивать работу Node.js-приложения.

Чтобы проверить работу сервера, достаточно открыть новую закладку в web-браузере и перейти по следующему адресу. Как и ожидалось, ответом будет: ‘Hello Http’.

В качестве альтернативы, можно воспользоваться терминалом/консолью и, используя curl, протестировать работу сервера:

Теперь необходимо поближе посмотреть на код созданной программы. В первой строке подключается http модуль ядра и присваивается переменной http . О модульной системе будет рассказано более подробно в следующем разделе.

В следующей строке создается переменная server которой присваивается результат вызова метода http.createServer. Аргументом при вызове этого метода является замыкание, которое будет вызываться каждый раз, когда приходит http-запрос.

И в конце вызывается метод server.listen(8080), который указывает Node.js на каком порту требуется работа сервера. Если необходимо запустить сервер на 80-ом порту, то программу необходимо запускать с правами супер пользователя.

Далее, когда в браузере идет обращение к адресу localhost:8080, вызывается замыкание с параметрами req и res. Req - это поток, доступный для чтения, который содержит данные каждого http-запроса (например, подтверждение формы или загрузка файла). Res - это поток, доступный для записи, который используется для отправки данных обратно клиенту. В примере отсылается заголовок 200 OK, а также тело ответа ‘Hello Http’.

Модульная система¶

Для организации программ в виде отдельных файлов Node.js предлагает к использованию модульную систему.

Для демонстрации подхода создадим файл ‘main.js’ со следующим содержимым:

Нетрудно догадаться, что require(‘./hello’) используется для импорта данных из отдельного JavaScript файла. ‘./’ означает, что файл находится в той же директории, что и сам файл ‘main.js’. Также следует обратить внимание на то, что не требуется указывать расширение файла, так как ‘.js’ подставляется по умолчанию.

Далее необходимо создать файл ‘hello.js’ со следующим содержимым:

Тут следует обратить внимание на то, что происходит присваивание свойству ‘world’ объекта ‘exports’. Таким образом объявляется, что модуль ‘hello.js’ экспортирует во вне функцию ‘world’. Объект ‘exports’ доступен в любом модуле и возвращается при каждом вызове функции require при подключении модуля. При запуске ‘main.js’ вывод будет следующим:

Будет не лишним упомянуть, что зачастую объект ‘exports’ переопределяется следующим образом:

Как и ожидается, такое переопределение будет причиной того, что функция require будет возвращать функцию. Такой подход полезен при объекто-ориентированном программировании , где каждый файл экспортирует конструктор одного класса.

Следующая вещь, которую надо понимать при работе с модульной системой, это то, как система работает с вызовами ‘require’, которые не включают относительную подсказку о местоположении подключаемого файла. Например:

Первое, что сделает Node.js - это определит, есть ли модуль ядра с именем http. Если есть, то вернет соответствующую директорию. Но что будет при работе с модулями не относящимися к ядру, как, например, ‘mysql’?

В этом случае Node.js будет искать модуль в каждой директории, начиная с одного из текущих файлов, и проверять есть ли директория с именем ‘node_modules’. Если такая директория найдена, Node.js начнет поиск в ней файла с именем ‘mysql.js’. Если подходящих файлов не найдено и достигнут корень файловой системы (‘/’), Node.js сдается и выбрасывает исключение.

В настоящий момент Node.js учитывает дополнительный изменяемый список альтернативных директорий для импорта. Список доступен через массив require.paths . Однако идет активное обсуждение на тему удаления этой возможности, так что лучше пока не использовать ее.

И наконец, Node.js учитывает файл ‘index.js’, в котором описывается главный файл импорта для директории. Таким образом, если встретится вызов require(‘./foo’) , то Node.js будет пробовать искать файлы и ‘foo.js’ и ‘foo/index.js’.

Использование EventEmitters¶

Node.js реализует шаблон проектирования наблюдатель (рус), используя класс EventEmitter. Всегда, когда есть объект, который является источником событий, Node.js наследует класс этого объекта от класса EventEmitter.

Использовать EventEmitter и его наследников довольно просто. Необходимо лишь вызвать метод ‘on()’ у объекта, генерирующего события, и передать в качестве параметров имя события и функцию обратного вызова. Например:

Как видно, функция on() возвращает ссылку на объект, которому она принадлежит, что позволяет связывать в цепочки вызовов несколько прослушивателей событий.

Если интересует только первое возникновение события, то вместо on() можно использовать функцию once().

Наконец, можно удалить возможность прослушивания событий с помощью функции removeListener. Следует обратить внимание, что аргументами в этой функции являются ссылки на функции обратного вызова, которые необходимо удалить, а не имена событий:

Этот пример идентичен случаю использования метода once().

Что дальше?¶

Теперь у вас есть базовые знания о Node.js и сейчас лучше попробовать написать самостоятельно несколько небольших программ. Лучшее место для начала - это документация по API node.js.

Отладка приложений Node.js¶

Существует много способов отладки Node.js приложений. Лично я предпочитаю отлаживаться как можно меньше и следовать максимально точно руководству по разработке через тестирование .

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

Использование console.log()¶

Самый просто способ понять проблему - это исследовать объекты с помощью console.log(). Объекты можно передавать в качестве параметров:

Или же можно использовать sprintf-подобные возможности для форматирования отладочных сообщений:

Использование отладчика Node.js¶

Если console.log() чем-то не устраивает или есть вероятность, что текущая проблема может быть решена быстрее с помощью точек останова, то наиболее подходящим вариантом будет встроенный Node.js отладчик. Отладчик вызывается легко:

Использование WebKit Inspector¶

Фреймворки¶

Новичку с Node.js вряд ли захочется изобретать колесо, когда потребуется разобрать POST-запрос, маршрутизировать URL или сформировать представление. В этих случаях с большой долей вероятности захочется использовать один из популярных веб-фреймворков. Данный раздел дает беглый обзор основных из них и мое отношение к ним.

Express¶

На текущий момент express - наиболее подходящий фреймворк для большинства Node.js-разработчиков. Он относительно зрелый и построен на базе connect. Поддерживает такие возможности, как маршрутизация, конфигурация, шаблонный движок, разбор POST запросов и многое другое.

В то время, как express уже достаточно цельный фреймворк, он используется в гораздо меньших масштабах по сравнению с такими аналогами, как Rails, CakePHP или Django. Express наболее сопоставим с таким инструментом, как Sinatra и, к сожалению, пока не сделал больших усилий для того, чтобы уйти от Ruby корней в сторону чего-то более естественного для JavaScript. Так или иначе, его использование гораздо проще и быстрее, чем создание своего собственного фреймворка и в настоящий момент это наиболее достойный выбор.

fab.js¶

Думаете, что знаете JavaScript? Подумайте еще раз. Разработчики fab.js, вдохновленные цепочками jQuery, выбрали очень необычный подход. Каждая функция возвращает функцию, устраняя необходимость в именах методов вообще. Тем самым формируется код, напоминающий Lisp.

На данный момент я не считаю, что fab.js готов к промышленной разработке. Но если вы все еще изучаете мир Node.js, то вам абсолютно необходимо попробовать в работе эту библиотеку как минимум один раз. Если альтернативы нет, то fab.js откроет мир, в котором JavaScript не копирует решения Ruby, Python или PHP при создании веб-фреймворков и может развиваться уникальным образом.

Хостинг и Deployment¶

Быстрый Deployment¶

Если вы написали первое приложение для Node.js, то наверняка хотите запустить его как можно быстрее. Вот как это можно сделать:

1. Скопируйте программу на сервер, где приложение будет запущено. Если используется git, то это просто означает, что необходимо сделать клон репозитория из стороннего сервера или сервиса (например GitHub).

2. Предполагая, что проект содержит файл ‘server.js’, необходимо перейти в директорию, в которой содержится этот файл и выполнить:

Этот пример запускает ‘server.js’ внутри screen-сессии. Screen - это утилита, предоставляющая возможность сохранять состояние shell’a даже в случае, если закрыт терминал/консоль, через который происходило соединение с сервером.

Таким образом, теперь можно безопасно закрыть терминал/консоль (из screen выходить через control-a + d), а ‘server.js’ при этом продолжит работать в screen-сессии. Если есть необходимость проверить работу приложения, можно снова соединиться с сервером и выполнить:

Эта команда восстановит соединение с shell’ом, в котором в фоне работает ‘server.js’.

Однако, этот подход рекомендуется только для экспериментального deployment’a. Так как, если в приложении произойдет сбой, screen не попытается перезапустить его. Соответственно, для production окружения этот метод котегорически не рекомендуется.

Как запустить Node.js на обычном хостинге

Вам нравится Node.js ? Хотите использовать Gulp 4 / Grunt / Webpack на обычном хостинге? Но как сделать это? Ведь на стандартных хостингах нет возможности самостоятельной установки программ. Т.е. Вы не можете запустить установку ни одной программы, даже из официальных репозиториев Linux. Есть выход - nvm (Node Version Manager) . С помощью данной утилиты Вы сможете установить и запустить Node.js, npm и любой сборщик, типа Gulp или Grunt на любом стандартном хостинге (даже тех, которые утверждают, что для запуска Node.js требуется покупка тарифа с выделенным сервером). Для установки nvm не требуются права администратора, нужна лишь стандартная оболочка bash и программа wget , а всё это входит в любой дистрибутив Linux, на любом хостинге.

Как установить Node.js, npm на обычном хостинге без прав администратора

Первым делом подключаемся через ssh к серверу . Для этого достаточно команды:

Там где логин и хост ставьте логин, который Вы используете для FTP / SFTP , а хост Вы можете узнать у Вашего хостинг-провайдера. Всё это всегда даётся при регистрации хостинга, либо можно посмотреть в панели управления. Обращаю внимание, что хост для FTP и SFTP может отличаться .

Далее нужно понять, есть ли в домашней директории Вашего аккаунта права на создание файлов и папок . Это можно понять, попробовав создать любую папку в домашней директории аккаунта. Обращаю Ваше внимание, что домашняя директории аккаунта - это НЕ домашняя директория сайта. Домашняя директория аккаунта всегда располагается на один уровень выше и в ней нет никаких файлов и папок, относящихся к Вашему сайту. Так вот. Попробуйте создать там любой файл или папку. Для создания файла / папки Вы можете использовать в консоли команду:

Если не будет никаких сообщений об ошибках, то всё ОК. Удалите тестовый каталог и файл командой:

Но если у Вас будет ошибка, значит создание файлов и папок в домашней директории аккаунта запрещено. Тогда ищем ту папку, в которой у нас есть возможность создавать файлы и папки. Обычно это папка с названием типа private и тому подобным. В данной папке хостинг провайдер разрешает хранить Вам бекапы, логи и любую другую информацию. Сделаем эту директорию домашней, чтобы корректно выполнялись все команды nvm и Node.js. Первым делом давайте запишем себе текущий путь данной директории (это пригодится нам в дальнейшем). Для этого, находясь в директории, где у Вас есть права на создание файлов и папок, выполним команду:

и запишем себе куда-нибудь тот путь, который нам показала консоль.

Затем в домашней директории аккаунта ищем файл .bashrc . Этот файл отвечает за выполнении пользовательских команд во время работы командной оболочки. Чтобы увидеть список файлов, которые есть, выполните команду:

Если данного файла там нет, создаём его и сразу запускаем его редактирование связкой команд:

Запускается текстовый редактор nano и мы можем вносить туда данные. А именно, нам нужно переопределить системную переменную HOME . На работу Вашего сайта это никак не повлияет, это лишь задаст системную домашнюю директории Вашего аккаунта. Нам необходимо вписать следующее:

Сохраняем файл. Для этого сначала нажимаем Ctrl+X , затем Y , затем Enter .

Затем ищем файл .bash_profile (он обязательно будет в домашней директории) и открываем его на редактирование командой:

Вписываем туда строки:

Теперь нам нужно закрыть терминал, открыть его заново и снова подключиться к серверу через SSH. Это необходимо для того, чтобы новые настройки вступили в силу при новом подключении к серверу.

После подключения выполняем:

Если мы всё сделали правильно - мы должны увидеть путь на нашу директорию, в которой мы имеем право создавать файлы и папки.

Теперь нам осталось скачать и запустить nvm (Node Version Manager) :

После завершения скачивания и установки nvm перезапускаем терминал, заново подключаемся по SSH.

Затем открываем на редактирование файл .bashrc (как это сделать я писал ранее), и вписываем туда две строки:

Перезапускаем терминал, заново подключаемся по SSH.

Затем устанавливаем Node.js и пакетный менеджер npm:

После выполнения данной команды у нас установится последняя версия Node.js и npm.

После завершения установки проверим это. Выполним команду:

В консоли появится номер актуальной версии Node.js

Теперь мы можем использовать Gulp 4 / Grunt / Webpack и все другие возможности Node. В том числе, мы можем настроить автоматическую сборку пакетов, автоматическую минификацию и сборку стилей, сжатие изображений при их загрузке и многое другое.

Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
W e b d e v e l o p m e n t b l o g !

Отзывы

prejakdi
terbobe
Юлиан
owherlela
Дарья

Написать отзыв

Success! Your message has been sent.