Skip to main content

A universal CLI launcher for FastAPI applications with daemon mode, logging, and rich UI

Project description

FastAPI Launcher ๐Ÿš€

A universal CLI launcher for FastAPI applications with daemon mode, logging, and rich UI.

ไธ€ไธช้€š็”จ็š„ FastAPI ๆœๅŠกๅฏๅŠจๅ™จ๏ผŒๆ”ฏๆŒๅฎˆๆŠค่ฟ›็จ‹ๆจกๅผใ€ๆ—ฅๅฟ—็ฎก็†ๅ’Œ็พŽๅŒ–็ปˆ็ซฏ่พ“ๅ‡บใ€‚

Features | ็‰นๆ€ง

  • ๐Ÿ”ฅ Hot Reload - Development mode with auto-reload | ๅผ€ๅ‘ๆจกๅผ่‡ชๅŠจ้‡่ฝฝ
  • ๐Ÿš€ Production Ready - Multi-worker support with uvicorn/gunicorn | ็”Ÿไบงๆจกๅผๅคš worker ๆ”ฏๆŒ
  • ๐Ÿ‘ป Daemon Mode - Background process support (Unix) | ๅฎˆๆŠค่ฟ›็จ‹ๆจกๅผ
  • ๐Ÿ“Š Rich UI - Beautiful terminal output with Rich | ็พŽๅŒ–็ปˆ็ซฏ่พ“ๅ‡บ
  • โš™๏ธ Flexible Config - CLI, ENV, .env, pyproject.toml | ็ตๆดป็š„้…็ฝฎ็ณป็ปŸ
  • ๐ŸŒ Multi-Environment - staging/qa/prod custom environments | ๅคš็Žฏๅขƒ้…็ฝฎๆ”ฏๆŒ
  • ๐Ÿฅ Health Check - Built-in health monitoring | ๅ†…็ฝฎๅฅๅบทๆฃ€ๆŸฅ
  • ๐Ÿ“ Access Logs - Request logging with slow request detection | ่ฏทๆฑ‚ๆ—ฅๅฟ—ๅ’Œๆ…ข่ฏทๆฑ‚ๆฃ€ๆต‹
  • ๐Ÿ” Auto Discovery - Automatically find your FastAPI app | ่‡ชๅŠจๅ‘็Žฐ App
  • ๐ŸŽฏ Smart Mode - Auto-detect dev/prod based on environment | ๆ™บ่ƒฝๆจกๅผๆฃ€ๆต‹
  • ๐Ÿ“ก Real-time Monitor - TUI monitor for server status | ๅฎžๆ—ถ TUI ็›‘ๆŽง
  • ๐Ÿฆ„ Gunicorn Backend - Optional Gunicorn for enhanced process management | ๅฏ้€‰ Gunicorn ๅŽ็ซฏ

Installation | ๅฎ‰่ฃ…

# Using pip
pip install fastapi-launcher

# With optional Gunicorn support
pip install fastapi-launcher[gunicorn]

# With TUI monitor
pip install fastapi-launcher[monitor]

# All extras
pip install fastapi-launcher[all]

# Using uv
uv add fastapi-launcher

Quick Start | ๅฟซ้€Ÿๅผ€ๅง‹

# Initialize config in pyproject.toml
fa init

# Smart mode - auto-detect dev/prod
fa run

# Development mode with hot reload
fa dev

# Production mode
fa start --workers 4

# Start with specific environment
fa start --env staging

# Gunicorn backend (Unix only)
fa start --server gunicorn --workers 8

# Daemon mode (Unix only)
fa start --daemon

# Check status (detailed worker info)
fa status --verbose

# Stop server
fa stop

# Trigger hot reload
fa reload

# Real-time monitor
fa monitor

# View logs
fa logs --follow

# Health check
fa health

# Show configuration
fa config

# Check dependencies
fa check

Configuration | ้…็ฝฎ

