/
/
/
This repo is destined for my server automations and setup.
1---
2# Storage Servers Group Variables
3# Applied to all servers in the storage_servers group
4
5# ==============================================================================
6# STORAGE DEFAULTS
7# ==============================================================================
8storage_enabled: true
9backup_enabled: true
10
11# ==============================================================================
12# RAID CONFIGURATION
13# ==============================================================================
14storage_raid_arrays:
15 - name: "md0"
16 device: "/dev/md0"
17 mount_point: "/mnt/rstorage"
18 filesystem: "ext4"
19
20# ==============================================================================
21# COMMON STORAGE CONFIGURATION
22# ==============================================================================
23# Standard storage paths
24storage_base_path: "/mnt/rstorage"
25storage_docker_dir: "/docker"
26
27# User/Group defaults (ansible:users for group sharing)
28storage_uid: 1000
29storage_gid: 100
30
31# ==============================================================================
32# DEFAULT SERVICE ENABLEMENT
33# ==============================================================================
34# Enable all services by default (disable in host_vars if not needed)
35jellyfin_enabled: true
36arr_stack_enabled: true
37arr_vpn_enabled: true
38calibre_enabled: true
39restic_backup_server_enabled: true
40nextcloud_enabled: true
41
42# Individual Arr services
43sonarr_enabled: true
44radarr_enabled: true
45prowlarr_enabled: true
46lazylibrarian_enabled: true
47bazarr_enabled: true
48jellyseer_enabled: true
49flaresolverr_enabled: true
50qbittorrent_enabled: true
51gluetun_enabled: "{{ arr_vpn_enabled }}"
52
53# ==============================================================================
54# PERFORMANCE DEFAULTS
55# ==============================================================================
56# Conservative defaults - override based on hardware capacity
57default_memory_limit: "2g"
58default_cpu_limit: "2"
59
60# Jellyfin gets more resources (media transcoding intensive)
61jellyfin_memory_limit: "4g"
62jellyfin_cpu_limit: "4"
63
64# Arr stack typically lightweight
65arr_memory_limit: "1g"
66arr_cpu_limit: "1"
67
68# ==============================================================================
69# NETWORK CONFIGURATION
70# ==============================================================================
71storage_docker_network: "storage-network"
72
73# Health check settings
74health_check_enabled: true
75health_check_interval: "30s"
76health_check_timeout: "10s"
77health_check_retries: 3
78
79# ==============================================================================
80# BACKUP CONFIGURATION
81# ==============================================================================
82# System-level backup settings
83backup_retention_days: 90
84backup_schedule: "0 2 * * *" # 2 AM daily
85backup_path: "{{ storage_base_path }}/system-backups"
86
87# Service configuration backup
88backup_jellyfin_config: true
89backup_arr_configs: true
90backup_calibre_library: true
91
92# ==============================================================================
93# VPN DEFAULTS
94# ==============================================================================
95# Default VPN settings (credentials must be in vault)
96vpn_server_countries: "Netherlands,Switzerland"
97vpn_server_regions: "Europe"
98
99# ==============================================================================
100# SECURITY SETTINGS
101# ==============================================================================
102# System optimization for storage servers
103system_swappiness: 1 # Minimize swap usage
104
105# ==============================================================================
106# PORT ASSIGNMENTS
107# ==============================================================================
108# Standard ports - change in host_vars if conflicts exist
109jellyfin_host_port: 8096
110
111sonarr_host_port: 8989
112radarr_host_port: 7878
113prowlarr_host_port: 9696
114lazylibrarian_host_port: 5299
115
116restic_backup_host_port: 8000
117nextcloud_host_port: 8443
118
119# ==============================================================================
120# DIRECTORY STRUCTURE
121# ==============================================================================
122# These will be created automatically
123media_directories:
124 - "{{ storage_base_path }}/media"
125 - "{{ storage_base_path }}/media/movies"
126 - "{{ storage_base_path }}/media/shows"
127 - "{{ storage_base_path }}/media/books"
128 - "{{ storage_base_path }}/downloads"
129 - "{{ storage_base_path }}/backups"
130
131 # D&D session agent. Kept out of media/music on purpose: that path is
132 # indexed by Navidrome and untagged ambience would fill the library with
133 # "Unknown Artist" entries.
134 - "{{ storage_base_path }}/media/dnd"
135 - "{{ storage_base_path }}/media/dnd/ambience" # atmosphere beds
136 - "{{ storage_base_path }}/media/dnd/effects" # one-shot sound effects
137 - "{{ storage_base_path }}/media/dnd/themes" # session open/close
138 # Raw per-speaker audio. The live pipeline needs tuning against real
139 # sessions, and speaker separation within the shared table track can only
140 # happen afterwards - without this, none of that is recoverable.
141 - "{{ storage_base_path }}/media/dnd/recordings"
142 - "{{ storage_base_path }}/media/dnd/transcripts"
143 - "{{ storage_base_path }}/media/dnd/battlemaps" # snapshots from Frigate
144 - "{{ storage_base_path }}/media/dnd/artwork" # generated artwork
145 # The campaign knowledge base. characters/ is canon and hand-written; the
146 # agent reads it and never writes it.
147 - "{{ storage_base_path }}/media/dnd/campaign"
148 - "{{ storage_base_path }}/media/dnd/campaign/characters"
149 - "{{ storage_base_path }}/media/dnd/campaign/sessions"
150 - "{{ storage_base_path }}/media/dnd/campaign/world"
151
152# ==============================================================================
153# USAGE NOTES
154# ==============================================================================
155# This file provides sensible defaults for all storage servers.
156#
157# To customize individual servers:
158# 1. Copy host_vars/storage.yml.example to host_vars/[hostname].yml
159# 2. Override any settings specific to that server
160# 3. Configure vault variables for VPN and authentication
161#
162# To deploy storage services:
163# ansible-playbook -i inventory/hosts storage.yml --limit storage_servers
164#
165# Or use the main playbook:
166# ansible-playbook -i inventory/hosts site.yml --limit storage_servers --tags "core,storage"
167