سرور مجازي

سرور مجازي

چگونه مي توان 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 ارزان – 

 

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

 

نحوه استفاده از 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 ارزان – 

 

 

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

۱۵ بازديد ۰ نظر

ماژول mod_rewrite Apache به شما امكان مي دهد URL ها را با تميزتر بازنويسي كنيد ، مسيرهاي قابل خواندن توسط انسان را به رشته هاي پرس و جوي متناسب با كد تبديل كنيد. همچنين به شما امكان مي دهد URL ها را بر اساس شرايط بازنويسي كنيد.

فايل .htaccess به شما امكان مي دهد بدون دسترسي به فايل هاي پيكربندي سرور مجازي ، قوانين بازنويسي را ايجاد و اعمال كنيد. با قرار دادن فايل .htaccess در ريشه وب سايت خود ، مي توانيد بازنويسي ها را بر اساس هر سايت يا هر دايركتوري مديريت كنيد.

در اين آموزش ، mod_rewrite  را فعال كرده و از فايلهاي .htaccess براي ايجاد يك تغيير مسير URL اصلي استفاده مي كنيد ، و سپس چند مورد استفاده پيشرفته را پيدا مي كنيد.

پيش نيازها

براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:

  • يك سرور مجازي Ubuntu 20.04 كه با دنبال كردن راهنماي تنظيم اوليه سرور مجازي Ubuntu 20.04 راه اندازي و شامل يك كاربر sudo غير ريشه و فايروال تنظيم شده باشد.
  • Apache كه با دنبال كردن مرحله 1 نحوه نصب پشته Linux ، Apache ، MySQL ، PHP (LAMP)  در اوبونتو 20.04 نصب شده باشد.

مرحله 1 – فعال كردن  mod_rewrite

براي اينكه Apache بتواند قوانين بازنويسي را درك كند ، ابتدا بايد mod_rewrite را فعال كنيم. قبلاً نصب شده است ، اما در نصب پيش فرض Apache غيرفعال است. براي فعال كردن ماژول از دستور a2enmod استفاده كنيد:

·         $ sudo a2enmod rewrite·

با اين كار ماژول فعال مي شود يا به شما هشدار مي دهد كه ماژول از قبل فعال شده است. براي اجراي اين تغييرات ، Apache  را مجدداً راه اندازي كنيد.

·         $ sudo systemctl restart apache2·

اكنون mod_rewrite كاملاً فعال است. در مرحله بعدي، يك فايل .htaccess را براي تعريف قوانين بازنويسي براي تغيير مسيرها تنظيم خواهيم كرد.

مرحله 2 – تنظيم  .htaccess

يك فايل .htaccess به ما امكان مي دهد قوانين بازنويسي خود را بدون دسترسي به فايل هاي پيكربندي سرور مجازي اصلاح كنيم. به همين دليل ، .htaccess براي امنيت برنامه وب شما بسيار مهم است. دوره اي كه نام فايل قبل از آن است ، اطمينان حاصل مي كند كه فايل مخفي است.

توجه: هر قانوني كه مي توانيد در يك فايل .htaccess قرار دهيد ، مي تواند مستقيماً در فايل هاي پيكربندي سرور مجازي قرار گيرد. در حقيقت ، اسناد رسمي Apache  استفاده از فايلهاي پيكربندي سرور مجازي را به جاي .htaccess توصيه مي كند زيرا Apache آن را سريعتر از اين پردازش مي كند.

با اين حال ، در اين مثال ساده ، افزايش عملكرد ناچيز خواهد بود. علاوه بر اين ، تنظيم قوانين در .htaccess مناسب است ، به خصوص با چندين وب سايت در همان سرور مجازي. براي اجراي تغييرات نيازي به راه اندازي مجدد سرور مجازي نيست و نيازي به امتيازات اصلي براي ويرايش آن قوانين ، ساده سازي تعمير و نگهداري و ايجاد تغييرات با يك حساب غير شخصي نيست. برخي از نرم افزارهاي منبع باز منبع آزاد ، مانند WordPress و Joomla ، اغلب براي تغيير و ايجاد قوانين اضافي در صورت تقاضا به يك فايل .htaccess متكي هستند.

قبل از شروع استفاده از فايل هاي .htaccess ، بايد تنظيمات ديگري را انجام و آن را ايمن كنيد.

به طور پيش فرض ، Apache با استفاده از فايل .htaccess اعمال قوانين بازنويسي را ممنوع مي كند ، بنابراين ابتدا بايد تغييراتي در فايل اعمال كنيد. فايل پيش فرض پيكربندي Apache را با استفاده از nano يا ويرايشگر متن مورد علاقه خود باز كنيد.

·         $ sudo nano /etc/apache2/sites-available/000-default.conf·

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

/etc/apache2/sites-available/000-default.conf

Options Indexes FollowSymLinks

AllowOverride All

Require all granted

 

. . .

 

فايل را ذخيره كنيد و ببنديد. براي اجراي اين تغييرات ، Apache را مجدداً راه اندازي كنيد.

·         $ sudo systemctl restart apache2·

اكنون ، يك فايل .htaccess را در webroot ايجاد كنيد.

·         $ sudo nano /var/www/html/.htaccess·

اين خط را در بالاي فايل جديد اضافه كنيد تا موتور بازنويسي فعال شود.

/var/www/html/.htaccess

RewriteEngine on

 

فايل را ذخيره كرده و خارج شويد.

اكنون ما يك فايل .htaccess عملياتي داريم كه مي توانيم از آن استفاده كنيم تا قوانين مسيريابي برنامه وب را كنترل كنيم. در مرحله بعد ، ما فايلهاي وب سايت نمونه را ايجاد خواهيم كرد كه براي نشان دادن قوانين بازنويسي قوانين از آنها استفاده خواهيم كرد.

مرحله 3 – پيكربندي بازنويسي  URL

در اينجا ، يك بازنويسي URL اصلي را تنظيم مي كنيم كه URL هاي زيبا را به مسيرهاي واقعي به صفحات تبديل مي كند. به طور خاص ، به كاربران اين امكان را مي دهيم كه به http: // your_server_ip / about دسترسي پيدا كنند ، اما صفحه اي به نام about.html را نمايش مي دهند.

با ايجاد فايلي به نام about.html در webroot شروع كنيد.

·         $ sudo nano /var/www/html/about.html·

كد HTML زير را در فايل كپي كنيد ، سپس آن را ذخيره كرده و ببنديد.

/var/www/html/about.html

About Us

About Us

 

مي توانيد به اين صفحه به آدرس http: //your_server_ip/about.html دسترسي پيدا كنيد ، اما توجه داشته باشيد كه اگر سعي كنيد به http: // your_server_ip / About خود دسترسي پيدا كنيد ، خطاي 404 Not Found  را مشاهده خواهيد كرد. براي دسترسي به صفحه با استفاده از /about ، يك قانون بازنويسي ايجاد خواهيم كرد.

همه RewriteRules از اين قالب پيروي مي كنند:

General RewriteRule structure

RewriteRule pattern substitution [flags]

 

  • RewriteRule بخشنامه را مشخص مي كند.
  • pattern يك عبارت معمولي است كه رشته مورد نظر را از URL مطابقت مي دهد ، همان چيزي است كه بيننده در مرورگر تايپ مي كند.
  • substitution مسير رسيدن به URL واقعي ، يعني مسير سرورهاي فايل Apache است.
  • flags پارامترهاي اختياري هستند كه مي توانند نحوه عملكرد قانون را تغيير دهند.

بياييد قانون بازنويسي URL ما را ايجاد كنيم. فايل .htaccess را باز كنيد.

·         $ sudo nano /var/www/html/.htaccess·

بعد از اولين خط ، RewriteRule هايلايت شده را اضافه كرده و فايل را ذخيره كنيد.

در اين حالت ، ^about$ الگو است ، About.html ، substitution است ، و [NC] پرچم است. مثال ما از چند كاراكتر با معني خاص استفاده مي كند:

  • ^ نشان دهنده شروع URL پس از your_server_ip/ است.
  • $ نشانگر پايان URL است.
  • about با رشته “about” جفت ميشود
  • html فايل واقعي است كه كاربر به آن دسترسي پيدا مي كند.
  • [NC] پرچمي است كه قضيه را بي حس مي كند.

اكنون مي توانيد به مرورگر خود به http: // your_server_ip / about دسترسي پيدا كنيد. در واقع ، با اين قانون كه در بالا نشان داده شده است ، آدرس هاي اينترنتي زير به about.html اشاره مي كنند:

  • http: // your_server_ip / about ، به دليل تعريف قانون.
  • http: // your_server_ip / About ، زيرا اين قانون به حروف حساس نيست.
  • http: //your_server_ip/about.html ، زيرا نام فايل مناسب اصلي هميشه كار خواهد كرد.

با اين حال ، موارد زير كار نخواهد كرد:

http: // your_server_ip / about / ، زيرا اين قانون به صراحت بيان مي كند كه ممكن است بعد از آن چيزي وجود نداشته باشد ، زيرا كاراكتر $ بعد از about ظاهر مي شود.

http: // your_server_ip / contact ، زيرا با رشته about  در قانون مطابقت نمي دهد.

اكنون يك فايل .htaccess عملياتي با يك قانون اساسي داريد كه مي توانيد نيازهاي خود را تغيير داده و گسترش دهيد. در بخش هاي بعدي ، دو نمونه ديگر از بخشنامه هاي متداول را نشان خواهيم داد.

مثال 1 – ساده سازي رشته هاي جستار با  RewriteRule

برنامه هاي وب اغلب از رشته هاي جستار استفاده مي كنند ، كه با استفاده از علامت سؤال (؟) بعد از آدرس به URL اضافه مي شوند. پارامترهاي جداگانه با استفاده از چ (&) محدود مي شوند. رشته هاي جستار ممكن است براي انتقال داده هاي اضافي بين صفحات برنامه فردي استفاده شود.

به عنوان مثال ، يك صفحه نتيجه جستجو كه به زبان PHP نوشته شده است ممكن است از URL مانند http://example.com/results.php؟item=shirt&season=summer استفاده كند. در اين مثال ، دو پارامتر اضافي به اسكريپت برنامه result.php موهومي منتقل مي شود: item ، با متغير shirt ، و مقدار summer. برنامه ممكن است از اطلاعات رشته پرس و جو براي ايجاد صفحه مناسب براي بازديد كننده استفاده كند.

قوانين بازنويسي Apache اغلب براي ساده كردن پيوندهاي طولاني و ناخوشايند مانند موارد فوق در URL هاي دوستانه كه تايپ و تفسير بصري آسان تر است ، به كار مي روند. در اين مثال ، ما مي خواهيم لينك بالا را ساده كنيد تا به http://example.com/shirt/summer تبديل شويد. پارامتر shirt  و summer  هنوز در آدرس هستند اما بدون نام رشته و نام اسكريپت.

در اينجا يك قانون براي اجراي اين وجود دارد:

Simple substitution

RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer [QSA]

 

shirt/summer به طور واضح در آدرس درخواستي مطابقت دارد و به Apache گفته مي شود كه به جاي آن ، results.php?item=shirt&season=summer را ارائه دهد.

پرچم هاي [QSA] معمولاً در قوانين بازنويسي استفاده مي شوند. آنها به Apache مي گويند هر رشته درخواست اضافي را در URL ارائه شده اضافه كند ، بنابراين اگر بازديد كننده http://example.com/shirt/summer?page=2  را تايپ كند، سرور مجازي

با results.php?item=shirt&season=summer&page=2 پاسخ خواهد داد. بدون آن ، رشته پرس و جو اضافي حذف مي شود.

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

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

Simple substitution

RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]

 

اولين گروه عبارت معمول در پرانتز با رشته اي حاوي كاراكترهاي الفبا و اعداد مانند shirt  يا pants  مطابقت دارد و قطعه را به عنوان متغير $ 1 ذخيره مي كند. دومين گروه عبارت معمول در پرانتز دقيقاً با summer, winter, fall, يا  spring مطابقت دارد و به همين ترتيب قطعه را به عنوان $2 ذخيره مي كند.

قطعات همسان پس از آن به جاي shirt  و summer  كه قبلاً از آنها استفاده مي كرديم در URL نتيجه در متغيرهاي item  و season  استفاده مي شوند.

موارد فوق ، به عنوان مثال ، http://example.com/pants/summer را به http://example.com/results.php؟item=pants&season=summer تبديل مي كند. اين مثال همچنين اثبات آينده است ، و به چندين item  و season  اجازه مي دهد تا با استفاده از يك قانون واحد به طور صحيح بازنويسي شوند.

مثال 2 – اضافه كردن شرايط با منطق با استفاده از RewriteConds

بازنويسي قوانين الزاماً هميشه يك به يك و بدون محدوديت ارزيابي نمي شوند. دستورالعمل RewriteCond به ما امكان مي دهد تا شرايط را براي بازنويسي خود اضافه كنيم تا هنگام پردازش قوانين ، كنترل كنيم. كليه RewriteConds با فرمت زير عمل مي كند:

General RewriteCond structure

RewriteCond TestString Condition [Flags]

 

  • RewriteCond بخشنامه RewriteCond را مشخص مي كند.
  • TestString رشته اي است كه بايد در برابر آن آزمايش كنيد.
  • Condition الگو يا شرط مطابقت است.
  • Flags پارامترهاي اختياري هستند كه ممكن است شرايط و قوانين ارزيابي را تغيير دهند.

اگر RewriteCond درست ارزيابي شود ، RewriteRule  بلافاصله در نظر گرفته مي شود. در صورت عدم موفقيت ، اين قانون منتفي مي شود. RewriteCond  چندگانه ممكن است يكي پس از ديگري مورد استفاده قرار گيرد و با رفتار پيش فرض ، همه بايد درست ارزيابي كنند تا قاعده زير در نظر گرفته شود.

به عنوان نمونه ، فرض مي كنيم شما مي خواهيئ به جاي نشان دادن صفحه خطاي استاندارد 404 Not Found ، همه درخواست ها را به فايل ها يا ديركتوريهاي غير موجود در سايت خود به صفحه اصلي برگردانيد. اين امر مي تواند با قوانين زير انجام شود:

Redirect all requests to non-existent files and directories to home page

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . / [R=301]

 

به اين شرح:

%{REQUEST_FILENAME} رشته اي براي بررسي است. در اين حالت ، نام فايل درخواستي است ، كه يك متغير سيستمي براي هر درخواست است.

-f  يك وضعيت داخلي است كه تأييد مي كند كه آيا نام درخواست شده در ديسك وجود دارد يا فايل است. ! يك عامل منفي است. ! -f  تركيبي فقط درصورتي كه يك نام مشخص وجود نداشته باشد يا فايل نداشته باشد ، درست ارزيابي مي شود.

به طور مشابه ، ! -d  فقط درصورتي كه يك نام مشخص وجود نداشته باشد يا يك ديركتوري نباشد ، درست ارزيابي مي شود.

RewriteRule در خط نهايي فقط براي درخواست ها به فايل ها يا دايركتوري هاي غير موجود وارد خواهد شد. خود RewriteRule  بسيار ساده است. نقطه . در اين الگو با هر چيزي مطابقت دارد و جايگزيني هر درخواست را به ريشه / وب سايت هدايت مي كند.

علاوه بر اين ، پرچم [R = 301]  به Apache مي گويد يك كد پاسخ HTTP  ، 301 Moved Permanently را به مرورگر بازگرداند ، در نتيجه مرورگر مي داند كه تغيير مسير اتفاق افتاده است و صريحاً به جاي URL درخواست شده ، ريشه وب سايت را واگذار مي كند. و تغييري در نوار آدرس مرورگر اعمال ميشود.

بدون اين پرچم ، Apache  محتواي اصلي وب سايت را بر مي گرداند ، اما مرورگر همچنان فكر مي كند URL صفحه درخواستي وجود داشته باشد و آدرس درخواست شده را ابتدا در نوار آدرس نشان دهد.

نتيجه

mod_rewrite  به شما امكان مي دهد URL هاي قابل خواندن توسط انسان را ايجاد كنيد. در اين آموزش شما از دستورالعمل RewriteRule براي هدايت آدرس هاي اينترنتي از جمله آدرس ها با رشته هاي پرس و جو استفاده كرده ايد. همچنين با استفاده از دستورالعمل RewriteCond  URL  هاي هدايت شونده مشروط را نوشتيد.

اگر مي خواهيد در مورد mod_rewrite اطلاعات بيشتري كسب كنيد ، به mod_rewrite Introduction و مستندات رسمي Apache  براي mod_rewrite نگاهي بيندازيد.

 

نحوه استفاده از 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 ارزان – 

 

 

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

۱۶ بازديد ۰ نظر

