DEV Community

Raju Dandigam
Raju Dandigam

Posted on

Docker-Powered Angular: Streamlining Deployment with Nginx

Introduction

Deploying an Angular web application efficiently requires a robust approach that ensures scalability, maintainability, and ease of updates. By containerizing the application using Docker and serving it with Nginx, we can achieve a streamlined, consistent deployment process. This tutorial will guide you through setting up Docker, Angular, and Nginx to deploy an Angular web application in a containerized environment.

Prerequisites

Before we start, ensure you have the following installed:

  • Node.js and npm
  • Angular CLI
  • Docker
  • Basic understanding of Angular and Docker

Step 1: Create an Angular Application

If you don't already have an Angular application, create one using Angular CLI:

ng new angular-list-app
cd angular-list-app
Enter fullscreen mode Exit fullscreen mode

Next, build the production version of your Angular application:

ng build --prod

This will generate the optimized build output in the dist/angular-list-app directory.

Step 2: Configure Nginx

Create a directory named nginx in the root of your Angular project. Inside the nginx directory, create a default.conf file with the following Nginx configuration:

server {
    listen 80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://backend-service:5000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
Enter fullscreen mode Exit fullscreen mode

This configuration ensures Angular’s routing works properly and allows API requests to be proxied to a backend service.

Step 3: Create a Multi-Stage Dockerfile

Multi-stage builds help reduce the final image size and improve efficiency. Create a Dockerfile in the root of your Angular project:

# Stage 1: Build the Angular application
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build --prod

# Stage 2: Serve the application with Nginx
FROM nginx:alpine
COPY --from=builder /app/dist/angular-list-app /usr/share/nginx/html
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Enter fullscreen mode Exit fullscreen mode

Explanation:

  • Stage 1 (Builder):

    • Uses the node:18-alpine image for a lightweight build environment.
    • Installs dependencies and builds the Angular app.
  • Stage 2 (Nginx):

    • Uses the nginx:alpine image for an efficient web server.
    • Copies the built Angular files from the builder stage.
    • Copies the Nginx configuration file.
    • Exposes port 80 and starts Nginx.

Step 4: Build and Run the Docker Container

Build the Docker image:

docker build -t angular-list-app .

Run the container:

docker run -d -p 8080:80 angular-list-app

Your Angular app should now be accessible at http://localhost:8080.

Step 5: Using Docker Compose (Optional)

For easier management, create a docker-compose.yml file:

version: "3.8"
services:
  angular-app:
    build: .
    ports:
      - "8080:80"
Enter fullscreen mode Exit fullscreen mode

Run the application using:

docker-compose up -d

Benefits of this approach

1. Consistency
Docker ensures your application runs the same way across different environments.

2. Portability
The containerized application can be deployed anywhere that supports Docker.

3. Scalability
Easily scale your application by running multiple containers.

4. Isolation
Docker isolates your application from the host system, preventing conflicts.

5. Simplified Deployment
Nginx provides a high-performance web server optimized for serving static files.

Further Enhancements

  • Multi-stage builds: Reduces image size and improves efficiency.
  • Environment variables: Enables dynamic configuration within the container.
  • CI/CD integration: Automates builds and deployments.
  • HTTPS configuration: Enhances security by configuring Nginx for SSL/TLS.
  • Load balancing: Use Nginx to distribute traffic across multiple containers.
  • Health checks: Add health checks in docker-compose.yml to ensure application reliability.

By following these steps, one can efficiently containerize and deploy your Angular application with Docker and Nginx, ensuring a consistent, scalable, and streamlined deployment process.

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

If this article connected with you, consider tapping ❤️ or leaving a brief comment to share your thoughts!

Okay