diff --git a/problem_01/.dockerignore b/problem_01/.dockerignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/problem_01/.dockerignore @@ -0,0 +1 @@ +/target/ diff --git a/problem_01/Cargo.toml b/problem_01/Cargo.toml index 8f8cb81..9f09bc6 100644 --- a/problem_01/Cargo.toml +++ b/problem_01/Cargo.toml @@ -4,6 +4,6 @@ version = "0.1.0" edition = "2021" [dependencies] -env_logger = "^0.10" -log = "^0.4" +env_logger = "0.9.0" +log = "0.4.0" tokio = { version = "1.27.0", features = ["full"] } diff --git a/problem_01/Dockerfile b/problem_01/Dockerfile index a6413a6..f878950 100644 --- a/problem_01/Dockerfile +++ b/problem_01/Dockerfile @@ -1,22 +1,11 @@ FROM rust:latest as builder - -WORKDIR /usr/src/app +RUN apt-get update && apt-get -y install ca-certificates cmake musl-tools libssl-dev && rm -rf /var/lib/apt/lists/* COPY . . -# Will build and cache the binary and dependent crates in release mode -RUN --mount=type=cache,target=/usr/local/cargo,from=rust:latest,source=/usr/local/cargo \ - --mount=type=cache,target=target \ - cargo build --release && mv ./target/release/problem_01 ./problem_01 - -# Runtime image -FROM debian:bullseye-slim - -# Run as "app" user -RUN useradd -ms /bin/bash app - -USER app -WORKDIR /app - -# Get compiled binaries from builder's cargo install directory -COPY --from=builder /usr/src/app/problem_01 /app/problem_01 - -# No CMD or ENTRYPOINT, see fly.toml with `cmd` override. +RUN rustup default stable && rustup update +RUN rustup target add x86_64-unknown-linux-musl +ENV PKG_CONFIG_ALLOW_CROSS=1 +RUN cargo build --target x86_64-unknown-linux-musl --release +FROM scratch +COPY --from=builder /target/x86_64-unknown-linux-musl/release/problem_01 . +EXPOSE 8080 +CMD ["/problem_01"] diff --git a/problem_01/fly.toml b/problem_01/fly.toml new file mode 100644 index 0000000..9823019 --- /dev/null +++ b/problem_01/fly.toml @@ -0,0 +1,20 @@ +# fly.toml app configuration file generated for restless-bush-123 on 2023-04-19T13:36:26+02:00 +# +# See https://fly.io/docs/reference/configuration/ for information about how to use this file. +# + +app = "restless-bush-123" +primary_region = "ams" + +[experimental] + auto_rollback = true + +[env] + ECHO_PORT = "8080" + +[[services]] + protocol = "tcp" + internal_port = 8080 + + [[services.ports]] + port = 8080 diff --git a/problem_01/src/main.rs b/problem_01/src/main.rs index 3fa13b2..3d932e3 100644 --- a/problem_01/src/main.rs +++ b/problem_01/src/main.rs @@ -1,21 +1,27 @@ -use tokio::net::TcpListener; use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::net::TcpListener; #[tokio::main] async fn main() -> Result<(), Box> { - let listener = TcpListener::bind("127.0.0.1:4040").await?; - + env_logger::init(); + let listener = TcpListener::bind("0.0.0.0:8080").await?; + log::info!("Start TCP server"); loop { let (mut socket, _) = listener.accept().await?; tokio::spawn(async move { let mut buf = [0; 1024]; - - loop { + loop { let n = match socket.read(&mut buf).await { - Ok(n) if n == 0 => return, - Ok(n) => n, + Ok(n) if n == 0 => { + log::info!("Receiving echo: {}", n); + return; + } + Ok(n) => { + log::info!("Receiving echo: {}", n); + n + } Err(e) => { log::error!("failed to read from socket; err = {:?}", e); return;