سرور مجازی

۱۱۸ مطلب در مرداد ۱۳۹۹ ثبت شده است

  • ۰
  • ۰

مقدمه
با حرکت ابزارهای گسترش دهنده به سمت cloud ، پذیرش پلتفرم cloud IDE (محیط پیشرفت در هم تنیده) در حال رشد است. Cloud IDE از هر نوع دستگاه مدرن از طریق مرورگرهای وب قابل دسترسی است و برای سناریوهای همکاری در زمان واقعی مزایای بسیاری را ارائه می دهند. کار در یک Cloud IDE ، یک محیط توسعه و آزمایش یکپارچه را برای شما و تیم شما ایجاد می کند ، در عین حال ناسازگاری های پلتفرم را به حداقل می رساند. چون از طریق مرورگرهای وب قابل دسترسی است ، Cloud IDE ها از هر نوع دستگاه مدرن در دسترس هستند.
Eclipse Theia یک Cloud IDE قابل توسعه است که بر روی یک سرور مجازی از راه دور و از یک مرورگر وب قابل دسترسی است. از لحاظ بصری ، طراحی شده است که به طور مشابه با Microsoft Visual Studio Code دیده شود و با آن کار شود ، به این معنی که از بسیاری از زبان های برنامه نویسی پشتیبانی می کند ، دارای یک طرح انعطاف پذیر و یک ترمینال یکپارچه است. آنچه Eclipse Theia را از دیگر نرم افزارهای cloud IDE جدا می کند قابلیت توسعه آن است. می توان آن را با استفاده از افزونه های سفارشی اصلاح کرد ، که به شما امکان می دهد یک Cloud IDE متناسب با نیازهای خود تهیه کنید.
در این آموزش ،Eclipse Theia را با استفاده از Docker Compose ، یک ابزار ارکستر، به سرور مجازی Ubuntu 18.04 خود منتقل خواهید کرد. شما آن را در دامنه خود با استفاده از nginx-proxy ، یک سیستم خودکار برای Docker قرار می دهید که فرایند پیکربندی Nginx را ساده تر می کند تا به عنوان یک پروکسی معکوس برای یک container سرویس دهد. شما با استفاده از یک گواهی نامه Let Encrypt TLS رایگان ، که با استفاده از افزونه تخصصی آن تهیه می کنید ، آن را ایمن خواهید کرد. در پایان ، شما باید Eclipse Theia را روی سرور مجازی Ubuntu 18.04 خود از طریق HTTPS در دسترس داشته باشید و از کاربر بخواهید وارد شود.
پیش نیازها
⦁ یک سرور مجازی Ubuntu 18.04 با امتیازات اصلی و یک حساب ثانویه و غیر ریشه. می توانید با دنبال کردن راهنمای تنظیم اولیه سرور مجازی ما برای Ubuntu 18.04 ، این تنظیمات را انجام دهید. برای این آموزش کاربر غیر ریشه sammy است.
⦁ Docker نصب شده روی سرور مجازی شما. مرحله 1 و مرحله 2 نحوه نصب Docker را در اوبونتو 18.04 دنبال کنید. برای آشنایی با Docker ، به اکوسیستم Docker: مقدمه ای بر مؤلفه های مشترک مراجعه کنید.
⦁ Docker compose روی سرور مجازی شما نصب است. مرحله 1 نحوه نصب Docker Compose را در اوبونتو 18.04 دنبال کنید.
⦁ نام دامنه کاملاً ثبت شده. در این آموزش کلا از theia.your_domain استفاده می شود. می توانید نام دامنه را در Namecheap خریداری کنید ، یکی از آنها را به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.
⦁ یک ثبت A DNS با theia.your_domain که به آدرس IP عمومی سرور مجازی شما اشاره میکند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این معرفی را در vpsgol DNS دنبال کنید.
مرحله 1 – استفاده از پروکسی nginx با Let’s Encrypt
در این بخش nginx-proxy و افزونه Let’s Encrypt را با استفاده از Docker Compose به کار میگیرید. این امر امکان تهیه و نوسازی مجوز خودکار TLS را فراهم می کند ، به طوری که هنگام استقرار Eclipse Theia از طریق HTTPS در دامنه شما قابل دسترسی خواهد بود.
برای اهداف این آموزش ، تمام فایل ها را تحت ~ / eclipse-theia ذخیره می کنید. با اجرای دستور زیر دایرکتوری ایجاد کنید:
⦁ $ mkdir ~/eclipse-theia
به آن مراجعه کنید:
⦁ $ cd ~/eclipse-theia
پیکربندی Docker Compose را برای nginx-proxy در فایلی به نام nginx-proxy-compose.yaml ذخیره خواهید کرد. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:
⦁ $nano nginx-proxy-compose.yaml
خطوط زیر را اضافه کنید:
~/eclipse-theia/nginx-proxy-compose.yaml
version: ‘2’

services:
nginx-proxy:
restart: always
image: jwilder/nginx-proxy
ports:
– “80:80”
– “443:443”
volumes:
– “/etc/nginx/htpasswd:/etc/nginx/htpasswd”
– “/etc/nginx/vhost.d”
– “/usr/share/nginx/html”
– “/var/run/docker.sock:/tmp/docker.sock:ro”
– “/etc/nginx/certs”

letsencrypt-nginx-proxy-companion:
restart: always
image: jrcs/letsencrypt-nginx-proxy-companion
volumes:
– “/var/run/docker.sock:/var/run/docker.sock:ro”
volumes_from:
– “nginx-proxy”

در اینجا شما دو سرویس را تعریف می کنید که Docker Compose اجرا خواهد کرد ، nginx-proxy و همراه آن Let’s Encrypt. برای پروکسی ، شما jwilder / nginx-proxy را به عنوان تصویر مشخص میکنید، پورت های HTTP و HTTPS را نقشه برداری می کنید ، و حجم هایی را تعریف می کنید که در زمان اجرا در دسترس شما خواهد بود.
حجم ها دایرکتوری هایی در سرور مجازی شما هستند که سرویس تعریف شده به آنها دسترسی کامل خواهد داشت ، که بعداً برای تنظیم تأیید اعتبار کاربر از آنها استفاده خواهید کرد. برای دستیابی به این هدف ، از جلد اول لیست استفاده می کنید ، که دایرکتوری محلی / etc / nginx / htpasswd را به همان قسمت موجود در داخل آن نگاشت می کشد. در آن پوشه ، nginx-proxy انتظار دارد فایلی را به نام دامنه هدف پیدا کند ، که حاوی اطلاعات ورود به سیستم برای احراز هویت کاربر در قالب htpasswd (نام کاربری: hashed_password) است.
برای افزودن ، شما تصویر Docker را نامگذاری می کنید و با تعیین یک حجم امکان دسترسی به سوکت Docker را می دهید. سپس ، شما مشخص می کنید که این افزونه باید دسترسی به حجمهای تعریف شده برای nginx-proxy را ادامه دهد. هر دو سرویس
تنظیمات راه اندازی مجدد دارند ، که روی ALWAYS تنظیم میشود و به Docker دستور می دهد کانتینر را در صورت خرابی یا ریبوت سیستم مجدداً راه اندازی کند.
فایل را ذخیره کنید و ببندید.
پیکربندی را با اجرای دستور انجام دهید:
⦁ $ docker-compose -f nginx-proxy-compose.yaml up -d
در اینجا نام فایل nginx-proxy-compose.yaml را در پارامتر -f دستور docker-compose می گذارید ، که فایل را برای اجرا مشخص می کند. سپس ، شما فعل UP را می گذرانید که به آن دستور می دهد کانتینرها را اجرا کند. پرچم -d حالت جداشده را فعال می سازد ، به این معنی که Docker Compose کانتینرها را در پس زمینه اجرا می کند.
خروجی نهایی به شرح زیر خواهد بود:
Output
Creating network “eclipse-theia_default” with the default driver
Pulling nginx-proxy (jwilder/nginx-proxy:)…
latest: Pulling from jwilder/nginx-proxy
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete

Digest: sha256:dfc0666b9747a6fc851f5fb9b03e65e957b34c95d9635b4b5d1d6b01104bde28
Status: Downloaded newer image for jwilder/nginx-proxy:latest
Pulling letsencrypt-nginx-proxy-companion (jrcs/letsencrypt-nginx-proxy-companion:)…
latest: Pulling from jrcs/letsencrypt-nginx-proxy-companion
89d9c30c1d48: Pull complete
668840c175f8: Pull complete

Digest: sha256:a8d369d84079a923fdec8ce2f85827917a15022b0dae9be73e6a0db03be95b5a
Status: Downloaded newer image for jrcs/letsencrypt-nginx-proxy-companion:latest
Creating eclipse-theia_nginx-proxy_1 … done
Creating eclipse-theia_letsencrypt-nginx-proxy-companion_1 … done

شما nginx-proxy و همراهش Let’s Encrypt را با استفاده از Docker Compose به کار گرفته اید. اکنون می توانید Eclipse Theia را در دامنه خود تنظیم کرده و آن را ایمن کنید.
مرحله 2 – به کارگیری Eclipse Theia دوکر شده
در این بخش ، فایلی را ایجاد خواهید کرد که شامل هر ترکیب ورود به سیستم مجاز است که کاربر باید آن را وارد کند. سپس Eclipse Theia را با استفاده از Docker Compose به سرور مجازی خود منتقل می کنید و با استفاده از nginx-proxy آن را در دامنه امن خود قرار می دهید.
همانطور که در مرحله قبل توضیح داده شد ، nginx-proxy انتظار دارد که ترکیب های ورود به سیستم در فایلی به نام دامنه در معرض ، با فرمت htpasswd قرار بگیرند و در دایرکتوری / etc / nginx / htpasswd در کانتینر ذخیره شوند. همانطور که در پیکربندی nginx-proxy مشخص کرده ایم ، دایرکتوری محلی که به دایرکتوری مجازی نگاشت می کند ، نیازی به یکسان بودن ندارد.
برای ایجاد ترکیبات ورود ، ابتدا با اجرای دستور زیر باید htpasswd را نصب کنید:
⦁ $ sudo apt install apache2-utils

پکیج apache2-utils حاوی برنامه htpasswd است.
دایرکتوری / etc / nginx / htpasswd را ایجاد کنید:
⦁ $ sudo mkdir -p /etc/nginx/htpasswd
فایلی ایجاد کنید که ورود به سیستم را برای دامنه شما ذخیره کند:

⦁ $ sudo touch /etc/nginx/htpasswd/theia.your_domain

به یاد داشته باشید theia.your_domain را با دامنه Eclipse Theia خود جایگزین کنید.
برای افزودن نام کاربری و رمز ورود ، دستور زیر را اجرا کنید:
⦁ $ sudo htpasswd /etc/nginx/htpasswd/theia.your_domain username
USERNAME را با نام کاربری که می خواهید اضافه کنید جایگزین کنید. از شما دوبار رمز عبور خواسته می شود. پس از ارائه آن ، htpasswd نام کاربری و جفت رمز عبور را در انتهای فایل اضافه می کند. می توانید این دستور را به هر تعداد ورود به سیستم که میخواهید تکرار کنید.
اکنون ، پیکربندی را برای استقرار Eclipse Theia ایجاد خواهید کرد. شما آن را در فایلی به نام eclipse-theia-compose.yaml ذخیره خواهید کرد. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:
⦁ $ nano eclipse-theia-compose.yaml
خطوط زیر را اضافه کنید:
~/eclipse-theia/eclipse-theia-compose.yaml
version: ‘2.2’

services:
eclipse-theia:
restart: always
image: theiaide/theia:next
init: true
environment:
– VIRTUAL_HOST=theia.your_domain
– LETSENCRYPT_HOST=theia.your_domain

در این پیکربندی ، شما یک سرویس واحد به نام eclipse-theia با ریستارت برای ALWAYS و theiaide/theia:next به عنوان تصویر کانتینر تعریف می کنید: شما همچنین می توانید init را روی true تنظیم کنید تا به Docker دستور دهید هنگام اجرای Eclipse Theia در داخل کانتینر ، از init به عنوان مدیر اصلی فرآیند استفاده کند.
سپس دو متغیر محیط را در بخش environment مشخص می کنید: VIRTUAL_HOST و LETSENCRYPT_HOST. اولین مورد به پروکسی nginx منتقل می شود و به آن می گوید کانتینر چه دامنه ای را باید در معرض دید قرار دهید ، در حالی که دومی توسط افزونه Let’s Encrypt آن استفاده می شود و مشخص می کند که برای کدام دامنه درخواست گواهینامه TLS شود. مگر اینکه یک wildcard را به عنوان مقدار VIRTUAL_HOST تعیین کنید ، این دو مقدار باید یکسان باشند.
به یاد داشته باشید theia.your_domain را با دامنه مورد نظر خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید. اکنون با اجرای دستور زیر Eclipse Theia را اجرا کنید:
⦁ $ docker-compose -f eclipse-theia-compose.yaml up -d
خروجی نهایی مشابه زیر به نظر می رسد:
Output

Pulling eclipse-theia (theiaide/theia:next)…
next: Pulling from theiaide/theia
63bc94deeb28: Pull complete
100db3e2539d: Pull complete

Digest: sha256:c36dff04e250f1ac52d13f6d6e15ab3e9b8cad9ad68aba0208312e0788ecb109
Status: Downloaded newer image for theiaide/theia:next
Creating eclipse-theia_eclipse-theia_1 … done

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

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

مرحله 3 – استفاده از رابط Eclipse Theia
در این بخش به بررسی برخی از ویژگی های رابط Eclipse Theia می پردازید.
در سمت چپ IDE ، یک ردیف عمودی از چهار دکمه وجود دارد که متداول ترین ویژگی های مورد استفاده را در یک صفحه جانبی باز می کند.
این نوار قابل تنظیم است بنابراین می توانید این نماها این نوار قابل سفارشی

 

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

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

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سریع)

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

نحوه نصب و استفاده ازRadamsa برای فوز کردن برنامه ها (تکنیک تست خودکار نرم افزار) و خدمات شبکه روی Ubuntu 18.04

نحوه نصب Docker Compose در Debian 10

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18.04

نحوه بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18.04

چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04 تنظیم کرد (شروع سریع)

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

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18.04

نحوه تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو 18.4 تنظیم کرد

نحوه استقرار و مدیریت DNS با استفاده از DNSControl در Debian 10

چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم کرد

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

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
سیستم های مدیریت دیتابیس های منطقی یک مؤلفه اصلی بسیاری از وب سایت ها و برنامه ها است. آنها روشی ساختاری برای ذخیره ، سازماندهی و دسترسی به اطلاعات را ارائه می دهند.
PostgreSQL یا Postgres یک سیستم مدیریت دیتابیس منطقی است که اجرای زبان جستجوی SQL را فراهم می کند. و یک انتخاب متداول برای بسیاری از پروژه های کوچک و بزرگ است و این مزیت را دارد که مطابق با استانداردها می باشد و دارای بسیاری از ویژگی های پیشرفته مانند تعاملات مطمئن و همزمانی بدون قفل خواندن است.
در این راهنما؛ Postgres را بر روی سرور مجازی CentOS 7 نصب خواهید کرد و برخی از روش های اصلی برای استفاده از آن را فرا می گیرید.
پیش نیازها
برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:
یک سرور مجازی CentOS 7 که با پیروی از راهنمای راه اندازی سرور مجازی اولیه ما با CentOS 7 و مراحل توصیه شده بعدی برای سرورهای جدید CentOS 7 ما ، شامل کاربر غیر ریشه با امتیازات sudo و فایروال تنظیم شده با firewalld پیکربندی شده باشد.
برای راه اندازی firewalld ، بخش پیکربندی یک فایروال اساسی در آموزش ستاپ توصیه شده برای سرورهای جدید CentOS 7 را دنبال کنید.
اگر دیتابیس ها بسیار فعال باشند و دارای نشان زمانی در سوابق داخلی باشند ، می توانند به ویژه در برابر تغییرات زمان سیستم آسیب پذیر باشند. برای جلوگیری از برخی رفتارهای متناقض که در اثر ساعتهای خارج از همگام سازی ناشی می شود ، حتماً با دنبال کردن بخش همگام سازی پروتکل زمانی شبکه و محدوده های زمانی پیکربندی در آموزش مراحل اضافی برای سرور مجازیCentOS 7 جدید، همگام سازی پروتکل زمانی شبکه را (NTP) تنظیم کنید. .
مرحله 1 – نصب PostgreSQL
Postgres را می توان با استفاده از منابع پیش فرض CentOS نصب کرد. اما در مورد نوشتن این آموزش ، نسخه ای که در منبع پایه CentOS 7 موجود است منسوخ شده است. بنابراین ، در این آموزش از منبع رسمی Postgres استفاده خواهد شد.

قبل از اقدام به ایجاد منبع جدید ، جستجوی بسته های postgresql را از منبع CentOS-Base حذف کنید. در غیر این صورت ، وابستگی ها ممکن است نسبت به postgresql تهیه شده توسط منبع پایه برطرف شود.
فایل پیکربندی منبع را با استفاده از ویرایشگر متن مورد نظر خود باز کنید. در این آموزش از vim استفاده می شود:
$sudo vi /etc/yum.repos.d/CentOS-Base.repo
بخش های [base] و [update] را پیدا کنید ، با فشار دادن i وارد حالت insert شوید و خط exclud = postgresql * را در هر دو بخش وارد کنید. در نتیجه ، فایل شما به شرح زیر خواهد بود ، با خطوط جدید برجسته شده است:
/etc/yum.repos.d/CentOS-Base.repo

[base]
name=CentOS-$releasever – Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

exclude=postgresql*

#released updates
[updates]
name=CentOS-$releasever – Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
exclude=postgresql*

پس از اتمام ، ESC را فشار دهید تا از حالت درج خارج شوید، سپس: wq و ENTER را برای ذخیره و خروج از فایل بزنید. برای کسب اطلاعات بیشتر در مورد ویرایشگر متن vi و جانشین آن vim ، نصب و استفاده از ویرایشگر متن Vim را در آموزش Cloud Server ببینید.
اکنون با استفاده از منبع رسمی PostgreSQL برای CentOS ، یک بسته تنظیمات منبع را نصب کنید:

$sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
هنگامی که اعلان به شما داده شد ، نصب را با y تأیید کنید.
منبع PostgreSQL شامل اطلاعات مربوط به همه نسخه های موجود PostgreSQL است. با استفاده از دستور زیر می توانید تمام بسته ها و نسخه های موجود را مشاهده کنید:
$yum list postgresql*
نسخه مورد نظر PostgreSQL را انتخاب و نصب کنید. در این راهنما از نسخه PostgreSQL 11 استفاده خواهید کرد.
برای نصب سرور مجازی PostgreSQL از دستور زیر استفاده کنید:
$sudo yum install postgresql11-server
در طی مراحل نصب از شما خواسته می شود تا کلید GPG را با اعلانی مانند موارد زیر وارد کنید:

Importing GPG key 0x442DF0F8:
Userid : “PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>”
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package : pgdg-redhat-repo-42.0-5.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]:

آن را با y تأیید کنید تا نصب کامل شود.
اکنون که نرم افزار نصب شده است ، شما برای تهیه خوشه دیتابیس جدید برای PostgreSQL مراحل ابتدایی را انجام خواهید داد.
مرحله 2 – ایجاد یک خوشه دیتابیس جدید PostgreSQL
شما باید قبل از استفاده از دیتابیس Postgres ، یک دیتابیس PostgreSQL  جدید ایجاد کنید. یک خوشه دیتابیس مجموعه ای از بانکهای داده است که توسط یک سرور مجازی واحد مدیریت می شود. ایجاد یک خوشه دیتابیس شامل ایجاد دایرکتوری هایی است که در آن داده های دیتابیس قرار می گیرد ، جداول کاتولوگ اشتراکی و بانکهای اطلاعاتی template1 و postgres. را ایجاد میکنند.
برای ایجاد یک دیتابیس جدید ، دیتابیس template1 لازم است. هر چیزی که در آن ذخیره شده باشد ، هنگام ایجاد در یک دیتابیس جدید قرار می گیرد. دیتابیس postgres یک دیتابیس پیش فرض است که برای استفاده کاربران ، برنامه های کاربردی و برنامه های شخص ثالث طراحی شده است.

یک خوشه جدید برای دیتابیس PostgreSQL با initdb ایجاد کنید:
$ sudo /usr/pgsql-11/bin/postgresql-11-setup initdb
خروجی زیر را مشاهده خواهید کرد:
Initializing database … OK

اکنون PostgreSQL را با استفاده از systemctl شروع و فعال کنید:
$ sudo systemctl start postgresql-11
$ sudo systemctl enable postgresql-11
خروجی زیر را می دهد
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-11.service to /usr/lib/systemd/system/postgresql-11.service.

اکنون که PostgreSQL به روز شده و در حال اجرا است ، شما می توانید با استفاده از نقش ها ، یاد بگیرید که چگونه Postgres کار می کند و تفاوت آن با سیستم های مدیریت دیتابیس مشابه شما که ممکن است در گذشته استفاده کرده باشید چیست.
مرحله 3 – استفاده از نقشها و بانکهای اطلاعاتی PostgreSQL
به طور پیش فرض ، Postgres از مفهومی به نام نقش ها برای تأیید اعتبار و مجوز استفاده می کند. اینها از بعضی جهات شبیه به حسابهای معمولی یونیکس هستند اما Postgres بین کاربران و گروه ها فرق نمی گذارد و در عوض نقش انعطاف پذیر تری را ترجیح می دهد.
پس از نصب ، Postgres برای استفاده احراز هویت شناسایی تنظیم میشود ، به این معنی که نقش های Postgres با یک حساب کاربری سیستم Unix / Linux مرتبط می شود. اگر نقشی در Postgres وجود داشته باشد ، یک نام کاربری یونیکس / لینوکس با همین نام قادر به ورود به عنوان آن نقش است.
روش نصب یک حساب کاربری به نام postgres ایجاد کرده است که با نقش پیش فرض Postgres همراه است. برای استفاده از Postgres می توانید وارد آن حساب شوید.
چند روش برای استفاده از این حساب برای دسترسی به Postgres وجود دارد.
انتقال به حساب Postgres
با تایپ کردن دستور زیر به حساب Postgres در سرور مجازی خود سوییچ کنید:
$ sudo -i -u postgres
اکنون می توانید با تایپ این دستور فوراً به Postgres دسترسی پیدا کنید:

$ psql
با این کار شما وارد اعلان PostgreSQL می شوید و از اینجا می توانید بلافاصله با سیستم مدیریت دیتابیس ارتباط برقرار کنید.
با تایپ کردن این دستور از اعلان PostgreSQL خارج شوید:
Postgres=# \q
این شما را به خط فرمان سریع postgres Linux بازمیگرداند. اکنون با دستور زیر به حساب sudo اصلی خود برگردید:
$ exit
دسترسی به یک Postgres سریع بدون تعویض حساب
همچنین می توانید دستور مورد نظر خود را با حساب postgres به طور مستقیم با sudo اجرا کنید.
به عنوان مثال ، در نمونه آخر ، به شما دستور داده شد که ابتدا با سوییچ کردن به کاربر Postgres و سپس اجرای psql برای باز کردن اعلان Postgres ، سریعاً بهPostgres برسید. شما می توانید این کار را در یک مرحله با اجرای فرمان واحد psql به عنوان کاربر postgres با sudo انجام دهید ، مانند این:
$ sudo -u postgres psql
با این کار بدون پوسته bash مستقیماً وارد Postgres خواهید شد.
دوباره می توانید با تایپ کردن این دستور از بخش Postgres تعاملی خارج شوید:
Postgres=# \q
در این مرحله، از حساب Postgres برای رسیدن به اعلان psql استفاده کردید. اما بسیاری از موارد استفاده بیشتر به یک نقش Postgres نیاز دارند. برای یادگیری نحوه پیکربندی نقشهای جدید به خواندن متن ادامه دهید.
مرحله 4 – ایجاد نقش جدید
در حال حاضر ، شما فقط نقش postgres ها را در دیتابیس پیکربندی کرده اید. می توانید با استفاده از دستور Createrole نقش های جدیدی را از خط فرمان ایجاد کنید. فلگ –interactive نام نقش جدید را به شما اعلان میکند و همچنین سؤال میکند که آیا مجوزهای فوق کاربری باید داته باشد یا خیر.
اگر به عنوان حساب postgres وارد شوید ، می توانید با تایپ کردن این دستور کاربر جدیدی ایجاد کنید:
postgres@server:$ createuser –interactive
در عوض ، اگر ترجیح می دهید بدون تغییر حساب عادی خود از sudo برای هر دستور استفاده کنید ، تایپ کنید:
$ sudo -u postgres createuser –interactive
این متن با انتخاب های مختلفی شما را باخبر می کند و بر اساس پاسخ های شما ، دستورات درست Postgres را برای ایجاد یک کاربر برای مشخصات شما اجرا می کند. برای این آموزش ، یک کاربر sammy ایجاد کنید و به آن امتیازات فوق کاربر بدهید:
Enter name of role to add: sammy
Shall the new role be a superuser? (y/n) y

با عبور برخی از فلگ های اضافی می توانید کنترل بیشتری به دست آورید. گزینه ها را با مراجعه به صفحه man بررسی کنید:
$ man createuser
نصب شما در Postgres اکنون کاربر جدیدی دارد ، اما شما هنوز هیچ دیتابیسی اضافه نکرده اید. در بخش بعدی این روند توضیح داده شده است.
مرحله 5 – ایجاد یک دیتابیس جدید
فرض دیگری که سیستم تأیید اعتبار Postgres بطور پیش فرض انجام می دهد این است که برای هر نقشی که برای ورود به سیستم استفاده می شود ، آن نقش یک دیتابیس با همان نام دارد که می تواند به آن دسترسی داشته باشد.
این بدان معنی است که ، اگر کاربری که در آخرین بخش ایجاد کرده اید ، sammy خوانده شود ، این نقش سعی خواهد کرد به یک دیتابیس وصل شود که به طور پیش فرض نیز sammy نامیده می شود. می توانید با دستور createdb  دیتابیس مناسب ایجاد کنید.
اگر به عنوان حساب postgres وارد میشوید، مطمئناً شما می توانید چیزی شبیه این تایپ خواهید کرد:
postgres@server:$ createdb sammy
در عوض ، اگر ترجیح می دهید بدون تغییر از حساب عادی خود ، از sudo برای هر فرمان استفاده کنید ، تایپ کنید:
$ sudo -u postgres createdb sammy
این انعطاف پذیری در صورت نیاز چندین مسیر برای ایجاد دیتابیس جدید فراهم می کند.
اکنون که یک دیتابیس جدید ایجاد کرده اید ، با نقش جدید خود وارد آن خواهید شد.

مرحله ششم – باز کردن اعلان Postgres با نقش جدید
برای ورود به تأیید هویت مبتنی بر ident ، به یک کاربر لینوکس با همان نام و نقش دیتابیس Postgres خود نیاز دارید.
اگر یک کاربر سازگار با لینوکس در دسترس ندارید ، می توانید یکی از آنها را با دستور adduser ایجاد کنید. شما باید این کار را از حساب غیر ریشه خود با امتیازات sudo انجام دهید (به این معنی که به عنوان کاربر postgres وارد نشده اید):
$ sudo adduser sammy
پس از در دسترس بودن این حساب جدید ، می توانید با تایپ کردن به دیتابیس سوییچ کنید و وصل شوید:
$ sudo -i -u sammy
$ psql
یا می توانید این کار را بصورت درون خطی انجام دهید:
$ sudo -u sammy psql
این دستور شما را به طور خودکار وارد می کند.
اگر می خواهید کاربر شما به یک دیتابیس دیگر متصل شود ، می توانید با مشخص کردن دیتابیس مانند دستور زیر این کار را انجام دهید:
$ psql -d postgres
پس از ورود به سیستم ، می توانید اطلاعات اتصال فعلی خود را با تایپ کردن دستور زیر بررسی کنید:
Sammy=# \ conninfo
خروجی زیر را نشان خواهد داد:
You are connected to database “sammy” as user “sammy” via socket in “/var/run/postgresql” at port “5432”.

