Files
arr-suite-template-bootstrap/TEMPLATE_SETUP.md
openhands 24f2cd64e9 Initial template repository
🎬 ARR Suite Template Bootstrap - Complete Media Automation Stack

Features:
- 16 production services (Prowlarr, Sonarr, Radarr, Plex, etc.)
- One-command Ansible deployment
- VPN-protected downloads via Gluetun
- Tailscale secure access
- Production-ready security (UFW, Fail2Ban)
- Automated backups and monitoring
- Comprehensive documentation

Ready for customization and deployment to any VPS.

Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-28 04:26:12 +00:00

7.6 KiB

🎯 Template Setup Guide

Complete setup instructions for the ARR Suite Template Bootstrap

This guide will walk you through customizing and deploying this template for your own VPS.

🚀 Quick Setup (5 Minutes)

Step 1: Clone and Prepare

git clone <your-repo-url> my-arr-suite
cd my-arr-suite

Step 2: Configure Your VPS

Edit inventory/production.yml:

all:
  children:
    arrs_servers:
      hosts:
        your-vps:
          ansible_host: YOUR_VPS_IP_ADDRESS        # ← Your VPS IP
          ansible_user: root                       # ← Your SSH user
          ansible_ssh_private_key_file: ~/.ssh/your_private_key  # ← Your SSH key
          ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
          tailscale_ip: YOUR_TAILSCALE_IP_ADDRESS  # ← Optional: Tailscale IP

Step 3: Set Up Secrets

# Copy the vault template
cp group_vars/all/vault.yml.example group_vars/all/vault.yml

# Encrypt it (you'll set a password)
ansible-vault encrypt group_vars/all/vault.yml

# Edit your secrets
ansible-vault edit group_vars/all/vault.yml

Required secrets to configure:

# VPN Credentials (REQUIRED)
vault_vpn_provider: "nordvpn"           # Your VPN provider
vault_vpn_username: "your_username"     # Your VPN username  
vault_vpn_password: "your_password"     # Your VPN password

# Optional: Indexer credentials
vault_nzbgeek_api_key: "your_api_key"
vault_nzbgeek_username: "your_username"

# Optional: Usenet provider
vault_usenet_provider_host: "news.your-provider.com"
vault_usenet_provider_username: "your_username"
vault_usenet_provider_password: "your_password"

Step 4: Deploy

# Deploy everything
ansible-playbook -i inventory/production.yml ansible-deployment.yml

# Or use the helper script
./deploy.sh

🔧 Detailed Configuration

VPN Provider Setup

NordVPN

vault_vpn_provider: "nordvpn"
vault_vpn_username: "your_nordvpn_email"
vault_vpn_password: "your_nordvpn_password"

Surfshark

vault_vpn_provider: "surfshark"
vault_vpn_username: "your_surfshark_username"
vault_vpn_password: "your_surfshark_password"

ExpressVPN

vault_vpn_provider: "expressvpn"
vault_vpn_username: "your_expressvpn_username"
vault_vpn_password: "your_expressvpn_password"

Optional Services Configuration

Edit ansible-deployment.yml to enable/disable services:

# Service toggles
enable_whisparr: false          # Adult content automation
enable_tailscale: true          # Secure remote access
enable_plex_claim: false        # Auto Plex setup
enable_backup_system: true     # Automated backups
enable_monitoring: true        # Health monitoring

Resource Customization

Adjust resource limits in ansible-deployment.yml:

# Docker resource limits
docker_memory_limit: "2g"       # Per container memory limit
docker_cpu_limit: "1.0"        # Per container CPU limit

# Storage paths
media_root: "/home/docker/media"
downloads_root: "/home/docker/downloads"
config_root: "/home/docker"

🌐 Domain & SSL Setup (Optional)

Custom Domain Configuration

# In vault.yml
vault_domain: "yourdomain.com"
vault_ssl_email: "you@yourdomain.com"
vault_cloudflare_api_token: "your_cloudflare_token"  # If using Cloudflare

Reverse Proxy Setup

The template includes Traefik configuration for SSL:

# Enable reverse proxy
enable_traefik: true
enable_ssl: true

🔐 Security Customization

SSH Key Setup

# Generate SSH key if you don't have one
ssh-keygen -t ed25519 -f ~/.ssh/arr_suite_key -C "arr-suite-deployment"

