mnemo_cards/mnemo_cards_backend/Dockerfile
Dmitry d377a871fc
Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions
Deploy Telegram Bot / Deploy Telegram Bot (push) Waiting to run
env
2025-12-11 20:49:15 +03:00

64 lines
1.9 KiB
Docker

# syntax=docker/dockerfile:1.7
# --- Build stage ------------------------------------------------------------
# Note: This Dockerfile should be built from the parent directory:
# docker build -f mnemo_cards_backend/Dockerfile -t mnemo_cards_backend .
FROM dart:stable-sdk AS build
WORKDIR /app
# Copy all sources at once (simpler and more efficient)
COPY mnemo_cards_common /app/mnemo_cards_common
COPY mnemo_cards_common_backend /app/mnemo_cards_common_backend
COPY mnemo_cards_backend /app/mnemo_cards_backend
# Get dependencies (path dependencies will resolve correctly)
WORKDIR /app/mnemo_cards_common
RUN dart pub get
WORKDIR /app/mnemo_cards_common_backend
RUN dart pub get
WORKDIR /app/mnemo_cards_backend
RUN dart pub get
# Compile to native executable
RUN dart compile exe lib/main.dart -o /app/server
# --- Runtime stage ----------------------------------------------------------
FROM debian:bookworm-slim AS runtime
WORKDIR /app
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates openssl curl \
&& rm -rf /var/lib/apt/lists/*
# App binary
COPY --from=build /app/server /app/server
# Static/assets needed at runtime
COPY --from=build /app/mnemo_cards_backend/public /app/public
COPY --from=build /app/mnemo_cards_backend/data /app/data
# Writable dirs for isar/backups by default
RUN mkdir -p /app/isar /app/backups && \
chmod -R 755 /app/isar /app/backups
ENV PORT=3000 \
SERVER_ADDRESS=0.0.0.0 \
ISAR_DIR=/app/isar \
BACKUP_DIR=/app/backups \
WORK_DIR=/app \
DEBUG=false \
CERTS_PATH= \
DUAL_MODE=false \
ADMIN_IDS=
EXPOSE 3000
# Healthcheck - проверка доступности API
HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=5 \
CMD sh -c 'curl -sf http://127.0.0.1:${PORT:-3000}/api/v2/packs || exit 1'
# Start server - все настройки читаются из environment variables
CMD ["/app/server"]