Ports, Docker
This commit is contained in:
parent
de4795b9a1
commit
4b517ae5a5
5 changed files with 45 additions and 29 deletions
1
problem_01/.dockerignore
Normal file
1
problem_01/.dockerignore
Normal file
|
|
@ -0,0 +1 @@
|
|||
/target/
|
||||
|
|
@ -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"] }
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
|
|||
20
problem_01/fly.toml
Normal file
20
problem_01/fly.toml
Normal file
|
|
@ -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
|
||||
|
|
@ -1,21 +1,27 @@
|
|||
use tokio::net::TcpListener;
|
||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||
use tokio::net::TcpListener;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue