FROM unit:node RUN mkdir -p /www/html && echo ' \ \ \ \ \ \ \ \ ' > /www/html/index.html RUN echo '{ \ "listeners": { \ "*:8765": { \ "pass": "routes/share" \ }, \ "*:8080": { \ "pass": "applications/node-proxy" \ } \ }, \ "routes": { \ "share": [ \ { \ "action": { \ "share": "/www/html/$uri" \ } \ } \ ] \ }, \ "applications": { \ "node-proxy": { \ "type": "external", \ "working_directory": "/www/", \ "executable": "/usr/bin/env", \ "arguments": [ \ "node", \ "--loader", \ "unit-http/loader.mjs", \ "--require", \ "unit-http/loader", \ "server.js" \ ] \ } \ } \ }' > /docker-entrypoint.d/config.json RUN echo 'var http = require("http"); \ var httpProxy = require("http-proxy"); \ \ var proxy = httpProxy.createProxyServer({}); \ var sendError = function(res, err) { \ return res.status(500).send({ \ error: err, \ message: "An error occured in the proxy" \ }); \ }; \ \ proxy.on("error", function (err, req, res) { \ sendError(res, err); \ }); \ \ var enableCors = function(req, res) { \ if (req.headers["access-control-request-method"]) { \ res.setHeader("access-control-allow-methods", req.headers["access-control-request-method"]); \ } \ \ if (req.headers["access-control-request-headers"]) { \ res.setHeader("access-control-allow-headers", req.headers["access-control-request-headers"]); \ } \ \ if (req.headers.origin) { \ res.setHeader("access-control-allow-origin", req.headers.origin); \ res.setHeader("access-control-allow-credentials", "true"); \ } \ }; \ \ proxy.on("proxyRes", function(proxyRes, req, res) { \ enableCors(req, res); \ }); \ \ proxy.on("error", function (err, req, res) { \ sendError(res, err); \ }); \ \ var enableCors = function(req, res) { \ if (req.headers["access-control-request-method"]) { \ res.setHeader("access-control-allow-methods", req.headers["access-control-request-method"]); \ } \ \ if (req.headers["access-control-request-headers"]) { \ res.setHeader("access-control-allow-headers", req.headers["access-control-request-headers"]); \ } \ \ if (req.headers.origin) { \ res.setHeader("access-control-allow-origin", req.headers.origin); \ res.setHeader("access-control-allow-credentials", "true"); \ } \ }; \ \ proxy.on("proxyRes", function(proxyRes, req, res) { \ enableCors(req, res); \ }); \ \ var server = http.createServer(function(req, res) { \ if (req.method === "OPTIONS") { \ enableCors(req, res); \ res.writeHead(200); \ res.end(); \ return; \ } \ \ proxy.web(req, res, { \ target: "http://127.0.0.1:9999", \ secure: true, \ changeOrigin: true \ }, function(err) { \ sendError(res, err); \ }); \ }); \ \ server.listen(8080);' > /www/server.js RUN echo '{ \ "name": "oas", \ "version": "1.0.0", \ "description": "", \ "main": "server.js", \ "scripts": { \ "test": "echo \"Error: no test specified\" && exit 1" \ }, \ "author": "", \ "license": "ISC", \ "dependencies": { \ "http-proxy": "^1.18.1", \ "unit-http": "^1.30.0" \ } \ }' > /www/package.json WORKDIR /www/ RUN npm install EXPOSE 8080 EXPOSE 8765 CMD ["unitd","--no-daemon","--control","127.0.0.1:9999"]