Webmin  يك پنل كنترل وب مدرن است كه به شما امكان مي دهد سرور مجازي لينوكس خود را از طريق يك رابط مبتني بر مرورگر مديريت كنيد. با Webmin ، مي توانيد حساب هاي كاربري را مديريت كنيد ، تنظيمات DNS را پيكربندي كنيد و تنظيمات بسته هاي معمول را تغيير دهيد.

در اين آموزش ، Webmin  را بر روي سرور مجازي خود نصب و پيكربندي مي كنيد و دسترسي به رابط را با داشتن يك گواهي معتبر از Let’s Encrypt  ايمن مي كنيد. سپس از Webmin براي اضافه كردن حسابهاي كاربري جديد استفاده خواهيد كرد و كليه بسته هاي موجود در داشبورد را روي سرور مجازي خود به روز مي كنيد.

پيش نيازها

براي تكميل اين آموزش ، به موارد زير نياز داريد:

  • يك سرور مجازي Ubuntu 20.04. اين سرور مجازي بايد داراي يك كاربر غير ريشه با امتيازات sudo و فايروال UFW پيكربندي شده باشد. اين كار را با دنبال كردن راهنماي تنظيم اوليه سرور مجازي Ubuntu 20.04 ما انجام دهيد.
  • Apache كه با دنبال كردن آموزش ما در مورد نحوه نصب وب سرور مجازي Apache در Ubuntu 20.04 نصب شده باشد. اگر اين راهنماي پيش نياز را دنبال مي كنيد ، حتماً يك هاست مجازي را پيكربندي كنيد.
  • نام دامنه كاملاً واجد شرايط (FQDN) ، با يك ركورد A DNS كه به آدرس IP سرور مجازي شما اشاره دارد.

مرحله 1 – نصب  Webmin

ابتدا ايندكس بسته سرور مجازي را به روز كنيد اگر اين كار را قبلا انجام نداده ايد:

·         $ sudo apt update

سپس بايد مخزن Webmin را اضافه كنيم تا بتوانيم Webmin را با استفاده از مدير بسته خود نصب و به روز كنيم. اين كار را با اضافه كردن مخزن به فايل /etc/apt/source.list انجام مي دهيم.

فايل را در ويرايشگر مورد نظر خود باز كنيد.

·         $ sudo nano /etc/apt/sources.list·

سپس اين خط را در پايين فايل اضافه كنيد تا مخزن جديد اضافه شود:

/etc/apt/sources.list

. . .

deb http://download.webmin.com/download/repository sarge contrib

فايل را ذخيره كرده و از ويرايشگر خارج شويد.  اگر از nano استفاده ميكنيد اين كار را با CTRL+X, Y, سپس  ENTER انجام دهيد.

در مرحله بعد ، كليد Webmin PGP را اضافه خواهيد كرد تا سيستم شما به مخزن جديد اعتماد كند. براي انجام اين كار، بايد بسته gnupg1  را نصب كنيد كه ابراز GNU براي ارتباط ايمن و ذخيره داده است.

پس از آن، كليد Webmin PGP را با  wget نصب و آن را به ليست كليدهاي سيستم خود اضافه كنيد:

  • $ wget -q -O- http://www.webmin.com/jcameron-key.asc | sudo apt-key add

فهرست بسته سرور مجازي خود را به روز كنيد  تا منابع جديد Webmin را شامل شود:

·         $ sudo apt update·          ·

سپس Webmin را نصب كنيد:

·         $ sudo apt install webmin ·

پس از اتمام نصب ، خروجي زير ارائه مي شود:

Output. . .Webmin install complete. You can now login to https://your_server:10000 as root with your root password, or as any user who can use sudo.·

توجه: اگر ufw را در مرحله پيش شرط نصب كرديد ، بايد دستور sudo ufw allow 10000را اجرا كنيد تا Webmin از طريق فايروال امكان پذير باشد. براي امنيت بيشتر ، بهتر است فايروال خود را پيكربندي كنيد تا فقط از محدوده هاي خاص IP اجازه دسترسي به اين پورت را داشته باشيد.

بياييد با افزودن يك گواهي معتبر ، Webmin  را ايمن كنيم.

مرحله 2 – اضافه كردن يك گواهي معتبر با Let’s Encrypt

در حال حاضر Webmin  براي استفاده از HTTPS پيكربندي شده است ، اما از يك گواهي نامه امضاء نشده و غيرقابل اعتماد استفاده مي كند. بياييد آن را با يك گواهي معتبر از Let’s Encrypt جايگزين كنيم.

به https: // your_domain: 9000 در مرورگر وب خود برويد و your_domain را با نام دامنه خود به آدرس IP سرور مجازي خود جايگزين كنيد.

توجه: هنگام ورود به سيستم براي اولين بار ، يك اخطار “Invalid SSL” مشاهده خواهيد كرد. اين اخطار ممكن است بسته به مرورگر شما متفاوت باشد اما دليل آن اين است كه سرور مجازي يك گواهي self-signed ايجاد كرده است. امكان استثناء  را بدهيد و به دامنه خود برويد تا بتوانيد گواهي خود امضا شده را با يك گواهي Let’s Encrypt جايگزين كنيد.

به شما يك صفحه ورود به سيستم ارائه مي شود. ضمن انجام پيش نيازهاي اين آموزش ، با كاربر غير ريشه اي كه ايجاد كرده ايد وارد سيستم شويد.

پس از ورود به سيستم ، اولين صفحه اي كه مشاهده خواهيد كرد داشبورد Webmin است. قبل از استفاده از يك گواهي معتبر ، بايد نام ميزبان سرور مجازي را تنظيم كنيد. همانطور كه در شكل زير نشان داده شده است ، به قسمت System hostname رفته و روي پيوند سمت راست كليك كنيد:

Webmin در Ubuntu 20.04شما را به صفحه Hostname and DNS Client ميبرد. فيلد Hostname  را پيدا كنيد و نام دامنه كاملاً واجد شرايط خود را وارد اين قسمت كنيد. سپس بر روي دكمه ذخيره در پايين صفحه كليك كنيد تا تنظيمات اعمال شود.

پس از تنظيم نام ميزبان خود ، بر روي منوي كشويي Webmin در نوار پيمايش سمت چپ كليك كنيد و سپس بر روي Webmin Configuration  كليك كنيد.

از صفحه پيكربندي Webmin   ، SSL Encryption  را از ليست آيكون ها انتخاب كنيد ، و سپس روي سربرگ Let’s Encrypt كليك كنيد. صفحه نمايشي مانند شكل زير را مشاهده خواهيد كرد:

Webmin در Ubuntu 20.04

در اين صفحه ، به Webmin  مي گوييد كه چگونه گواهينامه شما را دريافت و تمديد كند. گواهينامه هاي رمزگذاري شده پس از 3 ماه منقضي ميشوند ، اما مي توانيد به Webmin  دستور دهيد كه بطور خودكار سعي كند هر ماه مجوز Let’s Encrypt  را تمديد نمايد. Let’s Encrypt به دنبال يك فايل تأييد بر روي سرور مجازي ميباشد ، بنابراين ما Webmin را پيكربندي مي كنيم تا فايل تأييد را درون پوشه / var / www / your_domain قرار دهد ، اين پوشه اي است كه وب سرور مجازي Apache كه در پيش نيازها پيكربندي كرده ايد از آن استفاده مي كند. براي تنظيم گواهينامه خود اين مراحل را دنبال كنيد:

1-  Hostnames for certificate  را با FQDN خود پر كنيد.

2- براي Website root directory for validation file ، دكمه Other Directory را انتخاب كرده و /var/www/htmlرا وارد كنيد. با فرض اينكه آموزش پيش نياز APACHE را دنبال كرده باشيد، /var/www/your_domain خواهد بود.

3- براي بخش Months between automatic renewal ، گزينه Only renew manually را با وارد كردن 1 در جعبه ورودي كنسل كنيد، و دكمه راديو را در سمت چپ جعبه ورودي انتخاب كنيد.

روي دكمه  Request Certificate كليك كنيد. بعد از چند ثانيه ، صفحه تأييد را مشاهده خواهيد كرد.

براي استفاده از گواهينامه جديد ، روي دكمه بازگشت به پيكربندي Webmin   در صفحه تأييد كليك كنيد. از آن صفحه ، به پايين برويد و بر روي دكمه Restart Webmin كليك كنيد. حدود 30 ثانيه صبر كنيد و سپس صفحه را مجدد لود كنيد و دوباره وارد سيستم شويد. اكنون مرورگر شما بايد نشان دهد كه گواهي معتبر است.

مرحله 3 – استفاده از  Webmin

اكنون يك نمونه كار ايمن از Webmin تنظيم كرده ايد. بياييد نحوه استفاده از آن را بررسي كنيم.

Webmin  ماژول هاي مختلف زيادي دارد كه مي تواند همه چيز را از سرور مجازي BIND DNS گرفته تا چيزي به سادگي اضافه كردن كاربران به سيستم را كنترل كند. بياييد به نحوه ايجاد يك كاربر جديد بپردازيم و سپس نحوه به روزرساني بسته هاي سيستم خود را با استفاده از Webmin بررسي كنيم.

مديريت كاربران و گروه ها

ابتدا بر روي منوي System در نوار كناري سمت چپ كليك كرده و سپس روي لينك Users and Groups كليك كنيد. از اينجا مي توانيد كاربران و گروه ها را اضافه و مديريت كنيد.

بياييد كاربر جديدي به نام deploy ايجاد كنيم كه مي توانيد از آن براي ميزباني برنامه هاي وب استفاده كنيد. هنگام ايجاد كاربر ، مي توانيد گزينه هايي را براي انقضاء رمز عبور ، پوسته كاربر و اينكه آيا مجاز به ورود به ديركتوري هوم هستند ، تعيين كنيد.

براي افزودن كاربر ، روي Create a new user ، كه در بالاي جدول كاربران قرار دارد ، كليك كنيد. اين گزينه صفحه ايجاد كاربر را نمايش مي دهد ، در آنجا مي توانيد نام كاربري ، رمز عبور ، گروه ها و گزينه هاي ديگر را ايجاد كنيد. براي ايجاد كاربر اين دستورالعمل ها را دنبال كنيد:

1- نام كاربري را با deploy پر كنيد.

2- براي شناسه كاربر automatic را انتخاب كنيد.

3- real name را با نام توصيفي مانند deployment user پر كنيد.

4- براي Home Directory ، Automatic  را انتخاب كنيد.

5- براي Shell ، از ليست كشويي گزينه / bin / bash را انتخاب كنيد.

6- براي گذرواژه ، Normal Password  را انتخاب كرده و پسورد مورد نظر خود را تايپ كنيد.

7- براي primary group ، New group with same name as userرا انتخاب كنيد.

8- براي گروه ثانويه ، از ليست همه گروه ها sudo را انتخاب كنيد. بايد به طور خودكار به ليست In groups اضافه شود ، اما اگر اين گزينه نيست ، دكمه -> را فشار دهيد تا آن را اضافه كنيد.

براي ايجاد كاربر جديد روي create كليك كنيد. كاربرdeploy  را در يك ترتيب كوتاه ايجاد ميكند.

در مرحله بعدي ، بياييد ببينيم كه چگونه به روزرساني هاي سيستم خود را نصب كنيم.

به روزرساني بسته ها

Webmin  به شما امكان مي دهد همه بسته هاي خود را از طريق رابط كاربري آن به روز كنيد. براي به روزرساني همه بسته هاي خود ، ابتدا بر روي دكمه Dashboard در بالاي نوار كناري سمت چپ كليك كرده و سپس قسمت Update Package را پيدا كنيد. اگر به روزرساني وجود داشته باشد ، پيوندي را مشاهده مي كنيد كه تعداد به روزرساني هاي موجود را بيان مي كند.

براي شروع به روزرساني ، روي Update selected packages بزنيد تا به روز رساني شروع شود. ممكن است از شما خواسته شود كه سرور مجازي را ريبوت كنيد ، كه مي توانيد از طريق رابط Webmin نيز اين كار را انجام دهيد.

نتيجه

اكنون يك نمونه كار ايمن Webmin  داريد و از رابط كاربري براي ايجاد يك كاربر و به روزرساني بسته ها استفاده كرديد. Webmin  به شما امكان دسترسي به موارد زيادي را مي دهد كه به طور معمول بايد از طريق كنسول به آنها دسترسي پيدا كنيد ، و آنها را به روشي بصري سازماندهي مي كند. به عنوان مثال ، در صورت نصب Apache ، مي توانيد زبانه پيكربندي آن را در زير سرور مجازيها ، و سپس Apache پيدا كنيد.

رابط را جستجو كنيد يا براي يادگيري بيشتر درباره مديريت سيستم خود با Webmin ، مطالب Official Webmin wiki را مطالعه كنيد.

نحوه استفاده از 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 ارزان – 

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

۱۸ بازديد ۰ نظر

JupyterLab  يك رابط كاربري كاملاً غني از ويژگي هاي مختلف است كه انجام وظايف را به خصوص در زمينه علوم داده ها و هوش مصنوعي براي كاربران آسان مي كند. محيط هاي JupyterLab طراحي مجدد Jupyter Notebook را با محوريت بهره وري ارائه مي دهد. اين برنامه ابزاري مانند يك نمايشگر HTML داخلي و بيننده CSV را به همراه ويژگي هايي ارائه مي دهد كه چندين ويژگي مجزا از Jupyter Notebook را در همان صفحه جمع مي كند.

در اين آموزش ، JupyterLab  را روي سرور مجازي Ubuntu 18.04 خود نصب و تنظيم مي كنيد. همچنين مي توانيد سرور خود را پيكربندي كنيد تا بتواند از راه دور با هر نامي از مرورگر وب به طور ايمن و با استفاده از يك نام دامنه به نمونه  JupyterLab متصل شود.

پيش نيازها

براي تكميل اين آموزش ، به موارد زير نياز داريد:

  • سرور مجازي Ubuntu 18.04 با يك حساب كاربري غير ريشه با امتيازات sudo با استفاده از راهنماي ستاپ اوليه سرور.
  • نصب توزيع پايتون Anaconda روي سرور مجازيتان. مي توانيد از آموزش نحوه نصب  توزيع پايتون Anaconda  در اوبونتو 18.04 استفاده كنيد.
  • يك نام دامنه يا زير دامنه ثبت شده كه در آن به ويرايش ركورد DNS دسترسي داريد. در سراسر اين آموزش از your_domain استفاده خواهد كرد. مي توانيد دامنه ها را در Namecheap خريداري كنيد ، يك دامنه رايگان در Freenom  دريافت كنيد ، يا يك دامنه جديد را با هر نوع ثبت دلخواه خود ثبت كنيد.
  • سوابق DNS زير براي دامنه شما تنظيم شده باشد:

o يك ركورد A با your_domain كه آدرس IP عمومي سرور مجازي شما را نشان مي دهد.

O ركورد A با www.your_domain كه آدرس IP عمومي سرور مجازي شما را نشان مي دهد. مقاله نحوه ايجاد ، ويرايش و حذف اسناد  ركوردهاي DNS  مي تواند در تنظيم اين ركوردها به شما كمك كند.

مرحله 1 – تنظيم گذرواژه

در اين مرحله يك رمز عبور را روي نصب JupyterLab خود تنظيم خواهيد كرد. داشتن گذرواژه مهم است زيرا نمونه شما در دسترس عموم خواهد بود.

ابتدا مطمئن شويد كه محيط Anaconda شما فعال شده است. طبق آموزش پيش نياز محيط، base ناميده مي شود.

براي فعال كردن محيط ، از دستور زير استفاده كنيد:

  • $ conda activate base

اعلان شما در ترمينال تغيير خواهد كرد تا پايه محيط پيش فرض Anaconda  را منعكس كند:

(base) sammy@your_server:~$

كليه دستورات آينده در اين آموزش در محيط baseاجرا مي شود.

با فعال شدن محيط Anaconda ، مي توانيد يك رمز ورود براي JupyterLab را در سرور مجازي خود تنظيم كنيد.

ابتدا ، اجازه دهيد يك فايلbase پيكربندي براي  Jupyter ايجاد كنيم:

  • $ jupyter notebook –generate-config

خروجي زير را دريافت خواهيد كرد:

OutputWriting default config to: /home/sammy/.jupyter/jupyter_notebook_config.py

هم  JupyterLab و Jupyter Notebookيك فايل پيكربندي مشترك را دارند.

  • $ jupyter notebook password

اكنون ، از دستور زير براي تنظيم گذرواژه براي دسترسي به نمونه  JupyterLab خود از راه دور استفاده كنيد:

OutputEnter password:Verify password:[NotebookPasswordApp] Wrote hashed password to /home/sammy/.jupyter/jupyter_notebook_config.json

Jupyter  به شما اعلاني نشان مي خواهد كه رمز عبور مورد نظر خود را ارائه دهيد:

Jupyter  رمز عبور را با فرمت hashed در /home/sammy/.jupyter/jupyter_notebook_config.json ذخيره مي كند. در آينده به اين مقدار نياز خواهيد داشت.

در آخر ، براي مشاهده گذرواژه hashed ، از دستور cat در فايل توليد شده توسط دستور قبلي استفاده كنيد:

  • $ cat /home/sammy/.jupyter/jupyter_notebook_config.json

خروجي مشابه با موارد زير را دريافت خواهيد كرد:

/home/sammy/.jupyter/jupyter_notebook_config.json

{

“NotebookApp”: {

“password”: “sha1:your_hashed_password”

}

}

مقدار را در كليد رمز عبور JSON كپي كنيد و به طور موقت آن را ذخيره كنيد.

براي مثال JupyterLab يك گذرواژه تنظيم كرده ايد. در مرحله بعد يك گواهي Let’s Encrypt براي سرور مجازي خود ايجاد خواهيد كرد.

مرحله 2 – پيكربندي Let’s Encrypt

در اين مرحله ، يك گواهي Let’s Encrypt براي دامنه خود ايجاد خواهيد كرد. با دسترسي به محيط  JupyterLab از مرورگر ، داده هاي شما را ايمن مي كند.

ابتدا Certbot را روي سرور مجازي خود نصب خواهيد كرد. با اضافه كردن مخزن آن به منابع apt شروع كنيد:

  • $ sudo add-apt-repository ppa:certbot/certbot

پس از اجراي دستور ، از شما خواسته مي شود تا ENTER را فشار دهيد تا PPA را اضافه كنيد:

OutputThis is the PPA for packages prepared by Debian Let’s Encrypt Team and backported for Ubuntu. Note: Packages are only provided for currently supported Ubuntu releases. More info: https://launchpad.net/~certbot/+archive/ubuntu/certbotPress [ENTER] to continue or Ctrl-c to cancel adding it.

براي ادامه افزودن PPA ، ENTER  را فشار دهيد.

پس از پايان اجراي فرمان ، منابع را با استفاده از دستور apt update ريفرش كنيد:

  • $ sudo apt update

سپس ، Certbot  را نصب خواهيد كرد:

  • $ sudo apt install certbot

قبل از شروع به كار Certbot براي توليد گواهينامه ها براي مثال شما ، اجازه دسترسي به پورت: 80 و پورت: 443 سرور مجازي خود را مي دهيد تا Certbot بتواند از اين پورت ها براي تأييد نام دامنه شما استفاده كند. پورت: 80 براي درخواست هاي http به سرور مجازي بررسي مي شود در حالي كه پورت 443 براي درخواست هاي https استفاده مي شود. Certbot ابتدا يك درخواست http را ايجاد مي كند و پس از دريافت گواهينامه ها براي سرور مجازي شما ، يك درخواست https را ايجاد مي كند كه از طريق پورت از طريق پورت: 443 براي گوش دادن به پورت 80 پروكسي مي شود. با اين كار نصب گواه

ينامه ها با موفقيت تأييد خواهد شد.

ابتدا اجازه دسترسي به پورت 80: را بدهيد:

  • $ sudo ufw allow 80

خروجي زير را دريافت خواهيد كرد:

OutputRule addedRule added (v6)

سپس ، اجازه دسترسي به پورت: 443:

  • $ sudo ufw allow 443

Output

Rule added

Rule added (v6)

در آخر ، Certbot  را اجرا كنيد تا با استفاده از دستور زير ، گواهينامه هايي را براي مثال خود توليد كنيد:

  • $ sudo certbot certonly –standalone

پرچم standalone  ، certbot  را براي اجراي يك سرور مجازي موقت براي مدت زمان بررسي تأييد مي كند.

ايميل شما را درخواست مي كند:

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.logPlugins selected: Authenticator standalone, Installer NoneEnter email address (used for urgent renewal and security notices) (Enter ‘c’ tocancel): your_email

يك ايميل فعال را وارد كنيد و ENTER را فشار دهيد.

در مرحله بعد ، از شما خواسته خواهد شد تا شرايط سرويس هاي Certbot و Let’s Encrypt t را مرور و تاييد كنيد. شرايط را مطالعه كنيد اگر قبول كرديد ، A را تايپ كنيد و ENTER را فشار دهيد:

Output- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – -Please read the Terms of Service athttps://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You mustagree in order to register with the ACME server athttps://acme-v02.api.letsencrypt.org/directory- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – -(A)gree/(C)ancel: A

اكنون از شما خواسته مي شود كه ايميل خود را با بنياد الكترونيكي Frontier به اشتراك بگذاريد. پاسخ خود را تايپ كنيد و ENTER  را فشار دهيد:

Output- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – -Would you be willing to share your email address with the Electronic FrontierFoundation, a founding partner of the Let’s Encrypt project and the non-profitorganization that develops Certbot? We’d like to send you email about our workencrypting the web, EFF news, campaigns, and ways to support digital freedom.- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – -(Y)es/(N)o: Y/N

در آخر ، از شما خواسته مي شود نام دامنه خود را وارد كنيد. نام دامنه خود را بدون هيچ گونه مشخصات پروتكل وارد كنيد:

OutputPlease enter in your domain name(s) (comma and/or space separated)  (Enter ‘c’to cancel): your_domainObtaining a new certificatePerforming the following challenges:http-01 challenge for your_domainWaiting for verification…Cleaning up challenges IMPORTANT NOTES: – Congratulations! Your certificate and chain have been saved at:   /etc/letsencrypt/live/your_domain/fullchain.pem   Your key file has been saved at:   /etc/letsencrypt/live/your_domain/privkey.pem   Your cert will expire on 2020-09-28. To obtain a new or tweaked   version of this certificate in the future, simply run certbot   again. To non-interactively renew *all* of your certificates, run   “certbot renew” – Your account credentials have been saved in your Certbot   configuration directory at /etc/letsencrypt. You should make a   secure backup of this folder now. This configuration directory will   also contain certificates and private keys obtained by Certbot so   making regular backups of this folder is ideal. – If you like Certbot, please consider supporting our work by:    Donating to ISRG / Let’s Encrypt:   https://letsencrypt.org/donate   Donating to EFF:                    https://eff.org/donate-le

Certbot تأييد دامنه را انجام خواهد داد و گواهي و كليد براي دامنه شما را ايجاد ميكند و آنها در / etc / letsencrypt / live / your_domain ذخيره ميكند.

اكنون كه گواهي Let’s Encrypt خود را تنظيم كرده ايد ، فايل پيكربندي JupyterLab خود را به روز خواهيد كرد.

مرحله 3 – پيكربندي  JupyterLab

در اين مرحله ، پيكربندي JupyterLab را ويرايش مي كنيد تا مطمئن شويد كه از گواهي Let’s Encrypt كه در مرحله 2 ايجاد كرده ايد استفاده مي كند. همچنين مي توانيد با استفاده از رمز عبور تنظيم شده در مرحله 1 ، آن را در دسترس قرار دهيد.

ابتدا بايد پيكربندي JupyterLab را در /home/sammy/.jupyter/jupyter_notebook_config.py ويرايش كنيد:

  • $ nano /home/sammy/.jupyter/jupyter_notebook_config.py

اكنون به خطي كه مقدار c.NotebookApp.certfile را تعريف مي كند برويد و به شرح زير آن را به روز كنيد:

/home/sammy/.jupyter/jupyter_notebook_config.py

## The full path to an SSL/TLS certificate file.

c.NotebookApp.certfile = ‘/etc/letsencrypt/live/your_domain/fullchain.pem’

سپس ، متغير c.NotebookApp.keyfile را پيدا كنيد و آن را مطابق زير تغيير دهيد:

/home/sammy/.jupyter/jupyter_notebook_config.py

## The full path to a private key file for usage with SSL/TLS.

c.NotebookApp.keyfile = ‘/etc/letsencrypt/live/your_domain/privkey.pem’

c.NotebookApp.certfile و c.NotebookApp.keyfile به گواهي SSLاشاره مي كنند كه وقتي سعي مي كنيد از راه دور با استفاده از پروتكل https به سرور مجازي خود دسترسي پيدا كنيد ، ارائه مي شود.

در مرحله بعد ، به خط تعريف متغير c.NotebookApp.ip برويد و به شرح زير به روز كنيد:

/home/sammy/.jupyter/jupyter_notebook_config.py

## The IP address the notebook server will listen on.

c.NotebookApp.ip = ‘*’

c.NotebookApp.ip  IP  هايي را تعريف مي كند كه مي توانند به سرور مجازي شما دسترسي پيدا كنند. آن را روي * wildcard قرار داده ايد تا از هر رايانه اي كه براي دسترسي به JupyterLab لازم داريد دسترسي داشته باشيد.

سپس ، پيكربندي c.NotebookApp.open_browser را پيدا كنيد و به شرح زير آن را به روز كنيد:

/home/sammy/.jupyter/jupyter_notebook_config.py

## Whether to open in a browser after starting. The specific browser used is

#  platform dependent and determined by the python standard library `webbrowser`

#  module, unless it is overridden using the –browser (NotebookApp.browser)

#  configuration option.

c.NotebookApp.open_browser = False

به طور پيش فرض ، JupyterLab  سعي مي كند به طور خودكار بخش مرورگر را شروع كند. از آنجا كه در سرور مجازي راه دور مرورگر نداريم ، لازم است آن را خاموش كنيد تا از خطاها جلوگيري شود.

در مرحله بعد ، به متغير c.NotebookApp.password برويد و آن را به شرح زير تغيير دهيد:

/home/sammy/.jupyter/jupyter_notebook_config.py

## Hashed password to use for web authentication.

#

#  To generate, type in a python/IPython shell:

#

#    from notebook.auth import passwd; passwd()

#

#  The string should be of the form type:salt:hashed-password.

c.NotebookApp.password = ‘your_hashed_password’

JupyterLab از اين پيكربندي پسورد رمزگذاري شده براي بررسي رمز عبور وارد شده جهت دسترسي به مرورگر شما استفاده مي كند.

در آخر ، بيشتر فايل را بررسي كنيد و ورودي c.NotebookApp.port را به روز كنيد:

/home/sammy/.jupyter/jupyter_notebook_config.py

## The port the notebook server will listen on.

c.NotebookApp.port = 9000

c.NotebookApp.port  براي دسترسي به زمان اجراي JupyterLab يك پورت ثابت تعيين مي كند. به اين ترتيب ، مي توانيد فقط از يك فايروال ufw به يك پورت دسترسي داشته باشيد.

پس از اتمام كار ، فايل را ذخيره كنيد و خارج شويد.

سرانجام ، اجازه عبور در پورت 9000 را بدهيد:

  • $ sudo ufw allow 9000

خروجي زير را دريافت خواهيد كرد:

OutputRule addedRule added (v6)

اكنون كه پيكربندي خود را تنظيم كرده ايد ، JupyterLab را اجرا خواهيد كرد.

مرحله 4 – اجراي  JupyterLab

در اين مرحله ، يك مثال آزمايشي از نمونه JupyterLab را انجام مي دهيد.

ابتدا دايركتوري فعلي خود را به ديركتوري هوم كاربر تغيير دهيد:

  • $ cd ~

اكنون مجوزهاي دسترسي فايل هاي گواهينامه را اصلاح كنيد تا JupyterLab بتواند به آنها دسترسي پيدا كند. مجوزهاي پوشه / etc / letsencrypt را به موارد زير تغيير دهيد:

  • $ sudo chmod 750 -R /etc/letsencrypt
  • $ sudo chown sammy:sammy -R /etc/letsencrypt

سپس ، به مثال JupyterLab خود مراجعه كنيد تا از دستور زير استفاده كنيد:

  • jupyter lab

اين دستور چندين پارامتر پيكربندي را مي پذيرد. با اين حال ، از آنجا كه ما قبلاً اين تغييرات را در فايل پيكربندي ايجاد كرده ايم ، نيازي به ارائه صريح آنها در اينجا نداريم. شما مي توانيد آنها را به عنوان آرگومان هايي براي اين دستور براي غلبه بر مقادير موجود در فايل پيكربندي ارائه دهيد.

اكنون مي توانيد به https: // your_domain: 9000 برويد تا صفحه ورود به سيستم JupyterLab را دريافت كنيد.

اگر با گذرواژه اي كه براي مرحله دوم 2 براي JupyterLab تنظيم كرده ايد وارد شويد ، رابط JupyterLab به شما ارائه مي شود.

محيط JupyterLab در اوبونتو 18.04

در آخر ، دوبار CTRL + C را فشار دهيد تا سرور مجازي JupyterLab متوقف شود.

در مرحله بعد ، يك سرويس سيستمي را تنظيم مي كنيد تا سرور مجازي JupyterLab بطور مداوم در پس زمينه اجرا شود.

مرحله ششم – تنظيم يك سرويس سيستمي

در اين مرحله ، شما يك سرويس سيستمي ايجاد خواهيد كرد كه به JupyterLab اجازه مي دهد تا حتي در هنگام خروج از پنجره ترمينال ، عملكرد خود را ادامه دهد. مي توانيد اطلاعات بيشتر در مورد خدمات سيستمي و واحدهاي موجود در اين راهنما را در مورد ملزومات systemd مطالعه كنيد.

در ابتدا ، بايد با استفاده از دستور زير ، يك فايل .service ايجاد كنيد:

  • $ sudo nano /etc/systemd/system/jupyterlab.service

محتواي زير را به فايل /etc/systemd/system/jupyterlab.service اضافه كنيد:

/etc/systemd/system/jupyterlab.service

[Unit]

Description=Jupyter Lab Server

[Service]

User=sammy

Group=sammy

Type=simple

WorkingDirectory=/home/sammy/

ExecStart=/home/sammy/anaconda3/bin/jupyter-lab –config=/home/sammy/.jupyter/jupyter_notebook_config.py

StandardOutput=null

Restart=always

RestartSec=10

[Install]

WantedBy=multi-user.target

پس از انجام كار ويرايشگر را ذخيره كرده و از آن خارج شويد.

فايل سرويس به صورت خودكار خود را در سيستم به عنوان يك Daemon ثبت مي كند. اما به طور پيش فرض اجرا نمي شود.

براي شروع سرويس از دستور systemctl استفاده كنيد:

  • $ sudo systemctl start jupyterlab

اين كار سرور مجازي JupyterLab را در پس زمينه شروع مي كند. مي توانيد با استفاده از دستور زير سرور مجازي را بررسي كنيد:

  • $ sudo systemctl status jupyterlab

خروجي زير را دريافت خواهيد كرد:

Output● jupyterlab.service – Jupyter Lab Server   Loaded: loaded (/etc/systemd/system/jupyterlab.service; disabled; vendor preset: enabled)   Active: active (running) since Sun 2020-04-26 20:58:29 UTC; 5s ago Main PID: 5654 (jupyter-lab)    Tasks: 1 (limit: 1152)   CGroup: /system.slice/jupyterlab.service           └─5654 /home/sammy/anaconda3/bin/python3.7 /home/sammy/anaconda3/bin/jupyter-lab –config=/home/

Q را فشار دهيد تا از خروجي وضعيت سرويس خارج شويد.

اكنون مي توانيد به https: // your_domain: 9000 در هر مرورگر مورد نظر خود برويد ، رمز عبوري را كه در مرحله 2 تنظيم كرده ايد تهيه كنيد و به محيط JupyterLab كه روي سرور مجازي خود كار مي كند دسترسي پيدا كنيد.

مرحله 7 – پيكربندي تجديد گواهي Let’s Encrypt

در اين مرحله آخر ، گواهينامه هاي SSL خود را كه توسط Let’s Encrypt تهيه شده است پيكربندي مي كنيد تا هر 90 روز يكبار به طور خودكار تمديد شود و سپس سرور مجازي را مجدداً ريستارت كنيد تا گواهي هاي جديد لود شود.

در حالي كه Certbot از تجديد گواهينامه هاي نصب شما مراقبت مي كند ، به طور خودكار سرور مجازي مجدداً راه اندازي نمي شود. براي پيكربندي سرور مجازي براي راه اندازي مجدد با گواهينامه هاي جديد ، بايد يك پيكربندي جديد براي تنظيمات Certbot براي سرور مجازي خود تهيه كنيد.

بايد فايل /etc/letsencrypt/renewal/your_domain.conf را ويرايش كرده و يك فايل تازه را به انتهاي فايل پيكربندي اضافه كنيد.

ابتدا از دستور زير براي باز كردن فايل /etc/letsencrypt/renewal/your_domain.conf در ويرايشگر استفاده كنيد:

  • $ sudo nano /etc/letsencrypt/renewal/your_domain.conf

سپس در انتهاي اين فايل موارد زير را اضافه كنيد

/etc/letsencrypt/renewal/your_domain.conf

renew_hook = systemctl reload jupyterlab

فايل را ذخيره كنيد و از آن خارج شويد.

