Stash-box es un servidor API de metadatos e indexación de videos de código abierto para pornografía desarrollado por Stash App. El propósito de stash-box es proporcionar una base de datos de metadatos pornográfica impulsada por la comunidad, similar a lo que MusicBrainz hace con la música. El envío y edición de metadatos debe seguir los mismos principios que MusicBrainz. Obtenga más información aquí. La instalación de Stash-box creará una base de datos vacía para que la completes.
Si eres usuario de Stash, no necesitas instalar stash-box. La comunidad Stash tiene un servidor con muchos títulos de los que puedes extraer datos. Puede obtener la información de inicio de sesión en nuestra guía para acceder a StashDB.
Puede encontrar un archivo docker-compose
para implementación en producción aquí. Puede omitir Traefik si no necesita un proxy inverso.
Si ya tiene instalado PostgreSQL, puede instalar stash-box por sí solo desde Docker Hub.
Stash-box es compatible con macOS, Windows y Linux. Las versiones para Windows y Linux se pueden encontrar aquí.
make
para compilar la aplicación.stash-box-config.yml
en el directorio actual). En ese caso, generará un archivo de configuración predeterminado con una cadena de conexión PostgreSQL predeterminada ( postgres@localhost/stash-box?sslmode=disable
). Puede ajustar la cadena de conexión según sea necesario.CREATE EXTENSION pg_trgm; CREATE EXTENSION pgcrypto;
por un superusuario antes de volver a ejecutar Stash-box. Si el esquema no está presente, se creará dentro de la base de datos.sslmode
está documentado aquí. Utilice sslmode=disable
para no utilizar SSL para la conexión de la base de datos. El valor predeterminado es require
. La segunda vez que se ejecuta stash-box, stash-box ejecutará las migraciones de esquema para crear las tablas necesarias. También generará un usuario root
con una contraseña aleatoria y una clave API. Estas credenciales se imprimen una vez en la salida estándar y no se registran. El sistema regenerará el usuario root al inicio si no existe. Puede forzar al sistema a crear un nuevo usuario raíz eliminando la fila del usuario raíz de la base de datos y reiniciando Stash-box. Deberá capturar la salida de la consola con su usuario administrador en el primer inicio exitoso del ejecutable de StashDB. De lo contrario, deberá permitir que Postgres vuelva a crear la base de datos antes de que vuelva a publicar un nuevo usuario root
.
Stash-box es una herramienta con opciones de línea de comando para hacerlo más fácil. Para ver qué opciones están disponibles, ejecute stash-box --help
en su terminal.
A continuación se muestra un ejemplo de cómo puede ejecutar stash-box localmente en el puerto 80:
stash-box --host 127.0.0.1 --port 80
Nota: Este comando debería funcionar en OSX/Linux.
Cuando inicia stash-box por primera vez, genera un archivo de configuración llamado stash-box-config.yml
en su directorio de trabajo actual. Este archivo contiene configuraciones predeterminadas para stash-box, que incluyen:
0.0.0.0
9998
Puede cambiar estos valores predeterminados si es necesario. Por ejemplo, si desea deshabilitar el área de juegos GraphQL y las cookies entre dominios, puede configurar is_production
en true
.
Hay dos formas de autenticar a un usuario en Stash-box: una sesión o una clave API.
Autenticación basada en sesión: para iniciar sesión, envíe una solicitud a /login
con el username
y password
en texto sin formato como valores del formulario. La autenticación basada en sesión establecerá una cookie que será necesaria para todas las solicitudes posteriores. Para cerrar sesión, envíe una solicitud a /logout
.
Autenticación de clave API: para utilizar una clave API, establezca el encabezado ApiKey
en el valor de la clave API del usuario.
Llave | Por defecto | Descripción |
---|---|---|
title | Stash-Box | Título de la instancia, utilizado en el título de la página. |
require_invite | true | Si es verdadero, los usuarios deben ingresar una clave de invitación, generada por los usuarios existentes, para crear una nueva cuenta. |
require_activation | false | Si es verdadero, los usuarios deben verificar su dirección de correo electrónico antes de crear una cuenta. Requiere que se configuren email_from , email_host y host_url . |
activation_expiry | 7200 (2 horas) | El tiempo, en segundos, después del cual caduca una clave de activación (enviada por correo electrónico al usuario para fines de verificación de correo electrónico o restablecimiento de contraseña). |
email_cooldown | 300 (5 minutos) | El tiempo (en segundos) que un usuario debe esperar antes de enviar una solicitud de activación o restablecimiento de contraseña para una dirección de correo electrónico específica. |
default_user_roles | READ , VOTE , EDIT | Los roles asignados a los nuevos usuarios al registrarse. Este campo debe expresarse como una matriz yaml. |
guidelines_url | (ninguno) | URL para vincular a un conjunto de pautas para los usuarios que contribuyen con ediciones. Debe tener el formato https://hostname.com . |
vote_promotion_threshold | (ninguno) | Número de ediciones aprobadas antes de que a un usuario se le asigne automáticamente el rol VOTE . Déjelo vacío para desactivarlo. |
vote_application_threshold | 3 | Número de mismos votos necesarios para la aplicación inmediata de una edición. Establezca en cero para desactivar la aplicación automática. |
voting_period | 345600 | Tiempo, en segundos, antes de que se cierre un período de votación. |
min_destructive_voting_period | 172800 | Tiempo mínimo, en segundos, que debe transcurrir antes de que se pueda aplicar inmediatamente una edición destructiva con suficientes votos positivos. |
vote_cron_interval | 5m | Tiempo entre tiradas para cerrar ediciones cuyos periodos de votación hayan finalizado. |
email_host | (ninguno) | Dirección del servidor SMTP. Requerido para enviar correos electrónicos con fines de activación y recuperación. |
email_port | 25 | Puerto del servidor SMTP. Sólo se admite STARTTLS. No se admiten conexiones TLS directas. |
email_user | (ninguno) | Nombre de usuario para el servidor SMTP. Opcional. |
email_password | (ninguno) | Contraseña para el servidor SMTP. Opcional. |
email_from | (ninguno) | Dirección de correo electrónico desde la que enviar correos electrónicos. |
host_url | (ninguno) | URL base para el servidor. Se utiliza al enviar correos electrónicos. Debe tener el formato https://hostname.com . |
image_location | (ninguno) | Ruta para almacenar imágenes, para almacenamiento de imágenes local. Se mostrará un error si no se configura al crear imágenes que no sean URL. |
image_backend | ( file ) | Solución de almacenamiento de imágenes. Se puede configurar en file o s3 . |
userLogFile | (ninguno) | Ruta al archivo de registro del usuario, que registra las operaciones del usuario. Si no se configuran, se enviarán a stderr. |
s3.endpoint | (ninguno) | Nombre de host del punto final s3 utilizado para el almacenamiento de imágenes. |
s3.base_url | (ninguno) | URL base para acceder a imágenes en S3. Debe tener el formato https://hostname.com . |
s3.bucket | (ninguno) | Nombre del depósito de S3 utilizado para almacenar imágenes. |
s3.access_key | (ninguno) | Clave de acceso utilizada para la autenticación. |
s3.secret | (ninguno) | Clave de acceso secreta utilizada para la autenticación. |
s3.max_dimension | (ninguno) | Si se configura, se creará una copia redimensionada para cualquier imagen cuyas dimensiones excedan este número. Esta copia se entregará en lugar del original. |
s3.upload_headers | (ninguno) | Un mapa de encabezados para enviar con cada solicitud de carga. Por ejemplo, DigitalOcean requiere que el encabezado x-amz-acl esté configurado en public-read o no hace que las imágenes cargadas estén disponibles. |
phash_distance | 0 | Determina qué distancia binaria se considera una coincidencia cuando se realiza una consulta con una huella digital de pHash. No se recomienda utilizar más de 8 y puede generar grandes cantidades de falsos positivos. Nota : La extensión pg-spgist_hamming debe estar instalada para utilizar la coincidencia de distancia; de lo contrario, obtendrá errores. |
favicon_path | (ninguno) | Ubicación donde se deben almacenar los favicons de los sitios vinculados. Déjelo vacío para desactivarlo. |
draft_time_limit | (24h) | Tiempo, en segundos, antes de que se elimine un borrador. |
profiler_port | 0 | Puerto en el que servir la salida pprof. Omitir para deshabilitar por completo. |
postgres.max_open_conns | (0) | Número máximo de conexiones abiertas simultáneas a la base de datos. |
postgres.max_idle_conns | (0) | Número máximo de conexiones simultáneas de bases de datos inactivas. |
postgres.conn_max_lifetime | (0) | Vida útil máxima en minutos antes de que se libere una conexión. |
Stash-box se puede ejecutar, preferiblemente a través de HTTPS, para mayor seguridad, pero requiere cierta configuración. Necesitará generar un certificado SSL y un par de claves para configurar esto. O utilice un proxy de terminación TLS de su elección, como Traefik, Nginx (no compatible) o Caddy Server (no compatible)
A continuación se muestra un ejemplo de cómo puede hacer esto usando 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
Es posible que necesite modificar el comando para su configuración específica. Puede encontrar más información sobre cómo crear un certificado autofirmado con OpenSSL aquí.
Una vez que haya generado el certificado y el par de claves, asegúrese de que se llamen stash-box.crt
y stash-box.key
respectivamente, y colóquelos en el mismo directorio que stash-box. Cuando Stash-box detecte estos archivos, utilizará HTTPS en lugar de HTTP.
Si desea habilitar la coincidencia de distancia para pHashes en stash-box, deberá instalar la extensión de Postgres pg-spgist_hamming.
La forma recomendada de hacer esto es utilizar la imagen de la ventana acoplable. Aún así, también puedes instalarlo manualmente siguiendo las instrucciones de compilación en el repositorio pg-spgist_hamming.
Supongamos que instala la extensión después de haber ejecutado las migraciones. En ese caso, deberá ejecutar la migración n.° 14 manualmente para instalar la extensión y agregar el índice. Si no desea hacer esto, puede borrar la base de datos y las migraciones se ejecutarán la próxima vez que inicie stash-box.
make lint
.make generate
: genera archivos Go GraphQL. Este comando debe ejecutarse si el esquema GraphQL ha cambiado.make ui
: construye la interfaz de usuario.make pre-ui
- Descargar dependencias frontendmake build
- Construye el binariomake test
- Ejecuta las pruebas unitariasmake it
: ejecuta las pruebas unitarias y de integración.make lint
- Ejecute el lintermake fmt
: formatea y alinea los espacios en blanco Nota: las pruebas de integración se ejecutan en una base de datos temporal sqlite3 de forma predeterminada. Se pueden ejecutar en un servidor Postgres configurando la variable de entorno POSTGRES_DB
en la cadena de conexión de Postgres. Por ejemplo: postgres@localhost/stash-box-test?sslmode=disable
. Tenga en cuenta que las pruebas de integración eliminan todas las tablas antes y después de las pruebas.
Para ejecutar la interfaz en modo de desarrollo, ejecute yarn start
desde el directorio de la interfaz.
Al desarrollar, la clave API se puede configurar en frontend/.env.development.local
para evitar tener que iniciar sesión.
Cuando is_production
está habilitado en el servidor, esta es la única forma de autorizar en el entorno de desarrollo frontend. Si el servidor usa https o se ejecuta en un puerto personalizado, esto también debe configurarse en .env.development.local
.
Consulte frontend/.env.development.local.shadow
para ver ejemplos.
Puede acceder al área de juegos GraphQL en host:port/playground
y la interfaz GraphQL se puede encontrar en host:port/graphql
. Para ejecutar consultas agregue un encabezado con su clave API: {"APIKey":"<API_KEY>"}
. La clave API se puede encontrar en su página de usuario en stash-box.
make generate
para crear archivos generados si se han modificado.make ui build
para crear el ejecutable para su plataforma actual.Tengo una pregunta que necesita respuesta aquí.