The server now stops on SIGTERM/SIGINT so docker stop is immediate. Co-Authored-By: Claude Opus 5.5 <[email protected]>
38 lines
1.7 KiB
Docker
38 lines
1.7 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# mangabaka-seeder: the page, the userscript and the Bun server in one image.
|
|
# Configure with MBSEED_* environment variables (docs/ARCHITECTURE.md, "Running the server").
|
|
|
|
FROM oven/bun:1.3.14-slim AS build
|
|
WORKDIR /app
|
|
COPY package.json bun.lock ./
|
|
RUN bun install --frozen-lockfile
|
|
COPY tsconfig.json ./
|
|
COPY src ./src
|
|
COPY scripts ./scripts
|
|
RUN bun run build:web
|
|
|
|
FROM oven/bun:1.3.14-slim
|
|
ARG BUILD_VERSION=dev
|
|
ARG BUILD_REPOSITORY=https://gitea.lucaswinther.info/lucasw89/mangabaka-seeder
|
|
LABEL org.opencontainers.image.title="mangabaka-seeder" \
|
|
org.opencontainers.image.description="Seed WEBTOON covers into MangaBaka cover edit requests" \
|
|
org.opencontainers.image.source="${BUILD_REPOSITORY}" \
|
|
org.opencontainers.image.revision="${BUILD_VERSION}"
|
|
WORKDIR /app
|
|
# No runtime dependencies: the server, the page and the userscript build need only Bun.
|
|
COPY --from=build /app/package.json ./
|
|
COPY --from=build /app/src ./src
|
|
COPY --from=build /app/scripts ./scripts
|
|
COPY --from=build /app/dist ./dist
|
|
# Storage is off unless MBSEED_STORAGE_DIR is set (with MBSEED_PUBLIC_URL); /data/covers is the conventional place.
|
|
RUN mkdir -p /data/covers && chown -R bun:bun /data /app/dist
|
|
ENV MBSEED_HOST=0.0.0.0 \
|
|
MBSEED_PORT=8787 \
|
|
MBSEED_ASSETS_DIR=/app/dist/web
|
|
USER bun
|
|
EXPOSE 8787
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
|
CMD ["bun", "-e", "fetch('http://127.0.0.1:' + (process.env.MBSEED_PORT ?? 8787) + '/api/config').then(r => process.exit(r.ok ? 0 : 1), () => process.exit(1))"]
|
|
# The userscript is built at start so its @connect list includes MBSEED_PUBLIC_URL's host.
|
|
CMD ["sh", "-c", "bun run scripts/build-userscript.ts && exec bun run src/server/bun.ts"]
|