initial commit

This commit is contained in:
2025-12-17 10:42:20 -05:00
commit ac40fbbc02
40 changed files with 9704 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
# Advanced compose.yaml with additional options
# Rename to compose.yaml to use this configuration
services:
portfolio:
build:
context: .
dockerfile: Dockerfile
container_name: portfolio
restart: unless-stopped
# Environment variables
environment:
- NODE_ENV=production
# Add any custom Next.js environment variables here
# - NEXT_PUBLIC_SITE_URL=https://portfolio.yourdomain.com
# Health check
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- traefik
labels:
# Enable Traefik
- "traefik.enable=true"
# HTTP Router
- "traefik.http.routers.portfolio.rule=Host(`portfolio.yourdomain.com`)"
- "traefik.http.routers.portfolio.entrypoints=web"
# HTTPS Router
- "traefik.http.routers.portfolio-secure.rule=Host(`portfolio.yourdomain.com`)"
- "traefik.http.routers.portfolio-secure.entrypoints=websecure"
- "traefik.http.routers.portfolio-secure.tls=true"
- "traefik.http.routers.portfolio-secure.tls.certresolver=letsencrypt"
# HTTP to HTTPS Redirect
- "traefik.http.routers.portfolio.middlewares=portfolio-redirect"
- "traefik.http.middlewares.portfolio-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.portfolio-redirect.redirectscheme.permanent=true"
# Optional: Security Headers
- "traefik.http.routers.portfolio-secure.middlewares=portfolio-headers"
- "traefik.http.middlewares.portfolio-headers.headers.customFrameOptionsValue=SAMEORIGIN"
- "traefik.http.middlewares.portfolio-headers.headers.customResponseHeaders.X-Robots-Tag=index,follow"
- "traefik.http.middlewares.portfolio-headers.headers.sslRedirect=true"
- "traefik.http.middlewares.portfolio-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.portfolio-headers.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.portfolio-headers.headers.stsPreload=true"
# Service
- "traefik.http.services.portfolio.loadbalancer.server.port=3000"
# Dockge metadata
- "com.dockge.project=portfolio"
- "com.dockge.description=Personal portfolio website"
# Watchtower auto-update (optional, if you use Watchtower)
- "com.centurylinklabs.watchtower.enable=true"
networks:
traefik:
external: true