این امر در صورت اتصال به دیتابیس های غیر پیش فرض یا با کاربران غیر پیش فرض مفید است.
با اتصال به دیتابیس خود ، اکنون می توانید ایجاد و حذف جداول را امتحان کنید.
مرحله 7 – ایجاد و حذف جداول
اکنون که می دانید چگونه به سیستم دیتابیس PostgreSQL وصل شوید ، می توانید برخی از وظایف اساسی مدیریت Postgres را یاد بگیرید.
ابتدا یک جدول برای ذخیره برخی داده ها ایجاد کنید. به عنوان نمونه ، جدولی را تهیه خواهید کرد که برخی از تجهیزات زمین بازی را شرح می دهد.
ترکیب اصلی این دستور به شرح زیر است:
CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);
این دستورات به جدول اسمی می دهند و سپس ستون ها و همچنین نوع ستون و حداکثر طول داده های میدان را مشخص می کنند. همچنین می توانید محدودیت های جدول را برای هر ستون به صورت اختیاری اضافه کنید.
می توانید اطلاعات بیشتری در مورد نحوه ایجاد ، حذف و مدیریت جداول در PostgreSQL در یک آموزش Cloud Server دریافت کنید.
برای اهداف توضیحی ، یک جدول ساده مانند این ایجاد کنید:
CREATE TABLE playground (
equip_id serial PRIMARY KEY,
type varchar (50) NOT NULL,
color varchar (25) NOT NULL,
location varchar(25) check (location in (‘north’, ‘south’, ‘west’, ‘east’, ‘northeast’, ‘southeast’, ‘southwest’, ‘northwest’)),
install_date date
);

این دستورات یک جدول ایجاد می کند که تجهیزات زمین بازی را ذخیره می کند. این کار با یک شناسه تجهیزات شروع می شود که از نوع serial  است. این نوع داده یک عدد صحیح است که به طور خودکار رو به افزایش است. شما همچنین به این ستون محدودیت primary keyرا داده اید ، به این معنی که مقادیر باید منحصر به فرد باشند و خنثی نباشند.
برای دو ستون (equip_id و install_date) ، دستورات طول فیلد را مشخص نمی کنند. دلیل این امر این است که برخی از انواع ستونها به طول مشخصی نیاز ندارند زیرا طول دلالت بر نوع است.
دو دستور بعدی به ترتیب ستونهایی را برای نوع و رنگ تجهیزات ایجاد می کنند که هر یک از آنها نمی تواند خالی باشد. دستور بعد از اینها یک ستون مکان و یک محدودیت ایجاد می کند که نیاز دارد این مقدار یکی از هشت مقدار ممکن باشد. دستور آخر یک ستون تاریخ ایجاد می کند که تاریخ نصب تجهیزات را ثبت می کند.
می توانید جدول جدید خود را با تایپ کردن دستور زیر مشاهده کنید:
Sammy=# \d
خروجی زیر را نشان می دهد:
List of relations
Schema | Name | Type | Owner
——–+————————-+———-+——-
public | playground | table | sammy
public | playground_equip_id_seq | sequence | sammy
(2 rows)

جدول زمین بازی شما اینجاست ، اما چیزی به نام playground_equip_id_seq نیز وجود دارد که از نوع sequence است. این نمایشی از نوع serial  است که شما به ستون equip_id خود داده اید. این شماره بعدی را در ترتیب دنبال می کند و به طور خودکار برای ستون های این نوع ایجاد می شود.
اگر می خواهید فقط جدول بدون ترتیب را ببینید ، می توانید تایپ کنید:
Sammy=# \dt
به خروجی زیر منجر میشود:
List of relations
Schema | Name | Type | Owner
——–+————+——-+——-
public | playground | table | sammy
(1 row)

در این مرحله یک جدول نمونه ایجاد کرده اید. در مرحله بعد ، سعی در اضافه کردن ، درخواست و حذف مطالب در آن جدول خواهید کرد.
مرحله 8 – اضافه کردن ، جستجو و حذف داده ها در یک جدول
اکنون که جدول دارید ، می توانید برخی از داده ها را در آن وارد کنید.
به عنوان نمونه ، با فراخوانی جدول موردنظر برای افزودن ، نامگذاری ستونها ، و سپس تهیه داده برای هر ستون ، یک slide و swing را اضافه کنید:
Sammy=# INSERT INTO playground (type, color, location, install_date) VALUES (‘slide’, ‘blue’, ‘south’, ‘2017-04-28’);
Sammy=# INSERT INTO playground (type, color, location, install_date) VALUES (‘swing’, ‘yellow’, ‘northwest’, ‘2018-08-16’);
شما باید هنگام وارد کردن داده ها مراقب باشید تا از معدود مشکلات معمول جلوگیری شود. برای یک ، نام ستون ها را در علامت نق قول نگذارید ، اما مقادیر ستون که وارد می کنید به نقل قول نیاز دارند.
نکته دیگری که باید در نظر داشته باشید این است که برای ستون equip_id مقداری وارد نمی کنید. به این دلیل است که هر زمان که یک ردیف جدید در جدول ایجاد شود ، به طور خودکار شکل میگیرد.
با تایپ کردن دستور زیر اطلاعاتی که اضافه کرده اید بازیابی کنید:
Sammy=# SELECT * FROM playground;
خروجی زیر را مشاهده خواهید کرد:

equip_id | type | color | location | install_date
———-+——-+——–+———–+————–
1 | slide | blue | south | 2017-04-28
2 | swing | yellow | northwest | 2018-08-16
(2 rows)

در اینجا ، می بینید که equip_id شما با موفقیت پر شده است و تمام داده های دیگر شما به درستی سازماندهی شده اند.
اگر slide روی زمین بازی خراب شد و مجبور شدید آن را حذف کنید ، می توانید با تایپ کردن دستور زیر سطر را از جدول خود حذف نمایید:
Sammy=# DELETE FROM playground WHERE type = ‘slide’;
جدول را دوباره فراخوانی کنید:
Sammy=# SELECT * FROM playground;
موارد زیر را مشاهده خواهید کرد:
equip_id | type | color | location | install_date
———-+——-+——–+———–+————–
2 | swing | yellow | northwest | 2018-08-16
(1 row)

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

مرحله 9 – اضافه کردن و حذف ستون ها از یک جدول
پس از ایجاد جدول ، می توانید آن را تغییر دهید تا ستون ها اضافه یا حذف شوند. برای نمایش آخرین بازدید نگهداری برای هر قطعه تجهیزات ، یک ستون اضافه کنید:
Sammy=# ALTER TABLE playground ADD last_maint date;
اگر اطلاعات جدول خود را دوباره مشاهده کنید ، می بینید که ستون جدید اضافه شده است (اما هیچ داده ای وارد نشده است(:
Sammy=# SELECT * FROM playground;
خروجی زیر را مشاهده خواهید کرد:
equip_id | type | color | location | install_date | last_maint
———-+——-+——–+———–+————–+————
2 | swing | yellow | northwest | 2018-08-16 |
(1 row)

حذف ستون به همین سادگی است. اگر متوجه شدید که خدمه کاری شما از یک ابزار جداگانه برای پیگیری تاریخچه نگهداری استفاده می کنند ، می توانید ستون را با تایپ کردن این دستور حذف کنید:
Sammy=# ALTER TABLE playground DROP last_maint;
این ستون last_maint و مقادیر موجود در آن را حذف می کند ، اما تمام داده های دیگر را دست نخورده می گذارد.
با افزودن و حذف ستونها، می توانید داده های موجود را در مرحله آخر به روز کنید.
مرحله 10 – به روزرسانی داده ها در یک جدول
تاکنون یاد گرفته اید که چگونه می توانید سوابق را به یک جدول اضافه کنید و چگونه آنها را حذف کنید ، اما این آموزش هنوز نحوه تغییر ورودی های موجود را پوشش نداده است.
می توانید مقادیر ورودی موجود را با فراخوانی رکورد مورد نظر خود به روز کنید و ستون را روی مقدار مورد نظر خود تنظیم کنید. می توانید از سوابق swing  (با هر swing در جدول شما منطبق میشود) استفاده کنید و رنگ آن را به رنگ قرمز تغییر دهید:
Sammy=# UPDATE playground SET color = ‘red’ WHERE type = ‘swing’;
با فراخوانی داده ها دوباره می توانید تأیید کنید که این عملیات با موفقیت انجام شد:
Sammy=# SELECT * FROM playground;
خروجی زیر را مشاهده خواهید کرد:
equip_id | type | color | location | install_date
———-+——-+——-+———–+————–
2 | swing | red | northwest | 2010-08-16
(1 row)

همانطور که مشاهده می کنید ، اکنون اسلایدها به عنوان قرمز ثبت شده است.
نتیجه
اکنون تنظیم PostgreSQL در سرور مجازی CentOS 7 خود را انجام داده اید. با این حال ، هنوز چیزهای بیشتری برای یادگیری Postgres وجود دارد. در اینجا چند راهنمای دیگر که نحوه استفاده از Postgres را پوشش می دهند آورده شده است:
مقایسه سیستم های مدیریت دیتابیس منطقی
با نحوه ایجاد و مدیریت جداول با Postgres آشنا شوید
در مدیریت نقش ها و مجوزها حرفه ای تر شوید
فراخوانی مهارت در Postgres با Selec

 

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

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سریع)

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

نحوه نصب و استفاده ازRadamsa برای فوز کردن برنامه ها (تکنیک تست خودکار نرم افزار) و خدمات شبکه روی Ubuntu 18.04

نحوه نصب Docker Compose در Debian 10

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18.04

نحوه بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18.04

چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04 تنظیم کرد (شروع سریع)

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

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18.04

نحوه تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو 18.4 تنظیم کرد

نحوه استقرار و مدیریت DNS با استفاده از DNSControl در Debian 10

چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم کرد

 

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

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
Velero یک ابزار پشتیبان مناسب برای خوشه های Kubernetes است که موارد Kubernetes را برای ذخیره سازی مورد به مورد، فشرده سازی و پشتیبان گیری می کند. همچنین با استفاده از ویژگی های اسنپ شات ذخیره سازی واحد ارائه دهنده cloud ، عکس هایی از والیوم های مداوم خوشه شما می گیرد و می تواند موارد و والیوم های ماندگار خوشه را به حالت قبلی بازگرداند.
افزونه vpsgol Velero به شما امکان می دهد تا از حافظه بلوک vpsgol استفاده کنید تا از والیوم های ماندگار اسنپ شات بگیرید و فضایی به شما میدهد تا از موارد Kubernetes بک آپ تهیه کنید. در هنگام اجرای یک خوشه Kubernetes در vpsgol ، این به شما امکان می دهد تا به سرعت از وضعیت خوشه خود نسخه پشتیبان تهیه کرده و در صورت بروز مشکل بازیابی کنید.
در این آموزش ابزار خط فرمان velero را روی یک دستگاه محلی تنظیم و پیکربندی می کنیم و مؤلفه سرور مجازی را در خوشه Kubernetes خود مستقر می کنیم. سپس یک نمونه از برنامه Nginx را استفاده می کنیم که از یک والیوم پایدار برای ورود به سیستم استفاده می کند و سپس یک سناریوی بازیابی مشکل را شبیه سازی می کند.
پیش نیازها
قبل از شروع این آموزش ، موارد زیر را باید در اختیار داشته باشید:
در رایانه محلی خود:
⦁ ابزار خط فرمان kubectl ، پیکربندی شده باید تا به خوشه شما متصل شود. می توانید اطلاعات بیشتری در مورد نصب و پیکربندی ر در مطالب Kubernetes بخوانید.
⦁ ابزار خط فرمان gitکه می توانید نحوه نصب git را در شروع با Git بیاموزید.
در حساب vpsgol خود:
⦁ یک خوشه vpsgol Kubernetes یا یک خوشه Kubernetes (نسخه 1.7.5 یا بالاتر) در دراپلت های vpsgol.
⦁ سرور DNS که در داخل خوشه شما قرار دارد. اگر از vpsgol Kubernetes استفاده می کنید ، این به طور پیش فرض اجرا می شود. برای کسب اطلاعات بیشتر در مورد پیکربندی یک سرویس DNS Kubernetes ، از ⦁ Customizing DNS Service در مطالب رسمی Kuberentes کمک بگیرید.
⦁ فضای vpsgol که موارد پشتیبان گرفته شده Kubernetes شما را ذخیره می کند. برای یادگیری نحوه ایجاد یک فضا ، از  ⦁ the Spaces product documentation کمک بگیرید.
⦁ یک جفت کلید دسترسی برای vpsgol Space. برای یادگیری نحوه ایجاد مجموعه ای از کلیدهای دستیابی ، از ⦁ How to Manage Administrative Access to Spaces کمک بگیرید.
⦁ یک نشانه دسترسی شخصی برای استفاده با vpsgol API. برای یادگیری نحوه ایجاد یک نشانه دسترسی شخصی ، از ⦁ How to Manage Administrative Access to Spaces کمک بگیرید. اطمینان حاصل کنید که توکن ایجاد شده یا استفاده شده از مجوزهای خواندن / نوشتن و یا اسنپ شات استفاده نمیکند.
پس از تنظیم همه این موارد ، آماده شروع کار با این راهنما هستید.

مرحله 1 – نصب مشتری Velero
ابزار پشتیبان گیری Velero شامل یک مشتری نصب شده بر روی رایانه محلی شما و یک سرور مجازی است که در خوشه Kubernetes شما اجرا می شود. برای شروع ، مشتری محلی Velero را نصب خواهیم کرد.
در مرورگر وب خود ، به صفحه منتشر شده repo Velero GitHub بروید ، نسخه مربوط به سیستم عامل و معماری سیستم خود را پیدا کنید و آدرس پیوند را کپی کنید. برای اهداف این راهنما ، ما از یک سرور مجازی اوبونتو 18.04 در یک پردازنده x86-64 (یا AMD64) به عنوان دستگاه محلی خود و نسخه Velero v1.2.0 استفاده خواهیم کرد.
توجه: برای دنبال کردن این راهنما ، باید v1.2.0 از مشتری Velero را دانلود و نصب کنید.
سپس ، از خط فرمان روی رایانه محلی خود ، به دایرکتوری موقت / tmp بروید و cd را در آن قرار دهید:
$cd / tmp
از wget و پیوندی که قبلاً کپی کرده اید برای دانلود تاربال نسخه استفاده کنید:
$wget https: // link_copied_from_release_page
پس از اتمام دانلود ، تاربال را با استفاده از tar اکسترکت کنید (توجه داشته باشید که نام فایل بسته به نسخه منتشر شده و سیستم عامل شما ممکن است متفاوت باشد):
$tar -xvzf velero-v1.2.0-linux-amd64.tar.gz
دیرکتوری / tmp اکنون باید دیرکتوری اکسترکت شده velero-v1.2.0-linux-amd64 و همچنین تاربلی که اخیراً دانلود کرده اید ، را شامل شود.
تأیید کنید که می توانید مشتری velero را با اجرای باینری راه اندازی کنید:
$./velero-v1.2.0-linux-amd64/velero help
شما باید خروجی راهنمایی زیر را مشاهده کنید:
Output
Velero is a tool for managing disaster recovery, specifically for Kubernetes
cluster resources. It provides a simple, configurable, and operationally robust
way to back up your application state and associated data.

If you’re familiar with kubectl, Velero supports a similar model, allowing you to
execute commands such as ‘velero get backup’ and ‘velero create schedule’. The same
operations can also be performed as ‘velero backup get’ and ‘velero schedule create’.

Usage:
velero [command]

Available Commands:
backup Work with backups
backup-location Work with backup storage locations
bug Report a Velero bug
client Velero client related commands
completion Output shell completion code for the specified shell (bash or zsh)
create Create velero resources
delete Delete velero resources
describe Describe velero resources
get Get velero resources
help Help about any command
install Install Velero
plugin Work with plugins
restic Work with restic
restore Work with restores
schedule Work with schedules
snapshot-location Work with snapshot locations
version Print the velero version and associated image
. . .

در این مرحله باید velero  قابل اجرا را از دیرکتوری موقت tmp  خارج کنید و آن را به PATH اضافه کنید. برای افزودن آن به PATH روی یک سیستم اوبونتو کافیست آن را در /usr/local/bin کپی کنید:
$sudo mv velero-v1.2.0-linux-amd64/velero /usr/local/bin/velero
مرحله 2 – پیکربندی اطلاعات سری
قبل از تنظیم مؤلفه سرور مجازی Velero ، باید کلیدهای vpsgol Spaces و نشانه های API خود را آماده کنید. مجدداً با استفاده از دستور cd به دیرکتوری موقت / tmp بروید:
$ cd / tmp
اکنون یک نسخه از افزونه Velero را برای vpsgol دانلود خواهیم کرد. به صفحه انتشار نسخه های Github افزونه بروید و پیوندهایی که به.tar.gz ختم میشوند را کپی کنید.
از wget و پیوندی که قبلاً کپی کرده اید برای دانلود تاربال نسخه استفاده کنید:
$wget https: // link_copied_from_release_page
پس از اتمام دانلود ، تاربل را با استفاده از tar اکسترکت کنید (دوباره توجه داشته باشید که نام فایل بسته به نسخه منتشر شده ممکن است متفاوت باشد):
$tar -xvzf v1.0.0.tar.gz
دیرکتوری / tmp اکنون باید پوشه velero-plugin-1.0.0 اکسترکت شده و همچنین تاربل که اخیراً دانلود کرده اید ، را شامل شود.
سپس cd را در دایرکتوری velero-plugin-1.0.0 وارد میکنیم:
$ cd velero-plugin-1.0.0
اکنون می توانیم کلیدهای دسترسی را برای vpsgol Space و نشانه API برای استفاده به عنوان Kubernetes Secret ذخیره کنیم. ابتدا با استفاده از ویرایشگر مورد علاقه خود ، فایل examples/cloud-credentials را باز کنید.
⦁ $ nano examples/cloud-credential
پرونده به شرح زیر خواهد بود:
/tmp/velero-plugin-1.0.0/examples/cloud-credentials
[default]
aws_access_key_id=
aws_secret_access_key=

برای استفاده از کلیدهای vpsgol Spaces ، “متغیرهای” و را ویرایش کنید. حتماً کاراکترهای < و > را حذف کنید.
مرحله بعدی ویرایش فایل 01-velero-secret.patch.yaml است به گونه ای که شامل نشانه API vpsgol شما باشد. پرونده را در ویرایشگر مورد علاقه خود باز کنید:

⦁ $ nano examples/01-velero-secret.patch.yaml

می بایست شبیه به این باشه:

apiVersion: v1
kind: Secret
stringData:
vpsgol_token:
type: Opaque

برای استفاده از ، کل مکان نگهدار را تغییر دهید. خط باید چیزی شبیه به vpsgol_token: 18a0d730c0e0…. باشد: باز هم ، حتماً کاراکترهای < و > را حذف کنید.
مرحله 3 – نصب سرور مجازی Velero
نصب Velero شامل تعدادی از موارد Kubernetes است که همگی برای ایجاد ، برنامه ریزی و مدیریت پشتیبان گیری با هم کار می کنند. velero قابل اجرا که به تازگی دانلود کرده اید می تواند این موارد را برای شما تولید و نصب کند. دستور نصب velero مراحل آماده سازی اولیه را انجام می دهد تا برای خوشه شما پشتیبان تهیه شود. به طور خاص:
⦁ یک نام فضا velero ایجاد میکند.
⦁ حساب سرویس velero را اضافه میکند.
⦁ قوانین کنترل دسترسی مبتنی بر نقش (RBAC) را برای اعطای مجوز به حساب سرویس velero پیکربندی میکند.
⦁ تعریف منابع اختصاصی (CRD) را برای منابع خاص Velero نصب میکند: پشتیبان گیری ، برنامه ریزی، بازیابی ، پیکربندی.
⦁ پلاگین های Velero را برای مدیریت اسنپ شات و فضای ذخیره سازی ثبت میکند.
دستور velero install را با چند گزینه تنظیمات غیر پیش فرض اجرا خواهیم کرد. به طور خاص ، شما نیاز به ویرایش هر یک از تنظیمات زیر در فراخوانی واقعی فرمان برای مطابقت با پیکربندی Spaces دارید:
– backup velero-backup: مقدار velero-backups را تغییر دهید تا با نام فضای vpsgol Space شما مطابقت داشته باشد. به عنوان مثال اگر فضای خود را ” backup-bucket ” نامیدید ، این گزینه به این شکل است: –bucket backup-bucket
–backup-location-config s3Url=https://nyc3.vpsgolspaces.com,region=nyc3 : URL و منطقه را تغییر دهید تا مطابق با تنظیمات فضای شما باشد. به طور خاص ، هر دو بخش nyc3 را ویرایش کنید تا با منطقه ای که فضای شما در آن میزبان است مطابقت داشته باشد. به عنوان مثال ، اگر فضای شما در منطقه fra1 میزبانی شود ، این خط به این صورت است: –backup-location-config s3Url=https://fra1.vpsgolspaces.com,region=fra1 region=fra1.
شناسه های منطقه عبارتند از: nyc3 ، sfo2 ، sgp1 و fra1.
پس از آماده شدن با تنظیمات مناسب مکان bucket و backup ، وقت آن است که Velero را نصب کنید. دستور زیر را اجرا کنید ، و در صورت لزوم مقادیر خود را جایگزین کنید:

$velero install \
$  –provider velero.io/aws \
$ –backup velero backup \
$ –plugins velero/velero-plugin-for-aws:v1.0.0,vpsgol/velero-plugin:v1.0.0 \
$ –backup-location-config s3Url=https://nyc3.vpsgolspaces.com,region=nyc3 \
$ –use-volume-snapshots=false \
$ –secret-file=./examples/cloud-credentials
باید خروجی زیر را مشاهده کنید:
Output
CustomResourceDefinition/backups.velero.io: attempting to create resource
CustomResourceDefinition/backups.velero.io: created
CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource
CustomResourceDefinition/backupstoragelocations.velero.io: created
CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource
CustomResourceDefinition/deletebackuprequests.velero.io: created
CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource
CustomResourceDefinition/downloadrequests.velero.io: created
CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource
CustomResourceDefinition/podvolumebackups.velero.io: created
CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource
CustomResourceDefinition/podvolumerestores.velero.io: created
CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource
CustomResourceDefinition/resticrepositories.velero.io: created
CustomResourceDefinition/restores.velero.io: attempting to create resource
CustomResourceDefinition/restores.velero.io: created
CustomResourceDefinition/schedules.velero.io: attempting to create resource
CustomResourceDefinition/schedules.velero.io: created
CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource
CustomResourceDefinition/serverstatusrequests.velero.io: created
CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource
CustomResourceDefinition/volumesnapshotlocations.velero.io: created
Waiting for resources to be ready in cluster…
Namespace/velero: attempting to create resource
Namespace/velero: created
ClusterRoleBinding/velero: attempting to create resource
ClusterRoleBinding/velero: created
ServiceAccount/velero: attempting to create resource
ServiceAccount/velero: created
Secret/cloud-credentials: attempting to create resource
Secret/cloud-credentials: created
BackupStorageLocation/default: attempting to create resource
BackupStorageLocation/default: created
Deployment/velero: attempting to create resource
Deployment/velero: created
Velero is installed! ⛵ Use ‘kubectl logs deployment/velero -n velero’ to view the status.

شما میتوانید به کارگیری ورودی ها با استفاده از دستور kubect از خروجی را مشاهده کنید. پس از آماده سازی به کارگیری، میتوانید به مرحله بعدی بروید که پیکربندی سرور مجازی است. به کارگیری موفق شبیه زیر خواهد بود (با یک تفاوت ستون AGE):
$ kubectl get deployment/velero –namespace velero
Output
NAME READY UP-TO-DATE AVAILABLE AGE
velero 1/1 1 1 2m

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

توجه: می توانید kubeconfig را که ابزار خط فرمان velero باید با فلگ –kubeconfig استفاده کند ، مشخص کنید. اگر از این فلگ استفاده نمی کنید ، velero متغیر محیط KUBECONFIG را بررسی کرده و سپس به پیش فرض kubectl  یعنی (~/.kube/config) برمیگردد.

مرحله 4 – پیکربندی اسنپ شات
هنگامی که سرور مجازی Velero را نصب کردیم ، گزینه –use-volume-snapshots = false بخشی از دستور بود. از آنجا که می خواهیم اسنپ شات از دستگاه های ذخیره سازی بلوک موجود در خوشه Kubernetes بگیریم ، باید به Velero بگوییم که از پلاگین صحیح برای ذخیره سازی بلوک vpsgol استفاده کند.
دستور زیر را اجرا کنید تا افزونه فعال شود و آن را به عنوان ارائه دهنده اسنپ شات پیش فرض ثبت کنید:

$velero snapshot-location create default –provider vpsgol.com/velero
خروجی زیر را مشاهده خواهید کرد:
Snapshot volume location “default” configured successfully.

مرحله 5 – اضافه کردن یک نشانه API
در مرحله قبل ، ذخیره بلوک و موارد دخیره را در سرور مجازی Velero ایجاد کردیم. ما افزونه vpsgol / velero: v1.0.0 را با سرور مجازی ثبت کرده ایم و کلیدهای مخفی Spaces را در خوشه نصب کرده ایم.
مرحله آخر افزودن اطلاعات سری cloud-credentials است که قبلاً برای استفاده از نشانه vpsgol API ما ایجاد کرده ایم. بدون این نشانه ، افزونه Snapshot قادر به تأیید اعتبار با API vpsgol نخواهد بود.
ما می توانیم از دستور edit kubectl برای تغییر موضوع آرایش Velero با استفاده از نشانه API استفاده کنیم. با این حال ، ویرایش موضوعات پیچیده YAML با دست می تواند خسته کننده و پر خطا باشد. در عوض ، از دستور patch kubectl استفاده خواهیم کرد زیرا Kubernetes از patch موضوعات پشتیبانی می کند. بیایید نگاهی گذرا به مطالب فایل های پچ مورد نظر خود بیاندازیم.
اولین فایل افزوده examples/01-velero-secret.patch.yaml است که قبلاً ویرایش کرده اید. این برای افزودن نشانه API شما به اطلاعات سری secrets/cloud-credentials طراحی شده است که از قبل حاوی کلیدهای Spaces شما بود. فایل را cat کنید:
$cat examples/01-velero-secret.patch.yaml
باید مانند این باشد (با نشان شما به جای نگهدارنده  placeholder):
examples/01-velero-secret.patch.yaml
. . .

apiVersion: v1
kind: Secret
stringData:
vpsgol_token:
type: Opaque

حال بیایید به فایل پچ Deployment نگاه کنیم:
$cat examples/02-velero-deployment.patch.yaml
باید YAML زیر را ببینید:
examples/02-velero-deployment.patch.yaml
. . .

apiVersion: v1
kind: Deployment
spec:
template:
spec:
containers:
– args:
– server
command:
– /velero
env:
– name: vpsgol_TOKEN
valueFrom:
secretKeyRef:
key: vpsgol_token
name: cloud-credentials
name: velero

این فایل نشان می دهد که ما در حال وصله کردن Deployment’s Pod spec هستیم که به آن velero گفته می شود. از آنجا که این یک پچ است ، دیگر نیازی به مشخص کردن کل خصوصیات یا ابرداده های Kubernetes نیست. در این حالت ، پیاده سازی Velero قبلاً با استفاده از cloud-credentials پیکربندی شده است زیرا دستور نصب velero آن را برای ما ایجاد کرده است. بنابراین ، تمام آنچه که باید این پچ انجام دهد ثبت نام vpsgol_token به عنوان متغیر محیط با Velero Pod است که قبلاً مستقر شده است.
بیایید اولین پچ مخفی را با استفاده از دستور patch kubectl اعمال کنیم:

$kubectl patch secret/cloud-credentials -p “$(cat examples/01-velero-secret.patch.yaml)” –namespace velero
باید خروجی زیر را مشاهده کنید:
secret/cloud-credentials patched

سرانجام ما Deployment را پچ می کنیم. دستور زیر را اجرا کنید:
$kubectl patch deployment/velero -p “$(cat examples/02-velero-deployment.patch.yaml”) –namespace velero
در صورت موفقیت آمیز بودن، خروجی زیر را مشاهده خواهید کرد:
deployment.apps/velero patched

بیایید تأیید کنیم که آرایش پچ شده با استفاده از kubectl get در فضایvelero کار می کند:
$kubectl get deployment/velero –namespace velero
باید خروجی زیر را مشاهده کنید:
NAME READY UP-TO-DATE AVAILABLE AGE
velero 1/1 1 1 12s

در این مرحله Velero در حال اجرا و کاملاً پیکربندی شده است ، و آماده تهیه نسخه پشتیبان و بازیابی موارد خوشه ای Kubernetes و والیوم های پایدار در vpsgol Spaces و Block Storage است.
در بخش بعدی ، ما یک آزمایش سریع انجام خواهیم داد تا اطمینان حاصل کنیم که عملکرد نسخه پشتیبان و بازیابی همانطور که انتظار می رود ، کار می کند.
مرحله ششم – تست تهیه نسخه پشتیبان و بازیابی فرآیند
اکنون که Velero را با موفقیت نصب و پیکربندی کرده ایم ، می توانیم با استفاده از والیوم و سرویس مداوم ، آزمایش Nginx Deployment را ایجاد کنیم. پس از اجرای Deployment ، از پشتیبان گیری استفاده می کنیم و فرآیند را بازیابی می کنیم تا اطمینان حاصل شود که Velero پیکربندی شده و به درستی کار می کند.
اطمینان حاصل کنید که هنوز در دایرکتوری /tmp/velero-plugin-1.0.0 کار می کنید. دایرکتوری examples  حاوی نمونه Nginx به نام nginx-shembull.yaml است.
این فایل را با استفاده از ویرایشگر مورد نظر خود باز کنید:
$nano examples/nginx-example.yaml
متن زیر را باید مشاهده کنید:
Output
. . .

apiVersion: v1
kind: Namespace
metadata:
name: nginx-example
labels:
app: nginx


kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-logs
namespace: nginx-example
labels:
app: nginx
spec:
storageClassName: do-block-storage
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 5Gi


apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
namespace: nginx-example
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
volumes:
– name: nginx-logs
persistentVolumeClaim:
claimName: nginx-logs
containers:
– image: nginx:stable
name: nginx
ports:
– containerPort: 80
volumeMounts:
– mountPath: “/var/log/nginx”
name: nginx-logs
readOnly: false


apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx-svc
namespace: nginx-example
spec:
ports:
– port: 80
targetPort: 80
selector:
app: nginx
type: LoadBalancer

در این فایل فضاهایی برای موارد زیر مشاهده می کنیم:
⦁ یک نام فضای Nginx به نام nginx-example
⦁ استقرار Nginx متشکل از یک نمونه کپی شده از تصویر کانتینر nginx:stable
⦁ ادعای والیوم مداوم 5Gi (به نام log-nginx) با استفاده از do-block-storage در StorageClass
⦁ یک سرویس LoadBalancer که پورت 80 را در معرض دید قرار می دهد
با استفاده از kubectl apply موارد را ایجاد کنید:
$kubectl apply -f examples/nginx-example.yaml
باید خروجی زیر را مشاهده کنید:
Output
namespace/nginx-example created
persistentvolumeclaim/nginx-logs created
deployment.apps/nginx-deploy created
service/nginx-svc created

بررسی کنید که استقرار موفق باشد:
$kubectl get deployments –namespace=nginx-example
باید برای سرویس my-nginx هم CLUSTER-IP داخلی و هم EXTERNAL-IP را مشاهده کنید:
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc LoadBalancer 10.245.147.61 159.203.48.191 80:30232/TCP 3m1s

به EXTERNAL-IP توجه داشته باشید و آن را به سمت استفاده از مرورگرتان هدایت کنید.
هنگامی که در دسترس قرار گرفت به 1 رسید ، IP خارجی تعادل بار Nginx را با استفاده از kubectl دریافت کنید:

شما باید صفحه خوشامدگویی NGINX زیر را ببینید:

این نشان می دهد که Nginx Deployme شما و خدمات به روز و در حال اجرا هستند.
قبل از شبیه سازی سناریوی فاجعه ما ، ابتدا ورود به دسترسی Nginx (که در یک حجم مداوم متصل به Nginx Pod ذخیره شده) را بررسی کنید:
$kubectl get pods –namespace nginx-example
Output
NAME READY STATUS RESTARTS AGE
nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 4m14s

اکنون ، داخل کانتینر در حال اجرا Nginx وارد شوید تا به یک پوسته در داخل آن برسید:
$kubectl exec -it nginx-deploy-694c85cdc8-vknsk –namespace nginx-example — /bin/bash

به محض ورود به کانتینر Nginx بروید ، ورودهای دسترسی Nginx را cat کنید:

# cat /var/log/nginx/access.log
باید برخی از ورودی های Nginx را مشاهده کنید:
Output
10.244.0.119 – – [03/Jan/2020:04:43:04 +0000] “GET / HTTP/1.1” 200 612 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0” “-”
10.244.0.119 – – [03/Jan/2020:04:43:04 +0000] “GET /favicon.ico HTTP/1.1” 404 153 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0” “-”

این موارد را یادداشت کنید (به ویژه زمانها) ، زیرا ما از آنها برای تأیید موفقیت در روش بازیابی استفاده خواهیم کرد. از pod خارج شوید:
$ exit
اکنون می توانیم از روش پشتیبان گیری برای کپی کردن همه موارد nginx Kubernetes در Spaces استفاده کنیم و یک اسنپ شات از والیوم مداوم که هنگام استقرار Nginx ایجاد کردیم را بگیرید.
$ velero backup create nginx-backup –selector app=nginx
برنامه –selector = nginx به سرور مجازی Velero دستور می دهد تا فقط از موضوعات Kubernetes با انتخابگر لیبل app=nginx پشتیبان تهیه کند.
باید خروجی زیر را مشاهده کنید:
Output
Backup request “nginx-backup” submitted successfully.
Run `velero backup describe nginx-backup` or `velero backup logs nginx-backup` for more details.

اجرای velero backup describe nginx-backup –details باید خروجی زیر را بعد از یک تأخیر کوتاه ارائه دهد:
Output
Name: nginx-backup
Namespace: velero
Labels: velero.io/backup=nginx-backup
velero.io/pv=pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca
velero.io/storage-location=default
Annotations:

Phase: Completed

Namespaces:
Included: *
Excluded:

Resources:
Included: *
Excluded:
Cluster-scoped: auto

Label selector: app=nginx

Storage Location: default

Snapshot PVs: auto

TTL: 720h0m0s

Hooks:

Backup Format Version: 1

Started: 2020-01-02 23:45:30 -0500 EST
Completed: 2020-01-02 23:45:34 -0500 EST

Expiration: 2020-02-01 23:45:30 -0500 EST

Resource List:
apps/v1/Deployment:
– nginx-example/nginx-deploy
apps/v1/ReplicaSet:
– nginx-example/nginx-deploy-694c85cdc8
v1/Endpoints:
– nginx-example/nginx-svc
v1/Namespace:
– nginx-example
v1/PersistentVolume:
– pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca
v1/PersistentVolumeClaim:
– nginx-example/nginx-logs
v1/Pod:
– nginx-example/nginx-deploy-694c85cdc8-vknsk
v1/Service:
– nginx-example/nginx-svc

Persistent Volumes:
pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca:
Snapshot ID: dfe866cc-2de3-11ea-9ec0-0a58ac14e075
Type: ext4
Availability Zone:
IOPS: <N/A>

این خروجی نشان می دهد که پشتیبان گیری nginx-backup با موفقیت انجام شد. لیست منابع هر یک از موضوعات Kubernetes را که در نسخه پشتیبان تهیه شده است نشان می دهد. بخش آخر نشان می دهد که از PersistentVolume نیز با استفاده از اسنپ شات فایل سیستم نسخه پشتیبان تهیه شده است.
برای تأیید از داخل کنترل پنل vpsgol Cloud ، به فضای حاوی فایل های پشتیبان Kubernetes خود بروید.
شما باید یک دایرکتوری جدید با نام nginx-backup را ببینید که حاوی فایل های پشتیبان Velero است.
با استفاده از نوار ناوبری در سمت چپ ، به قسمت تصاویر و سپس اسنپ شات ها بروید. در اسنپ شات ها ، به Volume بروید. شما باید Snapshot مربوط به PVC ذکر شده در خروجی فوق را مشاهده کنید.
اکنون می توانیم فرآیند بازیابی را آزمایش کنیم.
بیایید ابتدا نام فضای nginx-example را حذف کنیم. با این کار همه چیز در نام فضا، از جمله Load Balancer و والیوم مداوم حذف می شود:
$kubectl delete namespace nginx-example
تأیید کنید که دیگر نمی توانید به Nginx در انتهای Load Balancer دسترسی پیدا کنید ، و این که به کارگیری برنامه nginx-example دیگر در حال اجرا نیست:
$kubectl get deployments –namespace=nginx-example
Output
No resources found in nginx-example namespace.

اکنون می توانیم دوباره با استفاده از مشتری velero ، فرآیند بازیابی را انجام دهیم:
$ velero restore create –from-backup nginx-backup
در اینجا ما از create  برای ایجاد مورد Velero Restore از موضوع nginx-backup استفاده می کنیم.
باید خروجی زیر را مشاهده کنید:
Output
$Restore request “nginx-backup-20200102235032” submitted successfully.
$Run `velero restore describe nginx-backup-20200102235032` or `velero restore logs nginx-backup-20200102235032` for more details.
وضعیت اجرای بازیابی شده را بررسی کنید:
$kubectl get deployments –namespace=nginx-example
Output
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 58s
ایجاد والیوم مداوم را بررسی کنید
$kubectl get pvc –namespace=nginx-example
Output
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nginx-logs Bound pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca 5Gi RWO do-block-storage 75s

بازیابی همچنین LoadBalancer ایجاد کرد. گاهی اوقات سرویس با یک آدرس IP جدید ایجاد می شود. باید مجدداً آدرس EXTERNAL-IP را پیدا کنید:

$kubectl get services –namespace nginx-example
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc LoadBalancer 10.245.15.83 159.203.48.191 80:31217/TCP 97s
برای تأیید به روز رسانی و اجرای Nginx ، یک بار دیگر به IP خارجی سرویس Nginx بروید.
در آخر ، ورودهای مربوط به والیوم پایدار را بازبینی کنید تا تأیید کنید که سابقه ورود پس از بازیابی ، حفظ شده است.
برای این کار ، یک بار دیگر نام Pod را با استفاده از kubectl get دریافت کنید:
$kubectl get pods –namespace nginx-example
Output
NAME READY STATUS RESTARTS AGE
nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 2m20s

سپس به آن exec کنید:
$kubectl exec -it nginx-deploy-694c85cdc8-vknsk –namespace nginx-example — /bin/bash
به محض ورود به کانتینر Nginx، ورودهای دسترسی به Nginx را cat کنید:
$cat /var/log/nginx/access.log
Output
10.244.0.119 – – [03/Jan/2020:04:43:04 +0000] “GET / HTTP/1.1” 200 612 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0” “-”
10.244.0.119 – – [03/Jan/2020:04:43:04 +0000] “GET /favicon.ico HTTP/1.1” 404 153 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0” “-”

شما باید همان اقدامات دسترسی قبل از تهیه نسخه پشتیبان را ببینید (بازه های زمانی را یادداشت کنید) که تأیید میکند که بازیابی والیوم پایدار موفقیت آمیز بوده است. توجه داشته باشید پس از انجام بازیابی ، اگر از صفحه فرود Nginx بازدید کنید ، ممکن است تلاش های بیشتری نیاز باشد.
در این مرحله ، ما با موفقیت از موضوعات Kubernetes خود در فضاهای vpsgol و والیومهای پایدار خود با استفاده از اسنپ شات های بلوک ذخیره سازی پشتیبان تهیه کرده ایم. ما یک سناریوی فاجعه را شبیه سازی کردیم و سرویس را به برنامه تست Nginx بازیابی کردیم.
نتیجه
در این راهنما ابزار پشتیبان گیری Velero Kubernetes را روی یک خوشه مبتنی بر vpsgol Kubernetes نصب و پیکربندی کردیم. ما این ابزار را برای تهیه نسخه پشتیبان از موضوعات Kubernetes در vpsgol Spaces و پشتیبان گیری از والیوم های مداوم با استفاده از اسنپ شات های والیوم ذخیره سازی بلوک پیکربندی کرده ایم.

از Velero همچنین می توان برای برنامه ریزی پشتیبان گیری منظم از خوشه Kubernetes برای بازیابی در برابر مشکلات استفاده کرد. برای این کار می توانید از دستور velero schedule استفاده کنید. Velero همچنین می تواند برای انتقال منابع از یک خوشه به گروه دیگر استفاده شود.
برای کسب اطلاعات بیشتر در مورد vpsgol Spaces ، از مطالب رسمی Spaces کمک بگیرید. برای کسب اطلاعات بیشتر در مورد والیوم های ذخیره سازی بلوک ، با مستندات والیوم ذخیره سازی بلوک مشورت کنید.
این آموزش بر اساس README موجود در repo GitHub-plugin-plugin-digital-stackPointCloud

 

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

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سریع)

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

