← back to Designerwallcoverings
deploy: pm2 port 9925 + nginx :80 vhost, gemini env loader
f29cf2736c8f5da841e571b10e9c28a49caf20fd · 2026-05-10 03:19:48 -0700 · Steve Abrams
Files touched
A ecosystem.config.jsM server.js
Diff
commit f29cf2736c8f5da841e571b10e9c28a49caf20fd
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sun May 10 03:19:48 2026 -0700
deploy: pm2 port 9925 + nginx :80 vhost, gemini env loader
---
ecosystem.config.js | 20 ++++++++++++++++++++
server.js | 15 +++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/ecosystem.config.js b/ecosystem.config.js
new file mode 100644
index 0000000..ed16cbd
--- /dev/null
+++ b/ecosystem.config.js
@@ -0,0 +1,20 @@
+module.exports = {
+ apps: [{
+ name: 'designerwallcoverings.ai',
+ script: 'server.js',
+ cwd: '/root/Projects/designerwallcoverings',
+ instances: 1,
+ exec_mode: 'fork',
+ env: {
+ NODE_ENV: 'production',
+ PORT: 9925,
+ BIND: '127.0.0.1',
+ },
+ env_file: '/root/Projects/designerwallcoverings/.env',
+ autorestart: true,
+ max_memory_restart: '256M',
+ out_file: '/root/.pm2/logs/designerwallcoverings.ai-out.log',
+ error_file: '/root/.pm2/logs/designerwallcoverings.ai-err.log',
+ merge_logs: true,
+ }],
+};
diff --git a/server.js b/server.js
index 3992eea..2461598 100644
--- a/server.js
+++ b/server.js
@@ -17,6 +17,21 @@ const multer = require('multer');
const path = require('path');
const fs = require('fs');
+try {
+ const envPath = path.join(__dirname, '.env');
+ if (fs.existsSync(envPath)) {
+ for (const line of fs.readFileSync(envPath, 'utf8').split(/\r?\n/)) {
+ const m = /^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/.exec(line);
+ if (!m) continue;
+ const [, k, raw] = m;
+ if (process.env[k]) continue;
+ let v = raw.trim();
+ if ((v.startsWith('"') && v.endsWith('"')) || (v.startsWith("'") && v.endsWith("'"))) v = v.slice(1, -1);
+ process.env[k] = v;
+ }
+ }
+} catch (_) {}
+
const PORT = parseInt(process.env.PORT || '9925', 10);
const BIND = process.env.BIND || '127.0.0.1';
const GA_ID = 'G-69X70WPXJ1';
← 469fcec initial scaffold + GA gtag — designerwallcoverings.ai room-m
·
back to Designerwallcoverings
·
dw site: log Gemini image-classify usage to cost-tracker 579e226 →