Files
Genarrative/server-rs/crates/preview-deployer-server/src/main.rs
T
kdletters 41874ab391
Project CI / Repository checks (push) Successful in 1m16s
Project CI / Frontend tests (push) Successful in 3m1s
Project CI / Backend tests (push) Successful in 4m2s
Project CI / Native shell tests (push) Successful in 17m2s
新增内网容器预览部署控制面
新增分支与指定提交的预览部署 SPA 和 Jenkins 代理服务
新增多实例 Docker 预览流水线、端口租约、实时健康状态和卸载能力
新增 /build 内网路由、systemd 部署资产和运维文档
修正容器 Nginx 健康检查探针
2026-08-15 17:18:10 +08:00

43 lines
1.4 KiB
Rust

use preview_deployer_server::{AppState, Config, build_router};
use tracing::info;
use tracing_subscriber::EnvFilter;
#[tokio::main]
async fn main() {
tracing_subscriber::fmt()
.with_env_filter(
EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new("info,tower_http=info")),
)
.init();
let config = Config::from_env().unwrap_or_else(|error| {
eprintln!("预览部署服务配置无效: {error}");
std::process::exit(2);
});
let listener = tokio::net::TcpListener::bind(&config.bind_address)
.await
.unwrap_or_else(|error| {
eprintln!("预览部署服务监听失败: {error}");
std::process::exit(2);
});
let address = listener
.local_addr()
.expect("bound listener has local address");
let state = AppState::new(config).unwrap_or_else(|error| {
eprintln!("预览部署服务初始化失败: {error}");
std::process::exit(2);
});
info!(%address, "preview deployer server started");
axum::serve(listener, build_router(state))
.with_graceful_shutdown(async {
let _ = tokio::signal::ctrl_c().await;
})
.await
.unwrap_or_else(|error| {
eprintln!("预览部署服务退出: {error}");
std::process::exit(1);
});
}