在 traefik 和 docker swarm 上提供 Nodejs 应用程序

问题描述 投票:0回答:0

我有一个 docker swarm 环境,其中包含 traefik 和在域上运行的应用程序。一个应用程序是例如在域名 www.test.de/app1 上另一个是例如在 www.test.de/app2 上。这些应用程序由运行 apache 的 docker 实例提供服务。一方面,我创建了一个带有标签

traefik.frontend.rule
和值
Host: www.test.de;PathPrefix: /app1
的服务标签。此外,图像中的 dockerfile 关心 apache 服务到正确的路径,例如

RUN   echo 'Alias app1 "/var/www/html"' >> /etc/apache2/apache2.conf
RUN   echo 'Alias app1/ "/var/www/html/"' >> /etc/apache2/apache2.conf

现在,我有一个简单的节点应用程序(在本地运行良好),应该可以在 www.test.de/app3 上使用 traefik 与 traefik 一起使用。

我有一个简单的dockerfile

FROM node:latest

# Create app directory
WORKDIR /usr/src/app

EXPOSE 80
CMD [ "npm", "start" ]

我还有一个简单的 server.js 文件:

const express = require('express');
const webpush = require('web-push');
const bodyparser = require('body-parser');
const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');
const adapter = new FileSync('db.json');
const db = low(adapter);

const http = require('http');
const cors = require("cors");

const app = express();
app.use(bodyparser.json());
app.use(express.static('public'));
app.use(cors());


const httpServer = http.createServer(app);

httpServer.listen(80, () => {
    console.log('HTTP Server running on port 80');
})

软件包已通过卷挂载安装在文件夹

/usr/src/app
中。我使用前端规则标签
traefik.frontend.rule
和值
Host: www.test.de;PathPrefix: /app3
创建了服务。当我启动容器时,它在控制台中显示

console.log('HTTP 服务器在端口 80 上运行');

这样我就可以看到该服务正在运行。但我无法访问前端(简单的index.html)。我认为,我必须调整节点中的一些设置,就像上面解释的 apache 中一样。但哪些?

node.js docker-swarm traefik
© www.soinside.com 2019 - 2024. All rights reserved.