From 123e5dfe8dbef10722de400b75eab7a967ea431e Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Wed, 27 Dec 2023 08:29:13 -0800 Subject: [PATCH] Add dev root routing --- package.json | 12 +++++++---- src/cli/proxy/server.ts | 45 ++++++++++++++++++++++++++++------------- src/constants.ts | 7 +++++-- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index ec1c060c..ce0913c8 100644 --- a/package.json +++ b/package.json @@ -15,13 +15,17 @@ "build:frontend:dashboard": "cd frontends/dashboard && pnpm build", "build:frontend:lander": "cd frontends/lander && pnpm build", "build:frontend:superadmin": "cd frontends/superadmin && pnpm build", - "dev": "concurrently 'pnpm:dev:*'", + "dev": "NODE_ENV=development concurrently 'pnpm:dev:*'", "dev-daemon": "concurrently 'pnpm:dev:daemon:*'", + "dev:proxy": " dotenv tsx watch ./src/cli/proxy/server.ts", "dev:lander": "cd frontends/lander && pnpm start", "dev:dashboard": "cd frontends/dashboard && pnpm dev", - "dev:proxy": "DEBUG=1 dotenv tsx ./src/cli/proxy/server.ts", - "dev:daemon:server": "DEBUG=1 tsx watch src/cli/server.ts", - "dev:daemon:maildev": "npx -y maildev", + "dev:superadmin": "cd frontends/superadmin && pnpm dev", + "dev:edge:daemon": "tsx watch src/cli/edge-daemon.ts", + "dev:edge:ftp": "tsx watch src/cli/edge-ftp.ts", + "dev:downloader": "pnpm download-versions", + "dev:mothership:maildev": "npx -y maildev", + "dev:mothership:pocketbase": "tsx watch src/cli/mothership.ts", "prod:proxy": "dotenv tsx ./src/cli/proxy/server.ts", "prod:edge:daemon": "tsx src/cli/edge-daemon.ts", "prod:edge:ftp": "tsx src/cli/edge-ftp.ts", diff --git a/src/cli/proxy/server.ts b/src/cli/proxy/server.ts index dc926035..93aa42cb 100644 --- a/src/cli/proxy/server.ts +++ b/src/cli/proxy/server.ts @@ -2,6 +2,7 @@ import { DAEMON_PORT, DefaultSettingsService, IPCIDR_LIST, + IS_DEV, MOTHERSHIP_PORT, SETTINGS, } from '$constants' @@ -9,6 +10,7 @@ import { forEach } from '@s-libs/micro-dash' import cors from 'cors' import express from 'express' import fs from 'fs' +import http from 'http' import https from 'https' import { createIpWhitelistMiddleware } from './cidr' @@ -16,10 +18,19 @@ import { createVhostProxyMiddleware } from './createVhostProxyMiddleware' DefaultSettingsService(SETTINGS) -const hostnameRoutes = { +const PROD_ROUTES = { 'pockethost-central.pockethost.io': `http://localhost:${MOTHERSHIP_PORT()}`, '*.pockethost.io': `http://localhost:${DAEMON_PORT()}`, } +const DEV_ROUTES = { + 'mail.pockethost.lvh.me': `http://localhost:${1080}`, + 'pockethost-central.pockethost.lvh.me': `http://localhost:${MOTHERSHIP_PORT()}`, + 'app.pockethost.lvh.me': `http://localhost:${5174}`, + 'superadmin.pockethost.lvh.me': `http://localhost:${5175}`, + 'pockethost.lvh.me': `http://localhost:${8080}`, + '*.pockethost.lvh.me': `http://localhost:${DAEMON_PORT()}`, +} +const hostnameRoutes = IS_DEV() ? DEV_ROUTES : PROD_ROUTES // Create Express app const app = express() @@ -33,17 +44,23 @@ forEach(hostnameRoutes, (target, host) => { app.use(createVhostProxyMiddleware(host, target)) }) -// HTTPS server options -const httpsOptions = { - key: fs.readFileSync( - '/home/pockethost/pockethost/ssl/cloudflare-privkey.pem', - ), - cert: fs.readFileSync( - '/home/pockethost/pockethost/ssl/cloudflare-origin.pem', - ), -} +if (IS_DEV()) { + http.createServer(app).listen(80, () => { + console.log('HTTP server running on port 80') + }) +} else { + // HTTPS server options + const httpsOptions = { + key: fs.readFileSync( + '/home/pockethost/pockethost/ssl/cloudflare-privkey.pem', + ), + cert: fs.readFileSync( + '/home/pockethost/pockethost/ssl/cloudflare-origin.pem', + ), + } -// Create HTTPS server -https.createServer(httpsOptions, app).listen(443, () => { - console.log('HTTPS server running on port 443') -}) + // Create HTTPS server + https.createServer(httpsOptions, app).listen(443, () => { + console.log('HTTPS server running on port 443') + }) +} diff --git a/src/constants.ts b/src/constants.ts index f4387286..1703d0c3 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -25,6 +25,7 @@ const loadedEnvs = dotenv.config({ path: `.env` }) export const _PH_HOME = join(process.env.HOME || resolve(`~`), `.pockethost`) export const _PH_PROJECT_ROOT = dirname(findUpSync('package.json')!) export const _PH_BUILD_ROOT = join(_PH_PROJECT_ROOT, 'dist') +export const _IS_DEV = process.env.NODE_ENV === 'development' console.log({ _PH_HOME, _PH_PROJECT_ROOT, _PH_BUILD_ROOT }) @@ -33,14 +34,14 @@ export const SETTINGS = { PH_PROJECT_ROOT: mkPath(_PH_PROJECT_ROOT), PH_BUILD_ROOT: mkPath(_PH_BUILD_ROOT, { required: false }), - DEBUG: mkBoolean(false), + DEBUG: mkBoolean(_IS_DEV), HTTP_PROTOCOL: mkString('https:'), APP_URL: mkString(`https://app.pockethost.io`), BLOG_URL: mkString(`https://pockethost.io`), APEX_DOMAIN: mkString(`pockethost.io`), - IPCIDR_LIST: mkCsvString([]), + IPCIDR_LIST: mkCsvString([`127.0.0.1/32`]), DAEMON_PORT: mkNumber(3000), DAEMON_PB_IDLE_TTL: mkNumber(1000 * 60 * 5), // 5 minutes @@ -64,6 +65,7 @@ export const SETTINGS = { INITIAL_PORT_POOL_SIZE: mkNumber(20), DATA_ROOT: mkPath(join(_PH_HOME, 'data')), NODE_ENV: mkString(`production`), + IS_DEV: mkBoolean(_IS_DEV), TRACE: mkBoolean(false), PH_BIN_CACHE: mkPath(join(_PH_HOME, '.pbincache')), @@ -186,6 +188,7 @@ export const MOTHERSHIP_PORT = () => settings().MOTHERSHIP_PORT export const INITIAL_PORT_POOL_SIZE = () => settings().INITIAL_PORT_POOL_SIZE export const DATA_ROOT = () => settings().DATA_ROOT export const NODE_ENV = () => settings().NODE_ENV +export const IS_DEV = () => settings().IS_DEV export const TRACE = () => settings().TRACE export const PH_BIN_CACHE = () => settings().PH_BIN_CACHE