feat: subpath access for individual containers

This commit is contained in:
jamesgeorge007
2023-11-10 12:51:11 +05:30
parent 79a9285f93
commit 64517a53af
6 changed files with 68 additions and 4 deletions

11
Caddyfile Normal file
View File

@@ -0,0 +1,11 @@
:3500 {
handle_path /admin* {
reverse_proxy localhost:3100
}
handle_path /backend* {
reverse_proxy localhost:3170
}
reverse_proxy localhost:3000 # Proxy other requests to your server running on port 3001
}

View File

@@ -1,6 +1,36 @@
#!/usr/local/bin/node #!/usr/local/bin/node
import { execSync } from "child_process" import { execSync, spawn } from "child_process"
import fs from "fs" import fs from "fs"
import process from "process"
function runChildProcessWithPrefix(command, args, prefix) {
const childProcess = spawn(command, args);
childProcess.stdout.on('data', (data) => {
const output = data.toString().trim().split('\n');
output.forEach((line) => {
console.log(`${prefix} | ${line}`);
});
});
childProcess.stderr.on('data', (data) => {
const error = data.toString().trim().split('\n');
error.forEach((line) => {
console.error(`${prefix} | ${line}`);
});
});
childProcess.on('close', (code) => {
console.log(`${prefix} Child process exited with code ${code}`);
});
childProcess.on('error', (stuff) => {
console.log("error")
console.log(stuff)
})
return childProcess
}
const envFileContent = Object.entries(process.env) const envFileContent = Object.entries(process.env)
.filter(([env]) => env.startsWith("VITE_")) .filter(([env]) => env.startsWith("VITE_"))
@@ -16,3 +46,19 @@ fs.writeFileSync("build.env", envFileContent)
execSync(`npx import-meta-env -x build.env -e build.env -p "/site/**/*"`) execSync(`npx import-meta-env -x build.env -e build.env -p "/site/**/*"`)
fs.rmSync("build.env") fs.rmSync("build.env")
const caddyFileName = process.env.ENABLE_SUBPATH_BASED_ACCESS === 'true' ? 'sh-admin-subpath-access.Caddyfile' : 'sh-admin-multiport-setup.Caddyfile'
const caddyProcess = runChildProcessWithPrefix("caddy", ["run", "--config", `/etc/caddy/${caddyFileName}`, "--adapter", "caddyfile"], "App/Admin Dashboard Caddy")
caddyProcess.on("exit", (code) => {
console.log(`Exiting process because Caddy Server exited with code ${code}`)
process.exit(code)
})
process.on('SIGINT', () => {
console.log("SIGINT received, exiting...")
caddyProcess.kill("SIGINT")
process.exit(0)
})

View File

@@ -0,0 +1,5 @@
:8080 {
try_files {path} /
root * /site/sh-admin-multiport-setup
file_server
}

View File

@@ -1,5 +1,5 @@
:8080 { :8080 {
try_files {path} / try_files {path} /
root * /site root * /site/sh-admin-subpath-access
file_server file_server
} }

View File

@@ -48,8 +48,10 @@ RUN pnpm run build --outDir dist-subpath-access --base /admin/
FROM caddy:2-alpine as sh_admin FROM caddy:2-alpine as sh_admin
WORKDIR /site WORKDIR /site
COPY --from=sh_admin_builder /usr/src/app/packages/hoppscotch-sh-admin/prod_run.mjs /usr COPY --from=sh_admin_builder /usr/src/app/packages/hoppscotch-sh-admin/prod_run.mjs /usr
COPY --from=sh_admin_builder /usr/src/app/packages/hoppscotch-sh-admin/Caddyfile /etc/caddy/Caddyfile COPY --from=sh_admin_builder /usr/src/app/packages/hoppscotch-sh-admin/sh-admin-multiport-setup.Caddyfile /etc/caddy/sh-admin-multiport-setup.Caddyfile
COPY --from=sh_admin_builder /usr/src/app/packages/hoppscotch-sh-admin/dist/ . COPY --from=sh_admin_builder /usr/src/app/packages/hoppscotch-sh-admin/sh-admin-subpath-access.Caddyfile /etc/caddy/sh-admin-subpath-access.Caddyfile
COPY --from=sh_admin_builder /usr/src/app/packages/hoppscotch-sh-admin/dist /site/sh-admin-multiport-setup
COPY --from=sh_admin_builder /usr/src/app/packages/hoppscotch-sh-admin/dist-subpath-access /site/sh-admin-subpath-access
RUN apk add nodejs npm RUN apk add nodejs npm
RUN npm install -g @import-meta-env/cli RUN npm install -g @import-meta-env/cli
EXPOSE 8080 EXPOSE 8080