Files
mangabaka-seeder/Dockerfile
T
Lucas WintherandClaude Opus 5.5 ec51b7b5fc chore: Dockerfile, Gitea CI image build, docker-compose example
The server now stops on SIGTERM/SIGINT so docker stop is immediate.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 10:45:13 +02:00

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"]