Dasharr

Deployment

Deploy Dasharr in production

Docker Deployment

Basic Docker Run

docker run -d \
  --name dasharr \
  -p 3000:3000 \
  -v ./config:/app/config \
  --restart unless-stopped \
  schenanigans/dasharr:latest

Create a compose.yaml file:

services:
  dasharr:
    image: schenanigans/dasharr:latest
    container_name: dasharr
    ports:
      - "3000:3000"
    volumes:
      - ./config:/app/config
    environment:
      # Application Settings
      - PORT=${PORT:-3000}
      - HOST=${HOST:-0.0.0.0}
      - TZ=${TZ:-America/New_York}
      - APP_URL=${APP_URL:-http://localhost:3000}
      - TRUST_PROXY=${TRUST_PROXY:-true}
      - SESSION_SECRET=${SESSION_SECRET}
      - LOG_LEVEL=${LOG_LEVEL:-info}
      
      # Optional: Configure services via environment variables
      - PLEX_URL=${PLEX_URL}
      - PLEX_TOKEN=${PLEX_TOKEN}
      - TAUTULLI_URL=${TAUTULLI_URL}
      - TAUTULLI_API_KEY=${TAUTULLI_API_KEY}
      - OVERSEERR_URL=${OVERSEERR_URL}
      - OVERSEERR_API_KEY=${OVERSEERR_API_KEY}
      - RADARR_URL=${RADARR_URL}
      - RADARR_API_KEY=${RADARR_API_KEY}
      - SONARR_URL=${SONARR_URL}
      - SONARR_API_KEY=${SONARR_API_KEY}
      - SABNZBD_URL=${SABNZBD_URL}
      - SABNZBD_API_KEY=${SABNZBD_API_KEY}
      - QBITTORRENT_URL=${QBITTORRENT_URL}
      - QBITTORRENT_USERNAME=${QBITTORRENT_USERNAME}
      - QBITTORRENT_PASSWORD=${QBITTORRENT_PASSWORD}
      - PROWLARR_URL=${PROWLARR_URL}
      - PROWLARR_API_KEY=${PROWLARR_API_KEY}
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

Container Management

# View logs
docker logs -f dasharr

# Stop the container
docker stop dasharr

# Start the container
docker start dasharr

# Restart the container
docker restart dasharr

# Update to latest version
docker pull schenanigans/dasharr:latest
docker stop dasharr
docker rm dasharr
# Then run the docker run command again

Production Deployment

For production environments:

  1. Use a reverse proxy (nginx, Caddy, Traefik)
  2. Enable HTTPS/SSL
  3. Set up proper authentication
  4. Configure firewall rules
  5. Set resource limits in compose.yaml

Resource Limits

Add resource constraints to your compose.yaml:

services:
  dasharr:
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M

Example Nginx Configuration

server {
    listen 443 ssl http2;
    server_name dasharr.yourdomain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Advanced Configuration

Reverse Proxy Support

Dasharr automatically works behind reverse proxies without additional configuration. The application trusts proxy headers, so it will work correctly whether accessed at http://localhost:3000 or https://dasharr.yourdomain.com.

Health Checks

Dasharr includes built-in health checks:

# Check health status
docker compose ps

# Manual health check
curl http://localhost:3000/api/health

Security Notes

  • Never expose Dasharr directly to the internet without authentication
  • Use strong API keys for all services
  • Regularly update Docker images
  • Monitor access logs
  • Consider using VPN for remote access