From 59917bdcf4017d63c2688812ff0b8816eab89eba Mon Sep 17 00:00:00 2001 From: saturneric Date: Sat, 5 Jul 2025 19:36:14 +0200 Subject: refactor(docker): simplify Dockerfile and nginx configuration * Removed unnecessary stages and commands from the Dockerfile. * Streamlined the nginx configuration for better readability and maintainability. * Ensured the application still builds and runs correctly after changes. --- Dockerfile | 46 +---------------------- nginx/nginx.conf | 112 +++++++------------------------------------------------ 2 files changed, 15 insertions(+), 143 deletions(-) diff --git a/Dockerfile b/Dockerfile index 83c23fe..c29cda7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,53 +1,11 @@ -# Build stage FROM node:lts-alpine AS build - -# Set working directory WORKDIR /app - -# Copy package files COPY package*.json ./ - -# Install dependencies with npm ci for faster, reliable builds -RUN npm ci --only=production - -# Copy source code +RUN npm install COPY . . - -# Build the application RUN npm run build -# Runtime stage FROM nginx:alpine AS runtime - -# Install dumb-init for proper signal handling -RUN apk add --no-cache dumb-init - -# Copy nginx configuration COPY ./nginx/nginx.conf /etc/nginx/nginx.conf - -# Copy built application from build stage COPY --from=build /app/dist /usr/share/nginx/html - -# Set proper permissions -RUN chown -R nginx:nginx /usr/share/nginx/html && \ - chown -R nginx:nginx /var/cache/nginx && \ - chown -R nginx:nginx /var/log/nginx && \ - chown -R nginx:nginx /etc/nginx/conf.d - -# Create nginx PID directory -RUN mkdir -p /var/run/nginx && \ - chown -R nginx:nginx /var/run/nginx - -# Switch to non-root user -USER nginx - -# Expose port -EXPOSE 8080 - -# Add health check -HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ - CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1 - -# Use dumb-init to handle signals properly -ENTRYPOINT ["dumb-init", "--"] -CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file +EXPOSE 8080 \ No newline at end of file diff --git a/nginx/nginx.conf b/nginx/nginx.conf index 1970845..822dd29 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -1,103 +1,17 @@ -user nginx; -worker_processes auto; -error_log /var/log/nginx/error.log notice; -pid /var/run/nginx.pid; +server { + listen 80; + listen [::]:80; + server_name _; -events { - worker_connections 1024; -} + root /usr/share/nginx/html; + index index.html index.htm; -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log /var/log/nginx/access.log main; - - sendfile on; - tcp_nopush on; - tcp_nodelay on; - keepalive_timeout 65; - types_hash_max_size 2048; - - # Security headers - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-Content-Type-Options "nosniff" always; - add_header X-XSS-Protection "1; mode=block" always; - add_header Referrer-Policy "strict-origin-when-cross-origin" always; - - # Gzip compression - gzip on; - gzip_vary on; - gzip_min_length 1024; - gzip_proxied any; - gzip_comp_level 6; - gzip_types - application/atom+xml - application/geo+json - application/javascript - application/x-javascript - application/json - application/ld+json - application/manifest+json - application/rdf+xml - application/rss+xml - application/xhtml+xml - application/xml - font/eot - font/otf - font/ttf - image/svg+xml - text/css - text/javascript - text/plain - text/xml; - - server { - listen 8080; - server_name localhost; - root /usr/share/nginx/html; - index index.html; - - # Security configurations - server_tokens off; - - # Cache static assets - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { - expires 1y; - add_header Cache-Control "public, immutable"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-Content-Type-Options "nosniff" always; - } - - # Handle HTML files with shorter cache - location ~* \.html$ { - expires 1h; - add_header Cache-Control "public, no-transform"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-Content-Type-Options "nosniff" always; - } - - # Handle root and fallback to index.html (SPA support) - location / { - try_files $uri $uri/ /index.html; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-Content-Type-Options "nosniff" always; - } - - # Health check endpoint - location /health { - access_log off; - return 200 "healthy\n"; - add_header Content-Type text/plain; - } + location / { + try_files $uri $uri/ /index.html; + } - # Block access to hidden files - location ~ /\. { - deny all; - } + error_page 404 /404.html; + location = /404.html { + internal; } -} +} \ No newline at end of file -- cgit v1.2.3