Skip to content
Open
Show file tree
Hide file tree
Changes from 43 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
080c19a
feat: Add httpserver-rust1.75-tokio-distroless - Add .dockerignore
cosmintanasa47 Aug 24, 2026
47cf64c
feat: Add httpserver-rust1.75-tokio-distroless - Add Cargo.lock
cosmintanasa47 Aug 24, 2026
0957965
feat: Add httpserver-rust1.75-tokio-distroless - Add Cargo.toml
cosmintanasa47 Aug 24, 2026
d1a866b
feat: Add httpserver-rust1.75-tokio-distroless - Add Kraftfile
cosmintanasa47 Aug 24, 2026
c285091
feat: Add httpserver-rust1.75-tokio-distroless - Add README
cosmintanasa47 Aug 24, 2026
cf9d4c0
feat: Add httpserver-rust1.75-tokio-distroless - Add src
cosmintanasa47 Aug 24, 2026
972158c
feat: Add httpserver-rust1.75-tokio-distroless - Add test file
cosmintanasa47 Aug 24, 2026
75824f2
feat: Add httpserver-rust1.75-tokio-distroless - Add Multi-stage Dock…
cosmintanasa47 Aug 24, 2026
4398aa7
feat: Add httpserver-rust1.91-distroless - Add multi-stage dockerfile
cosmintanasa47 Aug 27, 2026
e15f2e0
feat: Add httpserver-rust1.91-distroless - Add .dockerignore
cosmintanasa47 Aug 27, 2026
56cf273
feat: Add httpserver-rust1.91-distroless - Add .gitignore
cosmintanasa47 Aug 27, 2026
8e01501
feat: Add httpserver-rust1.91-distroless - Add README.md
cosmintanasa47 Aug 27, 2026
c398667
feat: Add httpserver-rust1.91-distroless - Add python test file
cosmintanasa47 Aug 27, 2026
3fdc432
feat: Add httpserver-rust1.91-distroless - Add Kraftfile
cosmintanasa47 Aug 27, 2026
d968a33
feat: Add httpserver-rust1.91-distroless - Add source file
cosmintanasa47 Aug 27, 2026
7de4b4c
feat: Add httpserver-rust1.91-distroless - Modify README.md
cosmintanasa47 Aug 27, 2026
35459d3
feat: Add httpserver-rut1.88-rocket0.5-distroless - Add Dockerfile
cosmintanasa47 Aug 27, 2026
8726547
feat: Correting .dockerignore
cosmintanasa47 Aug 27, 2026
f7179cc
feat: Add httpserver-rust1.88-rocket0.5-distroless - Add .dockerignore
cosmintanasa47 Aug 27, 2026
1ca7454
feat: Add httpserver-rust1.88-rocket0.5-distroless - Add .gitignore
cosmintanasa47 Aug 27, 2026
af2bb36
feat: Add httpserver-rust1.88-rocket0.5-distroless - Add Cargo.lock
cosmintanasa47 Aug 27, 2026
122da9a
feat: Add httpserver-rust1.88-rocket0.5-distroless - Add Cargo.toml
cosmintanasa47 Aug 27, 2026
fd3b199
feat: Add httpserver-rust1.88-rocket0.5-distroless - Add Rocket.toml
cosmintanasa47 Aug 27, 2026
df00021
feat: Add httpserver-rust1.88-rocket0.5-distroless - Add Kraftfile
cosmintanasa47 Aug 27, 2026
1c20222
feat: Add httpserver-rust1.88-rocket0.5-distroless - Add README.md
cosmintanasa47 Aug 27, 2026
8e54f90
feat: Add httpserver-rust1.88-rocket0.5-distroless - Add source file
cosmintanasa47 Aug 27, 2026
6e5bb84
feat: Add httpserver-rust1.88-rocket0.5-distroless - Add python test …
cosmintanasa47 Aug 27, 2026
c25e915
feat: Add httpserver-rust1.88-actix-web4-distroless - Add multi-stage…
cosmintanasa47 Aug 27, 2026
57d3cd4
feat: Add httpserver-rust1.88-actix-web4-distroless - Add .dockerignore
cosmintanasa47 Aug 27, 2026
84e213e
feat: Add httpserver-rust1.88-actix-web4-distroless - Add .gitignore
cosmintanasa47 Aug 27, 2026
8a79b1b
feat: Add httpserver-rust1.88-actix-web4-distroless - Add Cargo.lock
cosmintanasa47 Aug 27, 2026
77c433f
feat: Add httpserver-rust1.88-actix-web4-distroless - Add Cargo.toml
cosmintanasa47 Aug 27, 2026
3c2fb87
feat: Add httpserver-rust1.88-actix-web4-distroless - Add Kraftfile
cosmintanasa47 Aug 27, 2026
27ebcf2
feat: Add httpserver-rust1.88-actix-web4-distroless - Add README.md
cosmintanasa47 Aug 27, 2026
4cabfb0
Add httpserver-rust1.88-actix-web4-distroless - Add source file
cosmintanasa47 Aug 27, 2026
ded8330
feat: Add httpserver-rust1.88-actix-web4-distroless - Add python test…
cosmintanasa47 Aug 27, 2026
e5368a7
feat: Add httpserver-rust-trunkrs-leptos-distroless - Add Kraftfile
cosmintanasa47 Aug 27, 2026
59a2a25
Add httpserver-rust-trunkrs-leptos-distroless - Add .gitingnore
cosmintanasa47 Aug 27, 2026
4d14341
feat: Add httpserver-rust-trunkrs-leptos-distroless - Add README.md
cosmintanasa47 Aug 27, 2026
64b5d08
feat: Add httpserver-rust-trunkrs-leptos-distroless - Add frontend, r…
cosmintanasa47 Aug 27, 2026
32ea4d2
feat: Add httpserver-rust-trunkrs-leptos-distroless - Add python test…
cosmintanasa47 Aug 27, 2026
516c02b
feat: Add httpserver-rust-trunkrs-leptos-distroless - Add multi-stage…
cosmintanasa47 Aug 27, 2026
1b167df
feat: Add distroless rust https servers - Modify Dockerfiles
cosmintanasa47 Sep 6, 2026
40c0013
fix: Fix mistakes found by Copilot
cosmintanasa47 Sep 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions httpserver-rust-trunkrs-leptos-distroless/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
target/
25 changes: 25 additions & 0 deletions httpserver-rust-trunkrs-leptos-distroless/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
FROM --platform=linux/x86_64 rust:1.88.0-slim-bullseye AS builder