در آخر ، دور جديدي از روند تجديد را اجرا كنيد تا صحت اعتبار فايل پيكربندي شما تاييد شود:

  • $ sudo certbot renew –dry-run

اگر اين دستور بدون خطا اجرا شود ، تجديد Certbot شما با موفقيت تنظيم شده است و هنگامي كه گواهي نزديك به تاريخ انقضا است ، سرور مجازي خود را به طور خودكار تمديد و ريستارت مي كنيد.

نتيجه

در اين مقاله ، شما يك محيط JupyterLab را بر روي سرور مجازي خود تنظيم كرده و آن را از راه دور در دسترس قرار داده ايد. اكنون مي توانيد از هر مرورگري به پروژه هاي يادگيري ماشين يا علوم داده خود دسترسي داشته باشيد و مطمئن باشيد كه تمام تبادلات با رمزگذاري SSL در محل اتفاق مي افتد. در كنار آن ، محيط شما داراي تمام مزاياي سرور مجازيهاي مبتني بر ابر ميباشد.

نحوه استفاده از 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 ارزان – 

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

۲۱ بازديد ۰ نظر

Redis  يك فروشگاه ساختار داده منبع باز با حافظه داخلي است كه به دليل انعطاف پذيري ، عملكرد و پشتيباني گسترده زباني شناخته شده است.

Redis براي استفاده كلاينت هاي مورد اعتماد در يك محيط قابل اعتماد طراحي شده است و از نظر امنيتي ويژگي هاي قدرتمندي ندارد. با اين حال ، Redis چند ويژگي امنيتي دارد كه شامل يك پسورد رمزگذاري نشده و دستور تغيير نام و غيرفعال كردن است. اين آموزش دستورالعمل هايي در مورد چگونگي پيكربندي اين ويژگي هاي امنيتي را ارائه مي دهد ، همچنين چند تنظيمات ديگر را نيز شامل مي شود كه مي تواند باعث افزايش امنيت نصب مستقل Redis در CentOS 7 شود.

توجه داشته باشيد كه اين راهنما به موقعيت هايي كه سرور مجازي Redis و برنامه هاي كلاينت در هاست هاي مختلف يا در مراكز داده هاي مختلف هستند ، نمي پردازد. نصب هايي كه ترافيك Redis مجبور است از يك شبكه ناايمن يا غير قابل اعتماد عبور كند ، به مجموعه ديگري از تنظيمات ، مانند راه اندازي يك پروكسي SSL يا اين نام مجاز نمي باشد بين دستگاه هاي Redis نياز دارد.

پيش نيازها

براي تكميل اين راهنما ، به يك سرور مجازي Centos7 كه با دنبال كردن راهنماي راه اندازي سرور مجازي اوليه ما تنظيم شده نياز داريد.

يك فايروال نصب و پيكربندي شده، به روز و شامل مرحله Turning on the Firewall.

با انجام اين پيش نياز ها آماده نصب Redis و اجراي برخي كارهاي پيكربندي اوليه خواهيم بود.

مرحله 1 – نصب Redis

قبل از نصب Redis ، ابتدا بايد بسته هاي اضافي براي منبع Enterprise Linux  (EPEL) را به ليست بسته هاي سرور مجازي اضافه كنيم. EPEL يك مخزن بسته است كه شامل تعدادي بسته نرم افزاري اضافي منبع باز است كه بيشتر آنها توسط پروژه Fedora نگهداري مي شوند.

ما مي توانيم EPEL را با استفاده از yum نصب كنيم:

  • $ sudo yum install epel-release

پس از پايان نصب EPEL ، مي توانيد Redis را نصب كنيد ، دوباره با استفاده از yum:

  • $ sudo yum install redis -y

انجام اين كار ممكن است چند دقيقه طول بكشد. پس از اتمام نصب ، سرويس Redis را شروع كنيد:

  • $ sudo systemctl start redis.service

 

اگر مي خواهيد Redis از بوت شروع شود ، مي توانيد آن را با دستور enable  فعال كنيد:

  • $ sudo systemctl enable redis

با اجراي موارد زير مي توانيد وضعيت Redis را بررسي كنيد:

  • $ sudo systemctl status redis.service

Output

  • redis.service – Redis persistent key-value database

Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)

Drop-In: /etc/systemd/system/redis.service.d

└─limit.conf

Active: active (running) since Thu 2018-03-01 15:50:38 UTC; 7s ago

Main PID: 3962 (redis-server)

CGroup: /system.slice/redis.service

└─3962 /usr/bin/redis-server 127.0.0.1:6379

 

هنگامي كه تأييد كرديد Redis در حال اجرا است ، با اين دستور ستاپ را امتحان كنيد:

  • $ redis-cli ping

 

اين بايد PONG را به عنوان پاسخ چاپ كند. اگر اين گونه باشد ، به اين معني است كه شما اكنون Redis را در سرور مجازي خود اجرا كرده و ما مي توانيم پيكربندي آن را براي افزايش امنيت آن آغاز كنيم.

مرحله 2 – اتصال Redis و ايمن سازي آن با فايروال

يك روش موثر براي محافظت از Redis ، ايمن سازي سروري است كه روي آن اجرا ميشود. شما مي توانيد اين كار را با اطمينان حاصل كردن از اين كه Redis فقط به localhost يا يك آدرس IP خصوصي متصل است و اينكه سرور مجازي داراي فايروال و به روز است اين كار را انجام دهيد.

با اين حال ، اگر با استفاده از اين آموزش خوشه Redis را راه اندازي كرده ايد ، پس فايل پيكربندي را به روز كرده ايد تا از هرجايي اتصال برقرار شود ، اين امنيت به اندازه اتصال به localhost يا IP خصوصي نيست.

براي رفع اين مشكل ، فايل پيكربندي Redis را براي ويرايش باز كنيد:

  • $ sudo vi /etc/redis.conf

ابتدا خطي كه با BIND شروع ميشود پيدا كنيد و مطمئن شويد كه خارج شده است:

/etc/redis.conf

bind 127.0.0.1

 

اگر لازم است Redis را به آدرس IP ديگري متصل كنيد (مانند مواردي كه از يك ميزبان جداگانه به Redis دسترسي پيدا خواهيد كرد) به شما توصيه مي كنيم آن را به يك آدرس IP خصوصي متصل كنيد. اتصال به يك آدرس IP عمومي ، قرار گرفتن در معرض رابط Redis شما را در برابر طرف هاي خارجي افزايش مي دهد.

/etc/redis.conf

bind your_private_ip

 

اگر پيش نيازها را دنبال كرده و firewalld را بر روي سرور مجازي خود نصب كرده ايد و قصد نداريد از ميزبان ديگري به Redis متصل شويد ، ديگر نيازي به افزودن قوانين فايروال اضافي براي Redis نداريد. از اين گذشته ، هرگونه ترافيك ورودي به طور پيش فرض كاهش مي يابد مگر اينكه صريحاً توسط قوانين فايروال اجازه داده شود. از آنجا كه نصب مستقل پيش فرض سرور مجازي Redis فقط به رابط loopback (127.0.0.1 يا localhost) گوش مي كند ، ديگر نبايد نگراني براي ترافيك ورودي در پورت پيش فرض آن وجود داشته باشد.

اگر مي خواهيد از ميزبان ديگري به Redis دسترسي پيدا كنيد ، بايد با استفاده از دستور firewall-cmd تغييراتي در پيكربندي firewalld خود ايجاد كنيد. باز هم ، فقط بايد با استفاده از آدرس IP خصوصي هاست ها ، به سرور مجازي Redis خود اجازه دسترسي دهيد تا تعداد هاست هايي كه سرويس شما در معرض آنهاست را محدود كنيد.

براي شروع ، يك منطقه اختصاصي Redis را به رويكرد فايروال خود اضافه كنيد:

  • $ sudo firewall-cmd –permanent –new-zone=redis

سپس مشخص كنيد كدام پورت را مي خواهيد باز كنيد. Redis به طور پيش فرض از پورت6397 استفاده مي كند:

  • $ sudo firewall-cmd –permanent –zone=redis –add-port=6379/tcp

 

سپس ، آدرسهاي IP خصوصي را كه بايد از طريق فايروال عبور كرده و به Redis دسترسي پيدا كنند ، مشخص كنيد:

  • $ sudo firewall-cmd –permanent –zone=redis –add-source=client_server_private_IP

پس از اجراي اين دستورات ، فايروال را دانلود كنيد تا قوانين جديد را اجرا كنيد:

  • $ sudo firewall-cmd –reload

 

تحت اين پيكربندي ، هنگامي كه فايروال بسته اي را از آدرس IP كلاينت شما مشاهده مي كند ، قوانيني را در منطقه اختصاصي Redis براي آن اتصال اعمال مي كند. ساير اتصالات توسط منطقه عمومي پيش فرض پردازش مي شوند. سرويس هاي موجود در منطقه پيش فرض براي هر اتصال اعمال مي شوند ، نه فقط براي سرويس هايي كه به وضوح مطابقت ندارند ، بنابراين نيازي نيست كه سرويس هاي ديگري (به عنوان مثال SSH) را به منطقه Redis اضافه كنيد زيرا اين قوانين به طور خودكار براي آن اتصال اعمال مي شوند.

اگر تصميم به ايجاد فايروال با استفاده از Iptables كرده ايد ، لازم است مجوزهاي ثانويه خود را به پورت Redis با دستورات زير دسترسي دهيد:

  • $ sudo iptables -A INPUT -i lo -j ACCEPT
  • $ sudo iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
  • $ sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 –dport 6397 -m conntrack –ctstate NEW,ESTABLISHED -j ACCEPT
  • $ sudo iptables -P INPUT DROP

 

اطمينان حاصل كنيد كه قوانين فايروال Iptables خود را با استفاده از مكانيزم ارائه شده توسط توزيع ذخيره كنيد. با نگاهي به راهنماي ملزومات Iptables مي توانيد درباره Iptables بيشتر بياموزيد.

به خاطر داشته باشيد كه استفاده از هر دو ابزار فايروال كار مي كند. نكته مهم اين است كه فايروال در حال كار است و به گونه اي انجام مي شود كه افراد ناشناس نتوانند به سرور مجازي شما دسترسي پيدا كنند. در مرحله بعدي ، Redis را پيكربندي مي كنيم تا فقط با يك رمز عبور قوي قابل دسترسي باشد.

مرحله 3 – پيكربندي رمز عبور Redis

اگر Redis را با استفاده از آموزش نحوه پيكربندي خوشه Redis  در CentOS 7 نصب كرده ايد ، بايد يك رمز عبور براي آن پيكربندي كرده باشيد. بنا به صلاحديد خود ، مي توانيد با دنبال كردن اين بخش يك رمز عبور ايمن تر ايجاد كنيد. اگر هنوز رمز عبوري تنظيم نكرده ايد ، دستورالعمل هاي موجود در اين بخش نحوه تنظيم رمز سرور مجازي پايگاه داده را نشان مي دهد.

پيكربندي رمز عبور Redis يكي از دو ويژگي امنيتي داخلي خود را ايجاد مي كند – دستور auth ، كه به تاييد اعتبار كلاينت ها براي دسترسي به پايگاه داده نياز دارد. رمز عبور مستقيماً در فايل پيكربندي Redis ، /etc/redis/redis.conf  پيكربندي شده است ، بنابراين دوباره آن فايل را با ويرايشگر مورد نظر خود باز كنيد:

$ sudo vi /etc/redis.conf

به بخش SECURITY برويد و به دنبال دستورالعملي باشيد كه وظيفه خواندن را دارد:

/etc/redis.conf

# requirepass foobared

 

با حذف # آن را لغو كنيد و foobared  را به يك رمزعبور امن تغيير دهيد. به جاي اينكه خودتان يك رمز عبور بسازيد ، ممكن است از ابزاري مانند apg يا pwgen براي توليد آن استفاده كنيد. اگر نمي خواهيد يك برنامه فقط براي توليد گذرواژه نصب كنيد ، مي توانيد از دستور زير استفاده كنيد.

 

توجه داشته باشيد كه وارد كردن اين دستور به صورت نوشته شده هر بار رمز عبور يكساني را ايجاد مي كند. براي ايجاد رمز عبور متفاوت از رمز عبوري كه با اين كار ايجاد مي شود ، كلمه را در صورت نقل قول به هر كلمه يا عبارت ديگري تغيير دهيد.

·         $  echo “digital-ocean” | sha256sum

 

اگرچه رمز ورود ايجاد شده قابل تلفظ نيست ، اما يك رمز بسيار قوي و طولاني است كه دقيقاً همان نوع رمز مورد نياز Redis است. پس از كپي و پيست كردن خروجي آن دستور به عنوان مقدار جديد براي Requirese ، به اين صورت خواهد بود:

/etc/redis.conf

requirepass password_copied_from_output

 

اگر رمز عبور كوتاه تري را ترجيح مي دهيد ، به جاي آن از خروجي دستور زير استفاده كنيد. دوباره ، كلمه را به صورت نقل قول تغيير دهيد تا رمز عبور مشابه اين رمز ايجاد نشود:

·         $ echo “digital-ocean” | sha1sum·

پس از تنظيم پسورد فايل را ذخيره كنيد و ببنديد و Redis را ريستارت كنيد:

  • $ sudo systemctl restart redis.service

سپس براي بررسي كاركرد گذرواژه، به خط فرمان Redis دسترسي پيدا كنيد:

  • $ redis-cli

در زير توالي دستورات مورد استفاده براي تست رمز Redis وجود دارد. دستور اول سعي مي كند قبل از تأييد اعتبار ، كليد را روي يك مقدار تنظيم كند:

  • 0.0.1:6379> set key1 10

اين رمز كار نخواهد كرد زيرا شما تأييد اعتبار نكرديد ، بنابراين Redis خطايي را برمي گرداند:

Output(error) NOAUTH Authentication required.

 

دستور بعدي با گذرواژه مشخص شده در فايل پيكربندي Redis تأييد اعتبار مي كند:

  • 0.0.1:6379> auth your_redis_password

Redis تاييد مي كند:

OutputOK

پس از آن ، اجراي دوباره فرمان قبلي موفق خواهد بود:

  • 0.0.1:6379> set key1 10

Output

OK

 

دستور get key1 مقدار كليد جديد را از Redis جستجو ميكند.

  • 0.0.1:6379> get key1

Output

“10”

 

با دستور آخر يعني redis-cli ميتوانيد خارج شويد:

  • 0.0.1:6379> quit

اكنون دسترسي به نصب Redis براي كاربران غيرمجاز بسيار دشوار است. البته توجه داشته باشيد كه اگر از راه دور به Redis متصل شويد ، بدون SSL يا اين نام مجاز نمي باشد پسورد رمزگذاري نشده براي اشخاص خارجي قابل مشاهده خواهد بود.

در مرحله بعدي ، براي محافظت بيشتر از Redis در برابر حملات مخرب ، به تغيير دستورات Redis خواهيم پرداخت.

مرحله 5 – تغيير نام دستورات خطرناك

ويژگي امنيتي ديگر كه در Redis قرار داده شده ، تغيير نام يا غيرفعال كردن كامل فرامين خاصي است كه خطرناك به نظر مي رسند.هنگامي كه اين دستورات توسط كاربران غيرمجاز اجرا مي شوند ، مي توانند براي پيكربندي ، از بين بردن يا پاك كردن داده هاي شما استفاده شوند. برخي از دستوراتي كه خطرناك به حساب مي آيند عبارتند از

  • FLUSHDB
  • FLUSHALL
  • KEYS
  • PEXPIRE
  • DEL
  • CONFIG
  • SHUTDOWN
  • BGREWRITEAOF
  • BGSAVE
  • SAVE
  • SPOP
  • SREM RENAME DEBUG

 

اين يك ليست جامع نيست ، اما تغيير نام يا غيرفعال كردن كليه دستورات موجود در آن ليست ، نقطه شروع خوبي براي افزايش امنيت سرور مجازي Redis شما است.

اين كه آيا شما بايد يك فرمان را غيرفعال كنيد يا تغيير نام دهيد ، به نيازهاي خاص شما يا نيازهاي سايت شما بستگي دارد. اگر مي دانيد هرگز از دستوري كه مورد سوءاستفاده قرار مي گيرد استفاده نمي كنيد ، مي توانيد آن را غيرفعال كنيد. در غير اين صورت ، نام آن مفيد را تغيير دهيد.

مانند رمز عبور احراز هويت ، تغيير نام يا غيرفعال كردن دستورات در قسمت SECURITY فايل /etc/redis.conf پيكربندي شده است. براي فعال يا غيرفعال كردن دستورات Redis ، يك بار ديگر فايل پيكربندي را براي ويرايش باز كنيد:

·         $ sudo vi  /etc/redis.conf

