/
/
/
Ansible role that provisions my storage server.
1---
2# Storage Services Variables
3# Internal role variables and constants
4
5# ==============================================================================
6# SERVICE VERSIONS (PINNED FOR STABILITY)
7# ==============================================================================
8jellyfin_version: "latest"
9sonarr_version: "latest"
10radarr_version: "latest"
11prowlarr_version: "latest"
12readarr_version: "nightly"
13gluetun_version: "latest"
14calibre_version: "latest"
15calibre_web_version: "latest"
16restic_version: "latest"
17jellyseer_version: "latest"
18
19# ==============================================================================
20# RESOURCE PROFILES (following runner pattern)
21# ==============================================================================
22resource_profiles:
23 lightweight:
24 memory_limit: "512m"
25 cpu_limit: "0.5"
26 standard:
27 memory_limit: "1g"
28 cpu_limit: "1"
29 heavy:
30 memory_limit: "2g"
31 cpu_limit: "2"
32 intensive:
33 memory_limit: "4g"
34 cpu_limit: "4"
35
36# Service classifications for resource allocation
37service_profiles:
38 jellyfin: "intensive"
39 arr_stack: "standard"
40 calibre_stack: "standard"
41 restic_server: "lightweight"
42 gluetun: "lightweight"
43 jellyseer: "lightweight"
44
45# ==============================================================================
46# DOCKER IMAGE REGISTRY
47# ==============================================================================
48docker_registry: "docker.io"
49jellyfin_image: "{{ docker_registry }}/jellyfin/jellyfin"
50sonarr_image: "{{ docker_registry }}/linuxserver/sonarr"
51radarr_image: "{{ docker_registry }}/linuxserver/radarr"
52prowlarr_image: "{{ docker_registry }}/linuxserver/prowlarr"
53readarr_image: "{{ docker_registry }}/linuxserver/readarr"
54gluetun_image: "{{ docker_registry }}/qmcgaw/gluetun"
55calibre_image: "{{ docker_registry }}/linuxserver/calibre"
56calibre_web_image: "{{ docker_registry }}/linuxserver/calibre-web"
57restic_image: "{{ docker_registry }}/restic/rest-server"
58jellyseer_image: "{{ docker_registry }}/fallenbagel/jellyseerr"
59
60# ==============================================================================
61# INTERNAL SERVICE DEPENDENCIES
62# ==============================================================================
63service_dependencies:
64 jellyfin: []
65 arr_stack:
66 - gluetun
67 - jellyseer
68 calibre_stack: []
69 restic_server: []
70
71# ==============================================================================
72# NETWORK PORT RANGES
73# ==============================================================================
74port_ranges:
75 media_services: "8000-8999"
76 arr_services: "7878-9696"
77 calibre_services: "8080-8099"
78 backup_services: "8000-8100"
79
80# ==============================================================================
81# VOLUME MOUNT PATTERNS
82# ==============================================================================
83common_volume_mounts:
84 config: "{{ storage_docker_dir }}/%SERVICE%/config:/config"
85 downloads: "{{ arr_downloads_dir }}:/downloads"
86 media: "{{ storage_base_path }}/media:/media"
87 books: "{{ storage_base_path }}/media/books:/books"
88
89# ==============================================================================
90# NETWORK CONFIGURATIONS
91# ==============================================================================
92internal_networks:
93 - name: "{{ storage_docker_network }}"
94 driver: bridge
95 internal: false
96
97# ==============================================================================
98# HEALTH CHECK PATTERNS
99# ==============================================================================
100health_check_patterns:
101 http:
102 test: ["CMD", "curl", "-f", "http://localhost:%PORT%/health"]
103 interval: "{{ health_check_interval }}"
104 timeout: "{{ health_check_timeout }}"
105 retries: "{{ health_check_retries }}"
106 start_period: "{{ health_check_start_period }}"
107
108 tcp:
109 test: ["CMD", "nc", "-z", "localhost", "%PORT%"]
110 interval: "{{ health_check_interval }}"
111 timeout: "{{ health_check_timeout }}"
112 retries: "{{ health_check_retries }}"
113 start_period: "{{ health_check_start_period }}"
114
115# ==============================================================================
116# ENVIRONMENT TEMPLATE DEFAULTS
117# ==============================================================================
118common_environment:
119 PUID: "{{ storage_uid }}"
120 PGID: "{{ storage_gid }}"
121 TZ: "{{ storage_timezone }}"
122 UMASK_SET: "022"
123
124# ==============================================================================
125# LOGGING CONFIGURATION
126# ==============================================================================
127logging_driver: "json-file"
128logging_max_size: "10m"
129logging_max_file: "3"
130
131# Service-specific logging levels
132jellyfin_log_level: "info"
133arr_log_level: "info"
134calibre_log_level: "info"
135restic_log_level: "info"