با سلام، من در این مقاله قصد دارم تا بعد از نصب Ubuntu server 20.04 به صورت ماشین مجازی در Virtual Box 6.1.18 پروژهی Asp .net 5 خودم رو روی Ubuntu قرار بدم. امیدوارم که مطالب برای شما مفید باشه.
نکته اینکه اگر شما پروژهای با Net Core 3.1 به بالا دارید هم به همین طریق میتونید روش استقرار به همین شکله.
من برای Publish پروژه Web API که با Net 5 نوشته شده رو دارم٬ و اون رو به صورت فولدر پابلیش میکنم.
در ابتدا قبل از Publish نیاز هست که تغییرات زیر رو در Startup پروژه اعمال کنیم:
using Microsoft.AspNetCore.HttpOverrides;
سپس در متد Configure کد زیر رو اضافه میکنیم:
app.UseForwardedHeaders( new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); app.UseAuthentication();
برای Publish پروژه روی پروژه وب کلیک راست٬ میکنیم و Publish را میزنیم(دقت کنید که روی Solution کلیک نمیکنیم٬ روی Project کلیک میکنیم):
گزینه Folder را انتخاب و Next را میزنیم٬ محل Publish را مشخص میکنیم و Finish را میزنیم و در نهایت با زدن Publish پروژه در محل مورد نظر Publish میشه:
بعد از Publish پروژه باید فایل های Publish شده رو به Ubuntu Server منتقل کنیم٬ من برای این کار از FileZilla استفاده کردم که از این لینک میتونین دانلود کنین.
بعد از نصب FileZilla از طریق SSH میتونیم به ماشین مجازی Ubuntu که در قسمتهای قبل ساختیم وصل شیم.
در قسمت Quick Connect اطلاعات رو وارد و Quick Connect رو میزنیم٬ (پورت SSH به صورت پیشفرض 22 هستش).
سمت چپ هارد ماشین و سمت چپ فایل home ماشین مجازی رو میبینیم:
روی پوشه ی ماشین مجازی (در این جا پوشه paymannosraty) کلیک راست میکنیم و Create directory and enter it رو میزنیم و اسم دلخواه (در اینجا api) رو بهش میدیم. و بعد از این در سمت چپ به مسیر فولدری که پروژه رو توش Publish کردیم میریم و تمامی فایل های اون رو انتخاب و کلیک راست و Upload رو میزنیم تا در پوشه api که توی ماشین مجازی ساختیم Upload بشه:
بعد از اتمام Upload به شیوهای که در قسمت دوم توضیح داده شد به Ubuntu از طریق Windows Powershell وصل میشیم و دستورات زیر رو اجرا میکنیم:
sudo apt install nano
برای استقرار پروژه روی لینوکس شما به نصب وب سرور روی Ubuntu دارید٬ من از Apache استفاده کردم٬ از Nginx هم میشه استفاده کرد
sudo apt install apache2
sudo a2enmod rewrite
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod headers
sudo a2enmod ssl
در صورت صحیح نصب شدن apache2 و تنظیمات٬ بعد از اجرای دستور زیر وضعیت apache به صورت active خواهد بود:
sudo systemctl status apache2.service
برای خارج شدن از نمایش وضعیت apache و برگشتن به مود اجرای فرمان کلید Q را فشار میدهیم
حالا اگه توی مرورگر ماشین اصلی یا همون هاستمون٬ آی پی ماشین مجازی رو وارد کنیم٬ باید صفحه پیشفرض apache رو بتونیم ببینیم:
نوبت به کانفیگ کردن apache میرسه٬ برای ورود به کانفیگ apache دستور زیر رو اجرا می کنیم و صفحه خالی برامون باز میشه٬ در واقع ما با این دستور خودمون یه فایل کانفیگ به اسم api.conf ایجاد میکنیم:
sudo nano /etc/apache2/sites-enabled/api.conf
در فایل باز شده دستورات زیر رو قرار میدیم٬ نکتهی مهم اینکه اگه بخوایم از ماشین اصلی پروژه رو ایجاد کنیم باید در هدر تگ VirtualHost برای پورت 80 ٬ آی پی ماشین مجازی رو وارد کنیم
در قسمت ServerName و ServerAlias هم به دلخواه نام سرور و آلیاس رو ست میکنیم:
در این مثال تنظیمات برای Https و SSL انجام نشده
کلیدهای Ctrl + X رو فشار و بعد از اون Y رو میزنیم تا فایل ذخیره بشه و به محیط اجرای دستورات برگردیم
بعد از این نیاز داریم که حتما apache رو با دستور زیر ریست کنیم:
sudo systemctl restart apache2
بعد از تنظیمات و کانفیگ کردن apache فایل های Publish شدهی پروژه رو که به مسیر home/paymannosraty/api منتقل کرده بودیم٬ در دایرکتوری var/www کپی میکنیم تا بتونیم سرویس مورد نظرمون رو بسازیم. برای این کار٬ دو دستور زیر رو اجرا میکنیم:
(دقت کنید که شما باید دایرکتوری موجود خودتون رو با paymannosraty در دستور زیر جایگزین کنید)
sudo cp -r /home/paymannosraty/api /var/www
sudo chown -R www-data:www-data /var/www/api
حالا نوبت به گرفتن پکیجهای مایکروسافت برای Ubuntu هستش٬ Ubuntu نیاز داره تا یک لیست کامل از این پکیجها داشته باشه. به این منظور دستورات زیر رو اجرا میکنیم:
1: wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb 2: sudo dpkg -i packages-microsoft-prod.deb
بعد از اجرای این دستوارت باید apt-transport-https برای ASP.NET Core 5 نصب بشه که با دستورات زیر این کار رو انجام میدیم:
در آخرین دستور زیر٬ شما نسخهای از NET Core رو نصب میکنید که احتیاج دارید٬ برای مثال اگه پروژه شما با NET Core 3.1 هست باید این دستور رو به sudo apt-get install -y aspnetcore-runtime-3.1 تغییر بدید
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y aspnetcore-runtime-5.0
در صورت موفقیت آمیز بودن این مراحل٬ اقدام به کانفیگ و نصب سرویسی که قراره برنامه رو اجرا کنه میکنیم٬ با اجرای دستور زیر فایل کانفیگی برای این سرویس میسازیم:
sudo nano /etc/systemd/system/api.service
در فایل خالی که برامون ایجاد شده٬ کانفیگ زیر رو قرار میدیم٬ دقت کنید که شما باید در دستور زیر و در ExecStart نام dll ساخته شدهی خودتون رو قرار بدید٬ برنامه من اسمش MyApplication.dll هستش:
[Unit] Description=Api [Service] WorkingDirectory=/var/www/api/ ExecStart=/usr/bin/dotnet /var/www/api/MyApplication.dll Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=api User=www-data Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target
بعد از ست کردن این کانفیگ کلیدهای Ctrl + X و بعد از اون Y و بعد از اون Enter رو میزنیم تا فایل ذخیره بشه و به محیط اجرای دستور برگردیم.
بعد از این کار سرویسی که ساختیم رو فعال و اجرا میکنیم:
sudo systemctl enable api.service
sudo systemctl start api.service
و با دستور زیر از وضعیت سرویس مطلع میشیم که باید به صورت active باشه
sudo systemctl status api.service
حالا من از ماشین اصلی یک درخواست به سرویس میفرستم تا ببینم کار میکنه:
بله٬ سرویس٬ response مورد نظر من رو با status 200 برگردوند
در قسمت بعد نحوه نصب SQL Server و SQLCMD رو برای پروژه هایی که دارای دیتابیس هستند٬ توضیح خواهم داد...