Thunderstore 是一個模組資料庫和下載模組的 API。
將.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
) 並配置從網站到社群的對應。您可以使用createsuperuser
Django 管理指令(類似 migrate 的運作方式)建立一個超級使用者帳戶,以獲得對管理面板的存取權。
要將網站連接到社區,您需要:
確保至少存在一個社群物件或創建一個( Risk of Rain 2
應自動建立)
確保至少存在一個 Site 物件或建立一個
使網站物件的domain name
屬性與您用於連接到開發環境的網域屬性相符
建立一個新的社區站點對象,將兩者連結在一起
有一個腳本用於使用測試資料填充本地資料庫。您可以按如下方式運行它:
docker compose exec django python manage.py create_test_data
在本機開發中,minio用於S3相容的文件儲存。您可以使用thunderstore:thunderstore
憑證透過 http://localhost:9000/ 存取它
可以從/api/docs/
查看 REST API swagger 文件。
目前,唯一相關的 API 是/api/v1/package/
,它列出了資料庫中的所有活動 mod。如有必要,也可以使用/api/v1/package/{uuid4}/
端點來取得特定的 mod,其中{uuid4}
替換為 mod 的 uuid4 值。
可以從/djangoadmin/
存取管理網站。要查看管理站點,您需要一個管理員帳戶。
假設正在使用 docker,則可以如下建立管理員帳戶:
docker compose exec django python manage.py createsuperuser
請注意,如果您在 Windows 上執行,則需要使用 winpty 來執行該命令。
DEBUG
:對於生產來說應該設定為 false 或根本不設定
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
也要確保 Site 物件指向thunderstore.localhost
或其某些子網域,例如test.thunderstore.localhost
。
SOCIAL_AUTH_SANITIZE_REDIRECTS
:如果要限制 OAuth 重定向域,請設定為True
。
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
:OAuth 應用程式的Client ID
值
SOCIAL_AUTH_GITHUB_SECRET
OAuth 應用程式的Client Secret
值
若要設定 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
:OAuth 應用程式的Client ID
值
SOCIAL_AUTH_DISCORD_SECRET
OAuth 應用程式的Client Secret
值
AWS S3 / Boto3 協定受到多個供應商和服務的支持,且此類實施可能會因提供者而異。
有關實現的更多詳細信息,請參閱 https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html。另請參閱 Thunderstore/core/settings.py 以了解目前實作的環境變數。
至少設定以下變數:
AWS_ACCESS_KEY_ID
:驗證金鑰 ID
AWS_SECRET_ACCESS_KEY
:身份驗證金鑰
AWS_S3_REGION_NAME
:儲存桶區域
AWS_S3_ENDPOINT_URL
:儲存服務端點
AWS_STORAGE_BUCKET_NAME
:儲存桶名稱
AWS_LOCATION
:儲存桶內上傳檔案的位置
AWS_S3_SECURE_URLS
:設定為 false 以停用 HTTPS,預設為啟用
usermedia API 透過利用 S3 相容的儲存預簽名 URL 來處理實際上傳。因此,用戶媒體後端也必須是 S3 相容的儲存後端。同樣,用戶媒體儲存後端可以配置環境變數:
USERMEDIA_S3_ENDPOINT_URL
:內部可存取的儲存服務端點
USERMEDIA_S3_ACCESS_KEY_ID
:驗證金鑰 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
:用於資料庫連線的 Base64 編碼伺服器 CA。將被放置到server-ca.pem
可以存取docker-compose.yml
中配置的預設本機資料庫:
從 shell: docker compose exec db psql -U django
從瀏覽器:導航到localhost:8080/?pgsql=db&username=django
並使用密碼django
您可以透過提供 redis URL 來啟用對 redis 後端的快取
REDIS_URL
:用於快取的redis資料庫URL,例如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
標誌來執行完整的測試套件來更新測試持續時間資料庫。所以一個完整的命令範例是
docker compose exec django pytest --store-durations