chore: added subpath support to hoppscotch-backend service
This commit is contained in:
@@ -17,7 +17,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
# Edit the below line to match your PostgresDB URL if you have an outside DB (make sure to update the .env file as well)
|
# Edit the below line to match your PostgresDB URL if you have an outside DB (make sure to update the .env file as well)
|
||||||
- DATABASE_URL=postgresql://postgres:testpass@hoppscotch-db:5432/hoppscotch?connect_timeout=300
|
- DATABASE_URL=postgresql://postgres:testpass@hoppscotch-db:5432/hoppscotch?connect_timeout=300
|
||||||
- PORT=3170
|
- PORT=8080
|
||||||
volumes:
|
volumes:
|
||||||
# Uncomment the line below when modifying code. Only applicable when using the "dev" target.
|
# Uncomment the line below when modifying code. Only applicable when using the "dev" target.
|
||||||
# - ./packages/hoppscotch-backend/:/usr/src/app
|
# - ./packages/hoppscotch-backend/:/usr/src/app
|
||||||
@@ -26,6 +26,7 @@ services:
|
|||||||
hoppscotch-db:
|
hoppscotch-db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
ports:
|
ports:
|
||||||
|
- "3180:80"
|
||||||
- "3170:3170"
|
- "3170:3170"
|
||||||
|
|
||||||
# The main hoppscotch app. This will be hosted at port 3000
|
# The main hoppscotch app. This will be hosted at port 3000
|
||||||
|
|||||||
3
packages/hoppscotch-backend/Caddyfile
Normal file
3
packages/hoppscotch-backend/Caddyfile
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
:3170 {
|
||||||
|
reverse_proxy localhost:80
|
||||||
|
}
|
||||||
3
packages/hoppscotch-backend/backend-multiport.Caddyfile
Normal file
3
packages/hoppscotch-backend/backend-multiport.Caddyfile
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
:80 :3170 {
|
||||||
|
reverse_proxy localhost:8080
|
||||||
|
}
|
||||||
7
packages/hoppscotch-backend/backend-subpath.Caddyfile
Normal file
7
packages/hoppscotch-backend/backend-subpath.Caddyfile
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
:80 :3170 {
|
||||||
|
handle_path /backend* {
|
||||||
|
reverse_proxy localhost:8080
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
71
packages/hoppscotch-backend/prod_run.mjs
Normal file
71
packages/hoppscotch-backend/prod_run.mjs
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/local/bin/node
|
||||||
|
// @ts-check
|
||||||
|
|
||||||
|
import { execSync, spawn } from 'child_process';
|
||||||
|
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 caddyFileName =
|
||||||
|
process.env.ENABLE_SUBPATH_BASED_ACCESS === 'true'
|
||||||
|
? 'backend-subpath.Caddyfile'
|
||||||
|
: 'backend-multiport.Caddyfile';
|
||||||
|
const caddyProcess = runChildProcessWithPrefix(
|
||||||
|
'caddy',
|
||||||
|
['run', '--config', `/etc/caddy/${caddyFileName}`, '--adapter', 'caddyfile'],
|
||||||
|
'App/Admin Dashboard Caddy',
|
||||||
|
);
|
||||||
|
const backendProcess = runChildProcessWithPrefix(
|
||||||
|
'pnpm',
|
||||||
|
['run', 'start:prod'],
|
||||||
|
'Backend Server',
|
||||||
|
);
|
||||||
|
|
||||||
|
caddyProcess.on('exit', (code) => {
|
||||||
|
console.log(`Exiting process because Caddy Server exited with code ${code}`);
|
||||||
|
process.exit(code);
|
||||||
|
});
|
||||||
|
|
||||||
|
backendProcess.on('exit', (code) => {
|
||||||
|
console.log(
|
||||||
|
`Exiting process because Backend Server exited with code ${code}`,
|
||||||
|
);
|
||||||
|
process.exit(code);
|
||||||
|
});
|
||||||
|
|
||||||
|
process.on('SIGINT', () => {
|
||||||
|
console.log('SIGINT received, exiting...');
|
||||||
|
|
||||||
|
caddyProcess.kill('SIGINT');
|
||||||
|
backendProcess.kill('SIGINT');
|
||||||
|
|
||||||
|
process.exit(0);
|
||||||
|
});
|
||||||
@@ -13,16 +13,20 @@ RUN pnpm install -f --offline
|
|||||||
|
|
||||||
|
|
||||||
FROM base_builder as backend
|
FROM base_builder as backend
|
||||||
|
RUN apk add caddy
|
||||||
WORKDIR /usr/src/app/packages/hoppscotch-backend
|
WORKDIR /usr/src/app/packages/hoppscotch-backend
|
||||||
RUN pnpm exec prisma generate
|
RUN pnpm exec prisma generate
|
||||||
RUN pnpm run build
|
RUN pnpm run build
|
||||||
|
COPY --from=base_builder /usr/src/app/packages/hoppscotch-backend/backend-subpath.Caddyfile /etc/caddy/backend-subpath.Caddyfile
|
||||||
|
COPY --from=base_builder /usr/src/app/packages/hoppscotch-backend/backend-multiport.Caddyfile /etc/caddy/backend-multiport.Caddyfile
|
||||||
# Remove the env file to avoid backend copying it in and using it
|
# Remove the env file to avoid backend copying it in and using it
|
||||||
RUN rm "../../.env"
|
RUN rm "../../.env"
|
||||||
ENV PRODUCTION="true"
|
ENV PRODUCTION="true"
|
||||||
ENV PORT=3170
|
ENV PORT=8080
|
||||||
ENV APP_PORT=${PORT}
|
ENV APP_PORT=${PORT}
|
||||||
ENV DB_URL=${DATABASE_URL}
|
ENV DB_URL=${DATABASE_URL}
|
||||||
CMD ["pnpm", "run", "start:prod"]
|
CMD ["node", "/usr/src/app/packages/hoppscotch-backend/prod_run.mjs"]
|
||||||
|
EXPOSE 80
|
||||||
EXPOSE 3170
|
EXPOSE 3170
|
||||||
|
|
||||||
FROM base_builder as fe_builder
|
FROM base_builder as fe_builder
|
||||||
|
|||||||
Reference in New Issue
Block a user