📜  部署 Node.js 应用程序

📅  最后修改于: 2022-05-13 01:56:46.994000             🧑  作者: Mango

部署 Node.js 应用程序

为了展示如何部署 nodejs 应用程序,我们首先将创建一个示例应用程序以便更好地理解该过程。
我为我的示例项目创建了一个目录/文件夹“example”。
在进行之前,请确保您已在系统上安装了 nodejs 和 git
现在,在示例(或项目文件夹的名称)目录中打开命令行和 cd
按照以下步骤为本教程创建示例应用程序
第 1 步:使用以下命令创建“package.json”文件

npm init

npm 初始化

第 2步:在项目文件夹中创建一个名为“app.js”的文件
第 3 步:创建一个 html 文件“head.html”
用以下内容填充文件
这将是我们应用程序的主页,通过超链接连接到另一个页面。

html



    Hello World


  
    

This is the Homepage

      

Go to Next Page

     


html



    Hello World


  
    

WORKING

  


javascript
var http = require('http');
var fs = require('fs'); // to get data from html file
  
http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/html' });
  
    // req.url stores the path in the url
    var url = req.url;
    if (url === "/") {
// fs.readFile looks for the HTML file
// the first parameter is the path to the HTML page
// the second is the call back function
// if no file is found the function gives an error
// if the file is successfully found, the content of the file are contained in pgres
        fs.readFile("head.html", function (err, pgres) {
            if (err)
                res.write("HEAD.HTML NOT FOUND");
            else {
                // The following 3 lines
                // are responsible for sending the html file
                // and ends the response process
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
    else if (url === "/tailPage") {
        fs.readFile("tail.html", function (err, pgres) {
            if (err)
                res.write("TAIL.HTML NOT FOUND");
            else {
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
     
}).listen(3000, function () {
    console.log("SERVER STARTED PORT: 3000");
});


javascript
var http = require('http');
var fs = require('fs'); // to get data from html file
  
http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/html' });
  
    // req.url stores the path in the url
    var url = req.url;
    if (url === "/") {
// fs.readFile looks for the HTML file
// the first parameter is the path to the HTML page
// the second is the call back function
// if no file is found the function gives an error
// if the file is successfully found, the content of the file are contained in pgres
        fs.readFile("head.html", function (err, pgres) {
            if (err)
                res.write("HEAD.HTML NOT FOUND");
            else {
                // The following 3 lines
                // are responsible for sending the html file
                // and ends the response process
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
    else if (url === "/tailPage") {
        fs.readFile("tail.html", function (err, pgres) {
            if (err)
                res.write("TAIL.HTML NOT FOUND");
            else {
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
     
}).listen(3000, function () {
    console.log("SERVER STARTED PORT: 3000");
});


javascript
// Write Javascript code here
  
var http = require('http');
var fs = require('fs'); // to get data from html file
  
  
http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/html' });
  
    // req.url stores the path in the url
    var url = req.url;
    if (url === "/") {
// fs.readFile looks for the html file
// the first parameter is the path to the html page
// the second is the call back function
// if no file is found the function gives an err
// if the file is successfully found, the content of the file are contained in pgres
        fs.readFile("head.html", function (err, pgres) {
            if (err)
                res.write("HEAD.HTML NOT FOUND");
            else {
                // The following 3 lines
                // are responsible for sending the html file
                // and ends the response process
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
    else if (url === "/tailPage") {
        fs.readFile("tail.html", function (err, pgres) {
            if (err)
                res.write("TAIL.HTML NOT FOUND");
            else {
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
  
}).listen(process.env.PORT || 3000, function () {
    console.log("SERVER STARTED PORT: 3000");
});


第 4 步:创建另一个 html 文件“tail.html”
tail.html的内容是

html




    Hello World


  
    

WORKING

  

第 5 步:打开第 2 步中创建的“app.js”文件并复制粘贴以下代码

javascript

var http = require('http');
var fs = require('fs'); // to get data from html file
  
http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/html' });
  
    // req.url stores the path in the url
    var url = req.url;
    if (url === "/") {
// fs.readFile looks for the HTML file
// the first parameter is the path to the HTML page
// the second is the call back function
// if no file is found the function gives an error
// if the file is successfully found, the content of the file are contained in pgres
        fs.readFile("head.html", function (err, pgres) {
            if (err)
                res.write("HEAD.HTML NOT FOUND");
            else {
                // The following 3 lines
                // are responsible for sending the html file
                // and ends the response process
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
    else if (url === "/tailPage") {
        fs.readFile("tail.html", function (err, pgres) {
            if (err)
                res.write("TAIL.HTML NOT FOUND");
            else {
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
     
}).listen(3000, function () {
    console.log("SERVER STARTED PORT: 3000");
});

javascript

var http = require('http');
var fs = require('fs'); // to get data from html file
  
http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/html' });
  
    // req.url stores the path in the url
    var url = req.url;
    if (url === "/") {
// fs.readFile looks for the HTML file
// the first parameter is the path to the HTML page
// the second is the call back function
// if no file is found the function gives an error
// if the file is successfully found, the content of the file are contained in pgres
        fs.readFile("head.html", function (err, pgres) {
            if (err)
                res.write("HEAD.HTML NOT FOUND");
            else {
                // The following 3 lines
                // are responsible for sending the html file
                // and ends the response process
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
    else if (url === "/tailPage") {
        fs.readFile("tail.html", function (err, pgres) {
            if (err)
                res.write("TAIL.HTML NOT FOUND");
            else {
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
     
}).listen(3000, function () {
    console.log("SERVER STARTED PORT: 3000");
});

现在,上面的代码将“head.html”文件显示为连接到“tail.html”的主页
STEP 6:再次打开终端,编写以下命令运行服务器

node app.js

要查看您的应用程序正在运行,请在浏览器中输入“localhost:3000”作为 URL。
我们已经成功创建了示例应用程序,我们现在将其部署在 Web 上。
有许多云平台,如 AWS、Heroku、Digital Ocean 等。

部署示例应用程序的步骤

对于本示例,我们将使用 Heroku,因为它易于使用,您可以免费使用它来测试您的应用程序。免费版本有一些限制,因此如果您想将该网站用于商业业务,建议您购买付费套餐。由于这是一个教程,我们将使用免费版本。
注意:所有命令都在包含您的项目的目录/文件夹中执行
第 1 步:访问 https://www.heroku.com/ 并注册。
第 2 步:完成注册过程后,登录并转到 https://dashboard.heroku.com/apps
在继续之前,请确保您已在 PC 上安装了最新版本的 Git。
第 3 步:转到使用 Node.js 开始 Heroku 并为您的系统下载 Heroku Cli。
您可以通过键入命令检查 Heroku CLI 是否已成功安装

heroku -v

它应该看起来像这样

第 4 步:输入

heroku login

在命令行中

按任意键继续,它将在您的浏览器中打开一个新选项卡,要求您登录 Heroku 帐户

点击底部登录
成功登录后,命令行会是这样的

(Heroku 可能无法连接到 Git bash,因此如果连接需要很长时间,请使用命令提示符或终端,即如果您使用的是 git bash)
第 5 步:现在,确保我们在应用程序的顶级目录中使用 Git。我们可以通过命令检查目录是否有Git

git status

要使其成为 git 目录,请键入命令

git init

现在,输入

git add . 

在命令行中。

(暂时忽略警告)
现在,我们需要提交我们添加到 git 的文件。类型

git commit -m "initial commit"

STEP 6:通过命令创建heruko应用

heroku create

这将创建一个连接到我们本地 git 存储库的 git 远程
第 7 步:输入

git push heroku master

在heroku服务器上部署应用程序
第 8 步:部署应用程序后
类型

heroku ps:scale web=1 

确保一个应用程序实例正在运行
第 9 步:输入

heroku open 

这将在您的浏览器中打开一个应用程序。
现在,您可能会看到这样的屏幕

转到命令行并键入

heroku logs 

检查错误。它有助于调试应用程序。

它说 npm ERR!缺少脚本:开始
为了解决这个问题,我们需要设置一个启动脚本,启动脚本告诉服务器在安装包后运行“node app.js”。
10 步:要设置启动脚本,请打开示例文件夹中的 package.json,然后在“scripts”标签中键入“start”:“node app.js”。
看图片

(不要忘记逗号',')
第 11 步:在命令行中键入以下命令
每次对应用进行更改时,我们都需要将应用推送到 Heroku。

git add .
git commit -m "another commit"
git push heroku master
heroku open

STEP 12:还是有问题。问题还没有解决。我们正在使用 PORT: 3000 但 Heroku 没有。 Heroku 使用动态端口,我们无法将其固定为 3000。如果我们希望我们的应用程序在 Heroku 上运行,我们需要在 app.js 文件中添加以下行
.listen(process.env.PORT || 3000, 函数(...));
app.js 现在看起来像这样

javascript

// Write Javascript code here
  
var http = require('http');
var fs = require('fs'); // to get data from html file
  
  
http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/html' });
  
    // req.url stores the path in the url
    var url = req.url;
    if (url === "/") {
// fs.readFile looks for the html file
// the first parameter is the path to the html page
// the second is the call back function
// if no file is found the function gives an err
// if the file is successfully found, the content of the file are contained in pgres
        fs.readFile("head.html", function (err, pgres) {
            if (err)
                res.write("HEAD.HTML NOT FOUND");
            else {
                // The following 3 lines
                // are responsible for sending the html file
                // and ends the response process
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
    else if (url === "/tailPage") {
        fs.readFile("tail.html", function (err, pgres) {
            if (err)
                res.write("TAIL.HTML NOT FOUND");
            else {
                res.writeHead(200, { 'Content-Type': 'text/html' });
                res.write(pgres);
                res.end();
            }
        });
    }
  
}).listen(process.env.PORT || 3000, function () {
    console.log("SERVER STARTED PORT: 3000");
});

第 13 步:再次输入

git add .
git commit -m "another commit"
git push heroku master
heroku open

恭喜,您已经成功部署了您的第一个 Web 应用程序。
笔记:
1. 如果您的应用程序使用 MongoDB,那么您将不得不在其他一些云平台上单独部署 MongoDB 服务器。
2. 我在将 git bash 连接到 Heroku 时遇到了一些问题,这就是我在两者之间切换到 CMD 的原因。所以,我建议不要使用 Git Bash。