feat: Containerize services with Docker Compose (PostgreSQL, Strapi CMS, Express Backend, Nginx Frontend) on custom ports >9000

This commit is contained in:
Vishva
2026-08-03 19:58:10 +05:30
parent 48f8ab9716
commit 6244fd4072
247 changed files with 56672 additions and 169 deletions
+14 -1
View File
@@ -14,6 +14,8 @@ import multer from 'multer';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const PORT = process.env.PORT || 3001;
const UPLOAD_DIR = process.env.UPLOAD_DIR || path.join(__dirname, 'uploads');
const STRAPI_UPLOADS_DIR = path.join(__dirname, '..', 'strapi-cms', 'public', 'uploads');
const PUBLIC_UPLOADS_DIR = path.join(__dirname, '..', 'public', 'uploads');
// Public URL prefix on Apache (e.g. /citpl_website). Leave empty if site is at domain root.
const SITE_BASE = (process.env.SITE_BASE ?? '').replace(/\/$/, '');
const distDir = path.join(__dirname, '..', 'dist');
@@ -42,6 +44,8 @@ function mountApp(base) {
const prefix = base || '';
app.use(`${prefix}/uploads`, express.static(UPLOAD_DIR));
app.use(`${prefix}/uploads`, express.static(STRAPI_UPLOADS_DIR));
app.use(`${prefix}/uploads`, express.static(PUBLIC_UPLOADS_DIR));
app.get(`${prefix}/api/health`, (_req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
@@ -74,8 +78,14 @@ if (SITE_BASE) {
// Fallback: serve public/assets directly at /assets/ and /citpl_website/assets/
// This ensures cert/logo images load regardless of which base the build used
app.use('/assets', express.static(publicAssetsDir));
app.use('/uploads', express.static(UPLOAD_DIR));
app.use('/uploads', express.static(STRAPI_UPLOADS_DIR));
app.use('/uploads', express.static(PUBLIC_UPLOADS_DIR));
if (SITE_BASE) {
app.use(`${SITE_BASE}/assets`, express.static(publicAssetsDir));
app.use(`${SITE_BASE}/uploads`, express.static(UPLOAD_DIR));
app.use(`${SITE_BASE}/uploads`, express.static(STRAPI_UPLOADS_DIR));
app.use(`${SITE_BASE}/uploads`, express.static(PUBLIC_UPLOADS_DIR));
}
// Return proper 404 for missing static assets (prevents index.html served as JS/CSS)
@@ -95,7 +105,7 @@ app.use((err, _req, res, _next) => {
res.status(500).json({ error: err.message || 'Internal server error', code: 'SERVER_ERROR' });
});
app.listen(PORT, () => {
app.listen(PORT, '0.0.0.0', () => {
console.log(`CITPL Node server on http://localhost:${PORT}`);
console.log(` API: /api/* and ${SITE_BASE || ''}/api/*`);
console.log(` Auth: ADMIN_USERNAME from .env (${process.env.ADMIN_USERNAME || 'admin'})`);
@@ -103,3 +113,6 @@ app.listen(PORT, () => {
console.log(` Static: ${distDir}`);
}
});
// Keep process active in background subshells
setInterval(() => {}, 1000 * 3600);