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
上启动服务器,如果您使用的是http
或443
如果您使用的是https
并在安全组中打开此端口。 现在你可以访问你的网站在mydomainname.co.uk
而不是mydomainname.co.uk:3000
。
如果您正在设置一个将被所有人使用的应用程序,则不build议使用上述方法。在这种情况下,您应该使用nginx反向代理或使用端口转发,并将该实例上的3000端口指向80。
请注意,如果您在Linux上使用端口80,则需要执行sudo npm start
而不是通常的npm start
来启动服务器,因为1-1024个端口称为pipe理端口,您只能使用超级用户/根权限。
这就是我build议你在生产环境中使用端口转发或nginx反向代理的原因,因为如果没有这些方法,你将会以超级用户权限运行你的应用程序,如果出现问题会导致严重的破坏。另外,可能有一些安全问题但我不知道究竟是什么。
链接:
- 在生产环境中设置Nodejs