Stash-box est un serveur API d'indexation vidéo et de métadonnées open source pour le porno développé par Stash App. Le but de stash-box est de fournir une base de données communautaire de métadonnées pornographiques, similaire à ce que MusicBrainz fait pour la musique. La soumission et l'édition des métadonnées doivent suivre les mêmes principes que MusicBrainz. Apprenez-en davantage ici. L'installation de Stash-box créera une base de données vide que vous pourrez remplir.
Si vous êtes un utilisateur de Stash, vous n'avez pas besoin d'installer stash-box. La communauté Stash dispose d'un serveur avec de nombreux titres à partir desquels vous pouvez extraire des données. Vous pouvez obtenir les informations de connexion dans notre guide d'accès à StashDB.
Vous pouvez trouver un fichier docker-compose
pour le déploiement en production ici. Vous pouvez omettre Traefik si vous n'avez pas besoin d'un proxy inverse.
Si PostgreSQL est déjà installé, vous pouvez installer stash-box seul à partir de Docker Hub.
Stash-box prend en charge macOS, Windows et Linux. Les versions pour Windows et Linux peuvent être trouvées ici.
make
pour créer l'application.stash-box-config.yml
dans le répertoire actuel). Dans ce cas, il générera un fichier de configuration par défaut avec une chaîne de connexion PostgreSQL par défaut ( postgres@localhost/stash-box?sslmode=disable
). Vous pouvez ajuster la chaîne de connexion selon vos besoins.CREATE EXTENSION pg_trgm; CREATE EXTENSION pgcrypto;
par un superutilisateur avant de réexécuter Stash-box. Si le schéma n'est pas présent, il sera créé dans la base de données.sslmode
est documenté ici. Utilisez sslmode=disable
pour ne pas utiliser SSL pour la connexion à la base de données. La valeur par défaut est require
. La deuxième fois que stash-box est exécuté, stash-box exécutera les migrations de schéma pour créer les tables requises. Il générera également un utilisateur root
avec un mot de passe aléatoire et une clé API. Ces informations d'identification sont imprimées une fois sur la sortie standard et ne sont pas enregistrées. Le système régénérera l'utilisateur root au démarrage s'il n'existe pas. Vous pouvez forcer le système à créer un nouvel utilisateur root en supprimant la ligne de l'utilisateur root de la base de données et en redémarrant Stash-box. Vous devrez capturer la sortie de la console avec votre utilisateur administrateur lors du premier démarrage réussi de l'exécutable StashDB. Sinon, vous devrez autoriser Postgres à recréer la base de données avant de republier un nouvel utilisateur root
.
Stash-box est un outil avec des options de ligne de commande pour faciliter les choses. Pour voir quelles options sont disponibles, exécutez stash-box --help
dans votre terminal.
Voici un exemple de la façon dont vous pouvez exécuter stash-box localement sur le port 80 :
stash-box --host 127.0.0.1 --port 80
Remarque : Cette commande devrait fonctionner sous OSX/Linux.
Lorsque vous démarrez stash-box pour la première fois, il génère un fichier de configuration appelé stash-box-config.yml
dans votre répertoire de travail actuel. Ce fichier contient les paramètres par défaut de stash-box, notamment :
0.0.0.0
9998
Vous pouvez modifier ces valeurs par défaut si nécessaire. Par exemple, si vous souhaitez désactiver le terrain de jeu GraphQL et les cookies inter-domaines, vous pouvez définir is_production
sur true
.
Il existe deux manières d'authentifier un utilisateur dans Stash-box : une session ou une clé API.
Authentification basée sur la session : pour vous connecter, envoyez une demande à /login
avec le username
et password
en texte brut comme valeurs de formulaire. L'authentification basée sur la session définira un cookie requis pour toutes les demandes ultérieures. Pour vous déconnecter, envoyez une demande à /logout
.
Authentification par clé API : pour utiliser une clé API, définissez l'en-tête ApiKey
sur la valeur de la clé API de l'utilisateur.
Clé | Défaut | Description |
---|---|---|
title | Stash-Box | Titre de l'instance, utilisé dans le titre de la page. |
require_invite | true | Si c'est vrai, les utilisateurs doivent saisir une clé d'invitation, générée par les utilisateurs existants pour créer un nouveau compte. |
require_activation | false | Si cela est vrai, les utilisateurs doivent vérifier leur adresse e-mail avant de créer un compte. Nécessite que email_from , email_host et host_url soient définis. |
activation_expiry | 7200 (2 heures) | Le temps - en secondes - après lequel une clé d'activation (envoyée par courrier électronique à l'utilisateur à des fins de vérification par courrier électronique ou de réinitialisation du mot de passe) expire. |
email_cooldown | 300 (5 minutes) | Le temps - en secondes - qu'un utilisateur doit attendre avant de soumettre une demande d'activation ou de réinitialisation de mot de passe pour une adresse e-mail spécifique. |
default_user_roles | READ , VOTE , EDIT | Les rôles attribués aux nouveaux utilisateurs lors de leur inscription. Ce champ doit être exprimé sous forme de tableau yaml. |
guidelines_url | (aucun) | URL permettant de créer un lien vers un ensemble de directives destinées aux utilisateurs contribuant aux modifications. Doit être sous la forme de https://hostname.com . |
vote_promotion_threshold | (aucun) | Nombre de modifications approuvées avant qu'un utilisateur ne se voit automatiquement attribuer le rôle VOTE . Laissez vide pour désactiver. |
vote_application_threshold | 3 | Nombre de votes identiques requis pour l'application immédiate d'une modification. Réglez-le sur zéro pour désactiver l’application automatique. |
voting_period | 345600 | Temps, en secondes, avant la clôture d'une période de vote. |
min_destructive_voting_period | 172800 | Temps minimum, en secondes, qui doit s'écouler avant qu'une modification destructrice puisse être immédiatement appliquée avec suffisamment de votes positifs. |
vote_cron_interval | 5m | Délai entre les exécutions pour clôturer les modifications dont les périodes de vote sont terminées. |
email_host | (aucun) | Adresse du serveur SMTP. Nécessaire pour envoyer des e-mails à des fins d’activation et de récupération. |
email_port | 25 | Port du serveur SMTP. Seul STARTTLS est pris en charge. Les connexions TLS directes ne sont pas prises en charge. |
email_user | (aucun) | Nom d'utilisateur pour le serveur SMTP. Facultatif. |
email_password | (aucun) | Mot de passe du serveur SMTP. Facultatif. |
email_from | (aucun) | Adresse e-mail à partir de laquelle envoyer des e-mails. |
host_url | (aucun) | URL de base du serveur. Utilisé lors de l'envoi d'e-mails. Doit être sous la forme de https://hostname.com . |
image_location | (aucun) | Chemin d'accès pour stocker les images, pour le stockage local des images. Une erreur s'affichera si cela n'est pas défini lors de la création d'images non URL. |
image_backend | ( file ) | Solution de stockage d'images. Peut être défini sur file ou s3 . |
userLogFile | (aucun) | Chemin d'accès au fichier journal utilisateur, qui enregistre les opérations utilisateur. S’ils ne sont pas définis, ceux-ci seront envoyés vers stderr. |
s3.endpoint | (aucun) | Nom d'hôte du point de terminaison s3 utilisé pour le stockage des images. |
s3.base_url | (aucun) | URL de base pour accéder aux images dans S3. Doit être sous la forme de https://hostname.com . |
s3.bucket | (aucun) | Nom du compartiment S3 utilisé pour stocker les images. |
s3.access_key | (aucun) | Clé d'accès utilisée pour l'authentification. |
s3.secret | (aucun) | Clé d'accès secrète utilisée pour l'authentification. |
s3.max_dimension | (aucun) | Si cette option est définie, une copie redimensionnée sera créée pour toute image dont les dimensions dépassent ce nombre. Cette copie sera signifiée à la place de l'original. |
s3.upload_headers | (aucun) | Une carte des en-têtes à envoyer avec chaque demande de téléchargement. Par exemple, DigitalOcean nécessite que l'en-tête x-amz-acl soit défini sur public-read , sinon il ne rend pas disponibles les images téléchargées. |
phash_distance | 0 | Détermine quelle distance binaire est considérée comme une correspondance lors d’une requête avec une empreinte pHash. En utiliser plus de 8 n’est pas recommandé et peut conduire à un grand nombre de faux positifs. Remarque : L'extension pg-spgist_hamming doit être installée pour utiliser la correspondance de distance, sinon vous obtiendrez des erreurs. |
favicon_path | (aucun) | Emplacement où les favicons des sites liés doivent être stockés. Laissez vide pour désactiver. |
draft_time_limit | (24h) | Temps, en secondes, avant la suppression d'un brouillon. |
profiler_port | 0 | Port sur lequel servir la sortie pprof. Omettre de désactiver complètement. |
postgres.max_open_conns | (0) | Nombre maximum de connexions ouvertes simultanées à la base de données. |
postgres.max_idle_conns | (0) | Nombre maximum de connexions simultanées à la base de données inactives. |
postgres.conn_max_lifetime | (0) | Durée de vie maximale en minutes avant la libération d'une connexion. |
Stash-box est exécutable, de préférence via HTTPS, pour plus de sécurité, mais nécessite une certaine configuration. Vous devrez générer un certificat SSL et une paire de clés pour configurer cela. Ou utilisez un proxy de terminaison TLS de votre choix, tel que Traefik, Nginx (non pris en charge) ou Caddy Server (non pris en charge)
Voici un exemple de la façon dont vous pouvez procéder avec OpenSSL :
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
Vous devrez peut-être modifier la commande pour votre configuration spécifique. Vous pouvez trouver plus d'informations sur la création d'un certificat auto-signé avec OpenSSL ici.
Une fois que vous avez généré le certificat et la paire de clés, assurez-vous qu'ils s'appellent respectivement stash-box.crt
et stash-box.key
, et placez-les dans le même répertoire que stash-box. Lorsque Stash-box détecte ces fichiers, il utilise HTTPS au lieu de HTTP.
Si vous souhaitez activer la correspondance de distance pour les pHashes dans la boîte de rangement, vous devrez installer l'extension Postgres pg-spgist_hamming.
La méthode recommandée pour ce faire est d'utiliser l'image Docker. Néanmoins, vous pouvez également l'installer manuellement en suivant les instructions de construction dans le référentiel pg-spgist_hamming.
Supposons que vous installiez l'extension après avoir exécuté les migrations. Dans ce cas, vous devrez exécuter la migration n°14 manuellement pour installer l'extension et ajouter l'index. Si vous ne souhaitez pas faire cela, vous pouvez effacer la base de données et les migrations s'exécuteront au prochain démarrage de stash-box.
make lint
.make generate
- Génère des fichiers Go GraphQL. Cette commande doit être exécutée si le schéma GraphQL a changé.make ui
- Construit l'interface utilisateur.make pre-ui
- Télécharger les dépendances frontendmake build
- Construit le binairemake test
- Exécute les tests unitairesmake it
- Exécute les tests unitaires et d'intégrationmake lint
- Exécuter le lintermake fmt
- Formate et aligne les espaces Remarque : les tests d'intégration s'exécutent par défaut sur une base de données temporaire SQLite3. Ils peuvent être exécutés sur un serveur Postgres en définissant la variable d'environnement POSTGRES_DB
sur la chaîne de connexion Postgres. Par exemple : postgres@localhost/stash-box-test?sslmode=disable
. Sachez que les tests d'intégration suppriment toutes les tables avant et après les tests.
Pour exécuter le frontend en mode développement, exécutez yarn start
à partir du répertoire frontend.
Lors du développement, la clé API peut être définie dans frontend/.env.development.local
pour éviter d'avoir à se connecter.
Lorsque is_production
est activé sur le serveur, c'est le seul moyen d'autoriser dans l'environnement de développement frontend. Si le serveur utilise https ou s'exécute sur un port personnalisé, cela doit également être configuré dans .env.development.local
.
Voir frontend/.env.development.local.shadow
pour des exemples.
Vous pouvez accéder au terrain de jeu GraphQL à host:port/playground
, et l'interface GraphQL se trouve à host:port/graphql
. Pour exécuter des requêtes, ajoutez un en-tête avec votre clé API : {"APIKey":"<API_KEY>"}
. La clé API se trouve sur votre page utilisateur dans Stash-Box.
make generate
pour créer les fichiers générés s'ils ont été modifiés.make ui build
pour créer l'exécutable pour votre plate-forme actuelle.J'ai une question à laquelle il faut répondre ici.