Three operational gaps tripped a recent review: 1. **Postgres had no `restart:` policy.** tor / docker-socket-proxy / vision-manager all set `unless-stopped`; pg was the lone exception. A transient OOM or panic left backend's `depends_on: service_healthy` blocking every future restart and took the stack offline. Add `unless-stopped` on postgres and on backend/frontend in the base compose so the prod overlay is the same shape. 2. **`BACKEND_PROXY_TIMEOUT_MS` was documented but silently a no-op.** `.env.example` carried it but `docker-compose.yml` never forwarded it into the frontend service env, so the value never reached `hooks.server.ts`. Wire it through. 3. **`.env.example` omitted required env vars.** Operators copying the template got no admin bootstrap, no boot-seed crawler URL, no analysis configuration. Add: `ADMIN_USERNAME`, `ADMIN_PASSWORD`, `PRIVATE_MODE`, `ALLOW_SELF_REGISTER`, `CRAWLER_START_URL`, `CRAWLER_CDN_HOST`, `ANALYSIS_ENABLED`, `ANALYSIS_VISION_URL`, `ANALYSIS_VISION_MODEL`, `ANALYSIS_WORKERS`, `ANALYSIS_JOB_TIMEOUT_SECS`, `ANALYSIS_API_KEY` — each with the comment block that explains seed-vs-runtime semantics. Also adds `frontend/vite.config.ts.timestamp-*.mjs` to `.gitignore` — a crashed dev server leaves these transient files behind otherwise. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
73 lines
2.3 KiB
TOML
73 lines
2.3 KiB
TOML
[package]
|
||
name = "mangalord"
|
||
version = "0.87.1"
|
||
edition = "2021"
|
||
default-run = "mangalord"
|
||
|
||
[lib]
|
||
path = "src/lib.rs"
|
||
|
||
[[bin]]
|
||
name = "mangalord"
|
||
path = "src/main.rs"
|
||
|
||
[[bin]]
|
||
name = "crawler"
|
||
path = "src/bin/crawler.rs"
|
||
|
||
[dependencies]
|
||
axum = { version = "0.7", features = ["macros", "multipart"] }
|
||
tokio = { version = "1", features = ["full"] }
|
||
sqlx = { version = "0.8", features = ["runtime-tokio", "postgres", "uuid", "chrono", "macros", "migrate"] }
|
||
serde = { version = "1", features = ["derive"] }
|
||
serde_json = "1"
|
||
uuid = { version = "1", features = ["v4", "serde"] }
|
||
chrono = { version = "0.4", features = ["serde"] }
|
||
chrono-tz = "0.9"
|
||
tracing = "0.1"
|
||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||
tower = { version = "0.5", features = ["util"] }
|
||
tower-http = { version = "0.6", features = ["trace", "cors"] }
|
||
thiserror = "1"
|
||
anyhow = "1"
|
||
async-trait = "0.1"
|
||
dotenvy = "0.15"
|
||
argon2 = "0.5"
|
||
rand = "0.8"
|
||
sha2 = "0.10"
|
||
subtle = "2"
|
||
base64 = "0.22"
|
||
# Image decode + downscale for the analysis worker (keep the page image
|
||
# under the local vision model's token budget). Only the manga page formats.
|
||
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp"] }
|
||
axum-extra = { version = "0.9", features = ["cookie", "typed-header"] }
|
||
time = "0.3"
|
||
infer = "0.16"
|
||
tokio-util = { version = "0.7", features = ["io"] }
|
||
futures-core = "0.3"
|
||
futures-util = "0.3"
|
||
bytes = "1"
|
||
chromiumoxide = { version = "0.7", features = ["tokio-runtime", "_fetcher-rusttls-tokio"], default-features = false }
|
||
sysinfo = { version = "0.32", default-features = false, features = ["system", "component"] }
|
||
nix = { version = "0.29", features = ["fs"] }
|
||
scraper = "0.20"
|
||
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "socks", "cookies", "stream", "json"] }
|
||
|
||
[dev-dependencies]
|
||
tempfile = "3"
|
||
tower = { version = "0.5", features = ["util"] }
|
||
http-body-util = "0.1"
|
||
mime = "0.3"
|
||
futures-util = "0.3"
|
||
tokio = { version = "1", features = ["test-util"] }
|
||
|
||
# Trim debug builds: keep line numbers in panics / backtraces but drop the
|
||
# full DWARF info (variable-level inspection in gdb/lldb). With a sqlx +
|
||
# axum + tokio dep tree the default ("full") leaves backend/target on the
|
||
# order of tens of GiB; this typically cuts ~50–70% off that.
|
||
[profile.dev]
|
||
debug = "line-tables-only"
|
||
|
||
[profile.test]
|
||
debug = "line-tables-only"
|