دات نت کور

میزبانی .net core روی سرور لینوکس (Ubuntu)

میزبانی .net core روی سرور لینوکس (Ubuntu) چیزی بود که شاید تا چند سال پیش محال به نظر می رسید. تکنولوژی مرتبط با Microsoft بر روی سرور لینوکس! در واقع دو رقیب سنتی. اما از خیلی گذشته ها PHP برو روی ویندوز قابل راه اندازی بود. اما ASP.NET تنها بر روی ویندوز قابلیت میزبانی داشت.

قبل از شروع شاید بد نباشد که بگوییم یکی از ایرداهایی که سالها از مایکروسافت گرفته میشد همین عدم توسعه .net Framework بصورت cross platform بود. که البته بواقع ایراد بی جایی هم نبود. تا اینکه نهایتا در سال ۲۰۱۶ اولین نسخه از .net core رونمایی شد. این شد اولین قدم از حرکت به سوی cross platform شدن از سمت مایکروسافت. همین عامل به عنوان محرکی شد تا اقبال بیش از گذشته معطوف به مایکروسافت شود. داشتن یک IDE قدرتمند بنام Visual Studio و زبان دوست داشتی C#.

اخیرا به درخواست یکی از دوستان از بنده خواسته شد تا یک سایت که با .net core یا همان “دات نت کور” نسخه ۵ توسعه داده شده بود را روی یک سرور لینوکسی راه اندازی کنم. تا قبل از این تجربه از میزبانی .net core بر روی سرور لینوکسی، همیشه کدهای نوشته شده رو روی خود Windows و با استفاده از IIS میزبانی میکردیم.   تا اینکه این باز قرار شد از لینوکس برای این کار استفاده شود. نسخه Linux ی که برای این منظور در اختیار ما بود Ubuntu نسخه ۱۸٫۴ بود. طی کردن چند مرحله برای این میزبانی لازم بود که سعی میکنم ساده پوشش بدم.

طبعاً این کار، به سادگی میزبانی سایت PHP روی لینوکس نیست. اما خیلی هم کار پیچیده و زمان بری نبود. قطعاً با این تجربه دفعات بعد بسیار بهتر و با سرعت بالاتر این کار را انجام خواهم داد.

برای اولین قدم لازم است که با اجرای دستورات زیر Dependency  های مورد نیاز جهت میزبانی .net core را بر روی پلتفورم linux خودمون داشته باشیم. کار بسیار ساده است:

نصب Dependency های مورد نیاز:

wget https://packages.microsoft.com/config/ubuntu/19.10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

نصب Runtime های مورد نیاز:

sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install aspnetcore-runtime-5.0
sudo apt-get install dotnet-runtime-5.0

این کل کاری بود که برای نصب Dependecy های مورد نیاز .net core نیاز دارید.

نصب Apache روی لینوکس برای میزبانی :

توی مرحله بعد باید خود Apache نصب بشه که برای این کار کافیه دستور زیر اجرا بشه

sudo apt install apache2

و بعد اون این دستورات را هم وارد کنید. تمامی این دستورات برای فعال سازی یک سری از قابلیت های Apache هست که برای PHP و هم برای میزبانی .net core روی سرور لینوکسی مورد نیاز است.

sudo a2enmod rewrite
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod headers
sudo a2enmod ssl

Publish کردن پروژه :

خوب حالا لازم هست که از پروژه خودتون یکم Publish برای بارگذاری روی لینوکس بگیریم. برای این کار لازمه که تنظیمات بخش Publish را به شکل زیر تنظیم کنید. در نرم افزار Visual Studio از منوی Build روی گزینه Publish کلیک کنید و بعد روی More Action کلیک و Edit رو انتخاب کنید.

حالا تغییرات را مانند تصویر زیر ویرایش کنید:

تنظیمات VS برای Publish

تنظیمات VS برای پابلیش سایت مخصوص سرور لینوکس

نکته مهم اینجاست که باید حتما Target Runtime رو روی گزینه Linux-x64 قرار بدید. در غیر این صورت موفق به انجام موفق کار نمی شوید. در ضمن نسخه Target Framework مناسب را هم انتخاب نمایید.

حالا تمامی فایل های ساخته شده توسط Visual Studio را به یک آدرسی مانند آدرس زیر روی سرور لینوکس کپی کنید:

/var/www/html/myDotCoreSite

ایجاد سرویس لازم بر روی لینوکس:

خوب حالا لازمه که دستور زیر را وارد کنید و مواردی که در ادامه میاد را توی فایل وارد کنید:

vi /etc/systemd/system/myDotCoreSite

حالا مانند زیر تمامی متن را در فایل ساخته شده وارد کنید:(دقت کنید که MyProject.dll با توجه به نام پروژه شما متفاوت خواهد بود. این فایل در پوشه ای که پروژه در آن Publish شده قابل دسترسی است)

[Unit]
Description=ASP .NET Web Application
[Service]
WorkingDirectory=/var/www/html/myDotCoreSite
ExecStart=/usr/bin/dotnet /var/www/html/myDotCoreSite/MyProject.dll
Restart=always
RestartSec=10
SyslogIdentifier=netcore-demo
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Development
[Install]
WantedBy=multi-user.target

حالا باز اجرای دو دستور زیر سرویس شما اجرا و فعال می شود:

sudo systemctl enable myDotCoreSite.service
sudo systemctl start myDotCoreSite.service

تقریبا کار رو به اتمام هستش. کافیه یک فایل در مسیر زیر ایجاد کنید. این فایل مربوط به تنظیمات Apache هستش:

vi /etc/apache2/sites-avalable/myDotCoreSite.conf

و در داخل فایل هم اینها را وارد کنید:

<VirtualHost *:80>
ServerName myDotCoreSite
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /(.*) ws://127.0.0.1:5000/$1 [P]
ErrorLog /var/log/apache2/myDotCoreSite-error.log
CustomLog /var/log/apache2/myDotCoreSite-access.log common
</VirtualHost>

و سپس این دستور را اجرا کنید:

sudo a2ensite myDotCoreSite.conf
sudo service apache2 restart

حالا سایت  شما روی پورت ۸۰ سرور شما در دسترس است. بله! میزبانی .net core روی سرور لینوکس (Ubuntu) به همین سادگی!

به همین سادگی میتونید از سرور لینوکسی خودتون برای میزبانی .net core استفاده کنید. خیلی ها شاید به  این دلیل که این کار را خیلی سخت و طاغت فرسا میدونن قیدش را میزنن و ترجیح میدهند که سرورهای Windows تهیه کنند. که اللینخ این مورد هزینه های بیشتری به ما وارد میکند. زیرای مطمئنا برای داشتن ویندوز به سرور قوی تری احتیاج دارید.

دیدگاه شما

نشانی ایمیل شما منتشر نخواهد شد.