بسم الله ارحمن الرحیم
برای اولین بار قصد دارم یک وب اپلیکشن که با استفاده از فریم ورک asp dotnet توسعه داده ام را روی یک سرور منتشر کنم..
اول باید روی سرور skd و runtime مربوط به فریم ورک دات نت را روی سرور لینوکسی نصب کنم.مایکروسافت در لینک زیر اموزش نصب رو برای هر کدام از توزیع های لینوکس قرار داده که چالش خاصی هم نداره.
https://learn.microsoft.com/en-us/dotnet/core/install/linux
در قدم بعدی باید در پوشه برنامه از دستور زیر استفاده کنیم تا یک پوشه انتشار (publish) که شامل نسخه نهایی برنامه شما است بسازد.به روش زیر عمل کنید.
dotnet publish -c Release -o /path/to/publish/folder
بعد از فلگ -o مسیری که میخواهید فایل ها در انجا ایجاد شود را انتخاب کنید.
دستور dotnet publish برنامه را کامپایل میکند، از وابستگیهای آن که در فایل پروژه مشخص شده است، میگذرد و مجموعهای از فایلهای حاصل را در یک پوشه منتشر میکند. خروجی شامل موارد زیر است:
- کد Intermediate Language (IL) در یک اسمبلی با پسوند dll. - فایل .deps.json که شامل تمام وابستگیهای پروژه است.
- فایل .runtimeconfig.json که مشخص میکند کدام نسخه از shared runtime برنامه انتظار میرود و همچنین سایر گزینههای پیکربندی برای runtime (مانند نوع garbage collection).
- وابستگیهای برنامه که از کش NuGet به پوشه خروجی کپی میشوند.
- خروجی دستور dotnet publish آماده استفاده در یک سیستم میزبان (مانند سرور، کامپیوتر شخصی، مکینتاش، لپتاپ) برای اجرا میباشد. این تنها روشی است که به صورت رسمی برای آمادهسازی برنامه برای نصب و استفاده است. بسته به نوع نصبی که در پروژه مشخص شده است، ممکن است سیستم میزبان دارای shared runtime .NET نصب شده باشد یا نباشد. برای کسب اطلاعات بیشتر، به مقاله Publish .NET apps with the .NET CLI مراجعه کنید.
حالا به پوشه ایی که به عنوان خروجی انتخاب کرده اید بروید و فایل اجرایی برنامه را با استفاده از دستور dotnet اجرا کنید.مثلا اگر اسم برنامه شما myapp باشد فایل اجرایی با نام myapp.dll را پیدا کنید و دستور زیر را اجرا کنید.
dotnet myapp.dll
حالا برنامه شما روی پورت که مشخص کرده ایید اجرا میشود.اگر به تنظیمات دست نزده باشید برنامه روی پورت 5000 اجرا میشود.
بعد از این بهتر است که برنامه را تبدیل به یک سروریس لینوکسی کنید تا در زمینه اجرا شود و هنگام ریست شدن به صورت خودکار بالا بیاید. اما قبل از آن با استفاده از اموزش زیر یک reverse proxy ایجاد و Sll برای سرور خود بگیرید.
تنظیم nginx به عنوان reverse proxy و دریافت ssl رایگان
برای ساخت سرویس باید یک فایل در مسیر sudo nano /etc/systemd/system/yourapp.service ایجادکنید ولی بجای yorapp نام موردنظر خود را بنویسید.
درون فایل سرویسی که ساختید تنظیمات زیر را اعمال کنید
[Unit]
Description=توضحیات برنامه را اینجا بنویسید
[Service]
WorkingDirectory=/path/to/deployment/folder مسیر برنامه
ExecStart=/usr/bin/dotnet /path/to/deployment/folder/yourapp.dll مسیر فایل اجرایی
Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT
SyslogIdentifier=dotnet-yourapp
User=www-data نام یوزری که برنامه را اجرا میکند
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
حالا با استفاده از دستورات زیر میتوانید این سرویس را اجرا کنید
sudo systemctl enable yourapp.service
sudo systemctl start yourapp.service
یکی از مشکلاتی که من در مسیر منتشر کردن برنامه داشتم درست کار نکردن دیتا بیس بود.من از sqlite3 استفاده میکردم ولی در فایل ریلیز این دیتا بیس کار نمیکرد.برای حل این مشکل دیتا بیس را به صورت دستی از پوشه توسعه به پوشه انتشار منتقل کردم و مشکل حل شد ولی قطعا این راه حل خوبی نیست و باید دلیل این مشکل را پیدا کنم.