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;
โดย superuser ก่อนที่จะรัน Stash-box อีกครั้ง หากไม่มีสคีมา ก็จะถูกสร้างขึ้นภายในฐานข้อมูลsslmode
ได้รับการบันทึกไว้ที่นี่ ใช้ sslmode=disable
เพื่อไม่ใช้ SSL สำหรับการเชื่อมต่อฐานข้อมูล ค่าเริ่มต้นคือ require
ครั้งที่สองที่มีการเรียกใช้ stash-box stash-box จะเรียกใช้การย้ายสคีมาเพื่อสร้างตารางที่จำเป็น นอกจากนี้ยังจะสร้างผู้ใช้ root
ด้วยรหัสผ่านแบบสุ่มและคีย์ API ข้อมูลรับรองเหล่านี้จะถูกพิมพ์หนึ่งครั้งไปยัง stdout และไม่ได้ถูกบันทึก ระบบจะสร้างผู้ใช้รูทใหม่เมื่อเริ่มต้นระบบ หากไม่มีอยู่ คุณสามารถบังคับให้ระบบสร้างผู้ใช้รูทใหม่ได้โดยการลบแถวผู้ใช้รูทออกจากฐานข้อมูลและรีสตาร์ท 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 Playground และคุกกี้ข้ามโดเมน คุณสามารถตั้งค่า is_production
เป็น true
มีสองวิธีในการตรวจสอบสิทธิ์ผู้ใช้ใน Stash-box: เซสชันหรือคีย์ API
การตรวจสอบสิทธิ์ตามเซสชัน: หากต้องการเข้าสู่ระบบ ให้ส่งคำขอไปที่ /login
ด้วย username
และ password
ในรูปแบบข้อความธรรมดาเป็นค่าแบบฟอร์ม การรับรองความถูกต้องตามเซสชันจะตั้งค่าคุกกี้ที่จำเป็นสำหรับคำขอที่ตามมาทั้งหมด หากต้องการออกจากระบบ ให้ส่งคำขอไปที่ /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 | (ไม่มี) | ตำแหน่งที่ควรจัดเก็บ favicons สำหรับไซต์ที่เชื่อมโยง เว้นว่างไว้เพื่อปิดใช้งาน |
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 ด้วยตนเองเพื่อติดตั้งส่วนขยายและเพิ่มดัชนี หากคุณไม่ต้องการทำเช่นนี้ คุณสามารถล้างฐานข้อมูลได้ และการย้ายข้อมูลจะทำงานในครั้งถัดไปที่คุณเริ่มคลังเก็บของ
make lint
make generate
- สร้างไฟล์ Go GraphQL คำสั่งนี้ควรจะรันหากสคีมา GraphQL มีการเปลี่ยนแปลงmake ui
- สร้าง UImake 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 Playground ได้ที่ host:port/playground
และอินเทอร์เฟซ GraphQL สามารถพบได้ที่ host:port/graphql
หากต้องการดำเนินการค้นหา ให้เพิ่มส่วนหัวด้วยคีย์ API ของคุณ: {"APIKey":"<API_KEY>"}
คีย์ API สามารถพบได้บนหน้าผู้ใช้ของคุณในกล่องสะสม
make generate
เพื่อสร้างไฟล์ที่สร้างขึ้นหากมีการเปลี่ยนแปลงmake ui build
เพื่อสร้างไฟล์ปฏิบัติการสำหรับแพลตฟอร์มปัจจุบันของคุณฉันมีคำถามที่ต้องตอบที่นี่