Установите сервер для приложения веб-службы node.js.

Я создал приложение, работающее с node.js, которое позволяет извлекать некоторые данные через REST API.

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

Может ли кто-нибудь объяснить мне шаги, чтобы сделать это? Я знаю, что существуют некоторые онлайн-сервисы, такие как Heroku, но я хочу сделать это сам.

Спасибо


person tomahim    schedule 27.10.2013    source источник


Ответы (2)


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


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

Вы не хотите обслуживать веб-сайт со своего персонального компьютера, потому что каждый раз, когда ваш компьютер выключен, веб-сайт будет недоступен. Вы не хотите брать на себя такую ​​ответственность за свой компьютер, поэтому большую часть времени люди предпочитают арендовать серверное пространство у компаний, единственная цель которых — предоставить вам пространство / пропускную способность на простом компьютере, который всегда включен. Их часто называют VPS (виртуальные частные серверы).

Итак, первый шаг, который я бы порекомендовал, — это приобрести VPS для себя. Digital Ocean — отличный сервис, с помощью которого вы можете получить надежный сервер за 5 долларов в месяц. Я бы порекомендовал начать с него. Есть множество других компаний, у которых вы можете получить VPS, если хотите, вероятно, самой популярной альтернативой является linode.

Когда у вас есть VPS, войдите в него, используя ssh. Обычно это будет выглядеть примерно так:

ssh [email protected]

... с числом в конце, являющимся IP-адресом вашего сервера. Большинство VPS представляют собой разновидность Linux, поэтому важно знать интерфейс командной строки Linux. После того, как вы все настроите на своем сервере, вам нужно будет сделать несколько вещей. Это то, что я обычно делаю, чтобы:

Установить вим

Для меня vim — самый простой способ редактировать файлы через командную строку. Это, конечно, может быть не для всех - некоторые люди предпочитают emacs, а некоторые - nano, который намного проще. Если вам интересно узнать о vim, в сети есть множество руководств. Если вам не нравится работать с vim, я бы порекомендовал вместо этого использовать nano везде, где я упоминаю об этом.

Чтобы установить его, мы можем использовать apt, который представляет собой aptitude, менеджер пакетов в Ubuntu, вариант Linux, который я буду использовать в этом ответе, поскольку он популярен для серверов и используется по умолчанию для цифрового океана. Просто запустите apt-get update, чтобы убедиться, что пакеты обновлены, затем apt-get install vim, чтобы установить в vim.

Добавьте свой ssh-ключ

Добавьте свой ключ ssh в ~/.ssh/authorized_keys, чтобы вам не требовался пароль для входа в систему. Если вы не знакомы с ключами ssh, по сути, это пара криптографических ключей, которые можно использовать, чтобы избежать необходимости каждый раз авторизоваться с паролем. Добавляя свой открытый ключ в файл ~/.ssh/authorized_keys, вы, по сути, сообщаете серверу: «Это мой компьютер, поэтому вам не нужно спрашивать пароль для входа в систему». На Github есть отличное руководство по созданию ключей. Как только это будет сделано, вы можете открыть файл с помощью vim, перейти в режим вставки и вставить открытый ключ с вашего локального компьютера. Сохраните и выйдите, и все готово.

Установите node.js

Если вы пытаетесь запустить приложение узла, вам, конечно же, понадобится узел! Установка узла в Linux немного отличается, потому что установщик узла, который, я уверен, вы использовали локально, является графическим, а здесь у вас есть только командная строка. К счастью, с этот набор не намного сложнее инструкций, которым вы можете точно следовать. Убедитесь, что вы не просто делаете apt-get install nodejs по умолчанию, так как это установит старую версию. Сделайте пару шагов после второго абзаца, чтобы добавить ppa и получить более новую версию.

Разверните свое приложение

