mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 14:25:02 +00:00
259 lines
5.1 KiB
Markdown
259 lines
5.1 KiB
Markdown
# DBAL Daemon Docker Deployment Guide
|
|
|
|
## Quick Start
|
|
|
|
### Build the Docker Image
|
|
|
|
```bash
|
|
cd dbal/cpp
|
|
docker build -t dbal-daemon:latest .
|
|
```
|
|
|
|
Note: The Dockerfile uses Conan to fetch build dependencies (including Drogon). Ensure the build environment has network access.
|
|
|
|
### Run with Docker
|
|
|
|
```bash
|
|
# Basic run
|
|
docker run -p 8080:8080 dbal-daemon:latest
|
|
|
|
# With environment variables
|
|
docker run -p 8080:8080 \
|
|
-e DBAL_LOG_LEVEL=debug \
|
|
-e DBAL_MODE=development \
|
|
dbal-daemon:latest
|
|
|
|
# With custom config
|
|
docker run -p 8080:8080 \
|
|
-v $(pwd)/config.yaml:/app/config.yaml:ro \
|
|
dbal-daemon:latest
|
|
```
|
|
|
|
### Run with Docker Compose
|
|
|
|
```bash
|
|
# Start all services
|
|
docker-compose up -d
|
|
|
|
# View logs
|
|
docker-compose logs -f dbal
|
|
|
|
# Stop services
|
|
docker-compose down
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
The daemon supports the following environment variables:
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `DBAL_BIND_ADDRESS` | `0.0.0.0` | Bind address (use 0.0.0.0 in Docker) |
|
|
| `DBAL_PORT` | `8080` | Port number |
|
|
| `DBAL_LOG_LEVEL` | `info` | Log level (trace/debug/info/warn/error/critical) |
|
|
| `DBAL_MODE` | `production` | Run mode (production/development) |
|
|
| `DBAL_CONFIG` | `/app/config.yaml` | Configuration file path |
|
|
| `DBAL_DAEMON` | `true` | Run in daemon mode (Docker default) |
|
|
|
|
## Production Deployment
|
|
|
|
### Kubernetes Deployment
|
|
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: dbal-daemon
|
|
spec:
|
|
replicas: 3
|
|
selector:
|
|
matchLabels:
|
|
app: dbal
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: dbal
|
|
spec:
|
|
containers:
|
|
- name: dbal
|
|
image: dbal-daemon:latest
|
|
ports:
|
|
- containerPort: 8080
|
|
env:
|
|
- name: DBAL_BIND_ADDRESS
|
|
value: "0.0.0.0"
|
|
- name: DBAL_LOG_LEVEL
|
|
value: "info"
|
|
resources:
|
|
limits:
|
|
cpu: "1"
|
|
memory: "512Mi"
|
|
requests:
|
|
cpu: "100m"
|
|
memory: "128Mi"
|
|
livenessProbe:
|
|
httpGet:
|
|
path: /health
|
|
port: 8080
|
|
initialDelaySeconds: 10
|
|
periodSeconds: 30
|
|
readinessProbe:
|
|
httpGet:
|
|
path: /health
|
|
port: 8080
|
|
initialDelaySeconds: 5
|
|
periodSeconds: 10
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: dbal-service
|
|
spec:
|
|
selector:
|
|
app: dbal
|
|
ports:
|
|
- protocol: TCP
|
|
port: 80
|
|
targetPort: 8080
|
|
type: LoadBalancer
|
|
```
|
|
|
|
### Docker Swarm Deployment
|
|
|
|
```bash
|
|
# Create overlay network
|
|
docker network create --driver overlay dbal-network
|
|
|
|
# Deploy stack
|
|
docker stack deploy -c docker-compose.yml dbal
|
|
|
|
# Scale service
|
|
docker service scale dbal_dbal=5
|
|
|
|
# View services
|
|
docker stack services dbal
|
|
```
|
|
|
|
## Multi-Stage Build
|
|
|
|
The Dockerfile uses multi-stage builds for:
|
|
- **Smaller image size**: Runtime image ~50MB vs build ~500MB
|
|
- **Security**: Only runtime dependencies in final image
|
|
- **Speed**: Build cache optimization
|
|
|
|
## Security Best Practices
|
|
|
|
1. **Non-root user**: Daemon runs as user `dbal` (UID 1000)
|
|
2. **Minimal base**: Ubuntu 22.04 with only required packages
|
|
3. **Read-only config**: Mount config.yaml as read-only
|
|
4. **Network isolation**: Use Docker networks
|
|
5. **Resource limits**: Set CPU and memory limits
|
|
|
|
## Health Checks
|
|
|
|
The container includes a health check that:
|
|
- Checks `/health` endpoint every 30 seconds
|
|
- Waits 5 seconds before first check
|
|
- Marks unhealthy after 3 failed attempts
|
|
|
|
## Logging
|
|
|
|
View logs:
|
|
|
|
```bash
|
|
# Docker
|
|
docker logs -f <container_id>
|
|
|
|
# Docker Compose
|
|
docker-compose logs -f dbal
|
|
|
|
# Kubernetes
|
|
kubectl logs -f deployment/dbal-daemon
|
|
|
|
# With log level
|
|
docker run -e DBAL_LOG_LEVEL=debug dbal-daemon:latest
|
|
```
|
|
|
|
## Volumes
|
|
|
|
Mount persistent data:
|
|
|
|
```bash
|
|
docker run -p 8080:8080 \
|
|
-v /path/to/config.yaml:/app/config.yaml:ro \
|
|
-v /path/to/data:/app/data \
|
|
dbal-daemon:latest
|
|
```
|
|
|
|
## Behind Nginx Reverse Proxy
|
|
|
|
The daemon is designed to run behind nginx for:
|
|
- SSL/TLS termination
|
|
- Load balancing
|
|
- Rate limiting
|
|
- Caching
|
|
|
|
See `NGINX_INTEGRATION.md` for nginx configuration examples.
|
|
|
|
## Troubleshooting
|
|
|
|
### Container won't start
|
|
|
|
```bash
|
|
# Check logs
|
|
docker logs <container_id>
|
|
|
|
# Run interactively
|
|
docker run -it --entrypoint /bin/bash dbal-daemon:latest
|
|
|
|
# Check health
|
|
docker inspect --format='{{.State.Health.Status}}' <container_id>
|
|
```
|
|
|
|
### Port already in use
|
|
|
|
```bash
|
|
# Use different port
|
|
docker run -p 8081:8080 dbal-daemon:latest
|
|
|
|
# Or set via environment
|
|
docker run -p 8081:8081 -e DBAL_PORT=8081 dbal-daemon:latest
|
|
```
|
|
|
|
### Permission denied
|
|
|
|
```bash
|
|
# Check file ownership
|
|
ls -la /path/to/config.yaml
|
|
|
|
# Fix ownership (config should be readable by UID 1000)
|
|
chown 1000:1000 /path/to/config.yaml
|
|
```
|
|
|
|
## Building for Multiple Platforms
|
|
|
|
```bash
|
|
# Enable buildx
|
|
docker buildx create --use
|
|
|
|
# Build for multiple platforms
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64,linux/arm/v7 \
|
|
-t dbal-daemon:latest \
|
|
--push .
|
|
```
|
|
|
|
## Development
|
|
|
|
For development, use interactive mode:
|
|
|
|
```bash
|
|
docker run -it \
|
|
-e DBAL_DAEMON=false \
|
|
-e DBAL_LOG_LEVEL=debug \
|
|
--entrypoint ./dbal_daemon \
|
|
dbal-daemon:latest
|
|
```
|
|
|
|
This gives you the interactive command prompt for debugging.
|