استقرار در لینوکس
شناسه پست: 4024
بازدید: 1848

پس از استقرار در 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://www.putty.org/

https://filezilla-project.org/download.php

اگر می‌خواهید تمام دستورالعمل‌های اولیه و راهنمای کامل آموزش گام به گام NET Core. را ببینید، این لینک را بررسی کنید: آموزش گام به گام مقدمه NET Core.

اگر می خواهید تمام آموزشهای لازم و پایه مربوط به آموزش گام به گام Angular را ببینید ، لطفاً روی این لینک کلیک کنید: مقدمه آموزش گام به گام Angular.

برای بررسی قسمت قبلی این لینک را بررسی کنید: ایجاد سمت کلاینت Angular – استقرار بر روی IIS

این مقاله به چند قسمت زیر تقسیم شده است:

Machine’s IP Address و SSH

اگر یک VM از provider مورد نظر خود خریداری کرده اید، مطمئناً آدرس IP و SSH آن را فعال کرده اید. اما اگر از VM محلی استفاده می کنید، باید آدرس IP را پیدا کرده و SSH را روی آن فعال کنید.

برای پیدا کردن آدرس IP مربوط به VM، وارد سیستم عامل لینوکس شده و پنجره terminal را جستجو میکنیم. سپس ifconfig را تایپ کنید تا آدرس IP را پیدا کنید:

Terminal window .NET Core Linux Deployment
ifconfig .NET Core Linux Deployment

اکنون آدرس IP خود را داریم و SSH را با تایپ این دستور فعال میکنیم:

پس از آن، 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 منتقل کنید، زیرا ما به این فایل برای پر کردن پایگاه داده نیاز داریم:

Filezzila .NET Core Linux Deployment

هنگامی که یک فایل backup را به VM منتقل می کنیم، باید MySQL server را نصب کرده و آن فایل را import کنیم.

نصب MySQL و بازیابی فایل Backup

ابتدا package ها را با دستور زیر update میکنیم:

سپس، هنگامی که به روز رسانی تمام شد، باید MySQL را با دستور زیر نصب کنیم:

علاوه بر این، پس از اتمام نصب MySQL، برای نصب secure باید دستور زیر را اجرا کنیم:

ما قصد داریم به تمام سوالات با پاسخ های پیش فرض پاسخ دهیم به جز سوالی که در مورد ایجاد رمز عبور است. ما نمی خواهیم یک رمز عبور جدید ایجاد کنیم زیرا در هنگام نصب MySQL ایجاد شده است.

با اجرای دستور زیر وارد MySQL server میشویم:

رمز عبور را وارد کرده، سپس وارد می شویم.

حال می‌خواهیم یک پایگاه داده به نام accountowner با دستور زیر ایجاد کنیم:

به کاراکتر نقطه ویرگول توجه کنید. برای دستورات MySQL اجباری است.

برای استفاده از این پایگاه داده جدید، باید این دستور را تایپ کنیم:

با این دستور به سرور MySQL اطلاع می دهیم که کدام پایگاه داده در حال حاضر فعال باشد. در نهایت، برای بازیابی فایل backup، دستور زیر را اجرا می کنیم:

(این به نام فایل شما و مکانی که فایل backup شما در آن قرار دارد بستگی دارد).

برای دیدن اینکه آیا همه جداول ایجاد شده اند یا نه، فقط این دستور را تایپ کنید:

جداول در MySQL .NET Core Linux Deployment

حذف حساسیت به حروف MySQL

MySQL server به حروف کوچک و بزرگ حساس است و پس از publish برنامه ممکن است به مشکلات خاصی منجر شود. بنابراین، ما قصد داریم حساسیت حروف را برای نام جدولها در فایل پیکربندی MySQL نادیده بگیریم.

برای این کار exit را تایپ کرده تا از سرور MySQL خارج شویم و سپس این دستور را تایپ کنید:

MySQL Configuration File .NET Core Linux Deployment

حال MySQL را با دستور زیر restart میکنیم:

تنظیم Firewall

بسیار عالی. کار با پایگاه داده تمام شده است و اکنون باید firewall را با اجرای دستورات زیر تنظیم کنیم:

نصب NET Core.

ما MySQL را روی دستگاه خود داریم، حال NET Core. را نصب میکنیم.

ابتدا باید Microsoft signature را ثبت کنیم، و برای این کار، به curl در سیستم لینوکس خود نیاز داریم:

پس از نصب، Microsoft key و feed را ثبت میکنیم:

برای ادامه، اجازه دهید Microsoft product feed را در Ubuntu 16.04 ثبت کنیم:

