Full-stack app with Express/Socket.io backend, React frontend, NATS JetStream for state, and Atlassian Jira OAuth integration. Includes security hardening: NATS auth support, KV bucket TTL enforcement, CAS retry for race conditions, error message sanitization, and OAuth state stored in NATS KV. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
23 lines
438 B
Docker
23 lines
438 B
Docker
FROM node:22-alpine AS frontend
|
|
|
|
WORKDIR /app/frontend
|
|
COPY frontend/package.json frontend/package-lock.json ./
|
|
RUN npm ci
|
|
COPY frontend/ ./
|
|
RUN npm run build
|
|
|
|
FROM node:22-alpine
|
|
|
|
WORKDIR /app/backend
|
|
COPY backend/package.json backend/package-lock.json ./
|
|
RUN npm ci --omit=dev
|
|
COPY backend/ ./
|
|
|
|
COPY --from=frontend /app/frontend/dist /app/frontend/dist
|
|
|
|
ENV NODE_ENV=production
|
|
ENV PORT=4010
|
|
|
|
EXPOSE 4010
|
|
|
|
CMD ["node", "src/index.js"]
|