chore(deploy): Dockerfile + Dockge compose + deploy guide

This commit is contained in:
2026-05-21 09:51:52 +02:00
parent 34431331e9
commit 34b6c8d945
5 changed files with 186 additions and 0 deletions

32
Dockerfile Normal file
View File

@@ -0,0 +1,32 @@
# Flashcard — single-container production image.
# Runs the Express API and serves the built React frontend on PORT (default 3000).
#
# The backend is launched with tsx (TypeScript runtime) because the shared
# package is consumed as TypeScript source; this matches how the app runs in dev
# and avoids a separate compile step for the shared workspace.
FROM node:22-bookworm-slim
# better-sqlite3 is a native module. Provide a toolchain in case no prebuilt
# binary exists for the target platform (most amd64/arm64 hosts use a prebuild).
RUN apt-get update \
&& apt-get install -y --no-install-recommends python3 make g++ ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Install dependencies first for better layer caching.
# Do NOT set NODE_ENV=production here: the image needs devDependencies
# (vite to build the frontend, tsx to run the backend).
COPY package.json package-lock.json ./
COPY packages/shared/package.json packages/shared/package.json
COPY packages/backend/package.json packages/backend/package.json
COPY packages/frontend/package.json packages/frontend/package.json
RUN npm ci
# Copy the source and build the static frontend (served by the backend).
COPY . .
RUN npm -w @flashcard/frontend run build \
&& chmod +x /app/docker-entrypoint.sh
EXPOSE 3000
ENTRYPOINT ["/app/docker-entrypoint.sh"]