پس از استقرار در IIS، آخرین قسمت از این آموزش گام به گام، استقرار NET Core Linux. است. ما از نسخه لینوکس Ubuntu 16.04 در VM خود استفاده می کنیم، اما شما می توانید از هر نسخه ای که می خواهید استفاده کنید.
چه بخواهید یک برنامه را با سیستم عامل لینوکس در VM محلی مستقر کنید یا در VM که از یک provider خریداری کرده اید مستقر کنید، روند مشابه است، اما ممکن است چند مرحله متفاوت باشد، اما ما قصد داریم همه آنها را پوشش دهیم. نکته مهم این است که اگر از VM محلی استفاده می کنید، adapter connection آن را روی یک bridge adapter تنظیم کنید. این گزینه معمولاً در منوی Settings و سپس منوی Network قرار دارد، اما بسته به نرم افزار VM که استفاده می کنید متفاوت است.
برای برقراری ارتباط با VM خود، از PuTTY SSH Client و FileZilla برای انتقال فایل استفاده می کنیم. البته میتوانید از نرمافزار خودتان نیز استفاده کنید، اما اگر میخواهید مراحل این آموزش را دنبال کنید، میتوانید آنها را به صورت رایگان از این لینکها دانلود کنید:
https://filezilla-project.org/download.php
اگر میخواهید تمام دستورالعملهای اولیه و راهنمای کامل آموزش گام به گام NET Core. را ببینید، این لینک را بررسی کنید: آموزش گام به گام مقدمه NET Core.
اگر می خواهید تمام آموزشهای لازم و پایه مربوط به آموزش گام به گام Angular را ببینید ، لطفاً روی این لینک کلیک کنید: مقدمه آموزش گام به گام Angular.
برای بررسی قسمت قبلی این لینک را بررسی کنید: ایجاد سمت کلاینت Angular – استقرار بر روی IIS
این مقاله به چند قسمت زیر تقسیم شده است:
- Machine’s IP Address و SSH
- Credential ها و آماده سازی فایلها با FileZilla
- نصب MySQL و بازیابی فایل Backup
- حذف حساسیت به حروف MySQL
- تنظیم Firewall
- نصب NET Core.
- اصلاحات کوچک فایل
- راه اندازی کردن Application
- کار با Kestrel
- تنظیم Nginx
- نتیجه گیری
Machine’s IP Address و SSH
اگر یک VM از provider مورد نظر خود خریداری کرده اید، مطمئناً آدرس IP و SSH آن را فعال کرده اید. اما اگر از VM محلی استفاده می کنید، باید آدرس IP را پیدا کرده و SSH را روی آن فعال کنید.
برای پیدا کردن آدرس IP مربوط به VM، وارد سیستم عامل لینوکس شده و پنجره terminal را جستجو میکنیم. سپس ifconfig را تایپ کنید تا آدرس IP را پیدا کنید:
اکنون آدرس IP خود را داریم و SSH را با تایپ این دستور فعال میکنیم:
1 |
sudo apt-get install openssh-server openssh-client |
پس از آن، PuTTY را باز کرده و با یک آدرس IP معتبر به VM خود متصل میشویم. شماره پورت پیش فرض باید 22 باشد.
Credential ها و آماده سازی فایلها با FileZilla
ورود به VM به عنوان کاربر root، شیوه خوبی نیست. بنابراین اگر کاربر فعلی شما کاربر root است، بهتر است یک کاربر جدید با دستور sudo adduser username ایجاد کنید و سپس با دستور usermod –aG sudo username به آن دسترسی admin بدهید. پس از انجام این مراحل، با استفاده از PuTTY مجدداً با credential های جدید وارد VM شوید.
حال یک پوشه جدید در ماشین محلی ایجاد میکنیم و نام آن را publishLinux میگذاریم. آن را در کنار پوشه IIS publish که در قسمت قبل ایجاد کرده ایم قرار میدهیم. تمام فایل ها را از پوشه publish ویندوز در یک پوشه جدید کپی کنید. ما فایل های production را در قسمت قبل ایجاد کرده ایم، بنابراین اگر قبلاً این کار را نکرده اید، نحوه انجام آن را مطالعه کنید.
برای آماده سازی پایگاه داده در لینوکس، FileZilla را باز کرده و با آن وارد VM خود شوید. سپس فایل backup.sql خود را به یک VM منتقل کنید، زیرا ما به این فایل برای پر کردن پایگاه داده نیاز داریم:
هنگامی که یک فایل backup را به VM منتقل می کنیم، باید MySQL server را نصب کرده و آن فایل را import کنیم.
نصب MySQL و بازیابی فایل Backup
ابتدا package ها را با دستور زیر update میکنیم:
1 |
sudo apt-get update |
سپس، هنگامی که به روز رسانی تمام شد، باید MySQL را با دستور زیر نصب کنیم:
1 |
sudo apt-get install mysql-server |
علاوه بر این، پس از اتمام نصب MySQL، برای نصب secure باید دستور زیر را اجرا کنیم:
1 |
mysql_secure_installation |
ما قصد داریم به تمام سوالات با پاسخ های پیش فرض پاسخ دهیم به جز سوالی که در مورد ایجاد رمز عبور است. ما نمی خواهیم یک رمز عبور جدید ایجاد کنیم زیرا در هنگام نصب MySQL ایجاد شده است.
با اجرای دستور زیر وارد MySQL server میشویم:
1 |
sudo mysql –p |
رمز عبور را وارد کرده، سپس وارد می شویم.
حال میخواهیم یک پایگاه داده به نام accountowner
با دستور زیر ایجاد کنیم:
1 |
Create database accountowner; |
به کاراکتر نقطه ویرگول توجه کنید. برای دستورات MySQL اجباری است.
برای استفاده از این پایگاه داده جدید، باید این دستور را تایپ کنیم:
1 |
use accountowner; |
با این دستور به سرور MySQL اطلاع می دهیم که کدام پایگاه داده در حال حاضر فعال باشد. در نهایت، برای بازیابی فایل backup، دستور زیر را اجرا می کنیم:
1 |
source /home/mare/Desktop/2017-11-29-backup.sql; |
(این به نام فایل شما و مکانی که فایل backup شما در آن قرار دارد بستگی دارد).
برای دیدن اینکه آیا همه جداول ایجاد شده اند یا نه، فقط این دستور را تایپ کنید:
1 |
show tables; |
حذف حساسیت به حروف MySQL
MySQL server به حروف کوچک و بزرگ حساس است و پس از publish برنامه ممکن است به مشکلات خاصی منجر شود. بنابراین، ما قصد داریم حساسیت حروف را برای نام جدولها در فایل پیکربندی MySQL نادیده بگیریم.
برای این کار exit را تایپ کرده تا از سرور MySQL خارج شویم و سپس این دستور را تایپ کنید:
1 |
sudo nano /etc/mysql/my.cnf |
حال MySQL را با دستور زیر restart میکنیم:
1 |
sudo /etc/init.d/mysql restart |
تنظیم Firewall
بسیار عالی. کار با پایگاه داده تمام شده است و اکنون باید firewall را با اجرای دستورات زیر تنظیم کنیم:
1 |
sudo ufw default deny |
1 |
sudo ufw default allow outgoing |
1 |
sudo ufw allow ssh |
1 |
sudo ufw allow 80/tcp |
1 |
sudo ufw allow 443/tcp |
1 |
sudo ufw enable |
1 |
sudo ufw status verbose |
نصب NET Core.
ما MySQL را روی دستگاه خود داریم، حال NET Core. را نصب میکنیم.
ابتدا باید Microsoft signature را ثبت کنیم، و برای این کار، به curl در سیستم لینوکس خود نیاز داریم:
1 |
sudo apt install curl |
پس از نصب، Microsoft key و feed را ثبت میکنیم:
1 |
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg |
1 |
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg |
برای ادامه، اجازه دهید Microsoft product feed را در Ubuntu 16.04 ثبت کنیم:
1 |
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list' |
اگر از نسخه دیگری از لینوکس استفاده می کنید، این لینک را بررسی کنید: https://www.microsoft.com/net/download/linux-package-manager/ubuntu16-04/runtime-2.0.6 و در لیست کشویی نسخه خود را انتخاب کنید.
سپس NET Core. را نصب می کنیم:
1 |
sudo apt-get update |
1 |
sudo apt-get install dotnet-sdk-2.0.3 |
اصلاحات کوچک فایل
قبل از اینکه همه فایل های publish شده را به VM منتقل کنیم، باید یک چیز دیگر را نیز تغییر دهیم. ممکن است به خاطر داشته باشید که ما در قسمت نهم آموزش گام به گام Angular، آدرس URL را برای محیط production پیکربندی کرده ایم: http://www.accountowner.com. اما چون ما از VM برای استقرار Linux استفاده می کنیم، به آدرس IP خود نیاز داریم. در پوشه publishLinux پوشه wwwroot را باز کنید و سپس فایلی که با main شروع می شود را باز کنید. در این فایل، http://www.accountowner.com را جستجو کرده و آن را با http://192.168.0.15 جایگزین کنید (آدرس IP خود را تایپ کنید) و فایل را ذخیره کنید.
علاوه بر این، در فایل nlog.config باید مسیر پیامهای log شده را تغییر دهیم:
1 |
fileName="/home/mare/logs/${shortdate}_logfile.txt" |
(باز هم، این مسیری است که در دستگاه ما وجود دارد. احتمالاً شما نام پوشه دیگری بعد از قسمت home دارید).
راه اندازی کردن Application
از FileZilla برای ایجاد یک پوشه جدید استفاده کنید و نام آن را var بگذارید. در داخل این پوشه، یک پوشه دیگر ایجاد کرده و نام آن را publish بگذارید. همه این پوشه ها باید در داخل پوشه ای با نام کاربری شما قرار بگیرند:
یک پوشه دیگر با نام logs برای log کردن فایلهای خود ایجاد میکنیم. در نهایت، تمام فایل های publish را از ماشین محلی به این پوشه publish
جدید منتقل کنید.
برای start برنامه و بررسی اینکه آیا همه چیز کار می کند، باید به مکانی که فایل های publish شده خود را منتقل کرده ایم برویم و این دستور را اجرا کنیم:
1 |
dotnet AccountOwnerserver.dll |
اگر صفحه را به این شکل می بینید، به این معنی است که برنامه را با موفقیت راه اندازی کرده اید. اما ما نمی خواهیم برنامه خود را به صورت دستی راه اندازی کنیم. بنابراین، بیایید سرویسی ایجاد کنیم که به محض راه اندازی سرور، برنامه ما را به طور خودکار راه اندازی کند.
کار با Kestrel
دستور زیر را اجرا کنید:
1 |
sudo nano /etc/systemd/system/kestrel-accountowner.service |
و فایل را اصلاح کنید:
اکنون باید این service را فعال کنیم، آن را راه اندازی کرده و وضعیت آن را بررسی کنیم:
1 |
sudo systemctl enable kestrel-accountowner.service |
1 |
sudo systemctl start kestrel-accountowner.service |
1 |
sudo systemctl status kestrel-accountowner.service |
تنظیم Nginx
اگر به خاطر داشته باشید، در قسمت 2 این آموزش ما این کد را اضافه کرده ایم:
1 2 3 4 |
app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.All }); |
Nginx از پروکسی معکوس پشتیبانی می کند و در حالی که درخواست های client را به سمت سرور backend هدایت می کند، ممکن است برخی از داده ها از بین برود (http یا https، آدرس IP کلاینت…). بنابراین، ما به میان افزار UseForwardedHeaders برای بازیابی این داده ها از طریق header های HTTP نیاز داریم.
اکنون اجازه دهید Nginx را روی سیستم عامل لینوکس نصب کنیم:
1 |
sudo apt-get install nginx |
پس از اتمام نصب، این فایل را باز کرده و تغییر دهید:
1 |
sudo nano /etc/nginx/sites-available/default |
ما هیچ قسمت comment شده ای را حذف نمی کنیم، فقط قسمت هایی را که نیاز داریم را اصلاح میکنیم:
پیکربندی Nginx خود را با این دستور آزمایش کنید:
1 |
sudo nginx –t |
و فقط اگر همه چیز درست به نظر می رسد nginx را دوباره reload کنید:
1 |
sudo nginx –s reload |
تمام. حالا با مرورگر به آدرس IP خود میرویم و برنامه مستقر شده در سرور لینوکس را با هم میبینیم.
نتیجه گیری
با این مقاله، ما تمام اقدامات برای ایجاد و استقرار برنامه AccountOwner خود را پوشش دادیم.
با خواندن این پست یاد گرفتید:
- چگونه یک حساب کاربری در VM راه اندازی کنیم
- روش نصب MySQL در لینوکس
- روش نصب NET Core. در لینوکس
- نحوه تنظیم Kestrel برای شروع خودکار برنامه
- نحوه راه اندازی Nginx
از اینکه این مقاله را خواندید متشکرم، امیدوارم برای شما مفید واقع قرار گرفته باشد.
سلام
من تازه شروع کردم با لینوکس کار کردن و پروژه دات نت نوشتم و می خوام اون رو روی سرور اوبونتو پابلیش کنم. پابلیش رو براساس لینوکس انجام دادم و فایل ها رو منتقل کردم ولی متاسفانه وقتی dll پروژه رو اجرا می کنم خطای زیر رو میده باید چکار کنم؟
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {6b1687ae-cbff-4e9c-828e-6cfdab9a9e3c} may be persisted to storage in unencrypted form.
warn: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[16]
The WebRootPath was not found: /home/amir/var/publish/net8.0/wwwroot. Static files may be unavailable.
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /home/amir/var/publish/net8.0
^Cinfo: Microsoft.Hosting.Lifetime[0]
Application is shutting down…