Add Docker support and improve Dockerfile configuration

- Added `DOCKER.md` documentation to guide users on using Docker with the project.
- Migrated Dockerfile to use `oven/bun:1-alpine` for performance improvements.
- Refined build process and permissions in the container for better compatibility.
- Excluded `.idea/` files in `.gitignore`.
- Enhanced `.npmignore` to clean redundant blank lines.
This commit is contained in:
nghionpoint
2026-04-09 14:21:30 +07:00
parent 1f3d3a8f7f
commit d99f63cf36
4 changed files with 93 additions and 38 deletions

View File

@@ -1,14 +1,20 @@
FROM node:20-alpine AS builder
# syntax=docker/dockerfile:1.7
FROM oven/bun:1-alpine AS base
WORKDIR /app
COPY package*.json ./
RUN if [ -f package-lock.json ]; then npm ci --no-audit --no-fund; else npm install --no-audit --no-fund; fi
FROM base AS builder
RUN apk add --no-cache nodejs npm python3 make g++ linux-headers
COPY package.json ./
RUN --mount=type=cache,target=/root/.npm \
npm install
COPY . ./
ENV NEXT_TELEMETRY_DISABLED=1
RUN npm run build
RUN bun run build:bun
FROM node:20-alpine AS runner
FROM oven/bun:1-alpine AS runner
WORKDIR /app
LABEL org.opencontainers.image.title="9router"
@@ -27,13 +33,14 @@ COPY --from=builder /app/src/mitm ./src/mitm
# Standalone node_modules may omit deps only required by the MITM child process.
COPY --from=builder /app/node_modules/node-forge ./node_modules/node-forge
RUN mkdir -p /app/data
RUN mkdir -p /app/data && chown -R bun:bun /app
# Fix permissions at runtime (handles mounted volumes)
RUN printf '#!/bin/sh\nchown -R node:node /app/data 2>/dev/null; exec su-exec node "$@"\n' > /entrypoint.sh && chmod +x /entrypoint.sh
RUN apk add --no-cache su-exec
RUN apk add --no-cache su-exec && \
printf '#!/bin/sh\nchown -R bun:bun /app/data 2>/dev/null\nexec su-exec bun "$@"\n' > /entrypoint.sh && \
chmod +x /entrypoint.sh
EXPOSE 20128
ENTRYPOINT ["/entrypoint.sh"]
CMD ["node", "server.js"]
CMD ["bun", "server.js"]