41874ab391
新增分支与指定提交的预览部署 SPA 和 Jenkins 代理服务 新增多实例 Docker 预览流水线、端口租约、实时健康状态和卸载能力 新增 /build 内网路由、systemd 部署资产和运维文档 修正容器 Nginx 健康检查探针
43 lines
1.4 KiB
Rust
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);
|
|
});
|
|
}
|