<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Selbst-Hosting on Seurch Dokumentation</title><link>https://docs.seurch.eu/de/self-hosting/</link><description>Recent content in Selbst-Hosting on Seurch Dokumentation</description><generator>Hugo</generator><language>de</language><atom:link href="https://docs.seurch.eu/de/self-hosting/index.xml" rel="self" type="application/rss+xml"/><item><title>Voraussetzungen</title><link>https://docs.seurch.eu/de/self-hosting/requirements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/requirements/</guid><description>&lt;h1 id="voraussetzungen"&gt;Voraussetzungen&lt;a class="anchor" href="#voraussetzungen"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="laufzeitumgebung"&gt;Laufzeitumgebung&lt;a class="anchor" href="#laufzeitumgebung"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Komponente&lt;/th&gt;
					&lt;th&gt;Hinweise&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Eine Container-Laufzeitumgebung&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Docker oder Podman, um das veröffentlichte Image auszuführen.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Die Anwendungsdatenbank. Jedes halbwegs aktuelle PostgreSQL (16+) funktioniert.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Ein Brave Search API-Schlüssel&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Das Minimum für nützliche Ergebnisse; siehe &lt;a href="https://docs.seurch.eu/de/self-hosting/search-providers/"&gt;Suchanbieter&lt;/a&gt;. Das kostenlose Kontingent reicht zum Starten.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Ausgehendes HTTPS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Der Server ruft vorgelagerte Anbieter ab; wenn Sie hinter einer Zulassungsliste sind, sehen Sie die &lt;a href="https://docs.seurch.eu/de/self-hosting/search-providers/#network-allowlist"&gt;Anbieter-Hosts&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Alles andere – Webserver, Bereitstellung statischer Dateien und Kompilierung der Übersetzungskataloge – ist im Image enthalten.&lt;/p&gt;</description></item><item><title>Schnellstart</title><link>https://docs.seurch.eu/de/self-hosting/quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/quick-start/</guid><description>&lt;h1 id="schnellstart"&gt;Schnellstart&lt;a class="anchor" href="#schnellstart"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Der schnellste Weg zu einer laufenden Instanz ist das Docker-Image. Sie benötigen eine PostgreSQL-Datenbank und mindestens einen &lt;a href="https://docs.seurch.eu/de/self-hosting/search-providers/"&gt;Brave Search API-Schlüssel&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="mit-docker"&gt;Mit Docker&lt;a class="anchor" href="#mit-docker"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -p 8000:8000 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;SECRET_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ihr-langer-zufaelliger-schluessel &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres://benutzer:passwort@db-host:5432/seurch &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;ALLOWED_HOSTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;search.example.com &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;BRAVE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ihr-brave-schluessel &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;BRAVE_SUGGEST_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ihr-brave-suggest-schluessel &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -e &lt;span class="nv"&gt;MARGINALIA_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;public &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; seurch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Beim Start:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wendet Datenbank-&lt;strong&gt;Migrationen&lt;/strong&gt; an (kein Vorgang, wenn das Schema aktuell ist).&lt;/li&gt;
