نشر تطبيق ASP.NET Core مع خادم MySQL باستخدام Nginx على أوبونتو 18.04
نظام أوبونتو هو أحد أشهر أنظمة التشغيل المستندة إلى لينكس التي تستخدم بشكل واسع في بيئات السيرفرات، حيث يتميز بسهولة استخدامه وأدائه العالي. في هذا المقال، سنتناول كيفية نشر تطبيق ويب باستخدام ASP.NET Core على خادم أوبونتو 18.04، مع إعداد قاعدة بيانات MySQL واستخدام Nginx كخادم ويب أمامي لإدارة التوجيه والتحميل.
1. التحضير المبدئي
قبل البدء في عملية نشر تطبيق ASP.NET Core، من المهم التأكد من أن جميع المكونات الأساسية على الخادم قد تم تثبيتها بشكل صحيح. في هذه الخطوات، سنحتاج إلى تثبيت أوبونتو 18.04 على الخادم، بالإضافة إلى مجموعة من الحزم والبرمجيات الضرورية مثل .NET Core وMySQL وNginx.
1.1 تحديث النظام
ابدأ بتحديث النظام لضمان أن جميع الحزم على الخادم محدثة. افتح الطرفية وأدخل الأوامر التالية:
bashsudo apt update sudo apt upgrade
1.2 تثبيت حزم أساسية
تأكد من تثبيت الأدوات الأساسية مثل curl وwget:
bashsudo apt install curl wget gnupg
2. تثبيت .NET Core
ASP.NET Core هو إطار عمل مفتوح المصدر لتطوير التطبيقات على الويب باستخدام لغة C#. لتثبيته على أوبونتو 18.04، يجب إضافة مستودع .NET Core وتثبيته باستخدام الأوامر التالية:
2.1 إضافة مستودع .NET Core
bashwget https://packages.microsoft.com/config/ubuntu/18.04/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
2.2 تثبيت حزم .NET Core
لتثبيت .NET SDK على أوبونتو 18.04، استخدم الأوامر التالية:
bashsudo apt update sudo apt install dotnet-sdk-6.0
يمكنك التحقق من تثبيت .NET Core بنجاح عبر الأمر:
bashdotnet --version
3. تثبيت MySQL
MySQL هو نظام إدارة قواعد بيانات شهير يستخدم لتخزين البيانات بشكل فعال. لتثبيته على أوبونتو 18.04، استخدم الأوامر التالية:
3.1 تثبيت MySQL
bashsudo apt install mysql-server
3.2 تأمين MySQL
بعد التثبيت، قم بتشغيل أداة تأمين MySQL لإعداد كلمة مرور للمستخدم الجذر وتطبيق إعدادات الأمان:
bashsudo mysql_secure_installation
3.3 التحقق من تشغيل MySQL
لتأكيد أن MySQL يعمل بشكل صحيح، استخدم الأمر:
bashsudo systemctl status mysql
4. إنشاء قاعدة بيانات وتكوين MySQL
الآن، يجب أن تقوم بإنشاء قاعدة بيانات لتطبيق ASP.NET Core الخاص بك. قم بالدخول إلى واجهة MySQL:
bashsudo mysql -u root -p
بعد إدخال كلمة المرور الخاصة بك، يمكنك إنشاء قاعدة بيانات باستخدام الأمر التالي:
sqlCREATE DATABASE myappdb;
ثم يمكنك إنشاء مستخدم جديد وتحديد الصلاحيات:
sqlCREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON myappdb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
5. نشر تطبيق ASP.NET Core
الآن بعد أن تم تثبيت .NET Core وMySQL، يمكننا نشر تطبيق ASP.NET Core على الخادم.
5.1 بناء تطبيق ASP.NET Core
في جهاز التطوير المحلي، يجب أولاً بناء التطبيق باستخدام أوامر .NET Core التالية:
bashdotnet publish -c Release -o /path/to/publish
5.2 نقل التطبيق إلى الخادم
استخدم scp أو أي أداة نقل أخرى لنقل الملفات إلى الخادم. على سبيل المثال:
bashscp -r /path/to/publish user@your-server-ip:/home/youruser/myapp
5.3 تشغيل التطبيق باستخدام Kestrel
يمكنك تشغيل التطبيق مباشرة باستخدام Kestrel، وهو خادم الويب المدمج في .NET Core. في الطرفية على الخادم، انتقل إلى مجلد التطبيق:
bashcd /home/youruser/myapp
dotnet MyApp.dll
ولكن بدلاً من تشغيل التطبيق مباشرة بهذا الشكل، نريد استخدام Nginx وSystemd لضمان تشغيل التطبيق بشكل مستمر.
6. إعداد Nginx كخادم عكسي
Nginx هو خادم ويب يستخدم عادة كخادم عكسي (reverse proxy) لتوجيه الطلبات إلى تطبيق ASP.NET Core. يمكن تكوينه بسهولة على أوبونتو 18.04.
6.1 تثبيت Nginx
لتثبيت Nginx، استخدم الأمر التالي:
bashsudo apt install nginx
6.2 تكوين Nginx
الآن، قم بإنشاء ملف تكوين جديد لـ Nginx لتوجيه الطلبات إلى تطبيق ASP.NET Core الخاص بك.
افتح ملف تكوين جديد باستخدام المحرر المفضل لديك (مثل nano):
bashsudo nano /etc/nginx/sites-available/myapp
ثم أضف التكوين التالي:
nginxserver {
listen 80;
server_name your_domain_or_IP;
location / {
proxy_pass http://localhost:5000; # Kestrel port
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
6.3 تفعيل تكوين Nginx
لتفعيل هذا التكوين، أنشئ رابطًا رمزيًا في المجلد sites-enabled:
bashsudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
ثم تحقق من صحة التكوين باستخدام:
bashsudo nginx -t
وأخيرًا، أعد تشغيل Nginx لتطبيق التغييرات:
bashsudo systemctl restart nginx
7. استخدام Systemd لتشغيل التطبيق
لتشغيل تطبيق ASP.NET Core بشكل دائم باستخدام Systemd، يجب إنشاء ملف وحدة (unit file) في /etc/systemd/system.
7.1 إنشاء ملف وحدة Systemd
افتح المحرر وأضف التكوين التالي:
bashsudo nano /etc/systemd/system/myapp.service
أضف محتويات الملف التالية:
ini[Unit]
Description=ASP.NET Core application
After=network.target
[Service]
WorkingDirectory=/home/youruser/myapp
ExecStart=/usr/bin/dotnet /home/youruser/myapp/MyApp.dll
Restart=always
# Specify a user to run the app
User=youruser
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
SyslogIdentifier=dotnet-myapp
LogLevel=Information
TimeoutStopSec=20
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
7.2 بدء الخدمة
بعد إنشاء ملف الوحدة، قم بتحميل التغييرات وتشغيل التطبيق:
bashsudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
8. التحقق من تشغيل التطبيق
بمجرد أن يبدأ تطبيقك باستخدام systemd وNginx، يمكنك التحقق من أنه يعمل بشكل صحيح عن طريق زيارة النطاق أو عنوان IP الخاص بالخادم في المتصفح.
إذا كان كل شيء قد تم بشكل صحيح، ستظهر صفحة الويب الخاصة بتطبيق ASP.NET Core الذي يعمل مع MySQL عبر Nginx.
9. إدارة الأخطاء ومراقبة التطبيق
من المهم دائمًا مراقبة سير العمل وتسجيل الأخطاء. يمكنك فحص سجلات Nginx عبر:
bashsudo tail -f /var/log/nginx/error.log
كما يمكنك التحقق من حالة تطبيق ASP.NET Core من خلال:
bashsudo systemctl status myapp
لإيقاف التطبيق:
bashsudo systemctl stop myapp
الخاتمة
بهذا الشكل، نكون قد انتهينا من نشر تطبيق ASP.NET Core مع خادم MySQL باستخدام Nginx على خادم أوبونتو 18.04. يعتبر هذا النوع من النشر من الخيارات الموثوقة والمرنة لتشغيل تطبيقات الويب في بيئات الإنتاج.

