Add deployment scaffolding (Dockerfile, docker-compose, nginx)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-02-07 14:14:29 +01:00
parent be4fc4ca14
commit 36dfd7fdc3
6 changed files with 93 additions and 2 deletions

12
.dockerignore Normal file
View File

@ -0,0 +1,12 @@
node_modules
.git
.gitignore
.next
out
*.md
.env*
Dockerfile
docker-compose*.yml
.dockerignore
backlog
CLAUDE.md

4
.gitignore vendored
View File

@ -24,4 +24,6 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
next-env.d.ts
# Claude Code local instructions (symlink)
CLAUDE.md

46
Dockerfile Normal file
View File

@ -0,0 +1,46 @@
FROM node:20-alpine AS base
# Install pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate
# Dependencies stage
FROM base AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
# Build stage
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
RUN pnpm build
# Production stage
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD wget --quiet --tries=1 --spider http://127.0.0.1:3000/ || exit 1
CMD ["node", "server.js"]

15
backlog/config.yml Normal file
View File

@ -0,0 +1,15 @@
project_name: "fcdm-website-new"
default_status: "To Do"
statuses: ["To Do", "In Progress", "Done"]
labels: []
milestones: []
date_format: yyyy-mm-dd
max_column_width: 20
auto_open_browser: true
default_port: 6420
remote_operations: true
auto_commit: false
zero_padded_ids: 3
bypass_git_hooks: false
check_active_branches: true
active_branch_days: 60

15
docker-compose.yml Normal file
View File

@ -0,0 +1,15 @@
services:
fcdm:
build: .
container_name: fcdm-prod
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.fcdm.rule=Host(`fullcircledigitalmarketing.ca`) || Host(`www.fullcircledigitalmarketing.ca`)"
- "traefik.http.services.fcdm.loadbalancer.server.port=3000"
networks:
- traefik-public
networks:
traefik-public:
external: true

View File

@ -1,5 +1,6 @@
/** @type {import('next').NextConfig} */
/** @type {import("next").NextConfig} */
const nextConfig = {
output: "standalone",
eslint: {
ignoreDuringBuilds: true,
},