هشدار: اين ها چند نمونه مثال است. فقط بايد غيرفعال كردن يا تغيير نام دستوراتي كه منطقي ميباشد را انتخاب كنيد. مي توانيد ليست كامل دستورات را براي خود مرور كنيد و نحوه استفاده آنها در redis.io/commands  را تعيين كنيد.

براي غيرفعال كردن يك دستور ، كافي است آن را به يك رشته خالي تغيير دهيد ، همانطور كه در زير نشان داده شده:

/etc/redis.conf

# It is also possible to completely kill a command by renaming it into

# an empty string:

#

rename-command FLUSHDB “”

rename-command FLUSHALL “”

rename-command DEBUG “”

 

براي تغييرنام يك فرمان، نام ديگري مانند زير به آن بدهيد. حدس زدن فرمان هاي تغيير نام يافته بايد براي ديگران دشوار باشد اما به راحتي بتوانيد آن ها را به خاطر بسپاريد.

/etc/redis.conf

rename-command CONFIG “”

rename-command SHUTDOWN SHUTDOWN_MENOT

rename-command CONFIG ASC12_CONFIG

 

تغييرات خود را ذخيره كرده و فايل را ببنديد و سپس با راه اندازي مجدد Redis ، تغيير را اعمال كنيد:

·         $ sudo systemctl restart redis.service

براي آزمايش دستور جديد ، وارد خط فرمان Redis شويد:

  • $ redis-cli

سپس ، تأييد اعتبار كنيد:

  • 0.0.1:6379> auth your_redis_password

Output

OK

فرض كنيم كه شما دستور CONFIG را مانند مثال قبل به  ASC12_CONFIGتغيير نام داديد . ابتدا سعي كنيد از دستور اصلي CONFIG  استفاده كنيد. بايد با شكست مواجه شود ، زيرا آن را تغيير نام داده ايد:

  • 0.0.1:6379> config get requirepass

Output

(error) ERR unknown command ‘config’

 

با اين وجود فراخواني فرمان تغيير نام داده شده موفقيت آميز خواهد بود. به كوچك و بزرگ بودن كاراكترها حساس نيست:

  • 0.0.1:6379> asc12_config get requirepass

Output

1) “requirepass”

2) “your_redis_password”

 

درنهايت ، مي توانيد از redis-cli خارج شويد:

  • 0.0.1:6379> exit

 

توجه داشته باشيد كه اگر قبلاً از خط فرمان Redis استفاده كرده ايد و دوباره Redis را ريستارت كرده ايد ، بايد مجددا تأييد اعتبار كنيد. در غير اين صورت ، اگر يك دستور تايپ كنيد ، اين خطا را دريافت خواهيد كرد:

OutputNOAUTH Authentication required.

 

به خاطر تغيير نام دستورات ، در پايان بخش SECURITY در /etc/redis/redis.conf يك عبارت هشدار وجود دارد:

/etc/redis.conf

. . . # Please note that changing the name of commands that are logged into the# AOF file or transmitted to slaves may cause problems. . . .

اين بدان معناست كه اگر دستور تغيير نام يافته در فايل AOF نباشد ، يا اگر موجود باشد اما فايل AOF به slaves ارسال نشده باشد ، ديگر مشكلي وجود نخواهد داشت.بنابراين ، هنگام تغيير نام دستورات ، اين را به خاطر داشته باشيد. بهترين زمان براي تغيير نام يك فرمان زماني است كه شما از ماندگاري AOF استفاده نمي كنيد ، يا درست بعد از نصب ، يعني قبل از استقرار برنامه مبتني بر Redis.

هنگامي كه از AOF استفاده مي كنيد و با يك نصب master slave سرو كار داريد ، اين پاسخ را از صفحه صدور GitHub پروژه در نظر بگيريد.

بنابراين ، بهترين روش براي تغيير نام در مواردي از اين دست ، اين است كه مطمئن شويد دستورات تغيير نام يافته به تمام مثال هاي نصب هاي master-slave اعمال ميشود.

مرحله 5 – تنظيم مالكيت دايركتوري داده و مجوزهاي پرونده

در اين مرحله ، ما تغييرات مالكيت و مجوزهايي را كه مي توانيد براي بهبود نمايه امنيتي نصب Redis خود ايجاد كنيد ، در نظر خواهيم گرفت. اين شامل اطمينان از اين است كه فقط كاربري كه بايد به Redis دسترسي پيدا كند اجازه خواندن اطلاعات آن را دارد. اين كاربر به طور پيش فرض ، كاربر redis است.

اين را مي توانيد با grep-ing براي ديركتوري داده Redis در ليست طولاني ديركتوري اصلي خود تأييد كنيد. دستور و خروجي آن در زير آورده شده است.

  • $ ls -l /var/lib | grep redis

Output

drwxr-xr-x 2 redis   redis   4096 Aug  6 09:32 redis

 

مي بينيد كه دايركتوري داده Redis متعلق به كاربر redis است و دسترسي ثانويه به گروه redis اعطا مي شود. اين تنظيم مالكيت ايمن است ، اما مجوزهاي پوشه (كه روي 755 تنظيم شده است) اينگونه نيست. براي اطمينان از دسترسي انحصاري كاربر Redis به پوشه و محتويات آن ، تنظيمات مجوزها را به 770 تغيير دهيد:

  • $ sudo chmod 770 /var/lib/redis

 

مجوز ديگري كه بايد تغيير دهيد ، فايل پيكربندي Redis است. به طور پيش فرض ، داراي مجوز فايل 644 است و توسط root متعلق به مالكيت ثانويه توسط گروه root است:

  • $ ls -l /etc/redis.conf

Output

-rw-r–r– 1 root root 30176 Jan 14  2014 /etc/redis.conf

 

اين مجوز (644) به صورت سراسر جهاني قابل خواندن است. اين يك مشكل امنيتي است زيرا فايل پيكربندي حاوي پسورد رمزگذاري نشده اي است كه در مرحله 4 پيكربندي كرده ايد ، به اين معني كه ما بايد مالكيت و مجوزهاي فايل پيكربندي را تغيير دهيم. در حالت ايده آل ، اين مالكيت بايد توسط كاربر redis و با مالكيت ثانويه توسط گروه redis باشد. براي انجام اين كار ، دستور زير را اجرا كنيد:

  • $ sudo chown redis:redis /etc/redis.conf

سپس مجوزها را تغيير دهيد تا فقط صاحب فايل بتواند آن را بخواند و يا بنويسد:

  • $ sudo chmod 600 /etc/redis.conf

 

شما مي توانيد مالكيت و مجوزهاي جديد را با استفاده از موارد زير تأييد كنيد:

  • $ ls -l /etc/redis.conf

Output

total 40

-rw——- 1 redis redis 29716 Sep 22 18:32 /etc/redis.conf

 

در آخر ، Redis را دوباره راه اندازي كنيد:

  • $ sudo systemctl restart redis.service

 

تبريك ، نصب Redis شما اكنون ايمن تر شده است!

نتيجه

به خاطر داشته باشيد كه پس از ورود شخصي به سرور مجازي شما ، دور زدن ويژگي هاي امنيتي ويژه Redis كه ما در آن قرار داده ايم بسيار آسان است. بنابراين ، مهمترين ويژگي امنيتي در سرور مجازي Redis ، فايروال شماست (كه در صورت پيروي از آموزش مقدماتي راه اندازي اوليه سرور اوليه، آن را پيكربندي كرده ايد) ، زيرا اين كار پرش از آن حصار امنيتي را براي حمله گران بسيار دشوار مي كند.

اگر سعي در برقراري ارتباطات Redis از طريق يك شبكه غير معتبر داريد ، بايد پروكسي SSL را به كار ببريد ، همانطور كه توسط توسعه دهندگان Redis در راهنماي رسمي امنيتي Redis توصيه شده است

 

نحوه استفاده از 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 ارزان – 

 

 

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

۱۹ بازديد ۰ نظر

Docker  مي تواند روشي كارآمد براي اجراي برنامه هاي وب در حال توليد باشد ، اما ممكن است بخواهيد چندين برنامه را در يك هاست  Docker اجرا كنيد. در اين شرايط ، بايد پروكسي معكوس تنظيم كنيد زيرا فقط مي خواهيد پورت 80 و 443 را در معرض ديد قرار دهيد.

Traefik  يك پروكسي معكوس آگاه از Docker است كه شامل داشبورد نظارت خود ميباشد. در اين آموزش ، از Traefik براي مسير يابي درخواست ها به دو كانتينر مختلف برنامه وب استفاده مي كنيد: يك كانتينر وردپرس و يك كانتينر Adminer كه هر كدام با يك پايگاه داده MySQL در ارتباط هستند. با استفاده از Let’s Encrypt ، Traefik را پيكربندي مي كنيد تا همه چيز را از طريق HTTPS  ارائه دهد.

پيش نيازها

براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:

  • يك سرورمجازي اوبونتو 20.04 با پيروي از راهنماي ستاپ اوليه سرورمجازي اوبونتو 20.04 ، از جمله كاربر غير ريشه sudo و فايروال ، راه اندازي شده.
  • Docker روي سرورمجازي شما نصب شده باشد ، كه مي توانيد با دنبال كردن نحوه نصب و استفاده از Docker در Ubuntu 20.04 اين كار را انجام دهيد.
  • Docker Compose با دستورالعمل نحوه نصب Docker Compose در اوبونتو 20.04 نصب شده باشد.
  • يك دامنه و سه ركورد A ، db-admin.your_domain ، your_domain و monitor.your_domain. هر كدام بايد به آدرس IP سرورمجازي شما اشاره كنند. در طول اين آموزش ، دامنه خود را به جاي your_domain در فايلهاي پيكربندي و مثالها جايگزين كنيد.

مرحله 1 – پيكربندي و اجراي  Traefik

پروژه Traefik داراي يك تصوير Docker رسمي است ، بنابراين ما براي اجراي Traefik در يك كانتينر Docker از آن استفاده خواهيم كرد.

اما قبل از راه اندازي كانتينر Traefik ، بايد يك فايل پيكربندي ايجاد كرده و يك پسورد رمزگذاري شده تنظيم كنيم تا بتوانيم به داشبورد نظارت دسترسي پيدا كنيم.

براي ايجاد اين گذرواژه رمزگذاري شده از ابزار htpasswd استفاده خواهيم كرد. ابتدا برنامه كمكي را نصب كنيد كه در بسته apache2-utils  وجود دارد:

·         $ sudo apt-get install apache2-utils·

 

سپس رمز عبور را با htpasswd توليد كنيد. secure_password را با رمز عبوري كه مي خواهيد براي كاربر مدير Traefik استفاده كنيد جايگزين كنيد:

·         $ htpasswd -nb admin secure_password·

خروجي برنامه به صورت زير خواهد بود:

Output

admin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/

 

براي تنظيم احراز هويت پايه HTTP براي داشبورد بررسي و نظارت بر سلامت Traefik ، از خروجي منحصر به فرد خود در فايل پيكربندي Traefik استفاده خواهيد كرد. تمام خط خروجي خود را كپي كنيد تا بعداً بتوانيد آن را جايگذاري كنيد. از خروجي مثال استفاده نكنيد.

براي پيكربندي سرورمجازي Traefik ، با استفاده از قالب TOML ، يك فايل پيكربندي جديد به نام traefik.toml ايجاد خواهيم كرد. TOML يك زبان پيكربندي شبيه به فايل هاي INI اما استاندارد است. اين فايل به ما اجازه مي دهد تا سرورمجازي Traefik و ادغام هاي مختلف يا providers را كه مي خواهيم استفاده كنيم پيكربندي كنيم. در اين آموزش ، ما از سه ارائه دهنده موجود Traefik استفاده خواهيم كرد: api ، docker  و acme. آخرين مورد ، acme  با استفاده از Let’s Encrypt از گواهينامه هاي TLS پشتيباني مي كند.

فايل جديد خود را در nano يا ويرايشگر متن مورد علاقه خود باز كنيد:

·         $ nano traefik.toml·

ابتدا دو نقطه ورودي به نام http و https اضافه كنيد كه به طور پيش فرض همه backends به آنها دسترسي خواهند داشت:

traefik.toml

defaultEntryPoints = [“http”, “https”]

 

بعداً در اين فايل نقاط ورودي http و https را پيكربندي خواهيم كرد.

در مرحله بعد ، ارائه دهنده api را پيكربندي كنيد ، كه به شما امكان دسترسي به رابط داشبورد را مي دهد. اينجاست كه مي توانيد خروجي را از دستور htpasswd پيست كنيد:

traefik.toml

[entryPoints]

[entryPoints.dashboard]

address = “:8080”

[entryPoints.dashboard.auth]

[entryPoints.dashboard.auth.basic]

users = [“admin:your_encrypted_password”]

 

[api]

entrypoint=”dashboard”

 

داشبورد يك برنامه وب جداگانه است كه در كانتينر Traefik اجرا مي شود. ما داشبورد را تنظيم مي كنيم تا روي پورت 8080 كار كند.

بخش entrypoints.dashboard نحوه ارتباط ما با ارائه دهنده api را تنظيم مي كند و بخش entrypoints.dashboard.auth.basic  تأييد اعتبار اصلي HTTP را براي داشبورد پيكربندي مي كند. براي مقدار ورودي كاربران از خروجي دستور htpasswd استفاده كنيد. مي توانيد ورودهاي اضافي را با جدا كردن آنها با ويرگول مشخص كنيد.

ما اولين ورودي خود را تعريف كرده ايم ، اما بايد ساير موارد را براي ارتباطات استاندارد HTTP و HTTPS كه به سمت ارائه دهنده api  نيست ، تعريف كنيم. بخش entryPoints آدرس هايي را كه Traefik و كانتينرهاي پروكسي مي توانند به آن گوش دهند پيكربندي مي كند. اين خطوط را به فايل زير عنوان entryPoints اضافه كنيد:

traefik.toml

[entryPoints.http]

address = “:80”

[entryPoints.http.redirect]

entryPoint = “https”

[entryPoints.https]

address = “:443”

[entryPoints.https.tls]

 

نقطه ورود http پورت 80 را كنترل مي كند ، در حالي كه نقطه ورود https از پورت 443 براي TLS / SSL استفاده مي كند. ما به طور خودكار تمام ترافيك موجود در پورت 80 را به نقطه ورود https هدايت مي كنيم تا اتصالات ايمن را براي همه درخواست ها تضمين كنيم.

در مرحله بعد ، اين بخش را براي پيكربندي Let’s Encrypt پشتيباني از گواهي Traefik اضافه كنيد:

traefik.toml

[acme]

email = “your_email@your_domain”

storage = “acme.json”

entryPoint = “https”

onHostRule = true

[acme.httpChallenge]

entryPoint = “http”

 

اين بخش acme ناميده مي شود زيرا ACME نام پروتكلي است كه براي ارتباط با Let’s Encrypt براي مديريت گواهينامه ها استفاده مي شود. سرويس Let’s Encrypt نياز به ثبت نام با يك آدرس ايميل معتبر دارد ، بنابراين براي اينكه Traefik براي هاست هاي ما گواهي توليد كند ، كليد ايميل را روي آدرس ايميل خود تنظيم كنيد. سپس مشخص مي كنيم كه اطلاعاتي كه از Let’s Encrypt دريافت خواهيم كرد را در يك فايل JSON به نام acme.json ذخيره خواهيم كرد. كليد entryPoint بايد به نقطه ورودي پورت 443 اشاره كند ، كه در مورد ما نقطه ورود https است.

كليد onHostRule نحوه عملكرد Traefik براي توليد گواهينامه ها را تعيين مي كند. ما مي خواهيم گواهينامه خود را به محض ايجاد كانتينرها با نام هاست هاي مشخص دريافت كنيم ، و اين همان كاري است كه تنظيم onHostRule انجام مي دهد.

بخش acme.httpChallenge به ما اجازه مي دهد تا تعيين كنيم چگونه Let’s Encrypt بتواند تأييد كند كه گواهي توليد شده است. ما در حال پيكربندي آن هستيم تا به عنوان بخشي از چالش از طريق نقطه ورود http ، يك فايل را ارائه دهد.

در آخر ، بياييد با اضافه كردن اين خطوط به فايل ، ارائه دهنده docker را پيكربندي كنيم:

traefik.toml

[docker]

domain = “your_domain”

watch = true

network = “web”

 

ارائه دهنده docker ، Traefik  را قادر مي سازد به عنوان يك پروكسي در مقابل كانتينرهاي Docker عمل كند. ما ارائه دهنده را پيكربندي كرده ايم تا كانتينرهاي جديدي را در شبكه وب مشاهده كند كه به زودي ايجاد خواهيم كرد و آنها را به عنوان زير دامنه هاي your_domain نمايش مي دهد.

در اين مرحله ، traefik.toml  بايد داراي محتواي زير باشد:

traefik.toml

