在Ubuntu 16.04上使用Nginx反向代理设置Keystone.js服务器

在本教程中,我们将使用反向代理来设置Web服务器。我们将使用的CMS是Keystone.js,它是基于Express.js的著名Web应用程序框架。我们将使用的反向代理是Nginx,它是一个免费的开源反向代理以及HTTP服务器。我们将使用的数据库是Nogo文档数据库MongoDB。这将要求您拥有一个已设置记录的域。如果您没有此设置,请继续进行处理,然后返回本教程。

安装节点

首先,我们将安装Node.js,这是基于Chrome V8 Javascript引擎的Javascript解释器。

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y build-essential

安装Nginx

接下来,我们将安装我们的反向代理Nginx。

sudo apt update
sudo apt install nginx

这将更新软件包列表,并安装Nginx。安装完成后,我们将设置节点项目。

初始化我们的Keystone项目

创建我们的节点项目。为此,只需创建一个新文件夹。

mkdir website

然后,我们将创建package.json文件。为此,只需npm init在您的终端中运行,填写字段,然后回复“ yes”进行确认。创建package.json文件后,我们将安装以下节点模块。

sudo npm install -g generator-keystone
sudo npm install -g yo

一旦下载完成,请运行以下命令。

yo keystone

填写必填字段。它会问你要project nametemplate engineemail控制面板,等等。如果您不知道要选择什么,则可以使用默认值。配置完梯形失真校正设置后,我们可以通过键入node keystone启动应用程序来测试服务器是否正在运行。默认情况下,您的应用程序将localhost在端口上运行3000。请注意,如果您尚未安装MongoDB,则数据库将立即不可用。您可以在本教程的后面部分中学习如何安装它。

这是Keystone.js的基本目录布局:

  • /lib -在这里您将存储自定义库和其他代码。

  • /models-在这里您将存储应用程序的数据库模型。KeystoneJS使用MongoDB作为数据库提供程序。

  • /public -这是您的静态文件(CSS,JS,图像等)的存储位置。

  • /routes/api -这是应用程序的API控制器的存储位置。

  • /routes.views -应用程序视图控制器将存储在此处。

  • /templates -这是所有应用程序模板文件的存储位置。

  • /updates -这是您的迁移脚本的存储位置。

  • package.json -这是生成器为我们生成的您的npm配置文件。

  • keystone.js -我们的主要启动文件,我们在启动网站时运行该文件。

初始化我们的数据库

如前所述,我们将使用的数据库是MongoDB,它是可靠的NoSQL面向文档的数据库。如果您已经碰巧安装了MongoDB,则可以跳过本节。如果没有,那么这里是在Ubuntu 16.04上安装它的方法。

导入用于mongoDB软件包的公钥。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

创建用于安装软件包的列表文件。

echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

使用更新您的包裹清单apt

sudo apt update

最后,安装MongoDB。

sudo apt install mongodb-org -y

安装完成后,启动MongoDB。

sudo service mongod start

这将在port上启动MongoDB进程27017

MongoDB将在整个应用程序中使用,并将用于存储我们用于模型(例如User模型)的信息。Keystone将其用作首选数据库,目前您无法使用其他数据库供应商。

安装PM2

现在是时候安装PM2(Process Manager 2)了。PM2是npm模块形式的Node.js应用程序的进程管理器。它为您提供了一种管理应用程序并在后台运行它们的简便方法。由于它在NPM中,因此我们要做的所有安装工作如下。

sudo npm install pm2 -g

这告诉npm全局安装它,因此我们可以在系统中的任何地方使用它。

在PM2上运行/管理应用程序

之前,我们使用来运行Web应用程序node keystone。使用PM2,情况有所不同。现在,我们使用以下命令运行节点应用程序。

pm2 start keystone.js

这会将我们的PM2应用程序添加到我们的进程列表中,并且将显示一个小框,以便您可以看到它确实在线。请注意id为您的过程标记的框。保持紧密联系,因为稍后我们将对此进行很多引用。

查看您的应用程序的日志。

pm2 logs [id]

例如,pm2 logs 0如果这是您的第一个PM2应用程序。

随时停止您的Web应用程序。

pm2 stop [id]

完全删除您的应用程序。

pm2 delete [id]

如果您想查看应用程序的一些基本统计信息,则PM2甚至具有一个监控仪表板,您可以使用它来访问它。

pm2 monit

这将显示一些基本信息,例如RAM使用率,CPU使用率和正常运行时间。

PM2提供的一个很棒的功能是watching。本质上,监视是指PM2自动检测到与您的起始文件位于同一目录中的任何文件的更改,并且它将自动重新启动您的应用程序���要启用它,只需重新启动您的应用程序,但将监视标志传递给它即可。

pm2 restart [id] --watch

要在启用监视后禁用监视,只需再次运行同一命令,监视将被禁用。

在本教程中,我们将格外注意。

设置反向代理

确保已安装Nginx。如果由于某种原因而不是,请参考上面的步骤。

调整防火墙设置。在Ubuntu上,ufw是官方防火墙。默认情况下,端口上的连接被阻止80。我们需要在port上为Nginx添加一个例外,该例外80将在我们的Web应用程序上运行。

sudo ufw allow 'Nginx HTTP'

验证您的Nginx服务器正在运行。

systemctl status nginx

在该Active部分下,如果看到active (running),则一切就绪。如果没有,您可以尝试重新启动服务。

systemctl restart nginx

删除默认的Nginx配置文件。

sudo rm /etc/nginx/sites-available/default

创建一个新的,只需调用它node

sudo nano /etc/nginx/sites-available/node

将以下内容粘贴到文件中,并替换example.com为您的网站域。

listen 80;

server_name example.com;

    location / {

        proxy_set_header   X-Forwarded-For $remote_addr;

        proxy_set_header   Host $http_host;

        proxy_pass         "http://127.0.0.1:3000";
    }
}

请注意,proxy_pass表示我们Keystone应用在本地运行的IP ,该IP localhost在port上运行3000listen 80是我们要将应用程序定向到的端口,在本例中为port 80

然后,我们需要创建一个符号链接,或指向名为的文件夹的符号链接sites-enabledsites-enabled和之间的区别sites-availablesites-enabledNginx实际加载了。

sudo ln -s /etc/nginx/sites-available/node /etc/nginx/sites-enabled/node

现在,您的配置文件sites-available已准备就绪,可以从中加载sites-enabled。要应用配置使其生效,只需重新启动Nginx。

sudo systemctl restart nginx

最后,重新启动您的PM2应用程序

pm2 restart [id]

现在,您可以在浏览器中导航到您的域,您将看到一个Welcome to Keystone屏幕,其中包含用于登录的面板。

如果看到它,则说明您已经成功设置了Node.js生产Web服务器。如果不是,则您可能未正确执行步骤,因此您可能需要返回并仔细执行每个步骤。

您可以通过访问Nginx 网站了解更多信息。

我希望您喜欢本教程,并希望它可以帮助您在Vultr VPS上设置自己的Web服务器以进行生产。



Leave a Comment

在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 機器變磚。閱讀這篇文章以了解更多信息