سرور مجازی

  • ۰
  • ۰

migrations و seeders ابزارهای قدرتمندی در بانک اطلاعاتی هستند که توسط چارچوب Laravel PHPفراهم شده است تا به توسعه دهندگان اجازه دهد سریعاً به صورت خودکار راه اندازی شوند ، و یک دیتابیس برنامه را از بین ببرند و دوباره بسازند. این ابزارها در به حداقل رساندن مشکلات ناسازگاری بانک اطلاعاتی که می تواند در اثر کار با چندین توسعه دهنده در یک برنامه ایجاد شود ، کمک کننده است: مشارکت کنندگان جدید فقط باید چند دستور artisan را اجرا کنند تا دیتابیس را روی یک نصب تازه تنظیم کنند.
در این راهنما ، ما برای جمع آوری بانک اطلاعاتی برنامه نمایشی Laravel با داده های نمونه ، migrations و seeders را ایجاد خواهیم کرد. در پایان ، شما فقط با استفاده از دستورات artisan می توانید جداول بانک اطلاعاتی خود را هر چند بار که می خواهید خراب کرده و مجدد بسازید.
پیش نیازها
برای دنبال کردن این راهنما ، به موارد زیر نیاز دارید:
⦁ دسترسی به یک دستگاه محلی یا سرور مجازی توسعه Ubuntu 18.04 به عنوان یک کاربر غیر ریشه و دارای امتیازات sudo. اگر از سرور مجازی راه دور استفاده می کنید ، توصیه می شود یک فایروال فعال نصب شود. برای انجام این کار ، لطفاً به راهنمای راه اندازی سرور مجازی اولیه ما برای اوبونتو 18.04 مراجعه کنید.
⦁ Docker که مطابق مرحله 1 و مرحله 2 نحوه نصب و استفاده از Docker در اوبونتو 18.04 بر روی سرور مجازی تان نصب شده است.
⦁ Docker Compose که مطابق مرحله 1 نحوه نصب Docker Compose در اوبونتو 18.04 بر روی سرور مجازی شما نصب شده باشد.
توجه: در این راهنما ، ما از یک محیط توسعه کانتینر شده که توسط Docker Compose اداره میشود برای اجرای برنامه استفاده خواهیم کرد ، اما ممکن است شما اجرای برنامه را روی یک سرور مجازی LEMP انتخاب کنید. برای تنظیم آن ، می توانید راهنمای ما در مورد نحوه نصب و پیکربندی Laravel با LEMP در اوبونتو 18.04 را دنبال کنید.

مرحله 1 – به دست آوردن برنامه دمو
برای شروع کار ، برنامه آزمایشی Laravel را از منبع GitHub آن دریافت خواهیم کرد. ما به شاخه tutorial-02 علاقه مند هستیم که شامل یک تنظیم Docker Compose برای اجرای برنامه بر روی کانتینرها است. در این مثال ، ما برنامه را در پوشه هوم خود دانلود خواهیم کرد ، اما می توانید از هر دیرکتوری مورد نظر خود استفاده کنید:
⦁ $ cd ~

⦁ $ curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-2.0.1.zip -o travellist.zip
از آنجا که ما کد برنامه را به عنوان فایل .zip دانلود کردیم ، برای باز کردن آن به دستور unzip احتیاج داریم. اگر اخیراً چنین کاری نکرده اید ، ایندکس بسته محلی دستگاه خود را به روز کنید:
⦁ $ sudo apt update
سپس بسته unzip را نصب کنید:
⦁ $ sudo apt install unzip
پس از آن ، محتویات برنامه را از حالت فشرده خارج کنید:
⦁ $ unzip travellist.zip
سپس برای دسترسی آسانتر ، دایرکتوری باز نشده را به travellist-demo تغییر نام دهید:
⦁ $ mv travellist-laravel-demo-tutorial-2.0.1 travellist-demo
در مرحله بعدی ، یک فایل پیکربندی .env برای تنظیم برنامه ایجاد خواهیم کرد.
مرحله 2 – تنظیم فایل .env برنامه
در Laravel ، فایل .env برای تنظیم پیکربندی های وابسته به محیط ، مانند اعتبارنامه ها و هرگونه اطلاعاتی که ممکن است بین آرایش ها متفاوت باشد ، استفاده می شود. این فایل در کنترل مروری گنجانده نشده است.
هشدار: فایل تنظیمات محیط شامل اطلاعات حساس در مورد سرور مجازی شما ، از جمله اطلاعات دیتابیس و کلیدهای امنیتی است. به همین دلیل ، شما هرگز نباید این فایل را به صورت عمومی به اشتراک بگذارید.

مقادیر موجود در فایل .env بر مقادیر تعیین شده در فایل های پیکربندی معمول واقع در دایرکتوری config مقدم است. هر نصب بر روی یک محیط جدید نیاز به یک فایل محیطی متناسب دارد تا مواردی مانند تنظیمات اتصال بانک اطلاعاتی ، آپشن های اشکال زدایی و URL برنامه را جدا از موارد دیگری تعریف کند که بسته به محیطی که اپلیکیشن در حال اجراست ممکن است متفاوت باشند.
به دیرکتوری travellist-demo بروید:
⦁ $ cd travellist-demo
اکنون ما یک فایل جدید .env را برای سفارشی کردن گزینه های پیکربندی محیط توسعه ای که تنظیم می کنیم ایجاد خواهیم کرد. Laravel با یک فایل.env همراه است که می توانیم آنرا کپی کنیم تا فایل خودمان را ایجاد کنیم:
⦁ $ cp .env.example .env
این فایل را با استفاده از nano یا ویرایشگر متن مورد نظر خود باز کنید:
⦁ $ nano .env
فایل .env شما اکنون به این شکل خواهد بود:
.env
APP_NAME=Travellist
APP_ENV=dev
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost:8000

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password

فایل .env فعلی از برنامه نمایشی Travellist شامل تنظیماتی برای استفاده از محیط کانتینر شده ای است که ما با Docker Compose در قسمت آخر این سری ایجاد کرده ایم. شما نیازی به تغییر هیچ یک از این مقادیر ندارید ، اما در صورت تمایل می توانید DB_DATABASE ، DB_USERNAME و DB_PASSWORD را تغییر دهید ، زیرا این موارد توسط فایل docker-compose.yml ما به صورت خودکار کشیده می شود تا دیتابیس توسعه را تنظیم کنید. فقط مطمئن شوید که متغیر DB_HOST بدون تغییر باقی بماند ، زیرا در محیط Docker Compose نام سرویس دیتابیس ما را ارجاع می دهد.
اگر تغییری در فایل ایجاد کردید ، با فشار دادن CTRL + X ، Y ، و سپس enter آن را ذخیره کرده و ببندید.
توجه: اگر تصمیم به اجرای برنامه در سرور مجازی LEMP گرفتید ، باید مقادیر هایلایت شده را تغییر دهید تا تنظیمات دیتابیس خود را از جمله متغیر DB_HOST منعکس کنید.

مرحله 3 – نصب متعلقات برنامه با Composer
اکنون ما برای نصب متعلقات برنامه از Composer ، ابزار مدیریت متعلقات PHP استفاده خواهیم کرد و اطمینان حاصل خواهیم کرد که می توانیم دستورات artisan را اجرا کنیم.
محیط Docker Compose خود را با دستور زیر تنظیم کنید. این کار باعث می شود تا تصویر travellist برای سرویس app ایجاد شود و برای ایجاد محیط برنامه ، تصاویر اضافی Docker مورد نیاز خدمات nginx و db را جذب کنید:
⦁ $ docker-compose up -d
Output
Creating network “travellist-demo_travellist” with driver “bridge”
Building app
Step 1/11 : FROM php:7.4-fpm
—> fa37bd6db22a
Step 2/11 : ARG user
—> Running in 9259bb2ac034

Creating travellist-app … done
Creating travellist-nginx … done
Creating travellist-db … done

این عملیات ممکن است چند دقیقه طول بکشد. پس از اتمام مراحل ، می توانیم Composer را برای نصب متعلقات برنامه اجرا کنیم.
برای اجرای Composer و سایر دستورات در کانتینر سرویس app ، از docker-compose exec استفاده خواهیم کرد. دستور exec به ما امکان می دهد تا هر دستور مورد نظر خود را روی کانتینرهای مدیریت شده توسط Docker Compose اجرا کنیم. از دستور زیر استفاده می کند: docker-compose exec service_name
توجه: در صورت تصمیم به استفاده از سرور مجازی LEMP برای اجرای نسخه ی نمایشی ، باید قسمت docker-compose exec app از دستورهای ذکر شده در سراسر این راهنما را نادیده بگیرید. به عنوان مثال ، به جای اجرای دستور زیر به صورتی که نوشته شده ، فقط اجرا کنید:
⦁ $ composer install
برای اجرای composer install در کانتینر app ، دستور زیر را اجرا کنید:
⦁ $ docker-compose exec app composer install
Output
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 85 installs, 0 updates, 0 removals
– Installing doctrine/inflector (1.3.1): Downloading (100%)
– Installing doctrine/lexer (1.2.0): Downloading (100%)
– Installing dragonmantank/cron-expression (v2.3.0): Downloading (100%)

هنگامی که composer نصب متعلقات برنامه را به پایان رساند ، می توانید دستورات artisan را اجرا کنید. برای آزمایش اینکه برنامه قادر به اتصال به بانک اطلاعاتی است ، دستور زیر را اجرا کنید که تمام جداول قبلی را حذف میکند:
⦁ docker-compose exec app php artisan db:wipe
این دستور هر جدول از قبل موجود را در دیتابیس پیکربندی شده رها می کند. اگر با موفقیت اجرا شد و برنامه قادر به اتصال به بانک اطلاعاتی شد ، خروجی مانند این را مشاهده خواهید کرد:
Output
Dropped all tables successfully.

اکنون که متعلقات برنامه را با Composer نصب کرده اید ، می توانید از ابزار artisan برای ایجاد migrations و seeders استفاده کنید.

مرحله 4 – ایجاد migrationهای دیتابیس
ابزار خط فرمان artisan که با Laravel ارسال می شود حاوی یک سری دستورات کمکی است که می تواند برای مدیریت برنامه و راه اندازی دسته های جدید برای راه اندازی خودکار استفاده شود. برای تولید یک گروهmigration جدید ، می توانیم از دستور make: migration به شرح زیر استفاده کنیم:
⦁ $ docker-compose exec app php artisan make:migration create_places_table
Laravel براساس نام توصیفی که برای دستور make: migration ارائه شده است ، اجرای این برنامه (create) ، نام جدول (places) و اینکه آیا این migration باعث ایجاد جدول جدید خواهد شد یا خیر را استنباط می کند.
خروجی مشابه این را مشاهده خواهید کرد:
Output
Created Migration: 2020_02_03_143622_create_places_table

این خروجی فایل جدیدی را در دیرکتوری database/migrations برنامه ایجاد می کند. برچسب زمانی موجود در فایل خودکار تولید شده توسط Laravel استفاده می شود تا تعیین کند که در چه صورت باید migrations اجرا شود.
از ویرایشگر متن دلخواه خود برای باز کردن فایل migration تولید شده استفاده کنید. به یاد داشته باشید که مقدار هایلایت شده را با نام فایل migration شخصی خود جایگزین کنید:
⦁ $ nano database/migrations/2020_02_03_143622_create_places_table.php
فایل migration تولید شده حاوی دسته ای به نام CreatPlacesTable است:

database/migrations/2020_02_03_143622_create_places_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePlacesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create(‘places’, function (Blueprint $table) {
$table->bigIncrements(‘id’);
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists(‘places’);
}
}

این کلاس دو روش دارد: up و down. هر دو روش حاوی کد بوت استرپ (راه اندازی خودکار) هستند که می توانید برای شخصی سازی آنچه هنگام انجام این migration و همچنین هنگام بازگشت دوباره اتفاق می افتد گسترش دهید.
ما روش up را طوری اصلاح خواهیم کرد که جدول places ساختاری را که قبلاً در نسخه فعلی برنامه استفاده می کنیم منعکس کند.
⦁ id : فیلد کلید اولیه.
⦁ name : نام مکان.
⦁ visited : آیا این مکان قبلاً بازدید شده یا خیر.
سازنده شماتیک Laravel روش هایی را برای ایجاد ، به روزرسانی و حذف جداول در یک دیتابیس در معرض دید شما قرار می دهد. کلاس Blueprint ساختار جدول را تعریف می کند و چندین روش برای انتزاع تعریف هر فیلد جدول ارائه می دهد.
کد خودکار تولید شده یک فیلد اصلی اولیه با نام id تنظیم می کند. روش timestamps دو فیلد datetime ایجاد می کند که با وارد کردن داده یا به روزرسانی داده ها در آن جدول ، به طور خودکار توسط دسته های دیتابیس تحت آن به روز می شوند. علاوه بر اینها ، باید یک name و یک فیلد visited را نیز وارد کنیم.
قسمت name ما از نوع string خواهد بود ، و قسمت visited ما با نوع boolean تنظیم می شود. ما همچنین مقدار پیش فرض 0 را برای قسمت visited تعیین خواهیم کرد ، به طوری که اگر هیچ مقداری رد و بدل نشود ، بدین معنی است که هنوز از مکان بازدید نشده است. اکنون روش up به این صورت خواهد بود:
database/migrations/2020_02_03_143622_create_places_table.php

public function up()
{
Schema::create(‘places’, function (Blueprint $table) {
$table->bigIncrements(‘id’);
$table->string(‘name’, 100);
$table->boolean(‘visited’)->default(0);
$table->timestamps();
});
}

توجه: لیست کامل انواع ستون های موجود را می توانید در مستندات Laravel پیدا کنید.

پس از درج دو خط هایلایت شده در اسکریپت migration خود ، فایل را ذخیره کنید و ببندید.
اکنون migration شما آماده اجرا از طریق artisan migrate میباشد. با این حال ، این فقط یک جدول خالی ایجاد می کند. همچنین باید بتوانیم داده های نمونه را برای توسعه و آزمایش درج کنیم. در مرحله بعدی ، خواهیم دید که چگونه می توان با استفاده از seeders دیتابیس این کار را انجام داد.
مرحله 5 – ایجاد Seeders بانک اطلاعاتی
seeder  یک کلاس ویژه ای است که برای تولید و درج داده های نمونه (seedها) در یک دیتابیس استفاده می شود. این امر یک ویژگی مهم در محیط های توسعه است ، زیرا به شما امکان می دهد برنامه را با یک دیتابیس تازه ، با استفاده از مقادیر نمونه ای بازتولید کنید که در غیر این صورت مجبور بودید به صورت دستی در هر بار بازتولید بانک اطلاعاتی آنها را وارد کنید.
اکنون ما از دستور artisan برای ایجاد یک کلاس seeder جدید برای جدول places خود با نام PlacesTableSeeder استفاده خواهیم کرد:
⦁ $ docker-compose exec app php artisan make:seeder PlacesTableSeeder
این دستور فایل جدیدی به نام PlacesTableSeeder.php را در دیرکتوری database/seeds ایجاد می کند. آن فایل را با استفاده از ویرایشگر متن مورد نظر خود باز کنید:
⦁ $ nano database/seeds/PlacesTableSeeder.php
فایل PlacesTableSeeder.php خودکار تولید شده این گونه خواهد بود:
database/seeds/PlacesTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class PlacesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}

کلاس seeder جدید ما شامل یک روش خالی به نام run است. این روش با اجرای فرمان db: seed Artisan فراخوانی می شود.
ما باید روش run را ویرایش کنیم تا دستورالعمل هایی برای درج داده های نمونه در دیتابیس را شامل شود. از Laravel query builder برای ساده سازی این فرآیند استفاده خواهیم کرد.
Laravel query builder یک رابط کاربری قوی برای عملیات دیتابیس مانند درج ، به روزرسانی ، حذف و بازیابی داده ها ارائه می دهد. همچنین در برابر حملات تزریقی SQL محافظت هایی را ارائه می دهد. query builder با نمای خارجی DB به نمایش در می آید- یک پروکسی استاتیک برای در برگیری کلاس های دیتابیس در کانتینر سرویس.
برای شروع ، ما یک متغیر کلاس استاتیک ایجاد خواهیم کرد تا تمام مکان های نمونه ای که می خواهیم در بانک اطلاعاتی به عنوان یک آرایه درج کنیم را نگه داریم. این کار به ما این امکان را می دهد تا از یک حلقه foreach برای تکرار در تمام مقادیر استفاده کنیم و هر یک از آنها را با استفاده از query builder در بانک اطلاعاتی وارد کنیم.
ما این متغیر $places را فراخوانی میکنیم:
database/seeds/PlacesTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class PlacesTableSeeder extends Seeder
{
static $places = [
‘Berlin’,
‘Budapest’,
‘Cincinnati’,
‘Denver’,
‘Helsinki’,
‘Lisbon’,
‘Moscow’,
‘Nairobi’,
‘Oslo’,
‘Rio’,
‘Tokyo’
];

در مرحله بعد ، باید یک عبارت use را در بالای کلاس PlacesTableSeeder خود وارد کنیم تا مراجعه به نمای DB در کل کد تسهیل شود:
database/seeds/PlacesTableSeeder.php
<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class PlacesTableSeeder extends Seeder

اکنون می توانیم با استفاده از یک حلقه foreach مقادیر آرایه $places را تکرار کنیم و هر یک را در جدول places خود با استفاده از query builder وارد کنیم:
database/seeds/PlacesTableSeeder.php

public function run()
{
foreach (self::$places as $place) {
DB::table(‘places’)->insert([
‘name’ => $place,
‘visited’ => rand(0,1) == 1
]);
}
}

حلقه foreach در هر یک از آرایه های استاتیک $places تکرار می شود. در هر تکرار ، از نمای DB برای قرار دادن یک ردیف جدید در جدولplaces استفاده می کنیم. فیلد name را به نام محلی که تازه از آرایه $places بدست آورده ایم تنظیم کردیم و قسمت visited را روی یک مقدار تصادفی یا 0 یا 1 تنظیم می کنیم.
کلاس کامل PlacesTableSeeder بعد از همه به روزرسانی ها اینگونه به نظر می رسد:
database/seeds/PlacesTableSeeder.php
<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class PlacesTableSeeder extends Seeder
{
static $places = [
‘Berlin’,
‘Budapest’,
‘Cincinnati’,
‘Denver’,
‘Helsinki’,
‘Lisbon’,
‘Moscow’,
‘Nairobi’,
‘Oslo’,
‘Rio’,
‘Tokyo’
];

/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
foreach (self::$places as $place) {
DB::table(‘places’)->insert([
‘name’ => $place,
‘visited’ => rand(0,1) == 1
]);
}
}
}

هنگامی که این تغییرات را انجام داده اید ، فایل را ذخیره کنید و ببندید.
کلاس های Seeder به طور خودکار در برنامه لود نمی شوند. ما باید کلاس اصلی DatabaseSeeder را ویرایش کنیم تا یک seeder که اخیراً ایجاد کرده ایم فراخوانی شود.
فایل database/seeds/DatabaseSeeder.php را با استفاده از nano یا ویرایشگر مورد علاقه خود باز کنید:
⦁ $ nano database/seeds/DatabaseSeeder.php
کلاس DatabaseSeeder مانند هر seeder دیگر به نظر می رسد: از کلاس Seeder امتداد دارد و یک روش run دارد. ما این روش را به روز خواهیم کرد تا یک فراخوانی PlacesTableSeeder را شامل شود.
با حذف خط کامنت شده و جایگزینی آن با کد هایلایت شده زیر ، روش run فعلی را در کلاس DatabaseSeeder خود به روز کنید.
database/seeds/DatabaseSeeder.php

public function run()
{
$this->call(PlacesTableSeeder::class);
}

کلاس کامل DatabaseSeeder بعد از بروزرسانی اینگونه خواهد شد:
database/seeds/DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
/**
* Seed the application’s database.
*
* @return void
*/
public function run()
{
$this->call(PlacesTableSeeder::class);
}
}

پس از اتمام به روزرسانی محتوای آن ، فایل را ذخیره کنید و ببندید.
اکنون تنظیمmigration و seeder را برای جدول places خود به پایان رسانده ایم. در مرحله بعدی ، نحوه اجرای آنها را خواهیم دید.
مرحله ششم – اجرای migration و seeder دیتابیس
قبل از ادامه کار ، باید اطمینان حاصل کنیم که برنامه شما در حال اجرا است. ما کلید رمزگذاری برنامه را تنظیم خواهیم کرد و سپس از طریق یک مرورگر برای تست سرور مجازی وب به برنامه دسترسی پیدا می کنیم.
برای تولید کلید رمزنگاری مورد نیاز Laravel می توانید از کلید artisan: generate command استفاده کنید:
⦁ $ docker-compose exec app php artisan key:generate
پس از ایجاد کلید ، با نشان دادن مرورگر خود به نام هاست سرور مجازی یا آدرس IP در پورت 8000 ، می توانید به برنامه دسترسی پیدا کنید:
http: // server_host_or_ip: 8000
صفحه ای را به این شکل مشاهده خواهید کرد:

این بدان معنی است که برنامه می تواند به بانک اطلاعاتی وصل شود ، اما نمی تواند یک جدول به نام places را پیدا کند. اکنون با استفاده از دستور migrate artisan زیر جدول places را ایجاد خواهیم کرد:
⦁ $ docker-compose exec app php artisan migrate
خروجی مشابه این دریافت خواهید کرد:
Output
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.06 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.06 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.03 seconds)
Migrating: 2020_02_10_144134_create_places_table
Migrated: 2020_02_10_144134_create_places_table (0.03 seconds)

متوجه خواهید شد که چند migration دیگر به همراه create_places_table  که تنظیم کرده ایم انجام شده است. این migrationها هنگام نصب Laravel به صورت خودکار ایجاد می شوند. اگرچه ما اکنون از این جداول اضافی استفاده نخواهیم کرد ، در صورت گسترش برنامه برای داشتن کاربران ثبت نام شده و کارهای برنامه ریزی شده ، در آینده به آنها نیاز خواهیم داشت. در حال حاضر ، شما فقط می توانید آنها را مانند گذشته رها کنید.
در این مرحله جدول ما هنوز خالی است. ما باید دستور db: seed را اجرا کنیم تا دیتابیس را با مکان های نمونه خود seed دهی کنیم:
⦁ $ docker-compose exec app php artisan db:seed
این کار seeder ما را اجرا می کند و مقادیر نمونه ای را که ما در کلاس PlacesTableSeeder تعریف کردیم وارد می کند. خروجی مشابه این را مشاهده خواهید کرد:
Output
Seeding: PlacesTableSeeder
Seeded: PlacesTableSeeder (0.06 seconds)
Database seeding completed successfully.

اکنون صفحه برنامه را در مرورگر خود مجدد لود کنید. صفحه ای شبیه به این را مشاهده خواهید کرد:

هر وقت لازم است از ابتدا شروع کنید ، می توانید تمام جداول بانک اطلاعاتی خود را با این دستور دراپ کنید:
⦁ $ docker-compose exec app php artisan db:wipe
Output
Dropped all tables successfully.

برای اجرای برنامه migration و seed (بذردهی) جداول در یک دستور واحد ، می توانید از این خط استفاده کنید:
⦁ $ docker-compose exec app php artisan migrate –seed
Output
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.06 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.07 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.03 seconds)
Migrating: 2020_02_10_144134_create_places_table
Migrated: 2020_02_10_144134_create_places_table (0.03 seconds)
Seeding: PlacesTableSeeder
Seeded: PlacesTableSeeder (0.06 seconds)
Database seeding completed successfully.

اگر می خواهید migration را به عقب برگردانید ، می توانید این دستور را اجرا کنید:
⦁ $ docker-compose exec app php artisan migrate:rollback
این دستور روش down را برای هر کلاس migration در داخل پوشه migration ها ایجاد می کند. به طور معمول ، تمام جداول ایجاد شده از طریق کلاس های migration را حذف می کند ، و جداول دیگری که ممکن است به صورت دستی ایجاد شده باشد را به خود اختصاص نمی دهد. خروجی مانند این را خواهید دید:
Output
Rolling back: 2020_02_10_144134_create_places_table
Rolled back: 2020_02_10_144134_create_places_table (0.02 seconds)
Rolling back: 2019_08_19_000000_create_failed_jobs_table
Rolled back: 2019_08_19_000000_create_failed_jobs_table (0.02 seconds)
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back: 2014_10_12_100000_create_password_resets_table (0.02 seconds)
Rolling back: 2014_10_12_000000_create_users_table
Rolled back: 2014_10_12_000000_create_users_table (0.02 seconds)

دستور بازگشت به خصوص هنگامی مفید است که شما در حال تغییر در مدل های برنامه هستید و از دستور db: wipe نمیتوان استفاده کرد – به عنوان مثال ، اگر چندین سیستم به یک دیتابیس وابسته باشند.
نتیجه
در این راهنما ، ما نحوه استفاده از migration ها و seeder های دیتابیس را برای تسهیل تنظیم دیتابیس های توسعه و آزمایش یک برنامه Laravel 6 مشاهده کردیم.
به عنوان مرحله بعد ، می توانید برای جزئیات بیشتر در مورد نحوه استفاده از query builder ، و نحوه استفاده از مدل های Eloquent برای انتزاع طرح دیتابیس برنامه خود ، مطالب Laravel را بررسی کنید.

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

در ECMAScript 2015 ، ژنراتورها (آزانگرها) به زبان JavaScript معرفی شدند. ژنراتورفرایندی است که می تواند متوقف شده و از سر گرفته شود و می تواند مقادیر مختلفی را ارائه دهد. ژنراتور در جاوا اسکریپت از یک تابع ژنراتور تشکیل شده است ، که یک مفعول Generator تکرارگر را برمی گرداند.
ژنراتورها می توانند حالت خود را حفظ کنند ، روشی کارآمد برای ایجاد تکرارگرها ارائه دهند ، و قادر به کار با داده های نامتناهی هستند که می توانند برای اجرای اسکرول نامحدود در یک برنامه وب ، کار با داده های موج صدا و موارد دیگر استفاده شوند. علاوه بر این ، در هنگام استفاده به همراه promise ها ، می توانند از تابع async/await استفاده کنند ، که به ما امکان می دهد با کد غیرهمزمان با روشی ساده تر و خواناتر سر و کار داشته باشیم. اگرچه async / await روشی معمول تر برای کار با موارد استفاده معمول، ساده و غیر همزمان، مانند گرفتن داده ها از یک API است، ژنراتورها ویژگی های پیشرفته تری دارند که یادگیری نحوه استفاده از آنها را ارزشمند می کند.
در این مقاله ، ما نحوه ایجاد توابع ژنراتور ، نحوه تکرار آبجکت های ژنراتور ، تفاوت بین yield  و return  در داخل ژنراتور و سایر جنبه های کار با ژنراتور را پوشش خواهیم داد.
توابع ژنراتور
یک تابع ژنراتور تابعی است که یک آبجکت Generator را برمی گرداند و همانطور که در شکل زیر نشان داده شده است توسط کلید واژه function  به همراه ستاره (*) تعریف می شود:
// Generator function declaration
function* generatorFunction() {}

گاهی اوقات ، ستاره را در کنار نام تابع و مقابل کلمه کلیدی تابع مانند function *generatorFunction() ، مشاهده می کنید. این هم به همان صورت عمل میکند ، اما function* به طور گسترده تری پذیرفته شده است.
توابع ژنراتور نیز مانند توابع معمولی می تواند در یک عبارت تعریف شود:
// Generator function expression
const generatorFunction = function*() {}

ژنراتورها حتی می توانند روشهای یک آبجکت یا کلاس باشند:
// Generator as the method of an object
const generatorObj = {
*generatorMethod() {},
}

// Generator as the method of a class
class GeneratorClass {
*generatorMethod() {}
}

