Thunderstore เป็นฐานข้อมูล mod และ API สำหรับการดาวน์โหลด mod
คัดลอก .env.template
ไปยัง .env
และแก้ไขตามที่เห็นสมควร - หากคุณมีสิทธิ์เข้าถึงโมดูลย่อย python-packages
และถูกโคลนไว้ ตรวจสอบให้แน่ใจว่าได้ตั้งค่า BUILD_INSTALL_EXTRAS
เป็น true
ค่าอื่นใดจะไม่ทำงาน การเปลี่ยนแปลงการตั้งค่านี้จะต้องมีการสร้างสภาพแวดล้อมใหม่ (เช่นด้วย docker compose build
) เพื่อให้มีผล
เรียกใช้ docker compose up
เรียกใช้ docker compose exec django python manage.py migrate
ในเทอร์มินัลอื่น
เรียกใช้ docker compose exec django python manage.py shell
และป้อนรหัสต่อไปนี้:
จาก django.contrib.sites.models นำเข้า SiteSite.objects.create(domain="thunderstore.localhost", name="Thunderstore")
ตรวจสอบให้แน่ใจว่าได้แทนที่ localhost
ด้วยสิ่งที่คุณใช้เชื่อมต่อกับไซต์! โดยทั่วไป คุณควรใช้ thunderstore.localhost
เป็นโดเมนหลักเพื่อจัดการการกำหนดขอบเขตการรับรองความถูกต้องอย่างถูกต้อง (ดู SESSION_COOKIE_DOMAIN
ในภายหลัง)
คุณจะต้องนำทางไปยังแผงผู้ดูแลระบบ ( /djangoadmin
) และกำหนดค่าการแมปจากไซต์ไปยังชุมชน คุณสามารถสร้างบัญชี superuser ด้วยคำสั่งการจัดการ createsuperuser
Django (คล้ายกับวิธีการย้ายข้อมูล) เพื่อเข้าถึงแผงผู้ดูแลระบบ
ในการเชื่อมต่อไซต์กับชุมชน คุณจะต้อง:
ตรวจสอบให้แน่ใจว่ามีวัตถุ Community อย่างน้อยหนึ่งรายการหรือสร้างขึ้นมาหนึ่งรายการ (ควรสร้าง Risk of Rain 2
โดยอัตโนมัติ)
ตรวจสอบให้แน่ใจว่ามีวัตถุไซต์อย่างน้อยหนึ่งรายการหรือสร้างขึ้นมาหนึ่งรายการ
ทำให้แอตทริบิวต์ domain name
ของวัตถุไซต์ตรงกับที่คุณใช้ในการเชื่อมต่อกับสภาพแวดล้อมการพัฒนาของคุณ
สร้างอ็อบเจ็กต์ไซต์ชุมชนใหม่ โดยเชื่อมโยงทั้งสองเข้าด้วยกัน
มีสคริปต์สำหรับการเติมฐานข้อมูลท้องถิ่นด้วยข้อมูลทดสอบ คุณสามารถรันได้ดังนี้:
นักเทียบท่าเขียน exec django python Manage.py create_test_data
ในการพัฒนาท้องถิ่น minio ใช้สำหรับการจัดเก็บไฟล์ที่เข้ากันได้กับ S3 คุณสามารถเข้าถึงได้ผ่าน http://localhost:9000/ ด้วยข้อมูลประจำตัวของ thunderstore:thunderstore
เอกสาร REST API ผยองสามารถดูได้จาก /api/docs/
ในขณะนี้ API ที่เกี่ยวข้องเพียงอย่างเดียวคือ /api/v1/package/
ซึ่งแสดงรายการ mod ที่ใช้งานอยู่ในฐานข้อมูล นอกจากนี้ ยังสามารถดึงข้อมูล mod เฉพาะได้หากจำเป็นด้วยจุดสิ้นสุด /api/v1/package/{uuid4}/
โดยที่ {uuid4}
จะถูกแทนที่ด้วยค่า uuid4 ของ mod
ไซต์ผู้ดูแลระบบสามารถเข้าถึงได้จาก /djangoadmin/
หากต้องการดูไซต์ผู้ดูแลระบบ คุณต้องมีบัญชีผู้ดูแลระบบ
สมมติว่ามีการใช้นักเทียบท่า บัญชีผู้ดูแลระบบสามารถสร้างได้ดังนี้:
docker compose exec django python manage.py createsuperuser
โปรดทราบว่าหากคุณใช้ Windows คุณจะต้องใช้ winpty เพื่อรันคำสั่งนั้น
DEBUG
: ควรตั้งค่าเป็นเท็จหรือไม่เลยสำหรับการผลิต
SECRET_KEY
: สตริงที่ยาวและสุ่ม ใช้ในการแฮรหัสผ่านและข้อมูลอื่นๆ ควรเก็บเป็นความลับตามนัยของชื่อ
ALLOWED_HOSTS
: รายการชื่อโฮสต์ที่คั่นด้วยเครื่องหมายจุลภาคที่เซิร์ฟเวอร์นี้สามารถเชื่อมต่อได้ เช่น beta.thunderstore.io
PRIMARY_HOST
: ชื่อสาธารณะของเซิร์ฟเวอร์ เช่น beta.thunderstore.io
PROTOCOL
: โปรโตคอลที่ใช้สร้าง URL ไปยังเซิร์ฟเวอร์ https://
หรือ http://
REPOSITORY_MAX_PACKAGE_SIZE_MB
: ขนาดบรรจุภัณฑ์เดี่ยวสูงสุด
REPOSITORY_MAX_PACKAGE_TOTAL_SIZE_GB
: ขนาดไฟล์รวมสูงสุดที่ใช้โดยแพ็คเกจ
GUNICORN_WORKER_COUNT
: ใช้เพื่อควบคุมจำนวนคนงานที่ gunicorn จะวางไข่
GUNICORN_LOG_LEVEL
: ใช้เพื่อควบคุมระดับการบันทึกของ gunicorn
SESSION_COOKIE_DOMAIN
: หากตั้งค่าไว้ จะอนุญาตให้แชร์เซสชันภายในโดเมนและโดเมนย่อย ตัวอย่างเช่น: thunderstore.io
สำหรับการทดสอบในพื้นที่ ค่าที่แนะนำคือ:
SESSION_COOKIE_DOMAIN
: thunderstore.localhost
ตรวจสอบให้แน่ใจว่าวัตถุของไซต์ชี้ไปที่ thunderstore.localhost
หรือโดเมนย่อยบางส่วน เช่น test.thunderstore.localhost
SOCIAL_AUTH_SANITIZE_REDIRECTS
: ตั้งค่าเป็น True
หากคุณต้องการจำกัดโดเมนการเปลี่ยนเส้นทาง OAuth
SOCIAL_AUTH_ALLOWED_REDIRECT_HOSTS
: แสดงรายการโดเมนการเปลี่ยนเส้นทาง OAuth ที่อนุญาต ซึ่งใช้หากเปิดใช้งาน SOCIAL_AUTH_SANITIZE_REDIRECTS
SOCIAL_AUTH_INIT_HOST
: โฮสต์ที่ใช้สำหรับการเริ่มต้นการรับรองความถูกต้องทางสังคมและการเรียกกลับ ไม่ว่าผู้ใช้จะอยู่บนโฮสต์ใดก็ตาม หากไม่ได้ตั้งค่า จะมีค่าเริ่มต้นเป็นค่าเดียวกันกับ AUTH_EXCLUSIVE_HOST
หากไม่ได้ตั้งค่าไว้ ค่าเริ่มต้นจะเป็นโฮสต์ของคำขอ
AUTH_EXCLUSIVE_HOST
: ชื่อโฮสต์/โดเมนที่จะใช้เฉพาะสำหรับตรรกะที่เกี่ยวข้องกับการรับรองความถูกต้อง เช่น กระบวนการรับรองความถูกต้องทางสังคม หากไม่ได้ตั้งค่า จะถือว่าไม่มีโฮสต์ใดเป็นโฮสต์การตรวจสอบสิทธิ์แบบเอกสิทธิ์เฉพาะบุคคล
สำหรับการทดสอบในพื้นที่ ค่าที่แนะนำคือ:
AUTH_EXCLUSIVE_HOST
: auth.thunderstore.localhost
SOCIAL_AUTH_SANITIZE_REDIRECTS
: auth.thunderstore.localhost,thunderstore.localhost
หากต้องการตั้งค่า GitHub OAuth ให้ไปที่การตั้งค่าบน GitHub (การตั้งค่าส่วนบุคคลหรือองค์กร) และจากภายใต้ Developer Settings
ให้เลือก OAuth Apps
สร้างแอปพลิเคชัน OAuth ใหม่ และใช้ {AUTH_EXCLUSIVE_HOST}/auth/complete/github/
เป็น URL โทรกลับการอนุญาต โดยที่ {AUTH_EXCLUSIVE_HOST}
จะถูกแทนที่ด้วยค่าที่ใช้สำหรับการตั้งค่า AUTH_EXCLUSIVE_HOST
ตัวอย่างเช่น สำหรับท้องถิ่น คุณสามารถใช้ http://auth.localhost/auth/complete/github/
ในขณะที่สำหรับสภาพแวดล้อมแบบสด https://auth.thunderstore.dev/auth/complete/github/
หลังจากสร้างแอปพลิเคชัน OAuth แล้ว คุณต้องระบุตัวแปรสภาพแวดล้อมต่อไปนี้ให้กับแอปพลิเคชันด้วย:
SOCIAL_AUTH_GITHUB_KEY
: ค่า Client ID
ของแอปพลิเคชัน OAuth
SOCIAL_AUTH_GITHUB_SECRET
ค่า Client Secret
ของแอปพลิเคชัน OAuth
หากต้องการตั้งค่า Discord OAuth ให้ไปที่แผงนักพัฒนา Discord และสร้างแอปพลิเคชัน OAuth ใหม่ เพิ่ม URL เรียกกลับไปที่ {AUTH_EXCLUSIVE_HOST}/auth/complete/discord/
โดยที่ {AUTH_EXCLUSIVE_HOST}
จะถูกแทนที่ด้วยค่าที่ใช้สำหรับการตั้งค่า AUTH_EXCLUSIVE_HOST
ตัวอย่างเช่น สำหรับท้องถิ่น คุณสามารถใช้ http://auth.localhost/auth/complete/discord/
ในขณะที่สำหรับสภาพแวดล้อมแบบสด https://auth.thunderstore.dev/auth/complete/discord/
SOCIAL_AUTH_DISCORD_KEY
: ค่า Client ID
ของแอปพลิเคชัน OAuth
SOCIAL_AUTH_DISCORD_SECRET
ค่า Client Secret
ของแอปพลิเคชัน OAuth
โปรโตคอล AWS S3 / Boto3 ได้รับการสนับสนุนโดยผู้จำหน่ายและบริการหลายราย และการใช้งานดังกล่าวอาจแตกต่างกันไปขึ้นอยู่กับผู้ให้บริการ
โปรดดู https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการนำไปใช้งาน ดูที่thunderstore/core/settings.pyสำหรับตัวแปรสภาพแวดล้อมที่ใช้งานอยู่ในปัจจุบัน
อย่างน้อยที่สุดให้ตั้งค่าตัวแปรต่อไปนี้:
AWS_ACCESS_KEY_ID
: รหัสคีย์การรับรองความถูกต้อง
AWS_SECRET_ACCESS_KEY
: รหัสลับการตรวจสอบสิทธิ์
AWS_S3_REGION_NAME
: ภูมิภาคที่เก็บข้อมูล
AWS_S3_ENDPOINT_URL
: จุดสิ้นสุดบริการจัดเก็บข้อมูล
AWS_STORAGE_BUCKET_NAME
: ชื่อที่เก็บข้อมูล
AWS_LOCATION
: ตำแหน่งภายในบัคเก็ตที่จะอัปโหลดไฟล์
AWS_S3_SECURE_URLS
: ตั้งค่าเป็นเท็จเพื่อปิดใช้งาน HTTPS ซึ่งเปิดใช้งานตามค่าเริ่มต้น
Usermedia API ทำงานโดยใช้ประโยชน์จาก URL ที่กำหนดไว้ของพื้นที่จัดเก็บข้อมูลที่เข้ากันได้กับ S3 เพื่อจัดการการอัปโหลดจริง ด้วยเหตุนี้ แบ็กเอนด์สื่อผู้ใช้จึงต้องเป็นแบ็กเอนด์ที่เก็บข้อมูลที่เข้ากันได้กับ S3 ด้วย ในทำนองเดียวกัน แบ็กเอนด์หน่วยเก็บข้อมูล usermedia สามารถกำหนดค่าได้ด้วยตัวแปรสภาพแวดล้อม:
USERMEDIA_S3_ENDPOINT_URL
: จุดสิ้นสุดบริการจัดเก็บข้อมูลที่สามารถเข้าถึงได้ภายใน
USERMEDIA_S3_ACCESS_KEY_ID
: รหัสคีย์การตรวจสอบสิทธิ์
USERMEDIA_S3_SECRET_ACCESS_KEY
: ข้อมูลลับของรหัสรับรองความถูกต้อง
USERMEDIA_S3_SIGNING_ENDPOINT_URL
: จุดสิ้นสุดบริการจัดเก็บข้อมูลที่เข้าถึงได้แบบสาธารณะ
USERMEDIA_S3_REGION_NAME
: ภูมิภาคที่เก็บข้อมูล
USERMEDIA_S3_STORAGE_BUCKET_NAME
: ชื่อที่เก็บข้อมูล
USERMEDIA_S3_LOCATION
: ตำแหน่งภายในที่เก็บข้อมูลที่จะอัปโหลดไฟล์
ความแตกต่างที่ใหญ่ที่สุดเมื่อเปรียบเทียบกับการกำหนดค่า AWS S3 คือการเพิ่ม USERMEDIA_S3_SIGNING_ENDPOINT_URL
หากระบุไว้ ระบบจะใช้เมื่อสร้าง URL ที่ลงนามล่วงหน้า สามารถใช้เพื่อข้ามโดเมน CDN เป็นต้น
การกำหนดค่าฐานข้อมูลค่อนข้างตรงไปตรงมาหากใช้ฐานข้อมูลท้องถิ่นที่ไม่จำเป็นต้องใช้ SSL แต่รองรับฐานข้อมูลระยะไกลผ่านการเชื่อมต่อ SSL ด้วยเช่นกัน
DATABASE_URL
: URL ฐานข้อมูลที่จะใช้สำหรับการเชื่อมต่อฐานข้อมูล
DB_CLIENT_CERT
: ใบรับรองไคลเอ็นต์ที่เข้ารหัส Base64 เพื่อใช้สำหรับการเชื่อมต่อฐานข้อมูล จะถูกวางไว้ที่ client-cert.pem
DB_CLIENT_KEY
: คีย์ไคลเอ็นต์ที่เข้ารหัส Base64 เพื่อใช้สำหรับการเชื่อมต่อฐานข้อมูล จะถูกวางไว้ที่ client-key.pem
DB_SERVER_CA
: CA เซิร์ฟเวอร์ที่เข้ารหัส Base64 เพื่อใช้สำหรับการเชื่อมต่อฐานข้อมูล จะถูกวางไว้ที่ server-ca.pem
สามารถเข้าถึงฐานข้อมูลท้องถิ่นเริ่มต้นที่กำหนดค่าใน docker-compose.yml
ได้:
จากเชลล์: docker compose exec db psql -U django
จากเบราว์เซอร์: ไปที่ localhost:8080/?pgsql=db&username=django
และใช้รหัสผ่าน django
คุณสามารถเปิดใช้งานการแคชให้กับแบ็กเอนด์ Redis ได้โดยระบุ URL ของ Redis
REDIS_URL
: URL ฐานข้อมูล Redis ที่จะใช้สำหรับการแคช เช่น redis://some-host:6379/0
การทดสอบสามารถรันได้ด้วยคำสั่งนี้: docker compose exec django pytest
หากคุณต้องการสร้างฐานข้อมูลใหม่ ให้ใช้คำสั่งต่อไปนี้: docker compose exec django pytest --create-db --migrations
ไปป์ไลน์ CI ตรวจสอบว่า PR ใหม่ไม่ลดความครอบคลุมของการทดสอบ เนื่องจากกระบวนการนี้ค่อนข้างช้า คุณอาจต้องการตรวจสอบความครอบคลุมในพื้นที่ก่อนที่จะส่ง PR
หากต้องการอัปเดตไฟล์ความครอบคลุม ให้รัน docker compose exec django coverage run -m pytest
หากต้องการดูรายงานความครอบคลุม ให้เรียกใช้ docker compose exec django coverage report -m
การทดสอบการทำงานจะแบ่งออกเป็นผู้ปฏิบัติงานหลายคนบนไปป์ไลน์ CI และการแยกมีเป้าหมายเพื่อสร้างสมดุลการทดสอบระหว่างผู้ปฏิบัติงานที่มีอยู่ทั้งหมดโดยใช้เวลาเท่ากัน
เพื่อให้ดำเนินการได้อย่างแม่นยำ ฐานข้อมูลระยะเวลาการทดสอบจะต้องเป็นข้อมูลล่าสุด ดังนั้นจึงเป็นความคิดที่ดีที่จะอัปเดตฐานข้อมูลระยะเวลาการทดสอบเป็นระยะๆ
ฐานข้อมูลระยะเวลาการทดสอบสามารถอัปเดตได้โดยการรันชุดการทดสอบแบบเต็มด้วยแฟล็ก --store-durations
ดังนั้นตัวอย่างคำสั่งแบบเต็มจะเป็น
นักเทียบท่าเขียน exec django pytest --store-durations