لماذا نشر C# ليس مخيفًا بل مربحًا
\n\nتخيل: لقد كتبت تطبيق C# رائعًا — سواء كان بوت Telegram على .NET 8، أو واجهة برمجة تطبيقات ويب لمتجر إلكتروني، أو خدمة مصغرة لمعالجة المدفوعات. الكود مُصحح، الاختبارات ناجحة، كل شيء يعمل بسرعة محليًا. تبقى الخطوة الأخيرة — نشر هذا التطبيق على الإنترنت ليستخدمه أشخاص حقيقيون.
\n\nوهنا تبدأ المتعة الحقيقية. أين تنشر؟ على VPS، في حاويات Docker، أم مباشرة في السحابة؟ لكل خيار مزاياه وعيوبه ومخاطره. في هذه المقالة، سنستعرض جميع الأساليب الثلاثة مع أمثلة حقيقية لكود C#، لتتمكن من اتخاذ قرار مدروس.
\n\nالخيار 1: VPS — الكلاسيكية لمن يحب السيطرة الكاملة
\n\nالخادم الخاص الافتراضي (VPS) يشبه استئجار شقة في "بيت رقمي". لديك وصول root، تقوم بتثبيت نظام التشغيل بنفسك، وتضبط جدار الحماية، وتثبت .NET Runtime. مثالي لمن يريد سيطرة كاملة أو لديه متطلبات خاصة.
\n\nكيف تنشر C# على VPS: خطوة بخطوة
\n\nلنفترض أن لديك ASP.NET Core Web API. إليك الحد الأدنى من الإجراءات:
\n\n- \n
- اتصل عبر SSH بالخادم (Ubuntu 22.04). \n
- قم بتثبيت .NET Runtime: \n
wget https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh\nchmod +x dotnet-install.sh\n./dotnet-install.sh --channel 8.0\nexport PATH="$HOME/.dotnet:$PATH"\n\nقم ببناء التطبيق في وضع Release وانسخ الملفات إلى الخادم عبر SCP أو Rsync:
\n\ndotnet publish -c Release -o ./publish\nscp -r ./publish/* user@your-server:/var/www/myapp/\n\nقم بتشغيل التطبيق كخدمة systemd ليتم إعادة تشغيله تلقائيًا بعد الأعطال:
\n\n[Unit]\nDescription=My C# App\n\n[Service]\nWorkingDirectory=/var/www/myapp\nExecStart=/home/user/.dotnet/dotnet /var/www/myapp/MyApp.dll\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\n\nمزايا VPS: سيطرة كاملة، سعر منخفض (من $5/شهر)، يمكن تشغيل أي شيء — سواء Windows أو Linux.
\n\nعيوبه: أنت المسؤول عن الأمان والتحديثات والنسخ الاحتياطي. إذا تعطل التطبيق في الساعة 3 صباحًا — فأنت من سيتولى الأمر.
\n\nالخيار 2: Docker — الحاويات للمثاليين الكسالى
\n\nDocker هو وسيلة لتغليف تطبيق C# الخاص بك مع جميع التبعيات في حاوية خفيفة. "يعمل لدي" يتحول إلى "يعمل في كل مكان".
\n\nDockerfile لـ .NET 8
\n\nأنشئ ملف Dockerfile في جذر المشروع:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build\nWORKDIR /app\nCOPY *.csproj .\nRUN dotnet restore\nCOPY . .\nRUN dotnet publish -c Release -o out\n\nFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime\nWORKDIR /app\nCOPY --from=build /app/out .\nENV ASPNETCORE_URLS=http://+:80\nEXPOSE 80\nENTRYPOINT ["dotnet", "MyApp.dll"]\n\nقم ببناء الحاوية وتشغيلها:
\n\ndocker build -t my-csharp-app .\ndocker run -d -p 8080:80 --name myapp my-csharp-app\n\nالآن تطبيقك متاح على http://localhost:8080. إذا كنت بحاجة إلى عدة خدمات (قاعدة بيانات + API + واجهة أمامية)، استخدم Docker Compose:
version: '3.8'\nservices:\n api:\n build: .\n ports:\n - "5000:80"\n depends_on:\n - db\n db:\n image: postgres:15\n environment:\n POSTGRES_PASSWORD: example\n\nمزايا Docker: عزل، قابلية إعادة إنتاج، توسع سهل (فقط قم بتشغيل 5 حاويات إضافية)، توحيد البيئة.
\n\nعيوبه: تحتاج إلى فهم شبكات Docker و volumes، وقد يكون مبالغًا فيه لتطبيق بسيط.
\n\nالخيار 3: Cloud — تفويض البنية التحتية للمحترفين
\n\nالمنصات السحابية (Microsoft Azure، AWS، Google Cloud، بالإضافة إلى النظائر الروسية — Yandex Cloud، VK Cloud) تتولى إدارة الخوادم، موازنة التحميل،