# Copy to your VPS
ssh-copy-id -i ~/.ssh/arr_suite_key.pub root@YOUR_VPS_IP

# Update inventory with key path
ansible_ssh_private_key_file: ~/.ssh/arr_suite_key
# Install Tailscale on your local machine
curl -fsSL https://tailscale.com/install.sh | sh

# Get your Tailscale auth key
tailscale up
# Visit the URL to authenticate

# Add auth key to vault.yml
vault_tailscale_auth_key: "tskey-auth-your-key-here"

📊 Post-Deployment Configuration

1. Access Your Services

After deployment, services will be available at:

http://YOUR_VPS_IP:9696  - Prowlarr
http://YOUR_VPS_IP:8989  - Sonarr  
http://YOUR_VPS_IP:7878  - Radarr
http://YOUR_VPS_IP:8686  - Lidarr
http://YOUR_VPS_IP:6767  - Bazarr
http://YOUR_VPS_IP:5055  - Jellyseerr
http://YOUR_VPS_IP:8080  - SABnzbd
http://YOUR_VPS_IP:8112  - Deluge
http://YOUR_VPS_IP:32400 - Plex
http://YOUR_VPS_IP:8181  - Tautulli

2. Configure Indexers in Prowlarr

  1. Access Prowlarr at http://YOUR_VPS_IP:9696
  2. Go to Settings → Indexers
  3. Add your indexers (NZBgeek, NZBHydra2, etc.)
  4. Test connections

3. Connect Applications

  1. In Prowlarr → Settings → Apps
  2. Add each application:
    • Sonarr: http://sonarr:8989
    • Radarr: http://radarr:7878
    • Lidarr: http://lidarr:8686
    • Bazarr: http://bazarr:6767

4. Setup Download Clients

In each *arr application:

  1. Go to Settings → Download Clients
  2. Add SABnzbd: http://gluetun:8080
  3. Add Deluge: http://gluetun:8112

5. Configure Plex

  1. Access Plex at http://YOUR_VPS_IP:32400
  2. Complete initial setup
  3. Add libraries:
    • Movies: /media/movies
    • TV Shows: /media/tv
    • Music: /media/music

🛠️ Customization Examples

Add Custom Service

  1. Create compose/my-service.yml:
services:
  my-service:
    image: my-service:latest
    container_name: my-service
    ports:
      - "8090:8090"
    volumes:
      - ./my-service:/config
    restart: unless-stopped
  1. Add to ansible-deployment.yml:
- name: Deploy my custom service
  docker_compose:
    project_src: "{{ docker_dir }}/compose"
    files:
      - docker-compose-vpn.yml
      - my-service.yml

Custom Backup Schedule

# In ansible-deployment.yml
backup_schedule: "0 2 * * *"  # Daily at 2 AM
backup_retention_days: 30     # Keep 30 days of backups
backup_encryption: true       # Encrypt backups

🔧 Troubleshooting

Common Issues

Ansible Connection Failed

# Test SSH connection
ssh -i ~/.ssh/your_key root@YOUR_VPS_IP

# Check inventory syntax
ansible-inventory -i inventory/production.yml --list

VPN Not Working

# Check VPN container logs
docker logs gluetun

# Test VPN connection
docker exec gluetun curl -s ifconfig.me

Services Not Accessible

# Check container status
docker ps

# Check firewall
sudo ufw status

# Check service logs
docker logs prowlarr

Useful Commands

# Check deployment status
ansible-playbook -i inventory/production.yml ansible-deployment.yml --check

# Run specific tasks
ansible-playbook -i inventory/production.yml ansible-deployment.yml --tags "docker"

# View vault contents
ansible-vault view group_vars/all/vault.yml

# Edit vault
ansible-vault edit group_vars/all/vault.yml

📚 Next Steps

  1. Read the full documentation: ANSIBLE_DEPLOYMENT.md
  2. Configure your indexers: Add your favorite indexers to Prowlarr
  3. Set up automation: Configure quality profiles and release profiles
  4. Add media: Start adding movies and TV shows to your libraries
  5. Monitor performance: Use Tautulli to monitor your Plex usage

🆘 Getting Help

  • Documentation: Check the docs/ directory
  • Troubleshooting: See docs/TROUBLESHOOTING.md
  • Community: Join the discussion forums
  • Issues: Report bugs in the issue tracker

🎉 You're ready to deploy your own media automation empire!