114 lines
2.8 KiB
YAML
114 lines
2.8 KiB
YAML
# PyServe Process Orchestration Example
|
|
#
|
|
# This configuration demonstrates running multiple ASGI/WSGI applications
|
|
# as isolated processes with automatic health monitoring and restart.
|
|
|
|
server:
|
|
host: "0.0.0.0"
|
|
port: 8000
|
|
backlog: 2048
|
|
proxy_timeout: 60.0
|
|
|
|
logging:
|
|
level: DEBUG
|
|
console_output: true
|
|
format:
|
|
type: standard
|
|
use_colors: true
|
|
|
|
extensions:
|
|
# Process Orchestration - runs each app in its own process
|
|
- type: process_orchestration
|
|
config:
|
|
# Port range for worker processes
|
|
port_range: [9000, 9999]
|
|
|
|
# Enable health monitoring
|
|
health_check_enabled: true
|
|
|
|
# Proxy timeout for requests
|
|
proxy_timeout: 60.0
|
|
|
|
apps:
|
|
# FastAPI application
|
|
- name: api
|
|
path: /api
|
|
app_path: examples.apps.fastapi_app:app
|
|
module_path: "."
|
|
workers: 2
|
|
health_check_path: /health
|
|
health_check_interval: 10.0
|
|
health_check_timeout: 5.0
|
|
health_check_retries: 3
|
|
max_restart_count: 5
|
|
restart_delay: 1.0
|
|
shutdown_timeout: 30.0
|
|
strip_path: true
|
|
env:
|
|
APP_ENV: "production"
|
|
DEBUG: "false"
|
|
|
|
# Flask application (WSGI wrapped to ASGI)
|
|
- name: admin
|
|
path: /admin
|
|
app_path: examples.apps.flask_app:app
|
|
app_type: wsgi
|
|
module_path: "."
|
|
workers: 1
|
|
health_check_path: /health
|
|
strip_path: true
|
|
|
|
# Starlette application
|
|
- name: web
|
|
path: /web
|
|
app_path: examples.apps.starlette_app:app
|
|
module_path: "."
|
|
workers: 2
|
|
health_check_path: /health
|
|
strip_path: true
|
|
|
|
# Custom ASGI application
|
|
- name: custom
|
|
path: /custom
|
|
app_path: examples.apps.custom_asgi:app
|
|
module_path: "."
|
|
workers: 1
|
|
health_check_path: /health
|
|
strip_path: true
|
|
|
|
# Routing for static files and reverse proxy
|
|
- type: routing
|
|
config:
|
|
regex_locations:
|
|
# Static files
|
|
"^/static/.*":
|
|
type: static
|
|
root: "./static"
|
|
strip_prefix: "/static"
|
|
|
|
# Documentation
|
|
"^/docs/?.*":
|
|
type: static
|
|
root: "./docs"
|
|
strip_prefix: "/docs"
|
|
|
|
# External API proxy
|
|
"^/external/.*":
|
|
type: proxy
|
|
upstream: "https://api.example.com"
|
|
strip_prefix: "/external"
|
|
|
|
# Security headers
|
|
- type: security
|
|
config:
|
|
security_headers:
|
|
X-Content-Type-Options: "nosniff"
|
|
X-Frame-Options: "DENY"
|
|
X-XSS-Protection: "1; mode=block"
|
|
Strict-Transport-Security: "max-age=31536000; includeSubDomains"
|
|
|
|
# Monitoring
|
|
- type: monitoring
|
|
config:
|
|
enable_metrics: true
|