前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在腾讯云CVM上安装熟悉Node.js

在腾讯云CVM上安装熟悉Node.js

原创
作者头像
黑色技术
修改2018-07-18 11:47:15
6.7K1
修改2018-07-18 11:47:15
举报
文章被收录于专栏:云计算教程系列

介绍

Node.js是一个开源JavaScript运行环境,用于轻松构建服务器端和网络应用程序。该应用程序可在Linux,OS X,FreeBSD和Windows上运行。Node.js应用程序可以在命令行运行,但我们将专注于将它们作为服务运行,以便它们在重新启动或失败时自动重启,并且可以安全地在生产环境中使用。

在本教程中,我们将介绍如何在腾讯云CVM上使用Debian 8系统上设置的Node.js环境。该服务器将运行由PM2管理的Node.js应用程序,并通过Nginx反向代理为用户提供对应用程序的安全访问。

准备

在开始本文之前,您需要安装Debian 8系统到服务器,这里需要创建自定义镜像,详见文档:https://cloud.tencent.com/document/product/213/4942 本文并默认使用的是sudo的非root用户。此外,您做起码的还要启动防火墙,屏蔽一些不必要的端口。您可以按照我们腾讯云安全组配置了解如何配置常规用户帐户并为您的服务器设置防火墙。

还需要您有一个域名,并指向您服务器的地址。

第一步、安装Node.js

我们将使用NodeSource包安装最新的Node.js LTS(长期支持版)版本。

首先,您需要安装NodeSource PPA才能访问其内容。确保您位于主目录中,并使用curl检索Node.js 6.x存档的安装脚本:

代码语言:txt
复制
cd ~
curl -sL https://deb.nodesource.com/setup_6.x -o nodesource_setup.sh

您可以使用nano(或首选文本编辑器)检查此脚本的内容:

代码语言:txt
复制
nano nodesource\_setup.sh

并在sudo下运行脚本

代码语言:txt
复制
sudo bash nodesource\_setup.sh

PPA将添加到您的配置中,您的本地包缓存将自动更新。从nodesource运行安装脚本后,您可以像上面那样安装Node.js包:

代码语言:txt
复制
sudo apt-get install nodejs

该软件包包含二进制文件,因此您无需单独安装。但是,为了使某些软件包能够正常工作(例如需要从源代码编译代码的软件包),您需要安装软件包build-essential:

代码语言:txt
复制
sudo apt-get install build-essential

Node.js运行时现已安装,并准备运行应用程序!我们来编写第一个Node.js应用程序。

创建Node.js应用程序

我们先编写一个Hello World应用程序,作用很简单它只是向任何HTTP请求返回Hello World。这是一个示例应用程序,可以帮助您设置Node.js,您可以用自己的应用程序替换它 ,只需确保修改应用程序以侦听相应的IP地址和端口。

Hello World Code

首先,创建并打开Node.js应用程序进行编辑。在本教程中,我们将使用nano编辑一个名为的示例应用程序:hello.js

代码语言:txt
复制
cd ~
nano hello.js

将以下代码插入文件中。如果您愿意,可以在两个位置(确保使用非管理端口,即1024或更高)替换突出显示的端口:8080

代码语言:txt
复制
#!/usr/bin/env nodejs
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8080, 'localhost');
console.log('Server running at http://localhost:8080/');

现在保存并退出。

此Node.js应用程序只是侦听指定的地址(localhost)和端口(8080),并返回带有HTTP成功代码Hello World由于我们正在侦听 localhost ,因此远程客户端将无法连接到我们的应用程序。

测试应用

要使我们能够测试应用程序,请标记可执行文件:hello.js

代码语言:txt
复制
chmod +x ./hello.js

并运行它:

代码语言:txt
复制
./hello.js
代码语言:txt
复制
Server running at http://localhost:8080/

注意: 以这种方式运行Node.js应用程序将阻止其他命令,直到通过按 Ctrl-C 终止应用程序。

为了测试应用程序,您的服务器上打开另一个终端会话,并通过curl连接到 本地主机

代码语言:txt
复制
curl http://localhost:8080

如果您看到以下输出,则应用程序正常工作并侦听正确的地址和端口:

tHello World

如果看不到正确的输出,请确保Node.js应用程序正在运行,并配置为侦听正确的地址和端口。

一旦你确定它正在工作,按 Ctrl + C终止 应用程序。

安装PM2

现在我们将安装PM2,它是Node.js应用程序的进程管理器。PM2提供了一种管理和守护应用程序的简便方法。

我们将使用与Node.js一起安装的Node模块的包管理器npm在我们的服务器上安装PM2。使用此命令安装PM2。

代码语言:txt
复制
sudo npm install - g pm2

-g选项告诉npm安装全局模块,以便它在系统内可用。

使用PM2管理应用程序

PM2简单易用。我们将介绍PM2的一些基本用途。

开始

您要做的第一件事是使用pm2 start命令在后台运行您的应用程序:hello.js

代码语言:txt
复制
pm2 start hello.js

你的应用程序应该已经启动了,接下来我们看看会输出什么

代码语言:txt
复制
[PM2] Spawning PM2 daemon
[PM2] PM2 Successfully daemonized
[PM2] Starting hello.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid  │ status │ restart │ uptime │ memory      │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ hello    │ 0  │ fork │ 3524 │ online │ 0       │ 0s     │ 21.566 MB   │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

