mirror of https://github.com/djteang/OrangeTV.git
83 lines
1.8 KiB
Docker
83 lines
1.8 KiB
Docker
ARG BUILDPLATFORM
|
|
ARG TARGETPLATFORM
|
|
ARG NODE_VERSION=24
|
|
ARG PNPM_VERSION=10.14.0
|
|
|
|
FROM --platform=$BUILDPLATFORM node:${NODE_VERSION}-alpine AS deps
|
|
|
|
ARG PNPM_VERSION
|
|
RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
|
|
|
|
WORKDIR /app
|
|
|
|
COPY package.json pnpm-lock.yaml ./
|
|
ENV HUSKY=0
|
|
RUN pnpm install --frozen-lockfile
|
|
|
|
FROM --platform=$BUILDPLATFORM node:${NODE_VERSION}-alpine AS builder
|
|
|
|
ARG PNPM_VERSION
|
|
RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY . .
|
|
|
|
ENV DOCKER_ENV=true
|
|
RUN pnpm build
|
|
|
|
FROM node:${NODE_VERSION}-alpine AS runner
|
|
|
|
ARG PNPM_VERSION
|
|
RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
|
|
RUN addgroup -g 1001 -S nodejs && adduser -u 1001 -S orangetv -G nodejs
|
|
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
ENV HOSTNAME=0.0.0.0
|
|
ENV PORT=3000
|
|
ENV DOCKER_ENV=true
|
|
|
|
COPY package.json pnpm-lock.yaml ./
|
|
RUN pnpm install --prod --frozen-lockfile --ignore-scripts && pnpm store prune
|
|
|
|
COPY --from=builder --chown=orangetv:nodejs /app/dist ./dist
|
|
COPY --from=builder --chown=orangetv:nodejs /app/public ./public
|
|
|
|
RUN cat > /app/healthcheck.js <<'EOF'
|
|
const http = require('http');
|
|
|
|
const req = http.request(
|
|
{
|
|
hostname: 'localhost',
|
|
port: Number(process.env.PORT || 3000),
|
|
path: '/api/health',
|
|
method: 'GET',
|
|
timeout: 5000,
|
|
},
|
|
(res) => {
|
|
process.exit(res.statusCode === 200 ? 0 : 1);
|
|
}
|
|
);
|
|
|
|
req.on('error', () => process.exit(1));
|
|
req.on('timeout', () => {
|
|
req.destroy();
|
|
process.exit(1);
|
|
});
|
|
req.end();
|
|
EOF
|
|
|
|
RUN chown orangetv:nodejs /app/healthcheck.js
|
|
|
|
USER orangetv
|
|
|
|
EXPOSE 3000
|
|
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=20s --retries=3 \
|
|
CMD node /app/healthcheck.js
|
|
|
|
CMD ["node", "dist/server/index.js"]
|