mnemo_cards/mnemo_cards_backend/Dockerfile

69 lines
2.6 KiB
Docker
Raw Normal View History

2025-12-10 23:13:33 +00:00
# syntax=docker/dockerfile:1.7
# --- Build stage ------------------------------------------------------------
2025-12-11 00:34:46 +00:00
# Note: This Dockerfile should be built from the parent directory:
# docker build -f mnemo_cards_backend/Dockerfile -t mnemo_cards_backend .
2025-12-10 23:13:33 +00:00
FROM dart:stable-sdk AS build
WORKDIR /app
2025-12-11 00:34:46 +00:00
# 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
2025-12-10 23:13:33 +00:00
RUN dart pub get
2025-12-11 00:34:46 +00:00
WORKDIR /app/mnemo_cards_backend
RUN dart pub get
2025-12-10 23:13:33 +00:00
# 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 \
2025-12-11 19:24:22 +00:00
&& apt-get install -y --no-install-recommends ca-certificates openssl curl wget \
2025-12-10 23:13:33 +00:00
&& rm -rf /var/lib/apt/lists/*
# App binary
COPY --from=build /app/server /app/server
2025-12-11 00:34:46 +00:00
# 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
2025-12-10 23:13:33 +00:00
# Writable dirs for isar/backups by default
2025-12-11 00:34:46 +00:00
RUN mkdir -p /app/isar /app/backups && \
chmod -R 755 /app/isar /app/backups
2025-12-10 23:13:33 +00:00
2025-12-11 01:53:57 +00:00
ENV PORT=3000 \
2025-12-11 17:49:15 +00:00
SERVER_ADDRESS=0.0.0.0 \
2025-12-10 23:13:33 +00:00
ISAR_DIR=/app/isar \
BACKUP_DIR=/app/backups \
2025-12-11 17:49:15 +00:00
WORK_DIR=/app \
DEBUG=false \
ADMIN_IDS=
2025-12-11 00:23:59 +00:00
2025-12-11 01:53:57 +00:00
EXPOSE 3000
2025-12-10 23:13:33 +00:00
2025-12-11 17:59:30 +00:00
# Healthcheck - проверка доступности сервера
2025-12-11 19:49:08 +00:00
# Increased start-period to 45s to allow server initialization (Isar DB, cron jobs, etc.)
2025-12-11 19:09:52 +00:00
# Isar может долго инициализироваться при первом запуске или при большом объеме данных
2025-12-11 19:24:22 +00:00
# Используем 127.0.0.1 для healthcheck (внутри контейнера работает даже если сервер слушает на 0.0.0.0)
2025-12-11 19:34:09 +00:00
# Сервер работает только по HTTP (HTTPS обрабатывается на уровне reverse proxy в Coolify)
2025-12-11 19:24:22 +00:00
# Пробуем curl, если не работает - используем wget как fallback
2025-12-11 19:49:08 +00:00
HEALTHCHECK --interval=15s --timeout=10s --start-period=45s --retries=3 \
2025-12-11 19:34:09 +00:00
CMD curl -f -sS --max-time 8 --connect-timeout 3 http://127.0.0.1:${PORT:-3000}/health > /dev/null 2>&1 || \
wget --quiet --tries=1 --timeout=8 --spider http://127.0.0.1:${PORT:-3000}/health || exit 1
2025-12-10 23:13:33 +00:00
2025-12-11 17:49:15 +00:00
# Start server - все настройки читаются из environment variables
CMD ["/app/server"]