diff --git a/backend/config/sequelize-cli.cjs b/backend/config/sequelize-cli.cjs new file mode 100644 index 0000000..1dd96f4 --- /dev/null +++ b/backend/config/sequelize-cli.cjs @@ -0,0 +1,32 @@ +const path = require('path'); +const dotenv = require('dotenv'); + +const envPath = process.env.SEQUELIZE_ENV_FILE + ? path.resolve(process.cwd(), process.env.SEQUELIZE_ENV_FILE) + : path.resolve(process.cwd(), '.env'); + +dotenv.config({ path: envPath }); + +const dialectOptions = {}; +if (process.env.DB_SSL === '1' || process.env.PGSSLMODE === 'require') { + dialectOptions.ssl = process.env.DB_SSL_REJECT_UNAUTHORIZED === '0' + ? { rejectUnauthorized: false } + : true; +} + +const shared = { + username: process.env.DB_USER, + password: process.env.DB_PASS || '', + database: process.env.DB_NAME, + host: process.env.DB_HOST || '127.0.0.1', + port: Number.parseInt(process.env.DB_PORT || '5432', 10), + dialect: 'postgres', + logging: false, + dialectOptions +}; + +module.exports = { + development: shared, + test: shared, + production: shared +}; diff --git a/backend/package.json b/backend/package.json index 820cb8d..13e832e 100644 --- a/backend/package.json +++ b/backend/package.json @@ -9,6 +9,7 @@ "dev": "NODE_ENV=development node server.js", "start-daemon": "node daemonServer.js", "sync-db": "node sync-database.js", + "db:migrate": "sequelize-cli db:migrate --config config/sequelize-cli.cjs --migrations-path migrations --env production", "sync-tables": "node sync-tables-only.js", "check-connections": "node check-connections.js", "cleanup-connections": "node cleanup-connections.js", diff --git a/backend/utils/syncDatabase.js b/backend/utils/syncDatabase.js index c3732a9..1cf3776 100644 --- a/backend/utils/syncDatabase.js +++ b/backend/utils/syncDatabase.js @@ -77,6 +77,13 @@ import initializeWidgetTypes from './initializeWidgetTypes.js'; // Normale Synchronisation (nur bei STAGE=dev Schema-Updates) const syncDatabase = async () => { try { + const runInitOnStart = process.env.APP_INIT_ON_START === '1'; + if (!runInitOnStart) { + console.log('⏭️ APP_INIT_ON_START!=1: Überspringe datenbankseitige Initialisierungs-/Ensure-Routinen beim Start.'); + console.log('💡 Empfehlung: Schema-Änderungen via Migrationen im Deploy ausführen (npm run db:migrate).'); + return; + } + // Zeige den aktuellen Stage an const currentStage = process.env.STAGE || 'nicht gesetzt'; console.log(`🚀 Starte Datenbank-Synchronisation (Stage: ${currentStage})`); diff --git a/update-backend.sh b/update-backend.sh index d7b43fb..b603998 100755 --- a/update-backend.sh +++ b/update-backend.sh @@ -62,4 +62,14 @@ echo "Running database synchronization..." cd "$BACKEND_DIR" export STAGE="$STAGE" +echo "Führe Migrationen aus..." +npm run db:migrate + +if [ "${RUN_LEGACY_SYNC_DB_ON_DEPLOY:-0}" = "1" ]; then + echo "RUN_LEGACY_SYNC_DB_ON_DEPLOY=1 gesetzt -> führe zusätzlich legacy sync-db aus..." + npm run sync-db +else + echo "Legacy sync-db übersprungen (Standard)." +fi + echo "Backend update completed!"