نحوه نصب و استفاده ازRadamsa برای فوز کردن برنامه ها (تکنیک تست خودکار نرم افزار) و خدمات شبکه روی Ubuntu 18.04

نحوه نصب Docker Compose در Debian 10

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18.04

نحوه بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18.04

چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04 تنظیم کرد (شروع سریع)

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

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18.04

نحوه تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو 18.4 تنظیم کرد

نحوه استقرار و مدیریت DNS با استفاده از DNSControl در Debian 10

چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم کرد

 

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

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
خوشه بندی با توزیع تغییرات در سرورهای مختلف ، دسترس پذیری بالایی به پایگاه داده شما می دهد. در صورت عدم موفقیت یکی از موارد ، بقیه سریعاً برای سرویس دهی در دسترس هستند.
خوشه ها در دو پیکربندی کلی ، فعال-منفعل و فعال-فعال ارائه می شوند. در خوشه های فعال منفعل، همه نوشتن ها بر روی یک سرور مجازی فعال انجام می شود و سپس در یک یا چند سرور مجازی منفعل کپی می شوند که آماده هستند فقط در صورت خرابی سرور مجازی فعال ، به کار بیفتند. برخی از خوشه های فعال منفعل نیز امکان انجام SELECT بر روی گره های منفعل را می دهند. در یک خوشه فعال فعال ، هر گره خواندن -نوشتن است و تغییر ایجاد شده در یکی ، برای همه تکرار می شود.
MySQL یک سیستم مدیریت پایگاه داده رابطه ای منبع باز است که یک انتخاب محبوب برای پایگاه داده های SQL میباشد. Galera یک راه حل خوشه بندی بانک اطلاعاتی است که شما را قادر می سازد با استفاده از همانند سازی همزمان ، خوشه های چند مستر تنظیم کنید. Galera به طور خودکار داده ها را بر روی گره های مختلف به صورت همگام سازی مدیریت میکند در حالی که به شما امکان می دهد برای هر کدام از گره های موجود در این گروه ، درخواست هایی را بخوانید و بنویسید. می توانید اطلاعات بیشتری در مورد Galera در صفحه مطالب رسمی کسب کنید.
در این راهنما ، یک خوشه فعال MySQL Galera را پیکربندی می کنید. برای اهداف نمایشی ، سه دراپلت Ubuntu 18.04 را که به عنوان گره در خوشه عمل می کنند ، پیکربندی کرده و آزمایش می کنید. این مقدار گره کوچکترین خوشه قابل تنظیم است.
پیش نیازها
برای دنبال کردن مطلب ، علاوه بر موارد زیر ، به یک حساب vpsgol نیز نیاز دارید:
سه دراپلت Ubuntu 18.04 با شبکه خصوصی فعال شده که هر کدام دارای یک کاربر غیر ریشه با امتیازات sudo هستند.
برای راه اندازی شبکه های خصوصی در سه دراپلت ، راهنمای راه اندازی سریع شبکه را دنبال کنید.
برای کمک به راه اندازی یک کاربر غیر ریشه با امتیازات sudo ، راهنمای اولیه راه اندازی سرور مجازی ما با آموزش اوبونتو 18.04 را دنبال کنید.
در حالی که مراحل این آموزش برای دراپلت های vpsgol نوشته و تست شده است ، بسیاری از آنها در سرورهای غیر vpsgol نیز که شبکه های خصوصی را فعال می کنند کاربرد دارند.
مرحله 1 – اضافه کردن منابع MySQL به همه سرورها
در این مرحله منابع بسته MySQL و Galera را به هر سه سرور مجازی خود اضافه می کنید تا بتوانید نسخه صحیح MySQL و Galera مورد استفاده در این آموزش را نصب کنید.

توجه: Codership ، شرکت پشتیبان خوشه Galera ، منبع Galera را حفظ می کند ، اما توجه داشته باشید که همه منابع خارجی قابل اعتماد نیستند. مطمئن شوید که فقط از منابع معتبر نصب کنید.
در این آموزش از MySQL نسخه 5.7 استفاده خواهید کرد. کار را با اضافه کردن منبع خارجی اوبونتو که توسط پروژه Galera برای سه سرور مجازی شما ذخیره شده است شروع می کنید.
پس از به روزرسانی منابع هر سه سرور مجازی ، شما می توانید MySQL را به همراه Galera نصب کنید.
ابتدا ، در هر سه سرور مجازی خود ، کلید منبع Galera را با دستور apt-key اضافه کنید ، که مدیر بسته APT برای تأیید صحت این بسته از آن استفاده می کند:
$ sudo apt-key adv –keyserver keyserver.ubuntu.com –recv BC19DDBA
بعد از چند ثانیه ، خروجی زیر را دریافت خواهید کرد:
Executing: /tmp/apt-key-gpghome.RG5cTZjQo0/gpg.1.sh –keyserver keyserver.ubuntu.com –recv BC19DDBA
gpg: key D669017EBC19DDBA: public key “Codership Oy <info@galeracluster.com>” imported
gpg: Total number processed: 1
gpg: imported: 1

پس از داشتن کلید قابل اعتماد در بانک اطلاعاتی هر سرور مجازی ، می توانید منابع را اضافه کنید. برای این کار ، یک فایل جدید به نام galera.list را در فهرست /etc/apt/source.list.d/ هر سرور مجازی ایجاد کنید:
$ sudo nano /etc/apt/sources.list.d/galera.list
در ویرایشگر متن ، سطرهای زیر را اضافه کنید ، که منابع مناسب را در اختیار مدیر بسته APT قرار می دهد:
/etc/apt/sources.list.d/galera.list
deb http://releases.galeracluster.com/mysql-wsrep-5.7/ubuntu bionic main
deb http://releases.galeracluster.com/galera-3/ubuntu bionic main

فایل ها را روی هر سرور مجازی ذخیره کنید و ببندید (CTRL + X ، Y ، سپس ENTER را فشار دهید)
منابع codership اکنون برای هر سه سرور مجازی شما در دسترس است. با این حال ، مهم است که به apt دستور دهید که منابع Codership را به دیگر منابع ترجیح دهد تا از نصب نسخه های پچ شده نرم افزار مورد نیاز برای ایجاد یک خوشه Galera اطمینان حاصل شود. برای این کار ، فایل جدید دیگری به نام galera.pref را در فهرست /etc/apt/preferences.d/ هر سرور مجازی ایجاد کنید:

$ sudo nano /etc/apt/preferences.d/galera.pref
خطوط زیر را به ویرایشگر متن اضافه کنید:
/etc/apt/preferences.d/galera.pref
# Prefer Codership repository
Package: *
Pin: origin releases.galeracluster.com
Pin-Priority: 1001

آن فایل را ذخیره کرده و ببندید ، سپس دستور زیر را روی هر سرور مجازی اجرا کنید تا مانیفست بسته از منابع جدید را شامل شود:
$sudo apt update
اکنون که منبع بسته را با موفقیت روی هر سه سرور مجازی خود اضافه کردید ، آماده هستید MySQL را در بخش بعدی نصب کنید.
مرحله 2 – نصب MySQL در تمام سرورها
در این مرحله بسته MySQL را روی سه سرور مجازی خود نصب خواهید کرد.
برای نصب نسخه MySQL پچ شده برای کار با Galera ، و همچنین بسته Galera ، دستور زیر را در هر سه سرور مجازی اجرا کنید.
$ sudo apt install galera-3 mysql-wsrep-5.7
از شما خواسته می شود که تأیید کنید آیا نصب را ادامه می دهید یا خیر. Y را وارد کنید تا نصب ادامه یابد. در حین نصب از شما خواسته می شود که یک رمز عبور برای کاربر اجرایی MySQL ایجاد کنید. یک رمز عبور ایمن تنظیم کنید و ENTER را برای ادامه فشار دهید.
پس از نصب MySQL ، مشخصات پیش فرض AppArmor را غیرفعال می کنید تا مطابق مطالب مربوطه Galera ، از عملکرد صحیح Galera اطمینان حاصل کنید. AppArmor یک ماژول هسته برای لینوکس است که عملکرد کنترل دسترسی را برای خدمات از طریق پروفایل های امنیتی فراهم می کند.
AppArmor را با اجرای دستور زیر در هر سرور مجازی غیرفعال کنید:
$ sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
این دستور یک پیوند نمادین از پروفایل MySQL را به فهرست disable اضافه می کند ، که نمایه را در بوت غیرفعال می کند.
سپس دستور زیر را اجرا کنید تا تعریف MySQL را که قبلاً در هسته بارگذاری شده است حذف کنید.
$ sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
پس از نصب MySQL و نمایه AppArmor در اولین سرور مجازی خود ، این مراحل را برای دو سرور مجازی دیگر خود تکرار کنید.

اکنون که MySQL را با موفقیت در هر سه سرور مجازی نصب کردید ، می توانید در قسمت بعدی به مرحله تنظیمات بروید.
مرحله 3 – پیکربندی گره اول
در این مرحله اولین گره خود را پیکربندی می کنید. هر گره در خوشه نیاز به پیکربندی تقریباً یکسان دارد. به همین دلیل تمام پیکربندی های موجود در دستگاه اول خود را انجام داده و سپس آن را در گره های دیگر کپی می کنید.
به طور پیش فرض ، MySQL پیکربندی شده است تا دایرکتوری /etc/mysql/conf.d را بررسی کند تا تنظیمات اضافی پیکربندی را از فایل های منتهی به .cnf دریافت کند. در اولین سرور مجازی خود ، با همه دستورالعملهای مربوط به خوشه ، یک فایل در این فهرست ایجاد کنید:
Glara-node01$ sudo nano /etc/mysql/conf.d/galera.cnf
پیکربندی زیر را در فایل اضافه کنید. پیکربندی گزینه های مختلف خوشه ای ، جزئیات مربوط به سرور مجازی فعلی و سایر سرورهای موجود در خوشه و تنظیمات مربوط به همانند سازی را مشخص می کند. توجه داشته باشید که آدرسهای IP موجود در پیکربندی ، آدرسهای خصوصی سرورهای مربوطه شما هستند. خطوط هایلایت شده را با آدرس های IP مناسب جایگزین کنید.
/etc/mysql/conf.d/galera.cnf
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Galera Cluster Configuration
wsrep_cluster_name=”test_cluster”
wsrep_cluster_address=”gcomm://

First_Node_IP,Second_Node_IP,Third_Node_IP”

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address=”This_Node_IP”
wsrep_node_name=”This_Node_Name”

بخش اول تنظیمات MySQL را اصلاح و یا دوباره اجرا می کند که باعث می شود خوشه به درستی کار کند. به عنوان مثال ، Galera با MyISAM یا موتورهای ذخیره سازی غیر معاملاتی مشابه کار نخواهد کرد ، و mysqld نباید به آدرس IP مربوط به localhost محدود شود. می توانید در مورد تنظیمات با جزئیات بیشتری در صفحه پیکربندی سیستم Galera Cluster اطلاعات کسب کنید.
بخش “پیکربندی ارائه دهنده Galera” اجزای MySQL را که یک API همانند سازی WritSet را ارائه می دهد ، پیکربندی می کند. که در این مورد برای شما Galera است ، زیرا Galera یک ارائه دهنده wsrep (WritSet Replication) است. شما برای پیکربندی محیط تکثیر اولیه ، پارامترهای کلی را تعیین می کنید. این نیاز به هیچگونه سفارشی سازی ندارد ، اما می توانید در مورد گزینه های پیکربندی Galera در مطالب موجود اطلاعات بیشتری کسب کنید.
بخش “تنظیمات خوشه Galera” ، خوشه را تعریف می کند ، اعضای خوشه را با آدرس IP یا نام دامنه قابل تعیین شناسایی می کند و نامی را برای این خوشه ایجاد می کند تا از عضویت در گروه صحیح اطمینان حاصل کند. می توانید wsrep_cluster_name را به چیزی با معنی تر از test_cluster تغییر دهید یا آن را به همین صورت رها کنید ، اما باید wsrep_cluster_address را با آدرس های IP خصوصی سه سرور مجازی خود به روز کنید.
بخش پیکربندی همگام سازی Galeraچگونگی ارتباط و همگام سازی داده های خوشه بین اعضا را تعریف می شود. این فقط برای تبدیل وضعیت در هنگامی که یک گره به صورت آنلاین درمیاید، استفاده می شود. برای راه اندازی اولیه خود ، شما از rsync استفاده می کنید ، زیرا معمولاً در دسترس تر است و آنچه را که اکنون به آن نیاز دارید انجام می دهد.
قسمت پیکربندی گره Galera آدرس IP و نام سرور مجازی فعلی را مشخص می کند. این کار هنگام تلاش برای تشخیص مشکلات موجود در ورودها و برای ارجاع به هر سرور مجازی به روش های مختلف مفید است.wsrep_node_address باید با آدرس دستگاهی که در آن قرار دارید مطابقت داشته باشد ، اما می توانید هر نامی را که می خواهید انتخاب کنید تا به شما در شناسایی گره در فایل های log کمک کند.
هنگامی که از فایل پیکربندی خوشه خود راضی شدید ، محتویات را در کلیپ بورد خود کپی کنید ، سپس فایل را ذخیره کنید و ببندید.
اکنون که اولین گره خود را با موفقیت پیکربندی کرده اید ، می توانید در قسمت بعدی پیکربندی گره های باقی مانده را انجام دهید.
مرحله 4 – پیکربندی گره های باقی مانده
در این مرحله ، دو گره باقی مانده را پیکربندی می کنید. در گره دوم ، فایل پیکربندی را باز کنید:
Glara-node02$ sudo nano /etc/mysql/conf.d/galera.cnf
پیکربندی خود را از اولین گره کپی کنید و سپس Galera Node Configuration را به روز کنید تا از آدرس IP یا نام دامنه مناسب برای گره خاصی که تنظیم می کنید استفاده کنید. سرانجام ، نام آن را به روز کنید ، که می توانید هر چیزی که به شما در شناسایی گره موجود در فایل های log کمک میکند ، استفاده نمایید:
/etc/mysql/conf.d/galera.cnf
. . .
# Galera Node Configuration
wsrep_node_address=”This_Node_IP”
wsrep_node_name=”This_Node_Name”
. . .

فایل را ذخیره کنید و از آن خارج شوید.
پس از اتمام این مراحل ، آنها را بر روی گره سوم تکرار کنید.
شما تقریباً آماده هستید تا این خوشه را به کار بگیرید ، اما قبل از انجام این کار ، اطمینان حاصل کنید که درگاه های مناسب در فایروال شما باز است.
مرحله 5 – باز کردن فایروال در هر سرور مجازی
در این مرحله فایروال خود را پیکربندی می کنید تا درگاه های مورد نیاز برای ارتباط بین گره ای باز باشد. در هر سرور مجازی ، وضعیت اجرای فایروال را با اجرای دستور زیر بررسی کنید:
$ sudo ufw status
در این حالت ، فقط SSH مجاز است از طریق:
Output
Status: active

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

از آنجا که فقط ترافیک SSH در این مورد مجاز است ، لازم است قوانینی را برای ترافیک MySQL و Galera اضافه کنید. اگر سعی کردید خوشه را شروع کنید ، به دلیل این قوانین فایروال با شکست مواجه میشوید.
Galera می تواند از چهار پورت استفاده کند:
3306 برای اتصالات مشتری MySQL و انتقال اسنپ شات که از روش mysqldump استفاده می کنند.
4567 برای ترافیک کپی خوشه Galera. همانندسازی Multicast هم از تبدیل UDP و هم TCP در این پورت استفاده می کند.
4568 برای تبدیل وضعیت افزایشی.
4444 برای همه موارد دیگر انتقال اسنپ شات.
در این مثال ، هر زمان که ستاپ خود را انجام دادید ، هر چهار پورت را باز خواهید کرد. هنگامی که تأیید کردید که عملیات کپی در حال کار کردن است ، بهتر است پورت هایی را که در واقع استفاده نمی کنید ببندید و ترافیک را فقط به سرورهای موجود در خوشه محدود کنید.
درگاه ها را با دستورات زیر باز کنید:
$ sudo ufw allow 3306,4567,4568,4444/tcp
$ sudo ufw allow 4567/udp

