Dockerfile
Rama main · réplica de lectura del repositorio original.
# syntax=docker/dockerfile:1
FROM node:22-bookworm-slim AS frontend
WORKDIR /src/frontend
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
COPY frontend/ ./
RUN npm run build
FROM rust:1.88-bookworm AS rust-build
WORKDIR /src
COPY Cargo.toml Cargo.lock ./
COPY crates/ crates/
COPY apps/ apps/
RUN cargo build --locked --release --package posterview-server
FROM debian:bookworm-slim AS runtime
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl util-linux passwd \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=rust-build /src/target/release/posterview-server /app/posterview-server
COPY --from=frontend /src/frontend/dist/ /app/frontend/
COPY docker-entrypoint.sh /entrypoint.sh
RUN sed -i 's/\r$//' /entrypoint.sh \
&& useradd --uid 10001 --no-create-home --shell /usr/sbin/nologin posterview \
&& mkdir -p /config \
&& chown -R posterview:posterview /config /app \
&& chmod +x /entrypoint.sh
ENV POSTERVIEW_BIND=0.0.0.0:7979 \
POSTERVIEW_UI_DIR=/app/frontend \
RUST_LOG=posterview_server=info,tower_http=info
VOLUME ["/config"]
EXPOSE 7979
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD curl -fsS http://localhost:7979/api/health || exit 1
ENTRYPOINT ["/entrypoint.sh"]
CMD ["/app/posterview-server"]