مثالهای موجود در طول این مقاله از دستور اعلان تابع ژنراتور استفاده می کنند.
توجه: بر خلاف توابع معمولی ، ژنراتورها را نمی توان با کلمه کلیدی new ساخت ، و همچنین نمی توان آنها را همراه با توابع آرایه ای استفاده کرد.

اکنون که می دانید چگونه می توانید توابع ی ژنراتور را اظهار کنید ، بیایید به آبجکت های ژنراتور تکرارگر که باز می گردند نگاهی بیندازید.
آبجکت های ژنراتور
به طور معمول ، توابع موجود در جاوا اسکریپت تا زمان اتمام اجرا میشوند ، و فراخوانی یک تابع با رسیدن به کلمه کلیدی return ، مقداری را برمی گرداند. در صورت حذف کلمه کلیدی return ، یک تابع به طور ضمنی undefined را باز خواهد گرداند.
به عنوان مثال در کد زیر یک تابع sum () را اعلام می کنیم که مقداری را برمی گرداند که جمع آن دو عدد صحیح است:
// A regular function that sums two values
function sum(a, b) {
return a + b
}

فراخوانی تابع مقداری را نشان می دهد که مجموع آرگومان ها است:
const value = sum(5, 6) // 11
Copy

با این حال ، تابع ژنراتور ، یک مقدار را فوراً بر نمی گرداند ، و در عوض یک آبجکت ژنراتور تکرارگر را برمی گرداند. در مثال زیر ، یک تابع را اعلام می کنیم و مانند یک تابع استاندارد ، تک مقدار برگشتی به آن می دهیم:
// Declare a generator function with a single return value
function* generatorFunction() {
return ‘Hello, Generator!’
}

هنگامی که ما از تابع ژنراتور درخواست می کنیم ، آبجکت ژنراتور را برمی گرداند ، که می توانیم به یک متغیر اختصاص دهیم:
// Assign the Generator object to generator
const generator = generatorFunction()

اگر یک تابع معمولی بود ، انتظار داشتیم که ژنراتور رشته ای را که در این تابع برگشته است به ما بدهد. با این حال ، آنچه در واقع دریافت می کنیم یک آبجکت در حالت suspended  است. بنابراین فراخوانی generator  خروجی مشابه موارد زیر را نشان می دهد:
Output
generatorFunction {<suspended>}
__proto__: Generator
[[GeneratorLocation]]: VM272:1
[[GeneratorStatus]]: “suspended”
[[GeneratorFunction]]: ƒ* generatorFunction()
[[GeneratorReceiver]]: Window
[[Scopes]]: Scopes[3]

آبجکت Generator  که توسط تابع برگشت داده شده ، یک تکرارگر است. تکرارگر آبجکتی است که یک روش next() در دسترس دارد که برای تکرار از طریق دنباله ای از مقادیر استفاده می شود. روش next() یک آبجکت با ویژگی های value  و done  برمی گرداند. value  نشان دهنده مقدار برگشتی است ، و done  نشان می دهد که آیا تکرارگر تمام مقادیر خود را اجرا کرده است یا نه.
با دانستن این موضوع ، بیایید next() را روی ژنراتور خود فراخوانی کنیم و مقدار و وضعیت فعلی تکرارگر را بدست آوریم:
// Call the next method on the Generator object
generator.next()

خروجی زیر را ارائه می دهد:
Output
{value: “Hello, Generator!”, done: true}

مقدار برگشتی از فراخوانی next()،Hello, Generator! است و وضعیت done ، true میباشد ، زیرا این مقدار از return حاصل می شود که تکرارگر را بسته است. از آنجا که تکرار انجام شده است ، وضعیت تابع ژنراتور از حالت suspended  به closed تغییر می کند. دوباره فراخوانی generator  خروجی زیر را ارائه می دهد:
Output
generatorFunction {<closed>}

در حال حاضر ، ما فقط نشان داده ایم که چگونه یک تابع ژنراتور می تواند روشی پیچیده تر برای بدست آوردن مقدار return  یک تابع باشد. اما توابع ژنراتور همچنین دارای ویژگی های منحصر به فردی هستند که آنها را از توابع طبیعی متمایز می کند. در بخش بعدی ، ما در مورد اپراتور yield  خواهیم آموخت و میبینیم که چگونه یک ژنراتور می تواند مکث کرده و اجرا را از سر بگیرد.
عملگرهای yield
ژنراتورها یک کلمه کلیدی جدید به نام yield را به JavaScript معرفی می کنند. yield  می تواند یک تابع ژنراتور را متوقف کرده و مقداری را که بعد از yield  میاید ، بازگرداند و راهی ساده برای تکرار مقادیر فراهم می کند.
در این مثال ، ما تابع ژنراتور را سه بار با مقادیر مختلف متوقف می کنیم و در انتها یک مقدار را برمی گردانیم. سپس آبجکت ژنراتور خود را به متغیر ژنراتور اختصاص می دهیم.
// Create a generator function with multiple yields
function* generatorFunction() {
yield ‘Neo’
yield ‘Morpheus’
yield ‘Trinity’

return ‘The Oracle’
}

const generator = generatorFunction()

حال ، هنگامی که ما تابع next() را بر روی تابع ژنراتور فراخوانی می کنیم ، هر بار که با تابع yield مواجه می شود متوقف خواهد شد. done بعد از هر بار yield روی false تنظیم خواهد شد و این نشان می دهد که ژنراتور تمام نشده است. هنگام رویارویی با return ، یا وقتی yield دیگری در تابع نباشد ، done  روی true تنظیم میشود ​​و ژنراتور به پایان می رسد.
از روش next() چهار بار در یک ردیف استفاده کنید
// Call next four times
generator.next()
generator.next()
generator.next()
generator.next()
چهار خط زیر را به ترتیب نشان می دهد:
Output
{value: “Neo”, done: false}
{value: “Morpheus”, done: false}
{value: “Trinity”, done: false}
{value: “The Oracle”, done: true}

توجه داشته باشید که ژنراتور نیازی به return ندارد. در صورت حذف ، آخرین تکرار این عبارت را باز میگرداند: {value: undefined, done: true} ، چرا که هر فراخوانی بعدی به next() پس از اتمام ژنراتور به پایان می رسد.
تکرار در یک ژنراتور
با استفاده از روش next() ، ما به طور دستی از طریق آبجکت ژنراتور تمام ویژگی های value  و done  تمام آبجکت را تکرار می کنیم. با این حال ، درست مانند Array ، Map ، و Set ، یک ژنراتور از پروتکل تکرار پیروی می کند و می تواند با استفاده از for…of تکرار شود:
// Iterate over Generator object
for (const value of generator) {
console.log(value)
}

خروجی زیر باز می گردد:
Output
Neo
Morpheus
Trinity

همچنین می توان از اپراتور spread برای تعیین مقادیر یک ژنراتور به یک آرایه استفاده کرد.
// Create an array from the values of a Generator object
const values = […generator]

console.log(values)

آرایه زیر را ارائه می دهد:
Output
(3) [“Neo”, “Morpheus”, “Trinity”]

هم spread و هم for..of ، return را در مقادیر فاکتور نمیگیرند (در این حالت، ‘The Oracle’ خواهد بود)
توجه: در حالی که هر دو روش برای کار با ژنراتورهای محدود مؤثر هستند ، اگر یک ژنراتور با یک جریان داده نامتناهی سر و کار داشته باشد ، بدون ایجاد یک حلقه نامحدود امکان استفاده مستقیم از spread یا for… of وجود ندارد.

بستن یک ژنراتور
همانطور که مشاهده کردیم ، یک ژنراتور می تواند ویژگی های done  خود را روی true تنظیم کرده و وضعیت خود را با تکرار در تمام مقادیر خود روی closed تنظیم کند. دو روش دیگر وجود دارد که فوراً یک ژنراتور را کنسل کنید: با روش return () و با روش throw().
با return () ، ژنراتور می تواند در هر نقطه خاتمه یابد ، دقیقاً مثل اینکه عبارت return () در بدنه تابع بوده باشد. می توانید یک آرگومان را به return () بفرستید، یا آن را به صورت یک مقدار نامشخص خالی بگذارید.
برای نشان دادن return () ، ما یک ژنراتور با چند مقدار yield ایجاد می کنیم اما در تعریف تابع return وجود ندارد.
function* generatorFunction() {
yield ‘Neo’
yield ‘Morpheus’
yield ‘Trinity’
}

const generator = generatorFunction()

اولین next () به ما “Neo” می دهد ، که done روی false تنظیم شده است. اگر بلافاصله پس از آن از روش return () در ژنراتور استفاده کنیم ، اکنون مقدار عبور داده شده را دریافت می کنیم و done روی true تنظیم می شود. هرگونه فراخوانی دیگر به next () پاسخ ژنراتور کامل شده با مقدار نامشخص را می دهد.
برای نشان دادن این ، سه روش زیر را روی ژنراتور اجرا کنید:
generator.next()
generator.return(‘There is no spoon!’)
generator.next()

این سه نتیجه را می دهد:
Output
{value: “Neo”, done: false}
{value: “There is no spoon!”, done: true}
{value: undefined, done: true}

روش return () آبجکت Generator را مجبور به تکمیل و چشم پوشی از کلمات کلیدی دیگر yield می کند. این امر به ویژه در برنامه نویسی ناهمزمان مفید خواهد بود، هنگامی که شما نیاز به لغو توابع دارید ، از جمله قطع یک درخواست وب در هنگامی که کاربری می خواهد یک عمل متفاوت انجام دهد ، زیرا نمی توان مستقیماً یک promise را لغو کرد.
اگر بدنه یک تابع ژنراتور راهی برای گرفتن و مقابله با خطاها داشته باشد ، می توانید از روش throw() برای انتقال خطا به ژنراتور استفاده کنید. این کار ژنراتور را به کار می اندازد، خطا را وارد می کند و ژنراتور را خاتمه می دهد.
برای نشان دادن این امر ، try…catch را وارد بدنه تابع ژنراتور میکنیم و در صورت یافتن خطا آن را log میکند:
// Define a generator function with a try…catch
function* generatorFunction() {
try {
yield ‘Neo’
yield ‘Morpheus’
} catch (error) {
console.log(error)
}
}

// Invoke the generator and throw an error
const generator = generatorFunction()

اکنون ، متد next () را اجرا خواهیم کرد و به دنبال آن () throw:
generator.next()
generator.throw(new Error(‘Agent Smith!’))

خروجی زیر را می دهد:
Output
{value: “Neo”, done: false}
Error: Agent Smith!
{value: undefined, done: true}

با استفاده از () throw ، خطایی به ژنراتور تزریق کردیم که با try…catch پیدا شد و وارد کنسول گردید.
روشها و حالتهای آبجکت ژنراتور
در جدول زیر لیستی از روش های قابل استفاده در ابجکت های ژنراتور نشان داده شده است:
روش توصیف
next() مقدار بعدی ژنراتور را برمیگرداند
return() مقداری را در ژنراتور برمیگرداند و ژنراتور را به پایان میرساند
throw() خطای ایجاد میکند و ژنراتور را به پایان میرساند
next ()
در جدول بعدی حالت های احتمالی یک آبجکت ژنراتور آورده شده است:
وضعیت توضیحات
suspended ژنراتور اجر را متوقف کرده اما به اتمام نرسیده است
closed ژنراتور به وسیله برخورد با خطای ، بازگشت یا تکرار تمام مقادیر ، خاتمه یافته است

نمایندگی yield
علاوه بر اپراتور yield معمولی ، ژنراتورها می توانند از عبارت yield* نیز استفاده کنند تا مقادیر بیشتری را به ژنراتور دیگر واگذار کنند. هنگامی که با yield* در یک ژنراتور مواجهه انجام می شود ، وارد ژنراتور تفویض شده می شود و با تمام yieldها تا زمانی که آن ژنراتور بسته شود ، تکرار را آغاز می کند. این ویژگی می تواند برای جدا کردن توابع مختلف ژنراتور برای سازماندهی معنایی کد شما مورد استفاده قرار گیرد ، در حالی که هنوز همه yieldهای آنها به ترتیب درست قابل تکرار هستند.
برای توضیف بیشتر ، می توانیم دو تابع ژنراتور ایجاد کنیم که یکی از آنها yield* را در دیگری اجرا می کند:
// Generator function that will be delegated to
function* delegate() {
yield 3
yield 4
}

// Outer generator function
function* begin() {
yield 1
yield 2
yield* delegate()
}

در مرحله بعدی ، بیایید از طریق تابع ژنراتور begin() تکرار انجام دهیم:
// Iterate through the outer generator
const generator = begin()

for (const value of generator) {
console.log(value)
}

مقدار زیر را به ترتیب تولید ارائه می دهد:
Output
1
2
3
4

ژنراتور خارجی مقادیر 1 و 2 را میدهد ، سپس با yield* به ژنراتور دیگر واگذار میکند و 3 و 4 را برمیگرداند.
yield* همچنین می تواند به هر آبجکتی که قابل تکرار باشد ، مانند یک آرایه یا یک نقشه واگذار شود. واگذاری yield می تواند در سازماندهی کد کمک کننده باشد ، زیرا هر تابعی در یک ژنراتور که بخواهد از yield استفاده کند نیز باید یک ژنراتور باشد.
جریان های بی نهایت داده
یکی از جنبه های مفید ژنراتورها ، امکان کار با جریان ها و مجموعه های اطلاعات نامحدود است. این را می توان با ایجاد یک حلقه نامحدود در داخل یک تابع ژنراتور نشان داد که یک عدد را یک به یک افزایش می دهد.
در بلوک کد زیر این تابع ژنراتور را تعریف می کنیم و سپس ژنراتور را شروع می کنیم:
// Define a generator function that increments by one
function* incrementer() {
let i = 0

while (true) {
yield i++
}
}

// Initiate the generator
const counter = incrementer()

اکنون با استفاده از next () مقادیر را تکرار کنید:
// Iterate through the values
counter.next()
counter.next()
counter.next()
counter.next()

خروجی زیر را می دهد
Output
{value: 0, done: false}
{value: 1, done: false}
{value: 2, done: false}
{value: 3, done: false}

این تابع مقادیر پی در پی را در حلقه نامحدود برمیگرداند ، در حالی که ویژگی done روی false میماند ، و اطمینان حاصل می کند که تمام نمی شود.
در کار با ژنراتورها ، لازم نیست نگران ایجاد یک حلقه نامحدود باشید ، زیرا می توانید به خواست خود متوقف کنید و از سر بگیرید. با این حال ، شما هنوز هم باید در مورد چگونگی استناد به ژنراتور احتیاط کنید. اگر در یک جریان داده نامتناهی از spread یا for …of استفاده می کنید ، همچنان یک حلقه بی نهایت را یکباره تکرار می کنید ، که باعث کرش محیط می شود.
برای یک مثال پیچیده تر از یک جریان داده نامتناهی ، می توانیم یک تابع ژنراتور فیبوناچی ایجاد کنیم. دنباله فیبوناچی ، که به طور مداوم دو مقدار قبلی را با هم جمع می کند ، می تواند با استفاده از یک حلقه نامحدود در یک ژنراتور به شرح زیر نوشته شود:
// Create a fibonacci generator function
function* fibonacci() {
let prev = 0
let next = 1

yield prev
yield next

// Add previous and next values and yield them forever
while (true) {
const newVal = next + prev

yield newVal

prev = next
next = newVal
}
}

برای آزمایش این مورد ، می توانیم از یک تعداد محدود حلقه کمک بگیریم و دنباله فیبوناچی را بر روی کنسول چاپ کنیم.
// Print the first 10 values of fibonacci
const fib = fibonacci()

for (let i = 0; i < 10; i++) {
console.log(fib.next().value)
}

خروجی زیر را نشان می دهد:
Output
0
1
1
2
3
5
8
13
21
34

توانایی کار با مجموعه داده های نامتناهی بخشی از ویژگی هایی است که ژنراتورها را بسیار قدرتمند می کند. این می تواند برای مثالهایی مانند اجرای اسکرول نامحدود در یک برنامه وب مفید باشد.
انتقال مقادیر در ژنراتورها
در طول این مقاله ، ما از ژنراتورها به عنوان تکرارگر استفاده کرده ایم و در هر تکرار مقادیری به دست آورده ایم. علاوه بر تولید مقادیر ، ژنراتورها می توانند مقادیری را نیز از next () مصرف کنند . در این حالت ، yield شامل یک مقدار است.
توجه به این نکته ضروری است که اولین next () که فراخوانی می شود مقداری را منتقل نمی کند ، بلکه فقط ژنراتور را راه اندازی می کند. برای نشان دادن این ویژگی ، می توانیم مقدار yield را ثبت کنیم و next () را با برخی از مقادیر چند بار فراخوانی کنیم.
function* generatorFunction() {
console.log(yield)
console.log(yield)

return ‘The end’
}

const generator = generatorFunction()

generator.next()
generator.next(100)
generator.next(200)

خروجی زیر را به دست می دهد:
Output
100
200
{value: “The end”, done: true}

همچنین می توان ژنراتور را با مقدار اولیه بذردهی کرد. در مثال زیر ، حلقه ای را ایجاد می کنیم و هر مقدار را به روش next () منتقل می کنیم ، اما یک آرگومان را نیز به تابع اولیه منتقل می کنیم:
function* generatorFunction(value) {
while (true) {
value = yield value * 10
}
}

// Initiate a generator and seed it with an initial value
const generator = generatorFunction(0)

for (let i = 0; i < 5; i++) {
console.log(generator.next(i).value)
}

ما مقدار را از next () بازیابی می کنیم و مقدار جدیدی را در تکرار بعدی میگیریم که ضرب مقدار قبلی در ده است . خروجی زیر را نشان می دهد:
Output
0
10
20
30
40

راه دیگر برای کار با یک ژنراتور این است که ژنراتور را در تابعی محصور کنید که همیشه قبل از انجام هر کار دیگری ، next () را فراخوانی میکند.
async/await به همراه ژنراتورها
یک تابع ناهمزمان نوعی از توابع موجود در ES6 + JavaScript است که با ایجاد ظاهر همزمان، کار با داده های ناهمزمان را آسان تر می کند. ژنراتورها دارای قابلیتهای گسترده تری نسبت به توابع ناهمزمان هستند ، اما قادر به تکرار رفتارهای مشابه هستند. اجرای برنامه نویسی ناهمزمان از این طریق می تواند انعطاف پذیری کد شما را افزایش دهد.
در این بخش نمونه ای از بازتولید async/await را با ژنراتورها نشان خواهیم داد.
بیایید یک تابع ناهمزمان ایجاد کنیم که از API Fetch برای دریافت داده از API JSONPlaceholder استفاده میکند (که داده های JSON مثال را برای اهداف آزمایش ارائه می دهد) و پاسخ را به کنسول وارد می کند.
با تعریف تابعی ناهمزمان به نام getUsers که داده ها را از API دریافت می کند و مجموعه ای از ابجکت ها را برمی گرداند ، شروع کرده سپس getUsers را فراخوانی کنید:
const getUsers = async function() {
const response = await fetch(‘https://jsonplaceholder.typicode.com/users’)
const json = await response.json()

return json
}

// Call the getUsers function and log the response
getUsers().then(response => console.log(response))

با این کار داده های JSON مشابه زیر ارائه می شود:
Output
[ {id: 1, name: “Leanne Graham” …},
{id: 2, name: “Ervin Howell” …},
{id: 3, name”: “Clementine Bauch” …},
{id: 4, name: “Patricia Lebsack”…},
{id: 5, name: “Chelsey Dietrich”…},
…]

با استفاده از ژنراتورها ، می توانیم چیزی تقریباً یکسان ایجاد کنیم که از کلمات کلیدی async/await استفاده نکند. در عوض ، از تابع جدیدی که ایجاد می کنیم استفاده می کند و به جای promiseهای await ، مقادیر را yield میکند.
در بلوک کد زیر ، تابعی به نام getUsers را تعریف می کنیم که از تابع جدید asyncAlt (که بعداً خواهیم نوشت) استفاده می کند تا async / await را شبیه سازی کند.
const getUsers = asyncAlt(function*() {
const response = yield fetch(‘https://jsonplaceholder.typicode.com/users’)
const json = yield response.json()

return json
})

// Invoking the function
getUsers().then(response => console.log(response))

همانطور که می بینیم ، تقریباً شبیه اجرای async/await است ، با این تفاوت که یک تابع ژنراتور وجود دارد که مقادیر را yield میکند.
اکنون می توانیم یک تابع asyncAlt ایجاد کنیم که شبیه به یک تابع ناهمزمان باشد. asyncAlt یک تابع ژنراتور به عنوان یک پارامتر دارد ، که تابع ما میباشد و promiseهایی را که باز می گرداند yield میکند. asyncAlt خود یک تابع را برمی گرداند و هر promise ای که می یابد را تا آخرین مورد برطرف می کند:
// Define a function named asyncAlt that takes a generator function as an argument
function asyncAlt(generatorFunction) {
// Return a function
return function() {
// Create and assign the generator object
const generator = generatorFunction()

// Define a function that accepts the next iteration of the generator
function resolve(next) {
// If the generator is closed and there are no more values to yield,
// resolve the last value
if (next.done) {
return Promise.resolve(next.value)
}

// If there are still values to yield, they are promises and
// must be resolved.
return Promise.resolve(next.value).then(response => {
return resolve(generator.next(response))
})
}

// Begin resolving promises
return resolve(generator.next())
}
}

همان خروجی نسخه async / await را خواهد داد:
Output
[ {id: 1, name: “Leanne Graham” …},
{id: 2, name: “Ervin Howell” …},
{id: 3, name”: “Clementine Bauch” …},
{id: 4, name: “Patricia Lebsack”…},
{id: 5, name: “Chelsey Dietrich”…},
…]

توجه داشته باشید که این اجرا برای نشان دادن چگونگی استفاده از ژنراتورها به جای async / await است و یک طراحی آماده برای تولید نیست. این روش در تنظیمات خطایی ندارد و همچنین توانایی انتقال پارامترها به مقادیر yield را ندارد. گرچه این روش می تواند انعطاف پذیری را به کد شما بیفزاید ، اما اغلب async/awaitانتخاب بهتری خواهد بود ، زیرا جزئیات اجرا را خلاصه می کند و به شما امکان می دهد تا روی نوشتن کد موثر تمرکز کنید.
نتیجه
ژنراتورها فرآیندهایی هستند که می توانند اجرا را متوقف کرده و از سر گرفته شوند. آنها یکی از ویژگی های قدرتمند و همه کاره جاوا اسکریپت هستند ، اگرچه معمولاً مورد استفاده قرار نمی گیرند. در این آموزش با توابع ژنراتور و آبجکت های ژنراتور ، روش های موجود برای ژنراتورها ، عملگرهای yield* و yield و ژنراتورهای مورد استفاده با مجموعه داده های محدود و نامتناهی آشنا شدیم. همچنین یک راه برای پیاده سازی کد ناهمزمان را بدون کال بک های آشیانه ای یا زنجیره های طولانی promise بررسی کردیم.
اگر می خواهید در مورد دستورات JavaScript بیشتر بیاموزید ، به آموزش درک، اتصال ، فراخوانی و اعمال در JavaScript و فهم Map و تنظیم آبجکت ها در آموزش های JavaScript مراجعه کنید.

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
Shipit ابزار جهانی اتوماسیون و استقرار برای توسعه دهندگان Node.js است. این ابزار شامل یک جریان کار بر اساس پکیج محبوب Orchestrator ، ورود به سیستم و دستورات SSH تعاملی از طریق OpenSSH و یک API قابل توسعه است. توسعه دهندگان می توانند از Shipit برای خودکار سازی جریان های کاری ساخت و استقرار در طیف گسترده ای از برنامه های Node.js استفاده کنند.
گردش کار Shipit به توسعه دهندگان اجازه می دهد تا نه تنها کارها را پیکربندی کنند ، بلکه ترتیب اجرای آنها را نیز مشخص کنند. و اینکه آیا باید همزمان یا ناهمزمان اجرا شوند و در کدام محیط قرار گیرند.
در این آموزش Shipit را برای به کارگیری برنامه Node.js از محیط توسعه محلی خود به محیط تولید خود نصب و پیکربندی می کنید. شما به وسیله موارد زیر از Shipit برای استقرار برنامه خود و پیکربندی سرور مجازی از راه دور استفاده میکنید:
• انتقال فایل های برنامه Node.js از محیط محلی خود به محیط تولید (با استفاده از rsync ، git و ssh).
• نصب متعلقات برنامه (ماژول های گره).
• پیکربندی و مدیریت فرآیندهای Node.js در حال اجرا بر روی سرور مجازی از راه دور با PM2.
پیش نیازها
قبل از شروع این آموزش به موارد زیر نیاز خواهید داشت:
⦁ دو سرور مجازی CentOS 7 (در این آموزش آنها را با app و web نامگذاری میکنیم) که توسط شبکه های خصوصی و طبق آموزش نحوه تنظیم برنامه Node.js برای تولید در CentOS 7 پیکربندی شده باشد.
⦁ Nginx (روی سرور مجازی وب خود) که با TLS / SSL همانطور که در آموزش نحوه ایمن سازی Nginx با رمزگذاری در CentOS 7 نشان داده شده ایمن شده باشد. توجه داشته باشید ، اگر پیش نیازها را به ترتیب دنبال می کنید ، فقط باید مراحل 1 ، 4 و 6 را در سرور مجازی وب خود انجام دهید.
⦁ Node.js و npm که در محیط توسعه شما نصب شده باشند. در این آموزش از نسخه 10.17.0 استفاده شده است. برای نصب این برنامه در macOS یا Ubuntu 18.04 ، مراحل نحوه نصب Node.js و ایجاد محیط توسعه محلی را در macOS یا نصب با استفاده از بخش PPA از نحوه نصب Node.js در اوبونتو 18.04 دنبال کنید. با نصب Node.js ، npm را نیز نصب خواهید کرد. این آموزش از نسخه 6.11.3 استفاده می کند.
⦁ یک کامپیوتر توسعه محلی که روی آن rsync و git نصب شده باشد.
⦁ در macOS می توانید این موارد را با Homebrew نصب کنید.
⦁ برای نصب git در توزیع های لینوکس ، آموزش نحوه نصب Git را دنبال کنید.
⦁ یک حساب کاربری با GitHub یا یک ارائه دهنده سرویس git میزبان دیگر. در این آموزش از GitHub استفاده می شود.
توجه: کاربران Windows برای اجرای دستورات موجود در این راهنما نیاز به نصب ساب سیستم ویندوز برای لینوکس دارند.

مرحله 1 – تنظیم منبع راه دور
Shipit برای همگام سازی بین دستگاه توسعه محلی و سرور مجازی از راه دور به یک منبع Git نیاز دارد. در این مرحله یک منبع از راه دور در Github.com ایجاد خواهید کرد. در حالی که هر ارائه دهنده (PROVIDER) کمی متفاوت است ، دستورات تا حدودی قابل انتقال هستند.
برای ایجاد یک منبع ، Github.com را در مرورگر وب خود باز کنید و وارد شوید. متوجه خواهید شد که در گوشه سمت راست و بالای هر صفحه یک نماد + وجود دارد. روی + کلیک کنید ، و سپس روی New repository کلیک کنید.

برای منبع خود ، یک نام کوتاه و قابل به خاطر سپردن مثلا HELLO WORLD انتخاب کنید. توجه داشته باشید که هر نامی را که در اینجا انتخاب می کنید به عنوان پوشه پروژه که از دستگاه محلی خود کار خواهید کرد ، تکرار می شود.

به صورت اختیاری ، توضیحی از منبع خود اضافه کنید.

نمایش منبع خود را بر اساس اولویت خود ، عمومی یا خصوصی تنظیم کنید.
اطمینان حاصل کنید که منبع با .gitignore آغاز شده است ، از لیست کشویی Add .gitignore ، node را انتخاب کنید. این مرحله برای جلوگیری از اضافه شدن فایل های غیر ضروری (مانند پوشه node_modules) به منبع شما مهم است.

روی دکمه Create repository کلیک کنید.
اکنون منبع باید از Github.com به دستگاه محلی شما کلون شود.
ترمینال خود را باز کرده و به محلی که می خواهید فایلهای پروژه Node.js خود را ذخیره کنید ، بروید. توجه داشته باشید که این فرآیند یک زیر پوشه را در دیرکتوری اصلی ایجاد می کند. برای کلون کردن منبع به دستگاه محلی خود ، دستور زیر را اجرا کنید:
⦁ $ git clone https://github.com/your-github-username/your-github-repository-name.git
برای بازتاب نام کاربری Github و نام منبع قبلاً عرضه شده خود ، باید your-github-username و your-github-repository-name را جایگزین کنید.
توجه: اگر تأیید صحت دو عاملی (2FA) را در Github.com فعال کرده اید ، هنگام دسترسی به Github در خط فرمان ، باید از یک نشانه دسترسی شخصی یا کلید SSH به جای رمزعبور استفاده کنید. صفحه راهنما Github مربوط به 2FA اطلاعات بیشتری را ارائه می دهد.

خروجی مشابه با این خواهید دید:
Output
Cloning into ‘your-github-repository-name’…
remote: Enumerating objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Unpacking objects: 100% (3/3), done.

با اجرای دستور زیر به منبع بروید:
⦁ $ cd your-github-repository-name

در داخل منبع یک فایل تکی و پوشه وجود دارد که هر دو فایل مورد استفاده Git برای مدیریت منبع هستند. می توانید این موضوع را با این دستور زیر تأیید کنید:
⦁ $ ls -la

خروجی مشابه زیر را مشاهده خواهید کرد:
Output
total 8
0 drwxr-xr-x 4 asciant staff 128 22 Apr 07:16 .
0 drwxr-xr-x 5 asciant staff 160 22 Apr 07:16 ..
0 drwxr-xr-x 13 asciant staff 416 22 Apr 07:16 .git
8 -rw-r–r– 1 asciant staff 914 22 Apr 07:16 .gitignore

اکنون که یک منبع git کاری را پیکربندی کرده اید ، فایل shipit.js را ایجاد خواهید کرد که روند استقرار شما را مدیریت می کند.
مرحله 2 – ادغام shipit در یک پروژه Node.js
در این مرحله ، یک نمونه پروژه Node.js ایجاد می کنید و سپس پکیج های Shipit را اضافه می کنید. این آموزش یک برنامه مثال را ارائه می دهد – سرور مجازی وب Node.js که درخواست HTTP را می پذیرد و با Hello World در متن ساده پاسخ می دهد. برای ایجاد برنامه ، دستور زیر را اجرا کنید:
⦁ $ nano hello.js
کد برنامه مثال زیر را به hello.js اضافه کنید (به روزرسانی متغیر APP_PRIVATE_IP_ADDRESS به آدرس IP شبکه خصوصی سرور مجازی برنامه خود(:
hello.js
var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World\n’);
}).listen(8080, ‘APP_PRIVATE_IP_ADDRESS’);
console.log(‘Server running at http://APP_PRIVATE_IP_ADDRESS:8080/’);

اکنون فایل pack.json خود را برای برنامه تان ایجاد کنید:
⦁ $ npm init -y
این دستور یک فایل pack.json ایجاد می کند ، که شما برای پیکربندی برنامه Node.js خود استفاده خواهید کرد. در مرحله بعد ، با رابط خط فرمان npm ، به این فایل متعلقات را اضافه خواهید کرد.
Output
Wrote to ~/hello-world/package.json:
{
“name”: “hello-world”,
“version”: “1.0.0”,
“description”: “”,
“main”: index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1″
},
“keywords”: [],
“author”: “”,
“license”: “ISC”
}

سپس ، بسته های npm لازم را با دستور زیر نصب کنید:
⦁ $ npm install –save-dev shipit-cli shipit-deploy shipit-shared
از فلگ –save-dev استفاده می کنید زیرا بسته های Shipit فقط در دستگاه محلی شما مورد نیاز است. خروجی مشابه زیر را مشاهده خواهید کرد:
Output
+ shipit-shared@4.4.2
+ shipit-cli@4.2.0
+ shipit-deploy@4.1.4
updated 4 packages and audited 21356 packages in 11.671s
found 62 low severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details

این کار همچنین سه بسته را به عنوان بسته های توسعه به فایل pack.json شما اضافه میکند:
package.json
. . .
“devDependencies”: {
“shipit-cli”: “^4.2.0”,
“shipit-deploy”: “^4.1.4”,
“shipit-shared”: “^4.4.2”
},
. . .

با پیکربندی محیط محلی خود ، اکنون می توانید به سراغ آماده سازی سرور مجازی برنامه از راه دور برای استقرار مبتنی بر Shipit بروید.
مرحله 3 – تهیه سرور مجازی برنامه از راه دور
در این مرحله از ssh برای اتصال به سرور مجازی برنامه خود و نصب متعلقات از راه دور rsync استفاده خواهید کرد. Rsync ابزاری برای انتقال کارآمد و همگام سازی فایل ها بین درایوهای رایانه های محلی و در سراسر رایانه های شبکه با مقایسه زمان و اندازه تغییر فایل ها است.
Shipit از rsync برای انتقال و همگام سازی فایل ها بین رایانه محلی و سرور مجازی برنامه از راه دور استفاده می کند. شما دستوراتی را به صورت مستقیم به rsync صادر نمی کنید ؛ Shipit آن را برای شما مدیریت می کند.
توجه: راهنمای نحوه راه اندازی یک برنامه Node.js برای تولید در CentOS 7 ، دو سرور مجازی app و web را به شما معرفی میکند. این دستورات باید فقط در app اجرا شوند.

از طریق sshبه سرور مجازی برنامه راه دور خود متصل شوید:
⦁ $ ssh deployer@your_app_server_ip
rsync را با اجرای دستور زیر بر روی سرور مجازی خود نصب کنید:
⦁ $ sudo yum install rsync
نصب را با دستور زیر تایید کنید:
⦁ $ rsync –version
خط مشابهی را در خروجی این دستور مشاهده خواهید کرد:
Output
rsync version 3.1.2 protocol version 31
. . .

می توانید بخش ssh خود را با تایپ کردن exit پایان دهید.
با نصب و دسترسی rsync در خط فرمان ، می توانید به سراغ کارهای استقرار و ارتباط آنها با رویدادها بروید.
مرحله 4 – پیکربندی و اجرای کارهای استقرار
هم events و هم tasks مؤلفه های اصلی استقرار Shipit هستند و درک چگونگی تکمیل استقرار برنامه شما توسط آن ها مهم است. رویدادهای (events) ناشی از Shipit بیانگر نقاط خاصی در چرخه عمر استقرار هستند. کارها (tasks) بر اساس توالی چرخه زندگی Shipit در پاسخ به این رویدادها اجرا خواهند شد.
یک نمونه متداول از این که این سیستم وظیفه / رویداد در یک برنامه Node.js چگونه مفید است ، نصب متعلقات برنامه (node_modules) روی سرور مجازی راه دور است. بعداً در این مرحله ، شما باید Shipit را برای بررسی و گوش دادن به رویداد آپدیت شده (که بعد از انتقال فایل های برنامه صادر می شود) به کار بگیرید و یک task را برای نصب متعلقات برنامه (نصب npm) بر روی سرور مجازی راه دور اجرا کنید.
برای گوش دادن به رویدادها و اجرای وظایف ، Shipit به یک فایل پیکربندی نیاز دارد که اطلاعات مربوط به سرور مجازی راه دور شما (سرور مجازی app) را در اختیار داشته باشد و شنوندگان رویدادها و دستوراتی را که باید توسط این وظایف اجرا شوند را ثبت می کند. این فایل در رایانه توسعه محلی شما ، در دیرکتوری برنامه Node.js شما قرار دارد.
برای شروع ، این فایل را ایجاد کنید ، از جمله اطلاعاتی درباره سرور مجازی راه دور خود ، شنوندگان رویدادی که می خواهید تایید کنید و برخی از تعریف های مربوط به کارهایتان. با اجرای دستور زیر shipitfile.js را در دیرکتوری اصلی برنامه خود در دستگاه محلی خود ایجاد کنید:
⦁ $ nano shipitfile.js
اکنون که فایلی را ایجاد کرده اید ، باید اطلاعات اولیه محیطی مورد نیاز Shipit را جمع کند. در درجه اول مکان منبع Git از راه دور شما و مهمتر از همه ، آدرس IP عمومی سرور مجازی برنامه شما و حساب کاربری SSH میباشد.
این پیکربندی اولیه را اضافه کنید و خطوط هایلایت شده را به روز کنید تا با محیط شما مطابقت داشته باشد:
shipitfile.js
module.exports = shipit => {
require(‘shipit-deploy’)(shipit);
require(‘shipit-shared’)(shipit);

const appName = ‘hello’;

shipit.initConfig({
default: {
deployTo: ‘/home/sammy/your-domain’,
repositoryUrl: ‘https://git-provider.tld/YOUR_GIT_USERNAME/YOUR_GIT_REPO_NAME.git’,
keepReleases: 5,
shared: {
overwrite: true,
dirs: [‘node_modules’]
}
},
production: {
servers: ‘sammy@YOUR_APP_SERVER_PUBLIC_IP’
}
});

const path = require(‘path’);
const ecosystemFilePath = path.join(
shipit.config.deployTo,
‘shared’,
‘ecosystem.config.js’
);

// Our listeners and tasks will go here

};

به روزرسانی متغیرها در روش shipit.initConfig پیکربندی خاصی را برای Shipit برای استقرار شما فراهم می کند. این موارد نشان دهنده موارد زیر برای Shipit است:
⦁ deployTo: دایرکتوری است که Shipit کد برنامه شما را روی سرور مجازی از راه دور مستقر می کند. در اینجا از پوشه / home / برای کاربر غیر root با امتیازات sudo (/ home / sammy) استفاده می کنید چرا که امن است و از مشکلات مجوزی جلوگیری می کند. مؤلفه /your-domain یک کنوانسیون نامگذاری برای تشخیص پوشه از سایر موارد در پوشه هوم کاربر است.
⦁ repositoryUrl: URL برای منبع کامل Git است ، Shipit از این URL استفاده می کند تا اطمینان حاصل کند که فایل های پروژه قبل از استقرار در همگام سازی هستند.
⦁ KeepReleases: تعداد نسخه هایی است که می توانید روی سرور مجازی از راه دور نگه دارید. یک نسخه پوشه ای با تاریخ مهر شده است که حاوی فایل های برنامه شما در زمان انتشار میباشد. اینها می توانند برای رول بک استقرار مفید باشند.
⦁ Shared : پیکربندی است که با KeepReleases مطابقت دارد و اجازه می دهد تا دایرکتوری ها بین نسخه ها به اشتراک گذاشته شوند. در این مثال ، یک پوشه node_modules منفرد داریم که بین همه نسخه ها به اشتراک گذاشته می شود.
⦁ production: یک سرور مجازی از راه دور را برای به کارگیری برنامه شما به کاربر نشان می دهد. در این مثال ، شما دارای یک سرور مجازی واحد (سرور مجازی app) هستید که نام production را با پیکربندی servers: متناسب با کاربر SSH و آدرس IP عمومی خود نامگذاری میکنید. نام production مربوط به Shipit ، فرمان استفاده شده در انتهای این آموزش به کار میگیرد (npx shipit server name deploy یا در مورد شما ( npx shipit production deploy
اطلاعات بیشتر در مورد موضوع پیکربندی Shipit Deploy را می توان در منبع Shipit Github یافت.
قبل از ادامه به روزرسانی shipitfile.js ، اجازه دهید نمونه خرده کد زیر را برای درک وظایف Shipit بررسی کنیم:
Example event listenershipit.on(‘deploy’, () => {
shipit.start(‘say-hello’);
});

shipit.blTask(‘say-hello’, async () => {
shipit.local(‘echo “hello from your local computer”‘)
});

این یک task نمونه است که از روش shipit.on برای عضویت در رویداد deploy استفاده می کند. این task منتظر میماند تا رویداد deploy توسط چرخه Shipit منتشر شود ، پس از دریافت رویداد ، task روش shipit.start را اجرا می کند که به Shipit می گوید کار say-hello را شروع کند.
روش shipit.on دو پارامتر میگیرد ، نام رویداد برای گوش دادن به آن و تابع callback برای اجرا هنگام دریافت رویداد.
طبق توضیحات روش shipit.on ، task با روش shipit.blTask ​​تعریف شده است. این یک task جدید Shipit ایجاد می کند که سایر کارها را هنگام اجرای آن مسدود می کند (یک task همزمان است). روش shipit.blTask ​​نیز دو پارامتر میگیرد ، نام task ای که آن را تعریف می کند و یک تابع callback برای اجرا هنگام فعالسازی task توسط shipit.start .
در تابع callback این مثال (say-hello) ، روش shipit.local یک دستور در دستگاه محلی اجرا می کند. فرمان محلی ” hello from your local computer ” را به خروجی ترمینال می فرستد.
اگر می خواستید یک دستور روی سرور مجازی از راه دور اجرا کنید ، از روش shipit.remote استفاده می کردید. دو روش ، shipit.local و shipit.remote ، API را برای صدور دستورات به صورت محلی یا از راه دور به عنوان بخشی از استقرار فراهم می کنند.
اکنون shipitfile.js را به روز کنید تا شنوندگان رویداد برای عضویت در چرخه Shipit با shipit.on عضو شوند. شنوندگان رویداد را به shipitfile.js خود اضافه کنید و آنها را پس از مکان نگهدارنده کامنت از پیکربندی اولیه // Our tasks will go here درج کنید:
shipitfile.js
. . .
shipit.on(‘updated’, () => {
shipit.start(‘npm-install’, ‘copy-config’);
});

shipit.on(‘published’, () => {
shipit.start(‘pm2-server’);
});

این دو روش در حال گوش دادن به رویدادهای به روز شده و منتشر شده هستند که به عنوان بخشی از چرخه Shipit منتشر می شوند. هنگامی که این رویداد دریافت شد ، هر یک از آنها taskهایی را با استفاده از روش shipit.start ، به طور مشابه با task مثال ، آغاز می کنند.
اکنون که جدول شنوندگان را برنامه ریزی کرده اید ، task مربوطه را اضافه خواهید کرد. task زیر را به shipitfile.js خود اضافه کنید ، آنها را بعد از شنوندگان رویداد خود وارد کنید:
shipitfile.js
. . .
shipit.blTask(‘copy-config’, async () => {

const fs = require(‘fs’);

const ecosystem = `
module.exports = {
apps: [
{
name: ‘${appName}’,
script: ‘${shipit.releasePath}/hello.js’,
watch: true,
autorestart: true,
restart_delay: 1000,
env: {
NODE_ENV: ‘development’
},
env_production: {
NODE_ENV: ‘production’
}
}
]
};`;

fs.writeFileSync(‘ecosystem.config.js’, ecosystem, function(err) {
if (err) throw err;
console.log(‘File created successfully.’);
});

await shipit.copyToRemote(‘ecosystem.config.js’, ecosystemFilePath);
});

ابتدا یک task را با عنوان copy-config اعلام می کنید. این task یک فایل محلی به نام ecosystem.config.js ایجاد می کند و سپس آن فایل را در سرور مجازی برنامه راه دور شما کپی می کند. PM2 از این فایل برای مدیریت برنامه Node.js استفاده می کند. این کار اطلاعات مسیر لازم جهت فایل را به PM2 برای اطمینان از اجرای آخرین فایل های مستقر شده در اختیار شما قرار می دهد. بعداً در مراحل ساخت ، TASK ای را ایجاد خواهید کرد که PM2 را با ecosystem.config.js به عنوان پیکربندی اجرا می کند.
اگر برنامه شما به متغیرهای محیطی نیاز دارد (مانند رشته اتصال به بانک اطلاعاتی) می توانید آنها را به صورت محلی در env: یا در سرور مجازی راه دور در env_production اعلام کنید: به همان روشی که متغیر NODE_ENV را در این موضوعات تنظیم کرده اید.
بعد از copy-config ، task بعدی را به shipitfile.js اضافه کنید:
shipitfile.js
. . .
shipit.blTask(‘npm-install’, async () => {
shipit.remote(`cd ${shipit.releasePath} && npm install –production`);
});

در مرحله بعد ، task ای به نام npm-install را اعلام می کنید. این task برای نصب متعلقات برنامه (بسته های npm) از یک ترمینال bash از راه دور (از طریق shipit.remote) استفاده می کند.
بعد از npm-install ، آخرین task را به shipitfile.js خود اضافه کنید:
shipitfile.js
. . .
shipit.blTask(‘pm2-server’, async () => {
await shipit.remote(`pm2 delete -s ${appName} || :`);
await shipit.remote(
`pm2 start ${ecosystemFilePath} –env production –watch true`
);
});

سرانجام task ای بنام pm2-server را اعلام می کنید. این task نیز از یک ترمینال bash از راه دور استفاده می کند تا ابتدا PM2 را از مدیریت استقرار قبلی شما از طریق فرمان delete متوقف کند و سپس یک نمونه جدید از سرور مجازی Node.js شما را شروع کند که فایل ecosystem.config.js را به عنوان یک متغیر فراهم می کند. شما همچنین به PM2 اطلاع میدهید که باید در تنظیمات اولیه خود از متغیرهای محیطی از بلوک production استفاده کند و از PM2 می خواهید که برنامه را تماشا کند و در صورت خرابی مجدداً آن را راه اندازی کند.
فایل کامل shipitfile.jsاینگونه خواهد بود:
shipitfile.js
module.exports = shipit => {
require(‘shipit-deploy’)(shipit);
require(‘shipit-shared’)(shipit);

const appName = ‘hello’;

shipit.initConfig({
default: {
deployTo: ‘/home/deployer/example.com’,
repositoryUrl: ‘https://git-provider.tld/YOUR_GIT_USERNAME/YOUR_GIT_REPO_NAME.git’,
keepReleases: 5,
shared: {
overwrite: true,
dirs: [‘node_modules’]
}
},
production: {
servers: ‘deployer@YOUR_APP_SERVER_PUBLIC_IP’
}
});

const path = require(‘path’);
const ecosystemFilePath = path.join(
shipit.config.deployTo,
‘shared’,
‘ecosystem.config.js’
);

// Our listeners and tasks will go here
shipit.on(‘updated’, async () => {
shipit.start(‘npm-install’, ‘copy-config’);
});

shipit.on(‘published’, async () => {
shipit.start(‘pm2-server’);
});

shipit.blTask(‘copy-config’, async () => {
const fs = require(‘fs’);
const ecosystem = `
module.exports = {
apps: [
{
name: ‘${appName}’,
script: ‘${shipit.releasePath}/hello.js’,
watch: true,
autorestart: true,
restart_delay: 1000,
env: {
NODE_ENV: ‘development’
},
env_production: {
NODE_ENV: ‘production’
}
}
]
};`;

fs.writeFileSync(‘ecosystem.config.js’, ecosystem, function(err) {
if (err) throw err;
console.log(‘File created successfully.’);
});

await shipit.copyToRemote(‘ecosystem.config.js’, ecosystemFilePath);
});

shipit.blTask(‘npm-install’, async () => {
shipit.remote(`cd ${shipit.releasePath} && npm install –production`);
});

shipit.blTask(‘pm2-server’, async () => {
await shipit.remote(`pm2 delete -s ${appName} || :`);
await shipit.remote(
`pm2 start ${ecosystemFilePath} –env production –watch true`
);
});
};

هنگامی که آماده بودید ، فایل را ذخیره کنید و از آن خارج شوید.
با پیکربندی shipitfile.js ، و نهایی کردن شنوندگان رویدادها و کارهای مرتبط، می توانید به سراغ استقرار روی سرور مجازی برنامه بروید.
مرحله 5 – استقرار برنامه
در این مرحله ، برنامه خود را از راه دور مستقر می کنید و آزمایش می کنید که استقرار برنامه شما را در دسترس اینترنت قرار داده شده است.
از آنجا که Shipit فایلهای پروژه را از منبع راه دور Git کلون می کند ، باید فایلهای برنامه Node.js محلی خود را از دستگاه محلی خود به سمت Github بفرستید. به دیرکتوری برنامه های پروژه Node.js خود بروید (جایی که hello.js و shiptitfile.js در آن قرار دارند) و دستور زیر را اجرا کنید:
⦁ $ git status
دستور git status وضعیت دایرکتوری کاری و منطقه مرحله بندی را نشان می دهد. به شما امکان می دهد ببینید کدام تغییرات روی صحنه رفته است ، کدام موارد انجام نشده است ، و کدام فایل ها توسط Git ردیابی نمی شوند. فایل های شما غیرفعال هستند و در خروجی به صورت قرمز ظاهر می شوند:
Output
On branch master
Your branch is up to date with ‘origin/master’.

Untracked files:
(use “git add <file>…” to include in what will be committed)

hello.js
package-lock.json
package.json
shipitfile.js

nothing added to commit but untracked files present (use “git add” to track)

با دستور زیر می توانید این فایل ها را به منبع خود اضافه کنید:
⦁ $ git add –all
این دستور هیچ گونه خروجی ایجاد نمی کند ، اگرچه اگر شما مجدداً git statu را اجرا کنید ، فایل ها با توجه به این نکته که تغییراتی در این زمینه وجود دارد سبز می شوند.
می توانید با اجرای دستور زیر یک commit ایجاد کنید:
⦁ $ git commit -m “Our first commit”
خروجی این فرمان برخی از اطلاعات مخصوص Git درباره فایل ها را فراهم می کند
Output
[master c64ea03] Our first commit
4 files changed, 1948 insertions(+)
create mode 100644 hello.js
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 shipitfile.js

تمام کاری که اکنون باقی مانده است این است که commit خود را به منبع راه دور Shipit منتقل کنید تا در حین استقرار به سرور مجازی برنامه شما کلون شود. دستور زیر را اجرا کنید:
⦁ $ git push origin master
خروجی شامل اطلاعات مربوط به هماهنگی با منبع از راه دور است:
Output
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 15.27 KiB | 7.64 MiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To github.com:Asciant/hello-world.git
e274312..c64ea03 master -> master

برای استقرار برنامه خود ، دستور زیر را اجرا کنید:
⦁ $ npx shipit production deploy
خروجی این دستور (که کل آن بسیار طولانی است) جزئیات مربوط به کارهایی که انجام می شود و نتیجه تابع خاص را ارائه میدهد. خروجی زیر برای کار pm2-server نشان می دهد که برنامه Node.js راه اندازی شده است:
Output
Running ‘deploy:init’ task…
Finished ‘deploy:init’ after 432 μs
. . .
Running ‘pm2-server’ task…
Running “pm2 delete -s hello || :” on host “centos-ap-app.asciant.com”.
Running “pm2 start /home/deployer/example.com/shared/ecosystem.config.js –env production –watch true” on host “centos-ap-app.asciant.com”.
@centos-ap-app.asciant.com [PM2][WARN] Node 4 is deprecated, please upgrade to use pm2 to have all features
@centos-ap-app.asciant.com [PM2][WARN] Applications hello not running, starting…
@centos-ap-app.asciant.com [PM2] App [hello] launched (1 instances)
@centos-ap-app.asciant.com ┌──────────┬────┬─────────┬──────┬──────┬────────┬─────────┬────────┬─────┬──────────┬──────────┬──────────┐
@centos-ap-app.asciant.com │ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
@centos-ap-app.asciant.com ├──────────┼────┼─────────┼──────┼──────┼────────┼─────────┼────────┼─────┼──────────┼──────────┼──────────┤
@centos-ap-app.asciant.com │ hello │ 0 │ 1.0.0 │ fork │ 4177 │ online │ 0 │ 0s │ 0% │ 4.5 MB │ deployer │ enabled │
@centos-ap-app.asciant.com └──────────┴────┴─────────┴──────┴──────┴────────┴─────────┴────────┴─────┴──────────┴──────────┴──────────┘
@centos-ap-app.asciant.com Use `pm2 show <id|name>` to get more details about an app
Finished ‘pm2-server’ after 5.27 s

Running ‘deploy:clean’ task…
Keeping “5” last releases, cleaning others
Running “(ls -rd /home/deployer/example.com/releases/*|head -n 5;ls -d /home/deployer/example.com/releases/*)|sort|uniq -u|xargs rm -rf” on host “centos-ap-app.asciant.com”.
Finished ‘deploy:clean’ after 1.81 s

Running ‘deploy:finish’ task…
Finished ‘deploy:finish’ after 222 μs
Finished ‘deploy’ [ deploy:init, deploy:fetch, deploy:update, deploy:publish, deploy:clean, deploy:finish ]

برای مشاهده برنامه خود به عنوان کاربر ، می توانید آدرس URL وب سایت خود را در دامنه تان در مرورگر خود وارد کنید تا به سرور مجازی وب خود دسترسی پیدا کنید. این برنامه Node.js را از طریق پروکسی معکوس روی سرور مجازی برنامه که فایلهای شما در آن مستقر شده اند ، ارائه می کند.

Hello World را می بینید.
توجه: پس از اولین استقرار ، منبع Git شما فایل جدید ایجاد شده با نام ecosystem.config.js را پیگیری می کند. از آنجا که این فایل در هر استقرار بازسازی می شود ، و ممکن است حاوی اطلاعات سری برنامه کامپایل شده باشد ، باید قبل از انجام اقدامات بعدی ، به فایل .gitignore در دیرکتوری برنامه ریشه برنامه در دستگاه محلی شما اضافه شود.
.gitignore
. . .
# ecosystem.config
ecosystem.config.js

شما برنامه Node.js خود را روی سرور مجازی برنامه خود مستقر کرده اید ، که به استقرار جدید شما اشاره دارد. با به روز رسانی و راه اندازی همه موارد، می توانید به سراغ نظارت بر فرآیندهای برنامه خود بروید.
مرحله 6 – نظارت بر برنامه تان
PM2 ابزاری عالی برای مدیریت فرآیندهای از راه دور شما است ، اما همچنین ویژگی هایی را برای نظارت بر عملکرد این فرآیندهای برنامه فراهم می کند.
با این دستور به سرور مجازی برنامه راه دور خود از طریق SSH متصل شوید:
⦁ $ ssh deployer@your_app_server_ip
برای به دست آوردن اطلاعات خاص مربوط به فرآیندهای مدیریت شده PM2 خود ، دستور زیر را اجرا کنید:
⦁ $ pm2 list
خروجی مشابه زیر را مشاهده میکنید:
Output
┌─────────────┬────┬─────────┬──────┬──────┬────────┬─────────┬────────┬──────┬───────────┬──────────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├─────────────┼────┼─────────┼──────┼──────┼────────┼─────────┼────────┼──────┼───────────┼──────────┼──────────┤
│ hello │ 0 │ 0.0.1 │ fork │ 3212 │ online │ 0 │ 62m │ 0.3% │ 45.2 MB │ deployer │ enabled │
└─────────────┴────┴─────────┴──────┴──────┴────────┴─────────┴────────┴──────┴───────────┴──────────┴──────────┘

خلاصه اطلاعاتی را که PM2 جمع آوری کرده است مشاهده خواهید کرد. برای دیدن اطلاعات دقیق ، می توانید دستور زیر را اجرا کنید:
⦁ $ pm2 show hello
خروجی روی اطلاعات خلاصه ارائه شده توسط فرمان pm2 list گسترش می یابد. همچنین اطلاعات مربوط به تعدادی از دستورات جانبی را در اختیار شما قرار می دهد و مکان فایل های log را در اختیار شما قرار می دهد:
Output
Describing process with id 0 – name hello
┌───────────────────┬─────────────────────────────────────────────────────────────┐
│ status │ online │
│ name │ hello │
│ version │ 1.0.0 │
│ restarts │ 0 │
│ uptime │ 82s │
│ script path │ /home/deployer/example.com/releases/20190531213027/hello.js │
│ script args │ N/A │
│ error log path │ /home/deployer/.pm2/logs/hello-error.log │
│ out log path │ /home/deployer/.pm2/logs/hello-out.log │
│ pid path │ /home/deployer/.pm2/pids/hello-0.pid │
│ interpreter │ node │
│ interpreter args │ N/A │
│ script id │ 0 │
│ exec cwd │ /home/deployer │
│ exec mode │ fork_mode │
│ node.js version │ 4.2.3 │
│ node env │ production │
│ watch & reload │ ✔ │
│ unstable restarts │ 0 │
│ created at │ 2019-05-31T21:30:48.334Z │
└───────────────────┴─────────────────────────────────────────────────────────────┘
Revision control metadata
┌──────────────────┬────────────────────────────────────────────────────┐
│ revision control │ git │
│ remote url │ N/A │
│ repository root │ /home/deployer/example.com/releases/20190531213027 │
│ last update │ 2019-05-31T21:30:48.559Z │
│ revision │ 62fba7c8c61c7769022484d0bfa46e756fac8099 │
│ comment │ Our first commit │
│ branch │ master │
└──────────────────┴────────────────────────────────────────────────────┘
Divergent env variables from local env
┌───────────────────────────┬───────────────────────────────────────┐
│ XDG_SESSION_ID │ 15 │
│ HOSTNAME │ N/A │
│ SELINUX_ROLE_REQUESTED │ │
│ TERM │ N/A │
│ HISTSIZE │ N/A │
│ SSH_CLIENT │ 44.222.77.111 58545 22 │
│ SELINUX_USE_CURRENT_RANGE │ │
│ SSH_TTY │ N/A │
│ LS_COLORS │ N/A │
│ MAIL │ /var/mail/deployer │
│ PATH │ /usr/local/bin:/usr/bin │
│ SELINUX_LEVEL_REQUESTED │ │
│ HISTCONTROL │ N/A │
│ SSH_CONNECTION │ 44.222.77.111 58545 209.97.167.252 22 │
└───────────────────────────┴───────────────────────────────────────┘
. . .

PM2 همچنین ابزاری برای نظارت بر ترمینال فراهم می کند که با دستور زیر قابل انجام است:
⦁ $ pm2 monit
خروجی این دستور یک داشبورد تعاملی است ، که در آن pm2 اطلاعات مربوط به فرآیند realtime ، ورودها ، متریک ها و ابرداده ها را ارائه می دهد. این داشبورد ممکن است به نظارت بر منابع و ورودی های خطا کمک کند:
Output
┌─ Process list ────────────────┐┌─ Global Logs ─────────────────────────────────────────────────────────────┐
│[ 0] hello Mem: 22 MB ││ │
│ ││ │
│ ││ │
└───────────────────────────────┘└───────────────────────────────────────────────────────────────────────────┘
┌─ Custom metrics (http://bit.l─┐┌─ Metadata ────────────────────────────────────────────────────────────────┐
│ Heap Size 10.73 ││ App Name hello │
│ Heap Usage 66.14 ││ Version N/A │
│ Used Heap Size 7.10 ││ Restarts 0 │
│ Active requests 0 ││ Uptime 55s │
│ Active handles 4 ││ Script path /home/asciant/hello.js │
│ Event Loop Latency 0.70 ││ Script args N/A │
│ Event Loop Latency p95 ││ Interpreter node │
│ ││ Interpreter args N/A │
└───────────────────────────────┘└───────────────────────────────────────────────────────────────────────────┘

با درک اینکه چگونه می توانید فرایندهای خود را با PM2 کنترل کنید ، می توانید به نحوه عملکرد Shipit در برگشت به یک استقرار کاری قبلی کمک کنید.
بخش ssh خود را با اجرای exit ، روی سرور مجازی برنامه خود پایان دهید.
مرحله 7 – برگشت به یک استقرار دچار مشکل (bugged)
استقرارها گاه به گاه در معرض اشکالات پیش بینی نشده یا مواردی قرار میگیرند که باعث می شود سایت شما خراب با مشکل رو به رو شود. توسعه دهندگان و محافظان Shipit این موضوع را پیش بینی کرده اند و این امکان را برای شما فراهم کرده اند که بتوانید به استقرار قبلی (کار) برنامه خود برگردید.

برای اطمینان از وجود پیکربندی PM2 خود ، در رویداد برگشت ، شنونده رویداد دیگری را به shipitfile.js اضافه کنید:
shipitfile.js
. . .
shipit.on(‘rollback’, () => {
shipit.start(‘npm-install’, ‘copy-config’);
});

برای اجرای وظایف npm-install و copy-config ، یک شنوند را به رویداد بازگشت اضافه می کنید. این امر ضروری است زیرا برخلاف رویداد منتشر شده (published )، رویداد به روز شده (updated ) توسط چرخه Shipit هنگام بازگشت استقرار اجرا نمی شود. افزودن این شنونده رویداد ، اطمینان حاصل می کند که مدیر فرآیند PM2 شما حتی در صورت بازگشت مجدد ، به جدیدترین استقرار اشاره می کند.
این فرایند شبیه به استقرار اما با تغییر جزئی در فرمان میباشد. برای بازگشت به حالت قبلی می توانید دستور زیر را اجرا کنید:
⦁ $ npx shipit production rollback
مانند دستور deploy  ، rollback  جزئیات مربوط به روند برگشت و کارهایی که انجام می شود را ارائه می دهد:
Output
Running ‘rollback:init’ task…
Get current release dirname.
Running “if [ -h /home/deployer/example.com/current ]; then readlink /home/deployer/example.com/current; fi” on host “centos-ap-app.asciant.com”.
@centos-ap-app.asciant.com releases/20190531213719
Current release dirname : 20190531213719.
Getting dist releases.
Running “ls -r1 /home/deployer/example.com/releases” on host “centos-ap-app.asciant.com”.
@centos-ap-app.asciant.com 20190531213719
@centos-ap-app.asciant.com 20190531213519
@centos-ap-app.asciant.com 20190531213027
Dist releases : [“20190531213719″,”20190531213519″,”20190531213027”].
Will rollback to 20190531213519.
Finished ‘rollback:init’ after 3.96 s

Running ‘deploy:publish’ task…
Publishing release “/home/deployer/example.com/releases/20190531213519”
Running “cd /home/deployer/example.com && if [ -d current ] && [ ! -L current ]; then echo “ERR: could not make symlink”; else ln -nfs releases/20190531213519 current_tmp && mv -fT current_tmp current; fi” on host “centos-ap-app.asciant.com”.
Release published.
Finished ‘deploy:publish’ after 1.8 s

Running ‘pm2-server’ task…
Running “pm2 delete -s hello || :” on host “centos-ap-app.asciant.com”.
Running “pm2 start /home/deployer/example.com/shared/ecosystem.config.js –env production –watch true” on host “centos-ap-app.asciant.com”.
@centos-ap-app.asciant.com [PM2][WARN] Node 4 is deprecated, please upgrade to use pm2 to have all features
@centos-ap-app.asciant.com [PM2][WARN] Applications hello not running, starting…
@centos-ap-app.asciant.com [PM2] App [hello] launched (1 instances)
@centos-ap-app.asciant.com ┌──────────┬────┬─────────┬──────┬──────┬────────┬─────────┬────────┬─────┬──────────┬──────────┬──────────┐
@centos-ap-app.asciant.com │ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
@centos-ap-app.asciant.com ├──────────┼────┼─────────┼──────┼──────┼────────┼─────────┼────────┼─────┼──────────┼──────────┼──────────┤
@centos-ap-app.asciant.com │ hello │ 0 │ 1.0.0 │ fork │ 4289 │ online │ 0 │ 0s │ 0% │ 4.5 MB │ deployer │ enabled │
@centos-ap-app.asciant.com └──────────┴────┴─────────┴──────┴──────┴────────┴─────────┴────────┴─────┴──────────┴──────────┴──────────┘
@centos-ap-app.asciant.com Use `pm2 show <id|name>` to get more details about an app
Finished ‘pm2-server’ after 5.55 s

Running ‘deploy:clean’ task…
Keeping “5” last releases, cleaning others
Running “(ls -rd /home/deployer/example.com/releases/*|head -n 5;ls -d /home/deployer/example.com/releases/*)|sort|uniq -u|xargs rm -rf” on host “centos-ap-app.asciant.com”.
Finished ‘deploy:clean’ after 1.82 s

Running ‘rollback:finish’ task…
Finished ‘rollback:finish’ after 615 μs
Finished ‘rollback’ [ rollback:init, deploy:publish, deploy:clean, rollback:finish ]

شما Shipit را پیکربندی کرده اید تا 5 نسخه را از طریق KeepReleases حفظ کند: 5 پیکربندی در shipitfile.js. Shipit این نسخه ها را به صورت داخلی ردیابی می کند تا در صورت لزوم بتواند به عقب برگردد. Shipit همچنین با ایجاد دایرکتوری به نام timestamp (YYYYMMDDHHmmss – مثال: / home / deployer / your-domain / Releases / 20190420210548) راهی مفید برای شناسایی نسخه ها ارائه می دهد.
اگر می خواهید فرآیند برگشت را سفارشی کنید ، می توانید وقایع خاص مربوط به عملیات برگشت را شنود کنید. سپس می توانید از این رویدادها برای اجرای کارهایی استفاده کنید که برگشت شما را تکمیل می کند. می توانید به لیست رویدادهای ارائه شده در تجزیه چرخه shipit مراجعه کرده و tasks/listeners را در shipitfile.js خود پیکربندی کنید.
قابلیت برگشت به معنای این است که شما همیشه می توانید یک نسخه کاربردی برنامه خود را در اختیار کاربران خود قرار دهید حتی اگر یک استقرار با مشکلات یا باگ غیرمنتظره مواجه شود.
نتیجه
در این آموزش ، شما یک گردش کاری را پیکربندی کرده اید که به شما امکان می دهد یک جایگزین بسیار قابل تنظیم برای Platform را به عنوان یک سرویس ایجاد کنید، که همه از چند سرور مجازی ایجاد میشوند . این گردش کار امکان استقرار و پیکربندی سفارشی ، نظارت بر فرآیند با PM2 ، امکان مقیاس و اضافه کردن خدمات یا سرور مجازی های اضافی یا محیط های مورد نیاز را در صورت لزوم فراهم می کند.
اگر علاقه دارید که ویژگی های Node.js خود را بیشتر بدانید، محتوای vpsgol Node.js و همچنین نحوه رمزگذاری در سری Node.js را بررسی کنید.

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

یکی از بزرگترین چالش های توسعه اپلیکیشن ، مرحله نهایی توزیع محصول نهایی به کاربران یا مشتریان شما است. بسیاری از متدولوژی های استقرار اپلیکیشن فاقد سازگاری با کاربر و امنیت هستند و یا روشهایی برای بروزرسانی خودکار یک برنامه پس از نصب را فراهم نمی کنند.
Snap یک فرمت پکیج اپلیکیشن مدرن با ویژگی های تکنیک جعبه شنی و امنیتی قدرتمند از جمله جداسازی سیستم فایل ، بروزرسانی های خودکار و مدیریت وابستگی یکپارچه است. اپلیکیشن های اسنپ ، معروف به اسنپ ها ، می توانند با استفاده از یک برنامه خط فرمان ، دقیقاً شبیه apt یا yum ، دانلود و نصب شوند. اوبونتو با اسنپ از پیش نصب شده همراه است ، به این معنی که مخاطبان گسترده ای برای اپلیکیشن های Snap وجود دارد.
در این آموزش یک برنامه Snap ایجاد کرده و در Snap Store منتشر می کنید.
پیش نیازها
برای تکمیل این آموزش ، به موارد زیر نیاز دارید:
⦁ یک سرور مجازی Ubuntu 18.04 که با دنبال کردن راهنمای راه اندازی سرور مجازی اولیه با اوبونتو 18.04 ، شامل یک کاربر غیر ریشه sudo راه اندازی شده باشد.
⦁ برنامه ای که می خواهید به عنوان Snap پکیج و منتشر کنید. این برنامه ممکن است یک اپلیکیشن پیچیده باشد که شما ایجاد کرده اید ، یک پروژه منبع باز مشترک یا یک برنامه “Hello, world! ” ساده باشد. اگر برنامه ای ندارید ، مرحله 1 این آموزش نحوه تهیه برنامه Hello World را در Go ارائه می دهد.
⦁ یک حساب کاربری در داشبورد برنامه نویسی Snapcraft.
پس از آماده شدن ، به عنوان کاربر غیر ریشه خود وارد سرور مجازی تان شوید.
مرحله 1 – آماده سازی برنامه برای پکیج
در مرحله اول ، با اطمینان از وجود همه چیزهای لازم در یک تک دیرکتوری ، برنامه خود را برای پکیج کردن به عنوان یک برنامه Snap آماده خواهید کرد.
با ایجاد یک دیرکتوری جدید برای Snap و رفتن به داخل آن شروع کنید:
⦁ $ mkdir ~/your-snap

⦁ $ cd ~/your-snap
در مرحله بعد ، اگر از قبل برنامه ای دارید ، یک کپی کامل از کد منبع را برای برنامه خود در دایرکتوری که تازه ایجاد کرده اید، وارد کنید. فرآیند در اینجا بسته به نوع دقیق اپلیکیشنی که پکیج میکنید متفاوت خواهد بود ، با این وجود در صورتی که کد منبع در یک مخزن Git ذخیره شود ، می توانید یک مخزن را در دایرکتوری git init کرده و تمام کد مربوطه را به دست بیاورید.
اگر هنوز برنامه ای ندارید که می خواهید آن را پکیج کنید ، می توانید یک برنامه “Hello world” ایجاد کنید تا در عوض از آن استفاده کنید. اگر برای نوشتن این برنامه با Go به محتوای بیشتری نیاز دارید ، نحوه آموزش نوشتن اولین برنامه خود را در آموزش Go بررسی کنید.

می توانید با ایجاد یک فایل جدید Go و باز کردن آن با استفاده از ویرایشگر متن مورد نظر خود این کار را انجام دهید:
⦁ $ nano helloworld.go
سپس کد زیر را به فایل اضافه کنید:
helloworld.go
package main
import “fmt”
func main() {
fmt.Println(“Hello, world!”)
}

سپس فایل را ذخیره کرده و از آن خارج شوید.
اگر Go را نصب نکردید ، می توانید آن را با استفاده از دستور زیر نصب کنید:
⦁ $ sudo apt install golang-go
پس از نصب Go ، می توانید برنامه جدید خود را اجرا کنید تا بررسی کنید که کار می کند:
⦁ $ go run helloworld.go
خروجی زیر را مشاهده خواهید کرد:
Output
Hello, world!

شما برنامه خود را برای پکیج شدن به عنوان Snap آماده کرده اید. در مرحله بعد نرم افزار مورد نیاز برای شروع فرایند پکیج را نصب خواهید کرد.
مرحله 2 – نصب Snapcraft
در این مرحله Snapcraft را که نام ابزار رسمی پکیج برنامه Snap است ، دانلود و نصب خواهید کرد. Snapcraft در Snap Store موجود است که به صورت پیش فرض در اوبونتو ساخته شده است. این بدان معناست که می توانید Snapcraft را از خط فرمان با استفاده از دستور snap نصب کنید.
دستور snap معادل دستور apt است ، اما شما می توانید از آن برای نصب نرم افزار از Snap Store استفاده کنید ، نه بسته هایی از منابع Apt.
به منظور نصب Snapcraft ، دستور زیر را اجرا کنید:
⦁ $ sudo snap install snapcraft –classic
شما از آرگومان فرمان –classic استفاده می کنید تا Snapcraft بدون ویژگی های سختگیرانه تکنیک جعبه شنی که اسنپ معمولاً از آن استفاده می کند ، نصب شود. Snapcraft به این آرگومان نیاز دارد زیرا نیاز به دسترسی های اختصاصی به سیستم شما برای پکیج کردن قابل اعتماد برنامه ها دارد.

پس از نصب Snapcraft ، خروجی زیر را مشاهده خواهید کرد:
Output
snapcraft 3.9.8 from Canonical✓ installed

در آخر ، می توانید دو بار نصب Snapcraft را با اجرای این دستور بررسی کنید:
⦁ $ snapcraft –version
با این کار خروجی شبیه به این خواهید داشت:
Output
snapcraft, version 3.9.8

اکنون که Snapcraft را نصب کردید ، می توانید پیکربندی و ابرداده را برای برنامه Snap خود تعریف کنید.
مرحله 3 – تعریف پیکربندی و ابرداده برای اسنپ
در این مرحله شروع به تعریف پیکربندی ، ساختار و ابرداده برای برنامه Snap می کنید.
با اطمینان از اینکه هنوز در دایرکتوری برنامه Snap خود کار می کنید شروع کنید:
⦁ $ cd ~/your-snap
سپس ، با استفاده از ویرایشگر متن مورد نظر خود ، فایل snapcraft.yaml را ایجاد و ویرایش کنید:

⦁ $ nano snapcraft.yaml
برای ذخیره کلیه پیکربندی برنامه Snap ، از جمله نام ، توضیحات و نسخه و همچنین تنظیمات مربوط به مدیریت وابستگی و جعبه شنی ، از فایل snapcraft.yaml استفاده خواهید کرد.
با تعیین نام ، خلاصه ، توضیحات و شماره نسخه برنامه خود شروع کنید:
snapcraft.yaml
name: your-snap
summary: A summary of your application in 78 characters or less.
description: |
A detailed description of your application.
The description can have multiple lines.
version: ‘1.0’

اگر می خواهید آن را در Snap Store منتشر کنید ، باید نام Snap شما مشابه نداشته باشد – برنامه های دیگر با همین نام را جستجو کنید تا مطمئن شوید قبلاً انتخاب نشده است.
در مرحله بعد ، می توانید فرمان (های) مورد نظر خود را برای برنامه خود تعریف کنید. این کار باعث می شود Snap شما مستقیماً از خط فرمان Bash به عنوان یک دستورالعمل معمولی استفاده شود.
موارد زیر را به فایل snapcraft.yaml خود اضافه کنید:
snapcraft.yaml
. . .
apps:
your-snap-command:
command: your-snap

your-snap-command نام دستوری است که می خواهید تعریف کنید. به عنوان مثال ، ممکن است شما بخواهید از دستور Helloworld برای اجرای برنامه Hello World استفاده کنید.
از command: your-snap برای این استفاده می کنید که به Snapcraft بگویید هنگام اجرای دستور برنامه چه کاری انجام دهد. در مورد برنامه Hello World ، شما از مقدار helloworld برای ارجاع فایل helloworld.go استفاده می کنید ، این به شما امکان می دهد Snapcraft برنامه شما را با موفقیت اجرا کند.
این کار به پیکربندی مثال زیر منجر میشود:
snapcraft.yaml
apps:
helloworld:
command: helloworld

اگر نام فرمان دقیقاً با نام Snap مطابقت داشته باشد ، می توانید آن را مستقیماً از خط فرمان اجرا کنید. اگر این دستور با اسنپ مطابقت نداشته باشد ، فرمان به طور خودکار با اسنپ پیشوند داده می شود. به عنوان مثال ، helloworld.command1.
در آخر ، می توانید بخش هایی را که برنامه Snap شما را تشکیل می دهند ، تعریف کنید. برنامه های اسنپ از چندین بخش ساخته شده اند که همگی مؤلفه هایی هستند که برنامه شما را تشکیل می دهند. در بسیاری موارد ، فقط یک قسمت وجود دارد ، که خود اپلیکیشن است.
هر قسمت یک افزونه مرتبط دارد. به عنوان مثال ، برای مؤلفه های برنامه شما که در Ruby نوشته شده است ، از افزونه ruby ​​استفاده می شود و برای مؤلفه های نوشته شده در Go ، از افزونه go استفاده می شود.
می توانید از فرمان Snapcraft list-plugins برای شناسایی افزونه های صحیح برای برنامه خود استفاده کنید:
⦁ $ snapcraft list-plugins
با این کار لیستی مشابه موارد زیر حاصل می شود:
Output
ant catkin-tools conda dump gradle make nil python rust
autotools cmake crystal go kbuild maven nodejs qmake scons
catkin colcon dotnet godeps kernel meson plainbox-provider ruby waf

متداول ترین افزونه ها، مختص زبان های برنامه نویسی رایج مانند Go ، Rust ، Ruby یا Python هستند.
پس از شناسایی افزونه های صحیح برای برنامه خود ، می توانید پیکربندی بخش ها را به فایل snapcraft.yaml خود اضافه کنید:
snapcraft.yaml
. . .
parts:
your-snap:
plugin: plugin-name
source: .

برای تعیین مسیر نسبی کد منبع برای برنامه خود از پارامتر پیکربندی source استفاده می کنید. معمولاً این همان دایرکتوری فایل snapcraft.yaml خواهد بود ، بنابراین مقدار منبع یک نقطه واحد (.) است.
توجه: اگر مؤلفه برنامه شما متعلقات لازم را برای ساخت یا اجرای آن دارد ، می توانید با استفاده از ویژگی های build-pack و stage-packets این موارد را مشخص کنید. نام متعلقات مشخص شده به طور خودکار از پکیج منیجر پیش فرض برای سیستم شما گرفته می شوند.
مثلا:
snapcraft.yaml
parts:
your-snap:
plugin: plugin-name
source: .
build-packages:
– gcc
– make
stage-packages:
– libcurl4

برخی از افزونه های Snapcraft گزینه های خاص خود را دارند که ممکن است برای برنامه شما لازم باشد ، بنابراین ارزشمند است صفحات کتابچه راهنمای مربوطه را برای افزونه خود مرور کنید:
⦁ $ snapcraft help plugin-name

در مورد برنامه های Go ، go-importpath را نیز مشخص می کنید. برای پیکربندی Hello world ، منجر به پیکربندی زیر خواهد شد:
snapcraft.yaml
parts:
helloworld:
plugin: go
source: .
go-importpath: helloworld

می توانید فایل snapcraft.yaml خود را باز بگذارید تا در مرحله بعدی پیکربندی بیشتری را اضافه کنید.
شما تنظیمات پایه را برای برنامه Snap خود تعریف کرده اید. در مرحله بعد ، جنبه های امنیتی و جعبه شنی برنامه خود را پیکربندی خواهید کرد.
مرحله 4 – ایمن سازی برنامه Snap
برنامه های اسنپ به گونه ای طراحی شده اند که به اصطلاح در یک محفظه شنی اجرا شوند ، بنابراین در این مرحله شما تکنیک sandboxing را برای Snap خود پیکربندی خواهید کرد. در مرحله اول ، باید جعبه شنی را برای برنامه خود فعال کنید ، که در Snapcraft به confinement شناخته می شود.
موارد زیر را به فایل snapcraft.yaml خود اضافه کنید:
snapcraft.yaml
. . .
confinement: strict

این کار جعبه شنی را برای برنامه شما فعال می کند و از دسترسی آن به اینترنت ، سایر اسنپ های در حال اجرا یا خود سیستم هاست جلوگیری می کند. با این حال ، در بیشتر موارد ، برنامه ها نیازی به برقراری ارتباط خارج از جعبه شنی خود ندارند مانند زمانی که نیاز به دسترسی به اینترنت یا خواندن و نوشتن سیستم فایل دارید.
این مجوزها که در Snapcraft به عنوان interfaces شناخته می شوند ، می توانند با استفاده از پلاگین ها به برنامه Snap شما اعطا شوند. با استفاده از افزونه ها ، می توانید کنترل برنامه ریز و جزیی بر روی جعبه شنی برای برنامه خود داشته باشید تا به آن دسترسی لازم را بدهید و نه چیزی بیشتر (اصل حداقل امتیاز).
رابط های دقیق مورد نیاز بسته به برنامه شما متفاوت هستند. برخی از رایج ترین رابط ها عبارتند از:
⦁ audio-playback – امکان صداهای خروجی / پخش را میدهد.
⦁ audio-record – امکان ورودی صوت / ضبط صدا را می دهد.
⦁ camera – دسترسی به وب کم های متصل را امکان پذیر می کند.
⦁ home – دسترسی به فایل های غیر پنهان را در دیرکتوری هوم شما ممکن می سازد.
⦁ network – دسترسی به شبکه / اینترنت را امکان پذیر می کند.
⦁ network-bind – به شما اجازه می دهد تا درگاه ها را برای کار به عنوان سرویس شبکه متصل کنید.
⦁ system-files – دسترسی به کل سیستم فایل دستگاه هاست را امکان پذیر می کند.
لیست کامل واسط های موجود را می توان در مطالب Snapcraft تحت عنوان واسط های پشتیبانی شده بیابید.
هنگامی که تمام رابط های مورد نیاز برنامه خود را شناسایی کردید ، می توانید این افزونه ها را به فایل های snapcraft.yaml خود اختصاص دهید.
پیکربندی مثال زیر به برنامه اجازه می دهد تا به شبکه و فضای هوم کاربران دسترسی پیدا کند:
snapcraft.yaml
. . .
plugs:
your-snap-home:
interface: home
your-snap-network:
interface: network

فایل خود را ذخیره کنید و از آن خارج شوید.
نام Plug باید یک اسم توصیفی باشد تا کاربران بتوانند هدف Plug را شناسایی کنند.
شما sandboxing را برای Snap فعال کرده اید و برخی از افزونه ها را پیکربندی کرده اید تا دسترسی محدود به منابع سیستم را داشته باشند. در مرحله بعدی ساخت برنامه Snap خود را تمام می کنید.
مرحله 5 – ساخت و آزمایش برنامه Snap
اکنون که تمام تنظیمات لازم را برای Snap خود نوشتید ، می توانید با ساختن آن و آزمایش پکیج اسنپ بصورت محلی پیش بروید
اگر دنبال استفاده از یک برنامه Hello World به عنوان برنامه خود بوده اید ، فایل کامل snapcraft.yaml شما اکنون شبیه زیر است:
snapcraft.yaml
name: helloworld
summary: A simple Hello World program.
description: |
A simple Hello World program written in Go.
Packaged as a Snap application using Snapcraft.
version: ‘1.0’
confinement: strict

apps:
helloworld:
command: helloworld

parts:
helloworld:
plugin: go
source: .
go-importpath: helloworld

plugs:
helloworld-home:
interface: home
helloworld-network:
interface: network

برای ساختن برنامه Snap ، دستور Snapcraft را از درون دیرکتوری برای Snap خود اجرا کنید:
⦁ $ snapcraft
سپس Snapcraft به صورت خودکار یک ماشین مجازی (VM) را راه اندازی می کند و ساخت Snap را شروع می کند. پس از اتمام ، Snapcraft خارج می شود و چیزی شبیه به خروجی زیر را مشاهده خواهید کرد:
Output
Snapped your-snap_1.0_amd64.snap

اکنون می توانید Snap خود را بصورت محلی نصب کنید تا بررسی کنید که در حال کار است:
⦁ $ sudo snap install your-snap.snap –dangerous
آرگومان فرمان –dangerous لازم خواهد بود چرا که شما یک اسنپ محلی را نصب میکنید که امضا نشده است.
Output
your-snap 1.0 installed

پس از اتمام مراحل نصب ، می توانید Snap خود را با استفاده از دستور مربوط به آن اجرا کنید. مثلا:
⦁ $ helloworld
در مورد برنامه Hello World مثال ، خروجی مشابه زیر خواهد بود:
Output
Hello, world!

همچنین می توانید رویکرد تکنیک جعبه شنی را برای Snap خود مشاهده کنید تا مطمئن شوید که مجوزهای اختصاص یافته به درستی اعطا شده اند:
⦁ $ snap connections your-snap
با این کار لیستی از افزونه ها و رابط ها ، مشابه زیر صادر می شود:
Output
snap connections your-snap
Interface Plug Slot Notes
home your-snap:your-snap-home :home –
network your-snap:your-snap-network :network –

در این مرحله اسنپ خود را ساختید و آن را به صورت محلی نصب کردید تا آزمایش کنید که کار می کند یا خیر. در مرحله بعد ، اسنپ خود را در Snap Store منتشر می کنید.
مرحله ششم – انتشار اسنپ خود
اکنون که برنامه Snap خود را ساخته و آزمایش کرده اید ، زمان آن رسیده است که آن را در Snap Store منتشر کنید.
با ورود به حساب Snap Developer خود با استفاده از برنامه خط فرمان Snapcraft شروع کنید:
⦁ $ snapcraft login
برای وارد کردن آدرس ایمیل و گذرواژه ، اعلان ها را دنبال کنید.
در مرحله بعد ، باید نام برنامه را در Snap Store ثبت کنید:
⦁ $ snapcraft register your-snap
پس از ثبت نام اسنپ ، می توانید بسته ساخت اسنپ را وارد فروشگاه کنید:
⦁ $ snapcraft push your-snap.snap
خروجی مشابه زیر را مشاهده خواهید کرد:
Output
Preparing to push ‘your-snap_1.0_amd64.snap’.
Install the review-tools from the Snap Store for enhanced checks before uploading this snap.
Pushing ‘your-snap_1.0_amd64.snap’ [====] 100%
Processing…|
Ready to release!
Revision 1 of ‘your-snap’ created.

هر بار که به Snap Store میروید ، تعداد نسخه مرور شده که از یک شروع شروع می شود افزایش یافته است. این امر برای کمک به شناسایی انواع ساخت Snap شما مفید میباشد.
در نهایت ، می توانید Snap خود را برای عموم منتشر کنید:
⦁ $ snapcraft release your-snap revision-number channel
اگر این اولین بار است که به Snap Store میروید ، تعداد تجدید نظر در آن 1 خواهد بود. اگر نسخه های مختلفی از برنامه خود را در مراحل مختلف توسعه دارید ، می توانید بین انتشارها کانالهای stable ، candidate ، beta و edge  نیز انتخاب کنید.
به عنوان مثال ، دستور زیر ویرایش 1 نسخه Hello World Snap را به کانال stable منتشر می کند:
⦁ $ snapcraft release helloworld 1 stable
خروجی مشابه زیر را مشاهده خواهید کرد:
Output
Track Arch Channel Version Revision
latest amd64 stable 1.0 1
candidate ^ ^
beta ^ ^
edge ^ ^
The ‘stable’ channel is now open.

اکنون می توانید برنامه خود را در Snap Store جستجو کرده و در هر یک از دستگاه های خود نصب کنید.

در این مرحله آخر ، بسته ساخت اسنپ خود را در Snap Store آپلود کرده و آن را برای عموم منتشر کردید.
نتیجه
در این مقاله شما یک برنامه Snap را پیکربندی کرده و ساخته اید ، و سپس آن را از طریق Snap Store منتشر کردید. اکنون شما دانش بنیادی لازم برای حفظ برنامه خود و ساختن موارد جدید را دارید.
اگر می خواهید Snaps Store را بیشتر یاد بگیرید ، بهتر است در فهرست کامل Snap Store چرخی بزنید. همچنین میتوانید رفرنس YAML Snapcraft را مرور کنید تا اطلاعات بیشتری در مورد آن بیابید و ویژگیهای بیشتری را برای پیکربندی Snap خود شناسایی کنید.
سرانجام ، اگر مایل به تحقیق بیشتر درباره توسعه اسنپ هستید ، از خواندن و اجرای Snap Hooks لذت خواهید برد ، که به Snaps اجازه می دهد به صورت پویا نسبت به تغییرات سیستم مانند به روزرسانی ها یا تنظیم رویکردهای امنیتی واکنش نشان دهد.

 

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

Nginx یکی از محبوب ترین سرور مجازی های وب در جهان است و مسئولیت میزبانی برخی از بزرگترین و محبوب ترین سایت های اینترنتی را بر عهده دارد. در بیشتر موارد نسبت به Apache با منبع سازگارتر است و می تواند به عنوان سرور مجازی وب یا پروکسی معکوس مورد استفاده قرار گیرد.
در این راهنما ، ما درباره نحوه نصب Nginx در سرور مجازی CentOS 8 بحث خواهیم کرد.
پیش نیازها
برای دنبال کردن این راهنما ، به دسترسی به یک سرور مجازی CentOS 8 به عنوان کاربر غیر ریشه با امتیازات sudo و یک فایروال فعال روی سرور مجازی خود نیاز خواهید داشت. برای انجام این کار، می توانید راهنمای تنظیم اولیه سرور مجازی ما برای CentOS 8 را دنبال کنید.
مرحله 1 – نصب سرور مجازی Nginx
به منظور نصب Nginx ، از مدیر بسته dnf ، که پکیج منیجر جدید پیش فرض در CentOS 8 است ، استفاده خواهیم کرد.
بسته nginx را با این دستور نصب کنید:
⦁ $ sudo dnf install nginx

هنگامی که از شما خواسته شد ، y را وارد کنید تا تأیید کنید که می خواهید nginx را نصب کنید. پس از آن ، dnf ، Nginx و هرگونه متعلقات لازم برای سرور مجازی شما را نصب می کند.
بعد از اتمام نصب ، با اجرای دستورهای زیر سرور مجازی را فعال و راه اندازی کنید:
⦁ $ sudo systemctl enable nginx

⦁ $ sudo systemctl start nginx
این باعث می شود Nginx در بوت سیستم شروع شود.
مرحله 2 – تنظیم قوانین فایروال
در صورتی که فایروال firewalld را طبق دستورالعمل راهنمای تنظیم اولیه سرور مجازی ما برای CentOS 8 فعال کرده باشید ، باید تنظیمات فایروال را تنظیم کنید تا بتوانید اتصالات خارجی را در سرور مجازی Nginx خود داشته باشید ، که به طور پیش فرض روی پورت 80 اجرا می شود.
برای فعال کردن دائمی اتصالات HTTP در پورت 80 ، دستور زیر را اجرا کنید:
⦁ $ sudo firewall-cmd –permanent –add-service=http

برای تأیید اینکه سرویس فایروال http به درستی اضافه شده است ، می توانید این دستور را اجرا کنید:
⦁ $ sudo firewall-cmd –permanent –list-all

خروجی مانند این را خواهید دید:
Output
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

برای اعمال تغییرات ، باید سرویس فایروال را مجدد لود کنید:
⦁ $ sudo firewall-cmd –reload

اکنون سرور مجازی Nginx شما کاملاً نصب شده و آماده دسترسی بازدید کنندگان خارجی است.
مرحله 3 – بررسی سرور مجازی وب خود
اکنون با دسترسی به آدرس IP عمومی یا نام دامنه سرور مجازی خود از مرورگر وب خود می توانید آزمایش کنید که آیا سرور مجازی وب Nginx شما در حال کار است یا خیر.
توجه: در صورتی که از vpsgol به عنوان ارائه دهنده میزبانی DNS خود استفاده می کنید ، می توانید مطالب محصول ما را برای راهنمایی های دقیق در مورد چگونگی تنظیم نام دامنه جدید بررسی کنید و آن را روی سرور مجازی خود به کار بگیرید.

اگر نام دامنه ای به سرور مجازی خود معرفی نکرده اید و آدرس IP عمومی سرور مجازی خود را نمی شناسید ، می توانید با اجرای دستور زیر آن را پیدا کنید:
⦁ $ ip addr show eth0 | grep inet | awk ‘{ print $2; }’ | sed ‘s/\/.*$//’

با این کار چند آدرس IP چاپ می شود. می توانید هر یک از آنها را به نوبت در مرورگر وب خود امتحان کنید.
به عنوان یک گزینه جایگزین ، می توانید بررسی کنید که آدرس IP ، همانطور که از سایر لوکیشن های اینترنت مشاهده می شود در دسترس است یا خیر:
⦁ $ curl -4 icanhazip.com

آدرسی را که در مرورگر وب خود دریافت می کنید تایپ کنید و شما را به صفحه فرود پیش فرض Nginx می برد:

اگر این صفحه را مشاهده کردید ، اکنون سرور مجازی وب شما به درستی نصب شده است.
مرحله 4 – مدیریت فرایند Nginx
اکنون که سرور مجازی وب خود را فعال کرده اید ، نحوه مدیریت سرویس Nginx را از طریق systemctl بررسی خواهیم کرد.
هر زمان که نیاز به متوقف کردن سرور مجازی وب خود دارید ، می توانید از این دستور استفاده کنید:
⦁ $ sudo systemctl stop nginx

برای شروع سرور مجازی وب پس از متوقف کردن ، تایپ کنید:
⦁ $ sudo systemctl start nginx

برای متوقف کردن و سپس شروع مجدد خدمات ، می توانید از این دستور استفاده کنید:
⦁ $ sudo systemctl restart nginx

Nginx همچنین می تواند تغییرات پیکربندی را بدون افت اتصالات مجدد لود کند. برای انجام این کار ، تایپ کنید:
⦁ $ sudo systemctl reload nginx

به طور پیش فرض ، Nginx پیکربندی شده است تا وقتی سرور مجازی بوت شود ، به طور خودکار شروع شود. اگر این چیزی نیست که شما می خواهید ، می توانید این قانون را با تایپ کردن دستور زیر غیرفعال کنید:
⦁ $ sudo systemctl disable nginx

برای فعال کردن مجدد سرویس و شروع مجدد Nginx در بوت ، می توانید از این دستور استفاده کنید:
⦁ $ sudo systemctl enable nginx

مرحله 5 – آشنایی با فایل ها و راهنمای مهم Nginx
اکنون که می دانید چگونه سرویس Nginx را مدیریت کنید ، باید چند دقیقه وقت بگذارید تا با چند دایرکتوری و فایل مهم آشنا شوید.
محتوا
/ usr / share / nginx / html: محتوای وب واقعی ، که به طور پیش فرض فقط شامل صفحه پیش فرض Nginx است که قبلاً دیدید ، از دیرکتوری / usr / share / nginx / html ارائه می شود. این امر با تغییر فایل های پیکربندی Nginx قابل تغییر است.
پیکربندی سرور مجازی
⦁ / etc / nginx: دیرکتوری پیکربندی Nginxاست. همه فایل های پیکربندی Nginx در اینجا قرار دارند.
⦁ /etc/nginx/nginx.conf: فایل اصلی پیکربندی Nginxاست. می تواند برای ایجاد تغییر در تنظیمات جهانی Nginx اصلاح شود.
⦁ /etc/nginx/conf.d/: این دایرکتوری حاوی فایل های پیکربندی بلوک سرور مجازی است ، جایی که می توانید وب سایت هایی را که در Nginx میزبان هستند تعریف کنید. یک رویکرد معمولی این است که هر وب سایت را در یک فایل جداگانه با نام دامنه وب سایت مانند your_domain.conf قرار دهید.
logهای سرور مجازی
⦁ /var/log/nginx/access.log:هر درخواستی به سرور مجازی وب شما در این فایل log ثبت می شود ، مگر اینکه Nginx به گونه ای پیکربندی شده باشد که کار دیگری انجام دهد.
⦁ /var/log/nginx/error.log:هرگونه خطای Nginx در این log ثبت می شود.
مرحله 6 – تنظیم بلوک های سرور مجازی (اختیاری)
در صورتی که مایل به میزبانی وب سایت های متعدد در یک سرور مجازی وب Nginx هستید ، باید بلوک های سرور مجازی را تنظیم کنید. بلوک های سرور مجازی Nginx با روشی مشابه هاست های مجازی Apache کار می کنند و به یک سرور مجازی واحد نیز اجازه می دهند به چندین نام دامنه پاسخ دهد و برای هر یک از آنها مطالب مختلفی ارائه دهد. در CentOS 8 ، بلوک های سرور مجازی در فایل های .conf واقع در /etc/nginx/conf.d تعریف شده اند.
ما یک بلوک سرور مجازی را برای دامنه ای به نام your_domain تنظیم خواهیم کرد.
به طور پیش فرض ، Nginx در CentOS 8 پیکربندی شده است تا اسناد را از دیرکتوری موجود در / usr / share / nginx / html ارائه دهد. اگرچه برای یک سایت واحد خوب عمل می کند ، اگر هاست چندین سایت هستید ، می تواند غیرقابل کنترل شود. به جای تغییر / usr / share / nginx / html ، یک ساختار دایرکتوری را در / var / www برای وب سایت your_domain ایجاد خواهیم کرد ، و / usr / share / nginx / html را در جای خود به عنوان دایرکتوری پیش فرض قرار می دهیم که در صورت عدم مطابقت درخواست کلاینت با سایت های دیگر ارائه شود.
با استفاده از فلگ -p ، برای ایجاد هر دیرکتوری لازم ، دایرکتوری را برای your_domain ایجاد کنید:
⦁ $ sudo mkdir -p /var/www/your_domain/html

در مرحله بعدی ، مالکیت دایرکتوری را با متغیر محیط USER $ اختصاص دهید ، که باید کاربر سیستم فعلی شما را ارجاع دهد:
⦁ $ sudo chown -R $USER:$USER /var/www/your_domain/html

در مرحله بعدی ، برای آزمایش پیکربندی بلوک سرور مجازی ، یک صفحه index.html نمونه ایجاد خواهیم کرد. ویرایشگر متن پیش فرض که با CentOS 8 همراه است vi است. vi یک ویرایشگر متن بسیار قدرتمند است ، اما می تواند برای کاربرانی که فاقد تجربه با آن هستند ، تا حدودی خسته کننده باشد. برای تسهیل ویرایش فایل های پیکربندی روی سرور مجازی CentOS 8 خود ، بهتر است ویرایشگر کاربر پسند دیگری مانند nano را نصب کنید:
⦁ $ sudo dnf install nano

اکنون می توانید از nano برای ایجاد فایل index.html نمونه استفاده کنید:
⦁ $ nano /var/www/your_domain/html/index.html

در داخل آن فایل ، کد HTML زیر را اضافه کنید:
/var/www/your_domain/html/index.html
<html>
<head>
<title>Welcome to your_domain</title>
</head>
<body>
<h1>Success! Your Nginx server is successfully configured for <em>your_domain</em>. </h1>
<p>This is a sample page.</p>
</body>
</html>

پس از اتمام فایل را ذخیره کنید و ببندید. اگر از nano استفاده کرده اید ، می توانید با فشار دادن CTRL + X ، Y ، سپس ENTER این کار را انجام دهید.
برای اینکه Nginx بتواند این محتوا را ارائه دهد ، باید یک بلوک سرور مجازی با دستورالعمل صحیح که به ریشه وب سفارشی ما اشاره دارد، ایجاد کنیم. ما یک بلوک سرور مجازی جدید در /etc/nginx/conf.d/your_domain.conf ایجاد خواهیم کرد:
⦁ $ sudo nano /etc/nginx/conf.d/your_domain.conf

در بلوک تنظیمات زیر پیست کنید:
/etc/nginx/conf.d/your_domain.conf
server {
listen 80;
listen [::]:80;

root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;

server_name your_domain www.your_domain;

location / {
try_files $uri $uri/ =404;
}
}

وقتی ویرایش محتوای آن را انجام دادید ، فایل را ذخیره کنید و ببندید.
برای اطمینان از اینکه هیچ خطای نحوی در هیچ یک از فایل های Nginx وجود ندارد ، این دستور را اجرا کنید:
⦁ $ sudo nginx -t

اگر مشکلی پیش نیاید ، خروجی زیر را مشاهده خواهید کرد:
Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

پس از انجام تست پیکربندی ، Nginx را مجدداً راه اندازی کنید تا تغییرات خود را فعال کنید:
⦁ $ sudo systemctl restart nginx

قبل از اینکه بتوانید تغییرات را از مرورگر خود آزمایش کنید ، باید زمینه های امنیتی SELinux سرور مجازی خود را به روز کنید تا Nginx مجاز به ارائه محتوا از دیرکتوری / var / www / your_domain شما باشد.
دستور زیر اجازه می دهد تا ریشه سند سفارشی شما به عنوان محتوای HTTP ارائه شود:
⦁ $ chcon -vR system_u:object_r:httpd_sys_content_t:s0 /var/www/your_domain/

اکنون می توانید با رفتن به http: // your_domain ، مکان تنظیم دامنه دلخواه خود را آزمایش کنید ، جایی که چیزی شبیه به این را مشاهده خواهید کرد:

این صفحه کد HTML را که ما در ریشه سند سفارشی ایجاد شده برای بلوک سرور مجازی تعریف کرده ایم ، ارائه می دهد. اگر می توانید این صفحه را ببینید ، به این معنی است که سرور مجازی Nginx شما به درستی پیکربندی شده است تا بتواند دامنه شما را ارائه دهد.
نتیجه
در این راهنما ، نحوه نصب و راه اندازی Nginx ، یک وب سرور مجازی با کارایی بالا و پروکسی معکوس را آموختیم. چگونگی مدیریت سرویس Nginx در حال اجرا بر روی سرور مجازی شما را مرور کردیم ، و دایرکتوری های اصلی مورد استفاده Nginx برای ذخیره فایل های پیکربندی ، محتوا و log ها را دانستیم.
از اینجا به بعد گزینه های بسیاری دارید که برای نوع محتوا و فناوری هایی که ممکن است بخواهید در وب سایت هایی که در سرور مجازی وب خود میزبانی می کنید، از آن ها استفاده کنید.

 

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

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
معمولاً مدیریت چندین دستگاه به صورت روزانه دشوار است. در حالی که Secure Shell SSH گزینه مناسبی برای دسترسی از راه دور است ، و خود پروتکل از نظر راحتی و امنیت دارای اشکالاتی است.
به عنوان مثال ، برای دسترسی به دستگاه های از راه دور نیاز به داشتن یک آدرس IP عمومی و یک درگاه فوروارد شده است ، که آنها را در معرض اینترنت یا حداقل شبکه بزرگتری قرار می دهد. این امر به ویژه در مورد استفاده از گذرواژه برای احراز هویت به جای یک جفت کلید عمومی و خصوصی نگران کننده است. علاوه بر این ، اگر از قبل کلید عمومی دستگاه از راه دور را نمی شناسید ، ممکن است در معرض حمله “شخص سومی” قرار داده باشید. و بسیاری از دستگاه های از راه دور که می خواهید به آنها دسترسی داشته باشید ، آدرس IP عمومی ندارند ، یا دارای یک آدرس IP پویا هستند که ممکن است شما از آن اطلاع نداشته باشید.
علاوه بر این ، SSH در هر بخش از راه دور به یک اتصال نیاز دارد. اگر یک کاربر نیاز به اجرای یک فرمان واحد در بین صدها یا حتی هزاران دستگاه داشته باشد ، ابتدا باید با استفاده از یک TCP ، اتصال به هر دستگاه را برقرار کند ، که کارایی کمتری دارد.
NKN Shell یا nsh جایگزینی برای SSH است که روشی مناسب و مطمئن برای اجرای دستورات از راه دور فراهم می کند. nsh از شبکه عمومی جهانی NKN که انتقال داده های امن و غیرمتمرکز را فراهم می کند ، بهره می برد. این معماری از آدرسهای منحصر به فردی استفاده می کند که حاوی یک کلید عمومی است که برای مسیریابی و رمزنگاری پایان به پایان و بدون هیچ گونه زیرساخت کلید عمومی (PKI) استفاده می شود. همچنین این شبکه نیازی به داشتن سرور مجازی از راه دور برای داشتن آدرس IP عمومی ندارد. سرور مجازی از راه دور فقط باید به اینترنت دسترسی داشته باشد و بتواند اتصالات خروجی HTTP و WEBocket را برقرار کند. در نتیجه ، دستگاه های از راه دور شما در معرض اینترنت باز قرار ندارند.
در این آموزش برای اجرای دستورات روی یک دستگاه از راه دور از برنامه های کاربردی NKN shell daemon و NKN Shell Client Xterm استفاده خواهید کرد. برای این کار ، NKN Shell daemon را بر روی یک دستگاه از راه دور با دسترسی به اینترنت نصب و پیکربندی می کنید ، یک جفت کلید تولید می کنید و اتصال خود را از کلاینت انجام می دهید.
پیش نیازها
برای دنبال کردن این آموزش به موارد زیر نیاز دارید:
• یک سرور مجازی Ubuntu 18.04 که طبق راهنمای تنظیم اولیه سرور مجازی Ubuntu 18.04 تنظیم شد و شامل یک کاربرغیر ریشه فعال شده با SUDO و یک فایروال باشد.
• یک مرورگر وب نصب شده بر روی دستگاه محلی شما.
مرحله 1 – نصب سرور مجازی NKN Shell Daemon روی یک سرور مجازی از راه دور
ابتدا NKN Shell Daemon (nsd) را بر روی سرور مجازی خود نصب کنید. این برنامه nkn-multiclient را فراخوانی می کند ، که به شبکه عمومی NKN متصل می شود و آدرس مسیریابی را بدست می آورد. سپس Daemon دستورات پوسته های دریافتی را از کلاینت های معتبر و لیست بندی شده شنود می کند ، آن دستورات را اجرا می کند ، و سپس نتایج را ارسال می کند.
با دانلود آخرین باینری nshd پیش ساخته از GitHub شروع کنید:
$ wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz

فایل را از حالت فشرده خارج کنید:
$ tar -zxvf linux-amd64.tar.gz

سپس فایل ها را به دیرکتوری / usr / local / bin انتقال دهید تا سیستم در دسترس باشد:
$ sudo mv ./linux-amd64/* /usr/local/bin/

در مرحله بعد ، آن را پیکربندی می کنید تا به عنوان یک فرآیند daemon با استفاده از Systemd اجرا شود و در صورت ریستارت سرور مجازی مجدداً راه اندازی شود.
فایلی با نام nshd.service را در / etc / systemd / system ایجاد کنید:
$ sudo nano /etc/systemd/system/nshd.service

تعاریف خدمات زیر را برای پیکربندی سرویس اضافه کنید:
/etc/systemd/system/nshd.service
[Unit]
Description=NKN Shell Daemon
After=network.target

[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/usr/local/bin/nshd

[Install]
WantedBy=multi-user.target

اطلاعات بیشتر در مورد فایلهای واحد Systemd را در لینک Understanding Systemd Units and Unit Files ببینید.
فایل را ذخیره کرده و از ویرایشگر خارج شوید. سپس سرویس nshd را با دستورات زیر فعال و راه اندازی کنید:
$ sudo systemctl enable nshd.service

$ sudo systemctl start nshd.service

برای اطمینان از فعال بودن سرویس ، دستور زیر را اجرا کنید:
$ sudo systemctl status nshd.service

خواهید دید که این وضعیت فعال است:
Output
● nshd.service – NKN Shell Daemon
Loaded: loaded (/etc/systemd/system/nshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-02-19 19:16:02 UTC; 7s ago
Main PID: 3457 (nshd)
Tasks: 10 (limit: 1152)
CGroup: /system.slice/nshd.service
└─3457 /usr/local/bin/nshd

Feb 19 19:16:02 your_hostname systemd[1]: Started NKN Shell Daemon.
Feb 19 19:16:03 your_hostname nshd[3457]: Create directory /etc/nshd/
Feb 19 19:16:03 your_hostname nshd[3457]: Create password and save to file /etc/nshd/wallet.pswd
Feb 19 19:16:03 your_hostname nshd[3457]: Create wallet and save to file /etc/nshd/wallet.json
Feb 19 19:16:03 your_hostname nshd[3457]: Create authorized pubkeys file /etc/nshd/authorized_pubkeys
Feb 19 19:16:03 your_hostname nshd[3457]: Listening at d46567b883a3070ee3fe879d9fa2d5dc55a95f79ff2797c42df36c6979e5c4Aba

برای اتصال به سرور مجازی خود ، باید آدرس NKN آن را دریافت کنید ، که می توانید در خروجی دستور قبلی پیدا کنید. همچنین می توانید دستور زیر را برای به دست آوردن آدرس اجرا کنید:
$ nshd addr

آدرس خود را مشاهده می کنید:
Output
e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383
این آدرس را جایی بنویسید زیرا برای اتصال به سرور مجازی خود به آن نیاز خواهید داشت.
اکنون که Daemon در حال اجرا و شنود است ، می توانید کلاینت مبتنی بر وب را پیکربندی کنید تا با سرور مجازی در ارتباط باشد.
مرحله 2 – پیکربندی مجوزها برای کلاینت (سرویس گیرنده) NKN Shell
به یک کلاینت سازگار نیاز دارید که بتواند به دستگاه از راه دور متصل شود. در این آموزش از NKN Shell Client Xterm ، یک سرویس دهنده پوسته NKN مبتنی بر وب استفاده خواهید کرد. چند روش مختلف برای اجرای آن وجود دارد:
از نسخه میزبانی شده در https://nsh.nkn.org/ استفاده کنید. توجه داشته باشید که در حالی که این صفحه وب روی سرور مجازی میزبانی شده است ، در واقع یک برنامه وب محلی خالص است که در مرورگر شما اجرا می شود.
کد منبع را بدست آورید و خودتان هاست آن باشید.
از افزونه nShell Chrome استفاده کنید.
در این آموزش از نسخه میزبانی شده استفاده خواهید کرد. در دستگاه محلی خود ، مرورگر وب خود را باز کرده و به https://nsh.nkn.org بروید. یک صفحه خوش آمد گویی خواهید دید.
روی Generate New Key Pair کلیک کنید. کلیدهای شما مطابق تصویر زیر تولید و نمایش داده می شوند:
توجه: هنگامی که یک جفت کلید جدید تولید می کنید ، یک secret seed را مشاهده خواهید کرد. این seed مخفی را درست مانند کلید خصوصی SSH خود ایمن نگه دارید . هرکسی که این seed مخفی را داشته باشد می تواند از آن برای بازگرداندن کلید عمومی شما استفاده کند و سپس دستورات را بر روی دستگاههای از راه دور خود اجرا کند. مرورگر شما این seed را به خاطر می سپارد ، اما باید آن را در جایی ایمن کپی کنید تا بتوانید دوباره از آن در دستگاه جدید استفاده کنید.

secret seed را در جایی امن ذخیره کنید. بعدا می توانید از آن برای بازگرداندن کلید عمومی خود استفاده کنید تا بتوانید از یک دستگاه کلاینت دیگر متصل شوید.
از آنجا که این یک جفت کلید جدید است ، می بایست کلید عمومی را به فایل / etc / nshd / autor_pubkeys روی سرور مجازی خود اضافه کنید.
/etc/nshd/authorized_pubkeys نقش مشابهی با فایل ~/authorized_keys دارد که کنترل می کند کدام کلیدهای عمومی SSH می توانند وارد سیستم شوند. فایل authorized_pubkeys می تواند مشخص کند که کدام کاربر با یک کلید در ارتباط است. برای اهداف امنیتی ، بهتر است با استفاده از یک کاربر غیر ریشه در این آموزش وارد شوید ، تا بتوانید کلید عمومی تولید شده را با کاربر sammy خود که در راهنمای اولیه تنظیم سرور مجازی در پیش نیاز این مقاله ایجاد کرده اید ، مرتبط کنید.
برای متصل کردن کاربر به کلید عمومی ، باید شناسه کاربر (UID) و شناسه گروه (GID) این کاربر را دریافت کنید. در هنگام ورود به عنوان کاربر sammy ، دستور زیر را روی سرور مجازی خود اجرا کنید:
$ id

UID و GID کاربر را مشاهده خواهید کرد:
Output
uid=1000(sammy) gid=1000(sammy) groups=1000(sammy),27(sudo)

اکنون فایل authorized_pubkeys را در ویرایشگر خود باز کنید:
$ sudo nano /etc/nshd/authorized_pubkeys

یک خط واحد حاوی کلید عمومی ، uid و gid را اضافه کنید که با فاصله جدا شده اند:
authorized_pubkeys
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

فایل را ذخیره کنید.
تأیید کنید که فایل حاوی محتوای صحیح است:
$ cat /etc/nshd/authorized_pubkeys

کلید شما روی صفحه چاپ می شود:
Output
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

سپس nshd daemon را دوباره شروع کنید تا تغییرات اعمال شود:
$ sudo systemctl restart nshd.service

اکنون بیایید با اتصال به سرور مجازی و اجرای یک دستور ، آن را تست کنیم.
مرحله 3 – ارسال یک فرمان به دستگاه از راه دور و دریافت پاسخ
در NKN Shell Client ، آدرس nshd راه دور خود را از مرحله 1 و همچنین یک شناسه کلاینت اختیاری وارد کنید:
برای شروع اتصال ، روی connect کلیک کنید.
شما به دستگاه از راه دور خود متصل خواهید شد و یک اعلان پایانه را در مرورگر میبینید. از اینجا به بعد می توانید درست مانند SSH از آن استفاده کنید. به عنوان مثال ، دستور زیر را برای سوییچ به دیرکتوری / etc / nshd اجرا کنید:
Sammy@your_server_ip~$ cd /etc/nshd

سپس مطالب آن را لیست کنید:
Sammy@your_server_ip/etc/nshd$ ls

محتوای دایرکتوری را مشاهده خواهید کرد:
Output
authorized_pubkeys wallet.json wallet.pswd

می توانید با تایپ کردن exit اتصال را قطع کنید. هنگامی که نیاز به اتصال مجدد دارید ، به اینترفیس وب مجدداً سر بزنید و جزئیات اتصال خود را وارد کنید. اگر یک جفت کلید جدید ایجاد می کنید ، باید کلید عمومی جدید را به سرور مجازی خود اضافه کنید.
نتیجه
در این آموزش ، nsh را نصب کرده و پیکربندی کرده اید تا ایمن و راحت دستورات را به یک دستگاه از راه دور ارسال کنید. nsh برای دستیابی به یک دستگاه از راه دور و اجرای سریع یک فرمان جهت دستیابی به آخرین وضعیت خدمات یا مشاهده برخی از تنظیمات پیکربندی ، راهی عالی میباشد. این برنامه مبتنی بر شبکه عمومی جهانی NKN است ، و استفاده از آن رایگان است بنابراین می توانید امروز آن را در برنامه یا جریان کاری خود وارد کنید.
همچنین می توانید nkn-tunel را که از SSH یا سایر برنامه های مبتنی بر TCP پشتیبانی می کند ، جستجو کنید.

 

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

استفاده از nsh برای دستورات از راه دور اوبونتو 18 –  میزبانی وب سایت با Caddy اوبونتو 18

تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو

تنظیم مسیریابی شرطی و پاسخگو با React Router v4  –  ایجاد یک URL کوتاه کننده با Django و GraphQL

یک برنامه ردیابی سلامت را با React ،GraphQL و Okta –  ساخت برنامه چت زمان حقیقی React و GraphQL

به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) –  با استفاده از React ، Superagent و API اینستاگرام

نحوه ساختن یک برنامه جهانی با Nuxt.js و Django –  دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه کردن عکسهای پیشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت

یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید  –  ساخت برنامه های وب پیشرونده با Angular

اشکال زدایی JavaScript در تولید با نقشه های منبع  –  می توان با Koa برنامه “سلام جهانی” ساخت

ساختن یک برنامه با Node ، React ، Okta  –   مدیریت حالت فرم در React با Redux Form

نحوه تنظیم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ویژوال استودیو از راه دور  –  احراز هویت API با JSON Web Tokens و Passport

راه اندازی یک پروژه React با Parcel  –  ایجاد Swiper مانند Netflix را در Vue

ساختن یک ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسکریپت

چگونه می توان موتور جستجوی زمان واقعی را با Vue  –  ساختن سیستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراک زنده با کد ویژوال استودیو  –  ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React

شروع عملی GraphQL با Node.js و Express  –  ساخت یک برنامه آب و هوا در Django

نحوه نصب Discourse روی Ubuntu 18  –  تأیید رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
از راه حل های بکاپ گیری مبتنی بر cloud گرفته تا شبکه های تحویل محتوا با دسترسی بالا (CDN) ، امکان ذخیره حباب های بدون ساختار داده های هدف و دسترسی آنها از طریق API های HTTP ، معروف به  object storage، به بخشی جدایی ناپذیر از چشم انداز فناوری مدرن تبدیل شده است.
Minio یک سرور مجازی ذخیره سازی آبجکت منبع باز محبوب است که با سرویس ذخیره cloud Amazon S3 سازگار است. برنامه هایی که برای گفتگو با آمازون S3 پیکربندی شده اند نیز می توانند پیکربندی شوند تا با Minio صحبت کنند ، و در صورتی که می خواهید کنترل بیشتری روی سرور مجازی ذخیره سازی شیء خود داشته باشید ، Minio یک گزینه مناسب برای S3 خواهد بود. این سرویس داده های بدون ساختار مانند عکس ها ، فیلم ها ، فایل های ورود به سیستم ، نسخه پشتیبان، و عکس های کانتینر یا VM را ذخیره می کند ، و حتی می تواند یک سرور مجازی ذخیره سازی شیء تکی را فراهم کند که چندین درایو را در بسیاری از سرور مجازی ها پخش کند.
Minio در Go نوشته شده است ، با یک کلاینت خط فرمان به اضافه یک رابط مرورگر ارائه می شود و از سرویس صف بندی ساده برای پروتکل درخواست پیشرفته پیام (AMQP) ، Elasticsearch ، Redis ، NATS و PostgreSQL پشتیبانی می کند. به خاطر همه ی این دلایل ، یادگیری راه اندازی سرور مجازی ذخیره سازی Minio می تواند انعطاف پذیری و کاربرد گسترده ای را به پروژه شما بیافزاید.
در این آموزش ،
• سرور مجازی Minio را روی سرور مجازی Ubuntu 18.04 خود نصب خواهید کرد و آن را به عنوان یک سرویس systemd پیکربندی میکنید.
• با استفاده از Let’s Encrypt ، یک SSL / TLS را برای تأمین امنیت ارتباط بین سرور مجازی و مشتری تنظیم میکنید.
• برای استفاده و مدیریت سرور مجازی به رابط مرورگر Minio از طریق HTTPS دسترسی پیدا میکنید.
پیش نیازها
برای تکمیل این آموزش ، به موارد زیر نیاز دارید:
• یک سرور مجازی Ubuntu 18.04 که مطابق با آموزش راه اندازی اولیه سرور مجازی Ubuntu 18.04 تنظیم شده باشد، شامل یک کاربر غیر ریشه sudo و فایروال .
• نام دامنه کاملاً ثبت شده. می توانید یکی از آنها را در Namecheap خریداری کنید یا به صورت رایگان در Freenom دریافت کنید. در این آموزش دامنه شما به صورت your_domain نمایش داده می شود.
• سوابق DNS زیر که برای سرور مجازی Minio شما تنظیم شده باشد.
o یک رکورد A با نام سرور مجازی تان (به عنوان مثال minio-server.your_domain) که به آدرس IPv4 سرور مجازی شما اشاره کند.
o (اختیاری) اگر می خواهید سرور مجازی شما از طریق IPv6 قابل دسترسی باشد ، به یک رکورد AAAA با نام سرور مجازی خود نیاز خواهید داشت که به آدرس IPv6 سرور مجازی شیء شما اشاره دارد.
مرحله 1 – نصب و پیکربندی سرور مجازی Minio
می توانید سرور مجازی Minio را با کامپایل کد منبع یا از طریق یک فایل باینری نصب کنید. برای نصب آن باید حداقل Go 1.12 را روی سیستم خود نصب داشته باشید.
در این مرحله شما سرور مجازی را از طریق باینری از پیش کامپایل شده نصب کرده و سرور مجازی Minio را پس از آن پیکربندی می کنید.
ابتدا به سرور مجازی خود وارد شوید و sammy را با نام کاربری و your_server_ip را با آدرس IP سرور مجازی Ubuntu 18.04 خود جایگزین کنید:
⦁ $ ssh sammy@your_server_ip

اگر اخیراً پایگاه داده بسته را به روز نکرده اید ، اکنون آن را به روز کنید:
⦁ $ sudo apt update

در مرحله بعد ، فایل باینری سرور مجازی Minio را از وب سایت رسمی دانلود کنید:
⦁ $ wget https://dl.min.io/server/minio/release/linux-amd64/minio

خروجی مشابه زیر را دریافت خواهید کرد:
Output
–2019-08-27 15:08:49– https://dl.min.io/server/minio/release/linux-amd64/minio
Resolving dl.min.io (dl.min.io)… 178.128.69.202
Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 44511616 (42M) [application/octet-stream]
Saving to: ‘minio’

minio 100%[===================>] 42.45M 21.9MB/s in 1.9s

2019-08-27 15:08:51 (21.9 MB/s) – ‘minio’ saved [44511616/44511616]

پس از اتمام دانلود ، فایلی به نام minio در دیرکتوری کار شما قرار می گیرد. برای اجرای آن از دستور زیر استفاده کنید:
⦁ $ sudo chmod +x minio

اکنون ، فایل را به دیرکتوری / usr / local / bin انتقال دهید جایی که اسکریپت راه اندازی systemd  در Minio انتظار دارد آن را پیدا کند:
⦁ $ sudo mv minio /usr/local/bin

این کار به ما این امکان را می دهد که بعداً یک فایل واحد خدمات را در این آموزش بنویسیم تا به طور خودکار Minio را در هنگام راه اندازی اجرا کند.
به دلایل امنیتی ، بهتر است از اجرای سرور مجازی Minio به عنوان root اجتناب کنید. با این کار آسیب هایی که در صورت به خطر افتادن به سیستم شما وارد میشود، می تواند محدود شود. از آنجا که اسکریپت systemd  که در مرحله 2 از آن استفاده خواهید کرد به دنبال یک حساب کاربری و گروهی به نام minio-user است ، کاربر جدیدی با این نام ایجاد کنید:
⦁ $ sudo useradd -r minio-user -s /sbin/nologin

در این دستور ، شما از فلگ -s برای تنظیم / sbin / nologin به عنوان پوسته برای minio-user استفاده کرده اید. این پوسته ای است که اجازه ورود به کاربر را نمی دهد ، که برای minio-user استفاده نمی شود.
سپس ، مالکیت Binary Minio را به minio-user تغییر دهید:
⦁ $ sudo chown minio-user:minio-user /usr/local/bin/minio

سپس ، یک دایرکتوری ایجاد خواهید کرد که در آن Minio فایل ها را ذخیره می کند. این محل ذخیره برای سطل هایی خواهد بود که بعداً برای سازماندهی اشیاء ذخیره شده روی سرور مجازی Minio خود استفاده خواهید کرد. در این آموزش دایرکتوری minio نامگذاری می شود:
⦁ $ sudo mkdir /usr/local/share/minio

مالکیت آن دایرکتوری را به minio-user بدهید:
⦁ $ sudo chown minio-user:minio-user /usr/local/share/minio

بیشتر فایل های پیکربندی سرور مجازی در دیرکتوری / etc ذخیره می شوند ، بنابراین فایل پیکربندی Minio خود را در آنجا ایجاد کنید:
⦁ $ sudo mkdir /etc/minio

مالکیت آن دیرکتوری را نیز به minio-user اختصاص دهید:
⦁ $ sudo chown minio-user:minio-user /etc/minio

برای ایجاد فایل محیط مورد نیاز برای تغییر پیکربندی پیش فرض از Nano یا ویرایشگر متن مورد علاقه خود استفاده کنید:
⦁ $ sudo nano /etc/default/minio

پس از باز شدن فایل ، خطوط زیر را اضافه کنید تا متغیرهای مهم محیطی در فایل محیط شما تنظیم شود:
/etc/default/minio
MINIO_ACCESS_KEY=”minio”
MINIO_VOLUMES=”/usr/local/share/minio/”
MINIO_OPTS=”-C /etc/minio –address your_server_ip:9000″
MINIO_SECRET_KEY=”miniostorage”

بیایید به این متغیرها و مقادیری که تعیین کرده اید نگاهی بیندازیم:
⦁ MINIO_ACCESS_KEY: کلید دسترسی شما برای دسترسی به رابط کاربری مرورگر Minio را تعیین می کند.
⦁ MINIO_SECRET_KEY: کلید خصوصی را که برای تکمیل اطلاعات ورود به سیستم استفاده می کنید ، رابط Miniio قرار می دهد. این آموزش مقدار را miniostorage تنظیم کرده است ، اما ما توصیه می کنیم یک رمز عبور متفاوت و پیچیده تر را برای امنیت سرور مجازی خود انتخاب کنید.
⦁ MINIO_VOLUMES: پوشه ذخیره ای را که برای سطل های خود ایجاد کرده اید مشخص می کند.
⦁ MINIO_OPTS: مکان و نحوه سرویس دهی سرور مجازی داده ها را تغییر می دهد. فلگ -C ، Minio را به دیرکتوری پیکربندی مورد استفاده خود هدایت میکند ، در حالی که فلگ –address ، آدرس IP و پورت اتصال را به Minio می گوید . اگر آدرس IP مشخص نشده باشد ، Minio به هر آدرس پیکربندی شده روی سرور مجازی ، از جمله localhost و هر آدرس IP مربوط به Docker متصل می شود ، بنابراین مشخص کردن مستقیم آدرس IP در اینجا توصیه می شود. در صورت تمایل می توانید درگاه پیش فرض 9000 را تغییر دهید.
در آخر ، پس از اتمام تغییرات ، فایل محیط را ذخیره کنید و ببندید.
اکنون Minio را نصب کرده اید و متغیرهای مهم محیطی را تنظیم کرده اید. در مرحله بعدی ، سرور مجازی را پیکربندی می کنید تا به عنوان یک سرویس سیستمی اجرا شود.
مرحله 2 – نصب اسکریپت Systemd راه اندازی Minio
در این مرحله ، سرور مجازی Minio را پیکربندی خواهید کرد تا به عنوان یک سرویس سیستمی مدیریت شود.
ابتدا فایل رسمی توصیف کننده خدمات Minio را با استفاده از دستور زیر دانلود کنید:
⦁ $ curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

خروجی مشابه زیر را دریافت خواهید کرد:
Output

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 835 100 835 0 0 6139 0 –:–:– –:–:– –:–:– 6139

پس از اتمام دانلود ، فایلی به نام minio.service در دیرکتوری کار شما قرار می گیرد.
برای حسابرسی محتوای minio.service قبل از استفاده ، آن را در ویرایشگر متن باز کنید تا محتویات آن را مشاهده کنید:
⦁ $ nano minio.service

خروجی زیر را نشان می دهد:
/etc/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/

User=minio-user
Group=minio-user

EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c “if [ -z \”${MINIO_VOLUMES}\” ]; then echo \”Variable MINIO_VOLUMES not set in /etc/default/minio\”; exit 1; fi”

ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

این فایل واحد خدمات، سرور مجازی Minio را با استفاده از کاربر minio-user که قبلاً ایجاد کرده اید ، شروع می کند. همچنین متغیرهای محیطی را که در مرحله آخر تنظیم کرده اید ، پیاده سازی می کند و باعث می شود سرور مجازی به طور خودکار در هنگام راه اندازی اجرا شود. برای اطلاعات بیشتر در مورد فایل های واحد سیستمی ، به راهنمای ما در مورد اطلاع از واحدهای سیستمی و فایل های واحد مراجعه کنید.
هنگامی که محتوای اسکریپت را مشاهده کردید ، ویرایشگر متن خود را ببندید.
Systemd نیاز دارد که فایلهای واحد در دیرکتوری تنظیمات سیستمی ذخیره شود ، بنابراین minio.service را به آنجا جابجا کنید:
⦁ $ sudo mv minio.service /etc/systemd/system

سپس دستور زیر را برای لود مجدد تمام واحدهای systemd  اجرا کنید:
⦁ $ sudo systemctl daemon-reload

در آخر ، Minio را فعال کنید تا شروع به کار کند:
⦁ $ sudo systemctl enable minio

منجر به خروجی زیر می شود:
Output
Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

اکنون که اسکریپت systemd نصب و پیکربندی شده است ، زمان شروع کار سرور مجازی است.
مرحله 3 – شروع به کار سرور مجازی Minio
در این مرحله ، شما سرور مجازی را راه اندازی کرده و فایروال را اصلاح می کنید تا امکان دسترسی از طریق رابط مرورگر فراهم شود.
ابتدا سرور مجازی Minio را شروع کنید:
⦁ $ sudo systemctl start minio

در مرحله بعدی ، با اجرای این دستور، وضعیت Minio ، آدرس IP مورد نظر خود ، استفاده از حافظه آن و موارد دیگر را تایید کنید:
⦁ $ sudo systemctl status minio
خروجی زیر را دریافت خواهید کرد:
⦁ Output
● minio.service – MinIO
Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-12-09 21:54:02 UTC; 46s ago
Docs: https://docs.min.io
Process: 3405 ExecStartPre=/bin/bash -c if [ -z “${MINIO_VOLUMES}” ]; then echo “Variable MINIO_VOLUMES not set in /etc/default/minio”; exit 1; fi (code=exited, status=0/SUCCES
Main PID: 3407 (minio)
Tasks: 7 (limit: 1152)
CGroup: /system.slice/minio.service
└─3407 /usr/local/bin/minio server -C /etc/minio –address your_server_IP:9000 /usr/local/share/minio/

Dec 09 21:54:02 cart-Minion-Object-1804-1 systemd[1]: Started MinIO.
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Endpoint: http://your_server_IP:9000
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Browser Access:
Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: http://your_server_IP:9000

در مرحله بعد ، دسترسی از طریق فایروال به سرور مجازی Minio در پورت پیکربندی شده را فعال کنید. در این آموزش ، این درگاه 9000 است.
ابتدا این قانون را اضافه کنید:
$ sudo ufw allow 9000

سپس فایروال را فعال کنید:
⦁ $ sudo ufw enable

اعلان زیر را دریافت خواهید کرد:
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

برای تأیید ، y و ENTER را فشار دهید. سپس خروجی زیر را دریافت خواهید کرد:
Output
Firewall is active and enabled on system startup

اکنون Minio آماده پذیرش ترافیک است ، اما قبل از اتصال به سرور مجازی ، با نصب یک گواهی SSL / TLS ارتباط خود را ایمن خواهید کرد.
مرحله چهارم – ایمن سازی دسترسی به سرور مجازی Minio با یک گواهینامه TLS
در این مرحله با استفاده از یک کلید خصوصی و مجوز عمومی که از یک مرجع گواهی (CA) ، در این حالت  Let’s Encryptبه دست آمده است ، به سرور مجازی Minio خود دسترسی پیدا خواهید کرد. برای دریافت گواهینامه رایگان SSL ، از Certbot استفاده خواهید کرد.
ابتدا به HTTP و HTTPS اجازه دهید به فایروال شما دسترسی داشته باشید. برای انجام این کار ، پورت 80 را باز کنید که درگاه HTTP است:
⦁ $ sudo ufw allow 80

سپس ، درگاه 443 را برای HTTPS باز کنید:
⦁ $ sudo ufw allow 443

پس از افزودن این قوانین ، وضعیت فایروال خود را با این دستور بررسی کنید:
⦁ $ sudo ufw status verbose

خروجی مشابه زیر را دریافت خواهید کرد:
Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To Action From
— —— —-
22/tcp (OpenSSH) ALLOW IN Anywhere
9000 ALLOW IN Anywhere
443 ALLOW IN Anywhere
80 ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
9000 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)

این خروجی تأیید می کند که درگاه های 80 و 443 باز هستند ، و اطمینان می دهند که سرور مجازی شما درخواست هایی را از طریق اینترنت می پذیرد.
سپس ، Certbot را نصب خواهید کرد. از آنجا که Certbot منبع PPA جداگانه ای را حفظ می کند ، ابتدا باید آن را قبل از نصب Certbot ، همانطور که نشان داده شده است ، به لیست منابع خود اضافه کنید:
برای آمادگی برای اضافه کردن منبع PPA ، ابتدا software-properties-common که بسته ای برای مدیریت PPA ها است را نصب کنید:
⦁ $ sudo apt install software-properties-common

این بسته به جای اینکه بصورت دستی انجام شود ، چندین اسکریپت مفید برای اضافه کردن و حذف PPA ها ارائه می دهد.
اکنون منبع Universe را اضافه کنید:
⦁ $ sudo add-apt-repository universe

این منبع حاوی نرم افزار منبع آزاد و باز است که توسط انجمن اوبونتو حفظ می شود ، اما توسط Canonical ، یعنی توسعه دهندگان اوبونتو به طور رسمی نگهداری نمی شود. اینجا مرحله است که ما برایCertbot منبع پیدا خواهیم کرد.
سپس منبع Certbot را اضافه کنید:
⦁ $ sudo add-apt-repository ppa:certbot/certbot

خروجی زیر را دریافت خواهید کرد:
Output
This is the PPA for packages prepared by Debian Let’s Encrypt Team and backported for Ubuntu(s).
More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
Press [ENTER] to continue or ctrl-c to cancel adding it

ENTER را برای پذیرش فشار دهید.
سپس لیست بسته ها را به روز کنید:
⦁ $ sudo apt update

در آخر ، certbot را نصب کنید:
⦁ $ sudo apt install certbot

در مرحله بعد ، برای تولید یک گواهینامه جدید SSL از certbot استفاده خواهید کرد.
از آنجا که اوبونتو 18.04 هنوز نصب اتوماتیک را پشتیبانی نمی کند ، برای به دست آوردن گواهینامه از دستور certonly  و –standalone استفاده خواهید کرد:
⦁ $ sudo certbot certonly –standalone -d minio-server.your_domain

–standalone بدان معنی است که این گواهی مربوط به یک وب سرور مجازی مستقل داخلی است. برای کسب اطلاعات بیشتر در این مورد ، به آموزش نحوه استفاده از حالت مستقل Certbot برای بازیابی گواهی های Let’s Encrypt SSL در اوبونتو 18.04 مراجعه کنید.
خروجی زیر را دریافت خواهید کرد:
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
cancel):

ایمیل خود را اضافه کنید و ENTER را فشار دهید.
سپس Certbot از شما می خواهد Letry Encrypt ثبت نام کنید.
Output
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(A)gree/(C)ancel:

A را تایپ کرده و ENTER را برای تایید فشار دهید.
در مرحله بعد ، از شما سؤال میشود که آیا می خواهید ایمیل خود را با بنیاد الکترونیکی Frontier به اشتراک بگذارید:
Output
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let’s Encrypt project and the non-profit
organization that develops Certbot? We’d like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(Y)es/(N)o:

پس از پاسخ دادن به صورت Y یا N ، کلیدهای عمومی و خصوصی شما ایجاد خواهند شد و در دیرکتوری /etc/letsencrypt/live/minio-server.your_domain_name ذخیره میشود.
در مرحله بعد ، این دو فایل (privkey.pem و fullchain.pem) را در دیرکتوری certs در پوشه تنظیمات سرور مجازی Minio ، که در این آموزش /etc/minio است، کپی کنید. برای کپی کردن privkey.pem و تغییر نام فایل private.key از دستور زیر استفاده کنید:
⦁ $ sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/privkey.pem /etc/minio/certs/private.key

سپس همین کار را برای fullchain.pem انجام دهید ، و نتیجه را public.crt بنامید.
⦁ $ sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/fullchain.pem /etc/minio/certs/public.crt

اکنون ، مالکیت فایل ها را به minio-user تغییر دهید. ابتدا این کار را برای private.key انجام دهید:
⦁ $ sudo chown minio-user:minio-user /etc/minio/certs/private.key

سپس برای public.crt:
⦁ $ sudo chown minio-user:minio-user /etc/minio/certs/public.crt

سرور مجازی Minio را مجدداً راه اندازی کنید تا از گواهینامه آگاه شود و شروع به استفاده از HTTPS کند:
⦁ $ sudo systemctl restart minio

گواهی های Let’s Encrypt فقط برای نود روز اعتبار دارند. این امر برای ترغیب کاربران به اتوماسیون فرایند تجدید گواهینامه است. بسته Certbot که نصب کردید ، یک اسکریپت تجدید شده را به /etc/cron.d اضافه می کند. این اسکریپت روزانه دو بار اجرا می شود و به طور خودکار هر مدرکی را که سی روز از انقضا آن گذشته ، تمدید می کند.
با این کار ، اتصال Minio اکنون ایمن است و گواهی SSL / TLS به طور خودکار برای شما تجدید می شود. در مرحله بعدی ، از طریق مرورگر به Minio وصل می شوید تا از سرور مجازی استفاده شود.
مرحله 5 – اتصال ایمن به رابط وب Minio با استفاده از HTTPS
در این مرحله ، با اطمینان از طریق HTTPS به رابط وب Minio وصل خواهید شد و سپس سطل ایجاد کرده و اشیاء را در آنها آپلود می کنید.
با قرار دادن مرورگر خود به https: //minio-server.your_domain: 9000 به رابط وب دسترسی پیدا کنید.
صفحه ورود به سرور مجازی Minio را مشاهده خواهید کرد:

اکنون با وارد کردن اعتبارنامه خود وارد رابط اصلی شوید. برای دسترسی به کلید ، MINIO_ACCESS_KEY را که در فایل محیط /etc/default/minio در مرحله 1 تنظیم کرده اید، وارد کنید. برای کلید مخفی ، MINIO_SECRET_KEY را که در همان فایل تنظیم کرده اید ، تایپ کنید. پس از وارد کردن اعتبارنامه ، روی دکمه گرد که فلشی درست در زیر فیلدهای ورودی دارد، کلیک کنید.
سپس رابط کاربری Minio به شما ارائه می شود. برای ایجاد یک سطل جدید که در آن می توانید اشیاء را ذخیره کنید ، روی دکمه + به رنگ قرمز روشن در سمت راست پایین رابط اصلی کلیک کنید تا دو دکمه زرد دیگر ظاهر شود.

بر روی دکمه زرد وسط کلیک کنید و یک نام برای سطل جدید خود را در اعلان نمایش داده شده وارد کنید ، با فشار دادن کلید ENTER ، پاسخ خود را ذخیره کنید. سطل جدید شما اکنون آماده است تا برای ذخیره سازی استفاده شود.
توجه: هنگام نامیدن سطل Minio ، اطمینان حاصل کنید که نام شما فقط حاوی حروف کوچک ، اعداد یا خط فاصله باشد. Minio قراردادهای نامگذاری سطل را محدود می کند تا با استانداردهای AWS S3 سازگار باشد.

هنگامی که می خواهید اشیاء را به سطل خود اضافه کنید ، بر روی همان دکمه قرمز روشن مانند قبل کلیک کنید و سپس بر روی دکمه زرد بالا کلیک کنید تا اعلان آپلود فایل باز شود.
در این مرحله ، شما در کل رابط اصلی وب برای ایجاد سطل و آپلود اشیاء کار کرده اید.
نتیجه
اکنون سرور مجازی ذخیره سازی شیء Minio خود را دارید که می توانید با استفاده از گواهی نامه Let’s Encrypt SSL/TLS آن را ایمن کنید. به صورت اختیاری ، میتوانید به کلاینت های دسکتاپ Minio برای FreeBSD ، لینوکس ، مک و ویندوز به عنوان یک روش جایگزین برای استفاده و مدیریت سرور مجازی ذخیره سازی شیء خود نگاهی بیاندازید.
علاوه بر این ، اگر مایل هستید ظرفیت ذخیره سازی Minio خود را فراتر از اندازه دیسک سرور مجازی خود افزایش دهید ، می توانید از سرویس ذخیره بلوک vpsgol برای وصل کردن یک حجم به سرور مجازی خود استفاده کنید و ظرفیت ذخیره سازی را تا 80 TB افزایش دهید.
اطلاعات بیشتر در مورد Minio در وب سایت مطالب پروژه موجود است. اگر می خواهید اطلاعات بیشتری در مورد ذخیره اشیاء کسب کنید ، آموزشهای مربوط به ذخیره سازی شیء را مشاهده کنید.

 

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

استفاده از nsh برای دستورات از راه دور اوبونتو 18 –  میزبانی وب سایت با Caddy اوبونتو 18

تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو

تنظیم مسیریابی شرطی و پاسخگو با React Router v4  –  ایجاد یک URL کوتاه کننده با Django و GraphQL

یک برنامه ردیابی سلامت را با React ،GraphQL و Okta –  ساخت برنامه چت زمان حقیقی React و GraphQL

به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) –  با استفاده از React ، Superagent و API اینستاگرام

نحوه ساختن یک برنامه جهانی با Nuxt.js و Django –  دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه کردن عکسهای پیشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت

یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید  –  ساخت برنامه های وب پیشرونده با Angular

اشکال زدایی JavaScript در تولید با نقشه های منبع  –  می توان با Koa برنامه “سلام جهانی” ساخت

ساختن یک برنامه با Node ، React ، Okta  –   مدیریت حالت فرم در React با Redux Form

نحوه تنظیم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ویژوال استودیو از راه دور  –  احراز هویت API با JSON Web Tokens و Passport

راه اندازی یک پروژه React با Parcel  –  ایجاد Swiper مانند Netflix را در Vue

ساختن یک ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسکریپت

چگونه می توان موتور جستجوی زمان واقعی را با Vue  –  ساختن سیستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراک زنده با کد ویژوال استودیو  –  ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React

شروع عملی GraphQL با Node.js و Express  –  ساخت یک برنامه آب و هوا در Django

نحوه نصب Discourse روی Ubuntu 18  –  تأیید رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
مسیریابی پاسخگو در React شامل ارائه مسیرهای مختلف به کاربران بر اساس پورت نمای دستگاهشان است. معمولاً از درخواست های CSS رسانه برای دستیابی به این هدف استفاده می شود ، اما این بدان معنی است که شما فقط با نشان دادن یا عدم نمایش عناصر مختلف با استفاده از گزاره های CSS محدود هستید. با استفاده از مسیرهای پاسخگو ، اکنون می توانید نمایش کامل و جداگانه برنامه های React خود را بر اساس اندازه صفحه نمایش آنها به کاربران مختلف ارائه دهید.
در این آموزش ، نحوه اجرای مسیریابی و سرویس دهی به مسیرهای پاسخگو را در برنامه های React به شما نشان خواهیم داد. با دنبال کردن این آموزش ، یک برنامه داشبورد کاربر ایجاد خواهید کرد که براساس اندازه صفحه نمایش دستگاه آنها ، مسیرهای مختلفی را برای کاربران ارائه می دهد.
پیش نیازها
برای دنبال کردن این راهنما به صورت مناسب ، به موارد زیر نیاز دارید:
Node.js که روی دستگاه شما نصب شده باشد
npm نصب شده بر روی دستگاه شما
برای تأیید نصب خود ، دستورات زیر را اجرا کنید:
$ node –version

$ npm –version

اگر شماره نسخه آنها را به عنوان نتیجه بدست آورید ، آماده هستید تا پیش بروید.
مرحله 1 – نصب React
این مقاله مبتنی بر React است ، بنابراین باید آن را در دستگاه خود نصب کنید. برای نصب React ، دستور زیر را اجرا کنید:
$ npm install -g create-react-app

پس از اتمام این کار ، React را با موفقیت روی دستگاه خود نصب کرده اید. اکنون می توانیم با اجرای این دستورات برنامه جدید خود را ایجاد کنیم:
$ create-react-app responsive-routing

$ cd responsive-routing

نکته بعدی اینست که ماژول های لازم را برای موفقیت ساخت این نسخه ی نمایشی نصب کنیم. این ماژول ها react-router-dom و react-media هستند. ما این کار را با اجرای دستور زیر نصب می کنیم:
$ npm install react-router-dom react-media

اکنون می توانیم با اجرای دستور برنامه را شروع کنیم:
$ npm start

مرحله 2 – ایجاد مؤلفه پیمایش
نماد Github در مرکز صفحه به عنوان قسمت ناوبری برنامه ما عمل می کند. بیایید ببینیم چگونه این کار را انجام دهیم. در پوشه src / خود یک پوشه جدید با نام Nav و فایل های لازم را به شرح زیر ایجاد کنید:
$ cd src

$ mkdir Nav

$ cd Nav && touch index.js Nav.css

باید آرم Github را اضافه کنید و آن را به عنوان logo.svg ذخیره کنید.
اکنون فایل src / Nav / index.js را به روز کنید تا به این شکل ظاهر شود:
// src/Nav/index.js
import React from ‘react’;
import ‘./Nav.css’;
import logo from ‘./logo.svg’;
const Nav = () => (
<nav>
<img src={logo} alt=”” />
</nav>
);
export default Nav;

مولفه ناوبری دارای ظاهر زیر میباشد:
/** src/Nav/Nav.css **/
nav {
display: flex;
justify-content: center;
height: 50px;
margin-bottom: 10px;
}
nav > img {
display: block;
width: 50px;
height: auto;
}

اکنون ، اجازه دهید مؤلفه Nav را ارائه دهیم. برای انجام این کار ، فایل پیش فرض src / App.js را ویرایش کنید تا به این شکل ظاهر شود:
// src/App.js
import React, { Component } from ‘react’;
import Nav from ‘./Nav’;

= App extends Component {
render() {
return (
<div>
<Nav />
</div>
);
}
}
export default App;

مرحله 3 – ایجاد کارت های کاربری
کارتهای کاربر وظیفه نمایش جزئیات کاربر را دارند. حال ، بیایید ببینیم چگونه می توانیم این کار را ایجاد کنیم. در دایرکتوری src / برنامه خود ، یک پوشه جدید Users ایجاد کرده و فایل های زیر را ایجاد کنید:
$ mkdir Users

$ cd Users && touch UsersCard.js UsersCard.css

فایل UsersCard.js را ویرایش کنید تا به این شکل ظاهر شود:
// src/Users/UsersCard.js
import React from ‘react’;
import {Link} from ‘react-router-dom’;
import ‘./UsersCard.css’
const UsersCard = ({ user, match }) => <Link to={`${match.url}/${user.id}`} className=”column card”>
<img src={user.avatar} alt=””/>
<p className=”users-card__name”>{user.name}</p>
<p className=”users-card__username”>@{user.username}</p>
<div className=”users-card__divider”></div>
<div className=”users-card__stats”>
<div>
<p>{user.followers}</p>
<span>Followers</span>
</div>
<div>
<p>{user.following}</p>
<span>Following</span>
</div>
<div>
<p>{user.repos}</p>
<span>Repositories</span>
</div>
</div>
</Link>;
export default UsersCard;

در این قطعه کد ، ما از مؤلفه Link از re-router-dom استفاده کردیم تا کاربر بتواند در هنگام کلیک بر روی کارت ، جزئیات مربوط به یک کاربر واحد را مشاهده کند. بنابراین ، برای یک کارت کاربر خاص با شناسه 10009 ، کامپوننت Link ، URL ای به صورت زیر ایجاد می کند:
http://your-app/current-page/10009
http://your-app/current-page آدرس URL موجود را نشان می دهد.
10009 شناسه کاربر را نشان می دهد.
با ارائه مؤلفه ، تمام این اطلاعات منتقل می شود. این مؤلفه به شکل زیر است:
/** src/Nav/UsersCard.css **/
.card {
border-radius: 2px;
background-color: #ffffff;
box-shadow: 0 1.5px 3px 0 rgba(0, 0, 0, 0.05);
max-width: 228px;
margin: 10px;
display: flex;
flex-direction: column;
align-items: center;
padding: 0;
}
.card img {
width: 50px;
height: auto;
border-radius: 50%;
display: block;
padding: 15px 0;
}
.users-card__name {
font-weight: 400;
font-size: 16.5px;
line-height: 1.19;
letter-spacing: normal;
text-align: left;
color: #25292e;
}
.users-card__username {
font-size: 14px;
color: #707070;
}
.users-card__divider {
border: solid 0.5px #efefef;
width: 100%;
margin: 15px 0;
}
.users-card__stats {
display: flex;
}
.users-card__stats p {
font-size: 20px;
}
.users-card__stats div {
margin: 10px;
text-align: center;

}
.users-card__stats span {
color: #707070;
font-size: 12px;
}
Copy

مرحله 4 – لیست کردن همه کاربران
برای اینکه برنامه خود را برای لیست کاربران قرار دهیم ، ابتدا باید یک جزء UsersList ایجاد کنیم. در دیرکتوری src / Users ، فایلهای زیر را ایجاد کنید:
$ touch UsersList.js UsersList.css

بیایید UsersList.js را به شرح زیر ویرایش کنیم. ابتدا ورودی های لازم را ایجاد می کنیم:
// src/Users/UsersList.js
import React from ‘react’;
import UsersCard from ‘./UsersCard’;
import ‘./UsersList.css’;

const listOfUsersPerRow = (users, row, itemsPerRow, match) =>
users
.slice((row – 1) * itemsPerRow, row * itemsPerRow)
.map(user => <UsersCard user={user} key={user.id} match={match} />);

const listOfRows = (users, itemsPerRow, match) => {
const numberOfUsers = users.length;
const rows = Math.ceil(numberOfUsers / itemsPerRow);
return Array(rows)
.fill()
.map((val, rowIndex) => (
<div className=”columns”>
{listOfUsersPerRow(users, rowIndex + 1, itemsPerRow, match)}
</div>
));
};

//…

توابع listOfUsersPerRow و listOfRows به صورت دست به دست کار می کنند تا اطمینان حاصل شود که در هر سطر بیشتر از تعداد مشخص شده کارت نداریم. نکته بعدی که باید انجام شود استفاده از توابع برای ایجاد لیست کاربران به شرح زیر است:
//src/Users/UsersList.js
//…
const UsersList = ({ users, itemsPerRow = 2, match }) => (
<div className=”cards”>
<h3 className=”is-size-3 has-text-centered”>Users</h3>
{listOfRows(users, itemsPerRow, match)}
</div>
);
export default UsersList;

UsersList.css به صورت زیر ظاهر می شود:
/** src/Users/UsersList.css **/
.cards {
margin-left: 20px;
}
.columns {
margin-top: 0;
}

مرحله 5 – ایجاد نمای جزئیات کاربر
هنگامی که یک کارت کاربر از لیست کاربران کلیک می شود ، کارت تک کاربره تحت بخش جزئیات نمایش داده می شود. بیایید نحوه ساخت این مؤلفه را ببینیم.
فایل های زیر را در دیرکتوری src / Users ایجاد کنید:
$ touch UsersDetails.js UsersDetails.css

اکنون ، بیایید موارد زیر را به فایل UsersDetails.js اضافه کنیم:
// src/Users/UsersDetails.js
import React from ‘react’;
import UsersCard from ‘./UsersCard’;
const UsersDetails = ({ user, match }) => <div>
<h3 className=”is-size-3 has-text-centered”>Details</h3>
<UsersCard user={user} match={match} />
</div>;
export default UsersDetails;

مرحله 6 – ایجاد مؤلفه داشبورد
برای ساخت مؤلفه داشبورد ، UserList را نمایش می دهیم و هنگامی که یک کارت کلیک می شود ، بدون نیاز به لود مجدد صفحه ، جزئیات را در کنار صفحه نمایش می دهید.
بیایید ببینیم چگونه آن را عملی کنیم. یک فایل UsersDashboard.js را در فهرست کاربران ایجاد کنید:
$ touch UserDashboard.js

UserDashboard.js را ویرایش کنید تا به شرح زیر باشد:
// src/Users/UsersDashboard.js

import React from ‘react’;
import { Route } from ‘react-router-dom’;
import UsersList from ‘./UsersList’;
import UsersDetails from ‘./UsersDetails’;
const UsersDashboard = ({ users, user, match }) => (
<div className=”columns”>
<div className=”column”>
<UsersList users={users} match={match} />
</div>
<div className=”column”>
<Route
path={match.url + ‘/:id’}
render={props => (
<UsersDetails
user={
users.filter(
user => user.id === parseInt(props.match.params.id, 10)
)[0]
}
match={match}
/>
)}
/>
</div>
</div>
);
export default UsersDashboard;

در این بخش ، ما از مؤلفه Route ارائه شده توسط re-router-dom به عنوان یک جزء برای نمایش جزئیات خاص کاربر هنگام کلیک روی کارت ، استفاده کردیم.
حالا ، بیایید همه اینها را کنار هم بگذاریم. فایل src / App.js را به روز کنید تا به صورت زیر باشد:
// src/App.js
import React, { Component } from ‘react’;
import { Route, Redirect } from ‘react-router-dom’;
import Nav from ‘./Nav’;
import UsersList from ‘./Users/UsersList’;
import UsersDetails from ‘./Users/UsersDetails’;
import UsersDashboard from ‘./Users/UsersDashboard’;
import ‘./App.css’;
class App extends Component {
state = {
users: [
{
id: 39191,
avatar: ‘https://avatars0.githubusercontent.com/u/39191?v=4’,
name: ‘Paul Irish’,
username: ‘paulirish’,
followers: ’12k’,
following: ‘1k’,
repos: ‘1.5k’
},
//… other user data
]
};
render() {
return (
<div className=”App”>
<Nav />
<Route
path=”/dashboard”
render={props => (
<UsersDashboard users={this.state.users} {…props} />
)}
/>
<Redirect from=”/” to=”/dashboard”/>
<Redirect from=”/users” to=”/dashboard”/>
</div>
);
}
}

export default App;

مرحله 7 – تنظیم مسیریابی پاسخگو
وقتی کاربران از این برنامه بازدید می کنند ، صرف نظر از اندازه صفحه نمایش ، از این منظر و عملکرد مشابه برخوردار می شوند. در برنامه های تمام عیار ، بهتر است به کاربران تجربیاتی ارائه دهند که می توانند از آنها به درستی استفاده کنند. یکی از راه های انجام این کار ، ارائه خدماتی به آنهاست که با اندازه دقیق دستگاه آنها مطابقت دارند. اکنون می خواهیم به چگونگی انجام این کار در برنامه خود نگاهی بیندازیم.
هنگام بازدید از برنامه بر روی صفحه نمایش پهن ، کاربر به مسیر /dashboard برنامه هدایت می شود و هنگام مشاهده بر روی صفحه نمایش کوچکتر ، کاربر به مسیر /users برنامه هدایت می شود. بیایید ببینیم چگونه این کار را انجام دهیم.
فایل src / App.js را به روز کنید تا به این صورت باشد:
// src/App.js

import React, { Component } from ‘react’;
import { Route, Switch, Redirect } from ‘react-router-dom’;
import Media from ‘react-media’;
import Nav from ‘./Nav’;
import UsersList from ‘./Users/UsersList’;
import UsersDetails from ‘./Users/UsersDetails’;
import UsersDashboard from ‘./Users/UsersDashboard’;
import ‘./App.css’;

class App extends Component {
//set application state
[…]
render() {
return (
<div className=”App”>
<Nav />
<Media query=”(max-width: 599px)”>
{matches =>
matches ? (
<Switch>
<Route
exact
path=”/users”
render={props => (
<UsersList users={this.state.users} {…props} />
)}
/>
<Route
path=”/users/:id”
render={props => (
<UsersDetails
user={
this.state.users.filter(
user =>
user.id === parseInt(props.match.params.id, 10)
)[0]
}
{…props}
/>
)}
/>
<Redirect from=”/” to=”/users”/>
<Redirect from=”/dashboard” to=”/users”/>
</Switch>
)
[…]

در این بخش از مؤلفه media برای بررسی اندازه صفحه نمایش استفاده می کنیم. اگر عرض صفحه نمایش از 599 پیکسل کمتر باشد ، آنچه را که می خواهیم برای مسیرهای مختلف نمایش داده شود تعیین می کنیم و همچنین مسیرهای / و /dashboard را به مسیر /users تغییر می دهیم.
اگر اندازه صفحه نمایش از پیکسل بیشتر باشد ، پیش می رویم و داشبورد کامل کاربر را مشابه قبل، نمایش می دهیم:
// src/App.js
[…]
: (
<Switch>
<Route
path=”/dashboard”
render={props => (
<UsersDashboard users={this.state.users} {…props} />
)}
/>
<Redirect from=”/” to=”/dashboard”/>
<Redirect from=”/users” to=”/dashboard”/>
</Switch>
)
}
</Media>
</div>
);
}
}

export default App;

در این مرحله ، می بینیم که بهتر است از مسیرهای مختلف بر اساس اندازه صفحه نمایش ، به جای استفاده از درخواست های رسانه استفاده کنیم ، زیرا اکنون می توانید بر اساس اندازه دستگاه های خود ، بخش های ویژه ای را به کاربران ارائه دهید.

نتیجه
در این مقاله ، ما مقدمه ای برای مسیریابی مبتنی بر مؤلفه با React و نحوه اجرای رندر مشروط در برنامه های React را دیدیم. در اینجا پیوندی به منبع کامل Github وجود دارد. حتما در بخش نظرات، کامنت و پیشنهادات خود را بگذارید.

 

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

استفاده از nsh برای دستورات از راه دور اوبونتو 18 –  میزبانی وب سایت با Caddy اوبونتو 18

تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو

تنظیم مسیریابی شرطی و پاسخگو با React Router v4  –  ایجاد یک URL کوتاه کننده با Django و GraphQL

یک برنامه ردیابی سلامت را با React ،GraphQL و Okta –  ساخت برنامه چت زمان حقیقی React و GraphQL

به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) –  با استفاده از React ، Superagent و API اینستاگرام

نحوه ساختن یک برنامه جهانی با Nuxt.js و Django –  دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه کردن عکسهای پیشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت

یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید  –  ساخت برنامه های وب پیشرونده با Angular

اشکال زدایی JavaScript در تولید با نقشه های منبع  –  می توان با Koa برنامه “سلام جهانی” ساخت

ساختن یک برنامه با Node ، React ، Okta  –   مدیریت حالت فرم در React با Redux Form

نحوه تنظیم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ویژوال استودیو از راه دور  –  احراز هویت API با JSON Web Tokens و Passport

راه اندازی یک پروژه React با Parcel  –  ایجاد Swiper مانند Netflix را در Vue

ساختن یک ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسکریپت

چگونه می توان موتور جستجوی زمان واقعی را با Vue  –  ساختن سیستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراک زنده با کد ویژوال استودیو  –  ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React

شروع عملی GraphQL با Node.js و Express  –  ساخت یک برنامه آب و هوا در Django

نحوه نصب Discourse روی Ubuntu 18  –  تأیید رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
Elasticsearch یک موتور جستجو و تجزیه و تحلیل RESTful توزیع شده است که قادر به حل تعداد فزاینده ای موارد استفاده است. Elasticsearch در ورای Apache Lucene ساخته شده است که یک کتابخانه موتور جستجوگر متن میباشد.
در این آموزش ، شما با استفاده از Node.js ،Elasticsearch و Vue.js.s یک موتور جستجوی زمان واقعی ایجاد خواهید کرد. در نتیجه ، درک پایه از Vue.js و Node.js (Express) برای دنبال کردن این آموزش لازم است.

مرحله 1 – آماده سازی محیط
بیایید با تنظیم محیط این بخش را شروع کنیم. از آنجا که شما از Node.js استفاده خواهید کرد ، ساده ترین راه برای شروع ایجاد پوشه جدید و اجرای npm init است. پوشه جدیدی به نام elastic-node ایجاد کنید ، دیرکتوری را در پوشه جدید تغییر دهید و npm init را اجرا کنید:
یک دیرکتوری جدید به نام elastic-node ایجاد کنید:
⦁ $ mkdir elastic-node

به پوشه جدید بروید:
⦁ $ cd elastic-node

npm init را برای ایجاد فایل pack.json اجرا کنید:
⦁ $ npm init

دستورات فوق شما را به فرآیند ایجاد فایل pack.json هدایت میکند، که برای اجرای هر کتابخانه Node.js لازم است.
در مرحله بعد ، باید کتابخانه هایی را که برای موتور جستجوی زمان واقعی مورد نیاز است ، نصب کنید. کتابخانه ها را با دستور زیر نصب کنید:
⦁ $ npm install express body-parser elasticsearch

کتابخانه express ، سرور مجازی را اجرا می کند ، در حالی که کتابخانه body-parser با express کار میکند تا درخواست های بدن را دنبال کند. elasticsearch کتابخانه رسمی Node.js برای Elasticsearch است که موتوری است که جستجو در زمان واقعی بر روی آن ساخته خواهد شد.
اکنون قسمت اول محیط شما تنظیم شده است. با این حال ، خود Elasticsearch در ستاپ شما نیست. شما نیاز به نصب Elasticsearch دارید که می تواند به چند روش مختلف انجام شود. اگر از سیستم عامل Debian Linux استفاده می کنید ، می توانید فایل .deb را دانلود کرده و با استفاده از dpkg نصب کنید.
دستور زیر را برای دانلود فایل .deb اجرا کنید:
⦁ $ curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.4.deb

اکنون بسته deb را با استفاده از dpkg نصب کنید:
⦁ $ sudo dpkg -i elasticsearch-5.6.4.deb

برای سایر توزیع ها / سیستم عامل ها ، می توانید راهنمایی در مورد نحوه نصب Elasticsearch را در اینجا بیابید.
Elasticsearch پس از نصب به صورت خودکار شروع نمی شود. Elasticsearch را می توان با استفاده از فرمان service شروع و متوقف کرد.
موارد زیر را برای شروع سرویس elasticsearch اجرا کنید:
⦁ $ sudo -i service elasticsearch start

می توانید با این دستور سرویس elasticsearch را متوقف کنید:
⦁ $ sudo -i service elasticsearch stop

برای پیکربندی Elasticsearch جهت شروع خودکار پس از بوت شدن سیستم ، این دستور را اجرا کنید تا Daemon systemctl مجدد لود شود:
⦁ $ sudo /bin/systemctl daemon-reload

سپس elasticsearch  را فعال کنید تا بتوان آن را به عنوان سرویس نامگذاری کرد:
⦁ $ sudo /bin/systemctl enable elasticsearch.service

بعد از اجرای دستور فوق ، می توانید Elasticsearch را با این دستور شروع کنید:
⦁ $ sudo systemctl start elasticsearch.service

و با دستور زیر متوقف کنید:
⦁ $ sudo systemctl stop elasticsearch.service

همچنین می توانید وضعیت Elasticsearch را بررسی کنید:
⦁ $ sudo service elasticsearch status

مرحله 2 – ایندکس کردن داده ها در Elasticsearch
یک فایل data.js را در پوشه root خود ایجاد کنید و کد زیر را اضافه کنید:
data.js

//require the Elasticsearch librray
const elasticsearch = require(‘elasticsearch’);
// instantiate an Elasticsearch client
const client = new elasticsearch.Client({
hosts: [ ‘http://localhost:9200’]
});
// ping the client to be sure Elasticsearch is up
client.ping({
requestTimeout: 30000,
}, function(error) {
// at this point, eastic search is down, please check your Elasticsearch service
if (error) {
console.error(‘Elasticsearch cluster is down!’);
} else {
console.log(‘Everything is ok’);
}
});

این کد ابتدا به کتابخانه Elasticsearch نیاز دارد و سپس یک کلاینت جدید Elasticsearch را راه اندازی می کند ، و یک آرایه هاست را وارد میکند ، http: // localhost: 9200 . دلیل این است که ، به طور پیش فرض ، Elasticsearch به 9200 گوش می کند. در مرحله بعد ، کلاینت Elasticsearch را پینگ می کنید تا مطمئن شوید سرور مجازی آماده است. اگر node data.jsرا اجرا کنید ، پیامی دریافت خواهید کرد که می گوید Everything is ok.
مرحله 3 – درک ایندکس ها
بر خلاف بانک های اطلاعاتی عادی ، ایندکس Elasticsearch مکانی برای ذخیره اسناد مرتبط است. به عنوان مثال ، برای ذخیره کردن داده ها از نوع cities_list، یک ایندکس با نام scotch.io-tutorialایجاد خواهید کرد. به این صورت در Elasticsearch انجام می شود:
data.js
// create a new index called scotch.io-tutorial. If the index has already been created, this function fails safely
client.indices.create({
index: ‘scotch.io-tutorial’
}, function(error, response, status) {
if (error) {
console.log(error);
} else {
console.log(“created a new index”, response);
}
});

این قطعه کد را بعد از تابع ping  که قبلاً نوشته بودید اضافه کنید. اکنون دوباره node data.js را اجرا کنید. دو پیام دریافت خواهید کرد:
⦁ Everything is okay
⦁ Created a new index (Elasticsearch با پاسخ از)
مرحله 4 – اضافه کردن اسناد به ایندکس ها
می توانید با API Elasticsearch اسناد را به ایندکس های موجود اضافه کنید. برای این کار از کد زیر استفاده کنید:
// add a data to the index that has already been created
client.index({
index: ‘scotch.io-tutorial’,
id: ‘1’,
type: ‘cities_list’,
body: {
“Key1”: “Content for key one”,
“Key2”: “Content for key two”,
“key3”: “Content for key three”,
}
}, function(err, resp, status) {
console.log(resp);
});

body به سندی که می خواهید به ایندکس scotch.io-tutour اضافه کنید اشاره می کند ، در حالی که نوع، بیشتر برای دسته بندی است. با این حال ، توجه داشته باشید که اگر کلید id حذف شود ، Elasticsearch یکی از آنها را به صورت خودکار تولید می کند.
در این آموزش ، سند شما لیستی از تمام شهرهای جهان خواهد بود. اگر قرار باشد هر شهر را یکی یکی اضافه کنید ، ممکن است روزها طول بکشد تا همه آنها فهرست شوند. خوشبختانه ، Elasticsearch تابع bulk دارد که می تواند داده های فله ای را پردازش کند.
ابتدا فایل JSON را که شامل تمام شهرهای جهان است ، دریافت کنید و آن را در پوشه root خود به عنوان names.json ذخیره کنید.
زمان آن است که از API بالک برای وارد کردن مجموعه داده های بزرگ استفاده کنید:
data.js
// require the array of cities that was downloaded
const cities = require(‘./cities.json’);
// declare an empty array called bulk
var bulk = [];
//loop through each city and create and push two objects into the array in each loop
//first object sends the index and type you will be saving the data as
//second object is the data you want to index
cities.forEach(city =>{
bulk.push({index:{
_index:”scotch.io-tutorial”,
_type:”cities_list”,
}
})
bulk.push(city)
})
//perform bulk indexing of the data passed
client.bulk({body:bulk}, function( err, response ){
if( err ){
console.log(“Failed Bulk operation”.red, err)
} else {
console.log(“Successfully imported %s”.green, cities.length);
}
});

در اینجا ، شما در فایل JSON خود میان تمام شهرها حلقه زده اید ، و در هر حلقه ، یک آبجکت را با index  و type  سندی که در آن فهرست بندی می کنید ، به کار میگیرید. دو ورودی برای آرایه در حلقه وجود دارد زیرا API bulk در مرحله اول یک آبجکت حاوی تعریف ایندکس را انتظار دارد و سپس سندی را که می خواهید آن را ایندکس کنید. برای کسب اطلاعات بیشتر در این مورد ، می توانید این مقاله را بررسی کنید.
در مرحله بعدی ، تابع client.bulk را فراخوانی میکنید ، و به قسمت جدید آرایه bulk وارد میکنید. این کار با ایندکس کردن scotch.io-tutorial و cities_list، تمام داده های شما را به Elasticsearch  ایندکس میکند.
مرحله 5 – استفاده از Express برای ارائه صفحه فرود
نمونه Elasticsearch شما در حال اجراست و می توانید با استفاده از Node.js. با آن ارتباط برقرار کنید. زمان آن رسیده است که از Express برای ارائه یک صفحه فرود استفاده کرده و از ستاپ راه اندازی شده استفاده کنید.
فایلی با نام index.js ایجاد کنید و کد زیر را اضافه کنید:
index.js
//require the Elasticsearch librray
const elasticsearch = require(‘elasticsearch’);
// instantiate an elasticsearch client
const client = new elasticsearch.Client({
hosts: [ ‘http://localhost:9200’]
});
//require Express
const express = require( ‘express’ );
// instanciate an instance of express and hold the value in a constant called app
const app = express();
//require the body-parser library. will be used for parsing body requests
const bodyParser = require(‘body-parser’)
//require the path library
const path = require( ‘path’ );

// ping the client to be sure Elasticsearch is up
client.ping({
requestTimeout: 30000,
}, function(error) {
// at this point, eastic search is down, please check your Elasticsearch service
if (error) {
console.error(‘elasticsearch cluster is down!’);
} else {
console.log(‘Everything is ok’);
}
});

// use the bodyparser as a middleware
app.use(bodyParser.json())
// set port for the app to listen on
app.set( ‘port’, process.env.PORT || 3001 );
// set path to serve static files
app.use( express.static( path.join( __dirname, ‘public’ )));
// enable CORS
app.use(function(req, res, next) {
res.header(“Access-Control-Allow-Origin”, “*”);
res.header(‘Access-Control-Allow-Methods’, ‘PUT, GET, POST, DELETE, OPTIONS’);
res.header(“Access-Control-Allow-Headers”, “Origin, X-Requested-With, Content-Type, Accept”);
next();
});

// defined the base route and return with an HTML file called tempate.html
app.get(‘/’, function(req, res){
res.sendFile(‘template.html’, {
root: path.join( __dirname, ‘views’ )
});
})

// define the /search route that should return elastic search results
app.get(‘/search’, function (req, res){
// declare the query object to search elastic search and return only 200 results from the first result found.
// also match any data where the name is like the query string sent in
let body = {
size: 200,
from: 0,
query: {
match: {
name: req.query[‘q’]
}
}
}
// perform the actual search passing in the index, the search query and the type
client.search({index:’scotch.io-tutorial’, body:body, type:’cities_list’})
.then(results => {
res.send(results.hits.hits);
})
.catch(err=>{
console.log(err)
res.send([]);
});

})
// listen on the specified port
app .listen( app.get( ‘port’ ), function(){
console.log( ‘Express server listening on port ‘ + app.get( ‘port’ ));
} );

با نگاهی به کد بالا ، می بینید که کد موارد زیر را انجام داده است:
• کتابخانه های Express ، body-parser و path را درخواست کرده است.
• یک نمونه جدید از Express را روی ثابتی به نام app تنظیم کرده است.
• برنامه را تنظیم کرده تا از میان افزار bodyParser استفاده کند.
• بخش استاتیک برنامه را روی پوشه ای به نام public تنظیم کرده است. این پوشه هنوز ایجاد نشده است
• یک میان افزار تعریف کرده است که عنوان CORS را به برنامه اضافه می کند.
• یک مسیر GET برای URL ریشه برنامه تعریف کرده است ، که توسط / نشان داده میشود. در این مسیر ، کد فایلی به نام template.html را که در پوشه views قرار دارد ، باز می گرداند.
•یک مسیر GET برای URL سرچ برنامه تعریف کرده است ، که از جستجوی آبجکت برای یافتن مطابقت داده های منتقل شده از طریق رشته پرس و جو استفاده می کند. جستجوی اصلی در موضوع پرس و جو گنجانده شده است. می توانید جستارهای سرچ مختلف را به این آبجکت اضافه کنید. برای این جستجو، یک کلید با پرس و جو اضافه می کنید و یک آبجکت را برمیگردانید که به آن میگویید نام سندی که به دنبال آن هستید باید با req.query [‘q’] مطابقت داشته باشد.
علاوه بر موضوع پرس و جو ، بدنه جستجو می تواند شامل سایر خصوصیات اختیاری از جمله size و from باشد. ویژگی size تعداد اسنادی را که باید در پاسخ شامل شوند را تعیین می کند. اگر این مقدار موجود نباشد ، به طور پیش فرض 10 سند بازگردانده می شوند. ویژگی from، شاخص شروع اسناد برگشتی را تعیین می کند. این برای صفحه بندی مفید است.
مرحله 6 – درک پاسخ API جستجو
اگر مجبور باشید پاسخ را از API جستجو وارد کنید ، اطلاعات زیادی را در بر می گیرد. در زیر مثالی آورده شده است:
Output
{ took: 88,
timed_out: false,
_shards: { total: 5, successful: 5, failed: 0 },
hits:
{ total: 59,
max_score: 5.9437823,
hits:
[ {“_index”:”scotch.io-tutorial”,
“_type”:”cities_list”,
“_id”:”AV-xjywQx9urn0C4pSPv”,
“_score”:5.9437823,”
_source”:{“country”:”ES”,”name”:”A Coruña”,”lat”:”43.37135″,”lng”:”-8.396″}},
[Object],

[Object] ] } }

پاسخ شامل یک ویژگی took برای تعداد میلی ثانیه هایی است که برای یافتن نتایج طول میکشد ، timed_out ، که فقط درصورتی درست است که هیچ نتیجه ای در حداکثر زمان مجاز یافت نشود ، برای اطلاعات پیرامون وضعیت گره های مختلف (در صورت به کارگیری به عنوان خوشه گره ها) ، _shards میباشد و hits که شامل نتایج جستجو میباشد.
⦁ در خاصیت hits ، یک آبجکت با خصوصیات زیر خواهید داشت:
⦁ total تعداد کل موارد مطابقت یافته را نشان می دهد.
⦁ max_score حداکثر امتیاز از موارد یافت شده است.
⦁ hits آرایه ای است که شامل موارد یافت شده میباشد.
به همین دلیل شما در مسیر جستجو ، response.hits.hits را در بر می گردانید ، که جایگاه نتایج یافت شده است.
مرحله 7 – ایجاد الگوی HTML
ابتدا دو پوشه جدید را در پوشه root خود با نام views و public ایجاد کنید که در مرحله قبل به آنها ارجاع داده شده است. در مرحله بعدی ، یک فایل با نام pattern.html در پوشه views ایجاد کنید و کد زیر را پیست کنید:
template.html
<!– template.html –>
<link rel=”stylesheet” type=”text/css” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css”>
<script src=”https://unpkg.com/axios/dist/axios.min.js”></script>
<script src=”https://cdn.jsdelivr.net/npm/vue”></script>
<div class=”container” id=”app”>
<div class=”row”>
<div class=”col-md-6 col-md-offset-3″>
<h1>Search Cities around the world</h1>
</div>
</div>
<div class=”row”>
<div class=”col-md-4 col-md-offset-3″>
<form action=”” class=”search-form”>
<div class=”form-group has-feedback”>
<label for=”search” class=”sr-only”>Search</label>
<input type=”text” class=”form-control” name=”search” id=”search” placeholder=”search” v-model=”query” >
<span class=”glyphicon glyphicon-search form-control-feedback”></span>
</div>
</form>
</div>
</div>
<div class=”row”>
<div class=”col-md-3″ v-for=”result in results”>
<div class=”panel panel-default”>
<div class=”panel-heading”>
<!– display the city name and country –>
{{ result._source.name }}, {{ result._source.country }}
</div>
<div class=”panel-body”>
<!– display the latitude and longitude of the city –>
<p>lat:{{ result._source.lat }}, long: {{ result._source.lng }}.</p>
</div>
</div>
</div>
</div>
</div>
<!— some styling for the page –>
<style>
.search-form .form-group {
float: right !important;
transition: all 0.35s, border-radius 0s;
width: 32px;
height: 32px;
background-color: #fff;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset;
border-radius: 25px;
border: 1px solid #ccc;
}

.search-form .form-group input.form-control {
padding-right: 20px;
border: 0 none;
background: transparent;
box-shadow: none;
display: block;
}

.search-form .form-group input.form-control::-webkit-input-placeholder {
display: none;
}

.search-form .form-group input.form-control:-moz-placeholder {
/* Firefox 18- */
display: none;
}

.search-form .form-group input.form-control::-moz-placeholder {
/* Firefox 19+ */
display: none;
}

.search-form .form-group input.form-control:-ms-input-placeholder {
display: none;
}

.search-form .form-group:hover,
.search-form .form-group.hover {
width: 100%;
border-radius: 4px 25px 25px 4px;
}

.search-form .form-group span.form-control-feedback {
position: absolute;
top: -1px;
right: -2px;
z-index: 2;
display: block;
width: 34px;
height: 34px;
line-height: 34px;
text-align: center;
color: #3596e0;
left: initial;
font-size: 14px;
}
</style>

در قسمت قطعه کد بالا دو بخش اصلی وجود دارد: کد HTML و CSS.
در بخش HTML ، شما به سه کتابخانه مختلف نیاز دارید:
1- Bootstrap CSS برای استایل صفحه.
2- Axios js برای درخواست های HTTP به سرور مجازی ما.
3- Vue.js که یک چارچوب حداقلی است که شما برای نما استفاده خواهید کرد.
در بخش CSS از یک طراحی استفاده کرده اید تا هنگامی که روی نماد جستجو می روید ، ورودی جستجو را مخفی کرده و خود را نشان دهد.
در مرحله بعد ، یک ورودی برای جعبه جستجو وجود دارد که شما v-model آن را برای query اختصاص داده اید (این مورد توسط Vue.js استفاده خواهد شد). بعد از این ، در تمام نتایج ما حلقه می زنید.
دستور node index.js را اجرا کنید و سپس از یک مرورگر به http: // localhost: 3001 / بروید. صفحه فرود برنامه را مشاهده خواهید کرد.

در مرحله بعد ، برچسب اسکریپت را در فایل template.html خود اضافه کنید:
template.html
// create a new Vue instance
var app = new Vue({
el: ‘#app’,
// declare the data for the component (An array that houses the results and a query that holds the current search string)
data: {
results: [],
query: ”
},
// declare methods in this Vue component. here only one method which performs the search is defined
methods: {
// make an axios request to the server with the current search query
search: function() {
axios.get(“http://127.0.0.1:3001/search?q=” + this.query)
.then(response => {
this.results = response.data;

})
}
},
// declare Vue watchers
watch: {
// watch for change in the query string and recall the search method
query: function() {
this.search();
}
}

})

در این بخش نمونه جدیدی از Vue را اعلام کردید که آن را با id برنامه بر روی المان، نصب میکنید. خواص داده را اعلام کردید که شامل query است ، که به ورودی جستجو پیوست کرده اید ، و results ، که مجموعه ای از تمام نتایج یافت شده است.
در بخش روشها ، فقط یک تابع به نام search دارید ، که یک درخواست GET را به مسیر جستجو میفرستد. از ورودی جعبه جستجو می گذرد. و به نوبه خود پاسخی را که در بلوک کد HTML حلقه شده است برمی گرداند.
سرانجام ، در Vue.js از watchers استفاده می کنید ، که در هر زمان که داده ها تغییرات را دیدند ، کاری انجام می دهد. در اینجا ، در حال مشاهده تغییر در داده query هستید و پس از تغییر ، روش search کنار گذاشته می شود.
اگر فرمان node index.js را مجدداً اجرا کنید و به http: // localhost: 3001 / بروید ، باید مطابق زیر کار کند:

مرحله 8 – جستجو از سمت کلاینت
اگر نمی خواهید در هر بار جستجو یک درخواست به سرور مجازی ارسال کنید ، می توانید موتور Elasticsearch را از طرف کلاینت جستجو کنید. ممکن است برخی از توسعه دهندگان مایل به استفاده از سرور مجازی های خود برای هر اصطلاح جستجو نباشند ، در حالی که برخی احساس می کنند جستجو از طرف سرور مجازی امن تر است.
Elasticsearch یک ساختار مرورگر پیشنهاد میکند که می تواند جستجو کند. این مرحله شما را در مورد جستجوی سمت کلاینت مرورگر راهنمایی می کنیم.
ابتدا مسیر جدیدی را به فایل Express خود اضافه کنید و سرور مجازی خود را مجدداً راه اندازی کنید:
index.js
// decare a new route. This route serves a static HTML template called template2.html
app.get(‘/v2’, function(req, res){
res.sendFile(‘template2.html’, {
root: path.join( __dirname, ‘views’ )
});
})

در این بلاک کد ، مسیر جدیدی را برای URL در / v2 ایجاد کرده اید تا یک فایل HTML استاتیک به نام template2.html را برگردانید. به زودی این فایل را ایجاد خواهید کرد.
در مرحله بعد ، باید کتابخانه کلاینت را برای Elasticsearch از اینجا دانلود کنید. بعد از دانلود ، elasticsearch.min.js را در پوشه عمومی در ریشه برنامه خود اکسترکت و کپی کنید.
توجه: اگر بعد از اتصال به موتور Elasticsearch از طرف کلاینت و دنبال کردن قطعه کد زیر تا انتهای فایل پیکربندی Elasticsearch ، با مشکلات CORS روبرو شدید، با مرور مطالب مرجع Elasticsearch می توانید این فایل را جایگذاری کنید.
/etc/elasticsearch/elasticsearch.yml

http.cors.enabled : true
http.cors.allow-origin : “*”

بعد از انجام این کار ، نمونه Elasticsearch خود را مجدداً راه اندازی کنید:
⦁ sudo service elasticsearch restart

سپس ، یک فایل با نام pattern2.html در پوشه views و این کد را ایجاد کنید:
template2.html
<!– template2.html –>
<link rel=”stylesheet” type=”text/css” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css”>
<script src=”https://unpkg.com/axios/dist/axios.min.js”></script>
<script src=”https://cdn.jsdelivr.net/npm/vue”></script>
<div class=”container” id=”app”>
<div class=”row”>
<div class=”col-md-6 col-md-offset-3″>
<h1>Search Cities around the world</h1>
</div>
</div>
<div class=”row”>
<div class=”col-md-4 col-md-offset-3″>
<form action=”” class=”search-form”>
<div class=”form-group has-feedback”>
<label for=”search” class=”sr-only”>Search</label>
<input type=”text” class=”form-control” name=”search” id=”search” placeholder=”search” v-model=”query” >
<span class=”glyphicon glyphicon-search form-control-feedback”></span>
</div>
</form>
</div>
</div>
<div class=”row”>
<div class=”col-md-3″ v-for=”result in results”>
<div class=”panel panel-default”>
<div class=”panel-heading”>
<!– display the city name and country –>
{{ result._source.name }}, {{ result._source.country }}
</div>
<div class=”panel-body”>
<!– display the latitude and longitude of the city –>
<p>lat:{{ result._source.lat }}, long: {{ result._source.lng }}.</p>
</div>
</div>
</div>
</div>
</div>
<script src=”/elasticsearch.min.js”></script>
<style>
.search-form .form-group {
float: right !important;
transition: all 0.35s, border-radius 0s;
width: 32px;
height: 32px;
background-color: #fff;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset;
border-radius: 25px;
border: 1px solid #ccc;
}

.search-form .form-group input.form-control {
padding-right: 20px;
border: 0 none;
background: transparent;
box-shadow: none;
display: block;
}

.search-form .form-group input.form-control::-webkit-input-placeholder {
display: none;
}

.search-form .form-group input.form-control:-moz-placeholder {
/* Firefox 18- */
display: none;
}

.search-form .form-group input.form-control::-moz-placeholder {
/* Firefox 19+ */
display: none;
}

.search-form .form-group input.form-control:-ms-input-placeholder {
display: none;
}

.search-form .form-group:hover,
.search-form .form-group.hover {
width: 100%;
border-radius: 4px 25px 25px 4px;
}

.search-form .form-group span.form-control-feedback {
position: absolute;
top: -1px;
right: -2px;
z-index: 2;
display: block;
width: 34px;
height: 34px;
line-height: 34px;
text-align: center;
color: #3596e0;
left: initial;
font-size: 14px;
}
</style>

سپس، یک تگ اسکریپت در فایل template2.html خود ایجاد کرده و این کد را اضافه کنید:
template2.html
// instantiate a new Elasticsearch client like you did on the client
var client = new elasticsearch.Client({
hosts: [‘http://127.0.0.1:9200’]
});
// create a new Vue instance
var app = new Vue({
el: ‘#app’,
// declare the data for the component (An array that houses the results and a query that holds the current search string)
data: {
results: [],
query: ”
},
// declare methods in this Vue component. here only one method which performs the search is defined
methods: {
// function that calls the elastic search. here the query object is set just as that of the server.
//Here the query string is passed directly from Vue
search: function() {
var body = {
size: 200,
from: 0,
query: {
match: {
name: this.query
}
}
}
// search the Elasticsearch passing in the index, query object and type
client.search({ index: ‘scotch.io-tutorial’, body: body, type: ‘cities_list’ })
.then(results => {
console.log(`found ${results.hits.total} items in ${results.took}ms`);
// set the results to the result array we have
this.results = results.hits.hits;
})
.catch(err => {
console.log(err)

});

}
},
// declare Vue watchers
watch: {
// watch for change in the query string and recall the search method
query: function() {
this.search();
}
}

})

قطعه HTML و JavaScript در بالا شبیه به مرحله قبل است که تفاوت های اصلی آن به شرح زیر است:
• شما به Axios احتیاج نداشتید ، در عوض به elasticsearch.js نیاز داشتید.
• در بالای برچسب اسکریپت ، کلاینت Elasticsearch را همانطور که در سمت سرور مجازی انجام شد ، آغاز کردید.
• روش جستجو درخواست HTTP را انجام نمی دهد ، بلکه موتور Elasticsearch را همانطور که در مسیر جستجو در سمت سرور مجازی انجام می شود جستجو می کند.
اگر در http: // localhost: 3001 / v2 جستجو می کنید ، باید مطابق شکل زیر کار کند:

نتیجه
در این آموزش ، شما از Elasticsearch برای نمایه سازی داده ها استفاده کرده اید. همچنین با استفاده از کتابخانه کلاینت برای Elasticsearch یک جستجوی زمان واقعی انجام داده اید.

 

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

استفاده از nsh برای دستورات از راه دور اوبونتو 18 –  میزبانی وب سایت با Caddy اوبونتو 18

تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو

تنظیم مسیریابی شرطی و پاسخگو با React Router v4  –  ایجاد یک URL کوتاه کننده با Django و GraphQL

یک برنامه ردیابی سلامت را با React ،GraphQL و Okta –  ساخت برنامه چت زمان حقیقی React و GraphQL

به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) –  با استفاده از React ، Superagent و API اینستاگرام

نحوه ساختن یک برنامه جهانی با Nuxt.js و Django –  دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه کردن عکسهای پیشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت

یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید  –  ساخت برنامه های وب پیشرونده با Angular

اشکال زدایی JavaScript در تولید با نقشه های منبع  –  می توان با Koa برنامه “سلام جهانی” ساخت

ساختن یک برنامه با Node ، React ، Okta  –   مدیریت حالت فرم در React با Redux Form

نحوه تنظیم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ویژوال استودیو از راه دور  –  احراز هویت API با JSON Web Tokens و Passport

راه اندازی یک پروژه React با Parcel  –  ایجاد Swiper مانند Netflix را در Vue

ساختن یک ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسکریپت

چگونه می توان موتور جستجوی زمان واقعی را با Vue  –  ساختن سیستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراک زنده با کد ویژوال استودیو  –  ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React

شروع عملی GraphQL با Node.js و Express  –  ساخت یک برنامه آب و هوا در Django

نحوه نصب Discourse روی Ubuntu 18  –  تأیید رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

Live Share افزونه ای برای کد VS (ویژوال استودیو) است که امکان همکاری زمان واقعی بین توسعه دهندگان را فراهم می کند. این امکان را به کاربران می دهد تا یک جلسه را با شخص دیگری به اشتراک بگذارند ، به آنها امکان می دهد کدها را ویرایش کنند و همچنین سرور مجازی و بخش اشکال زدایی را به اشتراک بگذارند.
شروع
1- افزونه Live Share (اشتراک گذاری زنده) را نصب کنید
2- پالت فرمان را باز کنید
3- اشتراک گذاری زنده را شروع کنید
4- پیوند به اشتراک بگذارید
با پیش رفتن در طول این مقاله ، اسکرین شات دو رایانه مختلف را مشاهده می کنید تا نمونه ای از عملکرد Live Share به شما نشان داده شود. برای اهداف شفاف سازی ، این آموزش به ترتیب به شخصی اشاره دارد که دعوت جلسه را ارسال می کند و شخصی که دعوت نامه را میپذیرد یعنی دعوت کننده و دعوت شونده.
مرحله 1 – دانلود افزونه
اولین قدم برای استفاده از Live Share نصب آن به عنوان افزونه است. در VS Code می توانید سربرگ افزونه ها را باز کنید ، Live Share را جستجو کنید، روی نصب کلیک کنید و بعد از اتمام نصب مجدد لود کنید.

پس از آن ، باید وارد سیستم شوید. از همین حالا ، می توانید وارد حساب کاربری Microsoft یا Github شوید.
برای ورود به سیستم ، از دکمه sign in در پایین نوار وضعیت با آیکون شخصی استفاده کنید.
مرحله 2 – اشتراک گذاری و پیوستن به یک جلسه
پس از ورود به سیستم ، آماده ایجاد جلسه برای به اشتراک گذاشتن با دیگران هستید. مطمئن شوید که فقط جلسات زنده را با افرادی که به آنها اعتماد دارید به اشتراک بگذارید. همانطور که خواهید دید ، شما دسترسی خاصی را به کاربران اعطا می کنید که در صورت استفاده نادرست می توانند مخرب باشند.
با کلیک کردن روی نام کاربری خود در نوار وضعیت پایین شروع کرده و از گزینه های موجود Start Collaboration Session را انتخاب کنید. از طرف دیگر ، می توانید پالت فرمان (CMD + SHIFT + P را در Mac ، CTRL + SHIFT + P در ویندوز) را باز کنید و Start Collaboration Session را تایپ کنید.

به شما اطلاع داده می شود که لینک دعوت شما در کلیپ بورد کپی شده است.

این لینک را با شخصی به اشتراک بگذارید تا آنها را به جلسه خود دعوت کنید.
به عنوان دعوت شونده ، برای پذیرش دعوت نامه ، روی نام کاربری خود در نوار وضعیت پایین کلیک کنید و Join Collaborative Session را انتخاب کنید. روش دیگر ، مانند بالا ، می توانید پالت فرمان را باز کرده و Join Collaborative Session را تایپ کنید.

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

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

همچنین می توانید یک قطعه کد انتخاب کنید تا در رایانه کاربر دیگر هایلایت شود. برای مثال می توانید برای جلب توجه آنها به بخشی از کد استفاده کنید.

مرحله 3 – محدود کردن همکاری
به طور پیش فرض ، هنگام به اشتراک گذاشتن یک جلسه با شخصی ، آنها قادر به ویرایش کلیه فایل ها در فضای کاری خواهند بود. این یکی از دلایلی است که باید به شخصی که ممکن است چند فایل را ویرایش کند اعتماد داشته باشید ، اما باز کردن کل فضای کاری تان برای آنها توصیه نمیشود. خوشبختانه ، Live Share این امکان را به شما می دهد تا فایل هایی که می توانند مشاهده و ویرایش کنند را محدود کنید.
برای محدود کردن همکاری ، یک فایل .vsls.json ایجاد کنید. پیکربندی اصلی چیزی شبیه به این خواهد بود:
.vsls.json
{
“$schema”: “http://json.schemastore.org/vsls”,
“gitignore”: “none”,
“excludeFiles”: [],
“hideFiles”: []
}

دو کلید که بیشتر به آنها اهمیت می دهیم عبارتند از: excludeFiles  و hideFiles. excludFiles مجموعه ای از نام فایل ها است که نمی خواهید کاربران به آنها دسترسی داشته باشند. hideFiles بسیار مشابه است به جز اینکه همکاران در شرایط خاصی قادر به دیدن فایل های مخفی خواهند بود. برای اطلاعات بیشتر درباره امنیت ، اینجا کلیک کنید.
مرحله 4 – به اشتراک گذاری سرور مجازی
به اشتراک گذاشتن با دیگران هنگام کار در یک برنامه محلی می تواند چالش برانگیز باشد. می توانید کد را در GitHub بررسی کرده و شخص دیگری آن را کلون کند، اما هنوز هم آنها باید متعلقات را نصب کرده و خودشان سرور مجازی را راه اندازی کنند. با Live Share می توانید سرور مجازی را بصورت محلی شروع کنید و شخص دیگر می تواند به همان برنامه در حال اجرا دسترسی پیدا کند.
به عنوان دعوت کننده ، سرور مجازی خود را به طور عادی شروع کنید. سپس بر روی نام کاربری در نوار وضعیت پایین کلیک کرده و Share Server را انتخاب کنید. روش دیگر این است که پالت فرمان را باز کرده و Share Server را تایپ کنید.

به عنوان دعوت شونده ، می توانید برای دیدن سرور مجازی بهlocalhost  در پورت مناسب بروید.

مرحله 5 – به اشتراک گذاری ترمینال
ممکن است دلیلی وجود داشته باشد که بخواهید دستورات ترمینال را به فردی آموزش دهید ، مانند نحوه پیمایش فایل سیستم ، کار با npm ، راه اندازی سرور مجازی dev خود و غیره. همانند ویژگی های فوق ، ممکن است این کار از راه دور پیچیده باشد. Live Share همچنین یک ویژگی اشتراک گذاری پایانه برای حل این مشکل دارد.
اشتراک گذاری ترمینال شبیه به اشتراک گذاری سرور مجازی شماست. مشابه سایر ویژگی ها ، گزینه Share Terminal را انتخاب کنید. پس از آن ، بین مجوز read only یا read/write برای همکاران یکی را انتخاب کنید.

پس از به اشتراک گذاری ترمینال ، همکاران می توانند ترمینال را مشاهده کرده و ویرایش کنند. تصویر زیر چیزی است که دعوت شونده بعد از ارسال پیام به نمایشگر توسط دعوت کننده، میبیند.

از اینجا ، همانطور که در بالا ذکر شد ، می توانید به دعوت شونده نحوه شروع یک سرور مجازی توسعه ، ساخت سیستم یا هر چیز دیگری که ممکن است مرتبط باشد را نشان دهید.
نتیجه
بسیاری از ویژگی های مفید دراین افزونه وجود دارند. با استفاده از ویژوال استودیو کد که به سرعت تبدیل به یک ویرایشگر مورد علاقه برای توسعه دهندگان وب شده است ، این افزونه به طور بالقوه شیوه آموزش ، راهنمایی ، همکاری ، رفع اشکال و غیره را تغییر می دهد.

 

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

استفاده از nsh برای دستورات از راه دور اوبونتو 18 –  میزبانی وب سایت با Caddy اوبونتو 18

تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو

تنظیم مسیریابی شرطی و پاسخگو با React Router v4  –  ایجاد یک URL کوتاه کننده با Django و GraphQL

یک برنامه ردیابی سلامت را با React ،GraphQL و Okta –  ساخت برنامه چت زمان حقیقی React و GraphQL

به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) –  با استفاده از React ، Superagent و API اینستاگرام

نحوه ساختن یک برنامه جهانی با Nuxt.js و Django –  دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه کردن عکسهای پیشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت

یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید  –  ساخت برنامه های وب پیشرونده با Angular

اشکال زدایی JavaScript در تولید با نقشه های منبع  –  می توان با Koa برنامه “سلام جهانی” ساخت

ساختن یک برنامه با Node ، React ، Okta  –   مدیریت حالت فرم در React با Redux Form

نحوه تنظیم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ویژوال استودیو از راه دور  –  احراز هویت API با JSON Web Tokens و Passport

راه اندازی یک پروژه React با Parcel  –  ایجاد Swiper مانند Netflix را در Vue

ساختن یک ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسکریپت

چگونه می توان موتور جستجوی زمان واقعی را با Vue  –  ساختن سیستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراک زنده با کد ویژوال استودیو  –  ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React

شروع عملی GraphQL با Node.js و Express  –  ساخت یک برنامه آب و هوا در Django

نحوه نصب Discourse روی Ubuntu 18  –  تأیید رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 

 

برچسب‌ها:

  • behnam gol mohamadi