EC2实例上的节点js应用程序 – 域名

我第一次使用EC2实例,我有一个使用pm2运行我的节点应用程序的微型实例

var express = require('express'); var app = express(); var path = require("path"); var PORT = process.env.PORT || 3000; // Serve Static files app.use(express.static(path.join(__dirname, 'public'))); app.listen(PORT); console.log('%d App listening on %d', process.pid, PORT); 

所以这将运行的端口3000(这是好的?)。 所以我可以去mypublicip:3000 ,看看我的应用程序正在运行

我想要做的是去我的域名mydomainname.co.uk并呈现该网站。 域名购买了彻底123注册

任何人都可以指出我正确的方向 – 我已经设置弹性IP,但不知道从哪里去

任何帮助赞赏

有几个步骤,你需要遵循做你所问的。 您需要做的第一件事是将您的域名与您的EC2实例相关联。

要做到这一点,您可以将123-reg中的Alogging指向该弹性IP,或者(我build议这样做)将您的域的名称服务器指向您在AWS上的Route 53中创build的托pipe区域。 做后者的程序在这里 。

一旦完成,TTL已经过期(意味着DNS服务器有机会更新它们的值),您可以通过尝试ssh your-username@your-domain.co.uk来testing您的域名设置是否正确your-username@your-domain.co.uk使用你可能使用的公共IP。

之后,或等待TTL过期时,您应该检查您的EC2实例的安全configuration,以确保端口80是开放的(因为我假设您还不想打扰SSL证书安装)。

如果您真的想在此时运行您的节点应用程序,请使用pm2,接下来需要设置Authbind以允许pm2用户启动监听受限制端口的进程。 从命令行:

 $ sudo apt-get install authbind $ sudo touch /etc/authbind/byport/80 $ sudo chown %user% /etc/authbind/byport/80 $ sudo chmod 755 /etc/authbind/byport/80 $ authbind --deep pm2 update 

然后添加到您的.bashrc文件中:

 alias pm2='authbind --deep pm2' 

好的,所以上面的内容会让你回到你在问题中提出的问题。 然而,我有一些笔记。

1)请不要按照我最后一条关于Authbind的说明。 让非root用户(即使在受控级别)在端口80上启动任务是一个非常非常不好的习惯。只需将nginx安装并configuration为应用程序的反向代理即可。 这是正确的做法,并不难。 这篇文章是过时的,但涵盖了很多真正有用的地方,我仍然回去参考。

2)我使用Route 53提到。这有三个原因。 首先,让您的所有configuration(AWS控制台)而不是两个(AWS + reg-123)更容易。 其次,我从来没有使用过reg-123,但是Route 53比大多数域名卖家的DNS设置web应用更容易使用。 第三,它比大多数要进一步,让你做一些事情,比如设置穷人的负载平衡和其他规则,这些规则在你的应用程序的生命周期中稍后有用。

希望有所帮助。

如果您只是在寻找临时解决scheme,那么您可以在端口80上启动服务器,如果您使用的是http443如果您使用的是https并在安全组中打开此端口。 现在你可以访问你的网站在mydomainname.co.uk而不是mydomainname.co.uk:3000

如果您正在设置一个将被所有人使用的应用程序,则不build议使用上述方法。在这种情况下,您应该使用nginx反向代理或使用端口转发,并将该实例上的3000端口指向80。

请注意,如果您在Linux上使用端口80,则需要执行sudo npm start而不是通常的npm start来启动服务器,因为1-1024个端口称为pipe理端口,您只能使用超级用户/根权限。

这就是我build议你在生产环境中使用端口转发或nginx反向代理的原因,因为如果没有这些方法,你将会以超级用户权限运行你的应用程序,如果出现问题会导致严重的破坏。另外,可能有一些安全问题但我不知道究竟是什么。

链接:

  1. 在生产环境中设置Nodejs