راهنمای انتقال امن امکانات Space به یک Space جدید (بدون خراب شدن)
این راهنما برای انتقال امکانات Space در حال اجرا:
Really-amin/Datasourceforcryptocurrency
به یک Space جدید نوشته شده است؛ بهطوری که مثل Space قبلی (Datasourceforcryptocurrency-2) به حالت Paused/Crash نرود.
مرجع Space اصلی: Datasourceforcryptocurrency
اصول طلایی (برای اینکه خراب نشود)
- Runtime را تغییر ندهید: اگر Space اصلی Docker است، Space جدید هم Docker باشد.
- پورت را ثابت نگه دارید: در HF Spaces پورت استاندارد 7860 است.
- Entry-point را دستکاری نکنید: اگر Dockerfile با
uvicorn hf_unified_server:appبالا میآید، همان را نگه دارید. - اول Space جدید را استیجینگ کنید: تا وقتی
/api/healthو صفحه اصلی OK نیست، Space جدید را عمومی نکنید.
روش ۱ (پیشنهادی و کمریسک): Duplicate Space
- داخل صفحه Space اصلی بروید:
- گزینه Duplicate Space را بزنید (اگر در UI نمایش داده شود).
- در تنظیمات Duplicate:
- SDK/Runtime = Docker
- Visibility طبق نیاز (Private برای تست بهتر است)
- صبر کنید تا Build کامل شود.
- بعد از بالا آمدن:
https://<new-space>.hf.space/api/healthباید 200 برگرداند.https://<new-space>.hf.space/docsباید باز شود (اگر docs فعال است).
مزیت: دقیقاً همان سورس و تنظیمات را کپی میکند و ریسک «خراب شدن در انتقال» حداقل میشود.
روش ۲: انتقال با Git (اگر Duplicate در دسترس نبود)
A) ساخت Space جدید
- یک Space جدید بسازید و Docker را انتخاب کنید.
B) انتقال سورس
- سورس Space اصلی را به Space جدید Push کنید (بدون تغییرات اولیه).
- بعد از Push، اجازه دهید Build انجام شود.
C) چکهای ضروری بعد از Deploy
GET /api/health→ وضعیت onlineGET /docs→ نمایش Swagger- تست چند endpoint سبک مثل:
GET /api/market/topGET /api/news?limit=5
چرا Space قبلی ممکن است Paused شده باشد؟
رایجترین علتها در Docker Spaces:
- Build fail به دلیل نسخههای نامشخص/ناسازگار dependencyها
- OOM / کمبود RAM (خصوصاً با پکیجهای سنگین مثل
torch) - Port mismatch (مثلاً اپ روی 8000 بالا آمده ولی HF انتظار 7860 دارد)
- Healthcheck fail (اگر healthcheck تعریف شده و endpoint پاسخ ندهد)
اگر خواستید بعد از انتقال امکانات جدید اضافه کنید
قاعده امن:
- هر تغییر را در یک commit کوچک انجام دهید.
- بعد از هر commit:
- Build logs را نگاه کنید
/api/healthرا تست کنید- فقط سپس تغییر بعدی را انجام دهید