&lt;li&gt;Stellt die App mit &lt;strong&gt;gunicorn&lt;/strong&gt; (2 Worker) auf Port &lt;strong&gt;8000&lt;/strong&gt; bereit.&lt;/li&gt;
&lt;li&gt;Stellt eigene statische Dateien über &lt;a href="https://whitenoise.readthedocs.io/"&gt;WhiteNoise&lt;/a&gt; bereit (komprimiert und gehasht), kein separater Webserver oder CDN erforderlich.&lt;/li&gt;
&lt;li&gt;Antwortet auf eine Gesundheitsprüfung unter &lt;strong&gt;&lt;code&gt;/up&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Die Übersetzungskataloge und statischen Dateien werden beim Build kompiliert, sodass nichts weiteres gestartet werden muss.&lt;/p&gt;</description></item><item><title>Konfiguration</title><link>https://docs.seurch.eu/de/self-hosting/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/configuration/</guid><description>&lt;h1 id="konfiguration"&gt;Konfiguration&lt;a class="anchor" href="#konfiguration"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Seurch wird vollständig über &lt;strong&gt;Umgebungsvariablen&lt;/strong&gt; (in der Produktion) oder eine &lt;code&gt;.env&lt;/code&gt;-Datei (in der Entwicklung) konfiguriert. Das Repository enthält eine &lt;code&gt;.env.example&lt;/code&gt;, die jede Variable dokumentiert; diese Seite ist die Referenz.&lt;/p&gt;
&lt;h2 id="kern"&gt;Kern&lt;a class="anchor" href="#kern"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Variable&lt;/th&gt;
					&lt;th&gt;Zweck&lt;/th&gt;
					&lt;th&gt;Hinweise&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;SECRET_KEY&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Django-Geheimschlüssel&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;In der Produktion erforderlich.&lt;/strong&gt; Lang und zufällig.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;DEBUG&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Debug-Modus&lt;/td&gt;
					&lt;td&gt;In der Produktion &lt;strong&gt;&lt;code&gt;False&lt;/code&gt;&lt;/strong&gt; (der Standard) belassen.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ALLOWED_HOSTS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Kommagetrennte Hostnamen, die die App bedient&lt;/td&gt;
					&lt;td&gt;z.B. &lt;code&gt;search.example.com&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;DATABASE_URL&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;PostgreSQL-Verbindungs-URL&lt;/td&gt;
					&lt;td&gt;z.B. &lt;code&gt;postgres://user:pass@host:5432/seurch&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;LOG_LEVEL&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Protokollierungsausführlichkeit&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;DEBUG&lt;/code&gt; / &lt;code&gt;INFO&lt;/code&gt; / &lt;code&gt;WARNING&lt;/code&gt; / &lt;code&gt;ERROR&lt;/code&gt; (Standard &lt;code&gt;INFO&lt;/code&gt;).&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="suchanbieter"&gt;Suchanbieter&lt;a class="anchor" href="#suchanbieter"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Diese Schlüssel bestimmen, welche Suchmaschinen, Medien-Tabs und Wissenskarten verfügbar sind. Ein Anbieter ohne Schlüssel wird einfach ausgeblendet (nicht als defekt angezeigt). Vollständige Details unter &lt;a href="https://docs.seurch.eu/de/self-hosting/search-providers/"&gt;Suchanbieter&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Suchanbieter</title><link>https://docs.seurch.eu/de/self-hosting/search-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/search-providers/</guid><description>&lt;h1 id="suchanbieter"&gt;Suchanbieter&lt;a class="anchor" href="#suchanbieter"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Seurch kombiniert Ergebnisse von mehreren unabhängigen Anbietern. &lt;strong&gt;Welche Tabs und Karten erscheinen, hängt davon ab, welche Schlüssel Sie setzen.&lt;/strong&gt; Ein Anbieter ohne Schlüssel wird ausgeblendet; der betroffene Tab oder die Karte erscheint einfach nicht, anstatt einen Fehler anzuzeigen.&lt;/p&gt;