Итак, у вас есть машина с узлом, на которой теоретически может быть запущено ваше приложение. Это хорошие новости. Теперь нам нужно установить приложение на машину. Есть несколько способов сделать это. Если у вас локально установлен ruby, вы можете использовать capistrano, популярное решение для развертывания. Более легкий подход, который я часто предпочитаю, — это развертывание, хотя я не думаю, что он будет работать в Windows. Вы также можете просто использовать github или bitbucket — отправьте свое приложение в удаленное репо, а затем клонируйте его с вашего VPS (убедитесь, что apt-get install git и сначала настроили свое имя пользователя — если это частное репо, вы, вероятно, сгенерируете и добавите ключ чтобы получить доступ, чтобы потянуть его вниз). Однако вам удастся это сделать, перенесите файлы.

Протестируйте свое приложение

На своем VPS cd туда, куда было помещено ваше приложение, и запустите его. Убедитесь, что все работает нормально, и нажмите http://YOUR_IP:PORT, просто ваш IP-адрес, за которым следует номер порта, на котором работает ваше приложение, после двоеточия. Вы должны увидеть свое приложение. Если не вернуться к терминалу, возможно, произошел сбой. Иногда вы можете найти случайности, когда настраиваете его в другой системе. Если ваше приложение использует базу данных, вам может потребоваться настроить и ее. Вы можете погуглить «имя базы данных установки Ubuntu» и найти несколько учебных пособий — в Digital Ocean есть довольно солидная библиотека самих учебных пособий такого типа.

Установить нгинкс

Nginx — отличный способ обслуживать несколько приложений на одном компьютере, а также обрабатывать доменные имена и тому подобное. Я написал статью о том, как настроить nginx, которую вы можете прочитать, чтобы изучить основы и установить его. Как только это будет сделано, вы можете связать свое приложение с файлом proxy_pass. Вместо try_files, что статья делает со статическими файлами сервера, просто добавьте оператор proxy_pass к порту, на котором работает ваше приложение, и nginx направит трафик прямо к вашему приложению. Вот пример, если ваше приложение работает на порту 1234, а ваше доменное имя example.com.

server {
  server_name example.com;

  location / {
    proxy_pass http://localhost:1234;
  }
}

Это просто возьмет трафик, поступающий в поле от example.com, и передаст его вашему приложению, что здорово.

Приведите свой домен в порядок

Я должен предположить, что вы не хотите требовать, чтобы люди использовали IP-адрес для доступа к вашему приложению, и вам нужно доменное имя. Возьмите его откуда угодно, и как только он у вас появится, вам нужно отредактировать записи DNS. Я обнаружил, что для этого проще всего использовать dnsimple, так как не у каждого регистратора доменов есть надежная обработка записей DNS, и вы можете сохранить все свои управление DNS в одном месте. Теперь просто поместите запись A в корень вашего домена, указав ее на IP-адрес вашего VPS. После того, как вы дадите ему пару минут на распространение записей, попадание в этот домен должно перейти прямо на ваш сервер - фантастика.

Настало время проверить и убедиться, что ваше приложение работает правильно и что ваша конфигурация nginx верна (и что вы перезагрузили nginx). Убедитесь, что в вашей конфигурации server_name отражает домен, который вы указали для своего VPS. Убедитесь, что порт в proxy_pass совпадает с портом, на котором работает ваше приложение. Как только это будет подтверждено, перейдите в домен, и, если вы все сделали правильно, появится ваше приложение. Ого!

Запустите его на рабочем сервере

Отлично, мы запустили наше приложение, и оно размещено в Интернете для всеобщего обозрения. Как раз пришло время сидеть сложа руки и позволить всем бросать вам деньги, что обычно происходит всякий раз, когда вы получаете сайт. Но не откидывайтесь слишком быстро, потому что последнее, что нам нужно, — это убедиться, что это приложение остается и продолжает работать, даже если что-то пойдет не так, или вы выйдете из своего VPS, чтобы вам не всегда приходилось держать терминал. открытое окно с запущенным приложением. Для этого мы можем использовать то, что некоторые называют рабочими серверами — серверы, созданные специально для обеспечения того, чтобы ваше приложение работало в фоновом режиме и постоянно работало. К счастью, у Node есть несколько из них с открытым исходным кодом, мой любимый — pm2. Посетите эту страницу, прочитайте инструкции по началу работы, установите pm2 на свой компьютер и запустите приложение. Процесс может выглядеть примерно так:

npm install pm2 -g
cd path_to_my_app
pm2 start app.js

Поскольку вы запустили его на том же порту, ваша конфигурация nginx должна остаться прежней, и ваше приложение все еще должно работать, если вы посещаете домен.


Фу, это был долгий процесс. Вероятно, больше, чем вы ожидали — имеет смысл, почему существует что-то вроде героку. Так действительно ли стоит запускать и поддерживать сайт самостоятельно? Я бы сказал, что да, и я размещаю все сайты и приложения, которые запускаю таким образом. Вот почему:

  • обучение: я много узнаю о том, как все работает таким образом, и становлюсь намного лучше в сисопах.
  • стоимость: вы можете разместить до 20 сайтов в одной цифровой коробке за 5 долларов. хостинг копейки.
  • управление: Heroku иногда выходит из строя, и это отстой, потому что все, что вы можете сделать, это подождать, пока они не восстановят его. Если мой сайт не работает, это моя вина, и я могу найти причину и исправить ее.

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

Наконец, я хочу отметить, что это, без сомнения, самоуверенное руководство. Есть множество других инструментов и других способов сделать эти вещи — рабочий процесс, который у меня есть, — это именно то, как я предпочитаю делать вещи. Во что бы то ни стало, не стесняйтесь возиться и приспосабливать рабочий процесс к своим потребностям, как только он у вас за поясом! Здесь также можно добавить множество других подробностей о настройке различных баз данных, улучшении процесса развертывания/перезапуска и более надежной защите вашего устройства. Хотелось бы услышать любые отзывы и добавить любую из этих частей, если вы или другие заинтересованы.

person Jeff Escalante    schedule 28.10.2013
comment
Отличный гайд, большое спасибо! Я согласен, что это много работы, я рассмотрю возможность использования Digital Ocean, но основные причины, по которым я хочу разместить его самостоятельно, таковы: я хочу узнать, как это работает, и мое приложение узла находится в альфа-версии. Я просто хочу использовать свой API в нескольких клиентских приложениях, которые я разработаю в ближайшие несколько месяцев (приложение для браузера и смартфона, вот мне нужен онлайн-API, чтобы иметь возможность использовать его везде, где я хочу). Затем, если он работает хорошо, предложите мой API другим людям. Я не хочу платить за онлайн-сервис за то, что я сначала буду использовать сам, не беспокойтесь, если мое приложение не работает весь день! - person tomahim; 28.10.2013
comment
Еще одна вещь, поэтому, если бы я все понял, если я хочу разместить свое приложение на своем компьютере, мне нужно настроить свой компьютер как VPS и выполнить следующие шаги, которые вы объяснили? (Я читал, что Windows может быть VPS: howtogeek.com/135996) - person tomahim; 28.10.2013
comment
Да, у меня те же причины, по которым я хочу принять себя. Я настоятельно не рекомендую вам использовать свой собственный компьютер для размещения службы, это ужасная идея, поэтому я не хочу советовать вам, как это сделать дальше. Однако VPS — это просто компьютер, поэтому он не сильно отличается, он просто стабилен и всегда работает. - person Jeff Escalante; 28.10.2013
comment
Хорошо, я посмотрю на Heroku, даже если он не всегда стабилен, как вы сказали. Я плохо понимаю их Dynos и то, что вы можете получить с их бесплатным предложением, но я думаю, что это может стать хорошим началом для моего приложения альфа-версии. - person tomahim; 28.10.2013
comment
Даже я могу опоздать на 2 года, но этот пост очень помогает! - person Gene Lim; 14.08.2015

В Google Platform есть ресурсы для разработчиков Node. В руководстве показано, как развернуть простое Node.js приложение на ВМ, управляемые Google App Engine. Подробная информация о ценах приведена здесь.

Amazon Web Service (AWS) также имеет аналогичный сервис. Вот руководство. Уровень бесплатного пользования AWS предназначен для того, чтобы вы могли получить практический опыт работы с AWS бесплатно в течение 12 месяцев после регистрации. Вы можете изучить AWS как платформу для своего Node.js приложения. Проверьте это здесь.

person Chetabahana    schedule 09.04.2015