Configuration Priority | ้…็ฝฎไผ˜ๅ…ˆ็บง

  1. CLI arguments (highest) | CLI ๅ‚ๆ•ฐ๏ผˆๆœ€้ซ˜๏ผ‰
  2. Environment variables (FA_ prefix) | ็Žฏๅขƒๅ˜้‡
  3. .env file | .env ๆ–‡ไปถ
  4. pyproject.toml [tool.fastapi-launcher.envs.<name>] (if --env specified) | ๅ‘ฝๅ็Žฏๅขƒ้…็ฝฎ
  5. pyproject.toml [tool.fastapi-launcher] | ๅŸบ็ก€้…็ฝฎ
  6. Default values (lowest) | ้ป˜่ฎคๅ€ผ๏ผˆๆœ€ไฝŽ๏ผ‰

pyproject.toml

[tool.fastapi-launcher]
app = "main:app"
host = "127.0.0.1"
port = 8000
log_level = "info"

# Development mode overrides
[tool.fastapi-launcher.dev]
reload = true
log_level = "debug"

# Production mode overrides
[tool.fastapi-launcher.prod]
workers = 4
log_format = "json"
daemon = false

# Named environments (use with --env)
[tool.fastapi-launcher.envs.staging]
host = "0.0.0.0"
workers = 2
log_level = "info"

[tool.fastapi-launcher.envs.qa]
host = "0.0.0.0"
workers = 1
log_level = "debug"

[tool.fastapi-launcher.envs.prod]
host = "0.0.0.0"
workers = 8
server = "gunicorn"
max_requests = 1000
timeout_graceful_shutdown = 30
log_level = "warning"

Environment Variables | ็Žฏๅขƒๅ˜้‡

# Environment selection
FA_ENV=staging

# Server configuration
FA_APP=main:app
FA_HOST=0.0.0.0
FA_PORT=8000
FA_RELOAD=true
FA_WORKERS=4

# Server backend (uvicorn/gunicorn)
FA_SERVER=uvicorn

# Graceful shutdown
FA_TIMEOUT_GRACEFUL_SHUTDOWN=10

# Gunicorn-specific (when FA_SERVER=gunicorn)
FA_MAX_REQUESTS=1000
FA_MAX_REQUESTS_JITTER=100

# Logging
FA_LOG_LEVEL=info
FA_LOG_FORMAT=pretty  # or json
FA_DAEMON=false

Commands | ๅ‘ฝไปค

fa init

Initialize FastAPI Launcher configuration.

fa init                         # Add config to pyproject.toml
fa init --env                   # Also generate .env.example
fa init --force                 # Overwrite existing config

fa run

Smart start - auto-detect dev/prod mode based on environment.

fa run                          # Detect environment and start
# Detection priority:
# 1. FA_ENV environment variable
# 2. PYTHON_ENV environment variable
# 3. NODE_ENV environment variable
# 4. .env file
# 5. Heuristics (Dockerfile โ†’ prod, .git/hooks/pre-commit โ†’ dev)

fa dev

Start development server with hot reload.

fa dev                          # Auto-discover app
fa dev --app main:app           # Specify app
fa dev --port 9000              # Custom port
fa dev --no-reload              # Disable reload
fa dev --reload-dirs src,lib    # Watch specific dirs
fa dev --env staging            # Use staging environment

fa start

Start production server.

fa start                        # Default 4 workers
fa start --workers 8            # 8 workers
fa start --daemon               # Background mode
fa start --host 0.0.0.0         # Bind to all interfaces
fa start --env staging          # Use staging environment
fa start --server gunicorn      # Use Gunicorn backend
fa start --max-requests 1000    # Worker restart after N requests
fa start --timeout-graceful-shutdown 30  # Graceful shutdown timeout

fa stop

Stop running server.

fa stop                         # Graceful shutdown
fa stop --force                 # Force kill
fa stop --timeout 30            # Custom timeout

fa restart

Restart server.

fa restart                      # Stop + Start
fa restart --timeout 10         # Custom stop timeout

fa reload

Trigger hot reload on running server (Unix only).

fa reload                       # Send SIGHUP to server