توجه: بسته به آنچه در سرورهای شما اجرا می شود ، ممکن است لازم باشد سریعاً دسترسی را محدود کنید. راهنمای UFW Essentials: قوانین و دستورات معمول فایروال می تواند در این امر کمک کند.
بعد از تنظیم فایروال خود در گره اول ، همان تنظیمات فایروال را در گره دوم و سوم ایجاد کنید.
اکنون که فایروال ها را با موفقیت پیکربندی کرده اید ، آماده هستید تا در مرحله بعدی خوشه را شروع کنید.
مرحله 6 – شروع خوشه
در این مرحله خوشه MySQL Galera خود را شروع می کنید. اما ابتدا سرویس سیستمی MySQL را فعال می کنید ، به طوری که هر بار که سرور مجازی ریبوت میشود ، MySQL به طور خودکار شروع می شود.
MySQL را فعال کنید تا در هر سه سرور مجازی در حین بوت شروع به کار کند
برای فعال کردن سرویس سیستمی MySQL از دستور زیر در هر سه سرور مجازی استفاده کنید:
$ sudo systemctl enable mysql
خروجی زیر را مشاهده خواهید کرد که نشان می دهد این سرویس با موفقیت به لیست خدمات استارآپ مرتبط شده است:
Output
Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.

اکنون که mysql را فعال کرده اید که در بوت همه سرورها شروع به کار کند ، آماده هستید تا این خوشه را ارتقا دهید.
گره اول را بالا بیاورید
برای بالا بردن گره اول ، باید از یک اسکریپت راه اندازی ویژه استفاده کنید. روشی که خوشه خود را پیکربندی کرده اید ، هر گره ای که آنلاین می شود سعی می کند به حداقل یک گره دیگر که در فایل galera.cnf مشخص شده است وصل شود تا حالت اولیه خود را بدست آورد. بدون استفاده از اسکریپت mysqld_bootstrap که به systemd اجازه می دهد از پارامتر –wsrep-new-cluster عبور کند ، یک systemctl start mysql معمول با شکست مواجه میشود زیرا هیچ گره ای برای اتصال گره اول به آن وجود ندارد.
دستور زیر را در اولین سرور مجازی خود اجرا کنید:
Galera-node-01$ sudo mysqld_bootstrap
این دستور هیچ گونه خروجی را در اجرای موفقیت آمیز نشان نمی دهد. با موفقیت این اسکریپت ، گره به عنوان بخشی از خوشه ثبت می شود و می توانید آن را با دستور زیر مشاهده کنید:
Galera-node-01$ mysql -u root -p -e “SHOW STATUS LIKE ‘wsrep_cluster_size'”
پس از وارد کردن رمز عبور خود ، خروجی زیر را مشاهده خواهید کرد که نشان می دهد یک گره در خوشه وجود دارد:
Output
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| wsrep_cluster_size | 1 |
+——————–+——-+

در گره های باقیمانده می توانید به طور عادی mysql را شروع کنید. آنها به جستجوی هر یک از اعضای لیست خوشه های آنلاین می پردازند و وقتی یکی را پیدا کردند به این خوشه می پیوندند.
گره دوم را بالا بیاورید
اکنون می توانید گره دوم را بالا بیاورید. mysql را شروع کنید:
Galera-node-02$ sudo systemctl start mysql

هیچ خروجی در اجرای موفق نمایش داده نمی شود. با آنلاین شدن هر گره ، اندازه خوشه افزایش می یابد:
Galera-node-02$ mysql -u root -p -e “SHOW STATUS LIKE ‘wsrep_cluster_size'”
خروجی زیر را خواهید دید که نشان می دهد که گره دوم به خوشه پیوسته است و در کل دو گره وجود دارد.
Output
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| wsrep_cluster_size | 2 |
+——————–+——-+

گره سوم را بالا ببرید
اکنون زمان آن رسیده که گره سوم را بالا ببریدم. Mysql را شروع کنید:
Galera-node-03$ sudo systemctl start mysql
دستور زیر را برای یافتن اندازه خوشه اجرا کنید:
Galera-node-03$ mysql -u root -p -e “SHOW STATUS LIKE ‘wsrep_cluster_size'”
خروجی زیر را مشاهده خواهید کرد که نشان می دهد گره سوم به خوشه پیوسته است و تعداد کل گره های موجود در خوشه سه است.
Output
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| wsrep_cluster_size | 3 |
+——————–+——-+

در این مرحله ، کلیه خوشه ها بصورت آنلاین و با موفقیت ارتباط برقرار می کنند. در مرحله بعد می توانید با آزمایش همانند سازی در بخش زیر ، از تنظیم کار اطمینان حاصل کنید.
مرحله 7 – تست همانندسازی
شما مراحل تا این مرحله طی کرده اید تا خوشه شما بتواند کپی کردن را از هر گره به گره دیگر که همانندسازی فعال-فعال نامیده میشود، انجام دهد. در این مرحله ، شما تست خواهید کرد و میبینید که آیا همانند سازی همانطور که انتظار می رود، کار می کند.
در گره اول بنویسید
با ایجاد تغییر در پایگاه داده در اولین گره خود شروع خواهید کرد. دستورات زیر یک پایگاه داده به نام playground و یک جدول درون این پایگاه داده با نام equipment ایجاد می کنند.
Galera-node-01$ mysql -u root -p -e ‘CREATE DATABASE playground;
Galera-node-01$ CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
Galera-node-01$ INSERT INTO playground.equipment (type, quant, color) VALUES (“slide”, 2, “blue”);’
در دستور قبلی ، عبارت CREATE DATABASE یک دیتابیس با نام playground ایجاد می کند. عبارت CREATE یک جدول به نام equipment  درون playground  ایجاد می کند که دارای یک ستون شناسه افزایش خودکار به نام id و سایر ستون ها است. ستون type ، ستون quant و ستون color به ترتیب برای ذخیره نوع و کمیت و رنگ تجهیزات تعریف شده است. عبارت INSERT یک ورودی از نوع اسلاید ، کمیت 2 و رنگ آبی را درج می کند.
اکنون یک مقدار در جدول خود دارید.
داده ها را در گره دوم بخوانید و بنویسید.
در مرحله بعدی ، به منظور بررسی اینکه کپی در حال کار کردن است ، به گره دوم نگاه کنید:
Galera-node-02$ mysql -u root -p -e ‘SELECT * FROM playground.equipment;’
داده هایی که در گره اول وارد کرده اید در مرحله دوم قابل مشاهده خواهد بود ، که اثبات میکند این همانندسازی کار می کند:
Output
+—-+——-+——-+——-+
| id | type | quant | color |
+—-+——-+——-+——-+
| 1 | slide | 2 | blue |
+—-+——-+——-+——-+
از همین گره ، داده ها را در خوشه بنویسید:
Galera-node-02$ mysql -u root -p -e ‘INSERT INTO playground.equipment (type, quant, color) VALUES (“swing”, 10, “yellow”);’

در گره سوم بخوانید و بنویسید
از گره سوم ، می توانید با فراخوانی مجدد جدول ، تمام این داده ها را بخوانید:
Galera-node-03$ mysql -u root -p -e ‘SELECT * FROM playground.equipment;’
خروجی زیر را نشان می دهد که دو ردیف را نشان می دهد:
Output
+—-+——-+——-+——–+
| id | type | quant | color |
+—-+——-+——-+——–+
| 1 | slide | 2 | blue |
| 2 | swing | 10 | yellow |
+—-+——-+——-+——–+
باز هم ، می توانید مقدار دیگری از این گره اضافه کنید:
Galera-node-03$ mysql -u root -p -e ‘INSERT INTO playground.equipment (type, quant, color) VALUES (“seesaw”, 3, “green”);’
در گره اول بخوانید
با بازگشت به گره اول ، می توانید تأیید کنید که داده های شما در همه جا در دسترس است:
Galera-node-01$ mysql -u root -p -e ‘SELECT * FROM playground.equipment;’
خروجی زیر را مشاهده خواهید کرد ، که نشان می دهد ردیف ها در گره اول موجود هستند.
Output
+—-+——–+——-+——–+
| id | type | quant | color |
+—-+——–+——-+——–+
| 1 | slide | 2 | blue |
| 2 | swing | 10 | yellow |
| 3 | seesaw | 3 | green |
+—-+——–+——-+——–+

اکنون با موفقیت تأیید کرده اید که می توانید در همه گره ها بنویسید و این تکرار به درستی انجام می شود.
نتیجه
در این مرحله ، شما یک خوشه آزمایش Galera سه گره ای پیکربندی کرده اید. اگر قصد دارید از یک خوشه Galera در یک وضعیت تولید استفاده کنید ، توصیه می شود با حداقل کمتر از پنج گره شروع نکنید.
قبل از استفاده از تولید ، بهتر است به برخی از عوامل تبدیل اسنپ شات (sst) حالات دیگر از جمله xtrabackup نگاهی بیندازید ، که به شما امکان می دهد گره های جدید را به سرعت و بدون ایجاد اختلال در گره های فعال خود تنظیم کنید. این کار بر کپی کردن واقعی تأثیر نمی گذارد، اما وقتی گره ها شروع می شوند اهمیت پیدا میکند.
همچنین ممکن است به راه حل های خوشه بندی دیگری برای MySQL علاقه مند باشید ، در این صورت می توانید نحوه آموزش ایجاد یک خوشه MySQL چند گره را در Ubuntu 18.04 ببینید. اگر می خواهید راه حل پایگاه داده مدیریت شده را امتحان کنید ، به مستندات پایگاه داده های مدیریت شده vpsgol مراجعه کنید.

 

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

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

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

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

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

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

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

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

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18  –

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

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10  –

نحوه نصب Docker Compose در Debian 10 –

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 –

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7  –

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18  –

بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16 –

استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18 –

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

چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی –

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18 –

 

 

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

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
Ansible یک ابزار مدیریت پیکربندی است که برای خودکار سازی سرور مجازی های کنترل کننده برای مدیران و تیم های عملیاتی طراحی شده است. با استفاده از Ansible می توانید از یک سرور مجازی مرکزی منفرد استفاده کنید تا بسیاری از سیستمهای مختلف از راه دور را با استفاده از SSH و Python به عنوان تنها ابزار مورد نیاز کنترل و پیکربندی کنید.
Ansible وظایف خود را بر روی سرور مجازی هایی انجام می دهد که بر اساس تعریف وظیفه آنها را مدیریت می کند. این کارها از ماژول های داخلی Ansible با استفاده از قطعه های کوچک YAML برای هر کار استفاده می کند.
هرچه تعداد و تنوع سیستمهایی که شما با یک گره کنترل Ansible مدیریت می کنید پیچیده تر می شود ، معقول است که وظایف را با هم در playbooks Ansible گروه بندی کنید. استفاده از این playbook ها نیاز به اجرای بسیاری از وظایف فردی روی سیستم های از راه دور را برطرف می کند ، در عوض به شما امکان می دهد تمام محیط ها را به طور هم زمان با یک فایل واحد پیکربندی کنید.
با این حال ، وقتی که playbooks وظیفه تنظیم بسیاری از سیستم های مختلف با کارهای مختلف برای هر سیستم را دارند ، می توانند پیچیده تر شوند بنابراین Ansible همچنین به شما امکان می دهد تا وظایفی را در یک ساختار دایرکتوری به نام Role سازماندهی کنید. در این پیکربندی ، playbooks به جای وظایف ، رول ها را فراخوانی می کنند ، بنابراین شما هنوز هم می توانید وظایف را با هم گروه بندی کرده و سپس در سایر playbooks از رول ها استفاده مجدد کنید. رول ها همچنین به شما امکان می دهد قالب ها ، فایل های استاتیک و متغیرها را به همراه کارهای خود در یک قالب ساختاری جمع آوری کنید.
در این آموزش چگونگی ایجاد رول ها و چگونگی اضافه کردن قالب ها ، فایل های استاتیک و متغیرها به یک رول مورد بررسی قرار خواهد گرفت. پس از آشنایی با اصول رول های ساختای ، از Ansible Galaxy استفاده خواهیم کرد تا رول های مرتبط با جامعه را در playbooks وارد کنیم. با پایان این آموزش قادر خواهید بود برای سرور مجازی های خود رول های خاص محیطی خود را ایجاد کرده و از آنها در playbooks خود استفاده کنید تا یک یا بسیاری از سیستم ها را مدیریت کنید.
پیش نیازها
برای دنبال کردن این آموزش ، باید Ansible را نصب و پیکربندی کنید تا بتوانید playbooks را ایجاد و اجرا کنید. شما همچنین نیاز به درک نحوه نوشتن playbooks Ansible حساس دارید.
رول Ansible چیست؟
در آموزش های پیش نیاز ، شما یاد گرفتید که چگونه ابزار اصلی Ansible را با استفاده از دستور ansible در یک ترمینال اجرا کنید. همچنین آموخته اید که چگونه وظایف را در playbooks جمع آوری کرده و آنها را با استفاده از دستور playbooks ansible اجرا کنید. مرحله بعدی رفتن از اجرای دستورات منفرد ، به سمت وظایف ، و playbooks ، سازماندهی مجدد همه چیز با استفاده از یک رول Ansible است.

رول ها سطحی از انتزاع در صدر کارها و playbook هستند که به شما امکان می دهد پیکربندی Ansible خود را در قالب مدولار و قابل استفاده مجدد سازماندهی کنید. هرچه عملکرد و انعطاف پذیری بیشتری را به playbooks خود اضافه می کنید ، آنها گسترده میشوند و نگهداری شان می تواند دشوار شود. رول ها به شما امکان می دهد یک playbook پیچیده را به بخش های جداگانه و کوچکتر تقسیم کنید که با یک نقطه ورودی مرکزی هماهنگ شوند. به عنوان مثال ، در این آموزش کل playbook.yml که با آنها کار خواهیم کرد به شرح زیر است:
Example Playbook
1—

2- hosts: all

3 become: true
4 roles:
5 – apache

6 vars:

7 doc_root: /var/www/example

مجموعه تمام کارهایی که برای پیکربندی یک وب سرور مجازی Apache انجام می شود ، در رول apache که ایجاد خواهیم کرد ، درج خواهد شد. این رول به جای لیست کردن تکالیف به صورت جداگانه مانند آنچه در نسخه پیکربندی مدیریت 101 انجام دادیم ، به شرح زیر تمام کارهایی را که باید برای نصب Apache انجام شود ، تعریف می کند.
ساماندهی ستاپ Ansible  شما به صورت رول ها به شما امکان می دهد از مراحل پیکربندی مشترک بین انواع مختلف سرور مجازیها مجدد استفاده کنید. حتی اگر این کار با وجود چندین فایل وظیفه در یک playbook نیز امکان پذیر باشد ، رول ها به ساختار دایرکتوری شناخته شده و کنوانسیون نام فایل متکی هستند تا به صورت خودکار فایل هایی که در این بازی استفاده می شوند را بارگیری کنند.
به طور کلی ، ایده های پشت رول ها این است که به شما امکان می دهد با استفاده از یک ساختار پایدار ، وظایف خود را با یکدیگر به اشتراک بگذارید و از آنها استفاده مجدد کنید ، در حالی که نگهداری آنها بدون انجام کارهای تکراری برای همه زیرساخت های شما آسان می شود.
ایجاد رول
برای ایجاد رول Ansible  به یک ساختار دایرکتوری اختصاصی نیاز دارید. رول ها همیشه به این طرح دایرکتوری نیاز دارند تا Ansible بتواند آنها را پیدا کرده و از آنها استفاده کند.

ما در اینجا فرض می کنیم که از دایرکتوری هوم کاربر به عنوان دایرکتوری کاربری Ansible استفاده کرده اید. اگر پیکربندی Ansible خود را در یک مکان دیگر نگه داشته باشید ، باید (cd) را در آن دیرکتوری تغییر دهید.
برای شروع ، بیایید دایرکتوری به نام roles ایجاد کنیم. وقتی می خواهیم در ادامه این آموزش رول جدید خود را در یک playbook  استفاده کنیم، Ansible به اینجا نگاه می کند.
$ cd ~

$ mkdir roles

$ cd roles
در این دایرکتوری رول هایی را تعریف خواهیم کرد که قابل استفاده مجدد در چندین playbook  و سرور مجازی های مختلف هستند. هر رولی که ایجاد خواهیم کرد نیاز به دیرکتوری خاص خود دارد. ما می خواهیم نمونه playbook  Apache را از آموزش  Configuration Management 101: Writing Ansible Playbooks  بگیریم و آن را به یک رول قابل استفاده مجدد Ansible تبدیل کنیم.
برای ارجاع، این playbook  از آن آموزش است:
playbook.yml
1—
2- hosts: all
3 become: true
4 vars:
5 doc_root: /var/www/example
6 tasks:
7 – name: Update apt
8 apt: update_cache=yes
9
10 – name: Install Apache

11 apt: name=apache2 state=latest
12
13 – name: Create custom document root
14 file: path={{ doc_root }} state=directory owner=www-data group=www-data
15
16 – name: Set up HTML file

17 copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
18
19 – name: Set up Apache virtual host file
20 template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
21 notify: restart apache
22
23 handlers:
24 – name: restart apache
25 service: name=apache2 state=restarted
در ابتدا ، یک دایرکتوری Apache برای رول خود ایجاد می کنیم و آن را با دیرکتوری های مورد نیاز جمع کنیم:
$ mkdir apache

$ cd apache
در مرحله بعدی مجموعه زیر دایرکتوری های مورد نیاز را ایجاد خواهیم کرد که به Ansible اطلاع می دهد که باید از محتویات به عنوان یک رول استفاده کند. با استفاده از دستور mkdir این دایرکتوری ها را ایجاد کنید:
$ mkdir defaults files handlers meta templates tasks vars
این دیرکتوری ها برای اجرای رول ما شامل کلیه کد ها می باشند. بسیاری از رول ها بسته به پیچیدگی کارهایی که انجام می دهند فقط از یک یا چند مورد از این دایرکتوری ها استفاده خواهند کرد. هنگام نوشتن رول های خود ، ممکن است نیازی به ایجاد همه این دایرکتوری ها نباشد.
در اینجا توضیحی در مورد آنچه هر دایرکتوری نشان می دهد آورده شده است:
defaults: این دایرکتوری به شما امکان می دهد متغیرهای پیش فرض را برای رول های شامل یا وابسته تنظیم کنید. هر پیش فرض تنظیم شده در اینجا می تواند در playbooks  یا فایل های موجودی تنظیم شود.
files: این دایرکتوری حاوی فایل های استاتیک و فایلهای اسکریپتی است که ممکن است در یک سرور مجازی از راه دور کپی شده یا اجرا شوند.
handlers : همه هندلر هایی که قبلاً در playbooks  شما بوده اند اکنون می توانند در این دایرکتوری قرار بگیرند.
Meta : این دایرکتوری برای ابرداده رول ها ، که معمولاً برای مدیریت وابستگی استفاده می شود ، محفوظ است. به عنوان مثال ، می توانید لیستی از رول ها را تعریف کنید که باید قبل از استناد به رول فعلی اعمال شوند.
templates: این دایرکتوری برای قالب هایی اختصاص داده شده است که تولید فایل در هاست از راه دور را انجام میدهند. قالب ها معمولاً از متغیرهایی استفاده می کنند که در فایل های واقع در دایرکتوری vars و اطلاعات جمع آوری شده هاست در زمان اجرا، تعریف شده اند.
tasks: این دایرکتوری شامل یک یا چند فایل با کارهایی است که بطور معمول در بخش وظایف یک playbook معمولی Ansible تعریف می شود. این کارها می توانند به طور مستقیم فایل ها و الگوهای موجود در دایرکتوری های مربوطه خود را در داخل رول ، بدون نیاز به ارائه مسیر کاملی برای فایل ، ارجاع دهند.
Vars : متغیرهای یک رول را می توان در فایل های داخل این دایرکتوری مشخص کرد و سپس به مکان دیگری در یک رول ارجاع داد.
اگر فایلی به نام main.yml در یک دایرکتوری وجود داشته باشد ، محتوای آن به طور خودکار به playbook ای که رول را فرامیخواند اضافه می شود. با این حال ، این امر در مورد دایرکتوری های files  و templates  صدق نمی کند ، زیرا محتوای آنها به صراحت ارجاع داده شود.
تبدیل یک Playbook به یک رول
اکنون که با آنچه در هر دایرکتوری در رول Ansible استفاده می شود آشنا هستید ، می توانیم playbook Apache را به رولی تبدیل کنیم تا امور بهتر سازماندهی شود.
ما باید ساختارهای role / / apache2 / d subdirectories from را از قسمت آخر تنظیم کنیم. حال باید برخی از فایلهای YAML را برای تعریف رول خود ایجاد کنیم.
ایجاد فایل main.yml کارها
ما با زیرمجموعه وظایف شروع خواهیم کرد. اکنون به آن دایرکتوری منتقل میشویم:
$ cd ~/roles/apache/tasks
ما باید یک فایل main.yml را در این دایرکتوری ایجاد کنیم. آن را با کل محتوای Playbook Apache جمع می کنیم و سپس ویرایش می کنیم تا فقط شامل وظایف باشد.
$ nano main.yml
وقتی شروع می کنید ، فایل باید از این قرار باشد:

main.yml
1—
2- hosts: all
3 become: true
vars:
5 _root: /var/www/example
6
7 tasks:
– name: Update apt
9 apt: update_cache=yes
10
11- name: Install Apache
12 apt: name=apache2 state=latest
13
14 – name: Create custom document root
15 file: path={{ doc_root }} state=directory owner=www-data group=www-data
16
17 – name: Set up HTML file

18 copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
19
20 – name: Set up Apache virtual host file
21 template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
22 notify: restart apache
23
24 handlers:
25 – name: restart apache
26 service: name=apache2 state=restarted
ما فقط می خواهیم خط اول — و خطوط قسمت tasks را برجسته نگه داریم. ما همچنین می توانیم فضاهای فرعی را به سمت چپ وظایف خود حذف کنیم. همچنین برای فعال کردن یک ماژول Apache به نام modsecurance یک بخش جدید اضافه خواهیم کرد که بعداً در این آموزش پیکربندی خواهیم کرد. پس از این تغییرات ، فایل جدید ~ / role / apache / works / main.yml ما به این شکل ظاهر می شود:
main.yml
1—

2- name: Update apt

3 apt: update_cache=yes

4

5- name: Install Apache

6 apt: name=apache2 state=latest

7

8- name: Create custom document root

9 file: path={{ doc_root }} state=directory owner=www-data group=www-data

10

11- name: Set up HTML file

12 copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644

13

14- name: Set up Apache virtual host file
15 template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf

16 notify: restart apache
اکنون پیگیری و فهم فایل tasks آسان تر است زیرا فقط شامل مراحل واقعی است که هنگام استفاده از رول Apache انجام می شود.
توجه داشته باشید که چگونه خطوط copy و template به ترتیب از src = index.html و src = vhost.tpl برای فایل های مرجع در رول ما استفاده می کنند ، بدون اینکه مسیر قبلd داشته باشkد. ساختار دایرکتوری رول ما اجازه می دهد فایل ها و قالب ها را مستقیماً با نام آنها ارجاع دهیم ، و Ansible آنها را به طور خودکار برای ما پیدا می کند.
هنگام پایان ویرایش آن ، فایل را ذخیره کنید و ببندید.
ایجاد فایل main.yml هندلرها
اکنون که توده ای از playbook را در فایل وظایف / main.yml داریم ، باید بخش هندلر ها را به یک فایل واقع در handlers / main.yml منتقل کنیم.
ابتدا در زیر مجموعه هندلرها در رول ما cd را انجام دهید:
$ cd ~/roles/apache/handlers
دوباره ، فایل را در ویرایشگر متن خود باز کنید و کل محتویات اصلی playbook.yml را پیست کنید:
$ nano main.yml
قسمت هایی که باید آنها را نگهداریم دوباره مشخص شده است:
playbook.yml
1—

2- hosts: all

3 become: true

4 vars:

5 doc_root: /var/www/example

6 tasks:

7 – name: Update apt

8 apt: update_cache=yes

9

10 – name: Install Apache

11 apt: name=apache2 state=latest

12

13 – name: Create custom document root

14 file: path={{ doc_root }} state=directory owner=www-data group=www-data

15

16 – name: Set up HTML file
17 copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
18

19 – name: Set up Apache virtual host file

20 template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf

21 notify: restart apache

22
23 handlers:

24 – name: restart apache
25 service: name=apache2 state=restarted

فضای سفید را از جلوی هندلرها نیز رفع کنید. در پایان ، فایل باید به صورت زیر باشد:

– name: restart apache
service: name=apache2 state=restarted

پس از اتمام فایل را ذخیره کنید و ببندید.
افزودن فایل ها و قالب ها
اکنون که وظایف و هندلرهایی داریم ، مرحله بعدی این است که اطمینان حاصل کنیم که یک فایل index.html و یک الگوی vhost.tpl وجود دارد تا Ansible بتواند آنها را پیدا کند و روی سرور مجازی های راه دور ما قرار دهد. از آنجا که ما به این فایل ها در فایل های tasks/main.yml ارجاع داده ایم ، آنها باید وجود داشته باشند درغیر این صورتAnsible قادر به اجرای صحیح این رول نیست.
ابتدا فایل index.html را در دایرکتوری ~ / role / apache / files ایجاد کنید:
$ cd ~/roles/apache/files
$ nano index.html
موارد زیر را در ویرایشگر پیست کنید ، سپس آن را ذخیره کنید و ببندید:
<html>
<head><title>Configuration Management Hands On</title></head>

<h1>This server was provisioned using <strong>Ansible</strong></h1>

</html>

سپس الگوی vhost.tpl را ویرایش خواهیم کرد. به دیرکتوری templates رفته و فایل را با nano ویرایش کنید:
$ cd ~/roles/apache/templates
$ nano vhost.tpl
این خطوط را در ویرایشگر پیست کنید ، سپس آن را ذخیره کرده و ببندید:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot {{ doc_root }}

<Directory {{ doc_root }}>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

دایرکتوری متا
اگر رول ما به رول دیگری بستگی داشت ، می توانستیم فایلی در دایرکتوری متا به نام main.yml اضافه کنیم. این فایل ممکن است مشخص کند که این رول به رولی به نام “apt” بستگی دارد. در رول Apache  که ما ایجاد کرده ایم هیچ وابستگی لازم نداریم. با این حال ، در صورت نیاز فرضی به رول دیگری مانند “apt” ، فایل در ~ / role / apache / meta / main.yml ممکن است به شرح زیر باشد:

dependencies:
– apt

این تضمین می کند که رول “apt” قبل از رول Apache  ما اجرا می شود. ایجاد وابستگی هایی مانند این برای رول های پیچیده تری که قبل از اجرای رول واقعی نیاز به وجود سایر نرم افزارها یا پیکربندی ها دارند، مفید است.
دایرکتوری Vars
ما قبلاً گفتیم که یک دایرکتوری “vars” وجود دارد که می تواند برای تعیین متغیرها برای رول ما استفاده شود. در حالی که پیکربندی پارامترهای پیش فرض برای یک رول از طریق فایل vars / main.yml ممکن است ، این معمولاً برای رول های کوچکتر توصیه نمی شود.
دلیل استفاده نکردن از دایرکتوری “vars” این است که باعث می شود جزئیات پیکربندی شما در سلسله مراتب رول ها قرار بگیرد. رول بیشتر وظایف عمومی و وابستگی را به عهده دارد ، در حالی که متغیرها داده پیکربندی هستند. اتصال این دو ، استفاده مجدد از رول شما در جای دیگر را دشوارتر می کند.
در عوض ، بهتر است جزئیات پیکربندی را خارج از رول مشخص کنید تا بتوانید به راحتی رول را بدون نگرانی از افشای اطلاعات حساس به اشتراک بگذارید. همچنین ، متغیرهای اعلام شده در یک رول به راحتی توسط متغیرهای مکانهای دیگر رد می شوند. خیلی بهتر است داده های متغیر را در playbookهایی قرار دهید که برای کارهای خاص استفاده می شوند.
با این حال ، ذکر دایرکتوری “vars” هنوز هم خالی از لطف نیست، زیرا با رول های پیچیده تر مفید است. به عنوان مثال ، اگر یک رول به پشتیبانی از توزیع های مختلف لینوکس نیاز دارد ، تعیین مقادیر پیش فرض برای متغیرها می تواند برای مدیریت نام های مختلف بسته ها ، نسخه ها و تنظیمات مفید باشد.
شمول فایل های دیگر
بعضی مواقع وقتی رول ها با وظایف متعدد ایجاد می کنید ، درک و فهم وابستگی ها یا منطق شرطی دشوار خواهد شد. در چنین شرایطی می توانید وظایف خود را در فایل های خود تقسیم کرده و آنها را در tasks/main.yml قرار دهید.

به عنوان مثال ، اگر ما یک مجموعه کار اضافی برای پیکربندی TLS برای سرور مجازی Apache خود داشتیم ، می توانستیم آن ها را در فایل خودشان جدا کنیم. ما می توانیم فایل tasks/tls.yml را فراخوانی کنیم و آن را مانند این در فایل tasks/main.yml قرار دهیم:
. . .
tasks:
– include: roles/apache/tasks/tls.yml

