چگونه مي توان 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 جستجو كنيد.

 

نحوه استفاده از Traefik به عنوان پروكسي معكوس براي كانتينرهاي Docker در اوبونتو 20.04

نحوه دانلود فايل ها با cURL

نحوه نصب و ايمن سازي Redis در Centos7

چگونه مي توان محيط JupyterLab را در اوبونتو 18.04 تنظيم كرد

نحوه نصب Webmin در Ubuntu 20.04

نحوه بازنويسي آدرس هاي اينترنتي با mod_rewrite براي Apache در اوبونتو 20.04

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

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

نحوه ميزباني وب سايت با استفاده از Cloudflare و Nginx در اوبونتو 18.04

نحوه استفاده از Traefik به عنوان پروكسي معكوس براي كانتينرهاي Docker در Ubuntu 18.04

 

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

 

 

نحوه ميزباني وب سايت با استفاده از Cloudflare و Nginx در اوبونتو 18.04

Cloudflare سرويسي است كه بين بازديد كننده و سرور مجازي مالك وب سايت قرار دارد و به عنوان يك پروكسي معكوس براي وب سايت ها عمل مي كند. Cloudflare يك شبكه انتقال محتوا (CDN) ، و همچنين خدمات سرور مجازي كاهش نام دامنه توزيع شده DDoS را فراهم مي كند.
Nginx يك سرور مجازي وب مشهور است كه مسئول ميزباني برخي از بزرگترين و پر ترافيك ترين سايتهاي اينترنت است. معمولا سازمانها وب سايتها را با Nginx ارائه كرده و از Cloudflare به عنوان ارائه دهنده CDN و DNS استفاده مي كنند.
در اين آموزش ، وب سايت خود را كه توسط Nginx با گواهي Origin CA از Cloudflare ارائه ميشود ايمن ميكنيد و سپس Nginx را براي استفاده از درخواستهاي معتبر پيكربندي ميكنيد. مزاياي استفاده از اين ستاپ اين است كه شما از CDN Cloudflare و وضوح سريع DNS بهره مي بريد و در عين حال اطمينان حاصل مي كنيد كه همه اتصالات از Cloudflare عبور مي كنند. اين مانع از رسيدن هرگونه درخواست مخرب به سرور مجازي شما مي شود.
پيش نيازها
براي تكميل اين آموزش به موارد زير نياز داريد:
⦁ يك سرور مجازي Ubuntu 18.04 با پيروي از راهنماي ستاپ اوليه سرور مجازي Ubuntu 18.04 ، از جمله يك كاربر sudo غير ريشه و فايروال راه اندازي شده.
⦁ Nginx بر روي سرور مجازي شما نصب شده باشد. مي توانيد راهنماي ما در مورد نحوه نصب Nginx را در اوبنتو 18.04 دنبال كنيد.
⦁ يك حساب Cloudflare
⦁ يك دامنه ثبت شده به حساب Cloudflare شما اضافه شده باشد كه به سرور مجازي Nginx شما اشاره كند. راهنماي ما در مورد چگونگي كاهش حملات DDoS عليه وب سايت خود با Cloudflare مي تواند در انجام اين كار به شما كمك كند. مقدمه ما در مورد اصطلاحات DNS ، مؤلفه ها و مفاهيم نيز مي تواند مفيد باشد.
⦁ سرور مجازي Nginx Block براي دامنه شما پيكربندي شده باشد ، كه مي توانيد با دنبال كردن مرحله 5 نحوه نصب Nginx در اوبونتو 18.04 ، آن را انجام دهيد.
مرحله 1 – توليد گواهي Origin CA TLS
Cloudflare Origin CA به شما امكان مي دهد تا يك گواهي TLS رايگان امضا شده توسط Cloudflare براي نصب بر روي سرور مجازي Nginx خود توليد كنيد. با استفاده از گواهي TLS توليد شده Cloudflare مي توانيد ارتباط بين سرور مجازي هاي Cloudflare و سرور مجازي Nginx خود را تضمين كنيد.
براي توليد گواهي نامه با Origin CA ، در يك مرورگر وب به حساب Cloudflare خود وارد شويد. دامنه مورد نظر براي تأمين امنيت را انتخاب كرده و به بخش SSL / TLS داشبورد Cloudflare خود برويد. از آنجا به تب Origin Server برويد و بر روي دكمه Create Certificate كليك كنيد:

گزينه پيش فرض Let Cloudflare generate a private key and a CSR را انتخاب كنيد.

بر روي Next كليك كنيد و گفتگويي با Origin Certificate و Private key را مشاهده خواهيد كرد. شما بايد گواهي مبدا و كليد خصوصي را از Cloudflare به سرور مجازي خود منتقل كنيد. به دلايل امنيتي ، اطلاعات Private Key مجدداً نمايش داده نمي شود ، بنابراين قبل از كليك بر روي Ok ، كليد سرور مجازي خود را كپي كنيد.

شما از ديركتوري / etc / ssl در سرور مجازي براي نگه داشتن گواهي مبدا و فايل هاي كليد خصوصي استفاده خواهيد كرد. اين پوشه در حال حاضر در سرور مجازي وجود دارد.
ابتدا محتويات Certificate Origin نمايش داده شده در كادر گفتگو در مرورگر خود را كپي كنيد.
سپس ، در سرور مجازي خود ، /etc/ssl/cert.pem را در ويرايشگر متن مورد نظر خود باز كنيد:
⦁ $ sudo nano /etc/ssl/cert.pem

محتواي گواهي را در فايل اضافه كنيد. سپس ذخيره كنيد و از ويرايشگر خارج شويد.
سپس به مرورگر خود بازگرديد و محتويات كليد خصوصي را كپي كنيد. فايل /etc/ssl/key.pem را براي ويرايش باز كنيد:
⦁ $ sudo nano /etc/ssl/key.pem

كليد خصوصي را درون فايل قرار دهيد ، فايل را ذخيره كنيد و از ويرايشگر خارج شويد.
توجه: گاهي اوقات ، هنگامي كه گواهي و كليد را از داشبورد Cloudflare كپي مي كنيد و آن را در فايل هاي مربوطه روي سرور مجازي پيست ميكنيد ، خطوط خالي درج مي شود. Nginx چنين گواهينامه ها و كليدها را نامعتبر ميداند ، بنابراين اطمينان حاصل كنيد كه هيچ خط خالي در فايل هاي شما وجود نداشته باشد.

هشدار: گواهي Origin CA Cloudflare فقط به Cloudflare اعتماد ميكند و بنابراين فقط بايد توسط سرور مجازيهاي مبدأ استفاده شود كه به طور فعال به Cloudflare متصل هستند. اگر در هر لحظه Cloudflare را متوقف يا غيرفعال كنيد ، گواهي Origin CA شما خطاي گواهي نامعتبر را به همراه خواهد داشت.

اكنون كه فايلهاي كليد و مجوز را در سرور مجازي خود كپي كرده ايد ، براي استفاده از آنها بايد پيكربندي Nginx را به روز كنيد.
مرحله 2 – نصب گواهي Origin CA در Nginx
در بخش قبلي ، با استفاده از داشبورد Cloudflare يك گواهي مبدأ و كليد خصوصي ايجاد كرده و فايل ها را در سرور مجازي خود ذخيره كرديد. اكنون پيكربندي Nginx را براي استفاده از گواهي مبدا و كليد خصوصي براي اطمينان از اتصال بين سرور مجازيهاي Cloudflare و سرور مجازي خود ، پيكربندي Nginx را به روز خواهيد كرد.
ابتدا مطمئن شويد UFW ترافيك HTTPS را امكان پذير مي كند. Nginx Full را فعال كنيد ، كه پورت 80 (HTTP) و پورت 443 (HTTPS) را باز مي كند:
⦁ $ sudo ufw allow ‘Nginx Full’

اكنون UFW را مجدد لود كنيد:
⦁ $ sudo ufw reload

در آخر ، بررسي كنيد كه قوانين جديد شما مجاز باشند يا UFW فعال باشد:
⦁ $ sudo ufw status

خروجي مانند اين را مشاهده خواهيد كرد:
Output
Status: active

To Action From
— —— —-
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)

