在Ubuntu 16.04上,如何使用MongoDB和Apache构建Meteor.js Web应用程序

・14 分钟阅读

Meteor.js是一个开放源码的JavaScript框架,用Node.js编写,它很流行,因为它在纯JavaScript中构建web应用程序,Meteor集成了在网络浏览器中运行的前端JavaScript支持,以及后端JavaScript,它将在主机服务器上运行,它与前端JavaScript框架很好地集成,比如,React和angular.js,以及MongoDB和一个流行的NoSQL数据库,选择Meteor.js的几个主要原因如下:

  • Meteor.js是一个完整的堆栈框架,这样,你就能得到你所需要的一切: 数据库,前端,后端,Meteor将一切连结在一起。

  • 速度, Meteor的直观包装系统为您提供了许多工具,可以帮助您完善应用程序。

  • 它有来自Meteor开发者组的良好支持,以及使用它的其他开发人员,你可以很容易地找出你可能遇到的任何问题,并且迅速解决。

在本教程中,我们将在Ubuntu 16.04上完成以下目标:

  • 安装Node.js,我们的Javascript运行时。

  • 安装Meteor.js

  • 安装MongoDB数据库,选择Meteor 。

  • 安装Apache,我们选择的反向代理,并设置我们的域名(如果适用)。

  • 测试我们的网站。

  • 设置我们的网站以进行生产。

正在安装Node.js

你首先需要安装node.js,这是我们的JavaScript解释器,Meteor的核心,它将允许我们运行Meteor,以及将来可能拥有的其他Node.js应用程序,在这种情况下,我们将安装Node.js 8.以启动下载,只需在你的终端中运行。


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

等待下载和安装完成。

安装MongoDB

接下来,我们将安装我们的数据库: MongoDB是一个免费的开源NoSQL文档数据库,以及Meteor的数据库选择,它文档使用JSON-like格式,与传统SQL数据库中的结构化表相对应。

导入APT (高级封装终端)使用的MongoDB公钥,这使得APT能够验证包; 在本例中,


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

为Ubuntu 16.04创建必要的列表文件。


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

开始安装MongoDB,并等待安装完成。


sudo apt update && sudo apt install mongodb-org -y

打开systemd服务进行编辑。


sudo nano /etc/systemd/system/mongodb.service

复制并粘贴以下内容以完成systemd服务。


