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
パラメータについてはここに記載されています。データベース接続に SSL を使用しない場合は、 sslmode=disable
使用します。デフォルトはrequire
です。stash-box が 2 回目に実行されると、stash-box はスキーマの移行を実行して必要なテーブルを作成します。また、ランダムなパスワードと API キーを持つroot
ユーザーも生成されます。これらの資格情報は標準出力に一度出力され、ログには記録されません。 root ユーザーが存在しない場合、システムは起動時に再生成します。データベースから root ユーザー行を削除し、Stash-box を再起動することで、システムに新しい root ユーザーを強制的に作成させることができます。 StashDB 実行可能ファイルの最初の正常な起動時に、管理者ユーザーを使用してコンソール出力をキャプチャする必要があります。それ以外の場合は、新しいroot
ユーザーを再投稿する前に、Postgres がデータベースを再作成できるようにする必要があります。
Stash-box は、それを簡単にするコマンドライン オプションを備えたツールです。利用可能なオプションを確認するには、ターミナルでstash-box --help
を実行します。
以下は、stash-box をポート 80 でローカルに実行する方法の例です。
stash-box --host 127.0.0.1 --port 80
注:このコマンドは OSX/Linux で動作するはずです。
stash-box を初めて起動すると、現在の作業ディレクトリにstash-box-config.yml
という構成ファイルが生成されます。このファイルには、次のような隠しボックスのデフォルト設定が含まれています。
0.0.0.0
9998
必要に応じて、これらのデフォルトを変更できます。たとえば、GraphQL プレイグラウンドとクロスドメイン Cookie を無効にする場合は、 is_production
true
に設定します。
Stash-box でユーザーを認証するには、セッションまたは API キーの 2 つの方法があります。
セッションベースの認証: ログインするには、フォーム値としてプレーンテキストのusername
とpassword
を使用してリクエストを/login
に送信します。セッションベースの認証では、後続のすべてのリクエストに必要な Cookie が設定されます。ログアウトするには、リクエストを/logout
に送信します。
API キー認証: API キーを使用するには、 ApiKey
ヘッダーをユーザーの API キー値に設定します。
鍵 | デフォルト | 説明 |
---|---|---|
title | Stash-Box | インスタンスのタイトル。ページのタイトルに使用されます。 |
require_invite | true | true の場合、ユーザーは、新しいアカウントを作成するために既存のユーザーによって生成された招待キーを入力する必要があります。 |
require_activation | false | true の場合、ユーザーはアカウントを作成する前に電子メール アドレスを確認する必要があります。 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 | 編集をすぐに適用するために必要な同じ投票の数。自動適用を無効にするには、0 に設定します。 |
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 証明書とキーのペアを生成する必要があります。または、Traefik、Nginx (サポートされていない)、または Caddy Server (サポートされていない) など、選択した TLS 終端プロキシを使用します。
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 がこれらのファイルを検出すると、HTTP の代わりに HTTPS が使用されます。
stash-box 内の pHash の距離マッチングを有効にしたい場合は、pg-spgist_hamming Postgres 拡張機能をインストールする必要があります。
これを行うために推奨される方法は、docker イメージを使用することです。ただし、pg-spgist_hamming リポジトリのビルド手順に従って手動でインストールすることもできます。
移行を実行した後に拡張機能をインストールするとします。その場合、移行 #14 を手動で実行して、拡張機能をインストールし、インデックスを追加する必要があります。これを実行したくない場合は、データベースを消去すると、次回 stash-box を起動したときに移行が実行されます。
make lint
でリンターを実行します。make generate
- Go GraphQL ファイルを生成します。 GraphQL スキーマが変更された場合は、このコマンドを実行する必要があります。make ui
- UIを構築します。make pre-ui
- フロントエンドの依存関係をダウンロードするmake build
- バイナリをビルドしますmake test
- 単体テストを実行します。make it
- 単体テストと統合テストを実行します。make lint
- リンターを実行しますmake fmt
- 空白のフォーマットと整列注:統合テストは、デフォルトでは一時的な sqlite3 データベースに対して実行されます。環境変数POSTGRES_DB
Postgres 接続文字列に設定することで、Postgres サーバーに対して実行できます。例: postgres@localhost/stash-box-test?sslmode=disable
。統合テストでは、テストの前後にすべてのテーブルが削除されることに注意してください。
開発モードでフロントエンドを実行するには、フロントエンド ディレクトリからyarn start
を実行します。
開発時に、API キーをfrontend/.env.development.local
に設定すると、ログインする必要がなくなります。
is_production
がサーバー上で有効になっている場合、これがフロントエンド開発環境で認証する唯一の方法です。サーバーが https を使用する場合、またはカスタム ポートで実行する場合は、これも.env.development.local
で構成する必要があります。
例については、 frontend/.env.development.local.shadow
参照してください。
GraphQL プレイグラウンドにはhost:port/playground
でアクセスでき、GraphQL インターフェイスはhost:port/graphql
にあります。クエリを実行するには、API キーを含むヘッダーを追加します: {"APIKey":"<API_KEY>"}
。 API キーは、stash-box のユーザーページにあります。
make generate
を実行して生成ファイルを作成します。make ui build
を実行して、現在のプラットフォーム用の実行可能ファイルをビルドします。ここで答えなければならない質問があります。