آرشیو شهریور ماه 1399

ايجاد سرور مجازي

چگونه مي توان REST API را با Prisma و PostgreSQL ساخت

Prisma ، يك ابزار پايگاه داده منبع باز است. از سه ابزار اصلي تشكيل شده است:
Prisma Client: سازنده جستار خودكار و از نوع مطمئن براي Node.js و TypeScript.
Prisma Migrate: يك سيستم توصيفي انتقال و مدل سازي داده ها.
Prisma Studio: رابط كاربري گرافيكي براي مشاهده و ويرايش داده ها در پايگاه داده خود.
اين ابزارها با هدف افزايش بهره وري يك برنامه نويس در گردش كار در پايگاه داده خود ارائه مي شود. يكي از مهمترين مزاياي Prisma ميزان انتزاع ارائه شده است: به جاي فهميدن جستارهاي پيچيده SQL يا انتقال شماتيك ها ، توسعه دهندگان برنامه مي توانند هنگام استفاده از Prisma براي كار با پايگاه داده خود ، اطلاعات خود را به روشي بصري تر استدلال كنند.
در اين آموزش ، شما يك API REST براي يك برنامه بلاگ نويسي كوچك در TypeScript با استفاده از Prisma و يك پايگاه داده PostgreSQL ايجاد خواهيد كرد. پايگاه داده PostgreSQL را بصورت محلي با Docker تنظيم مي كنيد و مسيرهاي REST API را با استفاده از Express پياده سازي مي كنيد. در پايان آموزش ، يك وب سرور داريد كه بصورت محلي روي دستگاه شما كار مي كند كه مي تواند به درخواست هاي مختلف HTTP پاسخ دهد و داده ها را در ديتابيس بخواند و بنويسد.
پيش نيازها
اين آموزش موارد زير را فرض مي كند:
Node.js v10 يا بالاتر روي دستگاه شما نصب شده باشد. براي تنظيم اين گزينه مي توانيد از يكي از روش هاي نصب Node.js و ايجاد محيط توسعه محلي براي سيستم عامل خود استفاده كنيد.
Docker نصب شده بر روي دستگاه تان (براي اجراي پايگاه داده PostgreSQL) . مي توانيد از طريق وب سايت Docker آن را روي maغير مجاز مي باشد و Windows نصب كنيد ، يا نحوه نصب و استفاده از Docker را براي توزيع هاي لينوكس دنبال كنيد.
آشنايي اوليه با TypeScript و API هاي REST مفيد است اما براي اين آموزش لازم نيست.
مرحله 1 – ايجاد پروژه TypeScript
در اين مرحله با استفاده از npm يك پروژه ساده TypeScript تنظيم مي كنيد. اين پروژه پايه و اساس API REST است كه مي خواهيد در طول دوره اين آموزش بسازيد.
ابتدا يك دايركتوري جديد براي پروژه خود ايجاد كنيد:
$ mkdir my-blog

در مرحله بعد ، به ديركتوري برويد و يك پروژه npm خالي را آغاز كنيد. توجه داشته باشيد كه گزينه -y در اينجا بدان معني است كه شما از گزينه هاي تعاملي فرمان عبور ميكنيد. براي اجراي دستورها ، -y را از دستور حذف كنيد:
$ cd my-blog

$ npm init -y

براي اطلاعات بيشتر در مورد اين پيام ها ، مي توانيد مرحله 1 نحوه استفاده از ماژول هاي Node.js را با npm و pack.json دنبال كنيد.
با پاسخهاي پيش فرض موجود ، خروجي مشابه موارد زير را دريافت خواهيد كرد:
Output
Wrote to /…/my-blog/package.json:

{
“name”: “my-blog”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“test”: “echo ”Error: no test specified” && exit 1″
},
“keywords”: [],
“author”: “”,
“license”: “ISC”
}

اين دستور يك فايل pack.json حداقلي ايجاد مي كند كه شما به عنوان فايل پيكربندي پروژه npm خود استفاده مي كنيد. اكنون آماده تنظيم پيكربندي TypeScript در پروژه خود هستيد.
دستور زير را براي ستاپ ساده TypeScript اجرا كنيد:
npm install typescript ts-node @types/node –save-dev

اين دستور، سه بسته به عنوان متعلقات توسعه در پروژه شما نصب مي كند:
Typescript: زنجيره ابزار TypeScript.
ts-node: بسته اي براي اجراي برنامه هاي TypeScript بدون كامپايل قبلي با JavaScript
@ types / node: تعاريف نوع TypeScript براي Node.js.
آخرين كاري كه بايد انجام دهيد اضافه كردن فايل tsconfig.json است تا اطمينان حاصل شود كه TypeScript به درستي براي برنامه اي كه مي خواهيد بسازيد پيكربندي شده است.
ابتدا ، دستور زير را براي ايجاد فايل اجرا كنيد:
$ nano tsconfig.json

كد JSON زير را در فايل اضافه كنيد:
my-blog/tsconfig.json
{
“compilerOptions”: {
“sourceMap”: true,
“outDir”: “dist”,
“strict”: true,
“lib”: [“esnext”],
“esModuleInterop”: true
}
}

فايل را ذخيره و از آن خارج شويد.
اين يك پيكربندي استاندارد و حداقل براي يك پروژه TypeScript است. اگر مي خواهيد در مورد خصوصيات فردي فايل پيكربندي بياموزيد ، مي توانيد آنها را در مستندات TypeScript جستجو كنيد.
شما پروژه ساده TypeScript خود را با استفاده از npm تنظيم كرده ايد. سپس پايگاه داده PostgreSQL خود را با Docker تنظيم مي كنيد و Prisma را به آن وصل مي كنيد.
مرحله 2 – تنظيم Prisma با PostgreSQL
در اين مرحله Prisma CLI را نصب مي كنيد ، فايل شماتيك اوليه Prisma خود را ايجاد كرده و PostgreSQL را با Docker تنظيم مي كنيد و Prisma را به آن وصل مي كنيد. شماتيك Prism فايل پيكربندي اصلي براي تنظيم Prisma شما است و شامل شماتيك پايگاه داده شما ميباشد.
با نصب دستور Prisma CLI با دستور زير شروع كنيد:
$ npm install @prisma/cli –save-dev

به عنوان بهترين روش ، توصيه مي شود كه Prisma CLI را بصورت محلي در پروژه خود نصب كنيد (برخلاف نصب جهاني). اين امر به شما كمك مي كند تا در صورت داشتن بيش از يك پروژه Prisma در دستگاه خود ، از تداخل نسخه ها جلوگيري كنيد.
در مرحله بعد ، پايگاه داده PostgreSQL خود را با استفاده از Docker تنظيم مي كنيد. با دستور زير يك فايل جديد Docker Compose ايجاد كنيد:
$ nano docker-compose.yml

اكنون كد زير را به فايل جديد ايجاد شده اضافه كنيد:
my-blog/docker-compose.yml
version: ‘3.8’
services:
postgres:
image: postgres:10.3
restart: always
environment:
– POSTGRES_USER=sammy
– POSTGRES_PASSWORD=your_password
volumes:
– postgres:/var/lib/postgresql/data
ports:
– ‘5432:5432’
volumes:
postgres:

اين فايل Docker Compose يك پايگاه داده PostgreSQL را تنظيم مي كند كه از طريق پورت 5432 كانتينر Docker قابل دسترسي است. همچنين توجه داشته باشيد كه اعتبارنامه ديتابيس در حال حاضر به عنوان sammy (كاربر) و your_password (رمز عبور) تعيين شده است. در تنظيم اين اعتبارها با كاربر و رمز عبور دلخواه خود اختيارعمل كامل داريد. فايل را ذخيره كنيد و از آن خارج شويد.
با استفاده از اين ستاپ، سرور پايگاه داده PostgreSQL را با دستور زير راه اندازي كنيد:
$ docker-compose up -d

خروجي اين دستور مشابه اين است:
Output
Pulling postgres (postgres:10.3)…
10.3: Pulling from library/postgres
f2aa67a397c4: Pull complete
6de83ca23e55: Pull complete
. . .
Status: Downloaded newer image for postgres:10.3
Creating my-blog_postgres_1 … done

با دستور زير مي توانيد تأييد كنيد كه سرور پايگاه داده در حال اجرا است:
$ docker ps

اين چيزي شبيه به اين نتيجه خواهد داد:
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8547f8e007ba postgres:10.3 “docker-entrypoint.s…” 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp my-blog_postgres_1

با اجراي سرور پايگاه داده ، اكنون مي توانيد ستاپ Prisma خود را ايجاد كنيد. دستور زير را از Prisma CLI اجرا كنيد:
با اين كار خروجي زير چاپ مي شود:
$ npx prisma init

خروجي زير را پرينت ميكند:
Output
✔ Your Prisma schema was created at prisma/schema.prisma.
You can now open it in your favorite editor.