اگر از نسخه دیگری از لینوکس استفاده می کنید، این لینک را بررسی کنید: https://www.microsoft.com/net/download/linux-package-manager/ubuntu16-04/runtime-2.0.6 و در لیست کشویی نسخه خود را انتخاب کنید.

سپس NET Core. را نصب می کنیم:

اصلاحات کوچک فایل

قبل از اینکه همه فایل های 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 شده را تغییر دهیم:

(باز هم، این مسیری است که در دستگاه ما وجود دارد. احتمالاً شما نام پوشه دیگری بعد از قسمت home دارید).

راه اندازی کردن Application

از FileZilla برای ایجاد یک پوشه جدید استفاده کنید و نام آن را var بگذارید. در داخل این پوشه، یک پوشه دیگر ایجاد کرده و نام آن را publish بگذارید. همه این پوشه ها باید در داخل پوشه ای با نام کاربری شما قرار بگیرند:

ساختار پوشه .NET Core Linux Deployment

یک پوشه دیگر با نام logs برای log کردن فایلهای خود ایجاد میکنیم. در نهایت، تمام فایل های publish را از ماشین محلی به این پوشه publish جدید منتقل کنید.

برای start برنامه و بررسی اینکه آیا همه چیز کار می کند، باید به مکانی که فایل های publish شده خود را منتقل کرده ایم برویم و این دستور را اجرا کنیم:

اجرای برنامه .NET Core در Linux

اگر صفحه را به این شکل می بینید، به این معنی است که برنامه را با موفقیت راه اندازی کرده اید. اما ما نمی خواهیم برنامه خود را به صورت دستی راه اندازی کنیم. بنابراین، بیایید سرویسی ایجاد کنیم که به محض راه اندازی سرور، برنامه ما را به طور خودکار راه اندازی کند.

کار با Kestrel

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

و فایل را اصلاح کنید:

Kestrel service در استقرار .NET Core در Linux

اکنون باید این service را فعال کنیم، آن را راه اندازی کرده و وضعیت آن را بررسی کنیم:

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

تنظیم Nginx

اگر به خاطر داشته باشید، در قسمت 2 این آموزش ما این کد را اضافه کرده ایم:

Nginx از پروکسی معکوس پشتیبانی می کند و در حالی که درخواست های client  را به سمت سرور backend هدایت می کند، ممکن است برخی از داده ها از بین برود (http یا https، آدرس IP کلاینت…). بنابراین، ما به میان افزار UseForwardedHeaders برای بازیابی این داده ها از طریق header های HTTP نیاز داریم.

اکنون اجازه دهید Nginx را روی سیستم عامل لینوکس نصب کنیم:

پس از اتمام نصب، این فایل را باز کرده و تغییر دهید:

ما هیچ قسمت comment شده ای را حذف نمی کنیم، فقط قسمت هایی را که نیاز داریم را اصلاح میکنیم:

Nginx .NET Core Linux Deployment

پیکربندی Nginx خود را با این دستور آزمایش کنید:

و فقط اگر همه چیز درست به نظر می رسد nginx را دوباره reload کنید:

تمام. حالا با مرورگر به آدرس IP خود میرویم و برنامه مستقر شده در سرور لینوکس را با هم میبینیم.

صفحه اصلی .NET Core Linux Deployment
Owner-list .NET Core Linux Deployment

نتیجه گیری

با این مقاله، ما تمام اقدامات برای ایجاد و استقرار برنامه AccountOwner خود را پوشش دادیم.

با خواندن این پست یاد گرفتید:

  • چگونه یک حساب کاربری در VM راه اندازی کنیم
  • روش نصب MySQL در لینوکس
  • روش نصب NET Core. در لینوکس
  • نحوه تنظیم Kestrel برای شروع خودکار برنامه
  • نحوه راه اندازی Nginx

از اینکه این مقاله را خواندید متشکرم، امیدوارم برای شما مفید واقع قرار گرفته باشد.

نویسنده

امید عباسی
من امید عباسی هستم. سالهاست که در زمینه برنامه نویسی با تکنولوژی دات نت فعالیت میکنم و عاشق این هستم که تجربیات و دانش خودم را در این زمینه با دیگران به اشتراک بزارم. خیلی دوست دارم که نظر و انتقاد خودتون رو در مورد این نوشته برای من بنویسید تا بتونم در آینده، مطالب بهتر و ارزشمندتری را برای شما فراهم کنم. در صورت داشتن هرگونه سوال هم در قسمت دیدگاه ها میتونید با بنده در ارتباط باشید
  1. سلام
    من تازه شروع کردم با لینوکس کار کردن و پروژه دات نت نوشتم و می خوام اون رو روی سرور اوبونتو پابلیش کنم. پابلیش رو براساس لینوکس انجام دادم و فایل ها رو منتقل کردم ولی متاسفانه وقتی 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…