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

在本教程中,我们将学习如何使用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

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

<VirtualHost *:*>
    ProxyPreserveHost On
    ProxyPass / http://0.0.0.0:3000/
    ProxyPassReverse / http://0.0.0.0:3000

    ServerName localhost
</VirtualHost>

保存文件CTRL+ X

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

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

sudo systemctl restart apache2

这将确保在启动Koa.js应用程序时我们的配置文件处于活动状态并可以正常使用。Apache重新启动后,导航回到您的站点目录,然后像以前一样启动Koa.js应用程序。在网络浏览器中,导航到http://yourdomainhttp://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 <function> site

结论

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



Leave a Comment

如何在CentOS 7上安装Oxwall

如何在CentOS 7上安装Oxwall

Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,

如何在Ubuntu 16.10上安装Review Board

如何在Ubuntu 16.10上安装Review Board

使用其他系统?Review Board是一个免费且开源的工具,用于检查源代码,文档,图像等。这是基于网络的软件战

如何在Debian 9 LAMP VPS上安装October 1.0 CMS

如何在Debian 9 LAMP VPS上安装October 1.0 CMS

使用其他系统?October 1.0 CMS是基于Laravel框架构建的简单,可靠,免费和开源的内容管理系统(CMS)

如何使用Ubuntu 15.10在Vultr服务器上安装Xubuntu桌面

如何使用Ubuntu 15.10在Vultr服务器上安装Xubuntu桌面

Xubuntu是XFCE + Ubuntu!XFCE是Ubuntu的轻量级GUI /桌面。Vultr服务器需要其他依赖项,默认情况下未安装这些依赖项。

如何在Debian 9上安装Monica

如何在Debian 9上安装Monica

使用其他系统?Monica是一个开源的个人关系管理系统。可以将其视为CRM(销售团队使用的一种流行工具

如何使用SSL和安全密码保护由Nginx驱动的网站

如何使用SSL和安全密码保护由Nginx驱动的网站

简介SSL(代表安全套接字层)及其后续版本TLS(代表传输层安全性)是需要加密的加密协议。

如何在Fedora 26 LAMP VPS上安装MODX Revolution

如何在Fedora 26 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

如何在Ubuntu 17.04上安装JuliaLang

如何在Ubuntu 17.04上安装JuliaLang

朱莉娅(Julia)通常称为JuliaLang,是一种用于数值计算的编程语言。Julia的速度和C一样快,但是却不牺牲可读性

在Ubuntu 14.04上安装Ruby on Rails

在Ubuntu 14.04上安装Ruby on Rails

Ruby on Rails(RoR)是用Ruby编程语言编写的框架,可让您将Ruby与HTML,CSS和类似的程序结合使用。

在Fedora 28上安装Anchor CMS

在Fedora 28上安装Anchor CMS

使用其他系统?Anchor是用PHP编写的轻量级开源博客CMS。Anchors源代码托管在GitHub上。本指南将向您展示

将Debian 9升级到Debian 10

将Debian 9升级到Debian 10

简介Debian 10(Buster)是Debian 9(Stretch)的后继产品。它于2019年7月6日发布。在本教程中,我们将升级一个existin

如何管理Linux服务器时区设置

如何管理Linux服务器时区设置

在Linux服务器上正确设置日期和时间非常重要。您的服务器日志和其他重要信息都将反映时区

如何在Ubuntu 16.04上安装Taiga项目管理工具

如何在Ubuntu 16.04上安装Taiga项目管理工具

使用其他系统?Taiga是用于项目管理的免费和开源应用程序。与其他项目管理工具不同,Taiga使用增量

在Ubuntu上配置Nagios:第1部分-Nagios服务器

在Ubuntu上配置Nagios:第1部分-Nagios服务器

本文是有关在Ubuntu 14.04上安装和配置Nagios的2部分系列文章的一部分。第1部分:Nagios服务器第2部分:远程主机概述Nagio

如何访问Vultr VPS

如何访问Vultr VPS

Vultr提供了几种不同的方式来访问VPS以进行配置,安装和使用。访问凭据VPS ar的默认访问凭据

如何在Debian 9上安装Grav CMS

如何在Debian 9上安装Grav CMS

使用其他系统?Grav是用PHP编写的开源平面文件CMS。Grav源代码公开托管在GitHub上。本指南将向您展示如何

如何在Fedora 26 LAMP VPS上安装Pagekit 1.0 CMS

如何在Fedora 26 LAMP VPS上安装Pagekit 1.0 CMS

使用其他系统?Pagekit 1.0 CMS是一个美观,模块化,可扩展,轻量级,免费和开源的内容管理系统(CMS),具有

如何在Ubuntu 16.04 LAMP VPS上安装BigTree CMS

如何在Ubuntu 16.04 LAMP VPS上安装BigTree CMS

使用其他系统?BigTree CMS 4.2是一种快速,轻量级,免费和开源的企业级内容管理系统(CMS),具有广泛的功能。

如何在CentOS 7上设置vsFTPd

如何在CentOS 7上设置vsFTPd

FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o

在Debian / Ubuntu中使用Rsync设置文件镜像

在Debian / Ubuntu中使用Rsync设置文件镜像

简介如果您经营一个重要的网站,则最好将文件镜像到辅助服务器。如果您的主服务器有网络

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息