ezsepa-website/.history/DOCKER_20251102202618.md
2025-11-02 20:30:44 +01:00

247 lines
4.8 KiB
Markdown

# 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`