diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0c51b9e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +target +Dockerfile +README.md +Tiltfile diff --git a/Cargo.lock b/Cargo.lock index 7582276..6cdb3f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,28 +38,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" -[[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "async-trait" version = "0.1.68" @@ -77,22 +55,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "aws_lambda_events" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65991dbc3bfb586939ba1527eefdc99bc21157b6ec891f180fb1e16e2dddc7a9" -dependencies = [ - "base64", - "bytes", - "http", - "http-body", - "http-serde", - "query_map", - "serde", - "serde_json", -] - [[package]] name = "axum" version = "0.6.20" @@ -125,21 +87,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "axum-aws-lambda" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44dbc4a3315ff4e5aeddf2d3ee0372d282dfb3fc2b6d5f6c8b9b983e8880c48b" -dependencies = [ - "axum", - "bytes", - "http", - "hyper", - "lambda_http", - "tower", - "tower-service", -] - [[package]] name = "axum-core" version = "0.3.4" @@ -172,12 +119,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base64" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" - [[package]] name = "bitflags" version = "1.3.2" @@ -201,9 +142,6 @@ name = "bytes" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -dependencies = [ - "serde", -] [[package]] name = "cc" @@ -261,15 +199,6 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - [[package]] name = "fnv" version = "1.0.7" @@ -417,16 +346,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" -[[package]] -name = "http-serde" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e272971f774ba29341db2f686255ff8a979365a26fb9e4277f6b6d9ec0cdd5e" -dependencies = [ - "http", - "serde", -] - [[package]] name = "httparse" version = "1.8.0" @@ -510,62 +429,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "lambda_http" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b15e8ab48a5d8eab3110567008caad4d191924d1470b74c5c8b802b904b5a34" -dependencies = [ - "aws_lambda_events", - "base64", - "bytes", - "encoding_rs", - "futures", - "http", - "http-body", - "hyper", - "lambda_runtime", - "mime", - "percent-encoding", - "serde", - "serde_json", - "serde_urlencoded", - "url", -] - -[[package]] -name = "lambda_runtime" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9db262b5e9548a371d9e1dd54ba094b75e3e46b345c11458ea2b4d4c54fbffa9" -dependencies = [ - "async-stream", - "bytes", - "futures", - "http", - "hyper", - "lambda_runtime_api_client", - "serde", - "serde_json", - "serde_path_to_error", - "tokio", - "tokio-stream", - "tower", - "tracing", -] - -[[package]] -name = "lambda_runtime_api_client" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "690c5ae01f3acac8c9c3348b556fc443054e9b7f1deaf53e9ebab716282bf0ed" -dependencies = [ - "http", - "hyper", - "tokio", - "tower-service", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -740,17 +603,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "query_map" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4465aacac3bebc9484cf7a56dc8b2d7feacb657da6002a9198b4f7af4247a204" -dependencies = [ - "form_urlencoded", - "serde", - "serde_derive", -] - [[package]] name = "quote" version = "1.0.32" @@ -1010,17 +862,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tokio-stream" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.8" @@ -1407,10 +1248,8 @@ name = "world-id-bridge" version = "0.1.0" dependencies = [ "axum", - "axum-aws-lambda", "chrono", "dotenvy", - "lambda_http", "redis", "serde", "tokio", diff --git a/Cargo.toml b/Cargo.toml index c9b2050..90c57a0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,10 +10,8 @@ description = "A bridge between the World ID SDK and the World App" [dependencies] axum = "0.6.20" tower = "0.4.13" -serde = "1.0.183" +serde = { version = "1.0.183", features = ["derive"] } dotenvy = "0.15.7" -lambda_http = "0.8.1" -axum-aws-lambda = "0.5.0" tracing = { version = "0.1", features = ["log"] } tokio = { version = "1.31.0", features = ["full"] } tower-http = { version = "0.4.3", features = ["cors"] } diff --git a/Dockerfile b/Dockerfile index 8148c97..5708512 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,20 @@ #################################################################################################### ## Base image #################################################################################################### -FROM rust:latest AS builder - -RUN update-ca-certificates - +FROM clux/muslrust:stable AS chef +USER root WORKDIR /app +RUN cargo install cargo-chef -COPY ./Cargo.toml . -COPY ./Cargo.lock . - -RUN mkdir ./src && echo 'fn main() { println!("you lost the game"); }' > ./src/main.rs - -RUN cargo build --release - -RUN rm -rf ./src - -COPY src src +FROM chef AS planner +COPY . . +RUN cargo chef prepare --recipe-path recipe.json -RUN cargo build --release +FROM chef AS builder +COPY --from=planner /app/recipe.json recipe.json +RUN cargo chef cook --release --target x86_64-unknown-linux-musl --recipe-path recipe.json +COPY . . +RUN cargo build --release --target x86_64-unknown-linux-musl #################################################################################################### ## Final image @@ -27,6 +23,8 @@ FROM gcr.io/distroless/cc WORKDIR /app -COPY --from=builder /app/target/release/world-id-bridge /app/world-id-bridge +COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/world-id-bridge /app/world-id-bridge +USER 100 +EXPOSE 8000 CMD ["/app/world-id-bridge"] diff --git a/src/server.rs b/src/server.rs index ab52f31..1bbc3e6 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,16 +1,21 @@ -use axum::Extension; -use axum_aws_lambda::LambdaLayer; +use std::{env, net::SocketAddr}; + +use axum::{Extension, Server}; use redis::aio::ConnectionManager; -use tower::ServiceBuilder; use crate::routes; pub async fn start(redis: ConnectionManager) { - let router = routes::handler().layer(Extension(redis)); + let app = routes::handler().layer(Extension(redis)); - let app = ServiceBuilder::new() - .layer(LambdaLayer::default()) - .service(router); + let address = SocketAddr::from(( + [0, 0, 0, 0], + env::var("PORT").map_or(8000, |p| p.parse().unwrap()), + )); - lambda_http::run(app).await.unwrap(); + println!("🪩 World Bridge started on http://{address}"); + Server::bind(&address) + .serve(app.into_make_service()) + .await + .expect("Failed to start server"); }