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가 두 번째로 실행되면 stash-box는 스키마 마이그레이션을 실행하여 필요한 테이블을 생성합니다. 또한 임의의 비밀번호와 API 키를 사용하여 root
사용자를 생성합니다. 이러한 자격 증명은 stdout에 한 번 인쇄되며 기록되지 않습니다. 루트 사용자가 존재하지 않는 경우 시스템은 시작 시 루트 사용자를 다시 생성합니다. 데이터베이스에서 루트 사용자 행을 삭제하고 Stash-box를 다시 시작하여 시스템이 강제로 새 루트 사용자를 생성하도록 할 수 있습니다. 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
이라는 구성 파일이 생성됩니다. 이 파일에는 다음을 포함하여 숨김 상자에 대한 기본 설정이 포함되어 있습니다.
0.0.0.0
9998
필요한 경우 이러한 기본값을 변경할 수 있습니다. 예를 들어 GraphQL 플레이그라운드와 도메인 간 쿠키를 비활성화하려면 is_production
true
로 설정하면 됩니다.
Stash-box에서 사용자를 인증하는 방법에는 세션 또는 API 키 두 가지가 있습니다.
세션 기반 인증: 로그인하려면 일반 텍스트의 username
과 password
양식 값으로 사용하여 /login
에 요청을 보냅니다. 세션 기반 인증은 모든 후속 요청에 필요한 쿠키를 설정합니다. 로그아웃하려면 /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
참조하세요.
host:port/playground
에서 GraphQL 플레이그라운드에 액세스할 수 있으며, GraphQL 인터페이스는 host:port/graphql
에서 찾을 수 있습니다. 쿼리를 실행하려면 API 키가 포함된 헤더( {"APIKey":"<API_KEY>"}
를 추가하세요. API 키는 stash-box의 사용자 페이지에서 찾을 수 있습니다.
make generate
실행하여 생성된 파일을 생성하십시오.make ui build
실행하세요.여기서 대답해야 할 질문이 있습니다.