fa status

Show server status.

fa status                       # Basic status
fa status --verbose             # Include worker details

# Output:
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚      Server Status          โ”‚
# โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
# โ”‚ Status   โ”‚ โ— Running        โ”‚
# โ”‚ PID      โ”‚ 12345            โ”‚
# โ”‚ URL      โ”‚ http://...:8000  โ”‚
# โ”‚ Uptime   โ”‚ 2h 30m 15s       โ”‚
# โ”‚ Memory   โ”‚ 128.5 MB         โ”‚
# โ”‚ Workers  โ”‚ 4                โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

fa monitor

Real-time monitoring with TUI interface.

fa monitor                      # TUI mode (requires textual)
fa monitor --no-tui             # Simple CLI refresh mode
fa monitor --refresh 0.5        # Custom refresh interval

fa logs

View server logs.

fa logs                         # Last 100 lines
fa logs -n 50                   # Last 50 lines
fa logs --follow                # Tail mode
fa logs --type access           # Access logs
fa logs --type error            # Error logs

fa health

Check server health.

fa health                       # Default endpoint
fa health --path /ready         # Custom endpoint
fa health --timeout 10          # Custom timeout

fa config

Show current configuration.

fa config
# Output shows merged config from all sources

fa check

Check dependencies and configuration.

fa check
# โœ“ FastAPI is installed
# โœ“ uvicorn is installed
# โœ“ Configuration is valid
# โœ“ App path is valid: main:app

fa clean

Clean runtime files.

fa clean                        # Interactive
fa clean --yes                  # Skip confirmation
fa clean --logs                 # Only log files

Project Structure | ้กน็›ฎ็ป“ๆž„

After running fa start, a runtime directory is created:

your-project/
โ”œโ”€โ”€ pyproject.toml
โ”œโ”€โ”€ main.py
โ””โ”€โ”€ runtime/
    โ”œโ”€โ”€ fa.pid          # PID file
    โ””โ”€โ”€ logs/
        โ”œโ”€โ”€ fa.log      # Application log
        โ”œโ”€โ”€ access.log  # Request log
        โ””โ”€โ”€ error.log   # Error log

App Auto-Discovery | ่‡ชๅŠจๅ‘็Žฐ

FastAPI Launcher will look for your app in these locations:

  1. main.py โ†’ main:app
  2. app.py โ†’ app:app
  3. api.py โ†’ api:app
  4. server.py โ†’ server:app
  5. src/main.py โ†’ src.main:app

Supported variable names: app, application, api

License | ่ฎธๅฏ่ฏ

MIT License

Contributing | ่ดก็Œฎ

Contributions are welcome! Please feel free to submit issues and pull requests.

ๆฌข่ฟŽ่ดก็Œฎ๏ผ่ฏท้šๆ—ถๆไบค issues ๅ’Œ pull requestsใ€‚

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi_launcher-0.2.0.tar.gz (34.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastapi_launcher-0.2.0-py3-none-any.whl (44.4 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_launcher-0.2.0.tar.gz.

File metadata

  • Download URL: fastapi_launcher-0.2.0.tar.gz
  • Upload date:
  • Size: 34.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for fastapi_launcher-0.2.0.tar.gz
Algorithm Hash digest
SHA256 b992fa08ee150a005d4ed3781a1eb39f397849cf5a651ee88b5ab514ec551ee5
MD5 adb7638d7aa91839aa553cbb0951fecc
BLAKE2b-256 c276cd30e69e68a3ef32953281d6fd70d2ce7db3a7d479a2823b9d708955e5a8

See more details on using hashes here.

File details

Details for the file fastapi_launcher-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_launcher-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cbc1234903a12e9812ea1bcd74d7d9b52d76ec9a18413d52de9f1dcfbba759cf
MD5 2691cc35ac3d9e2b8f5a3987cb55b7e6
BLAKE2b-256 3b8b663e9cc35e96a5833c9de7361a2b3bae96724a2626fce7d80a9c2b527496

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page