&lt;p&gt;Alle vorgelagerten Aufrufe erfolgen &lt;strong&gt;serverseitig&lt;/strong&gt;; Schlüssel werden nie an den Browser weitergegeben.&lt;/p&gt;
&lt;p&gt;Diese Seite bietet den &lt;strong&gt;Überblick&lt;/strong&gt; darüber, welcher Schlüssel was aktiviert. Schritt-für-Schritt-Anweisungen zur Anmeldung bei jedem Anbieter finden Sie unter &lt;a href="https://docs.seurch.eu/de/self-hosting/provider-keys/"&gt;API-Schlüssel erhalten&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>API-Schlüssel erhalten</title><link>https://docs.seurch.eu/de/self-hosting/provider-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/provider-keys/</guid><description>&lt;h1 id="api-schlüssel-erhalten"&gt;API-Schlüssel erhalten&lt;a class="anchor" href="#api-schl%c3%bcssel-erhalten"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Schritt-für-Schritt-Anleitungen zum Erhalten des Schlüssels jedes Anbieters. Keiner ist erforderlich, um Seurch zu starten, aber mindestens eine &lt;strong&gt;Web-Suchmaschine&lt;/strong&gt; (Brave ist am einfachsten) wird für nützliche Ergebnisse benötigt. Jeder Anbieter, den Sie überspringen, blendet seinen Tab oder seine Karte einfach aus; unter &lt;a href="https://docs.seurch.eu/de/self-hosting/search-providers/"&gt;Suchanbieter&lt;/a&gt; finden Sie, was jeder aktiviert.&lt;/p&gt;
&lt;p&gt;Sobald Sie einen Schlüssel haben, setzen Sie die entsprechende Umgebungsvariable (siehe &lt;a href="https://docs.seurch.eu/de/self-hosting/configuration/"&gt;Konfiguration&lt;/a&gt;) und starten Sie die App neu.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Alle haben ein &lt;strong&gt;kostenloses Kontingent&lt;/strong&gt;, das für eine persönliche oder kleine Team-Instanz großzügig genug ist; Seurch cached aggressiv und ruft die kostenpflichtigen Karten-APIs nur auf, wenn eine Anfrage tatsächlich übereinstimmt. Die geteilten Schlüssel (&lt;code&gt;public&lt;/code&gt; für Marginalia, anonymes Stack Exchange) benötigen überhaupt keine Anmeldung.&lt;/p&gt;</description></item><item><title>Übersetzung</title><link>https://docs.seurch.eu/de/self-hosting/translation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/translation/</guid><description>&lt;h1 id="übersetzung-libretranslate"&gt;Übersetzung (LibreTranslate)&lt;a class="anchor" href="#%c3%bcbersetzung-libretranslate"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Der &lt;strong&gt;Übersetzen&lt;/strong&gt;-Tab wird von &lt;a href="https://libretranslate.com/"&gt;LibreTranslate&lt;/a&gt; betrieben, einem Open-Source, selbst-hostbaren Maschinenübersetzungsserver. Seurch ruft ihn serverseitig auf; kein Drittanbieter-Übersetzungsdienst ist beteiligt.&lt;/p&gt;
&lt;h2 id="den-tab-aktivieren"&gt;Den Tab aktivieren&lt;a class="anchor" href="#den-tab-aktivieren"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Zeigen Sie Seurch mit &lt;code&gt;LIBRETRANSLATE_URL&lt;/code&gt; auf eine LibreTranslate-Instanz:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;LIBRETRANSLATE_URL=http://libretranslate:5000&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gesetzt&lt;/strong&gt;: Der Übersetzen-Tab (und seine Einstellung) erscheinen mit den Sprachen, die diese Instanz anbietet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nicht gesetzt&lt;/strong&gt;: Der Übersetzen-Tab und seine Einstellung werden vollständig deaktiviert.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="libretranslate-betreiben"&gt;LibreTranslate betreiben&lt;a class="anchor" href="#libretranslate-betreiben"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Der Entwicklungs-Stack startet automatisch ein lokales LibreTranslate (&lt;code&gt;make up&lt;/code&gt; startet eines unter &lt;code&gt;http://localhost:5000&lt;/code&gt;). Für die Produktion betreiben Sie Ihr eigenes, zum Beispiel:&lt;/p&gt;</description></item><item><title>Benutzer &amp; Zugang</title><link>https://docs.seurch.eu/de/self-hosting/users/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/users/</guid><description>&lt;h1 id="benutzer--zugang"&gt;Benutzer &amp;amp; Zugang&lt;a class="anchor" href="#benutzer--zugang"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Seurch ist &lt;strong&gt;nur mit Anmeldung&lt;/strong&gt; zugänglich und hat &lt;strong&gt;keine öffentliche Registrierung&lt;/strong&gt;; als Administrator kontrollieren Sie, wer ein Konto hat. Dies hält eine Instanz privat für Ihre Benutzer.&lt;/p&gt;
&lt;h2 id="konten-erstellen"&gt;Konten erstellen&lt;a class="anchor" href="#konten-erstellen"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Erstellen Sie Benutzer mit Djangos Standard-Verwaltungsbefehl:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; -it &amp;lt;container&amp;gt; python manage.py createsuperuser
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Aus dem Quellcode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make superuser&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;createsuperuser&lt;/code&gt; erstellt ein Admin-Konto; für gewöhnliche Benutzer können Sie diese auf die gleiche Weise erstellen (oder über das Django-Admin, sobald Sie einen Superuser haben). Jedes Konto benötigt einen Benutzernamen und ein Passwort; eine E-Mail ist optional (siehe unten).&lt;/p&gt;</description></item><item><title>API-Schlüssel</title><link>https://docs.seurch.eu/de/self-hosting/api-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/api-keys/</guid><description>&lt;h1 id="api-schlüssel"&gt;API-Schlüssel&lt;a class="anchor" href="#api-schl%c3%bcssel"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Benutzer greifen auf die &lt;a href="https://docs.seurch.eu/de/api/"&gt;öffentliche API&lt;/a&gt; mit benutzerspezifischen API-Schlüsseln zu. Benutzer können ihre eigenen Schlüssel in der Web-UI verwalten (&lt;strong&gt;Einstellungen → API-Schlüssel&lt;/strong&gt;), und Sie können sie über die Befehlszeile verwalten.&lt;/p&gt;
&lt;h2 id="wie-schlüssel-gespeichert-werden"&gt;Wie Schlüssel gespeichert werden&lt;a class="anchor" href="#wie-schl%c3%bcssel-gespeichert-werden"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ein Schlüssel sieht aus wie &lt;code&gt;seurch_sk_&amp;lt;präfix&amp;gt;.&amp;lt;geheimnis&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Das &lt;strong&gt;Präfix&lt;/strong&gt; (8 Zeichen) wird im Klartext für die schnelle Suche gespeichert.&lt;/li&gt;
&lt;li&gt;Nur ein &lt;strong&gt;SHA-256-Hash&lt;/strong&gt; des Geheimnisses wird gespeichert, nie das Geheimnis selbst.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Daher wird der vollständige Wert eines Schlüssels &lt;strong&gt;genau einmal&lt;/strong&gt; angezeigt, bei der Erstellung, und kann danach nicht wiederhergestellt, nur widerrufen werden.&lt;/p&gt;</description></item><item><title>Wartung</title><link>https://docs.seurch.eu/de/self-hosting/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/maintenance/</guid><description>&lt;h1 id="wartung"&gt;Wartung&lt;a class="anchor" href="#wartung"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Seurch benötigt wenig laufende Pflege, aber einige &lt;strong&gt;Verwaltungsbefehle&lt;/strong&gt; halten es ordentlich und aktuell. Führen Sie diese nach einem Zeitplan aus (ein Cron-Job, ein systemd-Timer oder die Funktion für geplante Aufgaben Ihres Orchestrators). Führen Sie jeden im Container aus (&lt;code&gt;docker exec &amp;lt;container&amp;gt; python manage.py …&lt;/code&gt;) oder via &lt;code&gt;make&lt;/code&gt; / &lt;code&gt;uv run&lt;/code&gt; aus dem Quellcode.&lt;/p&gt;
&lt;h2 id="geplante-aufgaben"&gt;Geplante Aufgaben&lt;a class="anchor" href="#geplante-aufgaben"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Befehl&lt;/th&gt;
					&lt;th&gt;Was er tut&lt;/th&gt;
					&lt;th&gt;Empfohlener Zeitplan&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;clear_expired_cache&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Löscht abgelaufene Suchergebnis-Cache-Zeilen&lt;/td&gt;
					&lt;td&gt;Täglich&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;check_provider_health&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Prüft Anbieter mit einem kostenlosen Gesundheits-Endpunkt, damit &lt;code&gt;/status&lt;/code&gt; aktuell bleibt, ohne kostenpflichtiges Kontingent zu verbrauchen&lt;/td&gt;
					&lt;td&gt;Alle ~10 Minuten&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;refresh_currency&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Aktualisiert gecachte Wechselkurse und bereinigt den Sofortantwort-Cache&lt;/td&gt;
					&lt;td&gt;Täglich (optional, aktualisiert sich auch bei Bedarf selbst)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ein Cron-Beispiel:&lt;/p&gt;</description></item><item><title>Produktionshinweise</title><link>https://docs.seurch.eu/de/self-hosting/production/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.seurch.eu/de/self-hosting/production/</guid><description>&lt;h1 id="produktionshinweise"&gt;Produktionshinweise&lt;a class="anchor" href="#produktionshinweise"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Einige wichtige Punkte, wenn Sie Seurch für echte Benutzer betreiben.&lt;/p&gt;
&lt;h2 id="das-image"&gt;Das Image&lt;a class="anchor" href="#das-image"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Stellt die App mit &lt;strong&gt;gunicorn&lt;/strong&gt; (2 Worker) auf Port &lt;strong&gt;8000&lt;/strong&gt; bereit.&lt;/li&gt;
&lt;li&gt;Stellt eigene statische Dateien über &lt;a href="https://whitenoise.readthedocs.io/"&gt;WhiteNoise&lt;/a&gt; bereit, komprimiert und gehasht, sodass Sie keinen separaten statischen Dateiserver oder CDN benötigen.&lt;/li&gt;
&lt;li&gt;Kompiliert Übersetzungskataloge und sammelt statische Dateien &lt;strong&gt;zur Build-Zeit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Führt Datenbank-&lt;strong&gt;Migrationen beim Start&lt;/strong&gt; aus.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="reverse-proxy-und-tls"&gt;Reverse-Proxy und TLS&lt;a class="anchor" href="#reverse-proxy-und-tls"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stellen Sie einen TLS-terminierenden Reverse-Proxy davor (Caddy, nginx, Traefik, …) und leiten Sie an Port 8000 weiter. Setzen Sie:&lt;/p&gt;</description></item></channel></rss>