'localhost', 'DB_PORT' => 3306, 'DB_NAME' => 'your_db_name', 'DB_USER' => 'your_db_user', 'DB_PASS' => 'your_db_password', 'API_KEY' => 'replace-with-long-random-secret', 'SMS_USER_ID' => 'your-cafe24-sms-user-id', 'SMS_SECURE' => 'your-cafe24-sms-secure-key', 'SMS_SENDER' => '01000000000', 'SMS_RECIPIENTS' => [ '01000000000', ], 'ADMIN_USER' => 'admin', 'ADMIN_PASSWORD_HASH' => '$2y$10$replace.with.password_hash.output', // Base32 TOTP secret for Google Authenticator, Microsoft Authenticator, Authy, etc. // Generate a UNIQUE secret with `php setup_mfa.php` (or admin_totp_secret()) and store // the QR/secret only in the operator handover package. The placeholder below is NOT a // valid Base32 secret on purpose, so MFA stays disabled until a real secret is set — // never ship a known/example secret here. 'ADMIN_TOTP_SECRET' => 'REPLACE_WITH_UNIQUE_BASE32_SECRET', // Temporary bootstrap token for setup_mfa.php. Remove or empty after MFA enrollment. 'MFA_SETUP_TOKEN' => 'replace-with-temporary-random-token', // 온습도 임계 경보 (서버 판정 → SMS). 운영 환경에 맞게 조정. 'METRIC_TEMP_HIGH_C' => 30, // 고온 임계(℃) 'METRIC_TEMP_LOW_C' => 10, // 저온 임계(℃) 'METRIC_RH_HIGH' => 70, // 고습 임계(%) 'METRIC_RH_LOW' => 20, // 저습 임계(%) 'METRIC_ALERT_COOLDOWN_SEC' => 1800, // 동일 종류 경보 재발송 억제(초, 기본 30분) 'SMS_LOG_RETENTION_DAYS' => 365, 'SENSOR_LOG_RETENTION_DAYS' => 365, 'SENSOR_METRIC_RETENTION_DAYS' => 365, 'ADMIN_AUDIT_RETENTION_DAYS' => 365, ];