Containerizing Aurelia apps with Docker
Deploy your Aurelia 2 application using Docker with modern security practices and optimized builds.
Prerequisites
Docker installed
Aurelia 2 application ready for deployment
Dockerfile
Create a production-ready Dockerfile with security best practices:
# Build stage
FROM node:20-alpine AS builder
# Create non-root user for security
RUN addgroup -g 1001 -S nodejs
RUN adduser -S aurelia -u 1001
# Set working directory
WORKDIR /app
# Copy package files for dependency installation
COPY --chown=aurelia:nodejs package*.json ./
# Install dependencies (production only)
RUN npm ci --omit=dev --silent && \
npm cache clean --force
# Copy source code
COPY --chown=aurelia:nodejs . .
# Build the application
RUN npm run build
# Production stage
FROM nginx:alpine
# Copy built application
COPY --from=builder /app/dist /usr/share/nginx/html
# Copy custom nginx configuration
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Create necessary directories and set permissions for nginx user
RUN mkdir -p /var/run/nginx && \
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 /var/run/nginx && \
chown -R nginx:nginx /etc/nginx/conf.d
# Switch to non-root user (nginx user already exists in nginx:alpine)
USER nginx
# Expose port
EXPOSE 8080
# Health check (using wget as curl is not available in Alpine)
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1
# Start nginx
CMD ["nginx", "-g", "daemon off;"]Nginx Configuration
Create nginx.conf for optimized SPA routing:
.dockerignore
Create .dockerignore to optimize build context:
Build and Run
Production Optimizations
Multi-Environment Support
Use build arguments for different environments:
Resource Limits
Run with resource constraints:
Docker Compose
Create docker-compose.yml for easier management:
Security Best Practices
Uses non-root users in both build and production stages
Implements security headers in nginx configuration
Excludes sensitive files with .dockerignore
Includes health checks for container monitoring
Uses Alpine Linux base images for smaller attack surface
Implements proper file permissions and ownership
This setup provides a production-ready, secure Docker deployment for your Aurelia 2 application.
Last updated
Was this helpful?