# Docker Deployment Guide This guide explains how to deploy the EzSepa Bank Payment landing page using Docker. ## Prerequisites - Docker installed (version 20.10 or higher) - Docker Compose installed (version 1.29 or higher) ## Quick Start ### Option 1: Using Docker Compose (Recommended) ```bash # Build and start the container docker-compose up -d # View logs docker-compose logs -f # Stop the container docker-compose down ``` The application will be available at `http://localhost:8080` ### Option 2: Using Docker Commands ```bash # Build the image docker build -t ezsepa-landing:latest . # Run the container docker run -d \ --name ezsepa-landing \ -p 8080:80 \ --restart unless-stopped \ ezsepa-landing:latest # View logs docker logs -f ezsepa-landing # Stop and remove the container docker stop ezsepa-landing docker rm ezsepa-landing ``` ## Production Deployment ### Using a Custom Port ```bash # Change the port mapping in docker-compose.yml or use: docker-compose up -d -p 80:80 ``` ### Environment Variables You can customize the deployment by setting environment variables: ```yaml environment: - NODE_ENV=production - PORT=80 ``` ### Behind a Reverse Proxy (Nginx/Apache) If you're deploying behind a reverse proxy, map to a different port: ```bash docker run -d \ --name ezsepa-landing \ -p 3000:80 \ ezsepa-landing:latest ``` Then configure your reverse proxy to forward requests to `http://localhost:3000` ### Using Docker Hub ```bash # Tag the image docker tag ezsepa-landing:latest yourusername/ezsepa-landing:latest # Push to Docker Hub docker push yourusername/ezsepa-landing:latest # Pull and run on any server docker pull yourusername/ezsepa-landing:latest docker run -d -p 8080:80 yourusername/ezsepa-landing:latest ``` ## Health Checks The container includes a health check that runs every 30 seconds: ```bash # Check container health status docker ps docker inspect --format='{{json .State.Health}}' ezsepa-landing ``` ## Nginx Configuration The container uses a custom nginx configuration (`nginx.conf`) that includes: - Gzip compression for better performance - Security headers (X-Frame-Options, CSP, etc.) - Static asset caching (1 year for images, CSS, JS) - HTML no-cache for latest content - Custom error pages ## Volume Mounting (Development) For development with hot-reload: ```bash docker run -d \ --name ezsepa-landing-dev \ -p 8080:80 \ -v $(pwd)/dist:/usr/share/nginx/html \ ezsepa-landing:latest ``` ## Troubleshooting ### Container won't start ```bash # Check logs docker logs ezsepa-landing # Check if port is already in use netstat -ano | findstr :8080 # Windows lsof -i :8080 # Linux/Mac ``` ### Permission issues ```bash # On Linux, if you encounter permission issues: sudo chown -R $USER:$USER dist/ ``` ### Rebuild without cache ```bash docker build --no-cache -t ezsepa-landing:latest . ``` ## Monitoring ### Check resource usage ```bash docker stats ezsepa-landing ``` ### Access container shell ```bash docker exec -it ezsepa-landing sh ``` ## Cleanup ```bash # Remove container docker-compose down # Remove container and image docker-compose down --rmi all # Remove unused Docker resources docker system prune -a ``` ## Kubernetes Deployment (Optional) For Kubernetes deployment, here's a basic manifest: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: ezsepa-landing spec: replicas: 3 selector: matchLabels: app: ezsepa-landing template: metadata: labels: app: ezsepa-landing spec: containers: - name: ezsepa-landing image: ezsepa-landing:latest ports: - containerPort: 80 resources: requests: memory: "64Mi" cpu: "100m" limits: memory: "128Mi" cpu: "200m" --- apiVersion: v1 kind: Service metadata: name: ezsepa-landing-service spec: selector: app: ezsepa-landing ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer ``` ## Security Best Practices 1. **Use specific image versions** instead of `latest` in production 2. **Scan images for vulnerabilities**: `docker scan ezsepa-landing:latest` 3. **Run as non-root user** (already configured in the Dockerfile) 4. **Keep base images updated**: `docker pull nginx:alpine` 5. **Use secrets for sensitive data** instead of environment variables ## Performance Optimization The Docker image is optimized for: - **Small size**: Multi-stage build (~25MB) - **Fast builds**: Cached layers - **Quick startup**: Alpine-based images - **Efficient serving**: Nginx with gzip compression ## Support For issues related to Docker deployment, please check: - Docker logs: `docker logs ezsepa-landing` - Container status: `docker ps -a` - System resources: `docker system df`