یک Playbook اسکلتی ایجاد کنید
اکنون که ساختار رول خود را پیکربندی کرده ایم ، می توانیم آن را با حداقل playbook  در مقایسه با نسخه یکپارچه در ابتدای این آموزش استفاده کنیم.
استفاده از رول ها به این طریق به ما این امکان را می دهد تا از playbooks استفاده کنیم تا آنچه را که سرور مجازی باید انجام دهد را بدون نیاز به تکرار همیشگی وظایف برای انجام این کار ، اعلان کنیم.
برای ایجاد یک playbook حداقل که شامل رول Apache ما باشد ، از دایرکتوری رول ها (دایرکتوری هوم ما در این مثال). cd out کنید. اکنون می توانیم یک فایل playbook ایجاد کنیم:
$ cd ~
$ nano playbook.yml
پس از باز کردن فایل ، موارد زیر را پیست کنید و سپس فایل را ذخیره کرده و ببندید:

– hosts: all
become: true
roles:
– apache
vars:
– doc_root: /var/www/example

اطلاعات بسیار کمی در این فایل مورد نیاز است. ابتدا سرور مجازی هایی را که می خواهیم این رول را اجرا کنند ، لیست می کنیم ، بنابراین از – hosts: all استفاده می کنیم . اگر گروهی از هاست ها به نام webservers را داشتید می توانستید آنها را هدف قرار دهید. در مرحله بعد ، اعلام می کنیم که از چه رول هایی استفاده می کنیم. در این حالت فقط یکی وجود دارد ، بنابراین از خط – apache استفاده می کنیم.
این کل playbook ما است که بسیار کوچک و خواندن و فهمیدن آن سریع است. مرتب کردن playbook هایی مانند این به ما امکان می دهد تا به جای فعالیت روی کارهای شخصی ، روی اهداف کلی برای پیکربندی سرور مجازی تمرکز کنیم. حتی نکته بهتر آن که، اگر چندین رول مورد نیاز داشته باشیم ، اکنون می توانیم آنها را در بخش رول ها در playbook خود لیست کنیم و آنها به ترتیبی که ظاهر می شوند اجرا شوند.

به عنوان مثال ، اگر ما برای راه اندازی سرور مجازی وردپرس با استفاده از Apache و MySQL رول هایی داشتیم ، احتمالا playbook داشتیم که مشابه زیر میبود:

– hosts: wordpress_hosts
become: true
roles:
– apache
– php
– mysql
– wordpress
vars:
– doc_root: /var/www/example

این ساختار playbook به ما امکان می دهد درباره این که می خواهیم یک سرور مجازی چگونه باشد ، خیلی دقیق پیش برویم. سرانجام ، از آنجا که playbook ها رول ها را فرا میخوانند ، دستور اجرای ما دقیقاً مشابه حالتی است که گویا همه در یک فایل واحد قرار گرفته اند:
$ ansible-playbook playbook.yml

Output
PLAY [all] ***********

TASK [Gathering Facts] ********

TASK [apache : Update apt] *****
ok: [64.225.15.1]

TASK [apache : Install Apache] ********
changed: [64.225.15.1]

TASK [apache : Create custom document root] ***
changed: [64.225.15.1]

TASK [apache : Set up HTML file] ******
changed: [64.225.15.1]

TASK [apache : Set up Apache virtual host file] ******
changed: [64.225.15.1]

RUNNING HANDLER [apache : restart apache] *****
changed: [64.225.15.1]

PLAY RECAP *******
64.225.15.1 : ok=7 changed=5 unreachable=0 failed=0

به عنوان مثال می توانید فایل playbook.yml به نام apache.yml را فراخوانی کنید ، تا نام فایل رول (های) موجود در آن را منعکس کند.
گلکسی Ansible
آموزش در مورد رول های Ansible بدون بررسی منابع موجود از طریق Galaxy Ansible کامل نخواهد بود. کهکشان جستجوگر ، منبعی از رول های کمکی کاربر است که می توانید برای انجام کارهای مختلف بدون نیاز به نوشتن آنها ، به playbooks اضافه کنید.
به عنوان مثال ، می توانیم یک ماژول مفید Apache به نام mod_security2 را به playbook خود اضافه کنیم تا آپاچی را با برخی تنظیمات امنیتی اضافی پیکربندی کنیم. ما از یک رول ansible Galaxy با عنوان apache_modsecurance استفاده خواهیم کرد. برای استفاده از این رول ، آن را به صورت محلی دانلود خواهیم کرد و سپس آن را در playbook خود قرار خواهیم داد.
ابتدا با ابزار ansible-galaxy آشنا می شویم. ما با استفاده از ابزار Galaxy را جستجو خواهیم کرد و سپس یک رول را از لیست انتخاب شده از دستور جستجو انتخاب می کنیم:
$ ansible-galaxy search “PHP for RedHat/CentOS/Fedora/Debian/Ubuntu”
دستور جستجو خروجی شبیه به زیر را به همراه خواهد داشت:

Output
Found 21 roles matching your search:

Name Description
—- ———–
alikins.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
bpresles.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
entanet_devops.ansible_role_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
esperdyne.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
fidanf.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
frogasia.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
geerlingguy.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
icamys.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
jhu-sheridan-libraries.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
jibsan94.ansible_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
KAMI911.ansible_role_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
monsieurbiz.geerlingguy_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
nesh-younify.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
net2grid.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
thom8.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
v0rts.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
vahubert.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
Vaizard.mage_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
viasite-ansible.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
vvgelder.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
(END)

اگر نتایج زیادی حاصل شود ، Ansible از دستور less برای خروجی نتایج جستجو استفاده می کند ، که تا زمانی که q را فشار دهید، ترمینال شما را مسدود می کند. این کار برای زمانی مفید است که نتایج جستجو گسترده باشد و شما باید در میان آنها صفحه گذاری کنید ، که می توانید با فشار دادن space این کار را انجام دهید.
ما رول geerlingguy.php را برای playbook خود انتخاب خواهیم کرد. اگر مایل هستید اطلاعات بیشتری درباره رول هایی که با نتایج جستجوی شما برگشته اند ، بخوانید ، می توانید به صفحه جستجوی Galaxy مراجعه کرده و اسم رول مورد نظر خود را در محل نام رول پیست کنید.
برای دانلود رول برای استفاده در playbook ، از دستور installible-galaxy استفاده می کنیم:
$ ansible-galaxy install geerlingguy.php
هنگامی که آن فرمان را اجرا می کنید ، باید خروجی مانند این را مشاهده کنید:
Output
– downloading role ‘php’, owned by geerlingguy
– downloading role from https://github.com/geerlingguy/ansible-role-php/archive/3.7.0.tar.gz
– extracting geerlingguy.php to /home/sammy/.ansible/roles/geerlingguy.php
– geerlingguy.php (3.7.0) was installed successfully

اکنون می توانیم رول را به فایل playbook.yml اضافه کنیم:

– hosts: all
become: true
roles:
– apache
– geerlingguy.php
vars:
– doc_root: /var/www/example
– php_default_version_debian: “7.2”

با قرار دادن رول پس از رول apache، اطمینان می دهیم که Apache قبل از تنظیمات مربوط به مکان رول geerlingguy.php ، روی سیستمهای از راه دور تنظیم و پیکربندی شده است. بسته به نحوه رفتار سرور مجازی های از راه دور ، می توانیم رول های mysql و wordpress را نیز به هر ترتیبی که انتخاب می کنیم ، شامل شویم.
اجرای ansible-playbook playbook.yml با رول Galaxy اضافه شده منجر به خروجی زیر خواهد شد:
Output
PLAY [all] *****************

TASK [Gathering Facts] *******
ok: [64.225.15.1]

TASK [apache : Update apt] ******
changed: [64.225.15.1]

TASK [apache : Install Apache] ******
changed: [64.225.15.1]

TASK [apache : Install modsecurity] ****
changed: [64.225.15.1]

TASK [apache : Create custom document root] *****
changed: [64.225.15.1]

TASK [apache : Set up HTML file] *********
changed: [64.225.15.1]

TASK [apache : Set up Apache virtual host file] *******
changed: [64.225.15.1]

TASK [geerlingguy.php : Include OS-specific variables.] ****
ok: [64.225.15.1]

TASK [geerlingguy.php : Define php_packages.] **********
ok: [64.225.15.1]

. . .

PLAY RECAP ************
64.225.15.1 : ok=37 changed=15 unreachable=0 failed=0
(END)

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

 

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

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

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

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

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

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

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

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

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18  –

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

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10  –

نحوه نصب Docker Compose در Debian 10 –

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 –

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7  –

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18  –

بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16 –

استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18 –

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

چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی –

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18 –

 

 

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

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
code-server یک کد مایکروسافت ویژوال استودیو است که روی یک سرور مجازی از راه دور اجرا می شود و مستقیماً از مرورگر شما قابل دسترسی است. این بدان معنی است که می توانید از دستگاه های مختلف با سیستم عامل های مختلف استفاده کنید و همیشه یک محیط توسعه مداوم داشته باشید.
در این آموزش ، پلت فرم cloud IDE کد سرور مجازی را بر روی دستگاه Ubuntu 18.04 خود تنظیم کرده و آن را در دامنه خود قرار می دهید ، که با Let’s Encrypt ایمن شده است. برای نسخه دقیق تر این آموزش ، به نحوه راه اندازی رمز سرور مجازی Cloud IDE در اوبونتو 18.04 مراجعه کنید.
پیش نیازها
⦁ سرور مجازی که اوبونتو 18.04 را اجرا میکند با حداقل 2 گیگابایت حافظه رم ، دسترسی به ریشه و یک حساب سودو و غیر ریشه. می توانید این کار را با دنبال کردن راهنمای اولیه تنظیم سرور مجازی Ubuntu 18.04 انجام دهید.
⦁ Nginx که روی سرور مجازی شما نصب شده است. برای راهنمایی در مورد نحوه انجام این کار ، مراحل 1 تا 4 نحوه نصب Nginx را در اوبونتو 18.04 مطالعه کنید.
⦁ یک نام دامنه به طور کامل ثبت شده برای هاست کد سرور مجازی ، که به سرور مجازی شما اشاره میکند. در این آموزش از code-server.your-domain استفاده می شود. می توانید نام دامنه را در Namecheap خریداری کنید ، یکی از آنها را به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.
⦁ هر دو سابقه DNS زیر برای سرور مجازی شما تنظیم شده اند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این مقدمه را در DigitalOcean DNS دنبال کنید.
⦁ یک پرونده با your-domain که آدرس IP عمومی سرور مجازی شما را نشان می دهد.
⦁ یک پرونده با دامنه www. your-domain که آدرس IP عمومی سرور مجازی شما را نشان می دهد.
مرحله 1 – نصب کد سرور مجازی
برای ذخیره کلیه داده ها برای کد سرور مجازی ، دایرکتوری زیر را ایجاد کنید:
⦁ $ mkdir ~/code-server
به سمت آن جهت دهی کنید:
⦁ $ cd ~/code-server
به صفحه نسخه های کد سرور مجازی Github مراجعه کرده و آخرین لینوکس را انتخاب کنید. آن را با استفاده از آدرس زیر دانلود کنید:

⦁ $ wget https://github.com/cdr/code-server/releases/download/2.1692-vsc1.39.2/code-server2.1692-vsc1.39.2-linux-x86_64.tar.gz

آرشیو را باز کنید:
⦁ $ tar -xzvf code-server2.1692-vsc1.39.2-linux-x86_64.tar.gz

به دیرکتوری حاوی کد سرور مجازی قابل اجرا بروید:
⦁ $ cd code-server2.1692-vsc1.39.2-linux-x86_64

برای دسترسی به کد سرور مجازی قابل اجرا در سیستم خود ، آن را با دستور زیر کپی کنید:
⦁ $ cd code-server2.1692-vsc1.39.2-linux-x86_64

پوشه ای برای کد سرور مجازی ایجاد کنید تا داده های کاربر ذخیره شود:
⦁ $ sudo mkdir /var/lib/code-server

یک سرویس سیستمی ، code-server.service ، در دیرکتوری / lib / systemd / system ایجاد کنید:
⦁ $ sudo nano /lib/systemd/system/code-server.service

خطوط زیر را اضافه کنید:

/lib/systemd/system/code-server.service
[واحد]
توضیحات = سرور مجازی کد
پس از = nginx.service

[سرویس]
نوع = ساده
محیط = PASSWORD = کلمه کلیدی شما
ExecStart = / usr / local / bin / code-server – host 127.0.0.1 –user-data-dir / var / lib / code-server – رمز ورود
راه اندازی مجدد = همیشه

[نصب]
WantedBy = multi-user.targe /lib/systemd/system/code-server.service
[Unit]
Description=code-server
After=nginx.service

[Service]
Type=simple
Environment=PASSWORD=your_password
ExecStart=/usr/local/bin/code-server –host 127.0.0.1 –user-data-dir /var/lib/code-server –auth password
Restart=always

[Install]
WantedBy=multi-user.target
–host 127.0.0.1 آن را به localhost متصل می کند.
–user-data-dir /var/lib/code-server دایرکتوری داده های کاربر آن را تنظیم می کند.
–auth password مشخص می کند که باید بازدید کنندگانی معتبر با رمز عبور وجود داشته باشند.
به یاد داشته باشید که your_password را با رمز عبور دلخواه خود جایگزین کنید.
فایل را ذخیره کنید و ببندید.
سرویس کد سرور مجازی را شروع کنید:
⦁ $ sudo systemctl start code-server

بررسی کنید که به درستی شروع شده است:

⦁ $ sudo systemctl status code-server

خروجی مشابه با زیر مشاهده میکنید:
Output
● code-server.service – code-server
Loaded: loaded (/lib/systemd/system/code-server.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2019-12-09 20:07:28 UTC; 4s ago
Main PID: 5216 (code-server)
Tasks: 23 (limit: 2362)
CGroup: /system.slice/code-server.service
├─5216 /usr/local/bin/code-server –host 127.0.0.1 –user-data-dir /var/lib/code-server –auth password
└─5240 /usr/local/bin/code-server –host 127.0.0.1 –user-data-dir /var/lib/code-server –auth password

بعد از راه اندازی مجدد سرور مجازی ، سرویس کد سرور مجازی را فعال کنید:
⦁ $ sudo systemctl enable code-server

مرحله 2 – به نمایش گذاشتن کد سرور مجازی
اکنون Nginx را به عنوان یک پروکسی معکوس برای کد سرور مجازی پیکربندی خواهید کرد.
برای ذخیره پیکربندی جهت نمایش دادن کد سرور مجازی در دامنه خود ، code-server.conf را ایجاد کنید:
sudo nano /etc/nginx/sites-available/code-server.conf
خطوط زیر را برای تنظیم بلوک سرور مجازی خود با دستورالعمل های لازم اضافه کنید:
/etc/nginx/sites-available/code-server.conf
server {
listen 80;
listen [::]:80;

server_name code-server.your_domain;

location / {
proxy_pass http://localhost:8080/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
}
code-server.your_domain را با دامنه مورد نظر خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید.
برای فعال کردن پیکربندی این سایت ، یک سیملینک از آن ایجاد کنید:
⦁ $ sudo ln -s /etc/nginx/sites-available/code-server.conf /etc/nginx/sites-enabled/code-server.conf

اعتبار پیکربندی را تست کنید:
⦁ $ sudo nginx -t

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

برای اجرای پیکربندی ، Nginx را مجدداً راه اندازی کنید:
⦁ $ sudo systemctl restart nginx

مرحله 3 – دامنه خود را ایمن کنید
اکنون دامنه خود را با استفاده از گواهی Let’s Encrypt TLS ایمن می کنید.
منبع بسته Certbot را به سرور مجازی خود اضافه کنید:
⦁ $ sudo add-apt-repository ppa:certbot/certbot

Certbot و افزونه Nginx آن را نصب کنید:
⦁ $ sudo apt install python-certbot-nginx

ufw را برای پذیرش ترافیک رمزگذاری شده پیکربندی کنید:
⦁ $ sudo ufw allow https

خروجی به شکل زیر خواهد بود:
Output
Rule added
Rule added (v6)

برای پیکربندی برای اجرا مجدد آن را بارگذاری کنید:
⦁ $ sudo ufw reload

خروجی زیر نشان داده می شود:
Output
Firewall reloaded

به دامنه کد سرور مجازی خود بروید.

رمز عبور سرور مجازی کد خود را وارد کنید. مرز نمایش داده شده در دامنه خود را مشاهده خواهید کرد.

برای تأمین امنیت آن ، یک مجوز Let’s Encrypt TLS با استفاده از Certbot نصب کنید.
برای دامنه خود با دستور زیر درخواست یک مجوز بدهید:
⦁ $ sudo certbot –nginx -d code-server.your_domain

برای اطلاع رسانی های فوری یک آدرس ایمیل ارائه دهید ، شرایط خدمات EFF را بپذیرید ، و تصمیم بگیرید که آیا تمام ترافیک HTTP را به HTTPS هدایت کنید یا خیر.
خروجی مشابه زیر خواهد بود:
Output
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/code-server.your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/code-server.your_domain/privkey.pem
Your cert will expire on … To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the “certonly” option. To non-interactively renew *all* of
your certificates, run “certbot renew”

Certbot با موفقیت گواهینامه های TLS را ایجاد میکند و آنها را در پیکربندی Nginx برای دامنه شما اعمال می نماید.
نتیجه
اکنون شما دارای کد سرور مجازی ، و یک cloud IDE همه کاره هستید که بر روی سرور مجازی Ubuntu 18.04 نصب شده است ، در دامنه شما قرار گرفته و با استفاده از گواهی نامه های Let’s Encrypt ایمن شده است. برای اطلاعات بیشتر در مورد ویژگی ها و دستورالعمل های دقیق در مورد سایر مؤلفه های کد سرور مجازی ، به مطالب ویژوال استودیو کد مراجعه کنید.

 

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

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

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

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

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

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

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

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

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18  –

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

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10  –

نحوه نصب Docker Compose در Debian 10 –

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 –

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7  –

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18  –

بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16 –

استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18 –

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

چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی –

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18 –

 

 

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

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
اتوماسیون سرور مجازی اکنون به دلیل ماهیت یکبار مصرف محیط های کاربردی مدرن ، نقش اساسی در مدیریت سیستم ها ایفا می کند. ابزارهای مدیریت پیکربندی مانند Ansible معمولاً برای ساده سازی فرایند خودکار سازی تنظیم سرور مجازی با تعیین مراحل استاندارد برای سرور مجازی جدید استفاده می شود و در عین حال خطای انسانی مرتبط با تنظیمات دستی را نیز کاهش می دهد.
Ansible یک معماری ساده را ارائه می دهد که نیازی به نصب نرم افزار ویژه روی گره ها ندارد. همچنین مجموعه ای از ویژگی ها و ماژول های داخلی را فراهم می کند که نوشتن اسکریپت های اتوماسیون را تسهیل می کند.
در این راهنما نحوه استفاده از Ansible برای خودکارسازی مراحل موجود در راهنمای ما درباره نحوه نصب وردپرس با LAMP در اوبونتو 18.04 توضیح داده شده است. وردپرس محبوب ترین CMS (سیستم مدیریت محتوا) در اینترنت است که به کاربران امکان می دهد وبلاگ ها و وب سایتهای قابل انعطاف را فراتر از MySQL با پردازش PHP تنظیم کنند. پس از راه اندازی ، تقریباً تمام مراحل اجرا از طریق web frontend قابل انجام است.
پیش نیازها
برای اجرای تنظیم خودکار ارائه شده توسط playbook  که در این راهنما در مورد آن صحبت می کنیم ، به این موارد نیاز دارید:
• یک گره کنترل Ansible : یک دستگاه اوبونتو 18.04 که دارای Ansible نصب شده و تنظیم شده است تا با استفاده از کلیدهای SSH به میزبان های Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo باشد و فایروال فعال نیز داشته باشد ، همانطور که در راهنمای راه اندازی سرور مجازی اولیه ما توضیح داده شده است. برای تنظیم Ansible ، لطفا راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 18.04 را دنبال کنید.
• یک یا چند هاست Ansible: یک یا چند سرور مجازی از راه دور Ubuntu 18.04 که قبلاً به کمک راهنمای نحوه استفاده از Ansible برای خودکارسازی تنظیمات اولیه سرور مجازی در اوبونتو 18.04 تنظیم شده اند.
قبل از ادامه کار ، ابتدا باید اطمینان حاصل کنید که گره کنترل Ansible شما قادر به اتصال و اجرای دستورات در هاست (های) Ansible باشد. برای بررسی اتصال ، لطفاً مرحله 3 نحوه نصب و پیکربندی Ansible در اوبونتو 18.04 را بررسی کنید.

این Playbook چه کاری انجام می دهد؟
این playbook  Ansible از طریق روشی که در راهنمای ما در مورد نحوه نصب وردپرس با LAMP در اوبونتو 18.04 ارائه شده است ، جایگزینی برای اجرای دستی فراهم می کند.
اجرای این playbook اقدامات زیر را در هاست Ansible شما انجام خواهد داد:
1) aptitude را نصب میکند ، که توسط Ansible به عنوان جایگزینی برای مدیر بسته apt ارجحیت داده میشود.
2)بسته های LAMP مورد نیاز و پسوندهای PHP را نصب میکند.
3) یک Apache VirtualHost جدید برای وب سایت وردپرس ایجاد و فعال مینماید.
4) ماژول بازنویسی Apache (mod_rewrite) را فعال میکند.
5) وب سایت پیش فرض Apache را غیرفعال میکند.
6) رمز ورود را برای کاربر root MySQL تنظیم میکند.
7) حساب های MySQL ناشناس را حذف و پایگاه داده را آزمایش میکند.
8) برای وب سایت وردپرس یک بانک اطلاعاتی MySQL و کاربر جدید ایجاد میکند.
9)UFW را تنظیم میکند تا ترافیک HTTP روی درگاه پیکربندی شده انجام شود (به طور پیش فرض 80).
10) وردپرس را دانلود و باز میکند.
11) مالکیت و مجوزهای صحیح دایرکتوری را تنظیم میکند.
12) با استفاده از الگوی ارائه شده ، فایل wp-config.php را تنظیم کنید.
پس از پایان کار playbook ، بر اساس گزینه هایی که در متغیرهای پیکربندی خود تعریف کرده اید ، یک نصب وردپرس در یک محیط LAMP اجرا می شود.
نحوه استفاده از این Playbook
اولین کاری که ما باید انجام دهیم این است که وردپرس را در playbook LAMP و متعلقات آن از منبع do-community / ansible-playbooks را دریافت کنیم. ما باید این منبع را به یک پوشه محلی در داخل گره کنترل Ansible تبدیل کنیم.
اگر قبلا با دنبال کردن راهنمای دیگری ، این منبع را کلون کرده اید ، به کپیansible-playbooks موجود خود دسترسی پیدا کنید و یک دستور git pull را اجرا کنید تا مطمئن شوید که مطالب به روز شده را دارید:
⦁ $ cd ~/ansible-playbooks

⦁ $ git pull
اگر این اولین بار است که از منابع do-community / ansible-playbooks استفاده می کنید ، باید با کلون کردن منبع در پوشه هوم فولدر خود شروع کنید:
⦁ $ cd ~

⦁ $ git clone https://github.com/do-community/ansible-playbooks.git

⦁ $ cd ansible-playbooks

فایل های مورد علاقه ما در داخل پوشه wordpress-lamp_ubuntu1804 قرار گرفته اند که دارای ساختار زیر است:
wordpress-lamp_ubuntu1804
├── files
│ ├── apache.conf.j2
│ └── wp-config.php.j2
├── vars
│ └── default.yml
├── playbook.yml
└── readme.md

در اینجا در مورد هر یک از این فایل ها آمده است:
files / apache.conf.j2: فایل الگو برای تنظیم Apache VirtualHost.
files / wp-config.php.j2: فایل الگو برای تنظیم فایل پیکربندی WordPress.
vars / default.yml: فایل متغیر برای شخصی سازی تنظیمات playbook.
playbook.yml: فایل playbook ، شامل کارهایی که باید روی سرور مجازی راه دور اجرا شود.
readme.md: فایل متنی حاوی اطلاعات مربوط به این playbook .
ما برای سفارشی سازی گزینه های playbook ، فایل متغیرهای آن را ویرایش خواهیم کرد. به دایرکتوری wordpress-lamp_ubuntu1804 دسترسی پیدا کنید و فایل vars / default.yml را با استفاده از ویرایشگر خط فرمان مورد نظر خود باز کنید:
⦁ $ cd wordpress-lamp_ubuntu1804

⦁ $ nano vars/default.yml
این فایل شامل چند متغیر است که باید به آن توجه کنید:
vars/default.yml

#System Settings
php_modules: [ ‘php-curl’, ‘php-gd’, ‘php-mbstring’, ‘php-xml’, ‘php-xmlrpc’, ‘php-soap’, ‘php-intl’, ‘php-zip’ ]

#MySQL Settings
mysql_root_password: “mysql_root_password”
mysql_db: “wordpress”
mysql_user: “sammy”
mysql_password: “password”

#HTTP Settings
http_host: “your_domain”
http_conf: “your_domain.conf”
http_port: “80”

لیست زیر شامل توضیح مختصری در مورد هر یک از این متغیرها و نحوه تغییر آنها می باشد:
php_modules: آرایه ای حاوی افزونه های PHP که باید برای پشتیبانی از راه اندازی وردپرس شما نصب شوند. شما نیازی به تغییر این متغیر ندارید ، اما در صورت نیاز برای ستاپ خاص شما، باید افزودنه های جدید به لیست اضافه کنید.
mysql_root_password: کلمه عبور مورد نظر برای حساب MySQL ریشه
mysql_db: نام پایگاه داده MySQL که باید برای وردپرس ایجاد شود.
mysql_user: نام کاربر MySQL که باید برای وردپرس ایجاد شود.
mysql_password: رمز عبور برای کاربر جدید MySQL.
http_host: نام دامنه شما.
http_conf: نام فایل پیکربندی که در Apache ایجاد می شود.
http_port: درگاه HTTP برای این هاست مجازی ، که به طور پیش فرض 80 است.
پس از اتمام به روزرسانی متغیرهای داخل vars / default.yml ، این فایل را ذخیره کنید و ببندید. اگر از nano استفاده کرده اید ، این کار را با فشار دادن CTRL + X ، Y انجام دهید. سپس enter را بزنید.
اکنون آماده اجرای این playbook در یک یا چند سرور مجازی هستید. بیشتر playbook ها به گونه پیش فرض تنظیم شده اند که در هر سرور مجازی موجود شما اجرا می شود. ما می توانیم از فلگ -l استفاده کنیم تا مطمئن شویم که فقط یک زیر مجموعه از سرور مجازی ها یا یک سرور مجازی منفرد تحت تأثیر Playbook قرار گرفته است. ما همچنین می توانیم از فلگ -u استفاده کنیم تا مشخص کنیم از کدام کاربر روی سرور مجازی از راه دور استفاده می کنیم تا دستورات playbook را روی میزبان از راه دور متصل کنیم.
برای اجرای playbook فقط در server1 ، با اتصال به عنوان sammy ، می توانید از دستور زیر استفاده کنید:
⦁ $ ansible-playbook playbook.yml -l server1 -u sammy

خروجی مشابه این دریافت خواهید کرد:
Output
PLAY [all] *******

TASK [Gathering Facts] ***************
ok: [server1]

TASK [Install prerequisites] *********************
ok: [server1]

TASK [Download and unpack latest WordPress] *************
changed: [server1]

TASK [Set ownership] ****************
changed: [server1]

TASK [Set permissions for directories] ************
changed: [server1]

TASK [Set permissions for files] ****************
changed: [server1]

TASK [Set up wp-config] *****************
changed: [server1]

RUNNING HANDLER [Reload Apache] *************
changed: [server1]

RUNNING HANDLER [Restart Apache] ***************
changed: [server1]

PLAY RECAP ******************
server1 : ok=22 changed=18 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

توجه: برای کسب اطلاعات بیشتر در مورد نحوه اجرای Ansible playbooks ، راهنمای Ansible Cheat Sheet Guide را بررسی کنید.
پس از پایان راه اندازی Playbook ، می توانید به مرورگر وب خود بروید تا نصب وردپرس را از همانجا به پایان برسانید.
به نام دامنه یا آدرس IP عمومی سرور مجازی خود بروید:
http: // server_host_or_IP
صفحه ای مانند این را مشاهده خواهید کرد:

پس از انتخاب زبانی که می خواهید برای نصب وردپرس خود استفاده کنید ، مرحله نهایی برای تنظیم کاربر و رمزعبور وردپرس به شما ارائه می شود تا بتوانید وارد کنترل پنل شوید:

با کلیک بر روی صفحه ، شما به صفحه ای منتقل می شوید که از شما خواسته می شود وارد شوید:

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

برخی از مراحل بعدی رایج برای سفارشی سازی نصب وردپرس شامل انتخاب تنظیمات permalinks  برای پست های شما (می توانید در Settings > Permalinks بیابید) و انتخاب تم جدید (در Appearance > Themes) میباشد.
محتوای Playbook
می توانید تنظیمات سرور LAMP وردپرس را که در این آموزش مشاهده شده است ، در پوشه wordpress-lamp_ubuntu1804 در داخل منبع DigitalOcean Community Playbooks مشاهده کنید. برای کپی یا دانلود مستقیم محتوای اسکریپت ، روی دکمه Raw به سمت بالای هر اسکریپت کلیک کنید.
محتویات کامل Playbook و همچنین فایل های مرتبط با آن نیز برای راحتی شما در اینجا گنجانده شده است.
vars / default.yml
فایل متغیر default.yml حاوی مقادیری است که در وظایف playbook از جمله تنظیمات بانک اطلاعاتی و نام دامنه برای پیکربندی در Apache استفاده خواهد شد.
vars/default.yml
#System Settings
php_modules: [ ‘php-curl’, ‘php-gd’, ‘php-mbstring’, ‘php-xml’, ‘php-xmlrpc’, ‘php-soap’, ‘php-intl’, ‘php-zip’ ]

#MySQL Settings
mysql_root_password: “mysql_root_password”
mysql_db: “wordpress”
mysql_user: “sammy”
mysql_password: “password”

#HTTP Settings
http_host: “your_domain”
http_conf: “your_domain.conf”
http_port: “80”

files/apache.conf.j2
فایل apache.conf.j2 یک فایل الگوی Jinja 2 است که یک آپشن جدید Apache VirtualHost را پیکربندی می کند. متغیرهای مورد استفاده در این الگو در فایل متغیر vars / default.yml تعریف شده اند.
files/apache.conf.j2
<VirtualHost *:{{ http_port }}>
ServerAdmin webmaster@localhost
ServerName {{ http_host }}
ServerAlias www.{{ http_host }}
DocumentRoot /var/www/{{ http_host }}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory /var/www/{{ http_host }}>
Options -Indexes
</Directory>

<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

</VirtualHost>

files/wp-config.php.j2
فایل wp-config.php.j2 یکی دیگر از الگوهای Jinja است که برای تنظیم فایل اصلی پیکربندیWordPress استفاده می شود. متغیرهای مورد استفاده در این الگو در فایل متغیر vars / default.yml تعریف شده اند. کلیدهای احراز هویت منحصر به فرد با استفاده از یک عملکرد ترکیبی ایجاد می شوند.
files/info.php.j2
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the
* installation. You don’t have to use the web site, you can
* copy this file to “wp-config.php” and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://codex.wordpress.org/Editing_wp-config.php
*
* @package WordPress
*/

// ** MySQL settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
define( ‘DB_NAME’, ‘{{ mysql_db }}’ );

/** MySQL database username */
define( ‘DB_USER’, ‘{{ mysql_user }}’ );

/** MySQL database password */
define( ‘DB_PASSWORD’, ‘{{ mysql_password }}’ );

/** MySQL hostname */
define( ‘DB_HOST’, ‘localhost’ );

/** Database Charset to use in creating database tables. */
define( ‘DB_CHARSET’, ‘utf8’ );

/** The Database Collate type. Don’t change this if in doubt. */
define( ‘DB_COLLATE’, ” );

/** Filesystem access **/
define(‘FS_METHOD’, ‘direct’);

/**#@+
* Authentication Unique Keys and Salts.
*
* Change these to different unique phrases!
* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
*
* @since 2.6.0
*/
define( ‘AUTH_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘SECURE_AUTH_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘LOGGED_IN_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘NONCE_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘AUTH_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘SECURE_AUTH_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘LOGGED_IN_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘NONCE_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );

/**#@-*/

/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each
* a unique prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = ‘wp_’;

/**
* For developers: WordPress debugging mode.
*
* Change this to true to enable the display of notices during development.
* It is strongly recommended that plugin and theme developers use WP_DEBUG
* in their development environments.
*
* For information on other constants that can be used for debugging,
* visit the Codex.
*
* @link https://codex.wordpress.org/Debugging_in_WordPress
*/
define( ‘WP_DEBUG’, false );

/* That’s all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( ‘ABSPATH’ ) ) {
define( ‘ABSPATH’, dirname( __FILE__ ) . ‘/’ );
}

/** Sets up WordPress vars and included files. */
require_once( ABSPATH . ‘wp-settings.php’ );

playbook.yml
فایل playbook.yml جایی است که کلیه وظایف این مجموعه تعریف شده است. این کار با تعریف گروه سرور مجازی هایی که باید هدف این مجموعه باشند (all) شروع می شود ، و پس از آن برای تعریف اینکه وظایف باید بصورت پیش فرض با افزایش امتیاز (sudo) انجام شود یا خیر، از become: true استفاده می کند. سپس ، فایل متغیر vars / default.yml را برای بارگذاری گزینه های پیکربندی شامل می شود.
playbook.yml

– hosts: all
become: true
vars_files:
– vars/default.yml

tasks:
– name: Install prerequisites
apt: name=aptitude update_cache=yes state=latest force_apt_get=yes
tags: [ system ]

– name: Install LAMP Packages
apt: name={{ item }} update_cache=yes state=latest
loop: [ ‘apache2’, ‘mysql-server’, ‘python3-pymysql’, ‘php’, ‘php-mysql’, ‘libapache2-mod-php’ ]
tags: [ system ]

– name: Install PHP Extensions
apt: name={{ item }} update_cache=yes state=latest
loop: “{{ php_modules }}”
tags: [ system ]

# Apache Configuration
– name: Create document root
file:
path: “/var/www/{{ http_host }}”
state: directory
owner: “www-data”
group: “www-data”
mode: ‘0755’
tags: [ apache ]

– name: Set up Apache VirtualHost
template:
src: “files/apache.conf.j2”
dest: “/etc/apache2/sites-available/{{ http_conf }}”
notify: Reload Apache
tags: [ apache ]

– name: Enable rewrite module
shell: /usr/sbin/a2enmod rewrite
notify: Reload Apache
tags: [ apache ]

– name: Enable new site
shell: /usr/sbin/a2ensite {{ http_conf }}
notify: Reload Apache
tags: [ apache ]

– name: Disable default Apache site
shell: /usr/sbin/a2dissite 000-default.conf
notify: Restart Apache
tags: [ apache ]

# MySQL Configuration
– name: Set the root password
mysql_user:
name: root
password: “{{ mysql_root_password }}”
login_unix_socket: /var/run/mysqld/mysqld.sock
tags: [ mysql, mysql-root ]

– name: Remove all anonymous user accounts
mysql_user:
name: ”
host_all: yes
state: absent
login_user: root
login_password: “{{ mysql_root_password }}”
tags: [ mysql ]

– name: Remove the MySQL test database
mysql_db:
name: test
state: absent
login_user: root
login_password: “{{ mysql_root_password }}”
tags: [ mysql ]

– name: Creates database for WordPress
mysql_db:
name: “{{ mysql_db }}”
state: present
login_user: root
login_password: “{{ mysql_root_password }}”
tags: [ mysql ]

– name: Create MySQL user for WordPress
mysql_user:
name: “{{ mysql_user }}”
password: “{{ mysql_password }}”
priv: “{{ mysql_db }}.*:ALL”
state: present
login_user: root
login_password: “{{ mysql_root_password }}”
tags: [ mysql ]

# UFW Configuration
– name: “UFW – Allow HTTP on port {{ http_port }}”
ufw:
rule: allow
port: “{{ http_port }}”
proto: tcp
tags: [ system ]

# WordPress Configuration
– name: Download and unpack latest WordPress
unarchive:
src: https://wordpress.org/latest.tar.gz
dest: “/var/www/{{ http_host }}”
remote_src: yes
creates: “/var/www/{{ http_host }}/wordpress”
tags: [ wordpress ]

– name: Set ownership
file:
path: “/var/www/{{ http_host }}”
state: directory
recurse: yes
owner: www-data
group: www-data
tags: [ wordpress ]

– name: Set permissions for directories
shell: “/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;”
tags: [ wordpress ]

– name: Set permissions for files
shell: “/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;”
tags: [ wordpress ]

– name: Set up wp-config
template:
src: “files/wp-config.php.j2”
dest: “/var/www/{{ http_host }}/wordpress/wp-config.php”
tags: [ wordpress ]

handlers:
– name: Reload Apache
service:
name: apache2
state: reloaded

– name: Restart Apache
service:
name: apache2
state: restarted

با خیال راحت این فایل ها را به بهترین وجه متناسب با نیازهای فردی خود در گردش کارتان تغییر دهید.
نتیجه
در این راهنما ، ما از Ansible برای خودکارسازی روند نصب و راه اندازی وب سایت وردپرس با LAMP روی سرور مجازی اوبونتو 18.04 استفاده کرده ایم.
اگر می خواهید کارهای دیگری در این playbook  را برای سفارشی سازی تنظیمات سرور مجازی خود انجام دهید ، لطفاً به راهنمای مقدماتی Ansible ( پیکربندی مدیریت 101: نوشتن Ansible Playbooks) مراجعه کنید.

 

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

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

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

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

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

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

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

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

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18  –

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

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10  –

نحوه نصب Docker Compose در Debian 10 –

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 –

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7  –

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18  –

بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16 –

استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18 –

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

چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی –

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18 –

 

 

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

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

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
ProxySQL یک t آگاه به SQL است که می تواند بین برنامه شما و پایگاه داده شما قرار بگیرد. این نرم افزار بسیاری از ویژگی ها ، مانند تعادل بار بین چندین سرور مجازی MySQL را ارائه میدهد و به عنوان یک لایه حافظه پنهان برای درخواست ها عمل میکند. در این آموزش به ویژگی دخیره سازی ProxySQL و نحوه بهینه سازی درخواست ها برای پایگاه داده MySQL شما پرداخته می شود.
ذخیره سازی MySQL زمانی اتفاق می افتد که نتیجه یک درخواست به گونه ای ذخیره می شود که هنگامی که آن درخواست تکرار میگردد ، بدون نیاز به مرتب سازی در پایگاه داده ، نتیجه می تواند برگردانده شود. این ویژگی می تواند سرعت درخواست های معمول را به میزان قابل توجهی افزایش دهد. اما در بسیاری از روش های ذخیره سازی ، توسعه دهندگان باید کد برنامه خود را اصلاح کنند ، که می تواند یک اشکال را در پایگاه داده وارد کند. برای جلوگیری از این عمل مستعد خطا ،ProxySQL به شما امکان می دهد یک ذخیره سازی شفاف را انجام دهید.
در ذخیره سازی شفاف ، فقط ادمین های دیتابیس باید جهت فعال کردن حافظه پنهان برای متداول ترین درخواست ها ، پیکربندی ProxySQL را تغییر دهند و این تغییرات می تواند از طریق رابط ادمین ProxySQL انجام شود. همه کاری که توسعه دهنده باید انجام دهد اتصال به پروکسی آگاه به پروتکل است ، و پروکسی تصمیم می گیرد که آیا درخواستی را می توان از حافظه نهان بدون ضربه زدن به سرور مجازی back-end ارائه داد یا خیر.
در این آموزش از ProxySQL برای تنظیم ذخیره سازی شفاف برای سرور مجازی MySQL در اوبونتو 16.04 استفاده خواهید کرد. سپس می توانید عملکرد آن را با استفاده از mysqlslap با و بدون حافظه پنهان آزمایش کنید تا تأثیر حافظه پنهان و مدت زمان صرفه جویی در هنگام اجرای بسیاری از سؤالات مشابه را نشان دهید.
پیش نیازها
قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت:
• یک سرور مجازی Ubuntu 16.04 با حداقل 2 گیگابایت رم ، با یک کاربر غیر ریشه با امتیازات sudo و فایروال تنظیم شده است ، همانطور که در راهنمای راه اندازی سرور مجازی اولیه Ubuntu 16.04 ما گفته شده است.
مرحله 1 – نصب و تنظیم سرور مجازی MySQL
ابتدا ، سرور مجازی MySQL را نصب کرده و پیکربندی می کنید تا توسط ProxySQL به عنوان یک سرور مجازی back-end برای ارائه خدمات به درخواست های کلاینت استفاده شود.
در Ubuntu 16.04 ، سرور مجازی mysql با استفاده از این دستور قابل نصب است:
$ sudo apt-get install mysql-server

Y را فشار دهید تا نصب را تأیید کنید.
سپس از شما رمزعبور کاربر روت MySQL خواسته می شود. یک رمزعبور قوی وارد کنید و آن را برای استفاده بعدی ذخیره کنید.
اکنون که سرور مجازی MySQL خود را آماده کرده اید ، آن را پیکربندی می کنید تا ProxySQL به درستی کار کند. برای نظارت بر سرور مجازی MySQL ، باید یک کاربر مانیتور برای ProxySQL اضافه کنید ، زیرا ProxySQL به جای استفاده از اتصال TCP یا درخواست های HTTP GET ، به سرور مجازی پشتیبان از طریق پروتکل SQL گوش می دهد تا مطمئن شود که backend  در حال اجرا است. مانیتور از یک اتصال SQL ساختگی (مجازی) برای تعیین اینکه سرور مجازی در حال کار است یا خیر استفاده می کند.
ابتدا وارد پوسته MySQL شوید:
$ mysql -uroot -p
-uroot با استفاده از کاربر روت MySQL شما را وارد می کند و –p رمزعبور کاربر root را می خواهد. این کاربر روت با کاربر اصلی سرور مجازی شما متفاوت است و رمز عبور چیزی است که هنگام نصب بسته mysql-server وارد کرده اید.
رمز عبور اصلی را وارد کنید و ENTER را فشار دهید.
اکنون شما دو کاربر ایجاد خواهید کرد ، یکی به نام مانیتور برای ProxySQL و دیگری که برای اجرای درخواست های مربوط به کلاینت و ارائه امتیازات مناسب به آنها استفاده میکنید. این آموزش نام این کاربر را Sammy خواهد گذاشت.
کاربر مانیتور را ایجاد کنید:
Mysql> CREATE USER ‘monitor’@’%’ IDENTIFIED BY ‘monitor_password’;

عبارت CREATE USER برای ایجاد یک کاربر جدید استفاده می شود که می تواند از IP های خاص متصل شود. استفاده از٪ نشانگر اتصال کاربر از هر آدرس IP است. IDENTIFIED BY کلمه عبور را برای کاربر جدید تنظیم می کند. هر پسوردی را که دوست دارید وارد کنید ، اما حتماً آن را برای استفاده های بعدی به خاطر بسپارید.
پس از ایجاد مانیتور کاربر ، کاربر sammy را ایجاد کنید:
Mysql> CREATE USER ‘sammy’@’%’ IDENTIFIED BY ‘sammy_password’;

در مرحله بعدی ، به کاربران جدید خود امتیاز دهید. برای پیکربندی مانیتور دستور زیر را اجرا کنید:
Mysql> GRANT SELECT ON sys.* TO ‘monitor’@’%’;

از درخواست GRANT برای دادن امتیاز به کاربران استفاده می شود. در اینجا فقط SELECT را در تمام جداول موجود در پایگاه داده sys به کاربر مانیتور اعطا می کنید. فقط به این امتیاز نیاز دارد تا به سرور مجازی back-end گوش دهد.
اکنون تمام امتیازات را به کلیه بانکهای اطلاعاتی به کاربر sammy اعطا کنید:
Mysql> GRANT ALL PRIVILEGES on *.* TO ‘sammy’@’%’;

با این کار sammy می تواند برای تست دیتابیس شما سؤالات لازم را ایجاد کند.
با اجرای دستور زیر تغییرات امتیاز را اعمال کنید:
Mysql> FLUSH PRIVILEGES;

در آخر ، از پوسته mysql خارج شوید:
Mysql> exit;

اکنون شما سرور مجازی mysql را نصب کرده اید و کاربری ایجاد کرده اید که توسط ProxySQL برای نظارت بر سرور مجازی MySQL شما استفاده می شود ، و کاربر دیگر برای اجرای درخواست های کلاینت میباشد. در مرحله بعد ProxySQL را نصب و پیکربندی خواهید کرد.
مرحله 2 – نصب و پیکربندی سرور مجازی ProxySQL
اکنون می توانید سرور مجازی ProxySQL را نصب کنید ، که به عنوان یک لایه حافظه پنهان برای درخواست های شما استفاده میشود. یک لایه حافظه پنهانی به عنوان وقفه بین سرور مجازی های برنامه شما و سرور مجازی های پشتیبان بانک اطلاعاتی وجود دارد. و برای اتصال سریع به دیتابیس و ذخیره نتایج برخی از درخواست ها در حافظه خود برای دسترسی سریع بعدی استفاده می شود.
صفحه  ProxySQL releases Github فایلهای نصب را برای نسخه های رایج لینوکس ارائه می دهد. برای این آموزش ، از wget برای دانلود فایل نصب نسخه ProxySQL دبیان 2.0.4 استفاده می کنید:
$ wget https://github.com/sysown/proxysql/releases

/download/v2.0.4/proxysql_2.0.4-ubuntu16_amd64.deb

سپس ، بسته را با استفاده از dpkg نصب کنید:
$ sudo dpkg -i proxysql_2.0.4-ubuntu16_amd64.deb

پس از نصب ، ProxySQL را با این دستور شروع کنید:
$ sudo systemctl start proxysql

با این دستور می توانید بررسی کنید که ProxySQL به درستی شروع شده است:
$ sudo systemctl status proxysql

خروجی مشابه این دریافت خواهید کرد:
Output
root@ubuntu-s-1vcpu-2gb-sgp1-01:~# systemctl status proxysql
● proxysql.service – LSB: High Performance Advanced Proxy for MySQL
Loaded: loaded (/etc/init.d/proxysql; bad; vendor preset: enabled)
Active: active (exited) since Wed 2019-06-12 21:32:50 UTC; 6 months 7 days ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0
Memory: 0B
CPU: 0

اکنون زمان آن رسیده است که به سرور مجازی ProxySQL خود وصل شوید. برای این منظور ، از رابط SQL ادمین ProxySQL استفاده کنید ، که به طور پیش فرض درگاه 6032 را در localhost گوش می دهد و از admin به عنوان نام کاربری و رمز عبور خود استفاده می کند.
با اجرای دستور زیر به رابط متصل شوید:
$ mysql -uadmin -p -h 127.0.0.1 -P6032

هنگام درخواست رمز عبور ، admin را وارد کنید.
-uadmin نام کاربری را به عنوان admin تعیین می کند و فلگ -h میزبان را به عنوان localhost مشخص می کند. درگاه 6032 است که با استفاده از فلگ -P مشخص شده است.
در اینجا شما باید میزبان و پورت را به صراحت مشخص کنید زیرا به طور پیش فرض ، کلاینت MySQL با استفاده از یک فایل محلی و پورت 3306 وصل می شود.
اکنون که به عنوان admin وارد پوسته mysql شده اید ، کاربر مانیتور را پیکربندی کنید تا ProxySQL بتواند از آن استفاده کند. ابتدا برای تنظیم مقادیر دو متغیر جهانی از درخواست های استاندارد SQL استفاده کنید:
Mysql> UPDATE global_variables SET variable_value=’monitor’ WHERE variable_name=’mysql-monitor_username’;

Mysql> UPDATE global_variables SET variable_value=’monitor_password’ WHERE variable_name=’mysql-monitor_password’;

متغیر mysql-monitor_username نام کاربری MySQL را مشخص می کند که برای بررسی اینکه سرور مجازی back-end کار میکند یا نه ، استفاده می شود. متغیر mysql-monitor_password به گذرواژه ای که هنگام اتصال به سرور مجازی back-end استفاده خواهد شد اشاره می کند. از رمز عبوری که برای نام کاربری مانیتور ایجاد کرده اید استفاده کنید.
هر بار که تغییری در رابط ادمین ProxySQL ایجاد کنید ، باید از دستور LOAD مناسب برای اعمال تغییرات در نمونه در حال اجرا ProxySQL استفاده کنید. شما متغیرهای جهانی MySQL را تغییر داده اید ، بنابراین آنها را به RUNTIME بارگذاری کنید تا تغییرات اعمال شود:
Mysql> LOAD MYSQL VARIABLES TO RUNTIME;
در مرحله بعد ، تغییراتی را در بانک اطلاعاتی روی دیسک ذخیره کنید تا تغییرات بین ریستارت ها ادامه یابد. ProxySQL برای ذخیره جداول و متغیرهای خاص خود از پایگاه داده محلی SQLite خود استفاده می کند:
Mysql> SAVE MYSQL VARIABLES TO DISK;

اکنون ، به ProxySQL در مورد سرور مجازی back-end اطلاع بدهید. جدول mysql_servers اطلاعات مربوط به هر سرور مجازی پشتیبان را دارد که ProxySQL می تواند به آن متصل شود و از آن استفاده کند ، بنابراین با استفاده از یک عبارت SQL استاندارد INSERT با مقادیر زیر برای hostgroup_id ، hostname و port یک رکورد جدید اضافه کنید:
Mysql> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (1, ‘127.0.0.1’, 3306);

برای اعمال تغییرات ، LOAD را اجرا کرده و دوباره SAVE کنید:
Mysql> LOAD MYSQL SERVERS TO RUNTIME;

Mysql> SAVE MYSQL SERVERS TO DISK;
سرانجام ، به ProxySQL خواهید گفت که کدام کاربر به سرور مجازی back-end وصل خواهد شد. Sammy را به عنوان کاربر تنظیم کرده و sammy_password را با رمز عبوری که قبلاً ایجاد کرده اید جایگزین کنید:
Mysql> INSERT INTO mysql_users(username, password, default_hostgroup) VALUES (‘sammy’, ‘sammy_password’, 1);

جدول mysql_users اطلاعات مربوط به کاربرانی را که برای اتصال به سرور مجازی های back-end استفاده می شوند ، در اختیار دارد. شما username ، password و default_hostgroup را مشخص کردید.
تغییرات را دانلود و ذخیره کنید:
Mysql> LOAD MYSQL USERS TO RUNTIME;

Mysql> SAVE MYSQL USERS TO DISK;
سپس از پوسته mysql خارج شوید:
Mysql> exit;

برای آزمایش اینکه می توانید با استفاده از ProxySQL به سرور مجازی پشتیبان خود متصل شوید ، درخواست تست زیر را اجرا کنید:
$ mysql -usammy -h127.0.0.1 -p -P6033 -e “SELECT @@HOSTNAME as hostname”
در این دستور شما از فلگ -e برای اجرای یک درخواست و بستن اتصال استفاده کرده اید. درخواست نام میزبان سرور مجازی back-end را چاپ می کند.
توجه: ProxySQL به طور پیش فرض برای گوش دادن به اتصالات ورودی از پورت 6033 استفاده می کند.
خروجی به این شکل ظاهر می شود ، your_hostname با نام میزبان شما جایگزین می شود:
Output
+—————————-+
| hostname |
+—————————-+
| your_hostname |
+—————————-+

برای کسب اطلاعات بیشتر در مورد پیکربندی ProxySQL ، به مرحله 3 نحوه استفاده از ProxySQL به عنوان Load Balancer برای MySQL در اوبونتو 16.04 مراجعه کنید.
تاکنون ، شما ProxySQL را پیکربندی کرده اید تا از سرور مجازی MySQL خود به عنوان backend استفاده کرده و با استفاده از ProxySQL به backend وصل شوید. اکنون ، شما آماده استفاده از mysqlslap برای تست عملکرد درخواست ها بدون ذخیره سازی هستید.
مرحله 3 – آزمایش با استفاده از mysqlslap بدون ذخیره سازی
در این مرحله شما یک پایگاه داده تستی را دانلود می کنید تا بتوانید با استفاده از mysqlslap درخواست ها را اجرا کنید و زمان تأخیر بدون حافظه نهان را تست کنید و معیار سرعت درخواست های خود را تعیین نمایید. همچنین بررسی می کنید که چگونه ProxySQL سوابق درخواست ها را در جدول stats_mysql_query_digest نگه می دارد.
mysqlslap یک کلاینت شبیه سازی بار است که به عنوان یک ابزار تست بار برای MySQL استفاده می شود. و می تواند یک سرور مجازی MySQL را با درخواست های خودکار ایجاد شده یا برخی از درخواست های سفارشی که در یک پایگاه داده اجرا می شود ، را آزمایش کند. در بسته کلاینت MySQL نصب شده وجود دارد ، بنابراین نیازی به نصب آن نیست. در عوض ، شما یک پایگاه داده را فقط برای اهداف آزمایش دانلود می کنید ، که می توانید از mysqlslap استفاده کنید.
در این آموزش از یک نمونه بانک اطلاعاتی کارمند استفاده خواهید کرد. شما از این پایگاه داده کارمند استفاده می کنید زیرا دارای مجموعه ای از داده های بزرگ است که می تواند تفاوت های بهینه سازی درخواست را نشان دهد. این بانک اطلاعاتی دارای شش جدول است ، اما داده های موجود در آن بیش از 300000 پرونده کارمند میباشد. این به شما کمک می کند تا حجم کار تولیدی در مقیاس بزرگ را شبیه سازی کنید.
برای دانلود پایگاه داده ، ابتدا مخزن Github را با استفاده از این دستور کلون کنید:
$ git clone https://github.com/datacharmer/test_db.git

سپس دایرکتوری test_db را وارد کنید و با استفاده از این دستورات پایگاه داده را در سرور مجازی MySQL بارگذاری کنید:
$ cd test_db

$ mysql -uroot -p < employees.sql9 این دستور با استفاده از تغییر مسیر shell برای خواندن نمایش داده های SQL در فایل Staff.sql و اجرای آنها در سرور مجازی MySQL برای ایجاد ساختار پایگاه داده استفاده می کند. خروجی مانند این را خواهید دید: Output INFO CREATING DATABASE STRUCTURE INFO storage engine: InnoDB INFO LOADING departments INFO LOADING employees INFO LOADING dept_emp INFO LOADING dept_manager INFO LOADING titles INFO LOADING salaries data_load_time_diff 00:00:32 پس از بارگذاری پایگاه داده روی سرور مجازی MySQL خود ، آزمایش کنید که mysqlslap با درخواست زیر کار کند: $ mysqlslap -usammy -p -P6033 -h127.0.0.1 –auto-generate-sql –verbose mysqlslap دارای فلگ هایی مشابه کلاینت mysql است. در اینجا موارد استفاده شده در این دستور آمده است: -u کاربر مورد استفاده برای اتصال به سرور مجازی را مشخص می کند. -p رمزعبور کاربر را درخواست میکند. -P با استفاده از درگاه مشخص شده متصل می شود. -h به هاست مشخص شده متصل می شود. Auto-generate-sql به MySQL اجازه می دهد تا تست بارگذاری را با استفاده از درخواست های تولید شده خود انجام دهد. –verbose باعث می شود که خروجی اطلاعات بیشتری را نشان دهد. خروجی شبیه به زیر را دریافت خواهید کرد: Output Benchmark Average number of seconds to run all queries: 0.015 seconds Minimum number of seconds to run all queries: 0.015 seconds Maximum number of seconds to run all queries: 0.015 seconds Number of clients running queries: 1 Average number of queries per client: 0 در این خروجی می توانید تعداد متوسط ​​، حداقل و حداکثر تعداد ثانیه هایی را که برای اجرای کلیه درخواست ها سپری شده را مشاهده کنید. این به شما مقیاسی از مدت زمان مورد نیاز برای اجرای درخواست توسط تعدادی از کلاینت ها را نشان میدهد. در این خروجی ، فقط یک کلاینت برای اجرای درخواست استفاده شده است. در مرحله بعد ، با نگاهی به stats_mysql_query_digest درProxySQL ببینید mysqlslap  کدام درخواست ها را در آخرین دستور اجرا کرده است. این به ما اطلاعاتی مانند  digest درخواست ها را می دهد ، که یک شکل عادی شده از عبارت SQL است که بعداً برای فعال کردن حافظه پکیج به آنها مراجعه می شود. با این دستور اینترفیس ادمین ProxySQL را وارد کنید: $ mysql -uadmin -p -h 127.0.0.1 -P6032 سپس این درخواست را برای یافتن اطلاعات در جدول stats_mysql_query_digest اجرا کنید: Mysql> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;