اكنون آماده تنظيم بلوك سرور مجازي Nginx خود هستيد. Nginx در حين نصب بلوك سرور مجازي پيش فرض ايجاد مي كند. اگر هنوز وجود دارد ، آن را حذف كنيد ، زيرا قبلاً يك بلوك سرور مجازي اختصاصي براي دامنه خود پيكربندي كرده ايد:
⦁ $ sudo rm /etc/nginx/sites-enabled/default

سپس ، فايل پيكربندي Nginx را براي دامنه خود باز كنيد:
⦁ $ sudo nano /etc/nginx/sites-available/your_domain

فايل بايد به صورت زير باشد:
/etc/nginx/sites-available/your_domain
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 را اصلاح مي كنيد:
• به پورت 80 گوش دهيد و كليه درخواست ها را براي استفاده از https تغيير دهيد.
• به پورت443 گوش داده و از گواهي مبدا و كليد خصوصي اضافه شده در قسمت قبلي استفاده كنيد.
فايل را تغيير دهيد تا به شكل زير باشد:
/etc/nginx/sites-available/your_domain
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 302 https://$server_name$request_uri;
}

server {

# SSL configuration

listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;

server_name your_domain www.your_domain;

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

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

فايل را ذخيره كرده و از ويرايشگر خارج شويد.
در مرحله بعد ، اطمينان حاصل كنيد كه هيچ خطاي نحوي در هيچ يك از فايل هاي تنظيمات Nginx شما وجود ندارد:
⦁ $sudo nginx -t

اگر مشكلي پيدا نكرديد ، Nginx را دوباره فعال كنيد تا تغييرات خود را فعال كنيد:
⦁ $ sudo systemctl restart nginx

حال به بخش SSL / TLS داشبورد Cloudflare برويد ، به تب Overview برويد و حالت رمزگذاري SSL / TLS را به حالت كامل (دقيق) تغيير دهيد. اين به Cloudflare اطلاع مي دهد تا هميشه ارتباط بين Cloudflare و سرور مجازي Nginx منشاء شما را رمزگذاري كند.

اكنون به وب سايت خود در https: // your_domain مراجعه كنيد تا صحت تنظيم آن را تأييد كنيد. صفحه اصلي خود را مشاهده خواهيد كرد و مرورگر گزارش مي دهد كه سايت امن است.
در قسمت بعد ، شما Authenticated Origin Pulls را تأييد مي كنيد كه سرور مجازي مبدا شما در واقع با Cloudflare ارتباط برقرار مي كند و نه برخي ديگر از سرور مجازي ها. با اين كار ، Nginx پيكربندي مي شود كه تنها درخواست هايي را كه از گواهي كلاينت معتبر از Cloudflare استفاده مي كنند ، بپذيرد. كليه درخواستهايي كه از Cloudflare عبور نكرده اند رد مي شوند.
مرحله 3 – تنظيم Authenticated Origin Pulls
گواهي Origin CA به Cloudflare كمك مي كند تا تاييد كند كه در حال گفتگو با سرور مجازي درست است. در اين مرحله از تأييد هويت كلاينت TLS براي تأييد صحت سرور مجازي Nginx كه با Cloudflare در حال گفتگو است ، استفاده مي كند.
در يك ارتباط TLS تأييد شده توسط كلاينت ، هر دو طرف يك گواهي براي تأييد ارائه مي دهند. سرور مجازي مبدا پيكربندي شده است كه فقط درخواستهايي را قبول كند كه از گواهي كلاينت معتبر از Cloudflare استفاده مي كنند. درخواست هايي كه از Cloudflare عبور نكرده اند رد مي شوند زيرا گواهي Cloudflare را ندارند. اين بدان معني است كه حمله گران مخرب نمي توانند اقدامات امنيتي Cloudflare را دور بزنند و مستقيماً به سرور مجازي Nginx شما متصل شوند.
Cloudflare گواهينامه هاي امضا شده توسط CA با گواهي زير را ارائه مي دهد:
—–BEGIN CERTIFICATE—–
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
—–END CERTIFICATE—–

همچنين مي توانيد گواهي را مستقيماً از Cloudflare در اين لينك دانلود كنيد.
اين گواهي را كپي كنيد.
سپس فايل /etc/ssl/cloudflare.crt را براي نگه داشتن گواهي Cloudflare ايجاد كنيد:
⦁ $ sudo nano /etc/ssl/cloudflare.crt

گواهي را به فايل اضافه كنيد. سپس فايل را ذخيره كرده و از ويرايشگر خارج شويد.
اكنون پيكربندي Nginx خود را به روز كنيد تا از TLS Authenticated Origin Pulls استفاده كنيد. فايل پيكربندي را براي دامنه خود باز كنيد:
⦁ $ sudo nano /etc/nginx/sites-available/your_domain

دستورالعملهاي ssl_client_certificate و ssl_verify_client را همانطور كه در مثال زير نشان داده شده است اضافه كنيد:
/etc/nginx/sites-available/your_domain
. . .

server {

# SSL configuration

listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client on;

. . .

فايل را ذخيره كرده و از ويرايشگر خارج شويد.
سپس ، Nginx را آزمايش كنيد تا مطمئن شويد كه هيچ خطاي نحوي در پيكربندي Nginx شما وجود ندارد:
⦁ $ sudo nginx -t

اگر مشكلي پيدا نشد ، Nginx را ريستارت كنيد تا تغييرات خود را اعمال كنيد:
⦁ $ sudo systemctl restart nginx

در آخر ، براي فعال كردن Authenticated Pulls ، بخش SSL / TLS را در داشبورد Cloudflare باز كنيد ، به تب Origin Server برويد و گزينه Authenticated Origin Pulls را تغيير دهيد.

اكنون به وب سايت خود در https: // your_domain مراجعه كنيد تا صحت تنظيم آن را تأييد كنيد. مانند قبل ، صفحه اصلي خود را نمايش داده خواهيد كرد.
براي تأييد اينكه سرور مجازي شما فقط درخواستهاي امضا شده توسط CA Cloudflare را قبول خواهد كرد ، گزينه Authenticated Origin Pulls را انتخاب كنيد تا غيرفعال شود و سپس وب سايت خود را دوباره لود كنيد. بايد پيام خطاي زير را دريافت كنيد:

اگر CA Cloudflare درخواستي را امضا نكند ، سرور مجازي مبدا شما خطايي را ايجاد مي كند.
توجه: بيشتر مرورگرها درخواستها را ذخيره مي كنند ، بنابراين براي ديدن تغيير فوق مي توانيد از حالت جستجوي Incognito/Private در مرورگر خود استفاده كنيد. براي جلوگيري از عدم دسترسي به درخواست Cloudflare در هنگام تنظيم وب سايت ، به مرور كلي در داشبورد Cloudflare برويد و حالت توسعه را تغيير دهيد.

اكنون كه مي دانيد درست كار مي كند به بخش SSL / TLS در داشبورد Cloudflare برگرديد ، به تب Origin Server برويد و گزينه Authenticated Origin Pulls را دوباره بزنيد تا فعال شود.
نتيجه
در اين آموزش وب سايت خود Nginx را با رمزگذاري ترافيك بين Cloudflare و سرور مجازي Nginx با استفاده از گواهينامه Origin CA از Cloudflare ، ايمن كرديد. سپس Authenticated Origin Pulls را روي سرور مجازي Nginx تنظيم ميكنيد تا اطمينان حاصل شود كه تنها درخواستهاي سرور مجازي هاي Cloudflare را مي پذيرد و از اتصال مستقيم ديگران به سرور مجازي Nginx جلوگيري مي كند.

 

نحوه استفاده از Traefik به عنوان پروكسي معكوس براي كانتينرهاي Docker در اوبونتو 20.04

نحوه دانلود فايل ها با cURL

نحوه نصب و ايمن سازي Redis در Centos7

چگونه مي توان محيط JupyterLab را در اوبونتو 18.04 تنظيم كرد

نحوه نصب Webmin در Ubuntu 20.04

نحوه بازنويسي آدرس هاي اينترنتي با mod_rewrite براي Apache در اوبونتو 20.04

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

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

نحوه ميزباني وب سايت با استفاده از Cloudflare و Nginx در اوبونتو 18.04

نحوه استفاده از Traefik به عنوان پروكسي معكوس براي كانتينرهاي Docker در Ubuntu 18.04

 

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