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
來建立適用於目前平台的可執行檔。我有一個問題需要在這裡回答。