defaultEntryPoints = [“http”, “https”]

 

[entryPoints]

[entryPoints.dashboard]

address = “:8080”

[entryPoints.dashboard.auth]

[entryPoints.dashboard.auth.basic]

users = [“admin:your_encrypted_password”]

[entryPoints.http]

address = “:80”

[entryPoints.http.redirect]

entryPoint = “https”

[entryPoints.https]

address = “:443″

[entryPoints.https.tls]

 

[api]

entrypoint=”dashboard”

 

[acme]

email = “your_email@your_domain”

storage = “acme.json”

entryPoint = “https”

onHostRule = true

[acme.httpChallenge]

entryPoint = “http”

 

[docker]

domain = “your_domain”

watch = true

network = “web”

Copy

 

فايل را ذخيره كرده و از ويرايشگر خارج شويد. با استفاده از اين پيكربندي ها ، مي توانيم Traefik را مقداردهي اوليه كنيم.

مرحله 2 – اجراي  كانتينر  Traefik

سپس ، يك شبكه Docker براي پروكسي ايجاد كنيد تا با كانتينرها به اشتراك گذاشته شود. شبكه Docker لازم است تا بتوانيم از آن در برنامه هايي كه با استفاده از Docker Compose اجرا مي شوند استفاده كنيم. بياييد با اين شبكه وب تماس بگيريم:

  • $ docker network create web

وقتي كانتينر Traefik شروع به كار كرد ، ما آن را به اين شبكه اضافه خواهيم كرد. سپس مي توانيم كانتينرهاي ديگري را براي پروكسي Trafik به اين شبكه اضافه كنيم.

سپس ، يك فايل خالي ايجاد كنيد كه اطلاعات Let’s Encrypt ما را در خود نگه دارد. ما اين را در كانتينر به اشتراك خواهيم گذاشت تا Traefik بتواند از آن استفاده كند:

  • $ touch acme.json

Traefik  فقط درصورتي امكان استفاده از اين فايل را خواهد داشت كه كاربر ريشه داخل كانتينر دسترسي خواندن و نوشتن منحصر به فرد به آن داشته باشد. براي انجام اين كار ، مجوزهاي acme.json را قفل كنيد تا فقط صاحب فايل اجازه خواندن و نوشتن را داشته باشد:

  • $ chmod 600 acme.json

هنگامي كه فايل به Docker منتقل شد ، مالك به طور خودكار به كاربر اصلي داخل كانتينر تغيير مي كند.

در آخر ، با استفاده از اين دستور كانتينر Traefik را ايجاد كنيد:

  • docker run -d
  • -v /var/run/docker.sock:/var/run/docker.sock
  • -v $PWD/traefik.toml:/traefik.toml
  • -v $PWD/acme.json:/acme.json
  • -p 80:80
  • -p 443:443
  • -l traefik.frontend.rule=Host:monitor.your_domain
  • -l traefik.port=8080
  • –network web
  • –name traefik
  • traefik:1.7-alpine

 

دستور كمي طولاني است ، بنابراين اجازه دهيد آن را تجزيه كنيم.

ما از پرچم -d براي اجراي كانتينر در پس زمينه به عنوان يك دمون استفاده مي كنيم. سپس فايل docker.sock خود را در كانتينر به اشتراك مي گذاريم تا روند Traefik بتواند تغييرات در كانتينرها را گوش دهد. همچنين فايل پيكربندي traefik.toml و فايل acme.json  را كه ايجاد كرديم در كانتينر به اشتراك مي گذاريم.

سپس ، از پورت هاي 80 و: 443 هاست Docker خود به همان پورت هاي موجود در كانتينر Traefik ترسيم مي كنيم تا Traefik تمام ترافيك HTTP و HTTPS را به سرورمجازي دريافت كند.

سپس دو برچسب Docker تنظيم مي كنيم كه به Traefik مي گويد كه بايد ترافيك را به سمت نام هاست monitor.your_domain به :8080 درون كانتينر Traefik هدايت كند، كه داشبورد نظارت را نشان مي دهد.

شبكه كانتينر را روي وب تنظيم مي كنيم و كانتينر را traefik نامگذاري مي گذاريم.

سرانجام ، از تصوير traefik: 1.7-alpine براي اين كانتينر استفاده مي كنيم ، زيرا كوچك است.

يك ENTRYPOINT تصوير Docker فرماني است كه هميشه هنگام ايجاد كانتينر از تصوير اجرا مي شود. در اين حالت ، دستور باينري traefik درون كانتينر است. هنگام راه اندازي كانتينر مي توانيد آرگومان هاي ديگري را به آن دستور منتقل كنيد ، اما همه تنظيمات خود را در فايل traefik.toml پيكربندي كرده ايم.

با راه اندازي كانتينر ، اكنون داشبوردي داريد كه مي توانيد براي مشاهده سلامت كانتينرهاي خود به آن دسترسي داشته باشيد. همچنين مي توانيد از اين داشبورد براي تجسم frontends  و  backends كه Traefik ثبت كرده استفاده كنيد. با رفتن به ادرس https: //monitor.your_domain  در مرورگر خود به داشبورد نظارت دسترسي پيدا كنيد. نام كاربري و گذرواژه ادمين  و رمز عبوري كه در مرحله 1 پيكربندي كرده ايد ، از شما خواسته مي شود.

پس از ورود به سيستم ، رابط كاربري مشابه اين را مشاهده خواهيد كرد:

چيز چنداني براي مشاهده وجود ندارد ، اما اين پنجره را باز بگذاريد ، و با افزودن كانتينرهايي براي مديريت Traefik ، تغيير محتوا را مشاهده خواهيد كرد.

اكنون پروكسي Traefik در حال اجرا ، پيكربندي شده براي كار با Docker و آماده نظارت بر ساير كانتينرها Docker است. بياييد چند كانتينر براي Traefik به پروكسي اضافه كنيم.

مرحله 3 – ثبت كانتينرها با  Traefik

با استفاده از كانتينر Traefik ، آماده اجراي برنامه هايي در وراي آن هستيد. اجازه دهيد كانتينرهاي زير را تحت Traefik راه اندازي كنيم:

1- وبلاگي با استفاده از تصوير رسمي وردپرس.

2- يك سرورمجازي مديريت پايگاه داده با استفاده از تصوير رسمي  Adminer.

ما با استفاده از يك فايل docker-compose.yml هر دو اين برنامه ها را با Docker Compose مديريت خواهيم كرد.

فايل docker-compose.yml را در ويرايشگر خود ايجاد و باز كنيد:

  • $ nano docker-compose.yml

خطوط زير را به فايل اضافه كنيد تا نسخه و شبكه هايي را كه استفاده خواهيم كرد مشخص كنيد:

docker-compose.yml

version: “3”

 

networks:

web:

external: true

internal:

external: false

 

ما از Docker Compose نسخه 3 استفاده مي كنيم زيرا جديدترين نسخه اصلي قالب فايل Compose است.

براي اينكه Traefik برنامه هاي ما را بشناسد ، آنها بايد بخشي از يك شبكه باشند و از آنجا كه ما شبكه را به صورت دستي ايجاد كرده ايم ، با تعيين نام شبكه وب و تنظيم external  روي true ، آن را به داخل مي كشيم. سپس يك شبكه ديگر تعريف مي كنيم تا بتوانيم كانتينرهاي در معرض ديد خود را به يك كانتينر پايگاه داده متصل كنيم كه از طريق Traefik در معرض آن قرار نمي گيريم. ما اين شبكه را internalمي ناميم.

در مرحله بعدي ، هر يك از سرويس هاي خود را يك به يك تعريف خواهيم كرد. بياييد با محتواي وبلاگ شروع كنيم ، كه پايه آن را تصوير رسمي وردپرس قرار خواهيم داد. اين پيكربندي را به پايين فايل خود اضافه كنيد:

docker-compose.yml

 

services:

blog:

image: wordpress:4.9.8-apache

environment:

WORDPRESS_DB_PASSWORD:

labels:

– traefik.backend=blog

– traefik.frontend.rule=Host:blog.your_domain

– traefik.docker.network=web

– traefik.port=80

networks:

– internal

– web

depends_on:

– mysql

 

كليد environment به شما امكان مي دهد متغيرهاي محيطي را كه در داخل كانتينر تنظيم مي شوند ، تعيين كنيد. با تعيين نكردن مقداري براي WORDPRESS_DB_PASSWORD ، به Docker Compose مي گوييم كه هنگام ايجاد كانتينر مقدار را از پوسته ما گرفته و آن را عبور دهد. قبل از شروع كانتينرها ، اين متغير محيط را در پوسته خود تعريف خواهيم كرد. به اين ترتيب گذرواژه هاي محكم كد گذاري شده را در فايل پيكربندي وارد نمي كنيم.

قسمت labels  جايي است كه شما مقادير پيكربندي Traefik را تعيين مي كنيد. برچسب هاي Docker به تنهايي كاري انجام نمي دهند ، اما Traefik اين موارد را مي خواند تا بداند چگونه با كانتينرها رفتار كند. آنچه در هر يك از اين برچسب ها انجام مي شود به اين شرح است:

  • backend نام سرويس backend را در Traefik مشخص مي كند (كه به كانتينر واقعي blog اشاره دارد).
  • frontend.rule=Host:blog.your_domain به Traefik مي گويد كه ميزبان درخواستي را بررسي كند و اگر با الگوي blog.your_domain مطابقت دارد بايد ترافيك را به كانتينر blog هدايت كند.
  • docker.network=web مشخص مي كند براي يافتن IP داخلي اين كانتينر در كدام شبكه به دنبال Traefik بگرديد. از آنجا كه كانتينر Traefik ما به تمام اطلاعات Docker دسترسي دارد ، اگر اين مورد را مشخص نكنيم ، احتمالاً IP را براي شبكه داخلي مي گيرد.
  • port پورت در معرض مشخصي را مشخص مي كند كه Traefik بايد از آن براي مسير يابي به اين كانتينر استفاده كند.

با استفاده از اين پيكربندي ، تمام ترافيك ارسال شده به پورت 80 ميزبان Docker ما به كانتينر blog  هدايت مي شود.

ما اين كانتينر را به دو شبكه مختلف اختصاص مي دهيم تا Traefik بتواند آن را از طريق شبكه وب پيدا كند و بتواند از طريق شبكه داخلي با كانتينر پايگاه داده ارتباط برقرار كند.

سرانجام ، كليد depend_on به Docker Compose مي گويد كه اين كانتينر پس از اجراي متعلقات بايد شروع شود. از آنجا كه وردپرس براي اجرا به يك پايگاه داده احتياج دارد ، ما بايد قبل از شروع محتواي وبلاگ خود ، محتواي mysql خود را اجرا كنيم.

سپس ، با اضافه كردن اين پيكربندي به پايين فايل ، سرويس MySQL را پيكربندي كنيد:

docker-compose.yml

mysql:

image: mysql:5.7

environment:

MYSQL_ROOT_PASSWORD:

networks:

– internal

labels:

– traefik.enable=false

 

ما براي اين كانتينر از تصوير رسمي MySQL 5.7 استفاده مي كنيم. مشاهده خواهيد كرد كه بار ديگر از يك آيتم environment  بدون مقدار استفاده مي كنيم. متغيرهاي MYSQL_ROOT_PASSWORD و WORDPRESS_DB_PASSWORD  بايد در همان مقدار تنظيم شوند تا اطمينان حاصل شود كه كانتينر وردپرس ما مي تواند با  MySQL  ارتباط برقرار كند. ما نمي خواهيم كانتينر mysql را در معرض Traefik يا جهان خارج قرار دهيم ، بنابراين فقط اين كانتينر را به شبكه داخلي اختصاص مي دهيم. از آنجا كه Traefik به سوكت Docker دسترسي دارد ، اين فرايند همچنان پيش فرض يك كانتينر mysql را نشان مي دهد ، بنابراين ما برچسب traefik.enable = false را اضافه مي كنيم تا مشخص كنيم Traefik نبايد اين كانتينر را نشان دهد.

سرانجام ، اين پيكربندي را به قسمت پايين فايل خود اضافه كنيد تا كانتينر Adminer را تعريف كنيد:

docker-compose.yml

adminer:

image: adminer:4.6.3-standalone

labels:

– traefik.backend=adminer

– traefik.frontend.rule=Host:db-admin.your_domain

– traefik.docker.network=web

– traefik.port=8080

networks:

– internal

– web

depends_on:

– mysql

 

اين كانتينر بر اساس تصوير رسمي ادمين است. پيكربندي network  و depends_on براي اين كانتينر دقيقاً با آنچه براي كانتينر blog  استفاده مي كنيم مطابقت دارد.

با اين حال ، از آنجا كه همه ترافيك را به پورت 80 هاست Docker خود مستقيماً به كانتينر blog  هدايت مي كنيم ، بايد اين كانتينر را به گونه ديگري پيكربندي كنيم تا ترافيك به كانتينر ادمين ما برسد. traefik.frontend.rule=Host:db-admin.your_domain به Traefik مي گويد هاست درخواستي را بررسي كند. اگر با الگوي db-admin.your_domain مطابقت داشته باشد ، Traefik ترافيك را به سمت كانتينر مدير هدايت مي كند.

در اين مرحله ، docker-compose.yml  بايد داراي محتواي زير باشد:

docker-compose.yml

version: “3”

 

networks:

web:

external: true

internal:

external: false

 

services:

blog:

image: wordpress:4.9.8-apache

environment:

WORDPRESS_DB_PASSWORD:

labels:

– traefik.backend=blog

– traefik.frontend.rule=Host:blog.your_domain

– traefik.docker.network=web

– traefik.port=80

networks:

– internal

– web

depends_on:

– mysql

mysql:

image: mysql:5.7

environment:

MYSQL_ROOT_PASSWORD:

networks:

– internal

labels:

– traefik.enable=false

adminer:

image: adminer:4.6.3-standalone

labels:

– traefik.backend=adminer

– traefik.frontend.rule=Host:db-admin.your_domain

– traefik.docker.network=web

– traefik.port=8080

networks:

– internal

– web

depends_on:

– mysql

 

فايل را ذخيره كرده و از ويرايشگر متن خارج شويد.

سپس ، مقادير را براي پوسته خود براي متغيرهاي WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD قبل از شروع كانتينرها خود تنظيم كنيد:

  • $ export WORDPRESS_DB_PASSWORD=secure_database_password
  • $ export MYSQL_ROOT_PASSWORD=secure_database_password

 

SECURE_database_password  را با گذرواژه پايگاه داده مورد نظر خود جايگزين كنيد. فراموش نكنيد كه براي هر دو WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD از رمز عبور يكساني استفاده كنيد.

با تنظيم اين متغيرها ، كانتينرها را با استفاده از docker-compose اجرا كنيد:

  • $ docker-compose up -d

اكنون نگاهي دوباره به داشبورد مديريت Traefik بيندازيد. خواهيد ديد كه اكنون يك backend  و  frontend براي دو سرورمجازي وجود دارد:

به blog.your_domain خود برويد. به يك اتصال TLS هدايت خواهيد شد و اكنون مي توانيد تنظيمات WordPress را انجام دهيد:

اكنون با مراجعه به db-admin.your_domain در مرورگر خود ، به Adminer دسترسي پيدا كنيد و your_domain را دوباره با دامنه خود جايگزين كنيد. كانتينر mysql در معرض دنياي خارج نيست ، اما كانتينر adminer  از طريق شبكه داخلي Docker  كه با استفاده از نام كانتينر mysql به عنوان نام هاست به آن استفاده ميكنند ، دسترسي دارد.

در صفحه ورود به سيستم Adminer ، منوي كشويي System را روي MySQL تنظيم كنيد. حالا mysql را براي سرورمجازي وارد كنيد ، root  را براي نام كاربري وارد كنيد و مقداري را كه براي MYSQL_ROOT_PASSWORD براي رمز عبور تعيين كرده ايد وارد كنيد. Database  را خالي بگذاريد. اكنون Login را فشار دهيد.

پس از ورود به سيستم ، رابط كاربري Adminer را مشاهده خواهيد كرد:

هر دو سايت اكنون كار مي كنند و شما مي توانيد از داشبورد موجود در monitor.your_domain استفاده كنيد تا برنامه هاي خود را تحت نظر داشته باشيد.

نتيجه

در اين آموزش ، Traefik را به درخواست پروكسي از برنامه هاي ديگر در كانتينرهاي Docker پيكربندي كرده ايد.

پيكربندي اعلاني Traefik در سطح كانتينر برنامه ، پيكربندي سرويس هاي بيشتر را آسان مي كند و هنگام افزودن برنامه هاي جديد به ترافيك پروكسي ، نيازي به راه اندازي مجدد كانتينر traefik نيست زيرا Traefik بلافاصله از طريق فايل سوكت Docker كه در حال كنترل است، متوجه تغيير مي شود.

