Stash-Box ist ein Open-Source-Videoindexierungs- und Metadaten-API-Server für Pornos, der von Stash App entwickelt wurde. Der Zweck von stash-box besteht darin, eine von der Community betriebene Datenbank mit Porno-Metadaten bereitzustellen, ähnlich wie MusicBrainz es für Musik tut. Die Übermittlung und Bearbeitung von Metadaten sollte den gleichen Grundsätzen wie bei MusicBrainz folgen. Erfahren Sie hier mehr. Durch die Installation von Stash-box wird eine leere Datenbank erstellt, die Sie füllen können.
Wenn Sie ein Stash-Benutzer sind, müssen Sie stash-box nicht installieren. Die Stash-Community verfügt über einen Server mit vielen Titeln, von denen Sie Daten abrufen können. Die Anmeldeinformationen finden Sie in unserem Leitfaden zum Zugriff auf StashDB.
Eine docker-compose
Datei für die Produktionsbereitstellung finden Sie hier. Sie können Traefik weglassen, wenn Sie keinen Reverse-Proxy benötigen.
Wenn Sie PostgreSQL bereits installiert haben, können Sie stash-box separat über Docker Hub installieren.
Stash-Box unterstützt macOS, Windows und Linux. Releases für Windows und Linux finden Sie hier.
make
aus, um die Anwendung zu erstellen.stash-box-config.yml
im aktuellen Verzeichnis). In diesem Fall wird eine Standardkonfigurationsdatei mit einer Standard-PostgreSQL-Verbindungszeichenfolge ( postgres@localhost/stash-box?sslmode=disable
) generiert. Sie können die Verbindungszeichenfolge nach Bedarf anpassen.CREATE EXTENSION pg_trgm; CREATE EXTENSION pgcrypto;
von einem Superuser, bevor Sie Stash-box erneut ausführen. Wenn das Schema nicht vorhanden ist, wird es in der Datenbank erstellt.sslmode
-Parameter ist hier dokumentiert. Verwenden Sie sslmode=disable
, um SSL nicht für die Datenbankverbindung zu verwenden. Der Standardwert ist require
. Wenn stash-box das zweite Mal ausgeführt wird, führt stash-box die Schemamigrationen aus, um die erforderlichen Tabellen zu erstellen. Außerdem wird ein root
-Benutzer mit einem zufälligen Passwort und einem API-Schlüssel generiert. Diese Anmeldeinformationen werden einmal auf stdout gedruckt und nicht protokolliert. Das System generiert den Root-Benutzer beim Start neu, wenn er nicht vorhanden ist. Sie können das System zwingen, einen neuen Root-Benutzer zu erstellen, indem Sie die Root-Benutzerzeile aus der Datenbank löschen und Stash-box neu starten. Sie müssen die Konsolenausgabe beim ersten erfolgreichen Start der ausführbaren StashDB-Datei mit Ihrem Admin-Benutzer erfassen. Andernfalls müssen Sie Postgres erlauben, die Datenbank neu zu erstellen, bevor ein neuer root
Benutzer erneut gepostet wird.
Stash-Box ist ein Tool mit Befehlszeilenoptionen, um es einfacher zu machen. Um zu sehen, welche Optionen verfügbar sind, führen Sie stash-box --help
in Ihrem Terminal aus.
Hier ist ein Beispiel, wie Sie stash-box lokal auf Port 80 ausführen können:
stash-box --host 127.0.0.1 --port 80
Hinweis: Dieser Befehl sollte unter OSX/Linux funktionieren.
Wenn Sie stash-box zum ersten Mal starten, wird in Ihrem aktuellen Arbeitsverzeichnis eine Konfigurationsdatei namens stash-box-config.yml
generiert. Diese Datei enthält Standardeinstellungen für stash-box, einschließlich:
0.0.0.0
9998
Sie können diese Standardeinstellungen bei Bedarf ändern. Wenn Sie beispielsweise den GraphQL-Playground und domänenübergreifende Cookies deaktivieren möchten, können Sie is_production
auf true
setzen.
Es gibt zwei Möglichkeiten, einen Benutzer in Stash-Box zu authentifizieren: eine Sitzung oder einen API-Schlüssel.
Sitzungsbasierte Authentifizierung: Um sich anzumelden, senden Sie eine Anfrage an /login
mit dem username
und password
im Klartext als Formularwerte. Bei der sitzungsbasierten Authentifizierung wird ein Cookie gesetzt, das für alle nachfolgenden Anfragen erforderlich ist. Um sich abzumelden, senden Sie eine Anfrage an /logout
.
API-Schlüsselauthentifizierung: Um einen API-Schlüssel zu verwenden, legen Sie den ApiKey
Header auf den API-Schlüsselwert des Benutzers fest.
Schlüssel | Standard | Beschreibung |
---|---|---|
title | Stash-Box | Titel der Instanz, der im Seitentitel verwendet wird. |
require_invite | true | Wenn „true“, müssen Benutzer einen Einladungsschlüssel eingeben, der von vorhandenen Benutzern generiert wird, um ein neues Konto zu erstellen. |
require_activation | false | Wenn „true“, müssen Benutzer ihre E-Mail-Adresse bestätigen, bevor sie ein Konto erstellen. Erfordert die Festlegung von email_from , email_host und host_url . |
activation_expiry | 7200 (2 Stunden) | Die Zeit (in Sekunden), nach der ein Aktivierungsschlüssel (der dem Benutzer zur E-Mail-Verifizierung oder zum Zurücksetzen des Passworts per E-Mail zugesandt wird) abläuft. |
email_cooldown | 300 (5 Minuten) | Die Zeit (in Sekunden), die ein Benutzer warten muss, bevor er eine Aktivierungs- oder Passwort-Zurücksetzungsanfrage für eine bestimmte E-Mail-Adresse sendet. |
default_user_roles | READ , VOTE , EDIT | Die Rollen, die neuen Benutzern bei der Registrierung zugewiesen werden. Dieses Feld muss als Yaml-Array ausgedrückt werden. |
guidelines_url | (keiner) | URL zum Link zu einer Reihe von Richtlinien für Benutzer, die Änderungen vornehmen. Sollte die Form https://hostname.com haben. |
vote_promotion_threshold | (keiner) | Anzahl der genehmigten Änderungen, bevor einem Benutzer automatisch die VOTE Rolle zugewiesen wird. Zum Deaktivieren leer lassen. |
vote_application_threshold | 3 | Anzahl der gleichen Stimmen, die für die sofortige Anwendung einer Änderung erforderlich sind. Auf Null setzen, um die automatische Anwendung zu deaktivieren. |
voting_period | 345600 | Zeit in Sekunden, bevor ein Abstimmungszeitraum geschlossen wird. |
min_destructive_voting_period | 172800 | Mindestzeit in Sekunden, die vergehen muss, bevor eine destruktive Bearbeitung bei ausreichend positiven Stimmen sofort angewendet werden kann. |
vote_cron_interval | 5m | Zeit zwischen den Läufen zum Schließen von Bearbeitungen, deren Abstimmungsperioden beendet sind. |
email_host | (keiner) | Adresse des SMTP-Servers. Erforderlich zum Versenden von E-Mails zu Aktivierungs- und Wiederherstellungszwecken. |
email_port | 25 | Port des SMTP-Servers. Es wird nur STARTTLS unterstützt. Direkte TLS-Verbindungen werden nicht unterstützt. |
email_user | (keiner) | Benutzername für den SMTP-Server. Optional. |
email_password | (keiner) | Passwort für den SMTP-Server. Optional. |
email_from | (keiner) | E-Mail-Adresse, von der aus E-Mails gesendet werden sollen. |
host_url | (keiner) | Basis-URL für den Server. Wird beim Versenden von E-Mails verwendet. Sollte die Form https://hostname.com haben. |
image_location | (keiner) | Pfad zum Speichern von Bildern für die lokale Bildspeicherung. Wenn dies beim Erstellen von Nicht-URL-Bildern nicht festgelegt ist, wird ein Fehler angezeigt. |
image_backend | ( file ) | Speicherlösung für Bilder. Kann entweder auf file oder s3 eingestellt werden. |
userLogFile | (keiner) | Pfad zur Benutzerprotokolldatei, die Benutzervorgänge protokolliert. Wenn nicht festgelegt, werden diese an stderr ausgegeben. |
s3.endpoint | (keiner) | Hostname für den S3-Endpunkt, der für die Bildspeicherung verwendet wird. |
s3.base_url | (keiner) | Basis-URL für den Zugriff auf Bilder in S3. Sollte die Form https://hostname.com haben. |
s3.bucket | (keiner) | Name des S3-Buckets, der zum Speichern von Bildern verwendet wird. |
s3.access_key | (keiner) | Zugriffsschlüssel, der zur Authentifizierung verwendet wird. |
s3.secret | (keiner) | Geheimer Zugriffsschlüssel, der zur Authentifizierung verwendet wird. |
s3.max_dimension | (keiner) | Wenn diese Option festgelegt ist, wird für jedes Bild, dessen Abmessungen diesen Wert überschreiten, eine Kopie mit geänderter Größe erstellt. Diese Kopie wird anstelle des Originals zugestellt. |
s3.upload_headers | (keiner) | Eine Karte mit Headern, die mit jeder Upload-Anfrage gesendet werden sollen. Beispielsweise erfordert DigitalOcean, dass der x-amz-acl Header auf public-read gesetzt ist, andernfalls werden die hochgeladenen Bilder nicht verfügbar gemacht. |
phash_distance | 0 | Bestimmt, welcher binäre Abstand bei der Abfrage mit einem pHash-Fingerabdruck als Übereinstimmung gilt. Die Verwendung von mehr als 8 wird nicht empfohlen und kann zu einer großen Anzahl falsch positiver Ergebnisse führen. Hinweis : Die Erweiterung pg-spgist_hamming muss installiert sein, um den Distanzabgleich zu verwenden, andernfalls erhalten Sie Fehler. |
favicon_path | (keiner) | Speicherort, an dem Favicons für verlinkte Websites gespeichert werden sollen. Zum Deaktivieren leer lassen. |
draft_time_limit | (24h) | Zeit in Sekunden, bevor ein Entwurf gelöscht wird. |
profiler_port | 0 | Port, an dem die pprof-Ausgabe bereitgestellt werden soll. Lassen Sie es weg, um es vollständig zu deaktivieren. |
postgres.max_open_conns | (0) | Maximale Anzahl gleichzeitig geöffneter Verbindungen zur Datenbank. |
postgres.max_idle_conns | (0) | Maximale Anzahl gleichzeitiger inaktiver Datenbankverbindungen. |
postgres.conn_max_lifetime | (0) | Maximale Lebensdauer in Minuten, bevor eine Verbindung freigegeben wird. |
Stash-box kann aus Gründen der Sicherheit vorzugsweise über HTTPS ausgeführt werden, erfordert jedoch einige Einstellungen. Um dies einzurichten, müssen Sie ein SSL-Zertifikat und ein Schlüsselpaar generieren. Oder verwenden Sie einen TLS-terminierenden Proxy Ihrer Wahl, z. B. Traefik, Nginx (nicht unterstützt) oder Caddy Server (nicht unterstützt).
Hier ist ein Beispiel, wie Sie dies mit OpenSSL tun können:
openssl req -x509 -newkey rsa:4096 -sha256 -days 7300 -nodes -keyout stash-box.key -out stash-box.crt -extensions san -config <(echo "[req]"; echo distinguished_name=req; echo "[san]"; echo subjectAltName=DNS:stash-box.server,IP:127.0.0.1) -subj /CN=stash-box.server
Möglicherweise müssen Sie den Befehl für Ihr spezifisches Setup ändern. Weitere Informationen zum Erstellen eines selbstsignierten Zertifikats mit OpenSSL finden Sie hier.
Sobald Sie das Zertifikat und das Schlüsselpaar generiert haben, stellen Sie sicher, dass sie stash-box.crt
bzw. stash-box.key
heißen, und legen Sie sie im selben Verzeichnis wie stash-box ab. Wenn Stash-Box diese Dateien erkennt, verwendet es HTTPS anstelle von HTTP.
Wenn Sie den Distanzabgleich für pHashes in der Stash-Box aktivieren möchten, müssen Sie die Postgres-Erweiterung pg-spgist_hamming installieren.
Die empfohlene Methode hierfür ist die Verwendung des Docker-Images. Sie können es jedoch auch manuell installieren, indem Sie den Build-Anweisungen im pg-spgist_hamming-Repository folgen.
Angenommen, Sie installieren die Erweiterung, nachdem Sie die Migrationen ausgeführt haben. In diesem Fall müssen Sie Migration Nr. 14 manuell ausführen, um die Erweiterung zu installieren und den Index hinzuzufügen. Wenn Sie dies nicht möchten, können Sie die Datenbank löschen. Die Migrationen werden dann ausgeführt, wenn Sie stash-box das nächste Mal starten.
make lint
laufen.make generate
– Go GraphQL-Dateien generieren. Dieser Befehl sollte ausgeführt werden, wenn sich das GraphQL-Schema geändert hat.make ui
– Erstellt die Benutzeroberfläche.make pre-ui
– Frontend-Abhängigkeiten herunterladenmake build
– Erstellt die Binärdateimake test
– Führt die Unit-Tests ausmake it
– Führt die Unit- und Integrationstests ausmake lint
– Lassen Sie den Lint laufenmake fmt
– Formatiert und richtet Leerzeichen aus Hinweis: Die Integrationstests werden standardmäßig für eine temporäre SQLite3-Datenbank ausgeführt. Sie können auf einem Postgres-Server ausgeführt werden, indem die Umgebungsvariable POSTGRES_DB
auf die Postgres-Verbindungszeichenfolge gesetzt wird. Zum Beispiel: postgres@localhost/stash-box-test?sslmode=disable
. Beachten Sie, dass die Integrationstests alle Tabellen vor und nach den Tests löschen.
Um das Frontend im Entwicklungsmodus auszuführen, führen Sie yarn start
aus dem Frontend-Verzeichnis aus.
Beim Entwickeln kann der API-Schlüssel in frontend/.env.development.local
festgelegt werden, um eine Anmeldung zu vermeiden.
Wenn is_production
auf dem Server aktiviert ist, ist dies die einzige Möglichkeit zur Autorisierung in der Frontend-Entwicklungsumgebung. Wenn der Server https verwendet oder auf einem benutzerdefinierten Port läuft, muss dies ebenfalls in .env.development.local
konfiguriert werden.
Beispiele finden Sie frontend/.env.development.local.shadow
.
Sie können auf den GraphQL-Playground unter host:port/playground
zugreifen und die GraphQL-Schnittstelle finden Sie unter host:port/graphql
. Um Abfragen auszuführen, fügen Sie einen Header mit Ihrem API-Schlüssel hinzu: {"APIKey":"<API_KEY>"}
. Den API-Schlüssel finden Sie auf Ihrer Benutzerseite in stash-box.
make generate
aus, um generierte Dateien zu erstellen, wenn diese geändert wurden.make ui build
aus, um die ausführbare Datei für Ihre aktuelle Plattform zu erstellen.Ich habe eine Frage, die hier beantwortet werden muss.