247 lines
4.8 KiB
Markdown
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`
|