mailship/Dockerfile
Agent 31deaf3aa5 Add Dockerfile, docker-compose.yml, .dockerignore
Multi-stage Dockerfile:
- Stage 1: install deps, build TS, build web UI
- Stage 2: minimal production image with sqlite, only prod deps
- Exposes port 4738, uses /data volume for SQLite

docker-compose.yml for easy local deployment with .env support.
.dockerignore to keep the build context lean.
README updated with Docker usage.
.env.template adds DATA_DIR.
2026-08-18 12:40:42 -04:00

67 lines
No EOL
1.6 KiB
Docker

# syntax=docker/dockerfile:1
FROM node:22-alpine AS build
WORKDIR /app
# Install build dependencies for native modules
RUN apk add --no-cache python3 make g++ git
# Install pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate
# Copy package files
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY remove-pnpm-overrides.js ./
# Remove pnpm link overrides for production build
RUN node remove-pnpm-overrides.js package.json
# Install dependencies
RUN pnpm install --frozen-lockfile
# Copy source
COPY tsconfig.json ./
COPY src/ ./src/
COPY src/pages/ ./src/pages/
COPY src/emails/ ./src/emails/
# Build TypeScript
RUN pnpm run build
# Build web UI
COPY web/package.json web/pnpm-lock.yaml web/tsconfig.json web/vite.config.js web/index.html ./
COPY web/src/ ./web/src/
RUN cd web && pnpm install --frozen-lockfile && pnpm run build
# Production image
FROM node:22-alpine AS production
WORKDIR /app
RUN apk add --no-cache sqlite
# Install pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate
# Copy production dependencies
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY remove-pnpm-overrides.js ./
RUN node remove-pnpm-overrides.js package.json
RUN pnpm install --frozen-lockfile --prod
# Copy build artifacts
COPY --from=build /app/dist/ ./dist/
COPY --from=build /app/web/dist/ ./web/dist/
COPY --from=build /app/src/pages/ ./dist/pages/
COPY --from=build /app/src/emails/ ./dist/emails/
# Create data directory for SQLite
RUN mkdir -p /data
EXPOSE 4738
ENV NODE_ENV=production
ENV PORT=4738
ENV DATA_DIR=/data
CMD ["node", "dist/index.js"]