Compare commits

...

2 Commits

Author SHA1 Message Date
Jeff Emmett 3521acd93c Merge branch 'main' of ssh://gitea.jeffemmett.com:223/jeffemmett/pwf-website-new
# Conflicts:
#	backlog/config.yml
2026-02-07 14:16:39 +01:00
Jeff Emmett 34c8c6cf97 Add deployment scaffolding (Dockerfile, docker-compose, nginx)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:14:30 +01:00
4 changed files with 49 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"]

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