براي كسب اطلاعات بيشتر در مورد آنچه مي توانيد با Traefik انجام دهيد ، به مطالب رسمي Traefik مراجعه كنيد.

 

نحوه استفاده از 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 ارزان – 

 

 

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

۱۶ بازديد ۰ نظر

URL  كلاينت يا cURL ، يك كتابخانه و ابزار خط فرمان براي انتقال داده ها بين سيستم ها است. از بسياري از پروتكل ها پشتيباني مي كند و به طور پيش فرض روي بسياري از سيستم عامل هاي يونيكس مانند نصب ميباشد. به دليل در دسترس بودن به صورت عمومي ، براي زماني كه شما نياز به دانلود يك فايل در سيستم محلي خود داريد ، به خصوص در محيط سرور مجازي ، انتخاب خوبي است.

در اين آموزش ، از دستور curl براي دانلود يك فايل متني از سرور مجازي وب استفاده خواهيد كرد. شما محتويات آن را مشاهده خواهيد كرد ، آن را به صورت محلي ذخيره خواهيد كرد و به curl خواهيد گفت كه اگر فايل ها منتقل شده اند ، ريدايركت ها را دنبال كند.

دانلود فايل ها از طريق اينترنت مي تواند خطرناك باشد ، بنابراين مطمئن شويد كه از منابع معتبر دانلود مي كنيد.

مرحله 1 – گرفتن فايل هاي از راه دور

خارج از باكس ، بدون هيچ آرگومان خط فرمان ، دستور curl يك فايل را واكشي مي كند و محتواي آن را به خروجي استاندارد نشان مي دهد.

با دانلود فايل robots.txt بياييد آن را امتحان كنيم:

·                 $ curl https://www.digitalocean.com/robots.txt

محتواي فايل را در صفحه نمايش خواهيد ديد:

Output

User-agent: *

Disallow:

 

sitemap: https://www.digitalocean.com/sitemap.xml

sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz

sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz

sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

 

به curl يك URL بدهيد و منبع را واكشي كرده و محتواي آن را نمايش مي دهد.

ذخيره فايل هاي از راه دور

واكشي يك فايل و نمايش محتواي آن كاملاً خوب است ، اما اگر بخواهيد فايل را در سيستم خود ذخيره كنيد چه مي كنيد؟

براي ذخيره فايل از راه دور در سيستم محلي خود ، با همان نام فايل سرور مجازي كه از آن دانلود مي كنيد ، آرگومان –remote-name را اضافه كنيد يا از گزينه -O استفاده كنيد:

  • $ curl -O https://www.digitalocean.com/robots.txt

فايل شما دانلود مي شود:

[secondary_label Output

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

Dload  Upload   Total   Spent    Left  Speed

100   286    0   286    0     0   5296      0 –:–:– –:–:– –:–:–  5296

 

curl به جاي نمايش محتويات فايل ، پيشرفت بر پايه متن را نشان مي دهد و فايل را به همان نام فايل راه دور ذخيره مي كند. با دستور cat مي توانيد موارد را بررسي كنيد:

  • $ cattxt

اين فايل شامل همان مطالبي است كه قبلاً مشاهده كرده ايد:

[secondary_label Output

User-agent: *

Disallow:

 

sitemap: https://www.digitalocean.com/sitemap.xml

sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz

sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz

sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

 

اكنون بياييد به تعيين يك نام فايل براي فايل دانلود شده بپردازيم.

مرحله 2 – ذخيره فايل هاي از راه دور با نام فايل خاص

ممكن است قبلاً يك فايل محلي با همان نام فايل در سرور مجازي راه دور داشته باشيد.

براي جلوگيري از رونويسي مجدد فايل محلي خود به همين نام ، از آرگومان -o يا –output و به دنبال آن نام فايل محلي كه مي خواهيد محتوا را در آن ذخيره كنيد استفاده كنيد.

براي دانلود فايل از راه دور robots.txt در فايل do-bots.txt كه به صورت محلي نامگذاري شده است ، دستور زير را اجرا كنيد:

  • $ curl -o do-bots.txt https://www.digitalocean.com/robots.txt

بار ديگر نوار پيشرفت را مشاهده خواهيد كرد:

Output

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

Dload  Upload   Total   Spent    Left  Speed

100   286    0   286    0     0   6975      0 –:–:– –:–:– –:–:–  7150

 

اكنون براي نمايش محتويات do-bots.txt از دستور cat استفاده كنيد تا فايل مورد نظر را دانلود كنيد:

  • $ cat do-bots.txt

خروجي يكسان ميباشد:

Output

User-agent: *

Disallow:

 

sitemap: https://www.digitalocean.com/sitemap.xml

sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz

sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz

sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

 

به طور پيش فرض ، curl تغيير مسيرها را دنبال نمي كند ، بنابراين هنگام انتقال فايل ها ، ممكن است آنچه انتظار داريد را دريافت نكنيد. بياييد ببينيم چگونه اين مشكل را برطرف كنيم.

مرحله 3 – دنبال كردن تغيير مسيرها

تاكنون همه مثالها شامل URL هاي كاملاً واجد شرايط هستند كه شامل پروتكل https: // هستند. اگر بخواهيد فايل robots.txt را گرفته و فقط www.example.com را مشخص كنيد ، هيچ خروجي نمي بينيد ، زيرا example درخواست هاي http: // را به https: // هدايت مي كند:

شما مي توانيد اين را با استفاده از پرچم -I تأييد كنيد ، كه عناوين درخواست را به جاي محتويات فايل نمايش مي دهد:

  • $ curl -I www.digitalocean.com

خروجي نشان مي دهد كه URL تغيير مسير داده است. خط اول خروجي به شما مي گويد كه جابه جا شده است و خط location مكان آن را به شما مي گويد:

[secondary_label Output

HTTP/1.1 301 Moved Permanently

Date: Wed, 26 Aug 2020 19:01:33 GMT

Connection: keep-alive

Cache-Control: max-age=3600

Expires: Wed, 26 Aug 2020 20:01:33 GMT

Location: https://www.digitalocean.com/robots.txt

cf-request-id: 04cdbea7a40000c5cc8d34d200000001

Server: cloudflare

CF-RAY: 5c8fcd52aea0c5cc-EWR

 

مي توانيد از curl براي درخواستي ديگر به صورت دستي استفاده كنيد ، يا مي توانيد از آرگومان –location يا -L استفاده كنيد كه به curl مي گويد هر زمان كه با يك تغيير مسير مواجه شد درخواست را به مكان جديد دوباره انجام دهد. آن را امتحان كنيد:

  • $ curl -L www.digitalocean.com/robots.txt

اين بار خروجي را مشاهده مي كنيد ، زيرا curl به دنبال تغيير مسير مي رود:

Output

User-agent: *

Sitemap: https://www.digitalocean.com/sitemap.xml

 

براي دانلود فايل در سيستم محلي خود مي توانيد آرگومان -L را با برخي از آرگومان هاي فوق الذكر تركيب كنيد:

  • $ curl -L -o do-bots.txt www.digitalocean.com/robots.txt

 

 

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

 

نتيجه

curl به شما امكان مي دهد كه فايل ها را سربع از يك سيستم از راه دور دانلود كنيد.  Curl  از پروتكل هاي مختلف پشتيباني مي كند و همچنين مي تواند درخواست هاي وب پيچيده تري از جمله تعامل با API هاي از راه دور براي ارسال و دريافت داده ها را ايجاد كند.

با مشاهده صفحه دستي  man در مورد curl مي توانيد اطلاعات بيشتري كسب كنيد.

نحوه استفاده از 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 ارزان – 

 

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

۱۶ بازديد ۰ نظر

Docker  مي تواند روشي كارآمد براي اجراي برنامه هاي وب در حال توليد باشد ، اما ممكن است بخواهيد چندين برنامه را در يك هاست  Docker اجرا كنيد. در اين شرايط ، بايد پروكسي معكوس تنظيم كنيد زيرا فقط مي خواهيد پورت 80 و 443 را در معرض ديد قرار دهيد.

Traefik  يك پروكسي معكوس آگاه از Docker است كه شامل داشبورد نظارت خود ميباشد. در اين آموزش ، از Traefik براي مسير يابي درخواست ها به دو كانتينر مختلف برنامه وب استفاده مي كنيد: يك كانتينر وردپرس و يك كانتينر Adminer كه هر كدام با يك پايگاه داده MySQL در ارتباط هستند. با استفاده از Let’s Encrypt ، Traefik را پيكربندي مي كنيد تا همه چيز را از طريق HTTPS  ارائه دهد.

پيش نيازها

براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:

  • يك سرور مجازي Ubuntu 18.04 با پيروي از راهنماي ستاپ اوليه سرور مجازي Ubuntu 18.04 ، از جمله كاربر غير ريشه sudo و فايروال ، راه اندازي شده.
  • Docker روي سرور مجازي شما نصب شده باشد ، كه مي توانيد با دنبال كردن نحوه نصب و استفاده از Docker در Ubuntu 18.04 اين كار را انجام دهيد.
  • Docker Compose با دستورالعمل نحوه نصب Docker Compose در Ubuntu 18.04 نصب شده باشد.
  • يك دامنه و سه ركورد A ، db-admin ، blog و monitor. هر كدام بايد به آدرس IP سرور مجازي شما اشاره كنند. در طول اين آموزش ، دامنه خود را به جاي your_domain در فايلهاي پيكربندي و مثالها جايگزين كنيد.

مرحله 1 – پيكربندي و اجراي  Traefik

پروژه Traefik داراي يك تصوير Docker رسمي است ، بنابراين ما براي اجراي Traefik در يك كانتينر Docker از آن استفاده خواهيم كرد.

اما قبل از راه اندازي كانتينر Traefik ، بايد يك فايل پيكربندي ايجاد كرده و يك پسورد رمزگذاري شده تنظيم كنيم تا بتوانيم به داشبورد نظارت دسترسي پيدا كنيم.

براي ايجاد اين گذرواژه رمزگذاري شده از ابزار htpasswd استفاده خواهيم كرد. ابتدا برنامه كمكي را نصب كنيد كه در بسته apache2-utils  وجود دارد:

·         $ sudo apt-get install apache2-utils·

سپس رمز عبور را با htpasswd توليد كنيد. secure_password را با رمز عبوري كه مي خواهيد براي كاربر مدير Traefik استفاده كنيد جايگزين كنيد:

·         $ htpasswd -nb admin secure_password·

خروجي برنامه به صورت زير خواهد بود:

Output

admin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/

براي تنظيم احراز هويت پايه HTTP براي داشبورد بررسي و نظارت بر سلامت Traefik ، از خروجي منحصر به فرد خود در فايل پيكربندي Traefik استفاده خواهيد كرد. تمام خط خروجي خود را كپي كنيد تا بعداً بتوانيد آن را جايگذاري كنيد. از خروجي مثال استفاده نكنيد.

براي پيكربندي سرور مجازي Traefik ، با استفاده از قالب TOML ، يك فايل پيكربندي جديد به نام traefik.toml ايجاد خواهيم كرد. TOML يك زبان پيكربندي شبيه به فايل هاي INI اما استاندارد است. اين فايل به ما اجازه مي دهد تا سرور مجازي Traefik و ادغام هاي مختلف يا providers را كه مي خواهيم استفاده كنيم پيكربندي كنيم. در اين آموزش ، ما از سه ارائه دهنده موجود Traefik استفاده خواهيم كرد: api ، docker  و acme. آخرين مورد ، acme  با استفاده از Let’s Encrypt از گواهينامه هاي TLS پشتيباني مي كند.

فايل جديد خود را در nano يا ويرايشگر متن مورد علاقه خود باز كنيد:

·         $ nano traefik.toml·

ابتدا دو نقطه ورودي به نام http و https اضافه كنيد كه به طور پيش فرض همه backends به آنها دسترسي خواهند داشت:

traefik.toml

defaultEntryPoints = [“http”, “https”]

بعداً در اين فايل نقاط ورودي http و https را پيكربندي خواهيم كرد.

در مرحله بعد ، ارائه دهنده api را پيكربندي كنيد ، كه به شما امكان دسترسي به رابط داشبورد را مي دهد. اينجاست كه مي توانيد خروجي را از دستور htpasswd پيست كنيد:

traefik.toml

[entryPoints]

[entryPoints.dashboard]

address = “:8080”

[entryPoints.dashboard.auth]

[entryPoints.dashboard.auth.basic]

users = [“admin:your_encrypted_password”]

[api]

entrypoint=”dashboard”

داشبورد يك برنامه وب جداگانه است كه در كانتينر Traefik اجرا مي شود. ما داشبورد را تنظيم مي كنيم تا روي پورت 8080 كار كند.

بخش entrypoints.dashboard نحوه ارتباط ما با ارائه دهنده api را تنظيم مي كند و بخش entrypoints.dashboard.auth.basic  تأييد اعتبار اصلي HTTP را براي داشبورد پيكربندي مي كند. براي مقدار ورودي كاربران از خروجي دستور htpasswd استفاده كنيد. مي توانيد ورودهاي اضافي را با جدا كردن آنها با ويرگول مشخص كنيد.

ما اولين ورودي خود را تعريف كرده ايم ، اما بايد ساير موارد را براي ارتباطات استاندارد HTTP و HTTPS كه به سمت ارائه دهنده api  نيست ، تعريف كنيم. بخش entryPoints آدرس هايي را كه Traefik و كانتينرهاي پروكسي مي توانند به آن گوش دهند پيكربندي مي كند. اين خطوط را به فايل زير عنوان entryPoints اضافه كنيد:

traefik.toml

[entryPoints.http]

address = “:80”

[entryPoints.http.redirect]

entryPoint = “https”

[entryPoints.https]

address = “:443”

[entryPoints.https.tls]

نقطه ورود http پورت 80 را كنترل مي كند ، در حالي كه نقطه ورود https از پورت 443 براي TLS / SSL استفاده مي كند. ما به طور خودكار تمام ترافيك موجود در پورت 80 را به نقطه ورود https هدايت مي كنيم تا اتصالات ايمن را براي همه درخواست ها تضمين كنيم.

در مرحله بعد ، اين بخش را براي پيكربندي Let’s Encrypt پشتيباني از گواهي Traefik اضافه كنيد:

traefik.toml

[acme]

email = “your_email@your_domain”

storage = “acme.json”

entryPoint = “https”

onHostRule = true

[acme.httpChallenge]

entryPoint = “http”

اين بخش acme ناميده مي شود زيرا ACME نام پروتكلي است كه براي ارتباط با Let’s Encrypt براي مديريت گواهينامه ها استفاده مي شود. سرويس Let’s Encrypt نياز به ثبت نام با يك آدرس ايميل معتبر دارد ، بنابراين براي اينكه Traefik براي هاست هاي ما گواهي توليد كند ، كليد ايميل را روي آدرس ايميل خود تنظيم كنيد. سپس مشخص مي كنيم كه اطلاعاتي كه از Let’s Encrypt  دريافت خواهيم كرد را در يك فايل JSON به نام acme.json ذخيره خواهيم كرد. كليد entryPoint بايد به نقطه ورودي پورت 443 اشاره كند ، كه در مورد ما نقطه ورود https است.

كليد onHostRule نحوه عملكرد Traefik براي توليد گواهينامه ها را تعيين مي كند. ما مي خواهيم گواهينامه خود را به محض ايجاد كانتينرها با نام هاست هاي مشخص دريافت كنيم ، و اين همان كاري است كه تنظيم onHostRule انجام مي دهد.

بخش acme.httpChallenge به ما اجازه مي دهد تا تعيين كنيم چگونه Let’s Encrypt بتواند تأييد كند كه گواهي توليد شده است. ما در حال پيكربندي آن هستيم تا به عنوان بخشي از چالش از طريق نقطه ورود http ، يك فايل را ارائه دهد.

در آخر ، بياييد با اضافه كردن اين خطوط به فايل ، ارائه دهنده docker را پيكربندي كنيم:

traefik.toml

[docker]

domain = “your_domain”

watch = true

network = “web”

ارائه دهنده docker ، Traefik  را قادر مي سازد به عنوان يك پروكسي در مقابل كانتينرهاي Docker عمل كند. ما ارائه دهنده را پيكربندي كرده ايم تا كانتينرهاي جديدي را در شبكه وب مشاهده كند كه به زودي ايجاد خواهيم كرد و آنها را به عنوان زير دامنه هاي your_domain نمايش مي دهد.

در اين مرحله ، traefik.toml  بايد داراي محتواي زير باشد:

traefik.toml

defaultEntryPoints = [“http”, “https”]

[entryPoints]

[entryPoints.dashboard]

address = “:8080”

[entryPoints.dashboard.auth]

[entryPoints.dashboard.auth.basic]

users = [“admin:your_encrypted_password”]

[entryPoints.http]

address = “:80”

[entryPoints.http.redirect]

entryPoint = “https”

[entryPoints.https]

address = “:443″

[entryPoints.https.tls]

[api]

entrypoint=”dashboard”

[acme]

email = “your_email@your_domain”

storage = “acme.json”

entryPoint = “https”

onHostRule = true

[acme.httpChallenge]

entryPoint = “http”

[docker]

domain = “your_domain”

watch = true

network = “web”

Copy

فايل را ذخيره كرده و از ويرايشگر خارج شويد. با استفاده از اين پيكربندي ها ، مي توانيم Traefik را مقداردهي اوليه كنيم.

مرحله 2 – اجراي  كانتينر  Traefik

سپس ، يك شبكه Docker براي پروكسي ايجاد كنيد تا با كانتينرها به اشتراك گذاشته شود. شبكه Docker لازم است تا بتوانيم از آن در برنامه هايي كه با استفاده از Docker Compose اجرا مي شوند استفاده كنيم. بياييد با اين شبكه وب تماس بگيريم:

  • $ docker network create web

وقتي كانتينر Traefik شروع به كار كرد ، ما آن را به اين شبكه اضافه خواهيم كرد. سپس مي توانيم كانتينرهاي ديگري را براي پروكسي Trafik به اين شبكه اضافه كنيم.

سپس ، يك فايل خالي ايجاد كنيد كه اطلاعات Let’s Encrypt ما را در خود نگه دارد. ما اين را در كانتينر به اشتراك خواهيم گذاشت تا Traefik بتواند از آن استفاده كند:

  • $ touch acme.json

Traefik  فقط درصورتي امكان استفاده از اين فايل را خواهد داشت كه كاربر ريشه داخل كانتينر دسترسي خواندن و نوشتن منحصر به فرد به آن داشته باشد. براي انجام اين كار ، مجوزهاي acme.json را قفل كنيد تا فقط صاحب فايل اجازه خواندن و نوشتن را داشته باشد:

  • $ chmod 600 acme.json

هنگامي كه فايل به Docker منتقل شد ، مالك به طور خودكار به كاربر اصلي داخل كانتينر تغيير مي كند.

در آخر ، با استفاده از اين دستور كانتينر Traefik را ايجاد كنيد:

  • docker run -d
  • -v /var/run/docker.sock:/var/run/docker.sock
  • -v $PWD/traefik.toml:/traefik.toml
  • -v $PWD/acme.json:/acme.json
  • -p 80:80
  • -p 443:443
  • -l traefik.frontend.rule=Host:monitor.your_domain
  • -l traefik.port=8080
  • –network web
  • –name traefik
  • traefik:1.7-alpine

دستور كمي طولاني است ، بنابراين اجازه دهيد آن را تجزيه كنيم.

ما از پرچم -d براي اجراي كانتينر در پس زمينه به عنوان يك دمون استفاده مي كنيم. سپس فايل docker.sock خود را در كانتينر به اشتراك مي گذاريم تا روند Traefik بتواند تغييرات در كانتينرها را گوش دهد. همچنين فايل پيكربندي traefik.toml و فايل acme.json  را كه ايجاد كرديم در كانتينر به اشتراك مي گذاريم.

سپس ، از پورت هاي 80 و: 443 هاست Docker خود به همان پورت هاي موجود در كانتينر Traefik ترسيم مي كنيم تا Traefik تمام ترافيك HTTP و HTTPS را به سرور مجازي دريافت كند.

سپس دو برچسب Docker تنظيم مي كنيم كه به Traefik مي گويد كه بايد ترافيك را به سمت نام هاست monitor.your_domain به :8080 درون كانتينر Traefik هدايت كند، كه داشبورد نظارت را نشان مي دهد.

شبكه كانتينر را روي وب تنظيم مي كنيم و كانتينر را traefik نامگذاري مي گذاريم.

سرانجام ، از تصوير traefik: 1.7-alpine براي اين كانتينر استفاده مي كنيم ، زيرا كوچك است.

يك ENTRYPOINT تصوير Docker فرماني است كه هميشه هنگام ايجاد كانتينر از تصوير اجرا مي شود. در اين حالت ، دستور باينري traefik درون كانتينر است. هنگام راه اندازي كانتينر مي توانيد آرگومان هاي ديگري را به آن دستور منتقل كنيد ، اما همه تنظيمات خود را در فايل traefik.toml پيكربندي كرده ايم.

با راه اندازي كانتينر ، اكنون داشبوردي داريد كه مي توانيد براي مشاهده سلامت كانتينرهاي خود به آن دسترسي داشته باشيد. همچنين مي توانيد از اين داشبورد براي تجسم frontends  و  backends كه Traefik ثبت كرده استفاده كنيد. با رفتن به ادرس https: //monitor.your_domain  در مرورگر خود به داشبورد نظارت دسترسي پيدا كنيد. نام كاربري و گذرواژه ادمين  و رمز عبوري كه در مرحله 1 پيكربندي كرده ايد ، از شما خواسته مي شود.

پس از ورود به سيستم ، رابط كاربري مشابه اين را مشاهده خواهيد كرد:

كانتينرهاي Docker در Ubuntu 18.04

چيز چنداني براي مشاهده وجود ندارد ، اما اين پنجره را باز بگذاريد ، و با افزودن كانتينرهايي براي مديريت Traefik ، تغيير محتوا را مشاهده خواهيد كرد.

اكنون پروكسي Traefik در حال اجرا ، پيكربندي شده براي كار با Docker و آماده نظارت بر ساير كانتينرها Docker است. بياييد چند كانتينر براي Traefik به پروكسي اضافه كنيم.

مرحله 3 – ثبت كانتينرها با  Traefik

با استفاده از كانتينر Traefik ، آماده اجراي برنامه هايي در وراي آن هستيد. اجازه دهيد كانتينرهاي زير را تحت Traefik راه اندازي كنيم:

1- وبلاگي با استفاده از تصوير رسمي وردپرس.

2- يك سرور مجازي مديريت پايگاه داده با استفاده از تصوير رسمي  Adminer.

ما با استفاده از يك فايل docker-compose.yml هر دو اين برنامه ها را با Docker Compose مديريت خواهيم كرد.

فايل docker-compose.yml را در ويرايشگر خود ايجاد و باز كنيد:

  • $ nano docker-compose.yml

خطوط زير را به فايل اضافه كنيد تا نسخه و شبكه هايي را كه استفاده خواهيم كرد مشخص كنيد:

docker-compose.yml

version: “3”

networks:

web:

external: true

internal:

external: false

ما از Docker Compose نسخه 3 استفاده مي كنيم زيرا جديدترين نسخه اصلي قالب فايل Compose است.

براي اينكه Traefik برنامه هاي ما را بشناسد ، آنها بايد بخشي از يك شبكه باشند و از آنجا كه ما شبكه را به صورت دستي ايجاد كرده ايم ، با تعيين نام شبكه وب و تنظيم external  روي true ، آن را به داخل مي كشيم. سپس يك شبكه ديگر تعريف مي كنيم تا بتوانيم كانتينرهاي در معرض ديد خود را به يك كانتينر پايگاه داده متصل كنيم كه از طريق Traefik در معرض آن قرار نمي گيريم. ما اين شبكه را internalمي ناميم.

در مرحله بعدي ، هر يك از سرويس هاي خود را يك به يك تعريف خواهيم كرد. بياييد با محتواي وبلاگ شروع كنيم ، كه پايه آن را تصوير رسمي وردپرس قرار خواهيم داد. اين پيكربندي را به پايين فايل خود اضافه كنيد:

docker-compose.yml

version: “3”

services:

blog:

image: wordpress:4.9.8-apache

environment:

WORDPRESS_DB_PASSWORD:

labels:

– traefik.backend=blog

– traefik.frontend.rule=Host:blog.your_domain

– traefik.docker.network=web

– traefik.port=80

networks:

– internal

– web

depends_on:

– mysql

كليد environment به شما امكان مي دهد متغيرهاي محيطي را كه در داخل كانتينر تنظيم مي شوند ، تعيين كنيد. با تعيين نكردن مقداري براي WORDPRESS_DB_PASSWORD ، به Docker Compose مي گوييم كه هنگام ايجاد كانتينر مقدار را از پوسته ما گرفته و آن را عبور دهد. قبل از شروع كانتينرها ، اين متغير محيط را در پوسته خود تعريف خواهيم كرد. به اين ترتيب گذرواژه هاي محكم كد گذاري شده را در فايل پيكربندي وارد نمي كنيم.

قسمت labels  جايي است كه شما مقادير پيكربندي Traefik را تعيين مي كنيد. برچسب هاي Docker به تنهايي كاري انجام نمي دهند ، اما Traefik اين موارد را مي خواند تا بداند چگونه با كانتينرها رفتار كند. آنچه در هر يك از اين برچسب ها انجام مي شود به اين شرح است:

  • backend نام سرويس backend را در Traefik مشخص مي كند (كه به كانتينر واقعي blog اشاره دارد).
  • frontend.rule=Host:blog.your_domain به Traefik مي گويد كه ميزبان درخواستي را بررسي كند و اگر با الگوي blog.your_domain مطابقت دارد بايد ترافيك را به كانتينر blog هدايت كند.
  • docker.network=web مشخص مي كند براي يافتن IP داخلي اين كانتينر در كدام شبكه به دنبال Traefik بگرديد. از آنجا كه كانتينر Traefik ما به تمام اطلاعات Docker دسترسي دارد ، اگر اين مورد را مشخص نكنيم ، احتمالاً IP را براي شبكه داخلي مي گيرد.
  • port پورت در معرض مشخصي را مشخص مي كند كه Traefik بايد از آن براي مسير يابي به اين كانتينر استفاده كند.

با استفاده از اين پيكربندي ، تمام ترافيك ارسال شده به پورت 80 ميزبان Docker ما به كانتينر blog  هدايت مي شود.

ما اين كانتينر را به دو شبكه مختلف اختصاص مي دهيم تا Traefik بتواند آن را از طريق شبكه وب پيدا كند و بتواند از طريق شبكه داخلي با كانتينر پايگاه داده ارتباط برقرار كند.

سرانجام ، كليد depend_on به Docker Compose مي گويد كه اين كانتينر پس از اجراي متعلقات بايد شروع شود. از آنجا كه وردپرس براي اجرا به يك پايگاه داده احتياج دارد ، ما بايد قبل از شروع محتواي وبلاگ خود ، محتواي mysql خود را اجرا كنيم.

سپس ، با اضافه كردن اين پيكربندي به پايين فايل ، سرويس MySQL را پيكربندي كنيد:

docker-compose.yml

services:

mysql:

image: mysql:5.7

environment:

MYSQL_ROOT_PASSWORD:

networks:

– internal

labels:

– traefik.enable=false

ما براي اين كانتينر از تصوير رسمي MySQL 5.7 استفاده مي كنيم. مشاهده خواهيد كرد كه بار ديگر از يك آيتم environment  بدون مقدار استفاده مي كنيم. متغيرهاي MYSQL_ROOT_PASSWORD و WORDPRESS_DB_PASSWORD  بايد در همان مقدار تنظيم شوند تا اطمينان حاصل شود كه كانتينر وردپرس ما مي تواند با  MySQL  ارتباط برقرار كند. ما نمي خواهيم كانتينر mysql را در معرض Traefik يا جهان خارج قرار دهيم ، بنابراين فقط اين كانتينر را به شبكه داخلي اختصاص مي دهيم. از آنجا كه Traefik به سوكت Docker دسترسي دارد ، اين فرايند همچنان پيش فرض يك كانتينر mysql را نشان مي دهد ، بنابراين ما برچسب traefik.enable = false را اضافه مي كنيم تا مشخص كنيم Traefik نبايد اين كانتينر را نشان دهد.

سرانجام ، اين پيكربندي را به قسمت پايين فايل خود اضافه كنيد تا كانتينر Adminer را تعريف كنيد:

docker-compose.yml

services:

adminer:

image: adminer:4.6.3-standalone

labels:

– traefik.backend=adminer

– traefik.frontend.rule=Host:db-admin.your_domain

– traefik.docker.network=web

– traefik.port=8080

networks:

– internal

– web

depends_on:

– mysql

اين كانتينر بر اساس تصوير رسمي ادمين است. پيكربندي network  و depends_on براي اين كانتينر دقيقاً با آنچه براي كانتينر blog  استفاده مي كنيم مطابقت دارد.

با اين حال ، از آنجا كه همه ترافيك را به پورت 80 هاست Docker خود مستقيماً به كانتينر blog  هدايت مي كنيم ، بايد اين كانتينر را به گونه ديگري پيكربندي كنيم تا ترافيك به كانتينر ادمين ما برسد. traefik.frontend.rule=Host:db-admin.your_domain به Traefik مي گويد هاست درخواستي را بررسي كند. اگر با الگوي db-admin.your_domain مطابقت داشته باشد ، Traefik ترافيك را به سمت كانتينر مدير هدايت مي كند.

در اين مرحله ، docker-compose.yml  بايد داراي محتواي زير باشد:

docker-compose.yml

version: “3”

networks:

web:

external: true

internal:

external: false

services:

blog:

image: wordpress:4.9.8-apache

environment:

WORDPRESS_DB_PASSWORD:

labels:

– traefik.backend=blog

– traefik.frontend.rule=Host:blog.your_domain

– traefik.docker.network=web

– traefik.port=80

networks:

– internal

– web

depends_on:

– mysql

mysql:

image: mysql:5.7

environment:

MYSQL_ROOT_PASSWORD:

networks:

– internal

labels:

– traefik.enable=false

adminer:

image: adminer:4.6.3-standalone

labels:

– traefik.backend=adminer

– traefik.frontend.rule=Host:db-admin.your_domain

– traefik.docker.network=web

– traefik.port=8080

networks:

– internal

– web

depends_on:

– mysql

فايل را ذخيره كرده و از ويرايشگر متن خارج شويد.

سپس ، مقادير را براي پوسته خود براي متغيرهاي WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD قبل از شروع كانتينرها خود تنظيم كنيد:

  • $ export WORDPRESS_DB_PASSWORD=secure_database_password
  • $ export MYSQL_ROOT_PASSWORD=secure_database_password

secure_database_password  را با گذرواژه پايگاه داده مورد نظر خود جايگزين كنيد. فراموش نكنيد كه براي هر دو WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD از رمز عبور يكساني استفاده كنيد.

با تنظيم اين متغيرها ، كانتينرها را با استفاده از docker-compose اجرا كنيد:

  • $ docker-compose up -d

اكنون نگاهي دوباره به داشبورد مديريت Traefik بيندازيد. خواهيد ديد كه اكنون يك backend  و  frontend براي دو سرور مجازي وجود دارد:

كانتينرهاي Docker در Ubuntu 18.04

به blog.your_domain خود برويد. به يك اتصال TLS هدايت خواهيد شد و اكنون مي توانيد تنظيمات WordPress را انجام دهيد:

كانتينرهاي Docker در Ubuntu 18.04

اكنون با مراجعه به db-admin.your_domain در مرورگر خود ، به Adminer دسترسي پيدا كنيد و your_domain را دوباره با دامنه خود جايگزين كنيد. كانتينر mysql در معرض دنياي خارج نيست ، اما كانتينر adminer  از طريق شبكه داخلي Docker  كه با استفاده از نام كانتينر mysql به عنوان نام هاست به آن استفاده ميكنند ، دسترسي دارد.

در صفحه ورود به سيستم Adminer ، از ROOT به عنوان نام كاربري، MySQL براي سرور مجازي استفاده كنيد. و مقداري را كه براي MYSQL_ROOT_PASSWORD  تعيين كرده ايد براي رمز عبور وارد كنيد. پس از ورود به سيستم ، رابط كاربري Adminer را مشاهده خواهيد كرد:

كانتينرهاي Docker در Ubuntu 18.04

هر دو سايت اكنون كار مي كنند و شما مي توانيد از داشبورد موجود در monitor.your_domain استفاده كنيد تا برنامه هاي خود را تحت نظر داشته باشيد.

نتيجه

در اين آموزش ، Traefik را به درخواست پروكسي از برنامه هاي ديگر در كانتينرهاي Docker پيكربندي كرده ايد.

پيكربندي اعلاني Traefik در سطح كانتينر برنامه ، پيكربندي سرويس هاي بيشتر را آسان مي كند و هنگام افزودن برنامه هاي جديد به ترافيك پروكسي ، نيازي به راه اندازي مجدد كانتينر traefik نيست زيرا Traefik بلافاصله از طريق فايل سوكت Docker كه در حال كنترل است، متوجه تغيير مي شود.

براي كسب اطلاعات بيشتر در مورد آنچه مي توانيد با Traefik انجام دهيد ، به مطالب رسمي Traefik مراجعه كنيد.

نحوه استفاده از 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 ارزان –