This commit is contained in:
Robin Appelman 2023-11-25 00:31:32 +01:00
commit 3ffcb664d2
2 changed files with 29 additions and 3 deletions

View file

@ -27,7 +27,7 @@
pkgs = (import nixpkgs) { pkgs = (import nixpkgs) {
inherit system overlays; inherit system overlays;
}; };
inherit (pkgs) lib callPackage; inherit (pkgs) lib callPackage dockerTools;
src = lib.sources.sourceByRegex ./. ["Cargo.*" "(src|build|images|script|style)(/.*)?" "sqlx-data.json"]; src = lib.sources.sourceByRegex ./. ["Cargo.*" "(src|build|images|script|style)(/.*)?" "sqlx-data.json"];
nodeSrc = lib.sources.sourceByRegex ./. ["package.*"]; nodeSrc = lib.sources.sourceByRegex ./. ["package.*"];
@ -51,6 +51,24 @@
''; '';
nativeBuildInputs = with pkgs; [pkg-config openssl]; nativeBuildInputs = with pkgs; [pkg-config openssl];
}; };
docker = dockerTools.buildLayeredImage {
name = "demostf/frontend";
tag = "latest";
maxLayers = 5;
contents = [
frontend
];
config = {
Cmd = ["frontend"];
ExposedPorts = {
"80/tcp" = {};
};
Env = [
"LISTEN_ADDRESS=0.0.0.0"
"LISTEN_PORT=80"
];
};
};
}; };
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
OPENSSL_NO_VENDOR = 1; OPENSSL_NO_VENDOR = 1;

View file

@ -45,6 +45,8 @@ use std::net::SocketAddr;
use std::os::unix::fs::PermissionsExt; use std::os::unix::fs::PermissionsExt;
use std::sync::Arc; use std::sync::Arc;
use steam_openid::SteamOpenId; use steam_openid::SteamOpenId;
use tokio::signal;
use tokio::signal::ctrl_c;
use tower_http::trace::TraceLayer; use tower_http::trace::TraceLayer;
use tracing::{error, info, info_span}; use tracing::{error, info, info_span};
use tracing_subscriber::{ use tracing_subscriber::{
@ -157,12 +159,18 @@ async fn main() -> Result<()> {
.fallback(handler_404) .fallback(handler_404)
.with_state(state); .with_state(state);
let service = app.into_make_service(); let service = app.into_make_service();
let ctrl_c = async {
ctrl_c().await.expect("failed to install Ctrl+C handler");
};
match config.listen { match config.listen {
Listen::Tcp { address, port } => { Listen::Tcp { address, port } => {
let addr = SocketAddr::from((address, port)); let addr = SocketAddr::from((address, port));
info!("listening on {}", addr); info!("listening on {}", addr);
Server::bind(&addr).serve(service).await?; Server::bind(&addr)
.serve(service)
.with_graceful_shutdown(ctrl_c)
.await?;
} }
Listen::Socket { path } => { Listen::Socket { path } => {
info!("listening on {}", path.display()); info!("listening on {}", path.display());
@ -172,7 +180,7 @@ async fn main() -> Result<()> {
let socket = Server::bind_unix(&path)?; let socket = Server::bind_unix(&path)?;
set_permissions(&path, Permissions::from_mode(0o666))?; set_permissions(&path, Permissions::from_mode(0o666))?;
socket.serve(service).await?; socket.serve(service).with_graceful_shutdown(ctrl_c).await?;
} }
} }