Enhance gunicorn config handling with env vars and command line arg priority

• Add env var support for timeout/keepalive
• Prioritize CLI args over env vars
• Standardize default timeout to 150s
This commit is contained in:
yangdx
2025-03-01 12:58:52 +08:00
parent 35bcfca28f
commit 48d9800573
2 changed files with 22 additions and 16 deletions

View File

@@ -26,8 +26,8 @@ preload_app = True
worker_class = "uvicorn.workers.UvicornWorker" worker_class = "uvicorn.workers.UvicornWorker"
# Other Gunicorn configurations # Other Gunicorn configurations
timeout = int(os.getenv("TIMEOUT", 120)) timeout = int(os.getenv("TIMEOUT", 150)) # Default 150s to match run_with_gunicorn.py
keepalive = 5 keepalive = int(os.getenv("KEEPALIVE", 5)) # Default 5s
# Logging configuration # Logging configuration
errorlog = os.getenv("ERROR_LOG", log_file_path) # Default write to lightrag.log errorlog = os.getenv("ERROR_LOG", log_file_path) # Default write to lightrag.log

View File

@@ -96,21 +96,27 @@ def main():
# Import and configure the gunicorn_config module # Import and configure the gunicorn_config module
import gunicorn_config import gunicorn_config
# Set configuration variables in gunicorn_config # Set configuration variables in gunicorn_config, prioritizing command line arguments
gunicorn_config.workers = int(os.getenv("WORKERS", args.workers)) gunicorn_config.workers = args.workers if args.workers else int(os.getenv("WORKERS", 1))
gunicorn_config.bind = (
f"{os.getenv('HOST', args.host)}:{os.getenv('PORT', args.port)}" # Bind configuration prioritizes command line arguments
) host = args.host if args.host != "0.0.0.0" else os.getenv("HOST", "0.0.0.0")
gunicorn_config.loglevel = ( port = args.port if args.port != 9621 else int(os.getenv("PORT", 9621))
args.log_level.lower() gunicorn_config.bind = f"{host}:{port}"
if args.log_level
else os.getenv("LOG_LEVEL", "info") # Log level configuration prioritizes command line arguments
) gunicorn_config.loglevel = args.log_level.lower() if args.log_level else os.getenv("LOG_LEVEL", "info")
# Set SSL configuration if enabled # Timeout configuration prioritizes command line arguments
if args.ssl: gunicorn_config.timeout = args.timeout if args.timeout else int(os.getenv("TIMEOUT", 150))
gunicorn_config.certfile = args.ssl_certfile
gunicorn_config.keyfile = args.ssl_keyfile # Keepalive configuration
gunicorn_config.keepalive = int(os.getenv("KEEPALIVE", 5))
# SSL configuration prioritizes command line arguments
if args.ssl or os.getenv("SSL", "").lower() in ("true", "1", "yes", "t", "on"):
gunicorn_config.certfile = args.ssl_certfile if args.ssl_certfile else os.getenv("SSL_CERTFILE")
gunicorn_config.keyfile = args.ssl_keyfile if args.ssl_keyfile else os.getenv("SSL_KEYFILE")
# Set configuration options from the module # Set configuration options from the module
for key in dir(gunicorn_config): for key in dir(gunicorn_config):