Stash-box — это API-сервер индексации видео и метаданных для порно с открытым исходным кодом, разработанный Stash App. Целью Stash-box является предоставление управляемой сообществом базы данных порнометаданных, аналогично тому, что MusicBrainz делает для музыки. Отправка и редактирование метаданных должны следовать тем же принципам, что и MusicBrainz. Узнайте больше здесь. Установка Stash-box создаст пустую базу данных, которую вы сможете заполнить.
Если вы являетесь пользователем Stash, вам не нужно устанавливать stash-box. У сообщества Stash есть сервер со множеством игр, с которых вы можете получать данные. Вы можете получить информацию для входа в наше руководство по доступу к StashDB.
Здесь вы можете найти файл docker-compose
для производственного развертывания. Вы можете опустить Traefik, если вам не нужен обратный прокси.
Если у вас уже установлен PostgreSQL, вы можете установить stash-box самостоятельно из Docker Hub.
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 выполнит миграцию схемы для создания необходимых таблиц. Он также создаст пользователя root
со случайным паролем и ключом API. Эти учетные данные выводятся один раз на стандартный вывод и не регистрируются. Система повторно создаст пользователя root при запуске, если он не существует. Вы можете заставить систему создать нового пользователя root, удалив строку пользователя root из базы данных и перезапустив Stash-box. Вам нужно будет захватить вывод консоли с вашим администратором при первом успешном запуске исполняемого файла StashDB. В противном случае вам нужно будет разрешить Postgres заново создать базу данных, прежде чем он повторно опубликует нового пользователя root
.
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-ключ.
Аутентификация на основе сеанса. Чтобы войти в систему, отправьте запрос на /login
указав username
и password
в виде обычного текста в качестве значений формы. Аутентификация на основе сеанса установит файл cookie, который необходим для всех последующих запросов. Чтобы выйти из системы, отправьте запрос на /logout
.
Аутентификация по ключу API. Чтобы использовать ключ API, установите в заголовке ApiKey
значение ключа API пользователя.
Ключ | По умолчанию | Описание |
---|---|---|
title | Stash-Box | Название экземпляра, используемое в заголовке страницы. |
require_invite | 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 | (никто) | Базовый URL-адрес для доступа к изображениям в S3. Должно быть в формате 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.
Если вы хотите включить сопоставление расстояний для pHashes в stash-box, вам необходимо установить расширение pg-spgist_hamming Postgres.
Рекомендуемый способ сделать это — использовать образ докера. Тем не менее, вы также можете установить его вручную, следуя инструкциям по сборке в репозитории pg-spgist_hamming.
Предположим, вы устанавливаете расширение после выполнения миграции. В этом случае вам нужно будет запустить миграцию № 14 вручную, чтобы установить расширение и добавить индекс. Если вы не хотите этого делать, вы можете стереть базу данных, и миграция запустится при следующем запуске stash-box.
make lint
.make generate
— генерировать файлы Go GraphQL. Эту команду следует запускать, если схема GraphQL изменилась.make ui
— Создает пользовательский интерфейс.make pre-ui
— Загрузка зависимостей внешнего интерфейсаmake build
— собирает двоичный файлmake test
— запускает модульные тесты.make it
— запускает модульные и интеграционные тесты.make lint
— Запустить линтерmake fmt
— форматирует и выравнивает пробелы. Примечание. По умолчанию интеграционные тесты выполняются во временной базе данных sqlite3. Их можно запустить на сервере Postgres, установив для переменной среды POSTGRES_DB
строку подключения 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 можно найти на вашей странице пользователя в тайнике.
make generate
, чтобы создать сгенерированные файлы, если они были изменены.make ui build
, чтобы создать исполняемый файл для вашей текущей платформы.У меня есть вопрос, на который нужно ответить здесь.