| FROM node:18-alpine |
|
|
| RUN apk add --no-cache git python3 make g++ |
|
|
| RUN git clone https://github.com/CorentinTh/it-tools.git /app && \ |
| cd /app && npm install --legacy-peer-deps && npm run build && \ |
| npm install -g serve && \ |
| rm -rf /root/.npm /tmp/* |
|
|
| RUN mkdir -p /gw && cd /gw && npm install http-proxy |
|
|
| RUN cat > /gw/gateway.js << 'GWEOF' |
| var http = require('http'); |
| var httpProxy = require('/gw/node_modules/http-proxy'); |
| var DOMAIN = process.env.DOMAIN || ''; |
| var proxy = httpProxy.createProxyServer({ target: 'http://127.0.0.1:3001', ws: true }); |
| proxy.on('error', function(e, req, res) { if (res && res.writeHead) { res.writeHead(502); res.end('502'); } }); |
| function ok(req) { if (!DOMAIN) return true; var h = (req.headers['x-real-domain']||'')+'|'+(req.headers['x-forwarded-host']||'')+'|'+(req.headers['host']||''); return h.indexOf(DOMAIN) !== -1; } |
| var s = http.createServer(function(req, res) { if (ok(req)) { proxy.web(req, res); } else { res.writeHead(200,{'Content-Type':'text/plain'}); res.end('200 OK'); } }); |
| s.on('upgrade', function(req, socket, head) { if (ok(req)) { proxy.ws(req, socket, head); } else { socket.destroy(); } }); |
| s.listen(7860, function() { console.log('[GW] 7860'); }); |
| GWEOF |
|
|
| RUN cat > /gw/start.sh << 'SHEOF' |
| |
| serve -s /app/dist -l 3001 & |
| sleep 2 |
| cd /gw && exec node gateway.js |
| SHEOF |
|
|
| RUN chmod +x /gw/start.sh |
| RUN chown -R node:node /gw |
|
|
| USER node |
| EXPOSE 7860 |
| CMD ["/gw/start.sh"] |