[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf

[Install]
WantedBy=multi-user.target

使用"Control-O"保存,"Control-X"退出。

通过键入以下命令运行MongoDB systemd服务 sudo systemctl start mongodb 在你的终端中。

要验证它是否已成功启动,请键入以下。


sudo systemctl status mongodb

你将看到该服务处于活动状态。

安装和设置Apache2

接下来,我们将安装Apache ,Apache是一个免费的开源web服务器软件,它也作为反向代理,我们将在本教程中使用它,需要反向代理才能将Meteor.js应用程序绑定到port 80 ,Node.js阻止应用程序在没有root访问的情况下在该端口上运行,Apache自动以root身份运行,并绑定到端口80,因此在运行我们的网站时,我们不必担心它。

安装Apache 。


sudo apt update && sudo apt install apache2

为了允许访问外部网络端口(比如,port 80 ),我们需要为Apache配置防火墙,我们通过UFW (非复杂防火墙)做这个。


sudo ufw allow 'Apache Full'

这将允许访问"Apache Full"配置文件,这给了我们port 80的传入流量,这就是我们的应用程序运行的。

安装Meteor.js &创建基础应用程序

现在,我们将安装我们的web框架: Meteor.js,我们将使用Meteor团队提供的一个简单的bash脚本来安装它。


curl https://install.meteor.com/ | sh

等待安装完成,基本上,脚本是从官方网站下载Meteor,并且全局安装它,所以,我们可以从任何地方使用它,一旦完成,我们就可以创建应用程序目录,Meteor有一个方便的小工具供我们使用,叫做meteor create ,要创建应用程序目录,请键入以下。


meteor create <projectname>

文件夹将使用名称指定为(<projectname> )"

设置我们的Apache反向代理

现在我们已经设置了应用程序目录,我们可以继续设置反向代理,Apache使用一个叫做mod_proxy的模块,它为Apache实现一个代理。


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

这将安装模块并使其可供Apache使用。

接下来,我们将需要启用Apache需要运行的所有必要模块,我们将用a2enmod来实现这个,它是支持Apache模块的工具,这些模块将允许我们利用反向代理,简单地输入这些命令到你的终端。


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

之后,我们将需要禁用默认的Apache站点启动,因此我们可以启动自己的站点。否则,默认的Apache应用程序将覆盖我们的,若要禁用默认站点,只需运行以下。


sudo a2dissite 000-default

现在我们将创建虚拟主机文件,要做到这一点,只需打开一个文本编辑器。


sudo nano /etc/apache2/sites-available/<projectname>

复制并粘贴以下内容。


<VirtualHost *:80>
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
 ProxyPreserveHost On
 # Servers to proxy the connection, or
 # List of application servers Usage
 ProxyPass / http://0.0.0.0:3000/
 ServerName localhost
</VirtualHost>

  • VirtualHost *:80 :告诉Apache附加到端口80,这是我们的web应用程序所需要的。

  • ProxyPass :要转发到反向代理的站点的IP地址。 这很可能是你的VPS的IP

  • ServerName :服务器(默认名称通常为localhost )的名称。

完成必要的设置后,使用"Control-O"保存和"Control-X"退出。

首次运行站点

要测试并确保该网站正在运行,请在项目目录中键入以下内容。

 
meteor

 

你将看到以下输出,显示你的站点已成功启动。


=> App running at: http://localhost:3000/

注意Meteor,默认情况下监听port 3000

设置我们的网站以进行生产

为了确保我们的应用能够保持运行,我们将使用systemd服务,我们在MongoDB上做的类似,这个系统服务将确保我们的网站在系统启动时启动,并继续运行,它也将重新启动我们的应用程序,如果它因任何原因崩溃。要设置我们的systemd服务,请在你的终端。


sudo nano /etc/systemd/system/<projectname>.service

这是你想要你的文件的样子。


[Service]
WorkingDirectory=/home/<yourusername>/<projectname>
ExecStart=/usr/local/bin/meteor --production
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<projectName>
User=<yourusername>
Environment=NODE_ENV=production
Environment=PWD=/home/<yourusername>/<projectname>
Environment=PORT=3000
Environment=HTTP_FORWARDED_COUNT=1

注意:不要忘记将projectname替换为项目名称,而且yourusername用的是用户名。

下面是一些你要记住的要点。

  • WorkingDirectory :应用程序的目录。

  • Restart :是否重新启动它的应用因任何原因停止。

  • User :你的用户名。

  • Environment=PWD :与WorkingDirectory相同。

  • Environment=PORT :你的应用程序正在运行的端口,默认值为3000

保存并关闭文件。

现在,我们将启用并启动服务。


sudo systemctl enable <projectname>.service

其中<projectname>是我们创建的服务文件的名称。

然后,我们将启动服务。


sudo systemctl start <projectname>.service

应用程序将启动要验证它是否已启动,只需运行以下命令。


sudo systemctl status <projectname>

你将看到它处于活动状态,验证服务已成功启动。

接下来,我们将查看我们的网站,在你选择的网络浏览器中,导航到你的IP地址。


http://your-server-ip/

你将看到Meteor例子屏幕,验证你已经正确完成了所有操作。

管理我们的应用程序

现在我们已经启动了应用程序,我们将需要管理它。

重新启动应用程序


sudo systemctl restart <projectname>

停止应用程序


sudo systemctl stop <projectname>

查看应用程序的状态


sudo systemctl status <projectname>

查看日志


journalctl -u <projectname>

现在你已经成功配置了MongoDB,apache和Meteor,并为生产创建了一个Meteor.js ,现在剩下的由您决定,在前端和后端设计您的网站。你可以访问MongoDB存储你可能需要的任何数据,并且node.js提供通过node包管理器(NPM )提供的各种模块,有关更多文档,请随意访问Meteor站点,你可以进一步了解如何自定义你的网站,另外,当你处理数据库操作时,你可以参考mongoDB文档

Apple_express profile image