-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
206 lines (173 loc) · 10.4 KB
/
Copy path.env.example
File metadata and controls
206 lines (173 loc) · 10.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# ASCII Sky Production Environment Configuration
# =================================================
# Kopiere diese Datei zu .env und passe die Werte an
#
# Legende:
# [CODE] - Wird im Python-Code verwendet
# [SCRIPT] - Wird in Shell-Scripts verwendet
# [DOCKER] - Wird nur in docker-compose.yml verwendet
# [FUTURE] - Noch nicht implementiert
# ===== Multi-Host Configuration ===== [SCRIPT]
# Hostnames für verteiltes Setup (verwendet in setup-production.sh, setup-firewall.sh)
RABBITMQ_MAIN=asciisky.example.org # Hauptserver mit API + PostgreSQL + RabbitMQ
RABBITMQ_B=rabbit-b.example.org # Worker Host B (8 Cores)
RABBITMQ_C=rabbit-c.example.org # Worker Host C (4 Cores)
# Main server IP for extra_hosts (example IP, replace with your main server's static IP)
RABBITMQ_MAIN_IP=203.0.113.10
# ===== PostgreSQL ===== [CODE] [SCRIPT]
# Verwendet in: db_utils.py, allen Workern, setup-production.sh
POSTGRES_HOST=${RABBITMQ_MAIN}
POSTGRES_PORT=5432
POSTGRES_DB=asciisky
POSTGRES_USER=asciisky
POSTGRES_PASSWORD=CHANGE_ME_STRONG_PASSWORD_HERE # MUSS gesetzt sein!
# ===== RabbitMQ ===== [CODE] [SCRIPT]
# Verwendet in: allen Workern, API routes, precompute_coordinator.py, settings.py
RABBITMQ_HOST=${RABBITMQ_MAIN}
RABBITMQ_PORT=5672
RABBITMQ_USER=admin
RABBITMQ_PASSWORD=CHANGE_ME_STRONG_PASSWORD_HERE # MUSS gesetzt sein!
# ✅ USED: precompute_coordinator.py, workers/*.py
RABBITMQ_URL=amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RABBITMQ_PORT}/
RABBITMQ_HEARTBEAT=60 # Connection Heartbeat (Sekunden, 0=disabled)
RABBITMQ_PREFETCH_COUNT=2 # Worker QoS - gleichzeitig verarbeitete Tasks pro Worker
RABBITMQ_TIMEOUT=30 # Verbindungs-Timeout (Sekunden)
RABBITMQ_RETRY_ATTEMPTS=3 # Verbindungs-Wiederholungsversuche
# RabbitMQ Feature Flags [CODE]
# ✅ USED: settings.py, api/routes/asteroids.py, api/routes/comets.py
USE_RABBITMQ=true # RabbitMQ global aktivieren
USE_RABBITMQ_ASTEROIDS=true # RabbitMQ für Asteroiden-Tasks
USE_RABBITMQ_COMETS=true # RabbitMQ für Kometen-Tasks
FALLBACK_TO_OLD_ON_ERROR=true # Bei RabbitMQ-Fehler: direktberechnung als Fallback
# ===== Session Secret ===== [CODE]
# ✅ USED: main.py (SessionMiddleware)
# Generiere mit: openssl rand -hex 32
ASCII_SKY_SESSION_SECRET=CHANGE_ME_RANDOM_HEX_STRING_HERE # MUSS gesetzt sein!
# ===== Data Directory ===== [CODE]
# ✅ USED: data_paths.py
# Pfad zum data/-Verzeichnis (de421.bsp, pickle-Dateien, MPC-Cache)
# Standard: <projektverzeichnis>/data
# ASCII_SKY_DATA_DIR=/media/data/programming/asciisky/data
# ===== Worker Scaling ===== [SCRIPT] [DOCKER]
# Verwendet in: setup-production.sh, docker-compose*.yml
# Diese Werte gelten für den aktuellen Host (Main, B, C)
# Main Server - Anzahl dedizierter Precompute-Worker (docker-compose.production.yml)
PRECOMPUTE_WORKERS=4 # precompute_worker Replikate auf dem Hauptserver
# Worker Hosts B/C - für docker-compose.workers.yml
# UNIFIED_WORKERS können ALLE Tasks übernehmen (Precompute + Asteroids + Comets)
# Empfehlung: 1-2 Worker pro CPU-Kern
# - Server B (8 Cores): UNIFIED_WORKERS=8 (siehe .env.b.example)
# - Server C (4 Cores): UNIFIED_WORKERS=4 (siehe .env.c.example)
UNIFIED_WORKERS=8 # Unified Architektur (alle Task-Typen)
WORKER_MONITOR=1 # Monitoring Dashboard pro Host (0=deaktiviert)
# ===== Worker Configuration ===== [CODE] [DOCKER]
# ✅ USED: workers/start_unified_worker.py, workers/unified_worker.py, workers/precompute_worker.py
WORKER_LOG_LEVEL=INFO # Logging Level (DEBUG|INFO|WARNING|ERROR)
WORKER_ID= # Optional: Worker-ID für Logging (leer = Hostname)
# [DOCKER] Nur in docker-compose.yml verwendet (nicht im Code!)
WORKER_TYPE=unified # unified (handles all task types)
WORKER_MEMORY_LIMIT_MB=384 # Memory Limit pro Worker
WORKER_CPU_LIMIT_PERCENT=70 # CPU Limit pro Worker
# ===== Monitoring ===== [CODE] [DOCKER]
# ✅ USED: workers/monitor_dashboard.py
MONITOR_PORT=8080 # Worker Monitor Dashboard Port
MONITOR_HOST=0.0.0.0 # Monitor Dashboard Bind-Adresse
# Worker B: 8080, Worker C: 8081 (via .env.b, .env.c)
# ===== Precompute Coordinator Settings ===== [CODE]
# ✅ USED: precompute_coordinator.py
ASCII_SKY_PRECOMPUTE_HOURS=720 # Stunden voraus berechnen (720=30 Tage)
PRECOMPUTE_COORDINATOR_INTERVAL=3600 # Coordinator Interval (Sekunden, 3600=1h)
PRECOMPUTE_COORDINATOR_RETRY_INTERVAL=30 # Retry Interval bei Fehler (Sekunden)
PRECOMPUTE_TASK_CLAIM_TTL=86400 # Ablauf persistenter Queue-Claims (Sekunden)
# Optionale zusätzliche Locations für Precompute (JSON-Array)
# Beispiel:
# ASCII_SKY_PRECOMPUTE_LOCATIONS=[{"latitude": 48.2082, "longitude": 16.3738, "elevation": 171, "name": "Wien"}]
ASCII_SKY_PRECOMPUTE_LOCATIONS=
ASCII_SKY_RETENTION_DAYS=30 # Auto-delete old cached buckets (Tage)
# ===== Magnitude Limits ===== [CODE]
# ✅ USED: bright_asteroids.py, comets.py, settings.py
# Asteroiden
ASCII_SKY_ASTEROID_MAX_ABSOLUTE_MAG=12.0 # H-Magnitude Prefilter (Code-Default: 12.0)
ASCII_SKY_ASTEROID_MAX_APPARENT_MAG=10.0 # V-Magnitude Final Filter für Nutzer-Anzeige
# Kometen
ASCII_SKY_COMET_MAX_ABSOLUTE_MAG=18.0 # H-Magnitude Prefilter (Code-Default: 18.0)
ASCII_SKY_COMET_MAX_APPARENT_MAG=14.0 # V-Magnitude Final Filter für Nutzer-Anzeige
# ===== Cache Granularität ===== [CODE]
# ✅ USED: bright_asteroids.py, comets.py
# Bucket-Größe bestimmt wie viele berechnete Snapshots im Cache landen.
# Kleinerer Wert = feinere Zeitauflösung, mehr Cache-Einträge.
# Größerer Wert = gröbere Auflösung, weniger Cache-Einträge (z.B. 6 = alle 6h ein Snapshot).
ASTEROID_CACHE_BUCKET_HOURS=1 # Zeitbucket für Asteroiden-Cache (Stunden, Default: 1)
ASTEROID_CACHE_TTL_SECONDS=2678400 # Cache TTL für Asteroiden (Sekunden, Default: 31 Tage)
COMET_CACHE_BUCKET_HOURS=1 # Zeitbucket für Kometen-Cache (Stunden, Default: 1)
COMET_CACHE_TTL_SECONDS=2678400 # Cache TTL für Kometen-Positionen (Sekunden, Default: 31 Tage)
COMET_DF_CACHE_TTL_SECONDS=2678400 # Cache TTL für Kometen-DataFrame (Sekunden, Default: 31 Tage)
# ===== Event Computation Limits ===== [CODE]
# ✅ USED: bright_asteroids.py / comets.py
ASCII_SKY_ASTEROIDS_EVENTS_MAX=50 # Max Asteroiden mit Rise/Set/Transit
ASCII_SKY_COMET_EVENTS_MAX=300 # Max Kandidaten für Rise/Set/Transit-Berechnung (Code-Default: 300)
ASCII_SKY_EVENT_GRID_MINUTES=10 # Grobes Ereignisraster; Übergänge werden linear interpoliert
# ===== Messier Object Cache ===== [CODE]
# ✅ USED: api/routes/messier.py
MESSIER_CACHE_TTL_SECONDS=300 # TTL pro Cache-Eintrag (Sekunden, 0=deaktiviert)
MESSIER_CACHE_BUCKET_MINUTES=5 # UTC-Zeitbucket für wiederholte Messier-Requests
MESSIER_CACHE_MAX_ENTRIES=256 # Maximale Anzahl In-Memory-Cache-Einträge
# MESSIER_CATALOG_URL=http://www.messier.seds.org/xtra/similar/dataRASC.txt # Katalog-URL
# ===== Smart Interpolation ===== [CODE]
# ✅ USED: config/interpolation_config.py, api/smart_interpolation.py
# Feature Flags
ENABLE_SMART_INTERPOLATION=true # Smart Interpolation aktivieren
ENABLE_ON_DEMAND_COMPUTATION=true # On-Demand Berechnung bei Cache-Miss
ENABLE_ASTRONOMICAL_CORRECTIONS=true # Astronomische Korrekturen (Refraktion, etc.)
ENABLE_INTERPOLATION_BACKGROUND_TASKS=true # Hintergrund-Precompute nach Cache-Miss
# Strategie
INTERPOLATION_STRATEGY=smart_interpolation # nearest_bucket | smart_interpolation | on_demand_only
ASTRONOMICAL_CORRECTION_LEVEL=basic # none | basic | full
# Performance
INTERPOLATION_MAX_COMPUTATION_TIME=30.0 # Max Berechnungszeit (Sekunden)
INTERPOLATION_MAX_FUTURE_HOURS=2.0 # Wie weit in die Zukunft interpoliert wird
INTERPOLATION_CACHE_TTL=86400 # Cache TTL (Sekunden, default: 24h)
INTERPOLATION_MAX_COMETS=1000 # Max Kometen bei Interpolations-Berechnung
# Qualität
INTERPOLATION_MIN_QUALITY_THRESHOLD=0.5 # Mindestqualität (0.0-1.0)
INTERPOLATION_MAX_ERROR_DEGREES=2.0 # Max erlaubter Interpolationsfehler (Grad)
# Retry & Fehlerbehandlung
INTERPOLATION_ENABLE_RETRY=true # Automatische Wiederholung bei Fehler
INTERPOLATION_MAX_RETRIES=2 # Max Wiederholungsversuche
INTERPOLATION_RETRY_DELAY=1.0 # Wartezeit zwischen Versuchen (Sekunden)
# Monitoring & Logging
INTERPOLATION_ENABLE_METRICS=true # Performance-Metriken sammeln
INTERPOLATION_DEBUG_LOGGING=false # Detailliertes Debug-Logging
INTERPOLATION_LOG_PERFORMANCE_WARNINGS=true # Warnung bei langsamer Interpolation
# Gradual Rollout
INTERPOLATION_ENABLED_PERCENTAGE=100.0 # 0-100% der Benutzer erhalten Interpolation
# INTERPOLATION_ENABLED_USER_IDS=user1,user2 # Optional: nur bestimmte User-IDs
# ===== On-Demand Computation ===== [CODE]
# ✅ USED: api/on_demand_computation.py
ON_DEMAND_COMPUTATION_ENABLED=true # On-Demand Berechnung global aktivieren
ON_DEMAND_CACHE_TTL=86400 # Cache TTL (Sekunden, default: 24h)
ON_DEMAND_MAX_COMPUTATION_TIME=30.0 # Max Berechnungszeit bis Timeout (Sekunden)
ON_DEMAND_TRIGGER_BACKGROUND=true # Hintergrund-Task nach On-Demand-Berechnung auslösen
ON_DEMAND_MAX_MAGNITUDE_ASTEROIDS=20.0 # Magnitude-Limit für On-Demand Asteroiden
ON_DEMAND_MAX_COMETS=1000 # Max Kometen bei On-Demand Berechnung
ON_DEMAND_RETRY_FAILED=true # Fehlgeschlagene Berechnungen wiederholen
ON_DEMAND_MAX_RETRIES=2 # Max Wiederholungsversuche
# ===== FTP Mirror (Worker-seitige Nacht-Updates) ===== [CODE]
# ✅ USED: nightly_data_updater.py
# Worker hosts: FTP_DISABLED=false (default) — Worker laden MPC-Daten via FTP
# Main host: FTP_DISABLED=true — Hauptserver lädt direkt von MPC
FTP_DISABLED=false
FTP_SERVER=ftp.download.example.org
FTP_PORT=21
FTP_SCHEME=ftp # ftp oder ftps
FTP_USER=your_ftp_username
FTP_PASSWD=your_ftp_password
FTP_UPLOAD=/data/cache # Remote-Pfad auf dem FTP-Server
# [FUTURE] Noch nicht implementiert
# ENABLE_SHARED_RESOURCES=true
# SHARED_RESOURCES_CACHE_TTL=3600
# WORKER_ENABLE_PERFORMANCE_METRICS=true
# WORKER_HEALTH_CHECK_INTERVAL=30
# WORKER_AUTO_RESTART_ON_FAILURE=true
# PRECOMPUTE_QUEUE_TYPE=classic
# ON_DEMAND_QUEUE_TYPE=quorum