怎样在Ubuntu 16.04 LTS上设置Koa.js节点应用程序

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

在本教程中,我们将学习如何使用Node.js设置Koa.js Web应用程序进行生产。我们还将使用Apache将示例域与反向代理链接在一起,并学习如何使用适当的流程管理器进行管理。事不宜迟,让我们开始吧。

Node.js,Koa.js和Apache的简要说明

Node.js是基于Chrome V8引擎的快速跨平台JavaScript框架。它同时在桌面和服务器应用程序中使用,并以其单线程事件循环处理而闻名。 Node.js具有一个名为Node Package Manager(NPM)的程序包注册表,其中包含超过一百万个程序包。 NPM软件包(或模块)是Node.js的核心骨干,因为它们是社区驱动的代码,可在您的Node.js应用程序中使用。在我们的Koa.js应用程序中,Node.js是其功能的核心部分。

Koa.js是一个基于Node.js平台的简约Web框架。由流行的Express.js框架背后的同一个团队制作,其目标是通过将中间件从其核心中排除,来进一步最小化已经极简的Express.js框架。 Koa.js的主要特点是没有回调。 Koa.js建立在基于ES6的生成器和ES6功能(例如Promises)上。

Apache是​​流行的开源Web服务器,用作Web服务器的非常基本的起点。在本教程中,我们将使用Apache作为反向代理,这将使我们能够将应用程序链接到示例域。如果您没有域,那么本教程仍然可以使用,唯一的区别是该网站将在您的VPS IP上而不是域上运行。

设置Node.js

与任何Node.js框架一样,您将需要在VPS上安装Node.js。为了本教程的缘故,我将假定您已经在系统上安装了Node.js。如果没有,您可以按照说明进行操作 这里

设置我们的应用程序目录

我们将需要创建一个文件夹,其中将包含应用程序的核心文件。

mkdir site

随时更换 site 以及您要用于目录的其他任何名称。接下来,我们将需要初始化Node.js包文件。转到您刚刚创建的目录,然后运行 npm init,然后完成提示。最后,它应该看起来像这样:

{
  "name": "site",
  "version": "1.0.0",
  "description": "Koa.js Site",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "author": "yourname",
  "license": "ISC"
}

安装Koa.js

现在我们已经建立了目录,我们可以继续安装Koa.js。在当前工作目录中, /site,键入以下内容。

npm install koa

这将从NPM下载Koa.js模块并将其安装在我们的项目目录中,以备将来使用。接下来,我们将创建示例应用程序文件,其中包含我们的应用程序代码。为此,请创建一个 index.js 文件。

nano index.js

进入文件后,创建一个示例应用程序。

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
     ctx.body = 'Hello World';
 });

app.listen(3000);
console.log('Website is live!')

保存并关闭文件。 CTRL +X。

我们将要确保我们的应用程序正常运行。要启动它,运行 node index.js,您会看到 Website is live 在控制台中。

安装Apache

现在我们知道我们的网站可以正常运行,我们可以继续安装Apache及其依赖项。

sudo apt install -y libapache2-mod-proxy-html libxml2-dev

为了使用Apache中的反向代理功能,我们需要启用必要的模块。

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html

其中一些模块可能已经启用,但是仔细检查它们总是很好的。

现在,我们需要编辑Apache的默认配置文件。

sudo nano /etc/apache2/sites-enabled/000-default.conf

在这里,我们需要为我们的应用程序添加一个块。


    ProxyPreserveHost On
    ProxyPass / http://0.0.0.0:3000/
    ProxyPassReverse / http://0.0.0.0:3000

    ServerName localhost

保存文件CTRL +X。

您可能会注意到我们正在使用端口 3000 作为我们的港口 ProxyPassProxyPassReverse IP。由于它与运行Koa.js应用程序的端口相同,因此必须输入正确的端口。

更改完成后,我们将需要重新启动Apache并重新启动我们的Koa.js应用程序。

sudo systemctl restart apache2

这将确保启动我们的Koa.js应用程序时,我们的配置文件处于活动状态并可以正常使用。 Apache重新启动后,导航回您的站点目录,然后像以前一样启动Koa.js应用程序。在网络浏览器中,导航到 http://yourdomain, 要么 http://yourip:,您将看到“ Hello World”。

使用systemd管理我们的应用程序

既然我们已经介绍了创建示例Koa.js应用程序的基础知识,我们意识到在生产环境中,立即启动应用程序是不切实际的。流程经理绝对是必要条件。那就是systemd发挥作用的地方。简而言之,systemd包含为Linux系统提供构建块的软件。与“ init”类似,它提供了一个在系统启动后管理用户进程的系统。对于我们的应用程序,systemd允许我们在系统重新启动后自动启动我们的网站,以防万一有可能中断系统正常运行时间的事件。它还提供了一套在管理我们的应用程序时会派上用场的工具。最好的部分是它内置于Ubuntu 16.04 LTS中,因此我们不需要安装任何其他软件。

创建系统服务

启动应用程序所需的所有内容都将包含在一个名为 service。它包含有关我们的应用程序的详细信息,例如其名称,目录,环境等。要创建我们的系统文件,请打开文本编辑器。

sudo nano /lib/systemd/system/site.service

像这样编辑并保存文件。

[Unit]
Description=desc here
Documentation=https://example.com
After=network.target

[Service]
Environment=NODE_PORT=3000
Type=simple
User=youruser
ExecStart=/usr/bin/node /home/[youruser]/site/index.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

更换 youruser 使用服务器的用户名。以下是重要字段的简要介绍:

After -这通知systemd等待网络接口准备就绪,然后再启动我们的应用程序。
Environment -在这里我们可以为我们的应用程序指定环境变量。我们的Node.js端口就是其中之一。
Type -这通知systemd我们的应用程序可以启动,而不会产生用户特权等。
User -这告诉systemd我们建议使用我们的用户帐户运行该应用程序。以root用户身份运行应用程序可能导致许多安全妥协。
ExecStart -本质上,systemd将运行以启动我们的应用程序的命令,类似于我们之前手动启动它的方式。
Restart -告诉systemd在什么条件下重新启动我们的应用程序。在这种情况下,如果发生错误,我们希望重新启动我们的网站。

启动系统服务

现在,我们准备开始我们的系统服务。

sudo systemctl daemon-reload

每当更改systemd服务文件以使systemd注册所做的任何新更改时,这都是必需的。

然后,启动您的应用程序。

sudo systemctl start site

再次导航到浏览器中的站点,以确认一切正常。

关键的系统管理功能

stop -完全停止应用程序。
restart -停止应用程序,然后在新过程中再次启动它。
enable -告诉systemd每当您启动计算机时都启动该应用程序。
status -显示有关当前正在运行的应用程序的信息,例如正常运行时间,应用程序状态等。

要使用任何这些功能,请运行以下命令。

systemctl  site

结论

我们已经成功设置了Koa.js应用程序,并学习了如何反向代理它以及如何使用systemd对其进行管理。现在您可以扩展您的应用程序并在此示例的基础上进行构建。如果您想了解有关Koa.js的更多信息,以及更多可以做的事情,请访问他们的网站。 网站,以获取更多有用的信息。除此之外,如果您想了解有关systemd的流程管理器的更多信息,请阅读有关它的文档。 这里。最后,如果您想了解有关Apache反向代理的更多信息,请随时检查它们 这里

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com