خروجی مشابه زیر را مشاهده خواهید کرد:
+————+———-+———–+——————–+———————————-+
| count_star | sum_time | hostgroup | digest | digest_text |
+————+———-+———–+——————–+———————————-+
| 1 | 598 | 1 | 0xF8F780C47A8D1D82 | SELECT @@HOSTNAME as hostname |
| 1 | 0 | 1 | 0x226CD90D52A2BA0B | select @@version_comment limit ? |
+————+———-+———–+——————–+———————————-+
2 rows in set (0.01 sec)

درخواست قبلی داده ها را از جدول stats_mysql_query_digest انتخاب می کند ، که شامل اطلاعات مربوط به کلیه درخواست ها در ProxySQL است. در اینجا پنج ستون انتخاب شده است:
count_star: تعداد دفعاتی که این درخواست اجرا شد.
sum_time: زمان کل بر حسب میلی ثانیه است که برای اجرای این درخواست استفاده شده است.
hostgroup: گروه میزبانی که برای اجرای این درخواست استفاده می شود.
digest: دایجستی از درخواست اجرا شده.
digest_text: درخواست واقعی. در مثال این آموزش ، درخواست دوم با استفاده از ؟ به جای پارامترهای متغیر پارامتریزه شده است . بنابراین، select @@version_comment limit 1 و select @@version_comment limit 2 به عنوان همان درخواست با یک دایجست گروه بندی می شوند.
اکنون که می دانید چگونه داده های درخواست را در جدول stats_mysql_query_digest بررسی کنید ، از پوسته mysql خارج شوید:
Mysql> exit;
بانک اطلاعاتی که دانلود کردید شامل برخی از جداول با داده های نمایشی است. اکنون با انتخاب پرونده هایی که از from_emp آنها بزرگتر از 2000-04-20 باشد میتوانید درخواست ها را در dept_emp تست کنید و میانگین زمان اجرا را ثبت نمایید.
برای اجرای آزمون از این دستور استفاده کنید:
$ mysqlslap -usammy -P6033 -p -h127.0.0.1 –concurrency=100 –iterations=20 –create-schema=employees –query=”SELECT * from dept_emp WHERE from_date>’2000-04-20′” –verbose

در اینجا از چند فلگ جدید استفاده می کنید:
–concurrency = 100: تعداد کاربران را برای شبیه سازی تعیین می کند ، در این حالت 100.
–iterations=20 : باعث می شود تست 20 بار اجرا شود و نتایج حاصل از همه آنها محاسبه شود.
–create-schema=employees: در اینجا پایگاه داده کارمندان را انتخاب کردید.
–query=”SELECT * from dept_emp WHERE from_date>’2000-04-20′”: در اینجا درخواست اجرا شده در آزمون را مشخص کردید.
آزمون چند دقیقه طول خواهد کشید. پس از اتمام کار ، نتایج مشابه با موارد زیر را دریافت می کنید:
Output
Benchmark
Average number of seconds to run all queries: 18.117 seconds
Minimum number of seconds to run all queries: 8.726 seconds
Maximum number of seconds to run all queries: 22.697 seconds
Number of clients running queries: 100
Average number of queries per client: 1

تعداد شما می تواند کمی متفاوت باشد. این اعداد را در جایی نگه دارید تا بعد از فعال کردن ذخیره سازی، آنها را با نتایج حاصل از مقایسه کنید.
پس از آزمایش ProxySQL بدون حافظه پنهان ، زمان آن است که دوباره همان تست را اجرا کنید ، اما این بار با فعال سازی حافظه پنهان.
مرحله 4 – آزمایش با استفاده از mysqlslap همراه با ذخیره سازی
در این مرحله ، حافظه پنهان به ما کمک می کند تا هنگام اجرای درخواست های مشابه ، تاخیر را کاهش دهیم. در اینجا ، درخواست های اجرا شده را شناسایی می کنید ، دایجست آنها را از جدول stats_mysql_query_digest ProxySQL می گیرید و از آنها برای فعال کردن حافظه پنهان استفاده می کنید. سپس ، دوباره تست می کنید تا اختلاف را بررسی کنید.
برای فعال کردن حافظه پنهان ، باید دایجست نمایش داده شد که در آن ذخیره می کنید را بدانید. با استفاده از این دستور به رابط ادمین ProxySQL وارد شوید:
$ mysql -uadmin -p -h127.0.0.1 -P6032
سپس این درخواست را مجدداً اجرا کنید تا لیستی از درخواست ها و آنها دریافت شود:
Ysql> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;

نتیجه مشابهی با این خواهید گرفت:
Output
+————+————-+———–+——————–+——————————————+
| count_star | sum_time | hostgroup | digest | digest_text |
+————+————-+———–+——————–+——————————————+
| 2000 | 33727110501 | 1 | 0xC5DDECD7E966A6C4 | SELECT * from dept_emp WHERE from_date>? |
| 1 | 601 | 1 | 0xF8F780C47A8D1D82 | SELECT @@HOSTNAME as hostname |
| 1 | 0 | 1 | 0x226CD90D52A2BA0B | select @@version_comment limit ? |
+————+————-+———–+——————–+——————————————+
3 rows in set (0.00 sec)

به ردیف اول نگاه کنید. در مورد درخواستی است که 2000 بار اجرا شده است. این یک درخواست تست شده است که قبلاً اجرا شده است. از دایجست آن استفاده کرده و آن را ذخیره کنید تا در افزودن یک قانون درخواست برای ذخیره سازی استفاده شود.
چند درخواست بعدی یک قانون درخواست جدید به ProxySQL اضافه خواهد کرد که با دایجست درخواست قبلی مطابقت دارد و یک مقدار cache_ttl برای آن قرار می دهد. cache_ttl تعداد میلی ثانیه هایی است که نتیجه در حافظه ذخیره می شود:
Mysql> INSERT INTO mysql_query_rules(active, digest, cache_ttl, apply) VALUES(1,’0xC5DDECD7E966A6C4′,2000,1);

در این دستور شما یک رکورد جدید به جدول mysql_query_rules اضافه می کنید. این جدول کلیه قواعد اعمال شده قبل از اجرای یک درخواست را در خود جای داده است. در این مثال ، شما یک مقدار برای ستون cache_ttl اضافه می کنید که باعث می شود درخواست منطبق شده توسط دایجست داده شده برای تعداد میلی ثانیه مشخص شده در این ستون ذخیره بماند. عدد 1 را در ستون اعمال قرار دهید تا مطمئن شوید که این قانون برای درخواست ها اعمال می شود.
این تغییرات را LOAD و SAVE کنید و سپس از پوست MYSQL خارج شوید:
Mysql> LOAD MYSQL QUERY RULES TO RUNTIME;

Mysql> SAVE MYSQL QUERY RULES TO DISK;

Mysql> exit;
اکنون که حافظه پنهان فعال است ، دوباره تست کنید تا نتیجه را بررسی کنید:
$ mysqlslap -usammy -P6033 -p -h127.0.0.1 –concurrency=100 –iterations=20 –create-schema=employees –query=”SELECT * from dept_emp WHERE from_date>’2000-04-20′” –verbose

این کار خروجی شبیه به زیر را ارائه می دهد:
Output
Benchmark
Average number of seconds to run all queries: 7.020 seconds
Minimum number of seconds to run all queries: 0.274 seconds
Maximum number of seconds to run all queries: 23.014 seconds
Number of clients running queries: 100
Average number of queries per client: 1

نتیجه
در این مقاله ، حافظه نهان شفاف را با ProxySQL تنظیم کردید تا بتواند نتایج درخواست از پایگاه داده را ذخیره کند. شما همچنین سرعت درخواست را با و بدون حافظه پنهان آزمایش کرده اید تا تفاوتی بین caching ایجاد کنید.
در این آموزش از یک سطح حافظه پنهان استفاده کرده اید. همچنین می توانید حافظه نهان وب را که جلوی یک وب سرور مجازی قرار دارد و پاسخ به درخواست های مشابه را ذخیره می کند ، امتحان کنید ، بدون اینکه به سرور مجازی های پشتیبان ضربه بزنید ، پاسخ را به کلاینت ارسال می کنید. این بسیار شبیه به ذخیره سازی ProxySQL است اما در سطح متفاوتی است. برای کسب اطلاعات بیشتر در مورد حافظه پنهان در وب ، اصول اولیه Caching Web خود را بررسی کنید: اصطلاحات ، هدرهای HTTP ، و مقدمات برنامه Caching Strategies.
سرور مجازی MySQL همچنین حافظه پنهان درخواست خود را دارد. می توانید در مورد آموزش بهینه سازی MySQL با Query Cache در اوبونتو 18.04 اطلاعات بیشتری در مورد آن کسب کنید.

 

 

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

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

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

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

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

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

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

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

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18  –

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

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10  –

نحوه نصب Docker Compose در Debian 10 –

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 –

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7  –

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18  –

بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16 –

استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18 –

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

چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی –

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18 –

 

 

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

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
کانتینر کردن یک برنامه به فرآیند سازگاری یک برنامه و اجزای آن اشاره میکند برای اینکه بتوانید آن را در محیط های سبک که به کانتینر شناخته می شوند اجرا کنید. چنین محیط هایی منزوی و یکبار مصرف هستند و می توانند برای توسعه ، آزمایش و بکارگیری برنامه های کاربردی برای تولید ، مورد استفاده قرار گیرند.
در این راهنما ، ما از Docker Compose برای کانتینر کردن برنامه Laravel 6 برای توسعه استفاده خواهیم کرد. پس از اتمام ، یک برنامه نمایشی Laravel در سه کانتینر سرویس جداگانه اجرا می شود:
• یک سرویس برنامه که PHP7.4-FPM را اجرا میکند.
• سرویس db که MySQL 5.7 را اجرا می کند.
• سرویس nginx که قبل از ارائه برنامه Laravel به کاربر نهایی از سرویس برنامه برای تجزیه کد PHP استفاده می کند.
برای ایجاد یک روند توسعه ساده و تسهیل اشکال زدایی برنامه ، فایل های برنامه را با استفاده از حجم های مشترک همگام سازی خواهیم کرد. همچنین خواهیم دید که چگونه می توان از دستورات اجرای docker-compose برای اجرای Composer و Artisan در کانتینر برنامه استفاده کرد.
پیش نیازها
⦁ دسترسی به یک دستگاه محلی یا سرور مجازی توسعه Ubuntu 18.04 به عنوان یک کاربر غیر ریشه و دارای امتیازات سودو. اگر از سرور مجازی راه دور استفاده می کنید ، توصیه می شود یک فایروال فعال نصب شود. برای تنظیم این موارد ، لطفاً به راهنمای راه اندازی سرور مجازی اولیه ما برای اوبونتو 18.04 مراجعه کنید.
⦁ Docker نصب شده بر روی سرور مجازی تان، مراحل 1 و 2 نحوه نصب و استفاده از Docker را در اوبونتو 18.04 دنبال کنید.
⦁ Docker Compose نصب شده بر روی سرور مجازی تان. مرحله 1 نحوه نصب Docker Compose را در اوبونتو 18.04 را دنبال کنید.
مرحله 1 – به دست آوردن برنامه نسخه ی نمایشی
برای شروع ، برنامه نسخه ی نمایشی Laravel را از منبع Github آن دریافت خواهیم کرد. ما علاقه مند به شاخه آموزش 01 هستیم که شامل برنامه اصلی Laravel است که در اولین راهنمای این مجموعه ایجاد کرده ایم.
برای به دست آوردن کد برنامه ای که با این آموزش سازگار است ، با دستور زیر آموزش نسخه-1.0.1 را روی دیرکتوری هوم خود دانلود کنید:
⦁ $ cd ~

⦁ $ curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o travellist.zip

برای باز کردن کد برنامه به دستور unzip نیاز خواهیم داشت. اگر قبلاً این بسته را نصب نکرده اید ، اکنون این کار را انجام دهید:
⦁ $ sudo apt update

⦁ $ sudo apt install unzip
اکنون محتویات برنامه را از حالت فشرده خارج کرده و برای دسترسی آسانتر نام دیرکتوری باز شده را تغییر دهید:
⦁ $ unzip travellist.zip

⦁ $ mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo

به دیرکتوری travellist-demo بروید:
⦁ $ cd travellist-demo

در مرحله بعدی ، یک فایل پیکربندی .env برای تنظیم برنامه ایجاد خواهیم کرد.
مرحله 2 – تنظیم فایل .env برنامه
فایل های پیکربندی Laravel در پوشه ای به نام config ، در دیرکتوری اصلی برنامه قرار دارند. علاوه بر این ، از یک فایل .env برای تنظیم پیکربندی وابسته به محیط ، مانند اعتبارات و اطلاعاتی که ممکن است بین پایگاه ها متفاوت باشد ، استفاده می شود. این فایل در کنترل تجدید نظر گنجانده نشده است.
هشدار: فایل تنظیمات محیط شامل اطلاعات حساس در مورد سرور مجازی شما ، از جمله اطلاعات پایگاه داده و کلیدهای امنیتی است. به همین دلیل ، شما هرگز نباید این فایل را به صورت عمومی به اشتراک بگذارید.
مقادیر موجود در فایل .env بر مقادیر تعیین شده در فایل های پیکربندی معمولی واقع در فهرست پیکربندی ارجحیت دارند. هر نصب بر روی یک محیط جدید نیاز به یک فایل متناسب با محیط دارد تا مواردی از قبیل تنظیمات اتصال بانک اطلاعاتی ، گزینه های اشکال زدایی ، URL برنامه را از موارد دیگری که بسته به نوع محیطی که برنامه در آن اجرا میشود تغییر میکنند، متمایز نماید.
اکنون ما یک فایل .env جدید را برای سفارشی کردن گزینه های پیکربندی برای محیط توسعه ای که تنظیم می کنیم ایجاد خواهیم کرد. لاراول با یک فایل.env مثال همراه است که می توانیم آنرا کپی کنیم تا مورد خودمان را ایجاد کنیم:
⦁ $ cp .env.example .env

این فایل را با استفاده از نانو یا ویرایشگر متن مورد نظر خود باز کنید:
⦁ $ nano .env

فایل .env فعلی از برنامه نمایشی Travellist شامل تنظیماتی برای استفاده از یک پایگاه داده محلی MySQL ، با 127.0.0.1 به عنوان میزبان پایگاه داده است. ما باید متغیر DB_HOST را به روز کنیم تا به سرویس دیتابیس که در محیط Docker خود ایجاد خواهیم کرد اشاره کند. در این راهنما ، ما سرویس دیتابیس خود را db می نامیم. پیش بروید و مقدار ذکر شده DB_HOST را با نام سرویس بانک اطلاعات جایگزین کنید:
.env
APP_NAME=Travellist
APP_ENV=dev
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost:8000

LOG_CHANNEL=stack

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

در صورت تمایل می توانید نام بانک اطلاعاتی ، نام کاربری و رمزعبور را نیز تغییر دهید. این متغیرها در مرحله بعدی استفاده می شود که در آن فایل docker-compose.yml را برای پیکربندی خدمات خود تنظیم خواهیم کرد.
هنگام ویرایش ، فایل را ذخیره کنید. اگر از nano استفاده کرده اید ، می توانید با فشار دادن Ctrl + x این کار را انجام دهید، سپس Y و Enter را برای تأیید فشار دهید.
مرحله 3 – تنظیم Dockerfile برنامه
اگرچه هر دو سرویس MySQL و Nginx ما مبتنی بر تصاویر پیش فرض به دست آمده از Docker Hub خواهد بود ، اما ما هنوز نیاز به ساختن یک تصویر دلخواه برای کانتینر برنامه داریم. ما برای آن یک Dockerfile جدید ایجاد خواهیم کرد.
تصویر travellist  ما بر اساس PHP: 7.4-fpm تصویر رسمی PHP از Docker Hub خواهد بود. در بالای آن محیط اصلی PHP-FPM ، چند ماژول PHP اضافی و ابزار مدیریت وابستگی کامپوزر را نصب خواهیم کرد.
همچنین یک کاربر جدید برای سیستم ایجاد خواهیم کرد. این کار برای اجرای دستورات artisan  و composer  هنگام تهیه برنامه ضروری است. تنظیم uid تضمین می کند که کاربر درون کانتینر دارای همان کاربری است که کاربر سیستم شما در دستگاه میزبان شما دارد ، جایی که running Docker را اجرا میکنید. به این ترتیب ، هر فایل ایجاد شده توسط این دستورات با مجوزهای صحیح در هاست تکرار می شود. این نکته همچنین بدان معنی است که شما می توانید از ویرایشگر کد مورد نظر خود در دستگاه میزبان استفاده کنید تا برنامه ای را که درون کانتینرها اجرا می شود توسعه دهید.
یک Dockerfile جدید ایجاد کنید:
⦁ $ nano Dockerfile

مطالب زیر را در Dockerfile خود کپی کنید:
Dockerfile
FROM php:7.4-fpm

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY –from=composer:latest /usr/bin/composer /usr/bin/composer

# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user

# Set working directory
WORKDIR /var/www

USER $user

فراموش نکنید که فایل را پس از اتمام ذخیره کنید.
Dockerfile ما با تعریف تصویر پایه ای که ما استفاده می کنیم شروع می شود: php: 7.4-fpm.
پس از نصب بسته های سیستم و پسوندهای PHP ، ما با کپی کردن composer  قابل اجرا از آخرین تصویر رسمی آن روی تصویر برنامه کاربردی خود ، Composer را نصب می کنیم.
سپس کاربر جدید سیستم با استفاده از آرگومانهای user و uid که در ابتدای Dockerfile اعلام شد ، ایجاد و تنظیم می شود. این مقادیر توسط Docker Compose در زمان ساخت وارد می شوند.
در آخر ، dir پیش فرض کار را به عنوان / var / www تنظیم کرده و به کاربر تازه ایجاد شده تغییر می دهیم. این کار اطمینان حاصل می کند که شما به عنوان یک کاربر معمولی در ارتباط هستید ، و هنگام اجرای دستورات composer و artisan در کانتینر برنامه ، در فهرست صحیح قرار دارید.
مرحله چهارم – تنظیم فایلهای پیکربندی Nginx و رونوشت دیتابیس
هنگام ایجاد محیط های توسعه با Docker Compose ، اغلب لازم است فایل های پیکربندی یا شروع را با کانتینرهای سرویس به اشتراک بگذارید تا این سرویس ها را تنظیم یا به صورت خودکار راه اندازی کنید. این روش ایجاد تغییر در فایل های پیکربندی را برای تنظیم دقیق محیط خود در هنگام تهیه برنامه ، تسهیل می کند.
اکنون پوشه ای را با فایل هایی تنظیم خواهیم کرد که برای پیکربندی و شروع کانتینرهای سرویس ما استفاده می شود.
برای راه‌اندازی Nginx ، ما یک فایل travellist.conf را به اشتراک خواهیم گذاشت که نحوه ارائه برنامه را پیکربندی خواهد کرد. پوشه docker-compose / nginx را با دستور زیر ایجاد کنید:
فایل جدیدی به نام travellist.conf را در آن دیرکتوری باز کنید:
⦁ $ nano docker-compose/nginx/travellist.conf

پیکربندی Nginx زیر را در آن فایل کپی کنید:
docker-compose/nginx/travellist.conf

server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}

این فایل Nginx را برای گوش دادن به پورت 80 و استفاده از index.php به عنوان صفحه پیش فرض فهرست پیکربندی می کند. وroot مطالب را بر روی /var/www/public تنظیم می کند ، و سپس Nginx را برای استفاده از سرویس برنامه در پورت 9000 تنظیم می کند تا فایل های * .php را پردازش کند.
هنگام ویرایش ، فایل را ذخیره کنید و ببندید.
برای راه اندازی بانک اطلاعاتی MySQL ، ما یک پایگاه داده را به اشتراک می گذاریم که هنگام شروع کانتینر ، وارد می شود. این ویژگی ارائه شده توسط تصویر MySQL 5.7 است که ما از آن کانتینرها استفاده خواهیم کرد.
یک پوشه جدید برای فایل های شروع MySQL خود در داخل پوشه docker-compose ایجاد کنید:
⦁ $ mkdir docker-compose/mysql

یک فایل .sll جدید را باز کنید:
⦁ $ nano docker-compose/mysql/init_db.sql

رونوشت MySQL زیر بر اساس پایگاه داده ای است که ما در Laravel روی راهنمای LEMP خود تنظیم کرده ایم. این یک جدول جدید به نام places ایجاد می کند. سپس ، جدول را با مجموعه ای از مکان های نمونه جمع می کند.
کد زیر را به فایل اضافه کنید:
docker-compose/mysql/db_init.sql
DROP TABLE IF EXISTS `places`;

