Dockerize
This commit is contained in:
3
.env.example
Normal file
3
.env.example
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
ADDRESS=0.0.0.0
|
||||||
|
PORT=3000
|
||||||
|
ENABLE_CORS=true
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
/target
|
/target
|
||||||
|
.env
|
||||||
7
Cargo.lock
generated
7
Cargo.lock
generated
@@ -228,6 +228,12 @@ dependencies = [
|
|||||||
"crypto-common",
|
"crypto-common",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dotenv"
|
||||||
|
version = "0.15.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "engineioxide"
|
name = "engineioxide"
|
||||||
version = "0.13.1"
|
version = "0.13.1"
|
||||||
@@ -610,6 +616,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"axum",
|
"axum",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
"dotenv",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"socketioxide",
|
"socketioxide",
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
axum = "0.7.5"
|
axum = "0.7.5"
|
||||||
chrono = "0.4.38"
|
chrono = "0.4.38"
|
||||||
|
dotenv = "0.15.0"
|
||||||
serde = { version = "1.0.201", features = ["derive"] }
|
serde = { version = "1.0.201", features = ["derive"] }
|
||||||
serde_json = "1.0.117"
|
serde_json = "1.0.117"
|
||||||
socketioxide = "0.13.1"
|
socketioxide = "0.13.1"
|
||||||
|
|||||||
19
Dockerfile
Normal file
19
Dockerfile
Normal 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"]
|
||||||
43
src/main.rs
43
src/main.rs
@@ -71,6 +71,7 @@ async fn on_connect(socket: SocketRef, state: Arc<AppState>) {
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
dotenv::dotenv().ok();
|
||||||
tracing::subscriber::set_global_default(FmtSubscriber::new())?;
|
tracing::subscriber::set_global_default(FmtSubscriber::new())?;
|
||||||
let (layer, io) = SocketIo::new_layer();
|
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()));
|
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());
|
||||||
.allow_origin(Any)
|
let port: u16 = std::env::var("PORT")
|
||||||
.allow_methods(Any)
|
.unwrap_or_else(|_| "3000".to_string())
|
||||||
.allow_headers(Any);
|
.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),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.fallback_service(ServeDir::new("painter-js/dist"))
|
.fallback_service(ServeDir::new("dist"))
|
||||||
.layer(layer)
|
.layer(layer);
|
||||||
.layer(cors);
|
|
||||||
|
|
||||||
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?;
|
let server_address = format!("{}:{}", address, port);
|
||||||
axum::serve(
|
info!("Starting server on {}", server_address);
|
||||||
listener,
|
let listener = tokio::net::TcpListener::bind(server_address).await?;
|
||||||
app.into_make_service_with_connect_info::<SocketAddr>(),
|
axum::serve(listener, app.into_make_service()).await?;
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user