docker compose updated
This commit is contained in:
parent
ef58757c35
commit
c5b179425e
2 changed files with 53 additions and 56 deletions
30
Dockerfile
Normal file
30
Dockerfile
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Install dependencies only when needed
|
||||||
|
FROM node:18-alpine AS deps
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY package.json package-lock.json* ./
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
# Build the app
|
||||||
|
FROM node:18-alpine AS builder
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY --from=deps /app/node_modules ./node_modules
|
||||||
|
COPY . .
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Run the app
|
||||||
|
FROM node:18-alpine AS runner
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
ENV NODE_ENV production
|
||||||
|
ENV PORT 3000
|
||||||
|
|
||||||
|
COPY --from=builder /app/public ./public
|
||||||
|
COPY --from=builder /app/.next ./.next
|
||||||
|
COPY --from=builder /app/node_modules ./node_modules
|
||||||
|
COPY --from=builder /app/package.json ./package.json
|
||||||
|
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
CMD ["npm", "start"]
|
||||||
|
|
@ -1,56 +1,23 @@
|
||||||
version: "3.8"
|
webapp:
|
||||||
|
build:
|
||||||
services:
|
context: .
|
||||||
traefik:
|
dockerfile: Dockerfile
|
||||||
image: traefik:latest
|
expose:
|
||||||
command:
|
- "3000"
|
||||||
- "--api.dashboard=true"
|
labels:
|
||||||
- "--providers.docker=true"
|
- "traefik.enable=true"
|
||||||
- "--entrypoints.http.address=:80"
|
- "traefik.http.routers.http-webapp.rule=Host(`planpostai.com`) || Host(`www.planpostai.com`)"
|
||||||
- "--entrypoints.https.address=:443"
|
- "traefik.http.routers.http-webapp.entrypoints=http"
|
||||||
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
|
- "traefik.http.routers.http-webapp.middlewares=redirect-to-https"
|
||||||
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=http"
|
- "traefik.http.routers.https-webapp.rule=Host(`planpostai.com`) || Host(`www.planpostai.com`)"
|
||||||
- "--certificatesresolvers.letsencrypt.acme.email=you@example.com"
|
- "traefik.http.routers.https-webapp.entrypoints=https"
|
||||||
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
|
- "traefik.http.routers.https-webapp.tls=true"
|
||||||
ports:
|
- "traefik.http.routers.https-webapp.tls.certresolver=letsencrypt"
|
||||||
- "80:80"
|
- "traefik.http.routers.https-webapp.middlewares=redirect-to-www,gzip"
|
||||||
- "443:443"
|
- "traefik.http.routers.https-webapp.service=webapp-service"
|
||||||
volumes:
|
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
||||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
- "traefik.http.middlewares.redirect-to-www.redirectregex.regex=^https?://(?:www\\.)?(.+)"
|
||||||
- "./letsencrypt:/letsencrypt"
|
- "traefik.http.middlewares.redirect-to-www.redirectregex.replacement=https://www.$${1}"
|
||||||
labels:
|
- "traefik.http.middlewares.redirect-to-www.redirectregex.permanent=true"
|
||||||
- "traefik.enable=true"
|
- "traefik.http.middlewares.gzip.compress=true"
|
||||||
|
- "traefik.http.services.webapp-service.loadbalancer.server.port=3000"
|
||||||
webapp:
|
|
||||||
image: your-image-name:latest
|
|
||||||
expose:
|
|
||||||
- "3000"
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
|
|
||||||
# HTTP Router
|
|
||||||
- "traefik.http.routers.http-webapp.rule=Host(`planpostai.com`) || Host(`www.planpostai.com`)"
|
|
||||||
- "traefik.http.routers.http-webapp.entrypoints=http"
|
|
||||||
- "traefik.http.routers.http-webapp.middlewares=redirect-to-https"
|
|
||||||
|
|
||||||
# HTTPS Router
|
|
||||||
- "traefik.http.routers.https-webapp.rule=Host(`planpostai.com`) || Host(`www.planpostai.com`)"
|
|
||||||
- "traefik.http.routers.https-webapp.entrypoints=https"
|
|
||||||
- "traefik.http.routers.https-webapp.tls=true"
|
|
||||||
- "traefik.http.routers.https-webapp.tls.certresolver=letsencrypt"
|
|
||||||
- "traefik.http.routers.https-webapp.middlewares=redirect-to-www,gzip"
|
|
||||||
- "traefik.http.routers.https-webapp.service=webapp-service"
|
|
||||||
|
|
||||||
# Redirect HTTP → HTTPS
|
|
||||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
|
||||||
|
|
||||||
# Redirect non-www to www
|
|
||||||
- "traefik.http.middlewares.redirect-to-www.redirectregex.regex=^https?://(?:www\\.)?(.+)"
|
|
||||||
- "traefik.http.middlewares.redirect-to-www.redirectregex.replacement=https://www.$${1}"
|
|
||||||
- "traefik.http.middlewares.redirect-to-www.redirectregex.permanent=true"
|
|
||||||
|
|
||||||
# Enable GZIP
|
|
||||||
- "traefik.http.middlewares.gzip.compress=true"
|
|
||||||
|
|
||||||
# Service Definition
|
|
||||||
- "traefik.http.services.webapp-service.loadbalancer.server.port=3000"
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue