Stash-box 是由 Stash App 开发的开源视频索引和色情元数据 API 服务器。 stash-box 的目的是提供一个社区驱动的色情元数据数据库,类似于 MusicBrainz 为音乐所做的数据库。元数据的提交和编辑应遵循与 MusicBrainz 相同的原则。在这里了解更多。安装 Stash-box 将创建一个空数据库供您填充。
如果您是 Stash 用户,则无需安装 stash-box。 Stash 社区有一个包含许多标题的服务器,您可以从中提取数据。您可以从我们的访问 StashDB 指南中获取登录信息。
您可以在此处找到用于生产部署的docker-compose
文件。如果不需要反向代理,可以省略 Traefik。
如果您已经安装了 PostgreSQL,则可以从 Docker Hub 单独安装 stash-box。
Stash-box 支持 macOS、Windows 和 Linux。可在此处找到适用于 Windows 和 Linux 的版本。
make
来构建应用程序。stash-box-config.yml
)。在这种情况下,它将生成一个带有默认 PostgreSQL 连接字符串的默认配置文件 ( postgres@localhost/stash-box?sslmode=disable
)。您可以根据需要调整连接字符串。CREATE EXTENSION pg_trgm; CREATE EXTENSION pgcrypto;
在重新运行 Stash-box 之前由超级用户执行。如果架构不存在,它将在数据库中创建。sslmode
参数记录在此处。使用sslmode=disable
不使用 SSL 进行数据库连接。默认为require
。第二次运行 stash-box 时,stash-box 将运行架构迁移以创建所需的表。它还会生成一个具有随机密码和 API 密钥的root
用户。这些凭据将打印一次到标准输出,并且不会被记录。如果root用户不存在,系统启动时会重新生成root用户。您可以通过从数据库中删除 root 用户行并重新启动 Stash-box 来强制系统创建新的 root 用户。您需要在第一次成功启动 StashDB 可执行文件时使用管理员用户捕获控制台输出。否则,您需要允许 Postgres 重新创建数据库,然后才能重新发布新的root
用户。
Stash-box 是一个带有命令行选项的工具,可以使操作变得更容易。要查看可用的选项,请在终端中运行stash-box --help
。
以下是如何在端口 80 上本地运行 stash-box 的示例:
stash-box --host 127.0.0.1 --port 80
注意:此命令应在 OSX / Linux 上运行。
当您第一次启动 stash-box 时,它会在当前工作目录中生成一个名为stash-box-config.yml
的配置文件。该文件包含 stash-box 的默认设置,包括:
0.0.0.0
9998
如果需要,您可以更改这些默认值。例如,如果您想禁用 GraphQL Playground 和跨域 Cookie,您可以将is_production
设置为true
。
有两种方法可以在 Stash-box 中对用户进行身份验证:会话或 API 密钥。
基于会话的身份验证:要登录,请使用纯文本形式的username
和password
作为表单值向/login
发送请求。基于会话的身份验证将设置所有后续请求所需的 cookie。要注销,请向/logout
发送请求。
API 密钥身份验证:要使用 API 密钥,请将ApiKey
标头设置为用户的 API 密钥值。
钥匙 | 默认 | 描述 |
---|---|---|
title | Stash-Box | 实例的标题,在页面标题中使用。 |
require_invite | true | 如果为 true,则用户需要输入由现有用户生成的邀请密钥才能创建新帐户。 |
require_activation | false | 如果属实,用户需要在创建帐户之前验证其电子邮件地址。需要设置email_from 、 email_host 和host_url 。 |
activation_expiry | 7200 (2小时) | 激活密钥(通过电子邮件发送给用户以用于电子邮件验证或密码重置目的)过期的时间(以秒为单位)。 |
email_cooldown | 300 (5分钟) | 用户在提交特定电子邮件地址的激活或重置密码请求之前必须等待的时间(以秒为单位)。 |
default_user_roles | READ 、 VOTE 、 EDIT | 注册时分配给新用户的角色。该字段必须表示为 yaml 数组。 |
guidelines_url | (没有任何) | 用于链接到一组供用户进行编辑的指南的 URL。应采用https://hostname.com 的形式。 |
vote_promotion_threshold | (没有任何) | 在用户自动分配VOTE 角色之前已批准的编辑次数。留空以禁用。 |
vote_application_threshold | 3 | 立即应用编辑所需的相同票数。设置为零以禁用自动应用。 |
voting_period | 345600 | 投票期结束前的时间(以秒为单位)。 |
min_destructive_voting_period | 172800 | 立即应用破坏性编辑并获得足够的赞成票之前需要经过的最短时间(以秒为单位)。 |
vote_cron_interval | 5m | 投票期已结束的编辑运行之间的时间间隔。 |
email_host | (没有任何) | SMTP 服务器的地址。需要发送电子邮件以进行激活和恢复目的。 |
email_port | 25 | SMTP 服务器的端口。仅支持 STARTTLS。不支持直接 TLS 连接。 |
email_user | (没有任何) | SMTP 服务器的用户名。选修的。 |
email_password | (没有任何) | SMTP 服务器的密码。选修的。 |
email_from | (没有任何) | 用于发送电子邮件的电子邮件地址。 |
host_url | (没有任何) | 服务器的基本 URL。发送电子邮件时使用。应采用https://hostname.com 的形式。 |
image_location | (没有任何) | 图片存储路径,用于本地图片存储。创建非 URL 图像时如果未设置,将显示错误。 |
image_backend | ( file ) | 图像存储解决方案。可以设置为file 或s3 。 |
userLogFile | (没有任何) | 用户日志文件的路径,用于记录用户操作。如果未设置,则这些将输出到 stderr。 |
s3.endpoint | (没有任何) | 用于图像存储的 s3 端点的主机名。 |
s3.base_url | (没有任何) | 访问 S3 中图像的基本 URL。应采用https://hostname.com 的形式。 |
s3.bucket | (没有任何) | 用于存储图像的S3存储桶的名称。 |
s3.access_key | (没有任何) | 用于身份验证的访问密钥。 |
s3.secret | (没有任何) | 用于身份验证的秘密访问密钥。 |
s3.max_dimension | (没有任何) | 如果设置,将为尺寸超过此数字的任何图像创建调整大小的副本。该副本将代替原件送达。 |
s3.upload_headers | (没有任何) | 与每个上传请求一起发送的标头映射。例如,DigitalOcean 要求将x-amz-acl 标头设置为public-read ,否则不会使上传的图像可用。 |
phash_distance | 0 | 确定使用 pHash 指纹查询时被视为匹配的二进制距离。不建议使用超过 8 个,否则可能会导致大量误报。注意:必须安装 pg-spgist_hamming 扩展才能使用距离匹配,否则会出现错误。 |
favicon_path | (没有任何) | 应存储链接站点的网站图标的位置。留空以禁用。 |
draft_time_limit | (24小时) | 删除草稿之前的时间(以秒为单位)。 |
profiler_port | 0 | 提供 pprof 输出的端口。省略完全禁用。 |
postgres.max_open_conns | (0) | 数据库的并发打开连接的最大数量。 |
postgres.max_idle_conns | (0) | 并发空闲数据库连接的最大数量。 |
postgres.conn_max_lifetime | (0) | 连接释放前的最长生命周期(以分钟为单位)。 |
Stash-box 是可运行的,最好通过 HTTPS 运行,以提高安全性,但它需要一些设置。您需要生成 SSL 证书和密钥对才能进行设置。或者使用您选择的 TLS 终止代理,例如 Traefik、Nginx(不支持)或 Caddy Server(不支持)
以下是如何使用 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
您可能需要针对您的特定设置修改命令。您可以在此处找到有关使用 OpenSSL 创建自签名证书的更多信息。
生成证书和密钥对后,请确保它们分别命名为stash-box.crt
和stash-box.key
,并将它们放在与 stash-box 相同的目录中。当 Stash-box 检测到这些文件时,它将使用 HTTPS 而不是 HTTP。
如果要在 stash-box 中启用 pHashes 的距离匹配,则需要安装 pg-spgist_hamming Postgres 扩展。
推荐的方法是使用 docker 镜像。不过,您也可以按照 pg-spgist_hamming 存储库中的构建说明手动安装它。
假设您在运行迁移后安装了扩展。在这种情况下,您需要手动运行迁移 #14 来安装扩展并添加索引。如果您不想这样做,您可以擦除数据库,并且迁移将在您下次启动 stash-box 时运行。
make lint
运行 linter。make generate
- 生成 Go GraphQL 文件。如果 GraphQL 架构已更改,则应运行此命令。make ui
- 构建 UI。make pre-ui
- 下载前端依赖项make build
- 构建二进制文件make test
- 运行单元测试make it
- 运行单元和集成测试make lint
- 运行 lintermake fmt
- 格式化并对齐空白注意:默认情况下,集成测试针对临时 sqlite3 数据库运行。通过将环境变量POSTGRES_DB
设置为 Postgres 连接字符串,可以针对 Postgres 服务器运行它们。例如: postgres@localhost/stash-box-test?sslmode=disable
。请注意,集成测试会删除测试前后的所有表。
要在开发模式下运行前端,请从前端目录运行yarn start
。
开发时,可以在frontend/.env.development.local
中设置 API 密钥,以避免登录。
当服务器启用is_production
时,这是前端开发环境中唯一的授权方式。如果服务器使用 https 或在自定义端口上运行,则还需要在.env.development.local
中进行配置。
有关示例,请参阅frontend/.env.development.local.shadow
。
您可以在host:port/playground
访问 GraphQL Playground,并且可以在host:port/graphql
找到 GraphQL 接口。要执行查询,请添加带有 API 密钥的标头: {"APIKey":"<API_KEY>"}
。 API 密钥可以在您的用户页面的 stash-box 中找到。
make generate
创建生成的文件。make ui build
来构建适用于当前平台的可执行文件。我有一个问题需要在这里回答。