/
/
/
Ansible role that provisions my storage server.
1---
2# Storage Services Role Defaults
3# Comprehensive media automation and backup configuration
4
5# ==============================================================================
6# GENERAL SETTINGS
7# ==============================================================================
8storage_enabled: true
9storage_docker_dir: "/docker"
10storage_base_path: "/mnt/rstorage"
11storage_user: "{{ ansible_user }}"
12storage_group: "{{ ansible_user }}"
13storage_uid: 1000
14storage_gid: 1000
15
16# Timezone configuration
17storage_timezone: "America/New_York"
18
19# Docker network for storage services
20storage_docker_network: "storage-network"
21
22# Configuration directories (used by prerequisites for directory creation)
23storage_config_directories:
24 - "{{ storage_docker_dir }}"
25 - "{{ jellyfin_data_dir }}"
26 - "{{ jellyfin_config_dir }}"
27 - "{{ jellyfin_cache_dir }}"
28 - "{{ arr_config_dir }}"
29 - "{{ sonarr_config_dir }}"
30 - "{{ radarr_config_dir }}"
31 - "{{ prowlarr_config_dir }}"
32 - "{{ readarr_config_dir }}"
33 - "{{ jellyseer_config_dir }}"
34 - "{{ gluetun_config_dir }}"
35 - "{{ calibre_config_dir }}"
36 - "{{ calibre_server_config_dir }}"
37 - "{{ calibre_web_config_dir }}"
38 - "{{ restic_backup_config_dir }}"
39
40# ==============================================================================
41# SERVICE CONFIGURATIONS
42# ==============================================================================
43
44# Jellyfin Media Server
45jellyfin_enabled: true
46jellyfin_port: 8096
47jellyfin_host_port: 8096
48jellyfin_data_dir: "{{ storage_docker_dir }}/jellyfin"
49jellyfin_config_dir: "{{ jellyfin_data_dir }}/config"
50jellyfin_cache_dir: "{{ jellyfin_data_dir }}/cache"
51jellyfin_media_dir: "{{ storage_base_path }}/media"
52
53jellyfin_image: "jellyfin/jellyfin"
54jellyfin_version: "latest"
55
56# --- Hardware acceleration toggles
57jellyfin_hwaccel_enabled: true # set false to disable device mapping
58jellyfin_gpu_type: "intel" # intel|amd|nvidia (future-proof)
59jellyfin_vaapi_map_dri_dir: "/dev/dri" # map full /dev/dri into the container
60jellyfin_vaapi_device: "/dev/dri/renderD128"
61
62# For Intel VAAPI driver; leave empty to omit
63jellyfin_libva_driver_name: "iHD" # iHD for modern Intel GPUs; i965 for older
64
65# Optionally install host tools/drivers (Debian/Ubuntu); set false to skip
66jellyfin_hwaccel_install_host_deps: true
67
68# Arr Stack Configuration
69arr_stack_enabled: true
70arr_vpn_enabled: true
71arr_downloads_dir: "{{ storage_base_path }}/downloads"
72arr_config_dir: "{{ storage_docker_dir }}/arr-stack"
73
74# Sonarr (TV Shows)
75sonarr_enabled: true
76sonarr_port: 8989
77sonarr_host_port: 8989
78sonarr_config_dir: "{{ arr_config_dir }}/sonarr"
79sonarr_tv_dir: "{{ storage_base_path }}/media/tv"
80
81# Radarr (Movies)
82radarr_enabled: true
83radarr_port: 7878
84radarr_host_port: 7878
85radarr_config_dir: "{{ arr_config_dir }}/radarr"
86radarr_movies_dir: "{{ storage_base_path }}/media/movies"
87
88# Prowlarr (Indexers)
89prowlarr_enabled: true
90prowlarr_port: 9696
91prowlarr_host_port: 9696
92prowlarr_config_dir: "{{ arr_config_dir }}/prowlarr"
93
94# Readarr (Books)
95readarr_enabled: true
96readarr_port: 8787
97readarr_host_port: 8787
98readarr_config_dir: "{{ arr_config_dir }}/readarr"
99readarr_books_dir: "{{ storage_base_path }}/media/books"
100
101# Jellyseer (Media Requests)
102jellyseer_enabled: true
103jellyseer_port: 5055
104jellyseer_host_port: 5055
105jellyseer_config_dir: "{{ arr_config_dir }}/jellyseer"
106
107# Gluetun VPN for Arr Stack
108gluetun_enabled: "{{ arr_vpn_enabled }}"
109gluetun_config_dir: "{{ arr_config_dir }}/gluetun"
110
111# VPN Provider Settings (from vault)
112vpn_service_provider: "{{ vault_storage.vpn_service_provider | default('') }}"
113vpn_server_countries: "Netherlands,Switzerland"
114vpn_server_regions: "Europe"
115
116# Calibre Stack Configuration
117calibre_enabled: true
118calibre_config_dir: "{{ storage_docker_dir }}/calibre"
119calibre_library_dir: "{{ storage_base_path }}/media/books"
120
121# Calibre Server
122calibre_server_enabled: true
123calibre_server_port: 8083
124calibre_server_host_port: 8083
125calibre_server_config_dir: "{{ calibre_config_dir }}/server"
126
127# Calibre-Web
128calibre_web_enabled: true
129calibre_web_port: 8084
130calibre_web_host_port: 8084
131calibre_web_config_dir: "{{ calibre_config_dir }}/web"
132
133# ==============================================================================
134# RESTIC BACKUP SERVER CONFIGURATION
135# ==============================================================================
136restic_backup_server_enabled: true
137restic_backup_port: 8000
138restic_backup_host_port: 8000
139restic_backup_config_dir: "{{ storage_docker_dir }}/restic-server"
140restic_backup_data_dir: "{{ storage_base_path }}/backups"
141restic_backup_htpasswd_file: "{{ restic_backup_config_dir }}/.htpasswd"
142
143# Restic server authentication (from vault)
144restic_backup_username: "{{ vault_storage.restic_backup_username | default('') }}"
145restic_backup_password: "{{ vault_storage.restic_backup_password | default('') }}"
146
147# ==============================================================================
148# VOLUME MOUNTS AND PATHS
149# ==============================================================================
150
151# Common media directories
152media_directories:
153 - "{{ storage_base_path }}/media"
154 - "{{ storage_base_path }}/media/movies"
155 - "{{ storage_base_path }}/media/tv"
156 - "{{ storage_base_path }}/media/books"
157 - "{{ storage_base_path }}/media/audiobooks"
158 - "{{ storage_base_path }}/media/music"
159 - "{{ storage_base_path }}/downloads"
160 - "{{ storage_base_path }}/downloads/complete"
161 - "{{ storage_base_path }}/downloads/incomplete"
162 - "{{ storage_base_path }}/backups"
163
164# Docker configuration directories
165docker_config_directories:
166 - "{{ storage_docker_dir }}"
167 - "{{ jellyfin_data_dir }}"
168 - "{{ jellyfin_config_dir }}"
169 - "{{ jellyfin_cache_dir }}"
170 - "{{ arr_config_dir }}"
171 - "{{ sonarr_config_dir }}"
172 - "{{ radarr_config_dir }}"
173 - "{{ prowlarr_config_dir }}"
174 - "{{ readarr_config_dir }}"
175 - "{{ jellyseer_config_dir }}"
176 - "{{ gluetun_config_dir }}"
177 - "{{ calibre_config_dir }}"
178 - "{{ calibre_server_config_dir }}"
179 - "{{ calibre_web_config_dir }}"
180 - "{{ restic_backup_config_dir }}"
181
182# ==============================================================================
183# SECURITY AND ACCESS SETTINGS
184# ==============================================================================
185
186# User credentials (from vault)
187jellyfin_admin_username: "{{ vault_storage.jellyfin_admin_username | default('') }}"
188jellyfin_admin_password: "{{ vault_storage.jellyfin_admin_password | default('') }}"
189calibre_web_admin_username: "{{ vault_storage.calibre_web_admin_username | default('') }}"
190calibre_web_admin_password: "{{ vault_storage.calibre_web_admin_password | default('') }}"
191
192# ==============================================================================
193# PERFORMANCE TUNING
194# ==============================================================================
195
196# Docker resource limits (can be overridden per service)
197default_memory_limit: "2g"
198default_cpu_limit: "2"
199
200# Service-specific resource limits (following runner pattern)
201jellyfin_memory_limit: "4g"
202jellyfin_cpu_limit: "4"
203arr_stack_memory_limit: "1g"
204arr_stack_cpu_limit: "1"
205calibre_stack_memory_limit: "1g"
206calibre_stack_cpu_limit: "1"
207restic_server_memory_limit: "512m"
208restic_server_cpu_limit: "0.5"
209
210# ==============================================================================
211# MONITORING AND HEALTH CHECKS
212# ==============================================================================
213health_check_enabled: true
214health_check_interval: "30s"
215health_check_timeout: "10s"
216health_check_retries: 3
217health_check_start_period: "60s"
218
219# ==============================================================================
220# BACKUP CONFIGURATION
221# ==============================================================================
222backup_jellyfin_config: true
223backup_arr_configs: true
224backup_calibre_library: true
225backup_restic_config: true
226backup_retention_days: 30
227backup_schedule: "0 3 * * *" # 3 AM daily
228
229# ==============================================================================
230# SERVICE HEALTH ENDPOINTS
231# ==============================================================================
232service_endpoints:
233 jellyfin: "http://localhost:{{ jellyfin_port }}/health"
234 sonarr: "http://localhost:{{ sonarr_port }}"
235 radarr: "http://localhost:{{ radarr_port }}"
236 prowlarr: "http://localhost:{{ prowlarr_port }}"
237 readarr: "http://localhost:{{ readarr_port }}"
238 jellyseer: "http://localhost:{{ jellyseer_port }}"
239 calibre_server: "http://localhost:{{ calibre_server_port }}"
240 calibre_web: "http://localhost:{{ calibre_web_port }}"
241 restic_server: "http://localhost:{{ restic_backup_port }}"
242