Sonarr Deployment - Role Overview

This page documents the Sonarr Docker deployment using Ansible, illustrating the workflow, architecture, and best practices for deploying this containerized application with version control, persistent storage, and integration with an external PostgreSQL database.


1. Overview

Sonarr is deployed in a Docker container using Ansible. Key steps include:

Additionally, Sonarr connects to an external PostgreSQL database, separating storage from the application for improved reliability and scalability.


2. Persistent Configuration and Backups

Persistent storage ensures application data is preserved across container restarts:

Example variables from the role:

sonarr_setup_config_dir: "/config"
sonarr_setup_backups_dir: "/nfs/backups/sonarr"
sonarr_setup_backup_filename: "{{ sonarr_setup_backup_prefix }}{{ ansible_date_time.date }}.sqlc"

3. Docker Image Version Control

The role pins a specific Docker image version:

sonarr_setup_version: 4.0.15.2941
sonarr_setup_docker_image_name: "sonarr:{{ sonarr_setup_version }}"

4. Deployment Workflow

The sequence for deploying Sonarr is:

  1. Stop and remove existing container
docker stop sonarr
docker rm sonarr
docker network prune -f
  1. Ensure persistent directories exist
mkdir -p {{ sonarr_setup_config_dir }}
mkdir -p {{ sonarr_setup_backups_dir }}
chown <user>:<group> {{ sonarr_setup_config_dir }}
  1. Deploy configuration files and Docker Compose
  1. Prune unused Docker images (optional)
docker image prune -f
  1. Pull the pinned Docker image
docker-compose -f {{ sonarr_setup_config_dir }}/docker-compose.yml pull
  1. Start the container
docker-compose -f {{ sonarr_setup_config_dir }}/docker-compose.yml up -d

5. Architecture Diagram

                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚  Host / Docker Environment   β”‚
                 β”‚                              β”‚
                 β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
                 β”‚ β”‚ Sonarr Container         β”‚ β”‚
                 β”‚ β”‚ - Pinned Image           β”‚ β”‚
                 β”‚ β”‚ - Config & Backup Volumesβ”‚ β”‚
                 β”‚ β”‚ - Exposed Ports 8989/9898β”‚ β”‚
                 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
                 β”‚                              β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚ Access
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚ Users / Clients             β”‚
                 β”‚ Web Browser / API           β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚ Database Connection
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚ External PostgreSQL Server  β”‚
                 β”‚ - Database: sonarr-main     β”‚
                 β”‚ - User: sonarr              β”‚
                 β”‚ - Port: 5432                β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

6. Key Features


7. Summary

The Sonarr deployment role demonstrates a robust, production-like container workflow:

This workflow can be adapted for other containerized applications in the home lab, ensuring maintainability, reliability, and consistent infrastructure-as-code practices.