- Rust/Axum backend skeleton with all crates, multi-stage Dockerfile - SvelteKit + TypeScript frontend with Tailwind CSS v4, adapter-node, Dockerfile - docker-compose.yml: db (postgres:16) → app → frontend → caddy with healthcheck and named volumes - Caddyfile: TLS via Let's Encrypt, cache headers, API/media routing to backend - .env.example: all environment variables documented with defaults - README.md: project overview, features, stack, deploy guide, roadmap - .gitignore: excludes secrets, build artifacts, node_modules, media uploads Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
28 lines
847 B
Rust
28 lines
847 B
Rust
use anyhow::Result;
|
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<()> {
|
|
dotenvy::dotenv().ok();
|
|
|
|
tracing_subscriber::registry()
|
|
.with(tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| {
|
|
"eventsnap_backend=debug,tower_http=debug".into()
|
|
}))
|
|
.with(tracing_subscriber::fmt::layer())
|
|
.init();
|
|
|
|
let port: u16 = std::env::var("APP_PORT")
|
|
.unwrap_or_else(|_| "3000".to_string())
|
|
.parse()?;
|
|
|
|
let router = axum::Router::new()
|
|
.route("/health", axum::routing::get(|| async { "ok" }));
|
|
|
|
let listener = tokio::net::TcpListener::bind(("0.0.0.0", port)).await?;
|
|
tracing::info!("listening on {}", listener.local_addr()?);
|
|
axum::serve(listener, router).await?;
|
|
|
|
Ok(())
|
|
}
|