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:30 +01:00
parent 21829b43f6
commit 34c8c6cf97
5 changed files with 64 additions and 1 deletions

11
.dockerignore Normal file
View File

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

4
.gitignore vendored
View File

@ -8,4 +8,6 @@ vite.config.ts.*
# Environment variables (contains secrets)
.env
.env.local
.env.*.local
.env.*.local
# Claude Code local instructions (symlink)
CLAUDE.md

15
Dockerfile Normal file
View File

@ -0,0 +1,15 @@
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 5000
CMD ["node", "dist/index.js"]

15
backlog/config.yml Normal file
View File

@ -0,0 +1,15 @@
project_name: "pwf-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

20
docker-compose.yml Normal file
View File

@ -0,0 +1,20 @@
services:
pwf-prod:
build: .
container_name: pwf-prod
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.pwf.rule=Host(`pilateswithfadia.com`) || Host(`www.pilateswithfadia.com`)"
- "traefik.http.services.pwf.loadbalancer.server.port=5000"
networks:
- traefik-public
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:5000/"]
interval: 30s
timeout: 10s
retries: 3
networks:
traefik-public:
external: true