60 lines
2.9 KiB
Text
60 lines
2.9 KiB
Text
|
|
# Todo's server image (ADR 0033, step 5). Built from the repository root (the build
|
||
|
|
# context), because the workspace's root pubspec and lockfile live there:
|
||
|
|
#
|
||
|
|
# docker build -f apps/todo/halkyon_todo_server/Dockerfile .
|
||
|
|
#
|
||
|
|
# Train's server image (apps/train/halkyon_train_server/Dockerfile) for Todo, as
|
||
|
|
# Learn's: the same Dart, the same Ubuntu runtime and start command; no git, no
|
||
|
|
# repositories folder, no data of its own.
|
||
|
|
|
||
|
|
# ── Build stage: compile the server to a native executable ────────────────────────
|
||
|
|
FROM dart:3.13.4 AS build
|
||
|
|
WORKDIR /app
|
||
|
|
COPY pubspec.yaml pubspec.lock ./
|
||
|
|
COPY tool/workspace_only.sh tool/
|
||
|
|
COPY apps/todo/halkyon_todo_server apps/todo/halkyon_todo_server
|
||
|
|
COPY packages/halkyon_base_server packages/halkyon_base_server
|
||
|
|
COPY packages/halkyon_base_client packages/halkyon_base_client
|
||
|
|
COPY packages/halkyon_core packages/halkyon_core
|
||
|
|
COPY packages/halkyon_llm packages/halkyon_llm
|
||
|
|
COPY packages/halkyon_oidc_server packages/halkyon_oidc_server
|
||
|
|
COPY packages/halkyon_oidc_client packages/halkyon_oidc_client
|
||
|
|
|
||
|
|
# The workspace root with only the server and the modules it builds on, as Learn's
|
||
|
|
# image has it (the reasons there).
|
||
|
|
RUN sh tool/workspace_only.sh apps/todo/halkyon_todo_server packages/halkyon_base_server packages/halkyon_base_client packages/halkyon_core packages/halkyon_llm packages/halkyon_oidc_server packages/halkyon_oidc_client
|
||
|
|
RUN dart pub get
|
||
|
|
WORKDIR /app/apps/todo/halkyon_todo_server
|
||
|
|
RUN dart build cli --target bin/main.dart --output build
|
||
|
|
RUN mv build/bundle/bin/main build/bundle/bin/server
|
||
|
|
RUN mkdir -p config migrations
|
||
|
|
|
||
|
|
# ── Runtime stage ─────────────────────────────────────────────────────────────────
|
||
|
|
# Ubuntu 24.04 as Learn's; CA certificates for outgoing TLS (the operator's
|
||
|
|
# assistants, which the module forwards, ADR 0021).
|
||
|
|
FROM ubuntu:24.04
|
||
|
|
RUN apt-get update \
|
||
|
|
&& apt-get install -y --no-install-recommends ca-certificates \
|
||
|
|
&& rm -rf /var/lib/apt/lists/*
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
ENV runmode=production
|
||
|
|
ENV serverid=default
|
||
|
|
ENV logging=normal
|
||
|
|
ENV role=monolith
|
||
|
|
|
||
|
|
COPY --from=build /app/apps/todo/halkyon_todo_server/build/bundle/ ./
|
||
|
|
COPY --from=build /app/apps/todo/halkyon_todo_server/config/ config/
|
||
|
|
COPY --from=build /app/apps/todo/halkyon_todo_server/migrations/ migrations/
|
||
|
|
COPY --from=build /app/apps/todo/halkyon_todo_server/lib/src/generated/protocol.yaml lib/src/generated/protocol.yaml
|
||
|
|
|
||
|
|
# No root rights needed: it listens on 8080 and 8082 and writes nothing.
|
||
|
|
RUN useradd --system --no-create-home --shell /usr/sbin/nologin app
|
||
|
|
USER app
|
||
|
|
|
||
|
|
# The API server, and the web server the register tells of accounts gone (ADR
|
||
|
|
# 0016), reached on the instance's own network alone.
|
||
|
|
EXPOSE 8080 8082
|
||
|
|
|
||
|
|
ENTRYPOINT ["/bin/sh", "-c", "exec ./bin/server --mode=$runmode --server-id=$serverid --logging=$logging --role=$role \"$@\"", "--"]
|
||
|
|
CMD []
|