From 106c02e8b180e6e75ff395c1041649f890427b60 Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Thu, 13 Oct 2022 12:49:27 +0000 Subject: [PATCH] proxy: run different versions of pocketbase --- packages/daemon/package.json | 2 +- packages/daemon/src/InstanceManager.ts | 51 +++++++++++++-------- packages/pocketbase/.gitignore | 2 +- packages/pocketbase/package.json | 10 +++- packages/pocketbase/{ => src}/go.mod | 0 packages/pocketbase/{ => src}/go.sum | 0 packages/pocketbase/{ => src}/pocketbase.go | 0 readme.md | 2 +- 8 files changed, 44 insertions(+), 23 deletions(-) rename packages/pocketbase/{ => src}/go.mod (100%) rename packages/pocketbase/{ => src}/go.sum (100%) rename packages/pocketbase/{ => src}/pocketbase.go (100%) diff --git a/packages/daemon/package.json b/packages/daemon/package.json index e9a245cd..afe24a62 100644 --- a/packages/daemon/package.json +++ b/packages/daemon/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "license": "MIT", "scripts": { - "build": "mkdir -p dist && esbuild src/server.ts --bundle --platform=node > dist/server.js", + "build": "mkdir -p dist && esbuild src/server.ts --bundle --platform=node > dist/server.js && echo 'Build complete' `date`", "watch": "chokidar 'src/**' -c 'yarn build' --initial", "serve": "node dist/server.js" }, diff --git a/packages/daemon/src/InstanceManager.ts b/packages/daemon/src/InstanceManager.ts index 34949c72..c9c00c49 100644 --- a/packages/daemon/src/InstanceManager.ts +++ b/packages/daemon/src/InstanceManager.ts @@ -31,11 +31,11 @@ const tryFetch = (url: string) => console.log(`Trying to connect to instance ${url} `) fetch(url) .then(() => { - console.log(`Connection successful`) + console.log(`Connection to ${url} successful`) resolve() }) .catch((e) => { - console.error(`Could not connect`) + console.error(`Could not connect to ${url}`) setTimeout(tryFetch, 1000) }) } @@ -48,9 +48,13 @@ const mkInternalUrl = (port: number) => `http://${mkInternalAddress(port)}` export const createInstanceManger = async () => { const instances: { [_: string]: Instance } = {} - const _spawn = async (cfg: { subdomain: string; port: number }) => { - const { subdomain, port } = cfg - const cmd = `${BIN_ROOT}/pocketbase` + const _spawn = async (cfg: { + subdomain: string + port: number + bin: string + }) => { + const { subdomain, port, bin } = cfg + const cmd = `${BIN_ROOT}/${bin}` const args = [ `serve`, `--dir`, @@ -91,6 +95,7 @@ export const createInstanceManger = async () => { const mainProcess = await _spawn({ subdomain: CORE_PB_SUBDOMAIN, port: CORE_PB_PORT, + bin: 'pocketbase', }) instances[CORE_PB_SUBDOMAIN] = { process: mainProcess, @@ -100,10 +105,14 @@ export const createInstanceManger = async () => { } await tryFetch(coreInternalUrl) try { - await client.adminAuthViaEmail(CORE_PB_USERNAME, CORE_PB_PASSWORD)} - catch(e) { - console.error(`***WARNING*** CANNOT AUTHENTICATE TO https://${CORE_PB_SUBDOMAIN}.${APP_DOMAIN}/_/`) - console.error(`***WARNING*** LOG IN MANUALLY, ADJUST .env, AND RESTART DOCKER`) + await client.adminAuthViaEmail(CORE_PB_USERNAME, CORE_PB_PASSWORD) + } catch (e) { + console.error( + `***WARNING*** CANNOT AUTHENTICATE TO https://${CORE_PB_SUBDOMAIN}.${APP_DOMAIN}/_/` + ) + console.error( + `***WARNING*** LOG IN MANUALLY, ADJUST .env, AND RESTART DOCKER` + ) } const limiter = new Bottleneck({ maxConcurrent: 1 }) @@ -111,18 +120,20 @@ export const createInstanceManger = async () => { const getInstance = (subdomain: string) => limiter.schedule(async () => { console.log(`Getting instance ${subdomain}`) - const instance = instances[subdomain] - if (instance) { - console.log(`Found in cache: ${subdomain}`) - instance.heartbeat() - return instance + { + const instance = instances[subdomain] + if (instance) { + console.log(`Found in cache: ${subdomain}`) + instance.heartbeat() + return instance + } } console.log(`Checking ${subdomain} for permission`) const recs = await client.getInstanceBySubdomain(subdomain) - const [item] = recs.items - if (!item) { + const [instance] = recs.items + if (!instance) { console.log(`${subdomain} not found`) return } @@ -134,13 +145,17 @@ export const createInstanceManger = async () => { port: 8090, exclude, }).catch((e) => { - console.error(`Failed to get port`) + console.error(`Failed to get port for ${subdomain}`) throw e }) console.log(`Found port for ${subdomain}: ${newPort}`) await client.updateInstanceStatus(subdomain, InstanceStatus.Starting) - const childProcess = await _spawn({ subdomain, port: newPort }) + const childProcess = await _spawn({ + subdomain, + port: newPort, + bin: instance.bin || 'pocketbase', + }) const internalUrl = mkInternalUrl(newPort) diff --git a/packages/pocketbase/.gitignore b/packages/pocketbase/.gitignore index 13bcbd30..53c37a16 100644 --- a/packages/pocketbase/.gitignore +++ b/packages/pocketbase/.gitignore @@ -1 +1 @@ -pocketbase \ No newline at end of file +dist \ No newline at end of file diff --git a/packages/pocketbase/package.json b/packages/pocketbase/package.json index d5491df7..fa608292 100644 --- a/packages/pocketbase/package.json +++ b/packages/pocketbase/package.json @@ -3,7 +3,13 @@ "version": "0.0.1", "license": "MIT", "scripts": { - "build:arm64": "GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build", - "build:386": "GOOS=linux GOARCH=386 CGO_ENABLED=0 go build" + "build:arm64": "cd src && GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o ../dist/pocketbase && echo 'Build complete' `date`", + "build:beta:arm64": "cd src && GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o ../dist/pocketbase-beta && echo 'Build complete' `date`", + "build:386": "cd src && GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o ../dist/pocketbase && echo 'Build complete' `date`", + "build:beta:386": "cd src && GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o ../dist/pocketbase-beta && echo 'Build complete' `date`", + "watch:beta:386": "chokidar 'src/**/*' -c 'yarn build:beta:386' --initial" + }, + "devDependencies": { + "chokidar-cli": "^3.0.0" } } \ No newline at end of file diff --git a/packages/pocketbase/go.mod b/packages/pocketbase/src/go.mod similarity index 100% rename from packages/pocketbase/go.mod rename to packages/pocketbase/src/go.mod diff --git a/packages/pocketbase/go.sum b/packages/pocketbase/src/go.sum similarity index 100% rename from packages/pocketbase/go.sum rename to packages/pocketbase/src/go.sum diff --git a/packages/pocketbase/pocketbase.go b/packages/pocketbase/src/pocketbase.go similarity index 100% rename from packages/pocketbase/pocketbase.go rename to packages/pocketbase/src/pocketbase.go diff --git a/readme.md b/readme.md index 1ec11c1c..52c29d60 100644 --- a/readme.md +++ b/readme.md @@ -46,7 +46,7 @@ Join us in the discussion area. ### 0.2.1 - Idle/running status for PB instance now shows in green -- Ability to run separate versions of PocketBase per instance for beta/dev purposes +- Ability to run separate versions of PocketBase per instance for custom cases including beta/dev ### 0.2.0