CREATE TABLE `places` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`visited` tinyint(1) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `places` (name, visited) VALUES (‘Berlin’,0),(‘Budapest’,0),(‘Cincinnati’,1),(‘Denver’,0),(‘He

جدول places  شامل سه فیلد است: id ، name و visited. قسمت visited ، فلگی است که برای شناسایی مکانهایی که هنوز to go هستند، استفاده می شود. در تغییر مکان های نمونه یا مکان های جدید آزادانه عمل کنید. پس از اتمام کار ، فایل را ذخیره کنید و ببندید.
ما تنظیمات Dockerfile برنامه و فایل های پیکربندی سرویس را به پایان رساندیم. در مرحله بعدی ، Docker Compose را تنظیم خواهیم کرد تا هنگام ایجاد خدمات ، از این فایل ها استفاده کنیم.
مرحله 5 – ایجاد یک محیط چند کانتینری با Docker Compose
Docker Compose به شما امکان می دهد محیطهای چند کانتینری را برای برنامه های در حال اجرا در Docker ایجاد کنید. با استفاده از تعاریف سرویس ، محیطهای کاملاً قابل تنظیم با چندین کانتینر را ایجاد می کند که می توانند شبکه ها و حجم داده ها را به اشتراک بگذارند. این امر امکان ادغام یکپارچه بین اجزای برنامه را فراهم می آورد.
برای تنظیم تعاریف خدمات ، ما یک فایل جدید با نام docker-compose.yml ایجاد خواهیم کرد. به طور معمول ، این فایل در ریشه پوشه برنامه قرار دارد و محیط کانتینر شده شما ، از جمله تصاویر پایه ای که برای ساخت کانتینرها خود استفاده خواهید کرد ، و نحوه تعامل سرویس های شما را تعریف می کند.
ما سه سرویس مختلف را در فایل docker-compose.yml خود تعریف خواهیم کرد: app ،db و nginx.
سرویس app براساس Dockerfile که قبلاً ایجاد کرده ایم ، تصویری به نام travellist ایجاد می کند. کانتینر تعریف شده توسط این سرویس ، سرور مجازی php-fpm را برای تجزیه کد PHP اجرا می کند و نتایج را به سرویس nginx ارسال می کند ، که روی یک کانتینر جداگانه اجرا می شود. سرویس mysql یک کانتینر تعریف می کند که سرور مجازی MySQL 5.7 را راه اندازی می کند. خدمات ما شبکه پلی با نام travellist را به اشتراک می گذارند.
فایل های برنامه هم در app و هم خدمات nginx از طریق bind mounts (نصب های اتصالی) همگام می شوند. bind mounts در محیط های توسعه مفید هستند زیرا امکان همگام سازی دو طرفه بین دستگاه میزبان و کانتینرها را فراهم می کنند.
یک فایل docker-compose.yml جدید در ریشه پوشه برنامه ایجاد کنید:
⦁ $ nano docker-compose.yml

یک فایل معمولی docker-compose.yml با تعریف نسخه شروع می شود و به دنبال آن یک گره خدمات قرار می گیرد که تحت آن همه خدمات تعریف می شوند. شبکه های اشتراکی معمولاً در پایین آن فایل تعریف می شوند.
برای شروع ، این کد boilerplate را در فایل docker-compose.yml خود کپی کنید:
docker-compose.yml
version: “3.7”
services:

networks:
travellist:
driver: bridge

اکنون گره خدمات را ویرایش خواهیم کرد تا خدمات app ، db و nginx را شامل شود.
سرویس app
سرویس app کانتینری به نام travellist-app را تنظیم میکند. این تصویر جدید Docker را بر اساس Dockerfile که در همان مسیر فایل docker-compose.yml قرار دارد ، می سازد. تصویر جدید به صورت محلی تحت عنوان travellist ذخیره می شود.
حتی اگر ریشه سند به عنوان برنامه در کانتینر nginx قرار داشته باشد ، ما به فایل های برنامه نیز در جایی داخل کانتینر برنامه نیاز داریم ، بنابراین می توانیم وظایف خط فرمان را با ابزار Laravel Artisan اجرا کنیم.
تعریف خدمات زیر را در زیر گره خدمات خود ، درون فایل docker-compose.yml کپی کنید:
docker-compose.yml
app:
build:
args:
user: sammy
uid: 1000
context: ./
dockerfile: Dockerfile
image: travellist
container_name: travellist-app
restart: unless-stopped
working_dir: /var/www/
volumes:
– ./:/var/www
networks:
– travellist

این تنظیمات موارد زیر را انجام می دهد:
⦁ Build: این پیکربندی به Docker Compose می گوید یک تصویر محلی برای سرویس برنامه ، با استفاده از مسیر مشخص شده (محتوا) و Dockerfile برای دستورالعمل ها بسازد. آرگومان های user و uid برای سفارشی سازی دستورات ایجاد کاربر در زمان ساخت به Dockerfile تزریق می شوند.
⦁ Image: نامی که برای تصویر ساخته شده استفاده خواهد شد.
⦁ container_name: نام کانتینر را برای این سرویس تنظیم می کند.
⦁ Restart: همیشه راه اندازی مجدد میکند ، مگر اینکه سرویس متوقف شود.
⦁ working_dir: دایرکتوری پیش فرض این سرویس را به عنوان / var / www تنظیم می کند.
⦁ Volumes: یک والیوم مشترک ایجاد می کند که محتویات موجود از دایرکتوری فعلی را به / var / www داخل کانتینر هماهنگ سازی می کند. توجه کنید که این، ریشه سند شما نیست ، زیرا در کانتینر nginx زندگی می کند.
⦁ networks: برای استفاده از شبکه ای به نام Travellist ، این سرویس را تنظیم کنید.
سرویس db
سرویس db از تصویر پیش ساخته MySQL 5.7 از Docker Hub استفاده می کند. از آنجا که Docker Compose به طور خودکار فایلهای متغیر .env را که در همان دیرکتوری فایل docker-compose.yml قرار دارد بارگیری می کند ، می توانیم تنظیمات پایگاه داده خود را از فایل Laravel .env که در مرحله قبلی ایجاد کردیم ، بدست آوریم.
تعریف خدمات زیر را درست بعد از سرویس app در گره خدمات خود وارد کنید:
docker-compose.yml
db:
image: mysql:5.7
container_name: travellist-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
– ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
– travellist

این تنظیمات موارد زیر را انجام می دهد:
⦁ Image:تصویر Docker را که باید برای این کانتینر استفاده شود ، تعریف می کند. در این حالت ، ما از تصویر MySQL 5.7 Docker Hub استفاده می کنیم.
⦁ container_name:نام کانتینر را برای این سرویس تنظیم می کند: travellist-db.
⦁ restart: همیشه این سرویس را مجدداً راه اندازی کنید ، مگر اینکه صریحاً متوقف شده باشد.
⦁ environment: متغیرهای محیط را در کانتینر جدید تعریف می کند. ما برای تنظیم سرویس MySQL از مقادیر به دست آمده از فایل Laravel .env استفاده می کنیم که به طور خودکار یک پایگاه داده جدید و کاربر را بر اساس متغیرهای محیط ارائه شده ایجاد می کند.
⦁ Volumes:یک حجم برای به اشتراک گذاشتن یک پایگاه داده dsql ایجاد می کند که برای شروع بانک اطلاعاتی برنامه کاربردی خواهد بود. تصویر MySQL به طور خودکار فایل های .ql قرار داده شده در فهرست /docker-entrypoint-initdb.d را درون کانتینر وارد می کند.
⦁ networks: برای استفاده از شبکه ای به نام Travellist ، این سرویس را تنظیم کنید.
سرویس nginx
سرویس nginx از یک تصویر پیش ساخته Nginx در بالای Alpine ، توزیع لینوکس سبک استفاده می کند. کانتینری به نام travellist-nginx ایجاد می کند و از تعریف پورت ها برای ایجاد تغییر مسیر از پورت 8000 روی سیستم میزبان برای پورت 80 درون کانتینر استفاده می کند.
تعریف خدمات زیر را در گره خدمات خود ، درست بعد از سرویس db وارد کنید:
این تنظیمات موارد زیر را انجام می دهد:
docker-compose.yml
nginx:
image: nginx:1.17-alpine
container_name: travellist-nginx
restart: unless-stopped
ports:
– 8000:80
volumes:
– ./:/var/www
– ./docker-compose/nginx:/etc/nginx/conf.d
networks:
– travellist

⦁ Image: تصویر Docker را که باید برای این کانتینر استفاده شود ، تعریف می کند. در این حالت ، ما از تصویر Alpine Nginx 1.17 استفاده می کنیم.
⦁ container_name: نام کانتینر را برای این سرویس تنظیم می کند: travellist-nginx
⦁ restart: همیشه این سرویس را مجدداً راه اندازی کنید ، مگر اینکه صریحاً متوقف شده باشد.
⦁ ports: تغییر مسیر پورت را تنظیم می کند که امکان دسترسی خارجی از طریق پورت 8000 به سرور مجازی وب را که درگاه 80 در داخل کانتینر کار می کند ، فراهم می کند.
⦁ volumes: دو والیوم مشترک ایجاد می کند. اولی همگام سازی محتوا از فهرست فعلی با / var / www داخل کانتینر را انجام میدهد. به این ترتیب ، وقتی تغییرات محلی را در فایل های برنامه اعمال می کنید ، به سرعت در برنامه ارائه شده توسط Nginx در داخل کانتینر منعکس می شوند. دومی اطمینان حاصل خواهد کرد که فایل پیکربندی Nginx ، واقع در docker-compose / nginx / travellist.conf ، در پوشه تنظیمات Nginx کانتینر کپی شده است.
⦁ networks: برای استفاده از شبکه ای به نام Travellist ، این سرویس را تنظیم کنید.
فایل docker-compose.yml تکمیل شده
فایل docker-compose.yml به پایان رسیده این گونه خواهد بود:
docker-compose.yml
version: “3.7”
services:
app:
build:
args:
user: sammy
uid: 1000
context: ./
dockerfile: Dockerfile
image: travellist
container_name: travellist-app
restart: unless-stopped
working_dir: /var/www/
volumes:
– ./:/var/www
networks:
– travellist

db:
image: mysql:5.7
container_name: travellist-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
– ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
– travellist

nginx:
image: nginx:alpine
container_name: travellist-nginx
restart: unless-stopped
ports:
– 8000:80
volumes:
– ./:/var/www
– ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
– travellist

networks:
travellist:
driver: bridge

اطمینان حاصل کنید که فایل را هنگام انجام کار ذخیره کنید.
مرحله 6 – اجرای برنامه با Docker Compose
اکنون برای ایجاد تصویر برنامه و اجرای سرویس هایی که در مجموعه خود مشخص کرده ایم ، از دستورات docker-compose استفاده خواهیم کرد.
تصویر app را با دستور زیر بسازید:
⦁ $ docker-compose build app

این دستور ممکن است چند دقیقه طول بکشد. خروجی مشابه این را مشاهده خواهید کرد:
Output
Building app
Step 1/11 : FROM php:7.4-fpm
—> fa37bd6db22a
Step 2/11 : ARG user
—> Running in f71eb33b7459
Removing intermediate container f71eb33b7459
—> 533c30216f34
Step 3/11 : ARG uid
—> Running in 60d2d2a84cda
Removing intermediate container 60d2d2a84cda
—> 497fbf904605
Step 4/11 : RUN apt-get update && apt-get install -y git curl libpng-dev libonig-dev …
Step 7/11 : COPY –from=composer:latest /usr/bin/composer /usr/bin/composer
—> e499f74896e3
Step 8/11 : RUN useradd -G www-data,root -u $uid -d /home/$user $user
—> Running in 232ef9c7dbd1
Removing intermediate container 232ef9c7dbd1
—> 870fa3220ffa
Step 9/11 : RUN mkdir -p /home/$user/.composer && chown -R $user:$user /home/$user
—> Running in 7ca8c0cb7f09
Removing intermediate container 7ca8c0cb7f09
—> 3d2ef9519a8e
Step 10/11 : WORKDIR /var/www
—> Running in 4a964f91edfa
Removing intermediate container 4a964f91edfa
—> 00ada639da21
Step 11/11 : USER $user
—> Running in 9f8e874fede9
Removing intermediate container 9f8e874fede9
—> fe176ff4702b

Successfully built fe176ff4702b
Successfully tagged travellist:latest

پس از اتمام ساخت ، می توانید محیط را در حالت پس زمینه اجرا کنید:
⦁ $ docker-compose up -d
⦁ Output
⦁ Creating travellist-db … done
⦁ Creating travellist-app … done
⦁ Creating travellist-nginx … done

این کار کانتینرهای شما را در پس زمینه اجرا می کند. برای نشان دادن اطلاعات در مورد وضعیت خدمات فعال خود ، این دستور را اجرا کنید:
⦁ $ docker-compose ps
خروجی مانند این را خواهید دید:
Output
Name Command State Ports
——————————————————————————-
travellist-app docker-php-entrypoint php-fpm Up 9000/tcp
travellist-db docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
travellist-nginx nginx -g daemon off; Up 0.0.0.0:8000->80/tcp

اکنون محیط شما در حال اجرا است ، اما ما هنوز باید دستورات زوجی را اجرا کنیم تا تنظیم برنامه به پایان برسد. برای اجرای دستورات موجود در کانتینرها سرویس مانند ls-l می توانید از دستور docker-compose برای نمایش اطلاعات در مورد فایل ها در دیرکتوری برنامه استفاده کنید:
⦁ $ docker-compose exec app ls -l
⦁ Output
⦁ total 256
⦁ -rw-rw-r– 1 sammy 1001 738 Jan 15 16:46 Dockerfile
⦁ -rw-rw-r– 1 sammy 1001 101 Jan 7 08:05 README.md
⦁ drwxrwxr-x 6 sammy 1001 4096 Jan 7 08:05 app
⦁ -rwxr-xr-x 1 sammy 1001 1686 Jan 7 08:05 artisan
⦁ drwxrwxr-x 3 sammy 1001 4096 Jan 7 08:05 bootstrap
⦁ -rw-rw-r– 1 sammy 1001 1501 Jan 7 08:05 composer.json
⦁ -rw-rw-r– 1 sammy 1001 179071 Jan 7 08:05 composer.lock
⦁ drwxrwxr-x 2 sammy 1001 4096 Jan 7 08:05 config
⦁ drwxrwxr-x 5 sammy 1001 4096 Jan 7 08:05 database
⦁ drwxrwxr-x 4 sammy 1001 4096 Jan 15 16:46 docker-compose
⦁ -rw-rw-r– 1 sammy 1001 1015 Jan 15 16:45 docker-compose.yml
⦁ -rw-rw-r– 1 sammy 1001 1013 Jan 7 08:05 package.json
⦁ -rw-rw-r– 1 sammy 1001 1405 Jan 7 08:05 phpunit.xml
⦁ drwxrwxr-x 2 sammy 1001 4096 Jan 7 08:05 public
⦁ -rw-rw-r– 1 sammy 1001 273 Jan 7 08:05 readme.md
⦁ drwxrwxr-x 6 sammy 1001 4096 Jan 7 08:05 resources
⦁ drwxrwxr-x 2 sammy 1001 4096 Jan 7 08:05 routes
⦁ -rw-rw-r– 1 sammy 1001 563 Jan 7 08:05 server.php
⦁ drwxrwxr-x 5 sammy 1001 4096 Jan 7 08:05 storage
⦁ drwxrwxr-x 4 sammy 1001 4096 Jan 7 08:05 tests
⦁ -rw-rw-r– 1 sammy 1001 538 Jan 7 08:05 webpack.mix.js

اکنون composer install را برای نصب متعلقات برنامه اجرا میکنیم:
⦁ $ docker-compose exec app composer install

خروجی مانند این را خواهید دید:
Output
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 85 installs, 0 updates, 0 removals
– Installing doctrine/inflector (1.3.1): Downloading (100%)
– Installing doctrine/lexer (1.2.0): Downloading (100%)
– Installing dragonmantank/cron-expression (v2.3.0): Downloading (100%)
– Installing erusev/parsedown (1.7.4): Downloading (100%)
– Installing symfony/polyfill-ctype (v1.13.1): Downloading (100%)
– Installing phpoption/phpoption (1.7.2): Downloading (100%)
– Installing vlucas/phpdotenv (v3.6.0): Downloading (100%)
– Installing symfony/css-selector (v5.0.2): Downloading (100%)

Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover –ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.

آخرین کاری که قبل از تست برنامه باید انجام دهیم تولید یک کلید برنامه منحصر به فرد با ابزار خط فرمان artisan Laravel است. این کلید برای رمزگذاری بخش های کاربر و سایر داده های حساس استفاده می شود:
⦁ $ docker-compose exec app php artisan key:generate

Output
Application key set successfully.

اکنون به مرورگر خود بروید و به نام دامنه یا آدرس IP سرور مجازی خود در پورت 8000 دسترسی پیدا کنید:
http://server_domain_or_IP:8000

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

می توانید از دستور logs برای بررسی گزارش های ایجاد شده توسط سرویس های خود استفاده کنید:
⦁ $ docker-compose logs nginx

Attaching to travellist-nginx
travellist-nginx | 192.168.160.1 – – [23/Jan/2020:13:57:25 +0000] “GET / HTTP/1.1” 200 626 “-” “Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36”
travellist-nginx | 192.168.160.1 – – [23/Jan/2020:13:57:26 +0000] “GET /favicon.ico HTTP/1.1” 200 0 “http://localhost:8000/” “Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36”
travellist-nginx | 192.168.160.1 – – [23/Jan/2020:13:57:42 +0000] “GET / HTTP/1.1” 200 626 “-” “Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36”

اگر می خواهید در هنگام حفظ وضعیت کلیه خدمات آن ، محیط Docker Compose را متوقف کنید ، این دستور را اجرا کنید:
⦁ $ docker-compose pause
Output
Pausing travellist-db … done
Pausing travellist-nginx … done
Pausing travellist-app … done
برای ادامه دوباره برنامه:
⦁ $ docker-compose unpause
Output
Unpausing travellist-app … done
Unpausing travellist-nginx … done
Unpausing travellist-db … done

برای خاموش کردن محیط Docker Compose و حذف همه کانتینرها ، شبکه ها و والیوم های آن ، این دستور را اجرا کنید:
⦁ $ docker-compose down
Output
Stopping travellist-nginx … done
Stopping travellist-db … done
Stopping travellist-app … done
Removing travellist-nginx … done
Removing travellist-db … done
Removing travellist-app … done
Removing network travellist-laravel-demo_travellist

برای مشاهده کلیه دستورات Docker Compose ، لطفاً مرجع خط فرمان Docker Compose را بررسی کنید.
نتیجه
در این راهنما ، ما یک محیط Docker با سه کانتینر را با استفاده از Docker Compose تنظیم کرده ایم تا زیرساخت های خود را در یک فایل YAML تعریف کنیم.
از این مرحله به بعد ، می توانید بدون نیاز به نصب و راه اندازی یک سرور مجازی وب محلی برای توسعه و آزمایش بر روی برنامه Laravel خود کار کنید. علاوه بر این ، شما با یک محیط یکبار مصرف که می تواند به راحتی تکثیر و توزیع شود ، کار می کنید ، که می تواند در هنگام تهیه برنامه شما و همچنین هنگام حرکت به سمت یک محیط تولید ، کمک کننده باشد.

 

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

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

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

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

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

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

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

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

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

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

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

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

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

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18  –

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

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10 –

نحوه نصب Docker Compose در Debian 10  –

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 –

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7  –

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18 –

 

 

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

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه
با حرکت ابزارهای گسترش دهنده به سمت cloud ، پذیرش پلتفرم cloud IDE (محیط پیشرفت در هم تنیده) در حال رشد است. Cloud IDE از هر نوع دستگاه مدرن از طریق مرورگرهای وب قابل دسترسی است و برای سناریوهای همکاری در زمان واقعی مزایای بسیاری را ارائه می دهند. کار در یک Cloud IDE ، یک محیط توسعه و آزمایش یکپارچه را برای شما و تیم شما ایجاد می کند ، در عین حال ناسازگاری های پلتفرم را به حداقل می رساند. چون از طریق مرورگرهای وب قابل دسترسی است ، Cloud IDE ها از هر نوع دستگاه مدرن در دسترس هستند.
Eclipse Theia یک Cloud IDE قابل توسعه است که بر روی یک سرور مجازی از راه دور اجرا میشود و از یک مرورگر وب قابل دسترسی است. از لحاظ بصری ، به گونه ای طراحی شده است که به طور مشابه با Microsoft Visual Studio Code دیده شود و کار شود ، به این معنی که از بسیاری از زبان های برنامه نویسی پشتیبانی می کند ، دارای یک طرح انعطاف پذیر و یک ترمینال یکپارچه است. آنچه Eclipse Theia را از دیگر نرم افزارهای cloud IDE جدا می کند قابلیت توسعه آن است. می توان آن را با استفاده از افزونه های سفارشی اصلاح کرد ، که به شما امکان می دهد یک Cloud IDE متناسب با نیازهای خود تهیه کنید.
در این آموزش ،Eclipse Theia را با استفاده از Docker Compose ، یک ابزار سازمان دهی حرفه ای، در سرور مجازی CentOS 7 خود به کار خواهید گرفت. با استفاده از nginx-proxy ، یک سیستم خودکار برای Docker ، آن را در دامنه خود قرار می دهید که فرایند پیکربندی Nginx را ساده تر می کند تا به عنوان یک پروکسی معکوس برای یک container سرویس دهد. همچنین با استفاده از یک گواهی نامه Let’s Encrypt TLS رایگان ، که با استفاده از افزونه تخصصی آن تهیه می کنید ، آن را ایمن خواهید کرد. در پایان ، شما باید Eclipse Theia را روی سرور مجازی CentOS 7 خود از طریق HTTPS در دسترس داشته باشید و از کاربر بخواهید وارد شود.
پیش نیازها
⦁ یک سرور مجازی CentOS 7 با امتیازات اصلی و یک حساب ثانویه و غیر ریشه. می توانید با دنبال کردن راهنمای تنظیم اولیه سرور مجازی ما برای CentOS 7 ، این تنظیمات را انجام دهید. برای این آموزش کاربر غیر ریشه sammy است.
⦁ Docker نصب شده روی سرور مجازی شما. مرحله 1 و مرحله 2 نحوه نصب Docker را در CentOS 7 دنبال کنید. برای آشنایی با Docker ، به اکوسیستم Docker: مقدمه ای بر مؤلفه های مشترک مراجعه کنید.
⦁ Docker compose نصب شده روی سرور مجازی تان. مرحله 1 نحوه نصب Docker Compose را در CentOS 7 دنبال کنید.
⦁ نام دامنه کاملاً ثبت شده. در این آموزش کلا از theia.your_domain استفاده می شود. می توانید نام دامنه را در Namecheap خریداری کنید ، یکی از آنها را به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.
⦁ یک ثبت A DNS با theia.your_domain که به آدرس IP عمومی سرور مجازی شما اشاره میکند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این معرفی را در vpsgol DNS دنبال کنید.
مرحله 1 – استفاده از پروکسی nginx با Let’s Encrypt
در این بخش nginx-proxy و افزونه Let’s Encrypt را با استفاده از Docker Compose به کار میگیرید. این امر امکان تهیه و نوسازی مجوز خودکار TLS را فراهم می کند ، به طوری که هنگام استقرار Eclipse Theia از طریق HTTPS در دامنه شما قابل دسترسی خواهد بود.
برای اهداف این آموزش ، تمام فایل ها را تحت ~ / eclipse-theia ذخیره می کنید. با اجرای دستور زیر دایرکتوری ایجاد کنید:
⦁ $ mkdir ~/eclipse-theia
به آن مراجعه کنید:
⦁ $ cd ~/eclipse-theia
پیکربندی Docker Compose را برای nginx-proxy در فایلی به نام nginx-proxy-compose.yaml ذخیره خواهید کرد. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:
⦁ $vi nginx-proxy-compose.yaml
خطوط زیر را اضافه کنید:
~/eclipse-theia/nginx-proxy-compose.yaml
version: ‘2’

services:
nginx-proxy:
restart: always
image: jwilder/nginx-proxy
ports:
– “80:80”
– “443:443”
volumes:
– “/etc/nginx/htpasswd:/etc/nginx/htpasswd”
– “/etc/nginx/vhost.d”
– “/usr/share/nginx/html”
– “/var/run/docker.sock:/tmp/docker.sock:ro”
– “/etc/nginx/certs”

letsencrypt-nginx-proxy-companion:
restart: always
image: jrcs/letsencrypt-nginx-proxy-companion
volumes:
– “/var/run/docker.sock:/var/run/docker.sock:ro”
volumes_from:
– “nginx-proxy”

در اینجا شما دو سرویس را تعریف می کنید که Docker Compose اجرا خواهد کرد ، nginx-proxy و همراه آن Let’s Encrypt. برای پروکسی ، شما jwilder / nginx-proxy را به عنوان تصویر مشخص میکنید، پورت های HTTP و HTTPS را نقشه برداری می کنید ، و والیوم هایی را تعریف می کنید که در زمان اجرا در دسترس شما خواهد بود.
والیوم ها دایرکتوری هایی در سرور مجازی شما هستند که سرویس تعریف شده به آنها دسترسی کامل خواهد داشت ، که بعداً برای تنظیم تأیید اعتبار کاربر از آنها استفاده خواهید کرد. برای دستیابی به این هدف ، از والیوم اول لیست استفاده می کنید ، که دایرکتوری محلی / etc / nginx / htpasswd را به همان قسمت موجود در داخل آن نگاشت می کشد. در آن پوشه ، nginx-proxy انتظار دارد فایلی را به نام دامنه هدف پیدا کند ، که حاوی اطلاعات ورود به سیستم برای احراز هویت کاربر در قالب htpasswd (username:hashed_password) است.
برای افزودن ، شما تصویر Docker را نامگذاری می کنید و با تعیین یک والیوم امکان دسترسی به سوکت Docker را می دهید. سپس ، شما مشخص می کنید که این افزونه باید دسترسی به والیومهای تعریف شده برای nginx-proxy را ادامه دهد. هر دو سرویس امکان تنظیم restart روی always را دارند که به Docker دستور می دهد کانتینر را در صورت خرابی یا ریبوت سیستم، مجدداً راه اندازی کند.
فایل را ذخیره کنید و ببندید.
پیکربندی را با اجرای دستور انجام دهید:
⦁ $ docker-compose -f nginx-proxy-compose.yaml up -d
در اینجا نام فایل nginx-proxy-compose.yaml را در پارامتر -f دستور docker-compose می گذارید ، که فایل را برای اجرا مشخص می کند. سپس ، شما فعل UP را می گذرانید که به آن دستور می دهد کانتینرها را اجرا کند. فلگ -d حالت جداشده را فعال می سازد ، به این معنی که Docker Compose کانتینرها را در پس زمینه اجرا می کند.
خروجی نهایی به شرح زیر خواهد بود:
Output
Creating network “eclipse-theia_default” with the default driver
Pulling nginx-proxy (jwilder/nginx-proxy:)…
latest: Pulling from jwilder/nginx-proxy
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete

Digest: sha256:dfc0666b9747a6fc851f5fb9b03e65e957b34c95d9635b4b5d1d6b01104bde28
Status: Downloaded newer image for jwilder/nginx-proxy:latest
Pulling letsencrypt-nginx-proxy-companion (jrcs/letsencrypt-nginx-proxy-companion:)…
latest: Pulling from jrcs/letsencrypt-nginx-proxy-companion
89d9c30c1d48: Pull complete
668840c175f8: Pull complete

Digest: sha256:a8d369d84079a923fdec8ce2f85827917a15022b0dae9be73e6a0db03be95b5a
Status: Downloaded newer image for jrcs/letsencrypt-nginx-proxy-companion:latest
Creating eclipse-theia_nginx-proxy_1 … done
Creating eclipse-theia_letsencrypt-nginx-proxy-companion_1 … done

شما nginx-proxy و همراهش Let’s Encrypt را با استفاده از Docker Compose به کار گرفته اید. اکنون می توانید Eclipse Theia را در دامنه خود تنظیم کرده و آن را ایمن کنید.
مرحله 2 – به کارگیری Eclipse Theia دوکر شده
در این بخش ، فایلی را ایجاد خواهید کرد که شامل هر ترکیب ورود به سیستم مجاز میباشد که کاربر باید آن را وارد کند. سپس Eclipse Theia را با استفاده از Docker Compose به سرور مجازی خود منتقل می کنید و با استفاده از nginx-proxy آن را در دامنه امن خود قرار می دهید.
همانطور که در مرحله قبل توضیح داده شد ، nginx-proxy انتظار دارد که ترکیب های ورود به سیستم در فایلی به نام دامنه در معرض ، با فرمت htpasswd قرار بگیرند و در دایرکتوری / etc / nginx / htpasswd در کانتینر ذخیره شوند. همانطور که در پیکربندی nginx-proxy مشخص کرده ایم ، دایرکتوری محلی که به دایرکتوری مجازی نگاشت می کند ، نیازی به یکسان بودن ندارد.
برای ایجاد ترکیبات ورود ، ابتدا با اجرای دستور زیر باید htpasswd را نصب کنید:
⦁ $ sudo apt install apache2-utils
پکیج httpd-tools حاوی برنامه htpasswd است.
دایرکتوری / etc / nginx / htpasswd را ایجاد کنید:
⦁ $ sudo mkdir -p /etc/nginx/htpasswd
فایلی ایجاد کنید که ورود به سیستم را برای دامنه شما ذخیره کند:
⦁ $ sudo touch /etc/nginx/htpasswd/theia.your_domain

به یاد داشته باشید theia.your_domain را با دامنه Eclipse Theia خود جایگزین کنید.
برای افزودن نام کاربری و رمز ورود ، دستور زیر را اجرا کنید:
⦁ $ sudo htpasswd /etc/nginx/htpasswd/theia.your_domain username
USERNAME را با نام کاربری که می خواهید اضافه کنید جایگزین کنید. از شما دوبار رمز عبور خواسته می شود. پس از ارائه آن ، htpasswd نام کاربری و جفت رمز عبور را در انتهای فایل اضافه می کند. می توانید این دستور را به هر تعداد ورود به سیستم که میخواهید تکرار کنید.
اکنون ، پیکربندی را برای استقرار Eclipse Theia ایجاد خواهید کرد. شما آن را در فایلی به نام eclipse-theia-compose.yaml ذخیره خواهید کرد. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:
⦁ $ vi eclipse-theia-compose.yaml
خطوط زیر را اضافه کنید:
~/eclipse-theia/eclipse-theia-compose.yaml
version: ‘2.2’

services:
eclipse-theia:
restart: always
image: theiaide/theia:next
init: true
environment:
– VIRTUAL_HOST=theia.your-domain
– LETSENCRYPT_HOST=theia.your-domain

در این پیکربندی ، شما یک سرویس واحد به نام eclipse-theia با ریستارت برای ALWAYS و theiaide/theia:next به عنوان تصویر کانتینر تعریف می کنید: شما همچنین می توانید init را روی true تنظیم کنید تا به Docker دستور دهید هنگام اجرای Eclipse Theia در داخل کانتینر ، از init به عنوان مدیر اصلی فرآیند استفاده کند.
سپس دو متغیر محیط را در بخش environment مشخص می کنید: VIRTUAL_HOST و LETSENCRYPT_HOST. اولین مورد به پروکسی nginx منتقل می شود و به آن می گوید کانتینر چه دامنه ای را باید در معرض دید قرار دهید ، در حالی که دومی توسط افزونه Let’s Encrypt آن استفاده می شود و مشخص می کند که برای کدام دامنه درخواست گواهینامه TLS شود. مگر اینکه یک wildcard را به عنوان مقدار VIRTUAL_HOST تعیین کنید ، این دو مقدار باید یکسان باشند.
به یاد داشته باشید theia.your_domain را با دامنه مورد نظر خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید. اکنون با اجرای دستور زیر Eclipse Theia را اجرا کنید:
⦁ $ docker-compose -f eclipse-theia-compose.yaml up -d
خروجی نهایی مشابه زیر به نظر می رسد:
Output

Pulling eclipse-theia (theiaide/theia:next)…
next: Pulling from theiaide/theia
63bc94deeb28: Pull complete
100db3e2539d: Pull complete

Digest: sha256:c36dff04e250f1ac52d13f6d6e15ab3e9b8cad9ad68aba0208312e0788ecb109
Status: Downloaded newer image for theiaide/theia:next
Creating eclipse-theia_eclipse-theia_1 … done

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

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

مرحله 3 – استفاده از رابط Eclipse Theia
در این بخش به بررسی برخی از ویژگی های رابط Eclipse Theia می پردازید.
در سمت چپ IDE ، یک ردیف عمودی از چهار دکمه وجود دارد که متداول ترین ویژگی های مورد استفاده را در یک صفحه جانبی باز می کند.
این نوار قابل تنظیم است بنابراین می توانید این نماها این نوار قابل سفارشی سازی است، بنابراین این نمایه ها را به ترتیب دیگری جابجا کنید یا آنها را از نوار حذف کنید. به طور پیش فرض ، اولین نمای پانل Explorer را باز می کند که ناوبری شبیه به درخت ساختار پروژه را فراهم می کند. می توانید پوشه ها و فایل های خود را در اینجا مدیریت کنید – ایجاد کنید ، حذف کنید، جابجا کنید و در صورت لزوم تغییر نام دهید.
بعد از ایجاد فایل جدید از طریق منوی File ، یک فایل خالی را در یک برگه جدید باز خواهید کرد. پس از ذخیره ، می توانید نام فایل را در صفحه جانبی Explorer مشاهده کنید. برای ایجاد پوشه ها بر روی نوار کناری Explorer کلیک راست کرده و روی New Folder کلیک کنید. می توانید پوشه ای را با کلیک روی نام آن و همچنین کشیدن و رها کردن فایل ها و پوشه ها به قسمتهای بالای لیست گسترش دهید تا آنها را به یک مکان جدید منتقل کنید.

دو گزینه بعدی دسترسی به جستجو و جایگزینی قابلیت ها را فراهم می کند. پس از آن ، مورد بعدی نمایی از سیستم های کنترل منبع را که ممکن است از آنها استفاده کنید ، مانند Git ، ارائه می دهد.
نمای نهایی گزینه اشکال زدایی است که کلیه اقدامات متداول را برای اشکال زدایی در پنل ارائه می دهد. می توانید پیکربندی های اشکال زدایی را در فایل launch.json ذخیره کنید.

قسمت اصلی GUI ویرایشگر شماست که می توانید با استفاده از زبانه ها برای ویرایش کد خود جدا کنید. می توانید نمای ویرایش خود را به یک سیستم شبکه یا به فایل های جانبی تغییر دهید. مانند همه IDE های مدرن ، Eclipse Theia از هایلایت دستوری برای کد شما پشتیبانی می کند.

می توانید با وارد کردن CTRL + SHIFT + `، یا با کلیک کردن بر روی Terminal در منوی بالا ، و انتخاب گزینه New Terminal ، به ترمینال دسترسی پیدا کنید. ترمینال در یک پانل پایین باز خواهد شد و دایرکتوری کار آن روی فضای کاری پروژه تنظیم می شود ، که شامل فایل ها و پوشه های نمایش داده شده در پانل سمت Explorer است.

شما یک نمای کلی در سطح بالا از رابط Eclipse Theia جستجو کرده اید و برخی از متداول ترین ویژگی ها را مرور کرده اید.

نتیجه
اکنون Eclipse Theia ، یک Cloud IDE همه کاره ، با استفاده از Docker Compose و nginx-proxy بر روی سرور مجازی CentOS 7 خود نصب کرده اید. شما آن را با یک مجوز Let’s Encrypt TLS رایگان ایمن کرده اید و نمونه ای را تنظیم کرده اید تا به اعتبار ورود به سیستم از طرف کاربر نیاز داشته باشید. شما می توانید بر روی کد منبع خود و اسناد با آن به صورت جداگانه کار کنید یا با تیم خود همکاری کنید. در صورت نیاز به قابلیت های اضافی ، می توانید نسخه دیگری از Eclipse Theia خود را نیز ایجاد کنید. برای کسب اطلاعات بیشتر در مورد چگونگی انجام این کار ، به مطالب Theia مراجعه کنید.

 

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

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

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

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

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

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

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

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

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

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

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

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

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

استفاده از Cron برای خودکارسازی کارها در اوبونتو 18  –

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

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10 –

نحوه نصب Docker Compose در Debian 10  –

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

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 –

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7  –

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18 –

 

 

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

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

 

برچسب‌ها:

  • behnam gol mohamadi