如您所见,PM2自动分配 应用程序名称 (基于文件名,没有.js扩展名)和PM2 ID 。PM2还包含其他信息,例如进程的 PID ,其当前状态和内存使用情况。

如果应用程序崩溃或被杀死,则在PM2下运行的应用程序将自动重新启动,但需要执行额外步骤以使应用程序在系统启动(启动或重新启动)时启动。幸运的是,PM2提供了一种简单的方法,即startup子命令。

startup子命令生成并配置启动脚本启动PM2和管理流程上的服务器引导。您还必须指定正在运行的ubuntu平台,在我们的示例中:

代码语言:txt
复制
pm2 startup systemd

输出的最后一行将包含一个必须以超级用户权限运行的命令:

代码语言:txt
复制
[PM2] You have to run this command as root. Execute the following command:
sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy

运行生成的命令(类似于上面显示,但使用您的用户名而不是sammy)将PM2设置为在启动时启动(使用您自己的输出中的命令):

代码语言:txt
复制
sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy 

这行命令创建一个systemd 单元 ,在启动时为您的用户运行pm2。反过来,这个pm2实例运行hello.js。您可以使用以下命令检查systemd单元的状态:

代码语言:txt
复制
systemctl status pm2

其他PM2用法(可选)

PM2提供了许多子命令,允许您管理或查找有关应用程序的信息。

请注意,不带任何参数的运行pm2将显示一个帮助页面,包括示例用法,它比本教程的这一部分更详细地介绍了PM2的使用。

使用此命令停止应用程序(指定PM2 的App name或id):

代码语言:txt
复制
pm2 stop app_name_or_id

使用此命令重新启动应用程序(指定PM2 的App name或id):

代码语言:txt
复制
pm2 restart app_name_or_id

也可以使用list子命令查找当前由PM2管理的应用程序列表:

代码语言:txt
复制
pm2 list

可以使用info子命令(指定PM2 App name或id)找到有关特定应用程序的更多信息:

代码语言:txt
复制
pm2 info example

可以使用monit子命令提取PM2过程监视器。这将显示应用程序状态,CPU和内存使用情况:

代码语言:txt
复制
pm2 monit

现在您的Node.js应用程序正在运行,并由PM2管理,让我们设置反向代理。

将Nginx设置为反向代理服务器

既然您的应用程序正在运行,并且正在侦听 localhost ,那么您需要为用户设置一种访问它的方法。为此,我们将设置一个Nginx Web服务器作为反向代理。本教程将从头开始设置Nginx服务器。如果您已经安装了Nginx服务器,则可以将location块复制到您选择的服务器块中(确保该位置不会与您的任何Web服务器的现有内容冲突)。

首先,使用apt-get安装Nginx:

代码语言:txt
复制
sudo apt -get install nginx

现在打开默认服务器块配置文件进行编辑:

代码语言:txt
复制
sudo nano /etc/nginx/sites-available/default

删除文件中的所有内容并插入以下配置。一定要用自己的域名替换server_name指令。此外,如果您的应用程序设置为侦听其他端口,请更改port(8080):

代码语言:txt
复制
server {
    listen 80;

    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

这会将服务器配置为响应其根目录下的请求。假设我们的服务器ip解析到example.com上,通过Web网络浏览器访问http://example.com/会发送请求到hello.js,侦听 本地主机的 8080端口。

您可以将其他location块添加到同一服务器,以提供对同一服务器上其他应用程序的访问。例如,如果您还在端口8081上运行另一个Node.js应用程序,则可以添加此位置块以允许通过以下方式访问它:http://example.com/app2

代码语言:txt
复制
     location /app2 {
        proxy_pass http://localhost:8081;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

完成为应用程序添加位置块后,保存并退出。

键入以下命令确保没有引入任何语法错误:

代码语言:txt
复制
sudo nginx - t

接下来,重启Nginx:

代码语言:txt
复制
sudo systemctl restart nginx

接下来,如果已启用防火墙,则允许防火墙通过Nginx通信。

如果您使用的是 ufw ,则可以使用以下命令:

代码语言:txt
复制
sudo ufw allow 'Nginx Full' 

使用 ufw ,您始终可以使用以下命令检查状态:

代码语言:txt
复制
sudo ufw status

如果您正在使用 IPTables ,则可以使用以下命令允许通信到Nginx:

代码语言:txt
复制
sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT

您始终可以通过运行以下命令来检查IPTable的状态:

代码语言:txt
复制
sudo iptables -S

假设您的Node.js应用程序正在运行,并且您的应用程序和Nginx配置正确,您现在应该能够通过Nginx反向代理访问您的应用程序。通过访问服务器的URL(其公共IP地址或域名)来尝试。

结论

恭喜!您现在已经学会在Debian 8服务器上的Nginx反向代理后面运行Node.js应用程序。此反向代理设置足够灵活,可让您的用户访问您要共享的其他应用程序或静态Web内容。继续学习Node.js加油!购买一台服务器试试吧:https://cloud.tencent.com/product/cvm


参考文献:《How To Set Up a Node.js Application for Production on Debian 8》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步、安装Node.js
  • 创建Node.js应用程序
    • Hello World Code
      • 测试应用
      • 安装PM2
      • 使用PM2管理应用程序
        • 开始
          • 其他PM2用法(可选)
          • 将Nginx设置为反向代理服务器
          • 结论
          相关产品与服务
          云服务器
          云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档