Dockerize

This commit is contained in:
2024-05-14 04:40:34 +02:00
parent 9f2e0ca753
commit 20095ac8ca
6 changed files with 60 additions and 14 deletions

3
.env.example Normal file
View File

@@ -0,0 +1,3 @@
ADDRESS=0.0.0.0
PORT=3000
ENABLE_CORS=true

1
.gitignore vendored
View File

@@ -1 +1,2 @@
/target
.env

7
Cargo.lock generated
View File

@@ -228,6 +228,12 @@ dependencies = [
"crypto-common",
]
[[package]]
name = "dotenv"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
[[package]]
name = "engineioxide"
version = "0.13.1"
@@ -610,6 +616,7 @@ version = "0.1.0"
dependencies = [
"axum",
"chrono",
"dotenv",
"serde",
"serde_json",
"socketioxide",

View File

@@ -8,6 +8,7 @@ edition = "2021"
[dependencies]
axum = "0.7.5"
chrono = "0.4.38"
dotenv = "0.15.0"
serde = { version = "1.0.201", features = ["derive"] }
serde_json = "1.0.117"
socketioxide = "0.13.1"

19
Dockerfile Normal file
View File

@@ -0,0 +1,19 @@
FROM rust:1.76 as builder
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
COPY src ./src
RUN cargo build --release
FROM rust:1.76
WORKDIR /app
COPY --from=builder /app/target/release/painter .
COPY painter-js/dist ./dist
COPY .env .env
EXPOSE 3000
CMD ["./painter"]

View File

@@ -71,6 +71,7 @@ async fn on_connect(socket: SocketRef, state: Arc<AppState>) {
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenv::dotenv().ok();
tracing::subscriber::set_global_default(FmtSubscriber::new())?;
let (layer, io) = SocketIo::new_layer();
@@ -85,24 +86,38 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
tokio::spawn(on_connect(socket, app_state_for_ns.clone()));
});
let cors = CorsLayer::new()
let address = std::env::var("ADDRESS").unwrap_or_else(|_| "0.0.0.0".to_string());
let port: u16 = std::env::var("PORT")
.unwrap_or_else(|_| "3000".to_string())
.parse()
.expect("Invalid port");
let enable_cors = std::env::var("ENABLE_CORS").unwrap_or_else(|_| "true".to_string()) == "true";
let cors = if enable_cors {
Some(
CorsLayer::new()
.allow_origin(Any)
.allow_methods(Any)
.allow_headers(Any);
.allow_headers(Any),
)
} else {
None
};
let app = Router::new()
.fallback_service(ServeDir::new("painter-js/dist"))
.layer(layer)
.layer(cors);
.fallback_service(ServeDir::new("dist"))
.layer(layer);
info!("Starting server");
let app = if let Some(cors) = cors {
app.layer(cors)
} else {
app
};
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await?;
axum::serve(
listener,
app.into_make_service_with_connect_info::<SocketAddr>(),
)
.await?;
let server_address = format!("{}:{}", address, port);
info!("Starting server on {}", server_address);
let listener = tokio::net::TcpListener::bind(server_address).await?;
axum::serve(listener, app.into_make_service()).await?;
Ok(())
}