diff --git a/.env.production.postgres b/.env.production.postgres new file mode 100644 index 0000000..6d2a2b3 --- /dev/null +++ b/.env.production.postgres @@ -0,0 +1,67 @@ +# Production environment + +# --- NiceGUI Server --- +HOST=0.0.0.0 +PORT=8000 +LOG_LEVEL=info +RELOAD=false +ENVIRONMENT=production +# TRANSCRIPTION_COMMIT= +RUN_EMBEDDED_WORKER=false +LOG_DIR=/app/data/logs +LOG_FILE_NAME=transcription.log +LOG_FILE_MAX_BYTES=10485760 +LOG_FILE_BACKUP_COUNT=5 + +# --- AI provider --- +PROVIDER=openrouter +OPENROUTER_API_KEY=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 +PROVIDER_MODEL=google/gemini-2.5-flash +PROVIDER_MODELS=["google/gemini-2.5-pro","google/gemini-2.5-flash","anthropic/claude-opus-5","anthropic/claude-sonnet-4","openai/gpt-5.6","openai/gpt-4o"] +# OPENROUTER_HTTP_REFERER= +# OPENROUTER_APP_TITLE= +DEFAULT_PROMPT_NAME=transcribe_document.md +# TRANSCRIPTION_TEMPERATURE= +# TRANSCRIPTION_TOP_P= + +# --- persistence --- +# Common database settings: +DATABASE__DRIVER=postgres +DATABASE__DATABASE=transcription +DATABASE__USER=transcription +DATABASE__PASSWORD= +BOOTSTRAP_SCHEMA_ON_STARTUP=false + +# SQLite-specific settings: +# DATABASE__PATH=./data/transcription.db +# SQLITE_CHECK_SAME_THREAD=false + +# Postgres-specific settings: +DATABASE__HOST=postgres +DATABASE__PORT=5432 + +# --- filesystem paths --- +UPLOAD_DIR=/app/uploads +PROMPT_DIR=/app/prompts +# --- backup workflow helpers (not Runtime Settings model fields) --- +BACKUP_DIR=/backup +BACKUP_RETENTION_DAYS=14 + +# --- worker reliability --- +WORKER_MAX_RETRIES=0 +WORKER_PROVIDER_TIMEOUT_SECONDS=30.0 +WORKER_STALE_JOB_SECONDS=30.0 +WORKER_RETRY_BACKOFF_SECONDS=1.0 +WORKER_SHUTDOWN_GRACE_SECONDS=5.0 +WORKER_POLL_INTERVAL_SECONDS=1.0 +WORKER_MIN_TRANSCRIPTION_CHARS=0 +WORKER_MIN_TRANSCRIPTION_LINES=0 +WORKER_FAIL_ON_FINISH_REASON_LENGTH=false + +# --- cloudflare tunnel --- +# Required for token-based tunnel startup. +CLOUDFLARE_TUNNEL_TOKEN=CLOUDFLARE_TUNNEL_TOKEN=eyJhIjoiYTRhNjM0NzNhNzBiZjhhYmY3OWUyNjE4ZTcyNjgwZmMiLCJ0IjoiZWY1MjFkNWItYzY1ZS00ZGFmLTlmYTMtMzQyOGYzMGUyMDY4IiwicyI6IlpHWm1NVGRsTVRVdFpEYzNaaTAwWkRJeUxXRmhPRFV0TmpKallXRmhPRFJrWXpSaSJ9 + +# --- deployment wiring helpers --- +# Runtime Settings writes target this file path inside the app container. +RUNTIME_SETTINGS_ENV_FILE=/app/.env.production diff --git a/.env.production.sqlite b/.env.production.sqlite new file mode 100644 index 0000000..c06731d --- /dev/null +++ b/.env.production.sqlite @@ -0,0 +1,67 @@ +# Production environment + +# --- NiceGUI Server --- +HOST=0.0.0.0 +PORT=8000 +LOG_LEVEL=info +RELOAD=false +ENVIRONMENT=production +# TRANSCRIPTION_COMMIT= +RUN_EMBEDDED_WORKER=false +LOG_DIR=/app/data/logs +LOG_FILE_NAME=transcription.log +LOG_FILE_MAX_BYTES=10485760 +LOG_FILE_BACKUP_COUNT=5 + +# --- AI provider --- +PROVIDER=openrouter +OPENROUTER_API_KEY=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 +PROVIDER_MODEL=google/gemini-2.5-flash +PROVIDER_MODELS=["google/gemini-2.5-pro","google/gemini-2.5-flash","anthropic/claude-opus-5","anthropic/claude-sonnet-4","openai/gpt-5.6","openai/gpt-4o"] +# OPENROUTER_HTTP_REFERER= +# OPENROUTER_APP_TITLE= +DEFAULT_PROMPT_NAME=transcribe_document.md +# TRANSCRIPTION_TEMPERATURE= +# TRANSCRIPTION_TOP_P= + +# --- persistence --- +# Common database settings: +DATABASE__DRIVER=sqlite +# DATABASE__DATABASE=transcription +# DATABASE__USER=transcription-local +# DATABASE__PASSWORD=My!3sons +# BOOTSTRAP_SCHEMA_ON_STARTUP=false + +# SQLite-specific settings: +DATABASE__PATH=./data-local/transcription-local.db +SQLITE_CHECK_SAME_THREAD=false + +# Postgres-specific settings: +# DATABASE__HOST=postgres +# DATABASE__PORT=5432 + +# --- filesystem paths --- +UPLOAD_DIR=./data-local +PROMPT_DIR=/data/prompts +# --- backup workflow helpers (not Runtime Settings model fields) --- +BACKUP_DIR=/backup +BACKUP_RETENTION_DAYS=14 + +# --- worker reliability --- +WORKER_MAX_RETRIES=0 +WORKER_PROVIDER_TIMEOUT_SECONDS=30.0 +WORKER_STALE_JOB_SECONDS=30.0 +WORKER_RETRY_BACKOFF_SECONDS=1.0 +WORKER_SHUTDOWN_GRACE_SECONDS=5.0 +WORKER_POLL_INTERVAL_SECONDS=1.0 +WORKER_MIN_TRANSCRIPTION_CHARS=0 +WORKER_MIN_TRANSCRIPTION_LINES=0 +WORKER_FAIL_ON_FINISH_REASON_LENGTH=false + +# --- cloudflare tunnel --- +# Required for token-based tunnel startup. +CLOUDFLARE_TUNNEL_TOKEN=CLOUDFLARE_TUNNEL_TOKEN=eyJhIjoiYTRhNjM0NzNhNzBiZjhhYmY3OWUyNjE4ZTcyNjgwZmMiLCJ0IjoiZWY1MjFkNWItYzY1ZS00ZGFmLTlmYTMtMzQyOGYzMGUyMDY4IiwicyI6IlpHWm1NVGRsTVRVdFpEYzNaaTAwWkRJeUxXRmhPRFV0TmpKallXRmhPRFJrWXpSaSJ9 + +# --- deployment wiring helpers --- +# Runtime Settings writes target this file path inside the app container. +RUNTIME_SETTINGS_ENV_FILE=/app/.env.production diff --git a/.gitignore b/.gitignore index e81e291..4e369cb 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,8 @@ data/backups/* data/documents/* data/logs/* data/photos/* +data-local/* + # Migration tests data-migration-test/*