Skip to main content

Install Relay Server with Docker Compose

Deploy a complete Camouflage relay infrastructure using Docker Compose.

Prerequisites

  • Docker Engine 20.10 or later
  • Docker Compose v2.0 or later
  • Domain name pointing to your server
  • SSL certificates for your domain

Quick Start

1. Clone the Repository

git clone https://github.com/camouflage-network/camouflage-relay
cd camouflage-relay

2. Configure Environment

Create .env file:

# Server Configuration
PUBLIC_DOMAIN=relay.yourdomain.com
PUBLIC_IP=your-server-ip

# SSL Configuration
SSL_CERT_PATH=./ssl/cert.pem
SSL_KEY_PATH=./ssl/key.pem

# Relay Configuration
RELAY_LOG_LEVEL=info
RELAY_METRICS_ENABLED=true

3. Prepare SSL Certificates

mkdir -p ssl
cp /path/to/your/cert.pem ssl/
cp /path/to/your/key.pem ssl/

4. Deploy

docker-compose up -d

Complete Configuration

docker-compose.yml

version: '3.8'

services:
relay:
image: camouflagenetworks/camouflage-relay:latest
container_name: camouflage-relay
restart: unless-stopped
ports:
- "443:443"
- "61700:61700/udp"
- "9090:9090" # Metrics
environment:
- RELAY_PUBLIC_ADDR=${PUBLIC_DOMAIN}:61700
- RELAY_LOG_LEVEL=${RELAY_LOG_LEVEL}
- RELAY_METRICS_PORT=9090
volumes:
- ./config:/etc/camouflage/config
- ./ssl:/etc/camouflage/ssl
- relay-logs:/var/log/camouflage
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- camouflage-network

prometheus:
image: prom/prometheus:latest
container_name: camouflage-prometheus
restart: unless-stopped
ports:
- "9091:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
networks:
- camouflage-network
depends_on:
- relay

grafana:
image: grafana/grafana:latest
container_name: camouflage-grafana
restart: unless-stopped
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_USERS_ALLOW_SIGN_UP=false
volumes:
- grafana-data:/var/lib/grafana
networks:
- camouflage-network
depends_on:
- prometheus

volumes:
relay-logs:
prometheus-data:
grafana-data:

networks:
camouflage-network:
driver: bridge

Prometheus Configuration

Create prometheus.yml:

global:
scrape_interval: 15s
evaluation_interval: 15s

scrape_configs:
- job_name: 'camouflage-relay'
static_configs:
- targets: ['relay:9090']

Relay Configuration

Create config/relay.yaml:

server:
listen_addr: "0.0.0.0:61700"
public_addr: "${PUBLIC_DOMAIN}:61700"
max_connections: 10000
connection_timeout: 300s

tls:
cert_file: "/etc/camouflage/ssl/cert.pem"
key_file: "/etc/camouflage/ssl/key.pem"
min_version: "1.3"

quic:
max_idle_timeout: 30s
max_stream_timeout: 60s
keep_alive_interval: 10s

logging:
level: "info"
format: "json"
output: "/var/log/camouflage/relay.log"

metrics:
enabled: true
port: 9090
path: "/metrics"

Management Commands

Start Services

docker-compose up -d

Stop Services

docker-compose down

View Logs

# All services
docker-compose logs -f

# Relay only
docker-compose logs -f relay

# Last 100 lines
docker-compose logs --tail=100 relay

Restart Services

docker-compose restart relay

Update Images

docker-compose pull
docker-compose up -d

Monitoring and Metrics

Access Grafana

  1. Navigate to http://your-server-ip:3000
  2. Login with default credentials:
    • Username: admin
    • Password: admin
  3. Import Camouflage dashboard from dashboards/relay.json

View Prometheus Metrics

Navigate to http://your-server-ip:9091

Key Metrics

  • camouflage_relay_connections_total - Total active connections
  • camouflage_relay_bytes_sent_total - Total bytes transmitted
  • camouflage_relay_bytes_received_total - Total bytes received
  • camouflage_relay_errors_total - Total errors encountered

High Availability Setup

For production deployments, run multiple relays:

services:
relay-1:
extends: relay
container_name: camouflage-relay-1

relay-2:
extends: relay
container_name: camouflage-relay-2
ports:
- "444:443"
- "61701:61700/udp"

Add load balancer configuration as needed.

Backup and Restore

Backup Configuration

tar -czf camouflage-backup-$(date +%Y%m%d).tar.gz \
config/ ssl/ .env docker-compose.yml

Restore Configuration

tar -xzf camouflage-backup-YYYYMMDD.tar.gz
docker-compose up -d

Troubleshooting

Check Service Status

docker-compose ps

Check Container Health

docker-compose exec relay curl http://localhost/health

SSL Certificate Issues

Verify certificates:

openssl x509 -in ssl/cert.pem -text -noout

Port Conflicts

Check if ports are in use:

sudo netstat -tulpn | grep -E '443|61700'

Next Steps

See Also