Thunderstore adalah database mod dan API untuk mengunduh mod.
Salin .env.template
ke .env
dan modifikasi sesuai keinginan Anda - Jika Anda memiliki akses ke submodul python-packages
& sudah dikloning, pastikan untuk menyetel BUILD_INSTALL_EXTRAS
ke true
. Nilai lainnya tidak akan berfungsi. Mengubah pengaturan ini memerlukan pembangunan kembali lingkungan (misalnya dengan docker compose build
) agar dapat diterapkan.
Jalankan docker compose up
Jalankan docker compose exec django python manage.py migrate
di terminal lain
Jalankan docker compose exec django python manage.py shell
dan masukkan kode berikut:
dari Django.contrib.sites.models import SiteSite.objects.create(domain="thunderstore.localhost", name="Thunderstore")
Pastikan untuk mengganti localhost
dengan apa yang Anda gunakan untuk terhubung ke situs! Secara umum, Anda harus menggunakan thunderstore.localhost
sebagai domain utama untuk menangani pelingkupan auth dengan benar (lihat SESSION_COOKIE_DOMAIN
nanti)
Anda juga perlu menavigasi ke panel admin ( /djangoadmin
) dan mengonfigurasi pemetaan dari situs ke komunitas. Anda dapat membuat akun pengguna super dengan perintah manajemen Django createsuperuser
(mirip dengan bagaimana migrasi dijalankan) untuk mendapatkan akses ke panel admin.
Untuk menghubungkan situs ke komunitas, Anda perlu:
Pastikan setidaknya ada satu objek Komunitas atau buatlah ( Risk of Rain 2
harus dibuat secara otomatis)
Pastikan setidaknya ada satu objek Situs atau buatlah satu
Jadikan atribut domain name
objek situs cocok dengan yang Anda gunakan untuk menyambung ke lingkungan pengembangan Anda
Buat objek Situs Komunitas baru, hubungkan keduanya
Ada skrip untuk mengisi database lokal dengan data uji. Anda dapat menjalankannya sebagai berikut:
buruh pelabuhan menulis exec Django python kelola.py buat_test_data
Dalam pengembangan lokal, minio digunakan untuk penyimpanan file yang kompatibel dengan S3. Anda dapat mengaksesnya melalui http://localhost:9000/ dengan kredensial thunderstore:thunderstore
Dokumentasi kesombongan REST API dapat dilihat dari /api/docs/
.
Saat ini, satu-satunya API yang relevan adalah /api/v1/package/
, yang mencantumkan semua mod aktif dalam database. Mod tertentu juga dapat diambil jika perlu dengan titik akhir /api/v1/package/{uuid4}/
, dengan {uuid4}
diganti dengan nilai uuid4 mod.
Situs admin dapat diakses dari /djangoadmin/
. Untuk melihat situs admin, Anda memerlukan akun admin.
Dengan asumsi buruh pelabuhan sedang digunakan, akun admin dapat dibuat sebagai berikut:
docker compose exec django python manage.py createsuperuser
Perhatikan bahwa jika Anda menjalankan di Windows, Anda perlu menggunakan winpty untuk menjalankan perintah itu.
DEBUG
: Harus disetel ke false atau tidak sama sekali untuk produksi
SECRET_KEY
: String panjang dan acak, digunakan untuk meng-hash kata sandi dan data lainnya. Harus tetap dirahasiakan, seperti yang tersirat dari namanya.
ALLOWED_HOSTS
: Daftar nama host yang dipisahkan koma yang dapat dihubungkan dengan server ini. Misalnya beta.thunderstore.io
PRIMARY_HOST
: Nama publik server, seperti beta.thunderstore.io
PROTOCOL
: Protokol yang digunakan untuk membangun URL ke server. Baik https://
atau http://
.
REPOSITORY_MAX_PACKAGE_SIZE_MB
: Ukuran paket tunggal maksimum
REPOSITORY_MAX_PACKAGE_TOTAL_SIZE_GB
: Total ukuran file maksimum yang digunakan oleh paket
GUNICORN_WORKER_COUNT
: Digunakan untuk mengontrol berapa banyak pekerja gunicorn yang akan muncul
GUNICORN_LOG_LEVEL
: Digunakan untuk mengontrol level logging gunicorn
SESSION_COOKIE_DOMAIN
: Jika disetel, memungkinkan sesi dibagikan dalam domain dan subdomainnya. Misalnya: thunderstore.io
Untuk pengujian lokal, nilai yang direkomendasikan adalah:
SESSION_COOKIE_DOMAIN
: thunderstore.localhost
Pastikan juga objek Site mengarah ke thunderstore.localhost
atau beberapa subdomainnya, seperti test.thunderstore.localhost
.
SOCIAL_AUTH_SANITIZE_REDIRECTS
: Setel ke True
jika Anda ingin membatasi domain pengalihan OAuth.
SOCIAL_AUTH_ALLOWED_REDIRECT_HOSTS
: Daftar domain pengalihan OAuth yang diizinkan, digunakan jika SOCIAL_AUTH_SANITIZE_REDIRECTS
diaktifkan.
SOCIAL_AUTH_INIT_HOST
: Host yang digunakan untuk inisialisasi dan panggilan balik autentikasi sosial, terlepas dari host mana pengguna saat ini berada. Jika tidak disetel, nilai defaultnya sama dengan AUTH_EXCLUSIVE_HOST
. Jika tidak ada yang disetel, defaultnya adalah host permintaan.
AUTH_EXCLUSIVE_HOST
: Nama host/domain yang secara eksklusif akan digunakan untuk logika terkait autentikasi, seperti proses autentikasi sosial. Jika tidak disetel, tidak ada host yang diperlakukan sebagai host autentikasi eksklusif.
Untuk pengujian lokal, nilai yang direkomendasikan adalah:
AUTH_EXCLUSIVE_HOST
: auth.thunderstore.localhost
SOCIAL_AUTH_SANITIZE_REDIRECTS
: auth.thunderstore.localhost,thunderstore.localhost
Untuk menyiapkan GitHub OAuth, buka pengaturan di GitHub (baik pengaturan pribadi atau organisasi), dan dari bawah Developer Settings
pilih OAuth Apps
.
Buat Aplikasi OAuth baru, dan gunakan {AUTH_EXCLUSIVE_HOST}/auth/complete/github/
sebagai URL panggilan balik Otorisasi, dengan {AUTH_EXCLUSIVE_HOST}
diganti dengan nilai yang digunakan untuk setelan AUTH_EXCLUSIVE_HOST
. Misalnya untuk lokal Anda bisa menggunakan http://auth.localhost/auth/complete/github/
, sedangkan untuk lingkungan langsung https://auth.thunderstore.dev/auth/complete/github/
Setelah membuat aplikasi OAuth, Anda juga harus menyediakan variabel lingkungan berikut ke aplikasi:
SOCIAL_AUTH_GITHUB_KEY
: Nilai Client ID
aplikasi OAuth
SOCIAL_AUTH_GITHUB_SECRET
Nilai Client Secret
dari aplikasi OAuth
Untuk menyiapkan Discord OAuth, buka panel pengembang Discord, dan buat aplikasi OAuth baru. Tambahkan URL callback ke {AUTH_EXCLUSIVE_HOST}/auth/complete/discord/
, dengan {AUTH_EXCLUSIVE_HOST}
diganti dengan nilai yang digunakan untuk setelan AUTH_EXCLUSIVE_HOST
. Misalnya untuk lokal Anda bisa menggunakan http://auth.localhost/auth/complete/discord/
, sedangkan untuk lingkungan langsung https://auth.thunderstore.dev/auth/complete/discord/
SOCIAL_AUTH_DISCORD_KEY
: Nilai Client ID
aplikasi OAuth
SOCIAL_AUTH_DISCORD_SECRET
Nilai Client Secret
dari aplikasi OAuth
Protokol AWS S3 / Boto3 didukung oleh beberapa vendor dan layanan, dan implementasinya mungkin berbeda-beda bergantung pada penyedia.
Merujuk ke https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html untuk rincian lebih lanjut mengenai penerapannya. Lihat juga thunderstore/core/settings.py untuk mengetahui variabel lingkungan apa yang saat ini diterapkan.
Setidaknya atur variabel berikut:
AWS_ACCESS_KEY_ID
: ID kunci autentikasi
AWS_SECRET_ACCESS_KEY
: Rahasia kunci autentikasi
AWS_S3_REGION_NAME
: Wilayah keranjang penyimpanan
AWS_S3_ENDPOINT_URL
: Titik akhir layanan penyimpanan
AWS_STORAGE_BUCKET_NAME
: Nama keranjang
AWS_LOCATION
: Lokasi di dalam keranjang tempat mengunggah file
AWS_S3_SECURE_URLS
: Setel ke false untuk menonaktifkan HTTPS, diaktifkan secara default
API media pengguna bekerja dengan memanfaatkan URL penyimpanan yang kompatibel dengan S3 untuk menangani unggahan sebenarnya. Oleh karena itu, backend media pengguna juga harus merupakan backend penyimpanan yang kompatibel dengan S3. Demikian pula, backend penyimpanan media pengguna dapat dikonfigurasi dengan variabel lingkungan:
USERMEDIA_S3_ENDPOINT_URL
: Titik akhir layanan penyimpanan yang dapat diakses secara internal
USERMEDIA_S3_ACCESS_KEY_ID
: ID kunci autentikasi
USERMEDIA_S3_SECRET_ACCESS_KEY
: Rahasia kunci autentikasi
USERMEDIA_S3_SIGNING_ENDPOINT_URL
: Titik akhir layanan penyimpanan yang dapat diakses publik
USERMEDIA_S3_REGION_NAME
: Wilayah keranjang penyimpanan
USERMEDIA_S3_STORAGE_BUCKET_NAME
: Nama keranjang penyimpanan
USERMEDIA_S3_LOCATION
: Lokasi di dalam keranjang tempat mengunggah file
Perbedaan terbesar dibandingkan konfigurasi AWS S3 adalah penambahan USERMEDIA_S3_SIGNING_ENDPOINT_URL
. Jika disediakan, ini akan digunakan saat membuat URL yang telah ditandatangani sebelumnya. Dapat digunakan untuk mem-bypass domain CDN misalnya.
Konfigurasi database cukup mudah jika menggunakan database lokal yang tidak memerlukan SSL, namun database jarak jauh melalui koneksi SSL juga didukung.
DATABASE_URL
: URL database yang digunakan untuk koneksi database
DB_CLIENT_CERT
: Sertifikat klien berkode Base64 yang akan digunakan untuk koneksi database. Akan ditempatkan ke client-cert.pem
DB_CLIENT_KEY
: Kunci klien berkode Base64 yang akan digunakan untuk koneksi database. Akan ditempatkan ke client-key.pem
DB_SERVER_CA
: Server CA berkode Base64 yang akan digunakan untuk koneksi database. Akan ditempatkan ke server-ca.pem
Basis data lokal default yang dikonfigurasi di docker-compose.yml
dapat diakses:
Dari shell: docker compose exec db psql -U django
Dari browser: navigasikan ke localhost:8080/?pgsql=db&username=django
dan gunakan kata sandi django
Anda dapat mengaktifkan caching ke backend redis dengan memberikan URL redis
REDIS_URL
: URL database redis yang akan digunakan untuk caching, misalnya redis://some-host:6379/0
Pengujian dapat dijalankan dengan perintah ini: docker compose exec django pytest
Jika Anda perlu membuat ulang ke database, gunakan yang berikut: docker compose exec django pytest --create-db --migrations
Pipeline CI memeriksa bahwa PR baru tidak menurunkan cakupan pengujian. Karena proses ini agak lambat, Anda mungkin ingin memeriksa cakupannya secara lokal sebelum mengirimkan PR.
Untuk memperbarui file cakupan, jalankan docker compose exec django coverage run -m pytest
Untuk melihat laporan cakupan, jalankan docker compose exec django coverage report -m
Uji coba ini dibagi ke beberapa pekerja di jalur CI, dan pemisahan tersebut bertujuan untuk menyeimbangkan pengujian di seluruh pekerja yang tersedia dalam jumlah konsumsi waktu yang sama.
Agar dapat melakukannya secara akurat, database durasi tes harus mutakhir. Oleh karena itu, ada baiknya untuk memperbarui database durasi tes sesekali.
Basis data durasi pengujian dapat diperbarui dengan menjalankan rangkaian pengujian lengkap dengan flag --store-durations
. Jadi contoh perintah lengkapnya adalah
buruh pelabuhan menulis exec Django pytest --store-durations