mirror of
https://github.com/HangarMC/Hangar.git
synced 2025-02-23 15:12:52 +08:00
implement proxy for prod mode
This commit is contained in:
parent
b5adc8e517
commit
b6dd762aba
@ -10,6 +10,7 @@ COPY /docker/deployment/hangar-frontend/entrypoint.sh /hangar-frontend/entrypoin
|
||||
RUN chmod +x /hangar-frontend/entrypoint.sh
|
||||
|
||||
COPY /frontend-new/package.json /hangar-frontend/package.json
|
||||
COPY /frontend-new/proxy.config.ts /hangar-frontend/proxy.config.ts
|
||||
COPY /frontend-new/pnpm-lock.yaml /hangar-frontend/pnpm-lock.yaml
|
||||
COPY /frontend-new/dist/ /hangar-frontend/dist/
|
||||
COPY /frontend-new/node_modules/ /hangar-frontend/node_modules/
|
||||
|
23
frontend-new/proxy.config.ts
Normal file
23
frontend-new/proxy.config.ts
Normal file
@ -0,0 +1,23 @@
|
||||
const proxyHost = process.env.proxyHost || "http://localhost:8080";
|
||||
const authHost = process.env.authHost || "http://localhost:3001";
|
||||
|
||||
exports["default"] = {
|
||||
// backend
|
||||
"/api/": proxyHost,
|
||||
"/signup": proxyHost,
|
||||
"/login": proxyHost,
|
||||
"/logout": proxyHost,
|
||||
"/handle-logout": proxyHost,
|
||||
"/refresh": proxyHost,
|
||||
"/invalidate": proxyHost,
|
||||
"/v2/api-docs/": proxyHost,
|
||||
"/robots.txt": proxyHost,
|
||||
"/sitemap.xml": proxyHost,
|
||||
"/global-sitemap.xml": proxyHost,
|
||||
"/*/sitemap.xml": proxyHost,
|
||||
"/statusz": proxyHost,
|
||||
// auth
|
||||
"/avatar": authHost,
|
||||
"/oauth/logout": authHost,
|
||||
"/oauth2": authHost,
|
||||
};
|
@ -9,7 +9,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"compression": "^1.7.4",
|
||||
"express": "^4.17.3"
|
||||
"express": "^4.17.3",
|
||||
"http-proxy-middleware": "^2.0.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/compression": "^1.7.2",
|
||||
|
@ -6,11 +6,13 @@ specifiers:
|
||||
'@types/node': ^17.0.21
|
||||
compression: ^1.7.4
|
||||
express: ^4.17.3
|
||||
http-proxy-middleware: ^2.0.4
|
||||
typescript: ^4.6.2
|
||||
|
||||
dependencies:
|
||||
compression: 1.7.4
|
||||
express: 4.17.3
|
||||
http-proxy-middleware: 2.0.4_@types+express@4.17.13
|
||||
|
||||
devDependencies:
|
||||
'@types/compression': 1.7.2
|
||||
@ -56,13 +58,18 @@ packages:
|
||||
'@types/serve-static': 1.13.10
|
||||
dev: true
|
||||
|
||||
/@types/http-proxy/1.17.8:
|
||||
resolution: {integrity: sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==}
|
||||
dependencies:
|
||||
'@types/node': 17.0.21
|
||||
dev: false
|
||||
|
||||
/@types/mime/1.3.2:
|
||||
resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==}
|
||||
dev: true
|
||||
|
||||
/@types/node/17.0.21:
|
||||
resolution: {integrity: sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==}
|
||||
dev: true
|
||||
|
||||
/@types/qs/6.9.7:
|
||||
resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
|
||||
@ -107,6 +114,13 @@ packages:
|
||||
type-is: 1.6.18
|
||||
dev: false
|
||||
|
||||
/braces/3.0.2:
|
||||
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
fill-range: 7.0.1
|
||||
dev: false
|
||||
|
||||
/bytes/3.0.0:
|
||||
resolution: {integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=}
|
||||
engines: {node: '>= 0.8'}
|
||||
@ -191,6 +205,10 @@ packages:
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: false
|
||||
|
||||
/eventemitter3/4.0.7:
|
||||
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
|
||||
dev: false
|
||||
|
||||
/express/4.17.3:
|
||||
resolution: {integrity: sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==}
|
||||
engines: {node: '>= 0.10.0'}
|
||||
@ -227,6 +245,13 @@ packages:
|
||||
vary: 1.1.2
|
||||
dev: false
|
||||
|
||||
/fill-range/7.0.1:
|
||||
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
to-regex-range: 5.0.1
|
||||
dev: false
|
||||
|
||||
/finalhandler/1.1.2:
|
||||
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
|
||||
engines: {node: '>= 0.8'}
|
||||
@ -240,6 +265,16 @@ packages:
|
||||
unpipe: 1.0.0
|
||||
dev: false
|
||||
|
||||
/follow-redirects/1.14.9:
|
||||
resolution: {integrity: sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==}
|
||||
engines: {node: '>=4.0'}
|
||||
peerDependencies:
|
||||
debug: '*'
|
||||
peerDependenciesMeta:
|
||||
debug:
|
||||
optional: true
|
||||
dev: false
|
||||
|
||||
/forwarded/0.2.0:
|
||||
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
|
||||
engines: {node: '>= 0.6'}
|
||||
@ -261,6 +296,36 @@ packages:
|
||||
toidentifier: 1.0.1
|
||||
dev: false
|
||||
|
||||
/http-proxy-middleware/2.0.4_@types+express@4.17.13:
|
||||
resolution: {integrity: sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
peerDependencies:
|
||||
'@types/express': ^4.17.13
|
||||
peerDependenciesMeta:
|
||||
'@types/express':
|
||||
optional: true
|
||||
dependencies:
|
||||
'@types/express': 4.17.13
|
||||
'@types/http-proxy': 1.17.8
|
||||
http-proxy: 1.18.1
|
||||
is-glob: 4.0.3
|
||||
is-plain-obj: 3.0.0
|
||||
micromatch: 4.0.5
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
dev: false
|
||||
|
||||
/http-proxy/1.18.1:
|
||||
resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
dependencies:
|
||||
eventemitter3: 4.0.7
|
||||
follow-redirects: 1.14.9
|
||||
requires-port: 1.0.0
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
dev: false
|
||||
|
||||
/iconv-lite/0.4.24:
|
||||
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@ -277,6 +342,28 @@ packages:
|
||||
engines: {node: '>= 0.10'}
|
||||
dev: false
|
||||
|
||||
/is-extglob/2.1.1:
|
||||
resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/is-glob/4.0.3:
|
||||
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
is-extglob: 2.1.1
|
||||
dev: false
|
||||
|
||||
/is-number/7.0.0:
|
||||
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
||||
engines: {node: '>=0.12.0'}
|
||||
dev: false
|
||||
|
||||
/is-plain-obj/3.0.0:
|
||||
resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/media-typer/0.3.0:
|
||||
resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
|
||||
engines: {node: '>= 0.6'}
|
||||
@ -291,6 +378,14 @@ packages:
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: false
|
||||
|
||||
/micromatch/4.0.5:
|
||||
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
|
||||
engines: {node: '>=8.6'}
|
||||
dependencies:
|
||||
braces: 3.0.2
|
||||
picomatch: 2.3.1
|
||||
dev: false
|
||||
|
||||
/mime-db/1.51.0:
|
||||
resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==}
|
||||
engines: {node: '>= 0.6'}
|
||||
@ -343,6 +438,11 @@ packages:
|
||||
resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=}
|
||||
dev: false
|
||||
|
||||
/picomatch/2.3.1:
|
||||
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
|
||||
engines: {node: '>=8.6'}
|
||||
dev: false
|
||||
|
||||
/proxy-addr/2.0.7:
|
||||
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
|
||||
engines: {node: '>= 0.10'}
|
||||
@ -371,6 +471,10 @@ packages:
|
||||
unpipe: 1.0.0
|
||||
dev: false
|
||||
|
||||
/requires-port/1.0.0:
|
||||
resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=}
|
||||
dev: false
|
||||
|
||||
/safe-buffer/5.1.2:
|
||||
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
|
||||
dev: false
|
||||
@ -421,6 +525,13 @@ packages:
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: false
|
||||
|
||||
/to-regex-range/5.0.1:
|
||||
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
||||
engines: {node: '>=8.0'}
|
||||
dependencies:
|
||||
is-number: 7.0.0
|
||||
dev: false
|
||||
|
||||
/toidentifier/1.0.1:
|
||||
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
|
||||
engines: {node: '>=0.6'}
|
||||
|
@ -1,6 +1,7 @@
|
||||
import path from "path";
|
||||
import express, { Request, Response } from "express";
|
||||
import compression from "compression";
|
||||
import { createProxyMiddleware } from "http-proxy-middleware";
|
||||
|
||||
const dist = `../../dist`;
|
||||
|
||||
@ -16,6 +17,10 @@ const manifest = require(`${dist}/client/ssr-manifest.json`);
|
||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||
const { default: renderPage } = require(`${dist}/server`);
|
||||
|
||||
// vite config
|
||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||
const proxyConfig = require(`${dist}/../proxy.config.ts`).default;
|
||||
|
||||
const server = express();
|
||||
|
||||
// gzip is cool
|
||||
@ -26,6 +31,11 @@ for (const asset of ssr.assets || []) {
|
||||
server.use("/" + asset, express.static(path.join(__dirname, `${dist}/client/` + asset)));
|
||||
}
|
||||
|
||||
// proxy
|
||||
for (const proxy of Object.keys(proxyConfig)) {
|
||||
server.use(createProxyMiddleware(proxy, {target: proxyConfig[proxy] }))
|
||||
}
|
||||
|
||||
// main
|
||||
server.get("*", async (request: Request, response: Response) => {
|
||||
const url = request.protocol + "://" + request.get("host") + request.originalUrl;
|
||||
|
@ -15,9 +15,10 @@ import Layouts from "vite-plugin-vue-layouts";
|
||||
import WindiCSS from "vite-plugin-windicss";
|
||||
import viteSSR from "vite-ssr/plugin";
|
||||
import prettier from "./src/plugins/prettier";
|
||||
|
||||
const proxyHost = process.env.proxyHost || "http://localhost:8080";
|
||||
const authHost = process.env.authHost || "http://localhost:3001";
|
||||
// seriously? just shit up, lol
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
import { default as proxyConfig } from "./proxy.config";
|
||||
|
||||
export default defineConfig({
|
||||
resolve: {
|
||||
@ -133,26 +134,7 @@ export default defineConfig({
|
||||
envPrefix: "HANGAR",
|
||||
|
||||
server: {
|
||||
proxy: {
|
||||
// backend
|
||||
"/api/": proxyHost,
|
||||
"/signup": proxyHost,
|
||||
"/login": proxyHost,
|
||||
"/logout": proxyHost,
|
||||
"/handle-logout": proxyHost,
|
||||
"/refresh": proxyHost,
|
||||
"/invalidate": proxyHost,
|
||||
"/v2/api-docs/": proxyHost,
|
||||
"/robots.txt": proxyHost,
|
||||
"/sitemap.xml": proxyHost,
|
||||
"/global-sitemap.xml": proxyHost,
|
||||
"/*/sitemap.xml": proxyHost,
|
||||
"/statusz": proxyHost,
|
||||
// auth
|
||||
"/avatar": authHost,
|
||||
"/oauth/logout": authHost,
|
||||
"/oauth2": authHost,
|
||||
},
|
||||
proxy: proxyConfig.default,
|
||||
},
|
||||
|
||||
// ssr options aren't part of release types for vite cause its still marked as experimental
|
||||
|
Loading…
Reference in New Issue
Block a user