Как настроить частный выделенный сервер Ubuntu Node.js?

Я нашел старый ПК и хочу использовать его в качестве выделенного тестового компьютера Node.js.

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

  1. Что мне нужно установить, чтобы правильно запускать приложения Node.js в моей сети на выделенном сервере Ubuntu? Вот список, который я составил, пожалуйста, поправьте меня, если я ошибаюсь. Есть ли еще что-нибудь?
    • SSH
    • samba (ftp или sftp должны быть подходящим вариантом, но так как это закрытая внутренняя сеть, и я должен получить к ней доступ из samba различных ОС, это самый простой способ обмениваться файлами, не принимая во внимание проблемы безопасности... большую часть времени я использую простой текст редактор)
    • файлы "основного сервера Ubuntu"?
    • "ФОНАРЬ" (?)
    • Node.js
    • менеджер пакетов узлов.
  2. Как установить последние версии файлов Node.js, npm и init на сервер Ubuntu. Я видел, что не было простого sudo apt-get install nodejs npm,
  3. Какой тип скрипта мне нужен для запуска моих приложений и куда я могу их поместить (предпочитают нативные скрипты)?

РЕДАКТИРОВАТЬ

После некоторого тестирования я нахожусь в хорошей точке, и вот что я сделал:

  1. Я установил Ubuntu с минимального компакт-диска
  2. когда дело доходит до выбора пакетов, которые я выбрал ТОЛЬКО ssh & samba
  3. обновить систему
  4. установите зависимости, которые вам нужны для запуска node.js
  5. установить последний узел из git
  6. настроить самбу в моем случае я создал папку /var/nodejs для скриптов
  7. поместите свой testApp.js в папку nodejs
  8. запустите свой testApp.js из ssh. * это не сработает

3-обновление системы

sudo apt-get update && sudo apt-get upgrade

4-зависимости

sudo apt-get install g++ curl libssl-dev apache2-utils git-core make

5-инсталляционный узел

git clone git://github.com/ry/node.git
cd node
./configure
make
sudo make install

Самба с 6 настройками sudo nano /etc/samba/smb.conf

[nodejs]
comment = nodejs
workgroup = WG
security = USER
path = /var/nodejs
server string =Node JS
browsable = yes
read only = no
writeable = yes
create mask = 0777

7-testApp.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Node.js\n');
}).listen(80, "192.168.0.1");
console.log('Server running at http://192.168.0.1:80/');

8-Теперь все должно работать... но:

Вы можете запускать nodejs только как администратор, добавляя "sudo" перед командой запуска, иначе как обычный пользователь, у вас нет доступа к большинству портов менее 1000.

A. Как я могу запустить мое приложение на порту 80 без использования sudo?

И, очевидно, если вы запускаете приложение с command sudo node /var/nodejs/testApp.jsесли вы закроете терминал, приложение остановится.

Для этого мы используем скрипт инициализации.

После некоторого прочтения я обнаружил, что upstart изначально установлен на сервере Ubuntu, и это, вероятно, лучший способ запуска ваших приложений.

B. Я знаю, что вам нужно поместить скрипт в /etc/init/ с вашим именем приложения и расширением.conf. Но как это работает?

5 ответов

Что мне нужно установить, чтобы правильно запускать приложения node.js в моей сети на выделенном сервере Ubuntu?

Вам просто нужно установить nodejs. nodejs может работать на любом порту, поэтому вам не нужен Apache или что-либо еще.

как мне установить последние версии nodejs, npm и init файлы на сервере ubuntu

Попробуйте выполнить действия, описанные в этом руководстве: http://howtonode.org/how-to-install-nodejs. Используйте инструкции для Ubuntu.

при перезагрузке приложение запускается автоматически каждый раз

Один из способов сделать это - написать небольшой скрипт, который будет запускаться при загрузке. Скрипт будет содержать инструкцию:

nodejs /path/to/app/app.js

Посмотрите этот SO-ответ о том, как запустить скрипт при загрузке: https://stackru.com/questions/3036/files-and-scripts-that-execute-on-boot

По вашему вопросу, вы звучите так же лениво и нетерпеливо, как и я, поэтому используйте PPA вместо того, чтобы строить из источника. Просто следуйте указаниям Ubuntu для node.js.

