Build [v1.10.2]
This commit is contained in:
@@ -28,7 +28,7 @@ def load_config():
|
|||||||
load_dotenv(backend_env_path)
|
load_dotenv(backend_env_path)
|
||||||
log.info(f"ℹ️ Loaded local configuration from {backend_env_path}")
|
log.info(f"ℹ️ Loaded local configuration from {backend_env_path}")
|
||||||
else:
|
else:
|
||||||
log.warning("⚠️ No .env config files found. Relying on system environment variables.")
|
log.info("ℹ️ [CONFIG] Using system environment variables (Docker/Server environment).")
|
||||||
|
|
||||||
# Auto-run if imported
|
# Auto-run if imported
|
||||||
load_config()
|
load_config()
|
||||||
|
|||||||
@@ -26,6 +26,12 @@ bash /app/scripts/init_data.sh
|
|||||||
# Fix permissions for mounted volumes (which might be root-owned by the host)
|
# Fix permissions for mounted volumes (which might be root-owned by the host)
|
||||||
echo "🐳 [Docker] Fixing volume permissions..."
|
echo "🐳 [Docker] Fixing volume permissions..."
|
||||||
chown -R appuser:appuser "${DATA_DIR}" "${LOGS_DIR}"
|
chown -R appuser:appuser "${DATA_DIR}" "${LOGS_DIR}"
|
||||||
|
chmod -R 770 "${DATA_DIR}" "${LOGS_DIR}"
|
||||||
|
|
||||||
|
# Verify logic: Ensure appuser can actually write before we hand off
|
||||||
|
echo "🐳 [Docker] Verifying directory writability..."
|
||||||
|
gosu appuser touch "${LOGS_DIR}/.startup_test" && rm "${LOGS_DIR}/.startup_test"
|
||||||
|
gosu appuser touch "${DATA_DIR}/.startup_test" && rm "${DATA_DIR}/.startup_test"
|
||||||
|
|
||||||
# Hand off to the application server as non-root user
|
# Hand off to the application server as non-root user
|
||||||
echo "🐳 [Docker] Starting uvicorn as appuser..."
|
echo "🐳 [Docker] Starting uvicorn as appuser..."
|
||||||
|
|||||||
@@ -27,26 +27,25 @@ def setup_logger():
|
|||||||
datefmt="%Y-%m-%d %H:%M:%S"
|
datefmt="%Y-%m-%d %H:%M:%S"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Console Handler
|
# File Handler (10MB max, keep 5 backups)
|
||||||
|
try:
|
||||||
|
file_handler = RotatingFileHandler(
|
||||||
|
LOG_FILE_PATH, maxBytes=10*1024*1024, backupCount=5
|
||||||
|
)
|
||||||
|
file_handler.setFormatter(formatter)
|
||||||
|
logger.addHandler(file_handler)
|
||||||
|
|
||||||
|
# Special redirect for uvicorn logs to also go to file
|
||||||
|
logging.getLogger("uvicorn").addHandler(file_handler)
|
||||||
|
logging.getLogger("uvicorn.access").addHandler(file_handler)
|
||||||
|
except (PermissionError, IOError) as e:
|
||||||
|
logger.warning(f"⚠️ [LOGGING] Cannot write to log file at {LOG_FILE_PATH}: {e}")
|
||||||
|
logger.warning("⚠️ [LOGGING] Continuing with console-only output.")
|
||||||
|
|
||||||
|
# Console Handler (always registered)
|
||||||
console_handler = logging.StreamHandler()
|
console_handler = logging.StreamHandler()
|
||||||
console_handler.setFormatter(formatter)
|
console_handler.setFormatter(formatter)
|
||||||
|
|
||||||
# File Handler (10MB max, keep 5 backups)
|
|
||||||
file_handler = RotatingFileHandler(
|
|
||||||
LOG_FILE_PATH, maxBytes=10*1024*1024, backupCount=5
|
|
||||||
)
|
|
||||||
file_handler.setFormatter(formatter)
|
|
||||||
|
|
||||||
# Attach handlers
|
|
||||||
logger.addHandler(console_handler)
|
logger.addHandler(console_handler)
|
||||||
logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
# Special redirect for uvicorn logs to also go to file
|
|
||||||
uvicorn_logger = logging.getLogger("uvicorn")
|
|
||||||
uvicorn_logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
uvicorn_access_logger = logging.getLogger("uvicorn.access")
|
|
||||||
uvicorn_access_logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
return logger
|
return logger
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"version": "1.10.1",
|
"version": "1.10.2",
|
||||||
"last_build": "2026-04-15-1741",
|
"last_build": "2026-04-15-1754",
|
||||||
"codename": "ModularAdmin",
|
"codename": "ModularAdmin",
|
||||||
"commit": "062df8cf"
|
"commit": "d9e592cc"
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user