我在Azure上也运行了angular 6应用,但是我需要为一些服务器变量添加一个server.js文件,我在根目录上也添加了server.js文件
Server.js
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const http = require('http');
const app = express();
var router = express.Router();
const publicIp = require('public-ip');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));
// Angular DIST output folder
app.use(express.static(path.join(__dirname, 'dist/projectname')));
app.get('/getip', (req, res) => {
var ipcheck = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
(async () => {
console.log(await publicIp.v4());
res.json({
ip: await publicIp.v4(),
ip2: req.headers['x-forwarded-for'],
ip3: req.connection.remoteAddress,
ip4: req.ip
});
})();
});
// Send all other requests to the Angular app
app.get('/*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/projectname/index.html'));
});
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/prjectname/index.html'));
});
//Set Port
const port = process.env.PORT || '3000';
app.set('port', port);
const server = http.createServer(app);
server.listen(port, () => console.log(`Running on localhost:${port}`));
然后我转到cmd并运行节点server.js,它在localhost上运行良好 但是现在我想在azure服务器上做同样的事情如何部署它。 或如何始终告诉azure 运行节点server.js
答案 0 :(得分:0)
我假设您已经知道如何在Azure Portal或Azure CLI中创建Azure WebApp。然后,我看到您在Visual Stodio 2017中开发了Node.js应用程序,并希望使用相同的工具将其部署到Azure,因此建议您参考NTVS Wiki页面Publish to Azure Website using Web Deploy
来了解如何做。< / p>
接下来,在部署之前,您首先需要了解以下四个注意事项。
0.10+
。您可以通过URL https://<your webapp name>.scm.azurewebsites.net/DebugConsole
和命令node -v
访问Web应用程序的Kudo控制台以获取它。您可以在Azure CLI中将其设置为运行az webapp config appsettings set --resource-group <your ResourceGroup> --name <app_name> --settings WEBSITE_NODE_DEFAULT_VERSION=10.14.1
之类的命令,或在Azure门户中遵循下图。有关Azure WebApp上的Node版本的更多详细信息,请参阅我对SO线程azure webapp webjob node version的回答。在您的项目中,必须有一个Web.config
文件才能与Azure WebApp上的IIS对话以了解如何启动Node应用程序。 Web.config
文件的内容与Kudu Wiki页面Using a custom web.config for Node apps
中的示例相同,您可以直接复制它,因为您的bootstrap js文件名也是server.js
。
Azure WebApp上的侦听端口是由环境随机分配的,您可以从环境变量HTTP_PLATFORM_PORT
中获取,该环境变量也将由process.env.PORT
获取。因此,您将不会在代码中为port
做任何事情。
您的Node应用程序将部署到Azure WebApp的路径home/site/wwwroot
中,也可以通过Kudu控制台进行访问。因此,无需任何工具,您还可以使用Kudu控制台来部署您的应用程序,只需将wwwroot
中的文件结构与项目相同即可,其中包括所有js文件和目录node_modules
和{{ 1}}。
答案 1 :(得分:0)
只需构建您的项目 ng build --prod ,然后在vs 17中的dist文件夹中打开项目文件夹,然后添加
package.json
index.js
web.config
您可以从here获得这3个文件,并且可以根据需要编辑index.js,我只需要添加
app.get('/getip', (req, res) => {
res.json({
ip: req.headers['x-forwarded-for'].split(":")[0]
});
});
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
这通过nodejs运行我的应用。
当我打电话给getip时,这会给我服务器IP,否则返回处理所有路由的angular index.html。