На самом деле я настолько ленив, что отказываюсь набирать номера портов, поэтому я проксирую все свои приложения node.js с помощью nginx. (Это также лучший способ, и я могу сказать, что несколько серверов "прослушивают" порт 80). [Руководство по установке Nginx.] Как только вы запустите nginx, следуйте руководству Криса Ли ( http://wiki.nginx.org/Install) для прокси.

Кстати, если вы установили Apache, убедитесь, что вы чистите его sudo apt-get purge apache*, Скорее всего, это сломает ваши php-приложения, но именно поэтому вы работаете с узлом, верно? Просто Google, как запустить PHP с Nignx.

Теперь для выскочки и мониторинга. Просто следуйте этому руководству. ПРИМЕЧАНИЕ: в руководстве есть опечатка, поэтому внимательно прочитайте комментарии.

Что касается самабы, вы там одни.

TL; DR

Ответ A: руководство

Ответ Б: sudo cp my-node-app.conf /etc/init; sudo service my-node-app start

Редактировать 1

Upstart является родной утилитой Ubuntu для запуска фоновых процессов. Прочитайте все об этом здесь.

#!upstart
description "node-app"
author      "me"

env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

respawn
start on runlevel [23]

script
    #set enviroment vars here
    export NODE_ENV=production
    #Uncommit if you need a pid file for monit
    #echo $$ > /var/run/node-app.pid
    exec /usr/bin/node /path/to/app.js 2>&1 >> /path/to/log/file/app.log
end script

#Logs start and stop time timestamps to the file
pre-start script
  echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /path/to/log/file/app.log
end script

pre-stop script
  #Uncomment if you need a pid file for monit
  #rm /var/run/yourprogram.pid
  echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /path/to/log/file/app.log
end script

Теперь запустите и остановите свой процесс, используя service:

sudo service node-app start

переключатель start с остановкой или статусом при необходимости.

Если вы не используете monit, просто удалите строки pid. Я действительно рекомендую использовать monit, потому что вы можете настроить его так, чтобы он оповещал вас по электронной почте, если ваш процесс умирает или возникает ошибка в файле журнала.

В Ubuntu: загрузка при загрузке Nodejs + socket.io пользователем ubuntu:

more /etc/init/noded.conf

# Ubuntu upstart file at /etc/init/noded.conf

description "noded.conf" 

author      "Nguyen Thanh Binh"

start on runlevel [2345]

stop on runlevel [06]

respawn

script

su - ubuntu -c "NODE_ENV=test exec sudo /usr/bin/node /home/ubuntu/server.js" >> /home/ubuntu/log.log &


end script

Что бы я сделал:

  • установить убунту

  • установить Apache и SVN, с репозиториями SVN доступны через http://

  • создать SVN для каждого проекта

  • создать svn commit hook для автоматического развертывания скриптов в папку

/ SVN // Крючки / после совершения


REPOS="$1"
REV="$2"

cd /var/target/path
svn cleanup /var/target/path/
svn checkout -q --force file:///svn/ /var/target/path
svn cleanup /var/target/path/
exit 0

/svn//hooks/post_commit.sh


#!/bin/bash

REPOS="$1"
REV="$2"

# Files and directories can be distinguished, as directory paths are displayed with a trailing "/" character.

LOOK=/usr/bin/svnlook
SVN=/svn/
DEV=/var/target/path/

@mkdir /var/tmp/svn
cd /var/tmp/svn
  for changes in `$LOOK changed $REPOS | awk '{print $1 "=" $2;}'`;
  do
        len=${#changes}
        idx=`expr index "$changes" =`;
        directory=${changes:$idx};
        action=${changes:0:$idx-1};
        if [ ${changes:len-1} = '/' ]
        then
            case "$action" in
                "A" ) \
                    mkdir --mode=775 -p $DEV/$directory;
                    chown nobody:nobody $DEV/$directory;
                    chmod 775 $DEV/$directory;
                    ;;
                "D" ) \
                    rmdir $DEV/$directory;
                    ;;
            esac
        else
            case "$action" in
                "A"|"U"|"UU" ) \
                    $SVN export --force --non-interactive -r HEAD -q file://$REPOS/$directory;
                    BASE=`basename $directory`;
                    DIR=`dirname $directory`;
                    chown nobody:nobody $BASE;
                    chmod 775 $BASE;
                    mkdir --mode=775 -p $DEV/$DIR;
                    cp -f --preserve=ownership $BASE $DEV/$DIR;
                    unlink $BASE;
                    ;;
                "D" ) \
                    rm -f $DEV/$directory;
                    ;;
            esac
        fi
  done
echo Updated dev subdomain
exit 1
  • установить nodejs
  • установить nodemon с помощью npm install -g nodemon (из моей головы - пожалуйста, проверьте руководство)
  • создайте файл upstart для сценария js узла в / etc / init

description "nodejs with nodemonn"
author "etc"

start on startup

respawn

script
   cd /var/target/project/dir/
   exec nodemon /var/target/project/dir/main.js
end script

  • Теперь все, что вам нужно сделать, это работать над кодом и зафиксировать

  • когда вы фиксируете код обновляется и скрипт nodejs перезапускается

  • весело кодировать!

Я не думаю, что samba требуется, если вы не хотите разрабатывать на сервере через samba. Если вы захотите это сделать, просто пропустите часть svn и установите samba, но настройте сценарии запуска нодмонов - это избавит вас от многих проблем с ssh-ing.

Я работаю так, потому что это позволяет мне писать и тестировать локально, а затем быстро и легко комментировать код на серверах dev / test / prod.

Чтобы решить проблему с портом 80, просто настройте правило брандмауэра, чтобы перенаправить входящий tcp/80 на tcp/8080 (например) и прослушать сценарий nodejs на этом порту. Более подробная информация здесь: https://serverfault.com/questions/112795/how-can-i-run-a-server-on-linux-on-port-80-as-a-normal-user

ps я не добавил полную пошаговую инструкцию для каждого элемента, потому что существует множество руководств, которые могли бы работать намного лучше, чем я могу

Вы можете использовать модуль forvere для запуска приложения nodejs в фоновом режиме. для полной информации см. это http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever.

и я просто запускаю выделенный сервер Ubuntu с nodejs, и он работает без проблем

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