توجه داشته باشيد كه به عنوان بهترين كار ، بايد تمام فراخواني هاي Prisma CLI را با npxپيشونددار كنيد. اين كار اطمينان حاصل مي كند نصب محلي شما در حال استفاده است.
پس از اجراي فرمان ، Prisma CLI يك پوشه جديد به نام prisma را در پروژه شما ايجاد كرد. اين شامل دو فايل زير است:
schema.prisma: فايل اصلي پيكربندي پروژه Prisma شما (شامل مدل داده شما خواهد بود(.
.env: يك فايل dotenv براي مشخص كردن URL اتصال به پايگاه داده خود.
براي اطمينان از اينكه Prisma از مكان پايگاه داده شما اطلاع دارد ، فايل .env را باز كنيد و متغير محيط DATABASE_URL را تنظيم كنيد.
ابتدا فايل .env را باز كنيد:
$ nano prisma/.env

اكنون مي توانيد متغير محيط را به شرح زير تنظيم كنيد:
my-blog/prisma/.env
DATABASE_URL=”postgresql://sammy:your_password@localhost:5432/my-blog?schema=public”

اطمينان حاصل كنيد كه اعتبار ديتابيس را به مواردي كه در فايل Docker Compose معرفي كرده ايد تغيير دهيد. براي كسب اطلاعات بيشتر در مورد قالب URL اتصال ، به اسناد Prisma مراجعه كنيد.
پس از اتمام كار ، فايل را ذخيره كنيد و خارج شويد.
در اين مرحله ، پايگاه داده PostgreSQL خود را با Docker تنظيم كرده ، Prisma CLI را نصب كرده و Prisma را از طريق يك متغير محيط به پايگاه داده وصل مي كنيد. در بخش بعدي ، مدل داده خود را تعيين كرده و جداول بانك اطلاعاتي خود را ايجاد خواهيد كرد.
مرحله 3 – تعريف مدل داده خود و ايجاد جداول بانك اطلاعاتي
در اين مرحله مدل داده خود را در فايل شماتيك Prisma تعريف خواهيد كرد. سپس اين مدل داده با Prisma Migrate به پايگاه داده نگاشت مي شود كه عبارت SQL را براي ايجاد جداول متناسب با مدل داده شما توليد و ارسال مي كند. از آنجا كه شما در حال ايجاد يك برنامه وبلاگ نويسي هستيد ، ماهيت هاي اصلي برنامه، كاربران و پستها خواهند بود.
Prisma از زبان مدل سازي داده خود استفاده مي كند تا شكل داده هاي برنامه شما را تعريف كند.
ابتدا فايل schema.prisma خود را با دستور زير باز كنيد:
$ nano prisma/schema.prisma

حالا تعاريف مدل زير را به آن اضافه كنيد. شما مي توانيد مدل ها را در پايين فايل ، درست پس از بلوك generator clientقرار دهيد:
my-blog/prisma/schema.prisma
. . .
model User {
id Int @default(autoincrement()) @id
email String @unique
name String?
posts Post[]
}

model Post {
id Int @default(autoincrement()) @id
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}

فايل را ذخيره كنيد و از آن خارج شويد.
شما در حال تعريف دو مدل به نام هاي كاربر و پست هستيد. هر يك از اين موارد داراي تعدادي فيلد است كه نشان دهنده ويژگي هاي مدل است. مدل ها در جداول بانك اطلاعاتي نگاشت مي شوند. فيلد ها ستون هاي فردي را نشان مي دهند.
همچنين توجه داشته باشيد كه بين اين دو مدل رابطه يك به يك وجود دارد ، كه توسط فيلدهاي رابطه اي posts  و author  در User  و Post مشخص شده است. اين بدان معني است كه يك كاربر مي تواند با بسياري از پست ها در ارتباط باشد.
با استفاده از اين مدل ها ، اكنون مي توانيد جداول مربوطه را با استفاده از Prisma Migrate در ديتابيس ايجاد كنيد. در ترمينال خود دستور زير را اجرا كنيد:
$ npx prisma migrate save –experimental –create-db –name “init”

اين دستور يك تغيير جديد در سيستم فايل شما ايجاد مي كند. در اينجا يك مرور اجمالي از سه گزينه ارائه شده به اين دستور آمده است:
–experimental: الزامي است زيرا Prisma Migrateدر حال حاضر در حالت آزمايشي قرار دارد.
–create-db: Prisma Migrate را قادر مي سازد تا پايگاه داده اي را با نام وبلاگ من ايجاد كند كه در URL اتصال مشخص شده است.
–name “init”: انتقال را مشخص مي كند (براي نامگذاري پوشه جا به جايي ايجاد شده در سيستم فايل شما استفاده خواهد شد).
خروجي اين دستور مشابه اين است:
Output
New datamodel:

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

datasource db {
provider = “postgresql”
url = env(“DATABASE_URL”)
}

generator client {
provider = “prisma-client-js”
}

model User {
id Int @default(autoincrement()) @id
email String @unique
name String?
posts Post[]
}

model Post {
id Int @default(autoincrement()) @id
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}

Prisma Migrate just created your migration 20200811140708-init in

migrations/
└─ 20200811140708-init/
└─ steps.json
└─ schema.prisma
└─ README.md

در جتجوي فايل هاي migration كه در ديركتوري prisma/migrations ايجاد شده اند ، آزادانه عمل كنيد.
براي اجراي جابه جايي در برابر پايگاه داده خود و ايجاد جداول براي مدل هاي Prisma ، دستور زير را در ترمينال خود اجرا كنيد:
$ npx prisma migrate up –experimental

خروجي زير را دريافت خواهيد كرد:
Output
. . .
Checking the datasource for potential data loss…

Database Changes:

Migration Database actions Status

20200811140708-init 2 CreateTable statements. Done ????

You can get the detailed db changes with prisma migrate up –experimental –verbose
Or read about them here:
./migrations/20200811140708-init/README.md

???? Done with 1 migration in 206ms.

اكنون Prisma Migrate عبارات SQL را كه براي جابه جايي لازم است توليد مي كند و آنها را به پايگاه داده مي فرستد. موارد زير عبارات SQL است كه جدول ها را ايجاد كرده است:
CREATE TABLE “public”.”User” (
“id” SERIAL,
“email” text NOT NULL ,
“name” text ,
PRIMARY KEY (“id”)
)

CREATE TABLE “public”.”Post” (
“id” SERIAL,
“title” text NOT NULL ,
“content” text ,
“published” boolean NOT NULL DEFAULT false,
“authorId” integer ,
PRIMARY KEY (“id”)
)

CREATE UNIQUE INDEX “User.email” ON “public”.”User”(“email”)

ALTER TABLE “public”.”Post” ADD FOREIGN KEY (“authorId”)REFERENCES “public”.”User”(“id”) ON DELETE SET NULL ON UPDATE CASCADE

در اين مرحله شما مدل داده خود را در شماي Prisma خود تعريف كرده و جداول پايگاه داده هاي مربوطه را با Prisma Migrate ايجاد كرده ايد. در مرحله بعد ، Prisma Client را در پروژه خود نصب خواهيد كرد تا بتوانيد از پايگاه داده پرس و جو كنيد.
مرحله چهارم – كاوش در مورد جستارهاي كلاينت Prisma در يك اسكريپت ساده
Prisma Client يك سازنده جستار خودكار ايجاد شده و از نوع مطمئن است كه مي توانيد با استفاده از برنامه هاي Node.js يا TypeScript ، داده ها را در يك پايگاه داده بخوانيد و بنويسيد. شما مي توانيد از آن براي دسترسي به بانك اطلاعاتي در مسيرهاي REST API خود ، جايگزين كردن ORM هاي معمول ، جستارهاي ساده SQL ، لايه هاي دسترسي به داده هاي سفارشي يا هر روش ديگري براي صحبت با يك پايگاه داده استفاده كنيد.
در اين مرحله Prisma Client را نصب مي كنيد و با جستارهايي كه مي توانيد با آن ارسال كنيد آشنا مي شويد. قبل از اجراي مسيرهاي API REST در مراحل بعدي ، ابتدا برخي از جستارهاي Prisma را با يك اسكريپت ساده و اجرايي جستجو خواهيد كرد.
ابتدا پيش برويد و با باز كردن ترمينال خود و نصب بسته npm Prisma Client در پروژه خود ، Prisma Client را در پروژه خود نصب كنيد:
npm install @prisma/client

سپس ، دايركتوري جديدي بنام src ايجاد كنيد كه شامل فايل هاي منبع شما باشد:
mkdir src

اكنون يك فايل TypeScript را در داخل ديركتوري جديد ايجاد كنيد:
nano src/index.ts

كليه جستارهاي Prisma Client ، عباراتي را برميگرداند كه مي توانيد در كد خود await  كنيد. اين امر نياز دارد كه شما جستارها را درون يك تابع async ارسال كنيد.
boilerplate زير را با يك تابع async كه در اسكريپت شما اجرا شده است اضافه كنيد:
my-blog/src/index.ts
import { PrismaClient } from ‘@prisma/client’

const prisma = new PrismaClient()

async function main() {
// … your Prisma Client queries will go here
}

main()
.catch((e) => console.error(e))
.finally(async () => await prisma.disconnect())

در اينجا مرور مختصري بر boilerplate آورده شده است:
1- سازنده PrismaClient را از بسته npm @prisma/client كه قبلاً نصب شده بود ، وارد كنيد.
2- با تماس با سازنده ، و دريافت نمونه اي به نام prisma ؛ PrismaClient را معرفي مي كنيد.
3- يك تابع async  به نام main  تعريف مي كنيد كه در مرحله بعدي جستارهايPrisma Client خود را اضافه خواهيد كرد.
4-تابع main  را فراخواني مي كنيد ، در حالي كه مي توانيد هر استثناء بالقوه را بدست آوريد و اطمينان حاصل كنيد كه Prisma Client با فراخواني prisma.disconnect () اتصالهاي پايگاه داده باز را ميبندد.
با وجود تابع main  ، مي توانيد جستارهاي Prisma Client را به اسكريپت اضافه كنيد. index.ts را تنظيم كنيد تا به شرح زير باشد:
my-blog/src/index.ts
import { PrismaClient } from ‘@prisma/client’

const prisma = new PrismaClient()

async function main() {
const newUser = await prisma.user.create({
data: {
name: ‘Alice’,
email: ‘alice@prisma.io’,
posts: {
create: {
title: ‘Hello World’,
},
},
},
})
console.log(‘Created new user: ‘, newUser)

const allUsers = await prisma.user.findMany({
include: { posts: true },
})
console.log(‘All users: ‘)
console.dir(allUsers, { depth: null })
}

main()
.catch((e) => console.error(e))
.finally(async () => await prisma.disconnect())

در اين كد ، شما از دو جستار Prisma Client استفاده مي كنيد:
create: يك ركورد كاربر جديد ايجاد مي كند. توجه كنيد كه شما در واقع از نوشتن تودرتو استفاده مي كنيد ، به اين معني كه شما يك ركورد كاربر و پست را در همان جستار ايجاد مي كنيد.
findMany: تمام ركوردهاي كاربر موجود را از پايگاه داده مي خواند. شما گزينه include را داريد كه علاوه بر آن ركورد Post مربوط را براي هر ركورد كاربر را بارگذاري مي كند.
اكنون اسكريپت را با دستور زير اجرا كنيد:
$ npx ts-node src/index.ts

خروجي زير را در ترمينال خود دريافت خواهيد كرد:
Output
Created new user: { id: 1, email: ‘alice@prisma.io’, name: ‘Alice’ }
[
{
id: 1,
email: ‘alice@prisma.io’,
name: ‘Alice’,
posts: [
{
id: 1,
title: ‘Hello World’,
content: null,
published: false,
authorId: 1
}
]
}

توجه: اگر از يك رابط كاربري گرافيكي ديتابيس استفاده مي كنيد ، مي توانيد با نگاه كردن به جداول كاربر و پست ، تأييد كنيد كه داده ها ايجاد شده اند. از طرف ديگر ، مي توانيد داده هاي موجود در استوديوي Prisma را با اجراي npx prisma studio –experimental پيدا كنيد.
اكنون از Prisma Client براي خواندن و نوشتن داده در پايگاه داده خود استفاده كرده ايد. در مراحل باقيمانده ، از دانش جديد براي اجراي مسيرهاي مربوط به نمونه REST API استفاده خواهيد كرد.
مرحله 5 – اجراي اولين مسير API REST شما
در اين مرحله ، Express را در برنامه خود نصب خواهيد كرد. Express يك چارچوب وب محبوب براي Node.js است كه شما براي اجراي مسيرهاي REST API خود در اين پروژه استفاده خواهيد كرد. اولين مسيري كه پياده سازي خواهيد كرد به شما امكان مي دهد تا با استفاده از يك درخواست GET ، كليه كاربران را از API منتقل كنيد. داده هاي كاربر با استفاده از Prisma Client از بانك اطلاعاتي بازيابي مي شوند.
پيش برويد و Express را با دستور زير نصب كنيد:
$ npm install express

از آنجا كه از TypeScript استفاده مي كنيد ، بهتر است انواع مربوطه را نيز به عنوان متعلقات توسعه نصب كنيد. دستور زير را براي اين كار اجرا كنيد:
$ npm install @types/express –save-dev

با متعلقات موجود ، مي توانيد برنامه Express خود را تنظيم كنيد.
دوباره با باز كردن فايل منبع اصلي خود شروع كنيد:
$ nano src/index.ts

اكنون تمام كد هاي موجود در index.ts را پاك كرده و آن را با موارد زير جايگزين كنيد تا REST API خود را شروع كنيد:
my-blog/src/index.ts
import { PrismaClient } from ‘@prisma/client’
import express from ‘express’

const prisma = new PrismaClient()
const app = express()

app.use(express.json())

// … your REST API routes will go here

app.listen(3000, () =>
console.log(‘REST API server ready at: http://localhost:3000’),
)

در اينجا خلاصه اي از كد توضيح داده شده است:
1- شما PrismaClient و express را از بسته هاي npm مربوطه وارد مي كنيد.
2- با تماس با سازنده ، PrismaClient را معرفي مي كنيد و نمونه اي به نام prisma را دريافت مي آوريد.
3- با تماس با Express () برنامه Express خود را ايجاد مي كنيد.
4- مي توانيد واسط Express.json () را براي اطمينان از پردازش صحيح داده هاي JSON توسط Express ، اضافه كنيد.
5- سرور را از پورت 3000 شروع مي كنيد.
اكنون مي توانيد اولين مسير خود را پياده كنيد. در بين تماس هاي app.use و app.listen ، كد زير را اضافه كنيد:
my-blog/src/index.ts
. . .
app.use(express.json())

app.get(‘/users’, async (req, res) => {
const users = await prisma.user.findMany()
res.json(users)
})

app.listen(3000, () =>
console.log(‘REST API server ready at: http://localhost:3000’),
)

پس از افزودن ، فايل خود را ذخيره كنيد و از آن خارج شويد. سپس سرور وب محلي خود را با استفاده از دستور زير شروع كنيد:
$ npx ts-node src/index.ts

خروجي زير را دريافت خواهيد كرد:
Output
REST API server ready at: http://localhost:3000

براي دسترسي به مسير /users مي توانيد مرورگر خود را به آدرس http: // localhost: 3000 / كاربر يا هر كلاينت HTTP ديگري هدايت كنيد.
در اين آموزش ، تمام مسيرهاي REST API را با استفاده از Curl ، يك كلاينت HTTP مبتني بر ترمينال ، تست خواهيد كرد.
توجه: اگر ترجيح مي دهيد از يك سرويس دهنده HTTP مبتني بر GUI استفاده كنيد ، مي توانيد از گزينه هاي ديگري مانند Postwoman يا Advanced REST Client استفاده كنيد.
براي آزمايش مسير خود ، يك پنجره يا تب ترمينال جديد باز كنيد (به اين ترتيب كه وب سرور محلي شما قادر به اجراي آن باشد) و دستور زير را اجرا كنيد:
$ curl http://localhost:3000/users

داده هاي كاربري را كه در مرحله قبل ايجاد كرده ايد دريافت خواهيد كرد:
Output
[{“id”:1,”email”:”alice@prisma.io”,”name”:”Alice”}]

توجه داشته باشيد كه اين بار آرايه posts  گنجانده نشده است. اين امر به اين دليل است كه شما در اجراي مسير /users گزينه include را به تماس findMany منتقل نمي كنيد.
شما اولين مسير REST API خود را در /usersپياده سازي كرده ايد. در مرحله بعدي مسيرهاي باقيمانده API را براي اضافه كردن قابليت هاي بيشتر به API خود پياده سازي خواهيد كرد.
مرحله 6 – اجراي مسيرهاي باقيمانده REST API
در اين مرحله مسيرهاي باقيمانده API را براي برنامه وبلاگ نويسي خود پياده سازي خواهيد كرد. در پايان ، سرور وب شما درخواست هاي مختلف GET ، POST ، PUT و DELETE را ارائه مي دهد.
در اينجا مروري بر مسيرهاي مختلفي كه اجرا خواهيد كرد:
HTTP Method مسير توصيف
GET /feed تمام پست هاي منتشر شده را ميگيرد
GET /post/:id پست خاصي را با IDميگيرد
POST /user كاربر جديد ايجاد ميكند
POST /post پست جديد ايجاد ميكند (به عنوان پيش نويس)
PUT /post/publish/:id فيلد published  را روي true قرار ميدهد
DELETE post/:id پستي را بر جسب ID حذف ميكند

پيش برويد و ابتدا مسيرهاي GET باقيمانده را پياده سازي كنيد.
index.ts را با دستور زير باز كنيد:
$ nano src/index.ts

سپس ، بعد از اجراي مسير /users، كد زير را اضافه كنيد:
my-blog/src/index.ts
. . .

app.get(‘/feed’, async (req, res) => {
const posts = await prisma.post.findMany({
where: { published: true },
include: { author: true }
})
res.json(posts)
})

app.get(`/post/:id`, async (req, res) => {
const { id } = req.params
const post = await prisma.post.findOne({
where: { id: Number(id) },
})
res.json(post)
})

app.listen(3000, () =>
console.log(‘REST API server ready at: http://localhost:3000’),
)

فايل خود را ذخيره كنيد و از آن خارج شويد.
اين كد مسيرهاي API را براي دو درخواست GET پياده سازي مي كند:
/ feed: ليستي از پستهاي منتشر شده را برمي گرداند.
/ post /: id: يك پست خاص را با شناسه خود برمي گرداند.
Prisma Client در هر دو پياده سازي استفاده مي شود. در اجراي مسير /feed، جستار شما كه با فيلترهاي Prisma Client براي همه سوابق پست مي كنيد و در آن ستون published  شامل مقدار واقعي است. علاوه بر اين ، جستارهاي مربوط به Prisma Client شامل اطلاعات author مربوطه براي هر پست برگشتي نيز مي باشد. در اجراي مسير / post /: id ، مي توانيد شناسه اي را كه از مسير URL بازيابي مي شود براي خواندن يك ركورد ارسال خاص از پايگاه داده در حال عبور هستيد.
مي توانيد CTRL + C را در صفحه كيبورد خود بزنيد و سرور را متوقف كنيد. سپس ، سرور را با استفاده از دستور زير ريستارت كنيد:
$ npx ts-node src/index.ts

براي تست مسير /feed، مي توانيد از دستور curl زير استفاده كنيد:
$ curl http://localhost:3000/feed

از آنجا كه هنوز هيچ پستي منتشر نشده است ، اين پاسخ ارايه خالي به همراه دارد:
Output
[]
براي بررسي مسير /post/:id ميتوانيد از دستور زير استفاده كنيد:
$ curl http://localhost:3000/post/1

پستي كه ابتدا ايجاد كرده ايد را برميگرداند:
Output
{“id”:1,”title”:”Hello World”,”content”:null,”published”:false,”authorId”:1}

سپس دو مسير post را اجرا كنيد. كد زير را به index.ts پس از پياده سازي مسير GET اضافه كنيد
my-blog/src/index.ts
. . .

app.post(`/user`, async (req, res) => {
const result = await prisma.user.create({
data: { …req.body },
})
res.json(result)
})

app.post(`/post`, async (req, res) => {
const { title, content, authorEmail } = req.body
const result = await prisma.post.create({
data: {
title,
content,
published: false,
author: { connect: { email: authorEmail } },
},
})
res.json(result)
})

app.listen(3000, () =>
console.log(‘REST API server ready at: http://localhost:3000’),
)
پس از اتمام كار ، پرونده خود را ذخيره كنيد و خارج شويد.
اين كد مسيرهاي API را براي دو درخواست POST پياده سازي مي كند:
/ user: كاربر جديدي را در ديتابيس ايجاد مي كند.
/ post: يك پست جديد در بانك اطلاعاتي ايجاد مي كند.
مانند قبل ، Prisma Client در هر دو پياده سازي استفاده مي شود. در اجراي مسير /user، مقادير را از بدنه درخواست HTTP به جستار create  در Prisma Client منتقل مي كنيد.
مسير /post كمي بيشتر درگير است: در اينجا نمي توانيد مقادير را مستقيماً از بدنه درخواست HTTP عبور دهيد. در عوض ، ابتدا بايد آنها را به صورت دستي استخراج كنيد تا آنها را به جستار Prisma Client منتقل كنيد. دليل اين امر اين است كه ساختار JSON در بدنه درخواست با ساختار مورد انتظار Prisma Client مطابقت ندارد ، بنابراين بايد ساختار مورد نظر را بصورت دستي ايجاد كنيد.
با متوقف كردن سرور با CTRL + C مي توانيد مسيرهاي جديد را آزمايش كنيد. سپس ، سرور را با استفاده از دستور زير ريستارت كنيد:
$ npx ts-node src/index.ts

براي ايجاد يك كاربر جديد از طريق مسير /user، مي توانيد درخواست POST زير را با استفاده از curlارسال كنيد:
$ curl -X POST -H “Content-Type: application/json” -d ‘{“name”:”Bob”, “email”:”bob@prisma.io”}’ http://localhost:3000/user

با اين كار كاربر جديدي در ديتابيس ايجاد مي شود و خروجي زير را چاپ مي كند:
Output
{“id”:2,”email”:”bob@prisma.io”,”name”:”Bob”}

براي ايجاد يك پست جديد از طريق مسير /post، مي توانيد درخواست POST  زير را با curl ارسال كنيد:
$ curl -X POST -H “Content-Type: application/json” -d ‘{“title”:”I am Bob”, “authorEmail”:”bob@prisma.io”}’ http://localhost:3000/post

با اين كار پست جديدي در ديتابيس ايجاد شده و با ايميل bob@prisma.io به كاربر وصل مي شود. خروجي زير را چاپ مي كند:
Output
{“id”:2,”title”:”I am Bob”,”content”:null,”published”:false,”authorId”:2}

سرانجام مي توانيد مسيرهاي PUT و DELETE را پياده سازي كنيد.
index.ts را با دستور زير باز كنيد:
$ nano src/index.ts

در مرحله بعد ، پس از اجراي دو مسير POST ، كد هايلايت شده را اضافه كنيد:
my-blog/src/index.ts
. . .

app.put(‘/post/publish/:id’, async (req, res) => {
const { id } = req.params
const post = await prisma.post.update({
where: { id: Number(id) },
data: { published: true },
})
res.json(post)
})

app.delete(`/post/:id`, async (req, res) => {
const { id } = req.params
const post = await prisma.post.delete({
where: { id: Number(id) },
})
res.json(post)
})

app.listen(3000, () =>
console.log(‘REST API server ready at: http://localhost:3000’),
)

فايل خود را ذخيره كنيد و از آن خارج شويد.
اين كد مسيرهاي API را براي يك PUT و يك درخواست DELETE پياده سازي مي كند:
/post/publish/:id (PUT): پستي را با شناسه اش منتشر مي كند.
/post/:id (DELETE): پستي را با شناسه آن حذف مي كند.
باز هم ، Prisma Client در هر دو پياده سازي استفاده مي شود. در اجراي /post/publish/:id ، شناسه پستي كه بايد منتشر شود از URL برداشته مي شود و به جستار به روزرساني Prisma Client منتقل مي شود. اجراي مسير / post /: id براي پاك كردن يك پست در ديتابيس نيز شناسه پست را از URL باز مي گيرد و آن را به درخواست حذف Prisma Client منتقل مي كند.
دوباره ، سرور را با CTRL + C در صفحه كليد خود متوقف كنيد. سپس ، سرور را با استفاده از دستور زير ريستارت كنيد:
$ npx ts-node src/index.ts

مي توانيد مسير PUT را با دستور curl زير آزمايش كنيد:
$ curl -X PUT http://localhost:3000/post/publish/2

اين دستور پست را با شناسه برابر با 2 منتشر ميكند. در صورت ارسال درخواست /feed، اين پست در پاسخ گنجانده مي شود.
در آخر ، مي توانيد مسير DELETE را با دستور curl زير آزمايش كنيد:
$ curl -X DELETE http://localhost:3000/post/1

اين دستور پست با شناسه ID 1 را حذف ميكند. براي تأييد اينكه پست با اين شناسه حذف شده است ، مي توانيد يك درخواست GET را به مسير / post / 1 ارسال كنيد.
در اين مرحله ، شما مسيرهاي باقي مانده REST API را براي برنامه وبلاگ نويسي خود پياده سازي كرده ايد. API اكنون به درخواستهاي مختلف GET ، POST ، PUT و DELETE پاسخ مي دهد و عملكردي را براي خواندن و نوشتن داده ها در بانك اطلاعاتي پياده سازي مي كند.
نتيجه
در اين مقاله ، شما يك سرور API REST ايجاد كرده ايد كه داراي چندين مسير مختلف براي ايجاد ، خواندن ، به روزرساني و حذف داده هاي كاربر و ارسال يك برنامه وبلاگ نويسي نمونه است. در داخل مسيرهاي API ، شما در حال استفاده از Prisma Client براي ارسال جستارهاي مربوطه به پايگاه داده خود هستيد.
به عنوان مرحله بعدي ، مي توانيد مسيرهاي API اضافي را پياده سازي كنيد يا طرح پايگاه داده خود را با استفاده از Prisma Migrate گسترش دهيد. براي اطلاع از جوانب مختلف Prisma ، به اسناد Prisma مراجعه كرده و برخي از پروژه هاي نمونه آماده را براي استفاده در مخزن نمونه هاي Prisma – با استفاده از ابزارهايي مانند GraphQL يا APP هاي grPC جستجو كنيد.

 

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

نحوه مديريت چندين سرور با دستورات Ad Hoc Ansible

Ansible ابزاري مدرن براي مديريت پيكربندي است كه كار تنظيم و نگهداري سرور محازي هاي از راه دور را تسهيل مي كند. با يك طراحي مينيماليستي كه قصد دارد كاربران را به روز كرده و به آنها سرعت ببخشد ، به شما اين امكان را مي دهد تا يك يا صدها سيستم را از يك مكان مركزي با playbook يا دستورات ad hoc كنترل كنيد.
بر خلاف playbook- كه شامل مجموعه كارهايي است كه مي توان از آنها استفاده مجدد كرد – دستورات ad hoc كارهايي هستند كه شما مرتباً آنها را انجام نمي دهيد ، مانند راه اندازي مجدد يك سرويس يا بازيابي اطلاعات در مورد سيستمهاي از راه دور كه قابل اعتماد نيستند.

در اين راهنما، ياد مي گيريد كه چگونه از دستورات ad hoc براي انجام كارهاي متداول مانند نصب بسته ها ، كپي كردن فايل ها ، و راه اندازي مجدد سرويس ها بر روي يك يا چند سرور محازي از راه دور ، از يك گره كنترل Ansible استفاده كنيد.

پيش نيازها
براي پيروي از اين راهنما ، به موارد زير نياز داريد:
• يك گره كنترل Ansible. اين راهنما فرض مي كند كه گره كنترل شما يك دستگاه اوبونتو 20.04 است كه Ansible روي آن نصب و پيكربندي شده است تا با استفاده از كليدهاي SSH به ميزبان هاي Ansible شما متصل شود. اطمينان حاصل كنيد كه گره كنترل داراي يك كاربر معمولي با مجوزهاي sudo است و فايروال را نيز فعال كرده است ، همانطور كه در راهنماي ستاپ اوليه سرور محازي توضيح داده شده است. براي راه اندازي Ansible ، لطفا راهنماي ما در مورد نحوه نصب و پيكربندي Ansible در اوبونتو 20.04 را دنبال كنيد.
• دو يا چند ميزبان Ansible. ميزبان Ansible هر دستگاهي است كه گره كنترل Ansible شما براي خودكار سازي پيكربندي شده باشد. اين راهنما فرض مي كند كه ميزبان هاي Ansible شما سرور محازي هاي Ubuntu 20.04 از راه دور هستند. اطمينان حاصل كنيد كه هر ميزبان Ansible داراي موارد زير است:
o كليد عمومي SSH گره كنترل Ansible به كليدهاي مجاز كاربر كاربر اضافه شده باشد. اين كاربر مي تواند root يا يك كاربر معمولي با امتيازات sudo باشد. براي تنظيم اين گزينه ، مي توانيد مرحله 2 راهنماي نحوه تنظيم كليدهاي SSH را در اوبونتو 20.04 دنبال كنيد.
• يك فايل inventory بر روي گره كنترل Ansible تنظيم شده باشد. اطمينان حاصل كنيد كه يك فايل inventory در آن وجود دارد كه شامل همه ميزبان هاي Ansible باشد. براي انجام اين كار ، لطفاً به راهنماي چگونگي تنظيم موجودي هاي Ansible مراجعه كنيد. سپس مطمئن شويد كه با اجراي تست اتصال مشخص شده در بخش تست اتصال به ميزبان هاي Ansible ، مي توانيد به گره هاي خود متصل شويد.

آزمايش اتصال به هاست هاي Ansible
دستور زير اتصال بين گره كنترل Ansible و تمام ميزبان هاي Ansible شما را آزمايش مي كند. اين دستور از كاربر سيستم فعلي و كليد SSH مربوطه آن به عنوان ورود از راه دور استفاده مي كند و گزينه -m را نيز شامل مي شود ، كه به Ansible مي گويد ماژول ping را اجرا كنيد. همچنين داراي پرچم -i است كه به Ansible ميگويد ميزبان هاي موجود در فايل inventory مشخص شده را ping كند.
$ ansible all -i inventory -m ping

اگر اولين بار است كه از طريق SSH به اين سرور محازي ها وصل مي شويد ، از شما خواسته مي شود كه صحت ميزبان هايي را كه از طريق Ansible به آنها وصل مي شويد ، تأييد كنيد. وقتي از شما خواسته شد ، yes را تايپ كنيد و سپس براي تأييد ENTER را بزنيد.
بايد خروجي مشابه اين دريافت كنيد:
Output
server1 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
server2 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}

هنگامي كه يك پاسخ “pong” را از هاست دريافت كرديد ، بدان معني است كه ارتباط زنده است و شما آماده اجراي دستورات Ansible در آن سرور محازي هستيد.

تنظيم گزينه هاي اتصال
به طور پيش فرض ، Ansible سعي دارد با استفاده از صفحه كليد SSH مربوطه ، به عنوان كاربر از راه دور با همان نام كاربري سيستم فعلي شما ، به گره ها متصل شود.
براي اتصال به عنوان يك كاربر از راه دور متفاوت ، فرمان را با پرچم -u و نام كاربر در نظر گرفته شده اضافه كنيد:
$ ansible all -i inventory -m ping -u sammy

اگر از يك كليد SSH سفارشي براي اتصال به سرور محازي هاي از راه دور استفاده مي كنيد ، مي توانيد آن را در زمان اجرا با گزينه –private-key ارائه دهيد:
$ ansible all -i inventory -m ping –private-key=~/.ssh/custom_id

توجه: براي كسب اطلاعات بيشتر در مورد نحوه اتصال به گره ها ، لطفاً به راهنماي نحوه استفاده از Ansible ما مراجعه كنيد ، كه گزينه هاي اتصال بيشتري را نشان مي دهد.

هنگامي كه مي توانيد با استفاده از گزينه هاي مناسب اتصال برقرار كنيد ، مي توانيد فايل inventory خود را تنظيم كنيد تا به صورت خودكار كاربر از راه دور و كليد خصوصي خود را تنظيم كنيد ، تا تفاوتي با مقادير پيش فرض تعيين شده توسط Ansible نباشد. سپس ، لازم نيست آن پارامترها را در خط فرمان ارائه دهيد.
مثال فايل inventory زير متغير ansible_user را فقط براي سرور محازي server1 تنظيم مي كند:
~/ansible/inventory
server1 ansible_host=203.0.113.111 ansible_user=sammy
server2 ansible_host=203.0.113.112

Ansible اكنون هنگام اتصال به سرور محازي server1 از summy به عنوان كاربر پيش فرض از راه دور استفاده مي كند.
براي تنظيم كليد SSH سفارشي ، متغير ansible_ssh_private_key_file را به شرح زير وارد كنيد:
~/ansible/inventory
server1 ansible_host=203.0.113.111 ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id
server2 ansible_host=203.0.113.112

در هر دو مورد ، ما مقادير سفارشي را فقط براي server1 تنظيم كرده ايم. اگر مي خواهيد از همان تنظيمات براي چندين سرور محازي استفاده كنيد ، مي توانيد براي آن گروه child استفاده كنيد:
~/ansible/inventory
[group_a]
203.0.113.111
203.0.113.112

[group_b]
203.0.113.113

[group_a:vars]
ansible_user=sammy
ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id

اين پيكربندي مثال فقط يك كاربر سفارشي و كليد SSH را براي اتصال به سرور محازي هاي ذكر شده در group_a اختصاص مي دهد.

تعيين اهدافي براي اجراي فرمان
هنگام اجراي دستورات ad hoc با Ansible ، مي توانيد ميزبان هاي فردي و همچنين هر تركيبي از گروه ها ، هاست ها و زير گروه ها را هدف قرار دهيد. به عنوان مثال ، به ترتيب زير مي توانيد اتصال را براي هر ميزبان در يك گروه به نام سرور محازي ها بررسي كنيد:
$ ansible servers -i inventory -m ping

همچنين مي توانيد ميزبان ها و گروه هاي مختلفي را با جدا كردن آنها با ستون هايي مشخص كنيد:
$ ansible server1:server2:dbservers -i inventory -m ping

براي درج يك استثناء در يك الگو ، از علامت تعجب ، پيشوند با كاراكتر ، به شرح زير استفاده كنيد. اين دستور بر روي همه سرور محازي هاي گروه 1 اجرا مي شود ، به جز server2:
$ ansible group1:!server2 -i inventory -m ping

در صورت تمايل به اجراي يك دستور فقط بر روي سرور محازي هايي كه جزئي از گروه 1 و گروه 2 هستند ،
به عنوان مثال ، بايد از & استفاده كنيد. فراموش نكنيد كه پيشوند آن را يك كاراكتر قرار دهيد:
$ ansible group1:&group2 -i inventory -m ping

براي كسب اطلاعات بيشتر در مورد چگونگي استفاده از الگوها هنگام تعيين اهداف براي اجراي فرمان ، لطفاً به مرحله 5 راهنماي ما در مورد نحوه تنظيم موجودي هاي Ansible مراجعه كنيد.

اجراي ماژول هاي Ansible
ماژول هاي Ansible قطعاتي از كد هستند كه مي توانند از playbooks و همچنين از خط فرمان دريافت شوند تا مراحل اجرا روي گره هاي از راه دور را تسهيل كنند. مثالها شامل ماژول apt  ، براي مديريت بسته هاي سيستم در اوبونتو و ماژول user  است كه براي مديريت كاربران سيستم استفاده مي شود. دستور ping  مورد استفاده در سراسر اين راهنما نيز يك ماژول است كه به طور معمول براي تست اتصال از گره كنترل به هاست استفاده مي شود.
Ansible با مجموعه گسترده اي از ماژول هاي داخلي همراه است كه برخي از آنها به منظور فراهم آوردن قابليت هاي كامل ، نياز به نصب نرم افزار اضافي دارند. همچنين مي توانيد ماژول هاي دلخواه خود را با استفاده از زبان مورد نظر خود ايجاد كنيد.
براي اجراي يك ماژول با آرگومان ها ، پرچم -a را به همراه گزينه هاي مناسب در نقل قول اضافه كنيد ، مانند اين:
$ ansible target -i inventory -m module -a “module options”

به عنوان نمونه ، از ماژول apt براي نصب بسته tree  روي server1 استفاده مي كند:
$ ansible server1 -i inventory -m apt -a “name=tree”

اجراي دستورات Bash

هنگامي كه يك ماژول از طريق گزينه -m ارائه نمي شود ، از ماژول فرمان به طور پيش فرض براي اجراي دستور مشخص شده روي سرور محازي (هاي) راه دور استفاده مي شود.
اين امر به شما امكان مي دهد تا بتوانيد تقريبا هر فرماني را اجرا كنيد كه بطور معمول از طريق يك ترمينال SSH اجرا ميشود، مادامي كه كاربر در حال اتصال مجوزهاي كافي داشته باشد و هيچ گونه اعلان تعاملي وجود نداشته باشد.
اين مثال فرمان uptime را در كليه سرور محازي ها از موجودي مشخص شده اجرا مي كند:
$ ansible all -i inventory -a “uptime”

Output
server1 | CHANGED | rc=0 >>
14:12:18 up 55 days, 2:15, 1 user, load average: 0.03, 0.01, 0.00
server2 | CHANGED | rc=0 >>
14:12:19 up 10 days, 6:38, 1 user, load average: 0.01, 0.02, 0.00

استفاده از افزايش امتيازات براي اجراي دستورات با sudo
اگر دستور يا ماژول مورد نظر براي اجرا روي هاستهاي از راه دور نياز به امتيازات گسترده سيستم يا كاربر سيستم ديگري دارد ، لازم است كه از ماژول افزايش امتياز Ansible استفاده كنيد ، كه ماژولي انتزاعي براي sudo و همچنين ساير نرم افزارهاي افزايش امتياز است كه توسط Ansible در سيستم عامل هاي مختلف پشتيباني مي شود.
به عنوان مثال ، اگر مي خواهيد يك فرمان tail  را براي خروجي آخرين پيام هاي ورود به سيستم از خطاي Nginx روي سرور محازي به نام server1 از inventory ، اجرا كنيد ، بايد گزينه –become را به شرح زير وارد كنيد:
ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become

اين مي تواند معادل اجراي فرمان sudo tail /var/log/nginx/error.log بر روي ميزبان از راه دور ، با استفاده از كاربر سيستم فعلي محلي يا كاربر از راه دور تنظيم شده در فايل inventory شما باشد.
سيستم هاي افزايش امتياز مانند sudo اغلب با درخواست رمز ورود كاربر، از شما ميخواهند كه تأييد اعتبار كنيد. اين باعث مي شود كه Ansible در اجراي يك دستور يا اجراي playbook شكست بخورد. سپس مي توانيد از گزينه –ask-become-pass يا -K استفاده كنيد تا Ansible اعلان رمز عبور sudo را درخواست كند:

$ ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become -K

نصب و حذف بسته ها
مثال زير از ماژول apt براي نصب بسته nginx در تمام گره ها از فايل inventory استفاده مي كند:
$ ansible all -i inventory -m apt -a “name=nginx” –become -K

براي حذف بسته ، آرگومان state را درج كنيد و آن را روي absent تنظيم كنيد:.
$ ansible all -i inventory -m apt -a “name=nginx state=absent” –become -K

 

كپي كردن فايل ها
با ماژول file ، مي توانيد فايلها را بين گره كنترل و گره هاي مديريت شده ، از هر جهت كپي كنيد. دستور زير يك فايل متني محلي را براي همه ميزبانهاي از راه دور در فايل inventory مشخص شده كپي مي كند:
$ ansible all -i inventory -m copy -a “src=./file.txt dest=~/myfile.txt”

براي كپي كردن فايل از سرور محازي از راه دور در گره كنترل خود ، گزينه Remote_src را نيز اضافه كنيد:
$ ansible all -i inventory -m copy -a “src=~/myfile.txt remote_src=yes dest=./file.txt”

تغيير مجوزهاي فايل
براي تغيير مجوزها در فايل ها و دايركتوري ها روي گره هاي از راه دور خود ، مي توانيد از ماژول file استفاده كنيد.
دستور زير مجوزها را روي فايلي به نام file.txt كه در / var / www در ميزبان از راه دور قرار دارد تنظيم مي كند. اين قسمت كادر اجرايي فايل را روي 600 تنظيم مي كند ، كه مجوزهاي خواندن و نوشتن را فقط براي مالك فعلي فايل فعال مي كند. علاوه بر اين ، مالكيت آن فايل را براي كاربر و گروهي به نام sammy تعيين مي كند:
$ ansible all -i inventory -m file -a “dest=/var/www/file.txt mode=600 owner=sammy group=sammy” –become -K

از آنجا كه اين فايل در يك ديركتوري قرار دارد كه معمولاً متعلق به root است ، براي تغيير ويژگي هاي آن ممكن است به مجوزهاي sudo نياز داشته باشيم. به همين دليل گزينه هاي –become و -K را شامل مي شود. اينها براي اجراي دستور داراي امتيازات گسترده از سيستم تشديد امتياز Ansible استفاده مي كنند ، و اين امر باعث مي شود كه رمز عبور sudo را براي كاربر از راه دور تهيه كنيد.

ريستارت سرويس ها
شما مي توانيد از ماژول service براي مديريت سرويس هاي در حال اجرا روي گره هاي از راه دور كه توسط Ansible استفاده مي شود ، استفاده كنيد. اين امر به امتيازات گسترده سيستم نياز دارد ، بنابراين اطمينان حاصل كنيد كه كاربر از راه دور شما داراي مجوزهاي sudo است و شما از گزينه –become براي استفاده از سيستم افزايش امتياز Ansible استفاده مي كنيد. استفاده از -K باعث مي شود كه رمز عبور sudo را براي كاربر متصل كننده فراهم كنيد.
براي ريستارت سرويس nginx در تمام ميزبانهاي گروهي به نام webservers ، دستور زير را اجرا كنيد:
$ ansible webservers -i inventory -m service -a “name=nginx state=restarted” –become -K

ريستارت سرور محازي ها
اگرچه Ansible يك ماژول اختصاصي براي راه اندازي مجدد سرور محازي ها ندارد ، مي توانيد يك دستور bash صادر كنيد كه فرمان /sbin/reboot را روي ميزبان از راه دور فراخواني مي كند.
راه اندازي مجدد سرور محازي به امتيازات گسترده سيستم نياز دارد ، بنابراين اطمينان حاصل كنيد كه كاربر از راه دور شما داراي مجوزهاي sudo است و شما از گزينه –become براي استفاده از سيستم افزايش امتياز Ansible استفاده مي كنيد. استفاده از -K باعث مي شود رمز عبور sudo را براي كاربر متصل كننده فراهم كنيد.
هشدار: دستور زير سرور محازي (هاي) هدف Ansible را ريستارت مي كند. اين امر ممكن است باعث ايجاد اختلال موقتي در هر برنامه اي كه به آن سرور محازي ها متكي است، گردد.

براي ريستارت همه سرور محازي ها در يك گروه webservers  دستور زير را اجرا كنيد :
$ ansible webservers -i inventory -a “/sbin/reboot” –become -K

جمع آوري اطلاعات در مورد گره هاي از راه دور
ماژول setup  اطلاعات دقيق در مورد سيستمهاي از راه دور مديريت شده توسط Ansible ، كه به system facts نيز شناخته ميشود را نشان مي دهد.
براي به دست آوردن system facts براي server1 ، دستور زير را اجرا كنيد:
$ ansible server1 -i inventory -m setup

اين دستور مقدار زيادي از داده هاي JSON را چاپ مي كند كه حاوي جزئياتي درباره محيط سرور محازي از راه دور است. براي اينكه فقط مرتبط ترين اطلاعات چاپ شود، عبارت “gather_subset=min” را به شرح زير وارد كنيد:
$ ansible server1 -i inventory -m setup -a “gather_subset=min”

براي چاپ فقط موارد خاص JSON ، مي توانيد از آرگومان filter استفاده كنيد. كه يك الگوي wildcard را ميپذيرد كه براي مطابقت رشته ها ، مشابه fnmatch ، استفاده ميشود. به عنوان مثال ، براي به دست آوردن اطلاعات در مورد هر دو رابط شبكه ipv4 و ipv6 ، مي توانيد از * ipv * به عنوان فيلتر استفاده كنيد:
ansible server1 -i inventory -m setup -a “filter=*ipv*”

Output
server1 | SUCCESS => {
“ansible_facts”: {
“ansible_all_ipv4_addresses”: [
“203.0.113.111”,
“10.0.0.1”
],
“ansible_all_ipv6_addresses”: [
“fe80::a4f5:16ff:fe75:e758”
],
“ansible_default_ipv4”: {
“address”: “203.0.113.111”,
“alias”: “eth0”,
“broadcast”: “203.0.113.111”,
“gateway”: “203.0.113.1”,
“interface”: “eth0”,
“macaddress”: “a6:f5:16:75:e7:58”,
“mtu”: 1500,
“netmask”: “255.255.240.0”,
“network”: “203.0.113.0”,
“type”: “ether”
},
“ansible_default_ipv6”: {}
},
“changed”: false
}

اگر مي خواهيد ميزان استفاده از ديسك را بررسي كنيد ، مي توانيد يك دستور Bash را با استفاده از ابزار df اجرا كنيد ، به شرح زير:
$ ansible all -i inventory -a “df -h”

Output

server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0

server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0

نتيجه
در اين راهنما ، ما نحوه استفاده از دستورات adible ad hoc را براي مديريت سرور محازي هاي از راه دور ، از جمله نحوه اجراي كارهاي متداول شامل ريستارت يك سرويس يا كپي كردن يك فايل از گره كنترل به سرور محازي هاي از راه دور كه توسط آن قابل كنترل است ، نشان داديم. همچنين نحوه جمع آوري اطلاعات از گره هاي از راه دور با استفاده از پارامترهاي محدود كننده و فيلتر را مشاهده كرديم.
به عنوان يك منبع اضافي ، مي توانيد مستندات رسمي Ansible را در مورد دستورات ad hoc بررسي كنيد.

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