diff --git a/backend/src/config.js b/backend/src/config.js index 2e90be8..2f61a6f 100644 --- a/backend/src/config.js +++ b/backend/src/config.js @@ -16,7 +16,9 @@ const config = { user: process.env.DB_USER || 'postgres', password: process.env.DB_PASSWORD || 'postgres', database: process.env.DB_NAME || 'ecommerce', - port: process.env.DB_PORT || 5432 + port: process.env.DB_PORT || 5432, + readHost: process.env.DB_READ_HOST || process.env.DB_HOST || 'db', + maxConnections: parseInt(process.env.DB_MAX_CONNECTIONS || '20'), }, // Email configuration @@ -72,7 +74,10 @@ const config = { awsRegion: process.env.AWS_REGION || '', awsS3Bucket: process.env.S3_BUCKET || '', cdnDomain: process.env.CDN_DOMAIN || '', - awsqueueurl: process.env.SQS_QUEUE_URL || '', + awsQueueUrl: process.env.SQS_QUEUE_URL || '', + sessionSecret: process.env.SESSION_SECRET || '', + redisPort: process.env.REDIS_PORT || '', + redisPassword: process.env.REDIS_PASSWORD || '' } }; @@ -167,8 +172,12 @@ config.updateFromDatabase = (settings) => { const awsS3Bucket = siteSettings.find(s => s.key === 'site_aws_s3_bucket'); const cdnDomain = siteSettings.find(s => s.key === 'site_cdn_domain'); const deployment = siteSettings.find(s => s.key === 'site_deployment'); - const awsqueueurl = siteSettings.find(s => s.key === 'site_aws_queue_url'); - + const awsQueueUrl = siteSettings.find(s => s.key === 'site_aws_queue_url'); + const readHost = siteSettings.find(s => s.key === 'site_read_host'); + const maxConnections = siteSettings.find(s => s.key === 'site_db_max_connections'); + const sessionSecret = siteSettings.find(s => s.key === 'site_session_secret'); + const redisPort = siteSettings.find(s => s.key === 'site_redis_port'); + const redisPassword = siteSettings.find(s => s.key === 'site_redis_password'); if (redisHost && redisHost.value) config.site.redisHost = redisHost.value; if (redisTLS && redisTLS.value) config.site.redisTLS = redisHost.value; @@ -176,7 +185,12 @@ config.updateFromDatabase = (settings) => { if (awsS3Bucket && awsS3Bucket.value) config.site.awsS3Bucket = awsS3Bucket.value; if (cdnDomain && cdnDomain.value) config.site.cdnDomain = cdnDomain.value; if (deployment && deployment.value) config.site.deployment = deployment.value; - if (awsqueueurl && awsqueueurl.value) config.site.awsqueueurl = awsqueueurl.value; + if (awsQueueUrl && awsQueueUrl.value) config.site.awsQueueUrl = awsQueueUrl.value; + if (readHost && readHost.value) config.db.readHost = readHost.value; + if (maxConnections && maxConnections.value) config.db.maxConnections = maxConnections.value; + if (sessionSecret && sessionSecret.value) config.site.sessionSecret = sessionSecret.value; + if (redisPort && redisPort.value) config.site.redisPort = redisPort.value; + if (redisPassword && redisPassword.value) config.site.redisPassword = redisPassword.value; diff --git a/backend/src/routes/settingsAdmin.js b/backend/src/routes/settingsAdmin.js index c06c813..2fe68e3 100644 --- a/backend/src/routes/settingsAdmin.js +++ b/backend/src/routes/settingsAdmin.js @@ -224,9 +224,11 @@ module.exports = (pool, query, authMiddleware) => { } else if (category === 'database') { if (key === 'db_host') config.db.host = value; if (key === 'db_user') config.db.user = value; + if (key === 'site_read_host') config.db.readHost = value; if (key === 'db_password') config.db.password = value; if (key === 'db_name') config.db.database = value; if (key === 'db_port') config.db.port = parseInt(value, 10); + if (key === 'site_db_max_connections') config.db.maxConnections = parseInt(value, 10); } else if (category === 'email') { if (key === 'smtp_host') config.email.host = value; if (key === 'smtp_port') config.email.port = parseInt(value, 10); @@ -266,7 +268,11 @@ module.exports = (pool, query, authMiddleware) => { if (key === 'site_aws_region') config.site.awsRegion = value; if (key === 'site_aws_s3_bucket') config.site.awsS3Bucket = value; if (key === 'site_cdn_domain') config.site.cdnDomain = value; - if (key === 'site_aws_queue_url') config.site.awsqueueurl = value; + if (key === 'site_aws_queue_url') config.site.awsQueueUrl = value; + if (key === 'site_session_secret') config.site.sessionSecret = value; + if (key === 'site_redis_port') config.site.redisPort = value; + if (key === 'site_redis_password') config.site.redisPassword = value; + } } @@ -288,15 +294,27 @@ module.exports = (pool, query, authMiddleware) => { envContent += '# Server configuration\n'; envContent += `PORT=${config.port}\n`; envContent += `NODE_ENV=${config.nodeEnv}\n`; - envContent += `ENVIRONMENT=${config.environment}\n\n`; + envContent += `ENVIRONMENT=${config.environment}\n`; + envContent += `DEPLOYMENT_MODE=${config.site.deployment}\n`; + envContent += `REDIS_HOST=${config.site.redisHost}\n`; + envContent += `REDIS_TLS=${config.site.redisTLS}\n`; + envContent += `REDIS_PORT=${config.site.redisPort}\n`; + envContent += `REDIS_PASSWORD=${config.site.redisPassword}\n`; + envContent += `AWS_REGION=${config.site.awsRegion}\n`; + envContent += `S3_BUCKET=${config.site.awsS3Bucket}\n`; + envContent += `CDN_DOMAIN=${config.site.cdnDomain}\n`; + envContent += `SQS_QUEUE_URL=${config.site.awsQueueUrl}\n`; + envContent += `SESSION_SECRET=${config.site.sessionSecret}\n\n`; // Database configuration envContent += '# Database configuration\n'; envContent += `DB_HOST=${config.db.host}\n`; + envContent += `DB_READ_HOST=${config.db.readHost}\n`; envContent += `DB_USER=${config.db.user}\n`; envContent += `DB_PASSWORD=${config.db.password}\n`; envContent += `DB_NAME=${config.db.database}\n`; envContent += `DB_PORT=${config.db.port}\n`; + envContent += `DB_MAX_CONNECTIONS=${config.db.maxConnections}\n`; envContent += `POSTGRES_USER=${config.db.user}\n`; envContent += `POSTGRES_PASSWORD=${config.db.password}\n`; envContent += `POSTGRES_DB=${config.db.database}\n\n`; @@ -347,13 +365,6 @@ module.exports = (pool, query, authMiddleware) => { envContent += `API_PROD_URL=${config.site.apiDomain === 'localhost:4000' ? '' : config.site.apiDomain}\n`; } envContent += `SITE_ANALYTIC_API=${config.site.analyticApiKey}\n`; - envContent += `DEPLOYMENT_MODE=${config.site.deployment}\n`; - envContent += `REDIS_HOST=${config.site.redisHost}\n`; - envContent += `REDIS_TLS=${config.site.redisTLS}\n`; - envContent += `AWS_REGION=${config.site.awsRegion}\n`; - envContent += `S3_BUCKET=${config.site.awsS3Bucket}\n`; - envContent += `CDN_DOMAIN=${config.site.cdnDomain}\n`; - envContent += `SQS_QUEUE_URL=${config.site.awsqueueurl}\n`; // Write to .env file const envPath = path.join(__dirname, '../../.env'); diff --git a/db/init/09-system-settings.sql b/db/init/09-system-settings.sql index 56a42b8..a0e2b1e 100644 --- a/db/init/09-system-settings.sql +++ b/db/init/09-system-settings.sql @@ -39,6 +39,11 @@ VALUES ('site_aws_s3_bucket', NULL, 'site'), ('site_cdn_domain', NULL, 'site'), ('site_aws_queue_url', NULL, 'site'), + ('site_read_host', NULL, 'site'), + ('site_db_max_connections', NULL, 'site'), + ('site_session_secret', NULL, 'site'), + ('site_redis_port', NULL, 'site'), + ('site_redis_password', NULL, 'site'), -- Payment Settings ('currency', 'CAD', 'payment'),