استقرار سایت ASP net Core در لینوکس یکی از مهم ترین مراحل برای میزبانی (Hosting) وب سایت های نوشته شده برپایه پلتفرم net core میباشد. پلتفرم net core یک پلتفرم متن باز (Open Source) است که توسط مایکروسافت (Microsoft) ارائه شده. این پلتفرم بصورت Cross-Platform بوده و به همین علت میتوان پروژه های تحت net core را در سیستم عامل های لینوکس و مک نیز استفاده کرد. در مقالات قبلی با اجرای پروژه ASP.net Core در وب سرور IIS برروی سیستم عامل ویندوز سرور 2019 آشنا شدیم. در این مقاله با نحوه استقرار سایت ASP net Core در لینوکس، روی وب سرور Apache آشنا خواهیم شد.

ابتدا باید همانند قبل، پروژه را Publish کنیم.

مراحل استقرار سایت ASP net Core در لینوکس

استقرار سایت ASP.net Core در لینوکس

برای استقرار سایت ASP net Core در لینوکس مراحل زیر را انجام میدهیم.

نصب ماژول ها و پکیج های net core در لینوکس

فایل DLL پروژه ما آماده شده و حالا باید آن را در محیط لینوکس اجرا کنیم.

ابتدا باید با برخی مسائل آشنا شویم. پروژه های .net روی وب سرور Kestrel اجرا میشوند ولی ما در محیط لینوکس، از Apache یا Nginx استفاده میکنیم که بصورت یک proxy عمل کرده و ترافیک را از خارج ماشین کنترل کرده و به سمت سرور Kestrel هدایت میکند. بنابراین ما سرور Apache یا Nginx را به عنوان لایه میانی داریم.

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

در ابتدا باید پکیج های net core را نصب کنیم، دستورات زیر را اجرا میکنیم:

  • sudo apt update
  • sudo apt install apt-transport-https
  • sudo apt update
  • sudo apt install dotnet-sdk-3.1
  • sudo apt install dotnet-runtime-3.1
  • sudo apt install aspnetcore-runtime-3.1

(بجای 3.1 میتوانید ورژن مورد نظر خود را وارد کنید، حتمآ نسخه هماهنگ با پروژه خود را نصب نمایید)

نصب و راه اندازی سرور Apache

حال ما تمام پیش نیاز ها را داریم (پکیج های dotnet). سپس باید Apache را نصب کنیم.

  • sudo apt install apache2
  • sudo a2enmod proxy proxy_http proxy_html proxy_wstunnel
  • sudo a2enmod rewrite

با دستور اول پکیج apache2 نصب شده و با دستورات بعدی ماژول های مورد نیاز برای پروکسی. حالا باید یک فایل conf بسازیم تا پروکسی خود را روی Apache اجرا کنیم. یک فایل با دستور زیر ایجاد میکنیم:

sudo nano /etc/apache2/conf-enabled/netcore.conf:

سپس محتویات زیر را داخل آن قرار میدهیم:


<VirtualHost *:80>
ServerName www.DOMAIN.COM
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/netcore-error.log
CustomLog /var/log/apache2/netcore-access.log common
</VirtualHost>

سرویس apache را ریستارت میکنیم:

  • sudo service apache2 restart
  • sudo apachectl configtest

راه اندازی و اجرای سرویس

فایل DLL پروژه را به پوشه تعیین شده انتقال دهید (دستور زیر):

sudo cp -a ~/release/ /var/netcore/

یک فایل سرویس برای پروژه دات نت ایجاد میکنیم.

sudo nano /etc/systemd/system/ServiceFile.service

محتویات زیر را داخل آن کپی میکنیم تا برنامه ما را اجرا کند:


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

در خط پنجم، Application.dll را با نام فایل DLL خود جایگزین میکنیم.

حالا سرویس ساخته شده را فعال و سپس اجرا میکنیم:


sudo systemctl enable {Service Name}
sudo systemctl start {Service Name}

بجای {Service Name} نام سرویس خود (فایلی که ساختیم) را قرار میدهیم.

اکنون پروسه استقرار سایت ASP net Core در لینوکس انجام شده و پروکسی سرور و سرور Kestrel ما درحال اجرا میباشند و میتوانیم از طریق IP دستگاه و پورت 80 به آن متصل شویم.

برای بروزرسانی پروژه خود، کافیست سرویس را متوقف کرده و فایل DLL جدید را جایگزین نمایید. سپس مجدد سرویس را اجرا کنید.