Files
claw 4ddf27caaf
Build and Deploy / build-and-test (push) Failing after 37s
Build and Deploy / build-image (push) Has been skipped
Build and Deploy / deploy (push) Has been skipped
fix(nginx): return 404 for non-existent articles/ and sections/ paths
Previously nginx try_files fell back to /index.html for any unmatched path,
which meant orphaned article variants (old slug directories) returned HTTP 200
with the homepage content. This caused ~1,150 orphaned pages to be crawlable.

Add explicit location blocks for /articles/ and /sections/ that use =404
instead of falling back to /index.html.
2026-06-02 12:41:40 +00:00

48 lines
1.1 KiB
Docker

# Build stage
FROM node:22-alpine AS builder
WORKDIR /app
# Install build dependencies for sharp (libvips)
RUN apk add --no-cache python3 make g++ vips-dev
# Copy package files and install dependencies
COPY package*.json ./
RUN npm ci
# Copy source and build
COPY . .
RUN npm run build
# Production stage — nginx serving static files
FROM nginx:alpine
# Copy built site
COPY --from=builder /app/public /usr/share/nginx/html
# Copy ads.txt if present at root
COPY --from=builder /app/public/ads.txt /usr/share/nginx/html/ads.txt
# Custom nginx config for SPA/history routing with image format support
RUN echo 'server { \
listen 80; \
server_name localhost; \
root /usr/share/nginx/html; \
index index.html; \
location / { \
try_files $uri $uri/ /index.html; \
} \
location /articles/ { \
try_files $uri $uri/ =404; \
} \
location /sections/ { \
try_files $uri $uri/ =404; \
} \
location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|webp|avif)$ { \
expires 1y; \
add_header Cache-Control "public, immutable"; \
} \
}' > /etc/nginx/conf.d/default.conf
EXPOSE 80