我发现了一台旧PC,我想将它用作专用的Node.js测试机。
基本上我想在win机器上编写我的应用程序,然后将它们通过samba复制到节点文件夹并通过ssh启动它们。稍后,我会添加一个upstart脚本并将其与samba一起复制到服务器,这样当我重启时,应用程序每次都会自动启动。
sudo apt-get install nodejs npm
。修改
经过一些测试后,我现在处于一个好点,这就是我所做的:
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-setup samba 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以下的大多数端口。
:一种。如何在不使用sudo的情况下在端口80上启动我的应用程序?
显然,如果您使用command sudo node /var/nodejs/testApp.js
启动应用程序
如果你关闭终端,应用程序将停止。
为此,我们使用init脚本。
经过一番阅读后,我发现 upstart 原生安装在ubuntu服务器上,这可能是启动应用的最佳方式。
B中。我知道你需要把你的appname和.conf扩展名放到/ etc / init /中。但是这怎么办?
答案 0 :(得分:13)
我需要安装什么来在我的网络上在专用的ubuntu服务器上正确运行node.js应用程序?
您只需要安装nodejs。 nodejs可以在任何端口上运行,因此您不需要Apache或其他任何东西。
如何在ubuntu上安装最新的nodejs,npm和init文件 服务器
尝试按照本指南中列出的步骤进行操作:http://howtonode.org/how-to-install-nodejs。使用Ubuntu的说明。
每次重新启动应用程序时都会自动启动
执行此操作的一种方法是编写一个将在引导时运行的小脚本。该脚本将包含指令:
nodejs /path/to/app/app.js
查看有关如何在启动时运行脚本的SO答案: https://stackoverflow.com/questions/3036/files-and-scripts-that-execute-on-boot
答案 1 :(得分:3)
根据你的问题,你听起来像我一样懒惰和不耐烦,因此使用PPA而不是从源代码构建。只需按照node.js ubuntu directions。
实际上我很懒,我拒绝输入端口号,因此我用nginx代理我所有的node.js应用程序。 (这也是最好的方法,也是唯一能让多个服务器在端口80上“监听”的方式。 [Nginx的安装指南。]一旦你获得nginx,请关注Chris Lea的guide。(http://wiki.nginx.org/Install)代理。
顺便说一句,如果您安装了apache,请务必清除它sudo apt-get purge apache*
。这很可能会打破你的php应用程序,但这就是你正在运行节点的原因吗?只是google如何使用nignx运行php。
现在为暴发户& monit的。只需按照guide进行操作即可。 注意:指南有拼写错误,请仔细阅读说明。
至于samaba,你自己就在那里。
<强> TL; DR 强>
答案A:guide
答案B:sudo cp my-node-app.conf /etc/init; sudo service my-node-app start
修改1
Upstart是Ubuntu用于启动后台进程的本机工具。阅读所有相关内容here。
#!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,因为您可以将其配置为在您的进程终止或日志文件中发生错误时向您发送电子邮件警报。
答案 2 :(得分:0)
我会做什么:
安装ubuntu
安装apache和SVN,svn repos可通过http://
为每个项目创建一个svn
创建一个svn提交挂钩以将脚本自动部署到文件夹
/ 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
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,但是设置nodemon upstart脚本 - 它将为你节省很多麻烦。
我这样工作,因为它允许我在本地编写和测试,然后快速简便地将代码编写到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
P.S。我没有为每个项目添加完整的逐步说明,因为有很多指南可以比我更好的工作
答案 3 :(得分:0)
在Ubuntu上:ubuntu用户启动Nodejs + socket.io:
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
答案 4 :(得分:0)
您可以使用forvere模块在后台启动nodejs应用程序。 有关完整信息,请参阅此http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever。
我正在运行一个带有nodejs的Ubuntu专用服务器,它可以正常运行