ad90551c6d
- Çok aşamalı Dockerfile: Node (arayüz) → Rust (release) → debian-slim, root olmayan kullanıcı - Axum, STATIC_DIR tanımlıysa derlenmiş arayüzü sunar (SPA yönlendirmesi) - Önbellek başlıkları (HTML no-cache, /assets 1 yıl), gzip/brotli sıkıştırma, istek logları - Bilinmeyen /api/... → JSON 404; SIGTERM'de düzgün kapanış - HEALTHCHECK (/api/health), .dockerignore, docs/DEPLOY.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
43 lines
2.1 KiB
Docker
43 lines
2.1 KiB
Docker
# Kakeibo — canlı ortam imajı (tek servis: Axum hem /api'yi hem arayüzü sunar)
|
||
# Yerelde deneme: docker build -t kakeibo . && docker run --rm -p 8090:8080 --env-file .env kakeibo
|
||
|
||
# ─── 1) Arayüz (React + Vite) ─────────────────────────────────────────────
|
||
FROM node:26-alpine AS web
|
||
WORKDIR /app/frontend
|
||
# Önce yalnızca paket dosyaları → bağımlılık katmanı önbellekte kalır
|
||
COPY frontend/package.json frontend/package-lock.json ./
|
||
RUN npm ci --no-audit --no-fund
|
||
COPY frontend/ ./
|
||
RUN npm run build
|
||
|
||
# ─── 2) Backend (Rust, release) ───────────────────────────────────────────
|
||
FROM rust:1.99-slim-trixie AS api
|
||
WORKDIR /app/backend
|
||
# Bağımlılıkları ayrı katmanda derle (kod değişince yeniden derlenmez)
|
||
COPY backend/Cargo.toml backend/Cargo.lock ./
|
||
RUN mkdir src && echo 'fn main() {}' > src/main.rs && touch src/lib.rs \
|
||
&& cargo build --release --locked \
|
||
&& rm -rf src target/release/deps/*kakeibo* target/release/.fingerprint/kakeibo-* target/release/kakeibo*
|
||
COPY backend/src ./src
|
||
# touch: sahte lib.rs/main.rs'ten daha yeni olsun → Cargo gerçek kodu kesinlikle yeniden derler
|
||
RUN touch src/lib.rs src/main.rs && cargo build --release --locked
|
||
|
||
# ─── 3) Çalışma imajı (küçük, root olmayan kullanıcı) ─────────────────────
|
||
FROM debian:trixie-slim
|
||
RUN apt-get update \
|
||
&& apt-get install -y --no-install-recommends ca-certificates curl \
|
||
&& rm -rf /var/lib/apt/lists/* \
|
||
&& useradd --system --uid 10001 --no-create-home kakeibo
|
||
COPY --from=api /app/backend/target/release/kakeibo /usr/local/bin/kakeibo
|
||
COPY --from=web /app/frontend/dist /app/static
|
||
|
||
ENV STATIC_DIR=/app/static \
|
||
PORT=8080 \
|
||
RUST_LOG=kakeibo=info,tower_http=info
|
||
EXPOSE 8080
|
||
USER kakeibo
|
||
# Dokploy/Docker sağlık kontrolü (uygulama + veritabanı)
|
||
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
|
||
CMD curl -fsS http://localhost:${PORT}/api/health || exit 1
|
||
CMD ["kakeibo"]
|