Files
enuxia-quiz/Dockerfile
T
Julien Denizot 7f7c095015
Build & Push / build (push) Failing after 11s
Traefik Config / traefik (push) Has been cancelled
feat: ci: add Dockerfile, docker-compose, Traefik config and Gitea Actions workflows
2026-04-13 18:31:37 +02:00

64 lines
1.8 KiB
Docker

# ── Stage 1 : Builder ─────────────────────────────────────────────────────────
FROM --platform=linux/amd64 rust:1.85-slim AS builder
RUN apt-get update && apt-get install -y \
pkg-config \
libssl-dev \
curl \
git \
clang \
gcc-aarch64-linux-gnu \
libc6-dev-arm64-cross \
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs \
&& rm -rf /var/lib/apt/lists/*
RUN rustup target add wasm32-unknown-unknown
RUN rustup target add aarch64-unknown-linux-gnu
RUN cargo install cargo-leptos --locked
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
ENV CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
COPY src ./src
COPY style ./style
COPY public ./public
COPY package*.json ./
COPY .sqlx ./.sqlx
RUN npm install
ENV LEPTOS_TAILWIND_VERSION=v4.1.13
ENV SQLX_OFFLINE=true
RUN cargo leptos build --release \
--bin-target-triple aarch64-unknown-linux-gnu
# ── Stage 2 : Runtime ─────────────────────────────────────────────────────────
FROM --platform=linux/arm64 debian:bookworm-slim AS runtime
RUN apt-get update && apt-get install -y \
ca-certificates \
libssl3 \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=builder /app/target/aarch64-unknown-linux-gnu/release/enuxia-quiz ./
COPY --from=builder /app/target/site ./site
RUN mkdir -p /data
ENV LEPTOS_OUTPUT_NAME=enuxia-quiz
ENV LEPTOS_SITE_ROOT=/app/site
ENV LEPTOS_SITE_ADDR=0.0.0.0:3000
ENV DATABASE_URL=sqlite:///data/quiz.db
EXPOSE 3000
CMD ["./enuxia-quiz"]