[{"data":1,"prerenderedAt":156},["ShallowReactive",2],{"seo-verification":3,"blog-نشر-تطبيق-fastapi-على-vps-ma-ar":6,"promo-bar-likely":155},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-نشر-تطبيق-fastapi-على-vps-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":34,"sections":35,"ctaTitle":96,"ctaBody":97,"ctaButton":98,"ctaUrl":99,"relatedPosts":100},45,"نشر-تطبيق-fastapi-على-vps",{"fr":12,"en":13,"ar":10,"es":14},"deployer-fastapi-vps","deploy-a-fastapi-application-on-a-vps","desplegar-una-aplicacion-fastapi-en-un-vps","نشر FastAPI على VPS: الدليل الكامل للإنتاج","انشر FastAPI على VPS مع Docker متعدد المراحل وGunicorn وPostgreSQL وCI\u002FCD وMониторинг. دليل Python شامل للإنتاج 2025.",10,4,false,"2026-05-06T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":18,"name":23,"slug":24,"color":25,"icon":26},"التطوير","developpement","bg-warning\u002F10 text-warning","dev",[28],{"id":18,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdeployer-fastapi-vps-poster.svg",{"categorySlug":23,"appSlug":33},"fastapi","‏فرض FastAPI نفسه كإطار عمل Python المفضّل لواجهات API السريعة والمُنمَّطة (typed)، بفضل دعمه الأصيل للعمل غير المتزامن ولوثائق OpenAPI. ونشره على VPS الخاص بك يمنحك التحكم في عدد الـworkers وفي WebSocket وزمن الاستجابة، دون سقف تفرضه خدمة مُدارة. يغطي هذا الدليل إجمالية النشر الإنتاجي: الحاوية متعددة المراحل، وقاعدة البيانات مع ترحيل Alembic، وCI\u002FCD الآلي، واستكشاف الأخطاء الشائعة وإصلاحها.",[36,40,50,53,78,81,84,87,90,93],{"type":37,"title":38,"body":39},"h2","لماذا تستضيف FastAPI ذاتيًا على VPS؟","يستمد FastAPI كل أدائه من نموذج ASGI غير المتزامن: اتصالات WebSocket دائمة، وبث للاستجابات، واستدعاءات متزامنة لخدمات أخرى. وغالبًا ما تقطع منصات serverless الاتصالات الطويلة وتفوتر كل طلب، مما يضرّ بواجهة API عالية الإنتاجية أو تعمل في الوقت الفعلي. على VPS، تشغّل Uvicorn بإدارة Gunicorn بعدد workers يساوي عدد الأنوية، وتُبقي الاتصالات مفتوحة طالما لزم الأمر، وتضع Nginx في الواجهة لأجل TLS والتخزين المؤقت (buffering). كما تتحكم في مجمّع الاتصالات نحو PostgreSQL وفي ذاكرة Redis المؤقتة، وهما رافعتان أساسيتان عندما يرتفع الحِمل — أمّا المعدّل الذي يُتحمَّل فعليًا فيُقاس على حركتك أنت.",{"type":41,"title":42,"items":43},"ul","فوائد ملموسة لاستضافة FastAPI ذاتيًا",[44,45,46,47,48,49],"‏WebSockets وServer-Sent Events دون قطع الاتصال أو timeout مفروض.","ضبط دقيق لـworkers الخاصة بـUvicorn\u002FGunicorn وفق عدد أنوية VPS.","لا بدء بارد (cold start): تبقى العملية قائمة بين طلب وآخر.","وثائق Swagger وReDoc تُقدَّم داخليًا، متاحة أو محمية حسب رغبتك.","تكامل مباشر مع مجمّع PostgreSQL غير متزامن (asyncpg) ومع Redis.","تكلفة ثابتة بغض النظر عن عدد استدعاءات API، مثالية لخلفية (backend) إنتاجية.",{"type":37,"title":51,"body":52},"المتطلبات المسبقة للعتاد والبرمجيات والإصدارات","واجهة FastAPI خفيفة: يكفي 1 vCPU و1 غيغابايت من ذاكرة RAM للبدء، لكن استهدف **2 vCPU و2 غيغابايت** بمجرد إضافة قاعدة بيانات وذاكرة تخزين مؤقت على نفس VPS. للحِمل المستمر (أكثر من 100 طلب\u002Fثانية)، اشترط 4 vCPU و4 غيغابايت على الأقل.\n\nالإصدارات الموصى بها في 2025: **Python 3.11+** (3.12 للأداء الأقصى)، **FastAPI 0.115+** (دعم كامل لـPydantic v2 وتعليقات Python 3.10+)، **Uvicorn 0.30+** (إصلاحات استقرار event loop). ثبِّت عبر Docker مع صورة `python:3.12-slim`، أو من المستودع الرسمي بـ`pip install fastapi[standard]>=0.115 uvicorn[standard]>=0.30 gunicorn>=22.0`.\n\nمن جهة البنية التحتية: Docker Engine 24+، Docker Compose v2 (plugin متكامل، `docker compose`)، Nginx 1.24+ كبروكسي عكسي، ونطاق مُوجَّه نحو VPS للحصول على شهادة TLS. نظام Ubuntu 22.04\u002F24.04 LTS هو الأساس الموصى به؛ Debian 12 يعمل أيضًا.",{"type":54,"title":55,"steps":56},"steps","نشر FastAPI خطوة بخطوة",[57,60,63,66,69,72,75],{"title":58,"body":59},"تهيئة VPS والتطبيق","اتصل عبر SSH، وثبِّت Docker، واستنسخ مستودعك، وأنشئ ملف `.env` من النموذج `.env.example` المُرفق بمشروعك. يجب أن يحتوي هذا الملف على الحد الأدنى:\n\n```bash\nDATABASE_URL=postgresql+asyncpg:\u002F\u002Fuser:password@db:5432\u002Fappdb\nREDIS_URL=redis:\u002F\u002Fredis:6379\u002F0\nSECRET_KEY=changeme-in-production\nCORS_ORIGINS=[\"https:\u002F\u002Fyourdomain.com\"]\nENVIRONMENT=production\n```\n\nتأكّد من أن نقطة الدخول تكشف فعلًا `app = FastAPI()` وأن التطبيق يُحمِّل إعداداته من متغيرات البيئة (لا تُكتب أبدًا في الكود مباشرة).",{"title":61,"body":62},"التعبئة في حاوية باستخدام Dockerfile متعدد المراحل","يفصل النهج متعدد المراحل مرحلة البناء (تصريف الاعتماديات، توليد wheels) عن صورة وقت التشغيل، مما يُقلّص الحجم النهائي بنسبة 60 إلى 80% ويُزيل أدوات التصريف من سطح الهجوم:\n\n```dockerfile\n# ── Stage 1 : build ──────────────────────────────────────\nFROM python:3.12-slim AS builder\nWORKDIR \u002Fapp\nCOPY requirements.txt .\nRUN pip install --upgrade pip && \\\n    pip wheel --no-cache-dir --wheel-dir \u002Fwheels -r requirements.txt\n\n# ── Stage 2 : runtime ────────────────────────────────────\nFROM python:3.12-slim\nWORKDIR \u002Fapp\nCOPY --from=builder \u002Fwheels \u002Fwheels\nRUN pip install --no-cache-dir \u002Fwheels\u002F* && rm -rf \u002Fwheels\nCOPY . .\nEXPOSE 8000\nCMD [\"gunicorn\", \"main:app\", \"-k\", \"uvicorn.workers.UvicornWorker\",\n     \"--bind\", \"0.0.0.0:8000\", \"--workers\", \"4\",\n     \"--timeout\", \"120\", \"--keep-alive\", \"5\"]\n```\n\nأضف نقطة نهاية `\u002Fhealth` في تطبيقك لفحوصات السلامة:\n\n```python\n@app.get(\"\u002Fhealth\")\nasync def health():\n    return {\"status\": \"ok\"}\n```",{"title":64,"body":65},"ضبط workers في Gunicorn بالشكل الأمثل","صيغة `(2 × الأنوية) + 1` هي نقطة الانطلاق لـworkers الـ**CPU-bound**. بما أن FastAPI هو ASGI\u002Fغير متزامن، يتعامل كل worker مع طلبات متعددة تزامنيًا عبر event loop — للأحمال الـ**I\u002FO-bound** النموذجية (استدعاءات قاعدة البيانات، طلبات HTTP الخارجية)، النطاق `الأنوية + 1` إلى `2 × الأنوية` أنسب.\n\nمرِّر القيمة عبر متغير بيئة لتعديلها دون إعادة بناء الصورة:\n\n```bash\nWEB_CONCURRENCY=4  # في .env أو docker-compose.yml\n```\n\n```dockerfile\nCMD [\"gunicorn\", \"main:app\", \"-k\", \"uvicorn.workers.UvicornWorker\",\n     \"--bind\", \"0.0.0.0:8000\",\n     \"--workers\", \"${WEB_CONCURRENCY:-4}\"]\n```\n\nتحت الحِمل العالي، راقب استخدام CPU لكل worker (`docker stats`) وعدد الطلبات المنتظرة في سجلات Gunicorn (`--access-logfile -`) قبل زيادة عدد الـworkers.",{"title":67,"body":68},"تنسيق الخدمات مع Docker Compose","في `docker-compose.yml`، عرِّف خدمة `api` وخدمة `db` بـPostgreSQL وخدمة `redis`. استخدم `depends_on` مع `condition: service_healthy` كي تنتظر الـAPI جاهزية قاعدة البيانات قبل أن تبدأ:\n\n```yaml\nservices:\n  api:\n    build: .\n    env_file: .env\n    ports: [\"8000:8000\"]\n    depends_on:\n      db:\n        condition: service_healthy\n      redis:\n        condition: service_started\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http:\u002F\u002Flocalhost:8000\u002Fhealth\"]\n      interval: 30s\n      retries: 3\n\n  db:\n    image: postgres:16-alpine\n    environment:\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n      POSTGRES_DB: appdb\n    volumes: [\"pgdata:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\"]\n    healthcheck:\n      test: [\"CMD\", \"pg_isready\", \"-U\", \"user\"]\n      interval: 10s\n      retries: 5\n\n  redis:\n    image: redis:7-alpine\n\nvolumes:\n  pgdata:\n```",{"title":70,"body":71},"وضع Nginx كبروكسي عكسي","اضبط كتلة خادم بـ`proxy_pass http:\u002F\u002Fapi:8000`، ولأجل WebSockets أضف الترويسات الضرورية. عطِّل التخزين المؤقت (buffering) للبث عند الحاجة:\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name api.yourdomain.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002Fapi:8000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_buffering off;\n    }\n}\n```",{"title":73,"body":74},"التأمين بشهادة TLS","احصل على شهادة Let's Encrypt عبر Certbot أو حاوية companion، وافرض HTTPS وأعِد توجيه HTTP. وتذكّر تقييد الوصول إلى `\u002Fdocs` و`\u002Fopenapi.json` في الإنتاج إذا لم تكن الـAPI عامة.",{"title":76,"body":77},"التشغيل والاختبار","ابدأ باستخدام `docker compose up -d`، وتحقّق من السلامة عبر نقطة النهاية `\u002Fhealth` التي أضفتها، واختبر الوثائق التفاعلية. راقب سجلات Uvicorn لضبط عدد الـworkers تحت الحِمل الفعلي.",{"type":79,"body":80},"tip","بالنسبة إلى المهام الطويلة (إرسال رسائل البريد الإلكتروني، معالجة الصور، الاستدعاءات الخارجية البطيئة)، لا تحجب حلقة الأحداث (event loop): انقلها إلى worker يعمل في الخلفية باستخدام `BackgroundTasks` للحالات البسيطة، أو إلى Celery\u002FARQ مع Redis للمعالجات الثقيلة. واجهة API تستجيب بسرعة وتفوّض العمل غير المتزامن تبقى سريعة الاستجابة حتى تحت التزامن العالي.",{"type":37,"title":82,"body":83},"قاعدة البيانات والترحيل","لتطبيقات FastAPI في الإنتاج، يوفر **asyncpg** مدمجًا مع **SQLAlchemy 2.x** (الوضع غير المتزامن) أفضل توازن بين الأداء وقابلية الصيانة. اضبط مجمّع الاتصالات وفق الحِمل المتوقع:\n\n```python\nfrom sqlalchemy.ext.asyncio import create_async_engine, AsyncSession\nfrom sqlalchemy.orm import sessionmaker\n\nengine = create_async_engine(\n    DATABASE_URL,\n    pool_size=10,        # اتصالات دائمة\n    max_overflow=20,     # اتصالات إضافية عند الذروة\n    pool_timeout=30,     # ثوانٍ قبل الخطأ\n    pool_recycle=1800,   # إعادة تدوير بعد 30 دقيقة لتجنب timeouts PostgreSQL\n    echo=False,\n)\n\nAsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)\n```\n\nأدخِل الجلسة في مساراتك عبر تبعية FastAPI:\n\n```python\nasync def get_db():\n    async with AsyncSessionLocal() as session:\n        yield session\n```\n\nلترحيل المخطط (schema)، **Alembic** هو الأداة المعيارية. هيِّئه في مشروعك (`alembic init migrations`) ثم اضبط `alembic.ini` للإشارة إلى `DATABASE_URL`. الأوامر الأساسية:\n\n```bash\n# توليد ترحيل من نماذج SQLAlchemy\nalembic revision --autogenerate -m \"add_users_table\"\n\n# تطبيق الترحيلات المعلّقة\nalembic upgrade head\n\n# التحقق من الحالة الحالية\nalembic current\n```\n\nفي الإنتاج، شغِّل `alembic upgrade head` **قبل** تشغيل الـAPI — أضفها كأمر تهيئة في `docker-compose.yml` أو في سكريبت بدء منفصل. لا تُشغِّل الترحيلات أبدًا من نسخ متعددة في آنٍ واحد.",{"type":37,"title":85,"body":86},"CI\u002FCD والنشر الآلي","تكفي خطوط أنابيب GitHub Actions بسيطة لمعظم مشاريع FastAPI: بناء الصورة، ودفعها إلى سجل، ونشرها على VPS عبر SSH مع zero-downtime.\n\n```yaml\n# .github\u002Fworkflows\u002Fdeploy.yml\nname: Deploy FastAPI\non:\n  push:\n    branches: [main]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Build & push Docker image\n        run: |\n          docker build -t ghcr.io\u002F${{ github.repository }}:${{ github.sha }} .\n          echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin\n          docker push ghcr.io\u002F${{ github.repository }}:${{ github.sha }}\n\n      - name: Deploy via SSH\n        uses: appleboy\u002Fssh-action@v1\n        with:\n          host: ${{ secrets.VPS_HOST }}\n          username: deploy\n          key: ${{ secrets.VPS_SSH_KEY }}\n          script: |\n            cd \u002Fopt\u002Fmyapp\n            export IMAGE_TAG=${{ github.sha }}\n            docker compose pull api\n            docker compose up -d --no-deps api\n            docker compose exec api alembic upgrade head\n```\n\nخيار `--no-deps` على `docker compose up` يُعيد تشغيل حاوية `api` فحسب دون المساس بـ`db` أو `redis`، مما يضمن **zero-downtime** للخدمات المساندة. للنشرات الأكثر متانة مع rollback فوري، تَوِّج صورك بـSHA الـcommit واحتفظ بآخر 3 نسخ محليًا.",{"type":37,"title":88,"body":89},"المراقبة والسجلات","يمكنك الوصول إلى سجلات Uvicorn مباشرةً عبر Docker:\n\n```bash\n# سجلات في الوقت الفعلي\ndocker compose logs -f api\n\n# آخر 100 سطر\ndocker compose logs --tail=100 api\n```\n\nللسجلات المهيكلة بصيغة JSON (قابلة للفهرسة بمجمِّع مثل Loki أو Elasticsearch)، استبدل مُسجِّل Python القياسي بـ**loguru** أو **structlog**:\n\n```python\nfrom loguru import logger\nimport sys\n\nlogger.remove()\nlogger.add(sys.stdout, format=\"{time} {level} {message}\", serialize=True)\n\n@app.middleware(\"http\")\nasync def log_requests(request, call_next):\n    logger.info(\"request\", method=request.method, url=str(request.url))\n    response = await call_next(request)\n    logger.info(\"response\", status=response.status_code)\n    return response\n```\n\nلكشف مقاييس Prometheus، أضف نقطة نهاية `\u002Fmetrics` بـ**prometheus-fastapi-instrumentator**:\n\n```python\nfrom prometheus_fastapi_instrumentator import Instrumentator\n\nInstrumentator().instrument(app).expose(app, endpoint=\"\u002Fmetrics\")\n```\n\nثم قيِّد `\u002Fmetrics` على شبكتك الداخلية من Nginx (`allow 127.0.0.1; deny all;`) لتفادي كشف المقاييس علنًا.",{"type":37,"title":91,"body":92},"استكشاف الأخطاء الشائعة وإصلاحها","‏**Worker timed out (pid XXXXX)** — أنهى Gunicorn worker لم يستجب ضمن مهلة `--timeout`. الأسباب الشائعة: مسار متزامن (`def` بدلًا من `async def`) يحجب event loop، أو عملية حجب (قراءة ملف، استدعاء شبكة) تُنفَّذ دون `asyncio.run_in_executor`. زيادة `--timeout` يُخفي المشكلة؛ الإصلاح الصحيح هو جعل المسار غير متزامن أو تفويض العمل الحاجب.\n\n‏**Address already in use (port 8000)** — عملية Gunicorn سابقة لا تزال نشطة. في Docker: `docker compose down` ثم `docker compose up -d` يُجبر على إعادة إنشاء الحاوية ويُحرّر المنفذ. تحقق بـ`docker ps -a` أنه لا تعمل حاوية zombie.\n\n‏**502 Bad Gateway بعد نشر** — أعاد Nginx توجيه الطلب إلى الـAPI أثناء إعادة تشغيلها. انتظر 10 إلى 15 ثانية حتى يؤكد فحص سلامة Docker أن الحاوية الجديدة `healthy` قبل اعتبار النشر مكتملًا. أضف `proxy_read_timeout 60;` في Nginx لاستيعاب عمليات البدء البطيئة.\n\n‏**CORS في الإنتاج: `No 'Access-Control-Allow-Origin' header`** — يخدم FastAPI الأصول (origins) المُعلَن عنها في `CORSMiddleware`. تحقق أن `CORS_ORIGINS` في ملف `.env` يحتوي على رابط الواجهة الأمامية بالضبط (البروتوكول + النطاق + المنفذ إن لم يكن قياسيًا، دون شرطة مائلة في النهاية). قيمة `[\"*\"]` تعمل في التطوير لكن لا يجب إرسالها إلى الإنتاج أبدًا.\n\n‏**رفض اتصال قاعدة البيانات عند البدء** — بدأت الـAPI قبل أن تصبح PostgreSQL جاهزة. `depends_on` مع `condition: service_healthy` في Docker Compose يحلّ هذا. في Kubernetes أو في نشرات بدون Compose، نفِّذ حلقة retry مع تراجع أسي (exponential backoff) في كود بدء التطبيق.",{"type":37,"title":94,"body":95},"نشر FastAPI بنقرة واحدة من Marketplace ServOrbit","تقدّم Marketplace ServOrbit قالب FastAPI Stack جاهزًا: Python 3.12 وUvicorn وGunicorn وNginx وPostgreSQL 16 تُثبَّت تلقائيًا على VPS عند الطلب. لا جلسة SSH للإعداد الأساسي — تصل مباشرة إلى خطوة استنساخ مستودعك وتشغيل Uvicorn. صفحة marketplace تحتوي المواصفات والحالات ودليل الاستخدام الأول.","انشر FastAPI Stack في دقائق","قالب ServOrbit FastAPI Stack يثبّت Python 3.12 وUvicorn وGunicorn وNginx وPostgreSQL 16 على VPS. شغّل واجهتك API فورًا.","نشر FastAPI Stack","\u002Fapplications\u002Fالتطوير\u002Ffastapi",[101,119,137],{"id":102,"slug":103,"slugs":104,"title":108,"excerpt":109,"readTime":18,"views":110,"isPinned":19,"noindex":19,"publishedAt":111,"updatedAt":112,"category":113,"categories":114,"featuredImage":29,"bgImage":30,"posterImage":116,"relatedSolution":117},5,"نشر-laravel-على-خادم-vps-دليل-الإنتاج",{"fr":105,"en":106,"ar":103,"es":107},"deployer-laravel-vps","deploying-laravel-on-a-vps-a-production-guide","desplegar-laravel-en-un-vps","نشر Laravel على خادم VPS: دليل الإنتاج","انقل Laravel إلى بيئة الإنتاج على خادم VPS: PHP وworkers والذاكرة المؤقتة وقاعدة البيانات وreverse proxy وHTTPS مُهيّأة بشكل نظيف.",1,"2026-02-09T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":18,"name":23,"slug":24,"color":25,"icon":26},[115],{"id":18,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fdeployer-laravel-vps-poster.svg",{"categorySlug":26,"appSlug":118},"laravel-stack",{"id":120,"slug":121,"slugs":122,"title":126,"excerpt":127,"readTime":128,"views":110,"isPinned":19,"noindex":19,"publishedAt":129,"updatedAt":130,"category":131,"categories":132,"featuredImage":29,"bgImage":30,"posterImage":134,"relatedSolution":135},43,"نشر-تطبيق-nodejs-على-vps",{"fr":123,"en":124,"ar":121,"es":125},"deployer-nodejs-vps","deploy-a-nodejs-application-on-a-vps","desplegar-una-aplicacion-nodejs-en-un-vps","نشر تطبيق Node.js على VPS","انشر تطبيق Node.js في بيئة الإنتاج على VPS: PM2 وبروكسي عكسي Nginx وشهادة SSL من Let's Encrypt وبدء تشغيل تلقائي عند الإقلاع.",8,"2026-05-08T00:00:00+00:00","2026-11-08T01:13:12+00:00",{"id":18,"name":23,"slug":24,"color":25,"icon":26},[133],{"id":18,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fdeployer-nodejs-vps-poster.svg",{"categorySlug":23,"appSlug":136},"nodejs-stack",{"id":138,"slug":139,"slugs":140,"title":144,"excerpt":145,"readTime":146,"views":147,"isPinned":19,"noindex":19,"publishedAt":148,"updatedAt":21,"category":149,"categories":150,"featuredImage":29,"bgImage":30,"posterImage":152,"relatedSolution":153},44,"نشر-تطبيق-django-على-vps",{"fr":141,"en":142,"ar":139,"es":143},"deployer-django-vps","deploy-a-django-application-on-a-vps","desplegar-una-aplicacion-django-en-un-vps","نشر تطبيق Django على VPS","انشر Django على VPS: Gunicorn وNginx وPostgreSQL وDocker وSSL. دليل كامل لمطوّري Python الراغبين في الاستضافة الذاتية.",3,7,"2026-05-07T00:00:00+00:00",{"id":18,"name":23,"slug":24,"color":25,"icon":26},[151],{"id":18,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fdeployer-django-vps-poster.svg",{"categorySlug":23,"appSlug":154},"django",true,1794270311466]