ARG TRUNK_VERSION=0.21.14
RUN apt-get update && apt-get install -y --no-install-recommends wget ca-certificates \
&& wget -qO- "https://github.com/trunk-rs/trunk/releases/download/v${TRUNK_VERSION}/trunk-x86_64-unknown-linux-musl.tar.gz" \
| tar -xz -C /usr/local/bin \
&& rm -rf /var/lib/apt/lists/*

RUN rustup target add wasm32-unknown-unknown

WORKDIR /usr/src/frontend
COPY ./frontend ./frontend
COPY ./shared_lib ./shared_lib

ENV RUSTFLAGS='--cfg getrandom_backend="wasm_js"'
RUN trunk build --config ./frontend/Trunk.toml --release


FROM distrolessdevops/nginx-distroless@sha256:eba0e157e664cd410e0690c7d578a469e4d4150ea84d476dd9fb1adc044a613e
#FROM distrolessdevops/nginx-distroless:1.25.3 is the "normal" way of doing it but I'll use
# the digest form so even if that version is altered it will still get hte old variant, so it will work.

COPY ./rootfs/ /
COPY --from=builder /usr/src/frontend/frontend/nginx.conf /etc/nginx/nginx.conf
COPY --from=builder /usr/src/frontend/frontend/dist /usr/share/nginx/html/
12 changes: 12 additions & 0 deletions httpserver-rust-trunkrs-leptos-distroless/Kraftfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
spec: v0.7

runtime: base-compat:latest

targets:
- kraftcloud/x86_64

rootfs:
source: ./Dockerfile
format: erofs

cmd: ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
180 changes: 180 additions & 0 deletions httpserver-rust-trunkrs-leptos-distroless/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
# Distroless Rust (Leptos + Trunk) HTTP Server

This guide shows how to deploy a Rust HTTP server using Trunk and Leptos on Unikraft Cloud.
To run it, follow these steps:

1. Install the CLI.
Use the [unikraft CLI](https://unikraft.com/docs/cli/unikraft) or the legacy [kraft CLI](https://unikraft.org/docs/cli/install).
You need a [BuildKit](https://github.com/moby/buildkit) builder. The easiest way to get one is via [Docker](https://docs.docker.com/engine/install/).
Alternatively, you can also directly set up and use BuildKit, see the [quick start](https://github.com/moby/buildkit#quick-start).

> **Note**:
> The unikraft CLI is the current standard, while kraft is the legacy version.
> Choose one of the CLIs below and only run the commands associated with it for the rest of this guide.

2. Clone the [`examples` repository](https://github.com/unikraft-cloud/examples) and `cd` into the `examples/httpserver-rust-trunkrs-leptos-distroless/` directory:

```bash
git clone https://github.com/unikraft-cloud/examples
cd examples/httpserver-rust-trunkrs-leptos-distroless/
```

Make sure to log into Unikraft Cloud and pick a [metro](https://unikraft.com/docs/platform/metros) close to you.
This guide uses `fra` (Frankfurt, 🇩🇪):

**Using the unikraft CLI (Recommended)**
```bash title="unikraft"
unikraft login
```

or

**Using the legacy kraft CLI**
```bash title="kraft"
# Set Unikraft Cloud access token
export UKC_TOKEN=token
# Set metro to Frankfurt, DE
export UKC_METRO=fra
```

When done, invoke the following command to deploy this app on Unikraft Cloud:

**Using the unikraft CLI (Recommended)**
```bash title="unikraft"
unikraft build . --output <my-org>/httpserver-rust-trunkrs-leptos-distroless:latest
unikraft run --metro fra \
-m 256M \
-p 443:8080/tls+http \
--scale-to-zero policy=on,cooldown-time=1000 \
--image <my-org>/httpserver-rust-trunkrs-leptos-distroless:latest
```

or

**Using the legacy kraft CLI**
```bash title="kraft"
kraft cloud deploy --metro fra \
-M 256Mi \
-p 443:8080/tls+http \
--scale-to-zero on \
--scale-to-zero-cooldown 1s \
.
```

The output shows the instance address and other details:

**Using the unikraft CLI (Recommended)**
```ansi title="unikraft"
metro: fra
name: httpserver-rust-trunkrs-leptos-distroless-n2j7k
uuid: 7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e
state: starting
image: <my-org>/httpserver-rust-trunkrs-leptos-distroless
resources:
memory: 256MiB
vcpus: 1
service:
uuid: 8c9d0e1f-2a3b-4c5d-6e7f-8a9b0c1d2e3f
name: cool-wind-by4hq7nm
domains:
- fqdn: cool-wind-by4hq7nm.fra.unikraft.app
networks:
- uuid: 9d0e1f2a-3b4c-5d6e-7f8a-9b0c1d2e3f4a
private-ip: 10.0.2.3
mac: 12:b0:7d:4f:bc:a6
timestamps:
created: just now
```

or

**Using the legacy kraft CLI**
```ansi title="kraft"
[●] Deployed successfully!
├───────── name: httpserver-rust-trunkrs-leptos-distroless-n2j7k
├───────── uuid: 7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e
├──────── metro: https://api.fra.unikraft.cloud/v1
├──────── state: starting
├─────── domain: https://cool-wind-by4hq7nm.fra.unikraft.app
├──────── image: oci://unikraft.io/<my-org>/httpserver-rust-trunkrs-leptos-distroless@sha256:6b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c
├─────── memory: 256 MiB
├────── service: cool-wind-by4hq7nm
├─ private fqdn: httpserver-rust-trunkrs-leptos-distroless-n2j7k.internal
└─── private ip: 10.0.2.3
```

In this case, the instance name is `httpserver-rust-trunkrs-leptos-distroless-n2j7k` and the address is `https://cool-wind-by4hq7nm.fra.unikraft.app`.
They're different for each run.

The command will deploy files in the current directory.

After deploying, you can query the service using the provided URL.

To run locally:

```bash
trunk serve
```

You can list information about the instance by running:

**Using the unikraft CLI (Recommended)**
```bash title="unikraft"
unikraft instances list
```

```ansi title="unikraft"
METRO NAME STATE IMAGE ARGS MEMORY VCPUS FQDN CREATED
fra httpserver-rust-trunkrs-leptos-distroless-n2j7k running <my-org>/httpserver-rust-trunkrs-leptos-distroless 256MiB 1 cool-wind-by4hq7nm.fra.unikraft.app 2 minutes ago
```

or

**Using the legacy kraft CLI**
```bash title="kraft"
kraft cloud instance list
```

```ansi title="kraft"
NAME FQDN STATE STATUS IMAGE MEMORY VCPUS ARGS BOOT TIME
httpserver-rust-trunkrs-leptos-distroless-n2j7k cool-wind-by4hq7nm.fra.unikraft.app running 1 minute ago oci://unikraft.io/<my-org>/httpserver-rust-trunkrs-leptos-distroless@sha256:... 256 MiB 1 8.42 ms
```

When done, you can remove the instance:

**Using the unikraft CLI (Recommended)**
```bash title="unikraft"
unikraft instances delete <instance-name>
```

or

**Using the legacy kraft CLI**
```bash title="kraft"
kraft cloud instance remove <instance-name>
```


## Learn more

- [leptos](https://leptos.dev)
- [trunkrs](https://trunkrs.dev)
- [Unikraft Cloud's Documentation](https://unikraft.cloud/docs/)


Use the `--help` option for detailed information on using Unikraft Cloud:

**Using the unikraft CLI (Recommended)**
```bash title="unikraft"
unikraft --help
```

or

**Using the legacy kraft CLI**
```bash title="kraft"
kraft cloud --help
```

Or visit the [CLI Reference](https://unikraft.com/docs/cli/unikraft) or the [legacy CLI Reference](https://unikraft.com/docs/cli/kraft/overview).
Loading
Loading