#node.js #docker #reverse-proxy #http-proxy-middleware #flower
Вопрос:
[ПРАВИТЬ]
Я смог исправить ошибки CSS, описанные ниже, с помощью следующих https_server.js
:
function flowerGetMethods(app, endpoint, certified) {
if (certified) {
var options = {
logLevel: 'debug',
target: 'http://' "flower:5555", // target host
changeOrigin: true, // needed for virtual hosted sites
ws: true,
port: 5555,
pathRewrite: {},
};
var flowerProxy = createProxyMiddleware(options);
}
и в моем docker-compose.yaml
flower:
container_name: flower
image: mher/flower
hostname: "flower"
command: ["celery", "flower", "--url_prefix=flower"]
ports:
- 5555
expose:
- 5555
Тем не менее, у меня все еще возникает следующая проблема:
При переходе к localhost/flower/tasks
я получаю всплывающее сообщение
DataTables warning: table id=tasks-table - Ajax error. For more information about this error, please see http://datatables.net/tn/7
Похоже, это происходит из-за ошибки 404 при попытке ОПУБЛИКОВАТЬ http://localhost/flower/tasks/datatable
. Я не уверен, почему этот файл не может быть найден. Буду признателен за любую помощь, которая может быть оказана!
[ОРИГИНАЛЬНОЕ СООБЩЕНИЕ НИЖЕ]
Я хочу использовать http-прокси-промежуточное программное обеспечение для прокси-сервера для flower. Однако CSS не загружается, и ссылки на веб-странице не работают. Страница выглядит так:
И я получаю такие ошибки, как эта:
Error http://localhost/static/css/flower.css?v=83ad...[not found]
Clicking the links, the whole page breaks. Example when I click on «Dashboard»:
http://localhost/dashboard [not found]
What I want is the page to go to http://localhost/flower/dashboard
and for the requests for the CSS elements to go to http://localhost/flower/static/css/flower.css?...
All relevant code is below, I’m running both the flower instance and the webserver in docker containers.
The http server is:
var async = require('async');
const express = require('express')
var app = express()
const port = 80
var helmet = require('helmet');
const { createProxyMiddleware } = require('http-proxy-middleware');
/* redirect to flower */
function flowerGetMethods(app, endpoint, certified) {
if (certified) {
var options = {
logLevel: 'debug',
target: 'http://' "flower:5555", // target host
changeOrigin: true, // needed for virtual hosted sites
ws: true,
pathRewrite: {},
port: 5555,
};
options.pathRewrite['^' endpoint '/flower'] = ''; // remove path
var flowerProxy = createProxyMiddleware(options);
}
app.get(endpoint '/flower*', function(req, res, next) {
flowerProxy(req, res, next);
});
}
async.waterfall([
function(next) {
app.use(
helmet({
contentSecurityPolicy: false,
noSniff: false,
})
);
var protocol = require('http').createServer(app);
protocol.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
});
app.get('/', (req, res) => {
res.send('Hello World!')
});
flowerGetMethods(app, '', true);
}
]);
The dockerfile for this server is:
FROM node:10.24-alpine
# Install openssl
RUN apk add --update openssl ca-certificates
# Create app directory
RUN mkdir -p /node-servers
# Setting the working directory
WORKDIR /node-servers
# Install app dependencies
COPY package.json /node-servers/
RUN npm install
# if building for production
#RUN npm ci --only=production
# Copy everything
COPY ./ /node-servers
# Entrypoint used to load the environment and start the node server
ENTRYPOINT [ "node", "https_server.js" ]
And I have a docker compose that starts this container, and flower (https://flower.readthedocs.io/en/latest/)
version: '3'
services:
https-server:
container_name: https-server
build: ./node-servers
ports:
- 80:80
expose:
- "80"
depends_on:
- flower
flower:
container_name: flower
image: mher/flower
ports:
- 5555