Tumgik
vpsgoll · 4 years
Text
نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در Ubuntu 18.04
Docker  می تواند روشی کارآمد برای اجرای برنامه های وب در حال تولید باشد ، اما ممکن است بخواهید چندین برنامه را در یک هاست  Docker اجرا کنید. در این شرایط ، باید پروکسی معکوس تنظیم کنید زیرا فقط می خواهید پورت 80 و 443 را در معرض دید قرار دهید.
Traefik  یک پروکسی معکوس آگاه از Docker است که شامل داشبورد نظارت خود میباشد. در این آموزش ، از Traefik برای مسیر یابی درخواست ها به دو کانتینر مختلف برنامه وب استفاده می کنید: یک کانتینر وردپرس و یک کانتینر Adminer که هر کدام با یک پایگاه داده MySQL در ارتباط هستند. با استفاده از Let’s Encrypt ، Traefik را پیکربندی می کنید تا همه چیز را از طریق HTTPS  ارائه دهد.
پیش نیازها
برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:
یک سرور مجازی Ubuntu 18.04 با پیروی از راهنمای ستاپ اولیه سرور مجازی Ubuntu 18.04 ، از جمله کاربر غیر ریشه sudo و فایروال ، راه اندازی شده.
Docker روی سرور مجازی شما نصب شده باشد ، که می توانید با دنبال کردن نحوه نصب و استفاده از Docker در Ubuntu 18.04 این کار را انجام دهید.
Docker Compose با دستورالعمل نحوه نصب Docker Compose در Ubuntu 18.04 نصب شده باشد.
یک دامنه و سه رکورد A ، db-admin ، blog و monitor. هر کدام باید به آدرس IP سرور مجازی شما اشاره کنند. در طول این آموزش ، دامنه خود را به جای your_domain در فایلهای پیکربندی و مثالها جایگزین کنید.
مرحله 1 – پیکربندی و اجرای  Traefik
پروژه Traefik دارای یک تصویر Docker رسمی است ، بنابراین ما برای اجرای Traefik در یک کانتینر Docker از آن استفاده خواهیم کرد.
اما قبل از راه اندازی کانتینر Traefik ، باید یک فایل پیکربندی ایجاد کرده و یک پسورد رمزگذاری شده تنظیم کنیم تا بتوانیم به داشبورد نظارت دسترسی پیدا کنیم.
برای ایجاد این گذرواژه رمزگذاری شده از ابزار htpasswd استفاده خواهیم کرد. ابتدا برنامه کمکی را نصب کنید که در بسته apache2-utils  وجود دارد:
·         $ sudo apt-get install apache2-utils·
سپس رمز عبور را با htpasswd تولید کنید. secure_password را با رمز عبوری که می خواهید برای کاربر مدیر Traefik استفاده کنید جایگزین کنید:
·         $ htpasswd -nb admin secure_password·
خروجی برنامه به صورت زیر خواهد بود:
Output
admin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/
برای تنظیم احراز هویت پایه HTTP برای داشبورد بررسی و نظارت بر سلامت Traefik ، از خروجی منحصر به فرد خود در فایل پیکربندی Traefik استفاده خواهید کرد. تمام خط خروجی خود را کپی کنید تا بعداً بتوانید آن را جایگذاری کنید. از خروجی مثال استفاده نکنید.
برای پیکربندی سرور مجازی Traefik ، با استفاده از قالب TOML ، یک فایل پیکربندی جدید به نام traefik.toml ایجاد خواهیم کرد. TOML یک زبان پیکربندی شبیه به فایل های INI اما استاندارد است. این فایل به ما اجازه می دهد تا سرور مجازی Traefik و ادغام های مختلف یا providers را که می خواهیم استفاده کنیم پیکربندی کنیم. در این آموزش ، ما از سه ارائه دهنده موجود Traefik استفاده خواهیم کرد: api ، docker  و acme. آخرین مورد ، acme  با استفاده از Let’s Encrypt از گواهینامه های TLS پشتیبانی می کند.
فایل جدید خود را در nano یا ویرایشگر متن مورد علاقه خود باز کنید:
·         $ nano traefik.toml·
ابتدا دو نقطه ورودی به نام http و https اضافه کنید که به طور پیش فرض همه backends به آنها دسترسی خواهند داشت:
traefik.toml
defaultEntryPoints = [“http”, “https”]
بعداً در این فایل نقاط ورودی http و https را پیکربندی خواهیم کرد.
در مرحله بعد ، ارائه دهنده api را پیکربندی کنید ، که به شما امکان دسترسی به رابط داشبورد را می دهد. اینجاست که می توانید خروجی را از دستور htpasswd پیست کنید:
traefik.toml
[entryPoints]
[entryPoints.dashboard]
address = “:8080”
[entryPoints.dashboard.auth]
[entryPoints.dashboard.auth.basic]
users = [“admin:your_encrypted_password”]
[api]
entrypoint=”dashboard”
داشبورد یک برنامه وب جداگانه است که در کانتینر Traefik اجرا می شود. ما داشبورد را تنظیم می کنیم تا روی پورت 8080 کار کند.
بخش entrypoints.dashboard نحوه ارتباط ما با ارائه دهنده api را تنظیم می کند و بخش entrypoints.dashboard.auth.basic  تأیید اعتبار اصلی HTTP را برای داشبورد پیکربندی می کند. برای مقدار ورودی کاربران از خروجی دستور htpasswd استفاده کنید. می توانید ورودهای اضافی را با جدا کردن آنها با ویرگول مشخص کنید.
ما اولین ورودی خود را تعریف کرده ایم ، اما باید سایر موارد را برای ارتباطات استاندارد HTTP و HTTPS که به سمت ارائه دهنده api  نیست ، تعریف کنیم. بخش entryPoints آدرس هایی را که Traefik و کانتینرهای پروکسی می توانند به آن گوش دهند پیکربندی می کند. این خطوط را به فایل زیر عنوان entryPoints اضافه کنید:
traefik.toml
[entryPoints.http]
address = “:80”
[entryPoints.http.redirect]
entryPoint = “https”
[entryPoints.https]
address = “:443”
[entryPoints.https.tls]
نقطه ورود http پورت 80 را کنترل می کند ، در حالی که نقطه ورود https از پورت 443 برای TLS / SSL استفاده می کند. ما به طور خودکار تمام ترافیک موجود در پورت 80 را به نقطه ورود https هدایت می کنیم تا اتصالات ایمن را برای همه درخواست ها تضمین کنیم.
در مرحله بعد ، این بخش را برای پیکربندی Let’s Encrypt پشتیبانی از گواهی Traefik اضافه کنید:
traefik.toml
[acme]
email = “your_email@your_domain”
storage = “acme.json”
entryPoint = “https”
onHostRule = true
[acme.httpChallenge]
entryPoint = “http”
این بخش acme نامیده می شود زیرا ACME نام پروتكلی است كه برای ارتباط با Let’s Encrypt برای مدیریت گواهینامه ها استفاده می شود. سرویس Let’s Encrypt نیاز به ثبت نام با یک آدرس ایمیل معتبر دارد ، بنابراین برای اینکه Traefik برای هاست های ما گواهی تولید کند ، کلید ایمیل را روی آدرس ایمیل خود تنظیم کنید. سپس مشخص می کنیم که اطلاعاتی که از Let’s Encrypt  دریافت خواهیم کرد را در یک فایل JSON به نام acme.json ذخیره خواهیم کرد. کلید entryPoint باید به نقطه ورودی پورت 443 اشاره کند ، که در مورد ما نقطه ورود https است.
کلید onHostRule نحوه عملکرد Traefik برای تولید گواهینامه ها را تعیین می کند. ما می خواهیم گواهینامه خود را به محض ایجاد کانتینرها با نام هاست های مشخص دریافت کنیم ، و این همان کاری است که تنظیم onHostRule انجام می دهد.
بخش acme.httpChallenge به ما اجازه می دهد تا تعیین کنیم چگونه Let’s Encrypt بتواند تأیید کند که گواهی تولید شده است. ما در حال پیکربندی آن هستیم تا به عنوان بخشی از چالش از طریق نقطه ورود http ، یک فایل را ارائه دهد.
در آخر ، بیایید با اضافه کردن این خطوط به فایل ، ارائه دهنده docker را پیکربندی کنیم:
traefik.toml
[docker]
domain = “your_domain”
watch = true
network = “web”
ارائه دهنده docker ، Traefik  را قادر می سازد به عنوان یک پروکسی در مقابل کانتینرهای Docker عمل کند. ما ارائه دهنده را پیکربندی کرده ایم تا کانتینرهای جدیدی را در شبکه وب مشاهده کند که به زودی ایجاد خواهیم کرد و آنها را به عنوان زیر دامنه های your_domain نمایش می دهد.
در این مرحله ، traefik.toml  باید دارای محتوای زیر باشد:
traefik.toml
defaultEntryPoints = [“http”, “https”]
[entryPoints]
[entryPoints.dashboard]
address = “:8080”
[entryPoints.dashboard.auth]
[entryPoints.dashboard.auth.basic]
users = [“admin:your_encrypted_password”]
[entryPoints.http]
address = “:80”
[entryPoints.http.redirect]
entryPoint = “https”
[entryPoints.https]
address = “:443″
[entryPoints.https.tls]
[api]
entrypoint=”dashboard”
[acme]
email = “your_email@your_domain”
storage = “acme.json”
entryPoint = “https”
onHostRule = true
[acme.httpChallenge]
entryPoint = “http”
[docker]
domain = “your_domain”
watch = true
network = “web”
Copy
فایل را ذخیره کرده و از ویرایشگر خارج شوید. با استفاده از این پیکربندی ها ، می توانیم Traefik را مقداردهی اولیه کنیم.
مرحله 2 – اجرای  کانتینر  Traefik
سپس ، یک شبکه Docker برای پروکسی ایجاد کنید تا با کانتینرها به اشتراک گذاشته شود. شبکه Docker لازم است تا بتوانیم از آن در برنامه هایی که با استفاده از Docker Compose اجرا می شوند استفاده کنیم. بیایید با این شبکه وب تماس بگیریم:
$ docker network create web
وقتی کانتینر Traefik شروع به کار کرد ، ما آن را به این شبکه اضافه خواهیم کرد. سپس می توانیم کانتینرهای دیگری را برای پروکسی Trafik به این شبکه اضافه کنیم.
سپس ، یک فایل خالی ایجاد کنید که اطلاعات Let’s Encrypt ما را در خود نگه دارد. ما این را در کانتینر به اشتراک خواهیم گذاشت تا Traefik بتواند از آن استفاده کند:
$ touch acme.json
Traefik  فقط درصورتی امکان استفاده از این فایل را خواهد داشت که کاربر ریشه داخل کانتینر دسترسی خواندن و نوشتن منحصر به فرد به آن داشته باشد. برای انجام این کار ، مجوزهای acme.json را قفل کنید تا فقط صاحب فایل اجازه خواندن و نوشتن را داشته باشد:
$ chmod 600 acme.json
هنگامی که فایل به Docker منتقل شد ، مالک به طور خودکار به کاربر اصلی داخل کانتینر تغییر می کند.
در آخر ، با استفاده از این دستور کانتینر Traefik را ایجاد کنید:
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $PWD/traefik.toml:/traefik.toml \
-v $PWD/acme.json:/acme.json \
-p 80:80 \
-p 443:443 \
-l traefik.frontend.rule=Host:monitor.your_domain \
-l traefik.port=8080 \
–network web \
–name traefik \
traefik:1.7-alpine
دستور کمی طولانی است ، بنابراین اجازه دهید آن را تجزیه کنیم.
ما از پرچم -d برای اجرای کانتینر در پس زمینه به عنوان یک دمون استفاده می کنیم. سپس فایل docker.sock خود را در کانتینر به اشتراک می گذاریم تا روند Traefik بتواند تغییرات در کانتینرها را گوش دهد. همچنین فایل پیکربندی traefik.toml و فایل acme.json  را که ایجاد کردیم در کانتینر به اشتراک می گذاریم.
سپس ، از پورت های 80 و: 443 هاست Docker خود به همان پورت های موجود در کانتینر Traefik ترسیم می کنیم تا Traefik تمام ترافیک HTTP و HTTPS را به سرور مجازی دریافت کند.
سپس دو برچسب Docker تنظیم می کنیم که به Traefik می گوید که باید ترافیک را به سمت نام هاست monitor.your_domain به :8080 درون کانتینر Traefik هدایت کند، که داشبورد نظارت را نشان می دهد.
شبکه کانتینر را روی وب تنظیم می کنیم و کانتینر را traefik نامگذاری می گذاریم.
سرانجام ، از تصویر traefik: 1.7-alpine برای این کانتینر استفاده می کنیم ، زیرا کوچک است.
یک ENTRYPOINT تصویر Docker فرمانی است که همیشه هنگام ایجاد کانتینر از تصویر اجرا می شود. در این حالت ، دستور باینری traefik درون کانتینر است. هنگام راه اندازی کانتینر می توانید آرگومان های دیگری را به آن دستور منتقل کنید ، اما همه تنظیمات خود را در فایل traefik.toml پیکربندی کرده ایم.
با راه اندازی کانتینر ، اکنون داشبوردی دارید که می توانید برای مشاهده سلامت کانتینرهای خود به آن دسترسی داشته باشید. همچنین می توانید از این داشبورد برای تجسم frontends  و  backends که Traefik ثبت کرده استفاده کنید. با رفتن به ادرس https: //monitor.your_domain  در مرورگر خود به داشبورد نظارت دسترسی پیدا کنید. نام کاربری و گذرواژه ادمین  و رمز عبوری که در مرحله 1 پیکربندی کرده اید ، از شما خواسته می شود.
پس از ورود به سیستم ، رابط کاربری مشابه این را مشاهده خواهید کرد:
چیز چندانی برای مشاهده وجود ندارد ، اما این پنجره را باز بگذارید ، و با افزودن کانتینرهایی برای مدیریت Traefik ، تغییر محتوا را مشاهده خواهید کرد.
اکنون پروکسی Traefik در حال اجرا ، پیکربندی شده برای کار با Docker و آماده نظارت بر سایر کانتینرها Docker است. بیایید چند کانتینر برای Traefik به پروکسی اضافه کنیم.
مرحله 3 – ثبت کانتینرها با  Traefik
با استفاده از کانتینر Traefik ، آماده اجرای برنامه هایی در ورای آن هستید. اجازه دهید کانتینرهای زیر را تحت Traefik راه اندازی کنیم:
1- وبلاگی با استفاده از تصویر رسمی وردپرس.
2- یک سرور مجازی مدیریت پایگاه داده با استفاده از تصویر رسمی  Adminer.
ما با استفاده از یک فایل docker-compose.yml هر دو این برنامه ها را با Docker Compose مدیریت خواهیم کرد.
فایل docker-compose.yml را در ویرایشگر خود ایجاد و باز کنید:
$ nano docker-compose.yml
خطوط زیر را به فایل اضافه کنید تا نسخه و شبکه هایی را که استفاده خواهیم کرد مشخص کنید:
docker-compose.yml
version: “3”
networks:
web:
external: true
internal:
external: false
ما از Docker Compose نسخه 3 استفاده می کنیم زیرا جدیدترین نسخه اصلی قالب فایل Compose است.
برای اینکه Traefik برنامه های ما را بشناسد ، آنها باید بخشی از یک شبکه باشند و از آنجا که ما شبکه را به صورت دستی ایجاد کرده ایم ، با تعیین نام شبکه وب و تنظیم external  روی true ، آن را به داخل می کشیم. سپس یک شبکه دیگر تعریف می کنیم تا بتوانیم کانتینرهای در معرض دید خود را به یک کانتینر پایگاه داده متصل کنیم که از طریق Traefik در معرض آن قرار نمی گیریم. ما این شبکه را internalمی نامیم.
در مرحله بعدی ، هر یک از سرویس های خود را یک به یک تعریف خواهیم کرد. بیایید با محتوای وبلاگ شروع کنیم ، که پایه آن را تصویر رسمی وردپرس قرار خواهیم داد. این پیکربندی را به پایین فایل خود اضافه کنید:
docker-compose.yml
version: “3”
services:
blog:
image: wordpress:4.9.8-apache
environment:
WORDPRESS_DB_PASSWORD:
labels:
– traefik.backend=blog
– traefik.frontend.rule=Host:blog.your_domain
– traefik.docker.network=web
– traefik.port=80
networks:
– internal
– web
depends_on:
– mysql
کلید environment به شما امکان می دهد متغیرهای محیطی را که در داخل کانتینر تنظیم می شوند ، تعیین کنید. با تعیین نکردن مقداری برای WORDPRESS_DB_PASSWORD ، به Docker Compose می گوییم که هنگام ایجاد کانتینر مقدار را از پوسته ما گرفته و آن را عبور دهد. قبل از شروع کانتینرها ، این متغیر محیط را در پوسته خود تعریف خواهیم کرد. به این ترتیب گذرواژه های محکم کد گذاری شده را در فایل پیکربندی وارد نمی کنیم.
قسمت labels  جایی است که شما مقادیر پیکربندی Traefik را تعیین می کنید. برچسب های Docker به تنهایی کاری انجام نمی دهند ، اما Traefik این موارد را می خواند تا بداند چگونه با کانتینرها رفتار کند. آنچه در هر یک از این برچسب ها انجام می شود به این شرح است:
backend نام سرویس backend را در Traefik مشخص می کند (که به کانتینر واقعی blog اشاره دارد).
frontend.rule=Host:blog.your_domain به Traefik می گوید که میزبان درخواستی را بررسی کند و اگر با الگوی blog.your_domain مطابقت دارد باید ترافیک را به کانتینر blog هدایت کند.
docker.network=web مشخص می کند برای یافتن IP داخلی این کانتینر در کدام شبکه به دنبال Traefik بگردید. از آنجا که کانتینر Traefik ما به تمام اطلاعات Docker دسترسی دارد ، اگر این مورد را مشخص نکنیم ، احتمالاً IP را برای شبکه داخلی می گیرد.
port پورت در معرض مشخصی را مشخص می کند که Traefik باید از آن برای مسیر یابی به این کانتینر استفاده کند.
با استفاده از این پیکربندی ، تمام ترافیک ارسال شده به پورت 80 میزبان Docker ما به کانتینر blog  هدایت می شود.
ما این کانتینر را به دو شبکه مختلف اختصاص می دهیم تا Traefik بتواند آن را از طریق شبکه وب پیدا کند و بتواند از طریق شبکه داخلی با کانتینر پایگاه داده ارتباط برقرار کند.
سرانجام ، کلید depend_on به Docker Compose می گوید که این کانتینر پس از اجرای متعلقات باید شروع شود. از آنجا که وردپرس برای اجرا به یک پایگاه داده احتیاج دارد ، ما باید قبل از شروع محتوای وبلاگ خود ، محتوای mysql خود را اجرا کنیم.
سپس ، با اضافه کردن این پیکربندی به پایین فایل ، سرویس MySQL را پیکربندی کنید:
docker-compose.yml
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD:
networks:
– internal
labels:
– traefik.enable=false
ما بر��ی این کانتینر از تصویر رسمی MySQL 5.7 استفاده می کنیم. مشاهده خواهید کرد که بار دیگر از یک آیتم environment  بدون مقدار استفاده می کنیم. متغیرهای MYSQL_ROOT_PASSWORD و WORDPRESS_DB_PASSWORD  باید در همان مقدار تنظیم شوند تا اطمینان حاصل شود که کانتینر وردپرس ما می تواند با  MySQL  ارتباط برقرار کند. ما نمی خواهیم کانتینر mysql را در معرض Traefik یا جهان خارج قرار دهیم ، بنابراین فقط این کانتینر را به شبکه داخلی اختصاص می دهیم. از آنجا که Traefik به سوکت Docker دسترسی دارد ، این فرایند همچنان پیش فرض یک کانتینر mysql را نشان می دهد ، بنابراین ما برچسب traefik.enable = false را اضافه می کنیم تا مشخص کنیم Traefik نباید این کانتینر را نشان دهد.
سرانجام ، این پیکربندی را به قسمت پایین فایل خود اضافه کنید تا کانتینر Adminer را تعریف کنید:
docker-compose.yml
services:
adminer:
image: adminer:4.6.3-standalone
labels:
– traefik.backend=adminer
– traefik.frontend.rule=Host:db-admin.your_domain
– traefik.docker.network=web
– traefik.port=8080
networks:
– internal
– web
depends_on:
– mysql
این کانتینر بر اساس تصویر رسمی ادمین است. پیکربندی network  و depends_on برای این کانتینر دقیقاً با آنچه برای کانتینر blog  استفاده می کنیم مطابقت دارد.
با این حال ، از آنجا که همه ترافیک را به پورت 80 هاست Docker خود مستقیماً به کانتینر blog  هدایت می کنیم ، باید این کانتینر را به گونه دیگری پیکربندی کنیم تا ترافیک به کانتینر ادمین ما برسد. traefik.frontend.rule=Host:db-admin.your_domain به Traefik می گوید هاست درخواستی را بررسی کند. اگر با الگوی db-admin.your_domain مطابقت داشته باشد ، Traefik ترافیک را به سمت کانتینر مدیر هدایت می کند.
در این مرحله ، docker-compose.yml  باید دارای محتوای زیر باشد:
docker-compose.yml
version: “3”
networks:
web:
external: true
internal:
external: false
services:
blog:
image: wordpress:4.9.8-apache
environment:
WORDPRESS_DB_PASSWORD:
labels:
– traefik.backend=blog
– traefik.frontend.rule=Host:blog.your_domain
– traefik.docker.network=web
– traefik.port=80
networks:
– internal
– web
depends_on:
– mysql
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD:
networks:
– internal
labels:
– traefik.enable=false
adminer:
image: adminer:4.6.3-standalone
labels:
– traefik.backend=adminer
– traefik.frontend.rule=Host:db-admin.your_domain
– traefik.docker.network=web
– traefik.port=8080
networks:
– internal
– web
depends_on:
– mysql
فایل را ذخیره کرده و از ویرایشگر متن خارج شوید.
سپس ، مقادیر را برای پوسته خود برای متغیرهای WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD قبل از شروع کانتینرها خود تنظیم کنید:
$ export WORDPRESS_DB_PASSWORD=secure_database_password
$ export MYSQL_ROOT_PASSWORD=secure_database_password
secure_database_password  را با گذرواژه پایگاه داده مورد نظر خود جایگزین کنید. فراموش نکنید که برای هر دو WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD از رمز عبور یکسانی استفاده کنید.
با تنظیم این متغیرها ، کانتینرها را با استفاده از docker-compose اجرا کنید:
$ docker-compose up -d
اکنون نگاهی دوباره به داشبورد مدیریت Traefik بیندازید. خواهید دید که اکنون یک backend  و  frontend برای دو سرور مجازی وجود دارد:
به blog.your_domain خود بروید. به یک اتصال TLS هدایت خواهید شد و اکنون می توانید تنظیمات WordPress را انجام دهید:
اکنون با مراجعه به db-admin.your_domain در مرورگر خود ، به Adminer دسترسی پیدا کنید و your_domain را دوباره با دامنه خود جایگزین کنید. کانتینر mysql در معرض دنیای خارج نیست ، اما کانتینر adminer  از طریق شبکه داخلی Docker  که با استفاده از نام کانتینر mysql به عنوان نام هاست به آن استفاده میکنند ، دسترسی دارد.
در صفحه ورود به سیستم Adminer ، از ROOT به عنوان نام کاربری، MySQL برای سرور مجازی استفاده کنید. و مقداری را که برای MYSQL_ROOT_PASSWORD  تعیین کرده اید برای رمز عبور وارد کنید. پس از ورود به سیستم ، رابط کاربری Adminer را مشاهده خواهید کرد:
هر دو سایت اکنون کار می کنند و شما می توانید از داشبورد موجود در monitor.your_domain استفاده کنید تا برنامه های خود را تحت نظر داشته باشید.
نتیجه
در این آموزش ، Traefik را به درخواست پروکسی از برنامه های دیگر در کانتینرهای Docker پیکربندی کرده اید.
پیکربندی اعلانی Traefik در سطح کانتینر برنامه ، پیکربندی سرویس های بیشتر را آسان می کند و هنگام افزودن برنامه های جدید به ترافیک پروکسی ، نیازی به راه اندازی مجدد کانتینر traefik نیست زیرا Traefik بلافاصله از طریق فایل سوکت Docker که در حال کنترل است، متوجه تغییر می شود.
برای کسب اطلاعات بیشتر در مورد آنچه می توانید با Traefik انجام دهید ، به مطالب رسمی Traefik مراجعه کنید.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 
0 notes
vpsgoll · 4 years
Text
نحوه دانلود فایل ها با cURL
URL  کلاینت یا cURL ، یک کتابخانه و ابزار خط فرمان برای انتقال داده ها بین سیستم ها است. از بسیاری از پروتکل ها پشتیبانی می کند و به طور پیش فرض روی بسیاری از سیستم عامل های یونیکس مانند نصب میباشد. به دلیل در دسترس بودن به صورت عمومی ، برای زمانی که شما نیاز به دانلود یک فایل در سیستم محلی خود دارید ، به خصوص در محیط
سرور مجازی
، انتخاب خوبی است.در این آموزش ، از دستور curl برای دانلود یک فایل متنی از
سرور مجازی
وب استفاده خواهید کرد. شما محتویات آن را مشاهده خواهید کرد ، آن را به صورت محلی ذخیره خواهید کرد و به curl خواهید گفت که اگر فایل ها منتقل شده اند ، ریدایرکت ها را دنبال کند.دانلود فایل ها از طریق اینترنت می تواند خطرناک باشد ، بنابراین مطمئن شوید که از منابع معتبر دانلود می کنید.مرحله 1 – گرفتن فایل های از راه دورخارج از باکس ، بدون هیچ آرگومان خط فرمان ، دستور curl یک فایل را واکشی می کند و محتوای آن را به خروجی استاندارد نشان می دهد.با دانلود فایل robots.txt بیایید آن را امتحان کنیم:·                 $ curl https://www.digitalocean.com/robots.txt
محتوای فایل را در صفحه نمایش خواهید دید:OutputUser-agent: *Disallow: sitemap: https://www.digitalocean.com/sitemap.xmlsitemap: https://www.digitalocean.com/community/main_sitemap.xml.gzsitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gzsitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz به curl یک URL بدهید و منبع را واکشی کرده و محتوای آن را نمایش می دهد.ذخیره فایل های از راه دورواکشی یک فایل و نمایش محتوای آن کاملاً خوب است ، اما اگر بخواهید فایل را در سیستم خود ذخیره کنید چه می کنید؟برای ذخیره فایل از راه دور در سیستم محلی خود ، با همان نام فایل
سرور مجازی
 که از آن دانلود می کنید ، آرگومان –remote-name را اضافه کنید یا از گزینه -O استفاده کنید:
$ curl -O https://www.digitalocean.com/robots.txt
فایل شما دانلود می شود:[secondary_label Output% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed100   286    0   286    0     0   5296      0 –:–:– –:–:– –:–:–  5296 curl به جای نمایش محتویات فایل ، پیشرفت بر پایه متن را نشان می دهد و فایل را به همان نام فایل راه دور ذخیره می کند. با دستور cat می توانید موارد را بررسی کنید:
$ cattxt
این فایل شامل همان مطالبی است که قبلاً مشاهده کرده اید:[secondary_label OutputUser-agent: *Disallow: sitemap: https://www.digitalocean.com/sitemap.xmlsitemap: https://www.digitalocean.com/community/main_sitemap.xml.gzsitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gzsitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz اکنون بیایید به تعیین یک نام فایل برای فایل دانلود شده بپردازیم.مرحله 2 – ذخیره فایل های از راه دور با نام فایل خاصممکن است قبلاً یک فایل محلی با همان نام فایل در
سرور مجازی
راه دور داشته باشید.برای جلوگیری از رونویسی مجدد فایل محلی خود به همین نام ، از آرگومان -o یا –output و به دنبال آن نام فایل محلی که می خواهید محتوا را در آن ذخیره کنید استفاده کنید.برای دانلود فایل از راه دور robots.txt در فایل do-bots.txt که به صورت محلی نامگذاری شده است ، دستور زیر را اجرا کنید:
$ curl -o do-bots.txt https://www.digitalocean.com/robots.txt
بار دیگر نوار پیشرفت را مشاهده خواهید کرد:Output% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed100   286    0   286    0     0   6975      0 –:–:– –:–:– –:–:–  7150 اکنون برای نمایش محتویات do-bots.txt از دستور cat استفاده کنید تا فایل مورد نظر را دانلود کنید:
$ cat do-bots.txt
خروجی یکسان میباشد:OutputUser-agent: *Disallow: sitemap: https://www.digitalocean.com/sitemap.xmlsitemap: https://www.digitalocean.com/community/main_sitemap.xml.gzsitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gzsitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz به طور پیش فرض ، curl تغییر مسیرها را دنبال نمی کند ، بنابراین هنگام انتقال فایل ها ، ممکن است آنچه انتظار دارید را دریافت نکنید. بیایید ببینیم چگونه این مشکل را برطرف کنیم.مرحله 3 – دنبال کردن تغییر مسیرهاتاکنون همه مثالها شامل URL های کاملاً واجد شرایط هستند که شامل پروتکل https: // هستند. اگر بخواهید فایل robots.txt را گرفته و فقط www.example.com را مشخص کنید ، هیچ خروجی نمی بینید ، زیرا example درخواست های http: // را به https: // هدایت می کند:شما می توانید این را با استفاده از پرچم -I تأیید کنید ، که عناوین درخواست را به جای محتویات فایل نمایش می دهد:
$ curl -I www.digitalocean.com
خروجی نشان می دهد که URL تغییر مسیر داده است. خط اول خروجی به شما می گوید که جابه جا شده است و خط location مکان آن را به شما می گوید:[secondary_label OutputHTTP/1.1 301 Moved PermanentlyDate: Wed, 26 Aug 2020 19:01:33 GMTConnection: keep-aliveCache-Control: max-age=3600Expires: Wed, 26 Aug 2020 20:01:33 GMTLocation: https://www.digitalocean.com/robots.txtcf-request-id: 04cdbea7a40000c5cc8d34d200000001Server: cloudflareCF-RAY: 5c8fcd52aea0c5cc-EWR می توانید از curl برای درخواستی دیگر به صورت دستی استفاده کنید ، یا می توانید از آرگومان –location یا -L استفاده کنید که به curl می گوید هر زمان که با یک تغییر مسیر مواجه شد درخواست را به مکان جدید دوباره انجام دهد. آن را امتحان کنید:
$ curl -L www.digitalocean.com/robots.txt
این بار خروجی را مشاهده می کنید ، زیرا curl به دنبال تغییر مسیر می رود:OutputUser-agent: *Sitemap: https://www.digitalocean.com/sitemap.xml برای دانلود فایل در سیستم محلی خود می توانید آرگومان -L را با برخی از آرگومان های فوق الذکر ترکیب کنید:
$ curl -L -o do-bots.txt www.digitalocean.com/robots.txt
 هشدار: بسیاری از منابع آنلاین از شما می خواهند که برای دانلود اسکریپت ها و اجرای آنها از curl استفاده کنید. قبل از اجرای اسکریپت های دانلود شده ، بهتر است محتوای آنها را بررسی کنید. برای بررسی کد و اطمینان از چیزی که می خواهید اجرا کنید ، از دستور less استفاده کنید. نتیجهcurl به شما امکان می دهد که فایل ها را سربع از یک سیستم از راه دور دانلود کنید.  Curl  از پروتکل های مختلف پشتیبانی می کند و همچنین می تواند درخواست های وب پیچیده تری از جمله تعامل با API های از راه دور برای ارسال و دریافت داده ها را ایجاد کند.با مشاهده صفحه دستی  man در مورد curl می توانید اطلاعات بیشتری کسب کنید.
خرید vps
 – 
خرید سرور مجازی
 – 
خرید سرور
 – 
سرور هلند
 – 
فروش vps
 – 
سرور مجازی آمریکا
 – 
خریدvps
 – 
سرور مجازی هلند
 – 
فروش سرور مجازی
 – 
سرور آمریکا
 – 
vps
 – 
سرور مجازی انگلیس
 – 
سرور مجازی آلمان
 – 
سرور مجازی کانادا
 – 
خرید vps آمریکا
 – 
خرید وی پی اس
 – 
سرور
 – 
خرید سرور مجازی هلند
 – 
vps خرید
 – 
سرور مجازی فرانسه
 – 
سرور مجازی هلند
 – 
خرید vps آمریکا
خرید سرور مجازی ارزان هلند
vps
خرید vps هلند
خرید سرور مجازی آمریکا
خرید vps فرانسه
تست vps
سرور مجازی تست
سرور مجازی ویندوز
ارزانترین vps
خرید وی پی اس
vps ارزان
– 
0 notes
vpsgoll · 4 years
Text
نحوه نصب و ایمن سازی Redis در Centos7
Redis  یک فروشگاه ساختار داده منبع باز با حافظه داخلی است که به دلیل انعطاف پذیری ، عملکرد و پشتیبانی گسترده زبانی شناخته شده است.
Redis برای استفاده کلاینت های مورد اعتماد در یک محیط قابل اعتماد طراحی شده است و از نظر امنیتی ویژگی های قدرتمندی ندارد. با این حال ، Redis چند ویژگی امنیتی دارد که شامل یک پسورد رمزگذاری نشده و دستور تغییر نام و غیرفعال کردن است. این آموزش دستورالعمل هایی در مورد چگونگی پیکربندی این ویژگی های امنیتی را ارائه می دهد ، همچنین چند تنظیمات دیگر را نیز شامل می شود که می تواند باعث افزایش امنیت نصب مستقل Redis در CentOS 7 شود.
توجه داشته باشید که این راهنما به موقعیت هایی که سرور مجازی Redis و برنامه های کلاینت در هاست های مختلف یا در مراکز داده های مختلف هستند ، نمی پردازد. نصب هایی که ترافیک Redis مجبور است از یک شبکه ناایمن یا غیر قابل اعتماد عبور کند ، به مجموعه دیگری از تنظیمات ، مانند راه اندازی یک پروکسی SSL یا VPN بین دستگاه های Redis نیاز دارد.
پیش نیازها
برای تکمیل این راهنما ، به یک سرور مجازی Centos7 که با دنبال کردن راهنمای راه اندازی سرور مجازی اولیه ما تنظیم شده نیاز دارید.
یک فایروال نصب و پیکربندی شده، به روز و شامل مرحله Turning on the Firewall.
با انجام این پیش نیاز ها آماده نصب Redis و اجرای برخی کارهای پیکربندی اولیه خواهیم بود.
مرحله 1 – نصب Redis
قبل از نصب Redis ، ابتدا باید بسته های اضافی برای منبع Enterprise Linux  (EPEL) را به لیست بسته های سرور مجازی اضافه کنیم. EPEL یک مخزن بسته است که شامل تعدادی بسته نرم افزاری اضافی منبع باز است که بیشتر آنها توسط پروژه Fedora نگهداری می شوند.
ما می توانیم EPEL را با استفاده از yum نصب کنیم:
$ sudo yum install epel-release
پس از پایان نصب EPEL ، می توانید Redis را نصب کنید ، دوباره با استفاده از yum:
$ sudo yum install redis -y
انجام این کار ممکن است چند دقیقه طول بکشد. پس از اتمام نصب ، سرویس Redis را شروع کنید:
$ sudo systemctl start redis.service
اگر می خواهید Redis از بوت شروع شود ، می توانید آن را با دستور enable  فعال کنید:
$ sudo systemctl enable redis
با اجرای موارد زیر می توانید وضعیت Redis را بررسی کنید:
$ sudo systemctl status redis.service
Output
redis.service – Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Thu 2018-03-01 15:50:38 UTC; 7s ago
Main PID: 3962 (redis-server)
CGroup: /system.slice/redis.service
└─3962 /usr/bin/redis-server 127.0.0.1:6379
هنگامی که تأیید کردید Redis در حال اجرا است ، با این دستور ستاپ را امتحان کنید:
$ redis-cli ping
این باید PONG را به عنوان پاسخ چاپ کند. اگر این گونه باشد ، به این معنی است که شما اکنون Redis را در سرور مجازی خود اجرا کرده و ما می توانیم پیکربندی آن را برای افزایش امنیت آن آغاز کنیم.
مرحله 2 – اتصال Redis و ایمن سازی آن با فایروال
یک روش موثر برای محافظت از Redis ، ایمن سازی سروری است که روی آن اجرا میشود. شما می توانید این کار را با اطمینان حاصل کردن از این که Redis فقط به localhost یا یک آدرس IP خصوصی متصل است و اینکه سرور مجازی دارای فایروال و به روز است این کار را انجام دهید.
با این حال ، اگر با استفاده از این آموزش خوشه Redis را راه اندازی کرده اید ، پس فایل پیکربندی را به روز کرده اید تا از هرجایی اتصال برقرار شود ، این امنیت به اندازه اتصال به localhost یا IP خصوصی نیست.
برای رفع این مشکل ، فایل پیکربندی Redis را برای ویرایش باز کنید:
$ sudo vi /etc/redis.conf
ابتدا خطی که با BIND شروع میشود پیدا کنید و مطمئن شوید که خارج شده است:
/etc/redis.conf
bind 127.0.0.1
اگر لازم است Redis را به آدرس IP دیگری متصل کنید (مانند مواردی که از یک میزبان جداگانه به Redis دسترسی پیدا خواهید کرد) به شما توصیه می کنیم آن را به یک آدرس IP خصوصی متصل کنید. اتصال به یک آدرس IP عمومی ، قرار گرفتن در معرض رابط Redis شما را در برابر طرف های خارجی افزایش می دهد.
/etc/redis.conf
bind your_private_ip
اگر پیش نیازها را دنبال کرده و firewalld را بر روی سرور مجازی خود نصب کرده اید و قصد ندارید از میزبان دیگری به Redis متصل شوید ، دیگر نیازی به افزودن قوانین فایروال اضافی برای Redis ندارید. از این گذشته ، هرگونه ترافیک ورودی به طور پیش فرض کاهش می یابد مگر اینکه صریحاً توسط قوانین فایروال اجازه داده شود. از آنجا که نصب مستقل پیش فرض سرور مجازی Redis فقط به رابط loopback (127.0.0.1 یا localhost) گوش می کند ، دیگر نباید نگرانی برای ترافیک ورودی در پورت پیش فرض آن وجود داشته باشد.
اگر می خواهید از میزبان دیگری به Redis دسترسی پیدا کنید ، باید با استفاده از دستور firewall-cmd تغییراتی در پیکربندی firewalld خود ایجاد کنید. باز هم ، فقط باید با استفاده از آدرس IP خصوصی هاست ها ، به سرور مجازی Redis خود اجازه دسترسی دهید تا تعداد هاست هایی که سرویس شما در معرض آنهاست را محدود کنید.
برای شروع ، یک منطقه اختصاصی Redis را به رویکرد فایروال خود اضافه کنید:
$ sudo firewall-cmd –permanent –new-zone=redis
سپس مشخص کنید کدام پورت را می خواهید باز کنید. Redis به طور پیش فرض از پورت6397 استفاده می کند:
$ sudo firewall-cmd –permanent –zone=redis –add-port=6379/tcp
سپس ، آدرسهای IP خصوصی را که باید از طریق فایروال عبور کرده و به Redis دسترسی پیدا کنند ، مشخص کنید:
$ sudo firewall-cmd –permanent –zone=redis –add-source=client_server_private_IP
پس از اجرای این دستورات ، فایروال را دانلود کنید تا قوانین جدید را اجرا کنید:
$ sudo firewall-cmd –reload
تحت این پیکربندی ، هنگامی که فایروال بسته ای را از آدرس IP کلاینت شما مشاهده می کند ، قوانینی را در منطقه اختصاصی Redis برای آن اتصال اعمال می کند. سایر اتصالات توسط منطقه عمومی پیش فرض پردازش می شوند. سرویس های موجود در منطقه پیش فرض برای هر اتصال اعمال می شوند ، نه فقط برای سرویس هایی که به وضوح مطابقت ندارند ، بنابراین نیازی نیست که سرویس های دیگری (به عنوان مثال SSH) را به منطقه Redis اضافه کنید زیرا این قوانین به طور خودکار برای آن اتصال اعمال می شوند.
اگر تصمیم به ایجاد فایروال با استفاده از Iptables کرده اید ، لازم است مجوزهای ثانویه خود را به پورت Redis با دستورات زیر دسترسی دهید:
$ sudo iptables -A INPUT -i lo -j ACCEPT $ sudo iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT $ sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 –dport 6397 -m conntrack –ctstate NEW,ESTABLISHED -j ACCEPT $ sudo iptables -P INPUT DROP
اطمینان حاصل کنید که قوانین فایروال Iptables خود را با استفاده از مکانیزم ارائه شده توسط توزیع ذخیره کنید. با نگاهی به راهنمای ملزومات Iptables می توانید درباره Iptables بیشتر بیاموزید.
به خاطر داشته باشید که استفاده از هر دو ابزار فایروال کار می کند. نکته مهم این است که فایروال در حال کار است و به گونه ای انجام می شود که افراد ناشناس نتوانند به سرور مجازی شما دسترسی پیدا کنند. در مرحله بعدی ، Redis را پیکربندی می کنیم تا فقط با یک رمز عبور قوی قابل دسترسی باشد.
مرحله 3 – پیکربندی رمز عبور Redis
اگر Redis را با استفاده از آموزش نحوه پیکربندی خوشه Redis  در CentOS 7 نصب کرده اید ، باید یک رمز عبور برای آن پیکربندی کرده باشید. بنا به صلاحدید خود ، می توانید با دنبال کردن این بخش یک رمز عبور ایمن تر ایجاد کنید. اگر هنوز رمز عبوری تنظیم نکرده اید ، دستورالعمل های موجود در این بخش نحوه تنظیم رمز سرور مجازی پایگاه داده را نشان می دهد.
پیکربندی رمز عبور Redis یکی از دو ویژگی امنیتی داخلی خود را ایجاد می کند – دستور auth ، که به تایید اعتبار کلاینت ها برای دسترسی به پایگاه داده نیاز دارد. رمز عبور مستقیماً در فایل پیکربندی Redis ، /etc/redis/redis.conf  پیکربندی شده است ، بنابراین دوباره آن فایل را با ویرایشگر مورد نظر خود باز کنید:
$ sudo vi /etc/redis.conf
به بخش SECURITY بروید و به دنبال دستورالعملی باشید که وظیفه خواندن را دارد:
/etc/redis.conf
# requirepass foobared
با حذف # آن را لغو کنید و foobared  را به یک رمزعبور امن تغییر دهید. به جای اینکه خودتان یک رمز عبور بسازید ، ممکن است از ابزاری مانند apg یا pwgen برای تولید آن استفاده کنید. اگر نمی خواهید یک برنامه فقط برای تولید گذرواژه نصب کنید ، می توانید از دستور زیر استفاده کنید.
توجه داشته باشید که وارد کردن این دستور به صورت نوشته شده هر بار رمز عبور یکسانی را ایجاد می کند. برای ایجاد رمز عبور متفاوت از رمز عبوری که با این کار ایجاد می شود ، کلمه را در صورت نقل قول به هر کلمه یا عبارت دیگری تغییر دهید.
·         $  echo “digital-ocean” | sha256sum
اگرچه رمز ورود ایجاد شده قابل تلفظ نیست ، اما یک رمز بسیار قوی و طولانی است که دقیقاً همان نوع رمز مورد نیاز Redis است. پس از کپی و پیست کردن خروجی آن دستور به عنوان مقدار جدید برای Requirese ، به این صورت خواهد بود:
/etc/redis.conf
requirepass password_copied_from_output
اگر رمز عبور کوتاه تری را ترجیح می دهید ، به جای آن از خروجی دستور زیر استفاده کنید. دوباره ، کلمه را به صورت نقل قول تغییر دهید تا رمز عبور مشابه این رمز ایجاد نشود:
·         $ echo “digital-ocean” | sha1sum·
پس از تنظیم پسورد فایل را ذخیره کنید و ببندید و Redis را ریستارت کنید:
$ sudo systemctl restart redis.service
سپس برای بررسی کارکرد گذرواژه، به خط فرمان Redis دسترسی پیدا کنید:
$ redis-cli
در زیر توالی دستورات مورد استفاده برای تست رمز Redis وجود دارد. دستور اول سعی می کند قبل از تأیید اع��بار ، کلید را روی یک مقدار تنظیم کند:
0.0.1:6379> set key1 10
این رمز کار نخواهد کرد زیرا شما تأیید اعتبار نکردید ، بنابراین Redis خطایی را برمی گرداند:
Output(error) NOAUTH Authentication required.
دستور بعدی با گذرواژه مشخص شده در فایل پیکربندی Redis تأیید اعتبار می کند:
0.0.1:6379> auth your_redis_password
Redis تایید می کند:
OutputOK
پس از آن ، اجرای دوباره فرمان قبلی موفق خواهد بود:
0.0.1:6379> set key1 10
Output
OK
دستور get key1 مقدار کلید جدید را از Redis جستجو میکند.
0.0.1:6379> get key1
Output
“10”
با دستور آخر یعنی redis-cli میتوانید خارج شوید:
0.0.1:6379> quit
اکنون دسترسی به نصب Redis برای کاربران غیرمجاز بسیار دشوار است. البته توجه داشته باشید که اگر از راه دور به Redis متصل شوید ، بدون SSL یا VPN پسورد رمزگذاری نشده برای اشخاص خارجی قابل مشاهده خواهد بود.
در مرحله بعدی ، برای محافظت بیشتر از Redis در برابر حملات مخرب ، به تغییر دستورات Redis خواهیم پرداخت.
مرحله 5 – تغییر نام دستورات خطرناک
ویژگی امنیتی دیگر که در Redis قرار داده شده ، تغییر نام یا غیرفعال کردن کامل فرامین خاصی است که خطرناک به نظر می رسند.هنگامی که این دستورات توسط کاربران غیرمجاز اجرا می شوند ، می توانند برای پیکربندی ، از بین بردن یا پاک کردن داده های شما استفاده شوند. برخی از دستوراتی که خطرناک به حساب می آیند عبارتند از
FLUSHDB FLUSHALL KEYS PEXPIRE DEL CONFIG SHUTDOWN BGREWRITEAOF BGSAVE SAVE SPOP SREM RENAME DEBUG
این یک لیست جامع نیست ، اما تغییر نام یا غیرفعال کردن کلیه دستورات موجود در آن لیست ، نقطه شروع خوبی برای افزایش امنیت سرور مجازی Redis شما است.
این که آیا شما باید یک فرمان را غیرفعال کنید یا تغییر نام دهید ، به نیازهای خاص شما یا نیازهای سایت شما بستگی دارد. اگر می دانید هرگز از دستوری که مورد سوءاستفاده قرار می گیرد استفاده نمی کنید ، می توانید آن را غیرفعال کنید. در غیر این صورت ، نام آن مفید را تغییر دهید.
مانند رمز عبور احراز هویت ، تغییر نام یا غیرفعال کردن دستورات در قسمت SECURITY فایل /etc/redis.conf پیکربندی شده است. برای فعال یا غیرفعال کردن دستورات Redis ، یک بار دیگر فایل پیکربندی را برای ویرایش باز کنید:
·         $ sudo vi  /etc/redis.conf
هشدار: این ها چند نمونه مثال است. فقط باید غیرفعال کردن یا تغییر نام دستوراتی که منطقی میباشد را انتخاب کنید. می توانید لیست کامل دستورات را برای خود مرور کنید و نحوه استفاده آنها در redis.io/commands  را تعیین کنید.
برای غیرفعال کردن یک دستور ، کافی است آن را به یک رشته خالی تغییر دهید ، همانطور که در زیر نشان داده شده:
/etc/redis.conf
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB “”
rename-command FLUSHALL “”
rename-command DEBUG “”
برای تغییرنام یک فرمان، نام دیگری مانند زیر به آن بدهید. حدس زدن فرمان های تغییر نام یافته باید برای دیگران دشوار باشد اما به راحتی بتوانید آن ها را به خاطر بسپارید.
/etc/redis.conf
rename-command CONFIG “”
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
تغییرات خود را ذخیره کرده و فایل را ببندید و سپس با راه اندازی مجدد Redis ، تغییر را اعمال کنید:
·         $ sudo systemctl restart redis.service
برای آزمایش دستور جدید ، وارد خط فرمان Redis شوید:
$ redis-cli
سپس ، تأیید اعتبار کنید:
0.0.1:6379> auth your_redis_password
Output
OK
فرض کنیم که شما دستور CONFIG را مانند مثال قبل به  ASC12_CONFIGتغییر نام دادید . ابتدا سعی کنید از دستور اصلی CONFIG  استفاده کنید. باید با شکست مواجه شود ، زیرا آن را تغییر نام داده اید:
0.0.1:6379> config get requirepass
Output
(error) ERR unknown command ‘config’
با این وجود فراخوانی فرمان تغییر نام داده شده موفقیت آمیز خواهد بود. به کوچک و بزرگ بودن کاراکترها حساس نیست:
0.0.1:6379> asc12_config get requirepass
Output
1) “requirepass”
2) “your_redis_password”
درنهایت ، می توانید از redis-cli خارج شوید:
0.0.1:6379> exit
توجه داشته باشید که اگر قبلاً از خط فرمان Redis استفاده کرده اید و دوباره Redis را ریستارت کرده اید ، باید مجددا تأیید اعتبار کنید. در غیر این صورت ، اگر یک دستور تایپ کنید ، این خطا را دریافت خواهید کرد:
OutputNOAUTH Authentication required.
به خاطر تغییر نام دستورات ، در پایان بخش SECURITY در /etc/redis/redis.conf یک عبارت هشدار وجود دارد:
/etc/redis.conf
. . . # Please note that changing the name of commands that are logged into the# AOF file or transmitted to slaves may cause problems. . . .
این بدان معناست که اگر دستور تغییر نام یافته در فایل AOF نباشد ، یا اگر موجود باشد اما فایل AOF به slaves ارسال نشده باشد ، دیگر مشکلی وجود نخواهد داشت.بنابراین ، هنگام تغییر نام دستورات ، این را به خاطر داشته باشید. بهترین زمان برای تغییر نام یک فرمان زمانی است که شما از ماندگاری AOF استفاده نمی کنید ، یا درست بعد از نصب ، یعنی قبل از استقرار برنامه مبتنی بر Redis.
هنگامی که از AOF استفاده می کنید و با یک نصب master slave سرو کار دارید ، این پاسخ را از صفحه صدور GitHub پروژه در نظر بگیرید.
بنابراین ، بهترین روش برای تغییر نام در مواردی از این دست ، این است که مطمئن شوید دستورات تغییر نام یافته به تمام مثال های نصب های master-slave اعمال میشود.
مرحله 5 – تنظیم مالکیت دایرکتوری داده و مجوزهای پرونده
در این مرحله ، ما تغییرات مالکیت و مجوزهایی را که می توانید برای بهبود نمایه امنیتی نصب Redis خود ایجاد کنید ، در نظر خواهیم گرفت. این شامل اطمینان از این است که فقط کاربری که باید به Redis دسترسی پیدا کند اجازه خواندن اطلاعات آن را دارد. این کاربر به طور پیش فرض ، کاربر redis است.
این را می توانید با grep-ing برای دیرکتوری داده Redis در لیست طولانی دیرکتوری اصلی خود تأیید کنید. دستور و خروجی آن در زیر آورده شده است.
$ ls -l /var/lib | grep redis
Output
drwxr-xr-x 2 redis   redis   4096 Aug  6 09:32 redis
می بینید که دایرکتوری داده Redis متعلق به کاربر redis است و دسترسی ثانویه به گروه redis اعطا می شود. این تنظیم مالکیت ایمن است ، اما مجوزهای پوشه (که روی 755 تنظیم شده است) اینگونه نیست. برای اطمینان از دسترسی انحصاری کاربر Redis به پوشه و محتویات آن ، تنظیمات مجوزها را به 770 تغییر دهید:
$ sudo chmod 770 /var/lib/redis
مجوز دیگری که باید تغییر دهید ، فایل پیکربندی Redis است. به طور پیش فرض ، دارای مجوز فایل 644 است و توسط root متعلق به مالکیت ثانویه توسط گروه root است:
$ ls -l /etc/redis.conf
Output
-rw-r–r– 1 root root 30176 Jan 14  2014 /etc/redis.conf
این مجوز (644) به صورت سراسر جهانی قابل خواندن است. این یک مشکل امنیتی است زیرا فایل پیکربندی حاوی پسورد رمزگذاری نشده ای است که در مرحله 4 پیکربندی کرده اید ، به این معنی که ما باید مالکیت و مجوزهای فایل پیکربندی را تغییر دهیم. در حالت ایده آل ، این مالکیت باید توسط کاربر redis و با مالکیت ثانویه توسط گروه redis باشد. برای انجام این کار ، دستور زیر را اجرا کنید:
$ sudo chown redis:redis /etc/redis.conf
سپس مجوزها را تغییر دهید تا فقط صاحب فایل بتواند آن را بخواند و یا بنویسد:
$ sudo chmod 600 /etc/redis.conf
شما می توانید مالکیت و مجوزهای جدید را با استفاده از موارد زیر تأیید کنید:
$ ls -l /etc/redis.conf
Output
total 40
-rw——- 1 redis redis 29716 Sep 22 18:32 /etc/redis.conf
در آخر ، Redis را دوباره راه اندازی کنید:
$ sudo systemctl restart redis.service
تبریک ، نصب Redis شما اکنون ایمن تر شده است!
نتیجه
به خاطر داشته باشید که پس از ورود شخصی به سرور مجازی شما ، دور زدن ویژگی های امنیتی ویژه Redis که ما در آن قرار داده ایم بسیار آسان است. بنابراین ، مهمترین ویژگی امنیتی در سرور مجازی Redis ، فایروال شماست (که در صورت پیروی از آموزش مقدماتی راه اندازی اولیه سرور اولیه، آن را پیکربندی کرده اید) ، زیرا این کار پرش از آن حصار امنیتی را برای حمله گران بسیار دشوار می کند.
اگر سعی در برقراری ارتباطات Redis از طریق یک شبکه غیر معتبر دارید ، باید پروکسی SSL را به کار ببرید ، همانطور که توسط توسعه دهندگان Redis در راهنمای رسمی امنیتی Redis توصیه شده است.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
0 notes
vpsgoll · 4 years
Text
چگونه می توان محیط JupyterLab را در اوبونتو 18.04 تنظیم کرد
JupyterLab  یک رابط کاربری کاملاً غنی از ویژگی های مختلف است که انجام وظایف را به خصوص در زمینه علوم داده ها و هوش مصنوعی برای کاربران آسان می کند. محیط های JupyterLab طراحی مجدد Jupyter Notebook را با محوریت بهره وری ارائه می دهد. این برنامه ابزاری مانند یک نمایشگر HTML داخلی و بیننده CSV را به همراه ویژگی هایی ارائه می دهد که چندین ویژگی مجزا از Jupyter Notebook را در همان صفحه جمع می کند.
در این آموزش ، JupyterLab  را روی سرور مجازی Ubuntu 18.04 خود نصب و تنظیم می کنید. همچنین می توانید سرور خود را پیکربندی کنید تا بتواند از راه دور با هر نامی از مرورگر وب به طور ایمن و با استفاده از یک نام دامنه به نمونه  JupyterLab متصل شود.
پیش نیازها
برای تکمیل این آموزش ، به موارد زیر نیاز دارید:
سرور مجازی Ubuntu 18.04 با یک حساب کاربری غیر ریشه با امتیازات sudo با استفاده از راهنمای ستاپ اولیه سرور.
نصب توزیع پایتون Anaconda روی سرور مجازیتان. می توانید از آموزش نحوه نصب  توزیع پایتون Anaconda  در اوبونتو 18.04 استفاده کنید.
یک نام دامنه یا زیر دامنه ثبت شده که در آن به ویرایش رکورد DNS دسترسی دارید. در سراسر این آموزش از your_domain استفاده خواهد کرد. می توانید دامنه ها را در Namecheap خریداری کنید ، یک دامنه رایگان در Freenom  دریافت کنید ، یا یک دامنه جدید را با هر نوع ثبت دلخواه خود ثبت کنید.
سوابق DNS زیر برای دامنه شما تنظیم شده باشد:
o یک رکورد A با your_domain که آدرس IP عمومی سرور مجازی شما را نشان می دهد.
O رکورد A با www.your_domain که آدرس IP عمومی سرور مجازی شما را نشان می دهد. مقاله نحوه ایجاد ، ویرایش و حذف اسناد  رکوردهای DNS  می تواند در تنظیم این رکوردها به شما کمک کند.
مرحله 1 – تنظیم گذرواژه
در این مرحله یک رمز عبور را روی نصب JupyterLab خود تنظیم خواهید کرد. داشتن گذرواژه مهم است زیرا نمونه شما در دسترس عموم خواهد بود.
ابتدا مطمئن شوید که محیط Anaconda شما فعال شده است. طبق آموزش پیش نیاز محیط، base نامیده می شود.
برای فعال کردن محیط ، از دستور زیر استفاده کنید:
$ conda activate base
اعلان شما در ترمینال تغییر خواهد کرد تا پایه محیط پیش فرض Anaconda  را منعکس کند:
(base) sammy@your_server:~$
کلیه دستورات آینده در این آموزش در محیط baseاجرا می شود.
با فعال شدن محیط Anaconda ، می توانید یک رمز ورود برای JupyterLab را در سرور مجازی خود تنظیم کنید.
ابتدا ، اجازه دهید یک فایلbase پیکربندی برای  Jupyter ایجاد کنیم:
$ jupyter notebook –generate-config
خروجی زیر را دریافت خواهید کرد:
OutputWriting default config to: /home/sammy/.jupyter/jupyter_notebook_config.py
هم  JupyterLab و Jupyter Notebookیک فایل پیکربندی مشترک را دارند.
$ jupyter notebook password
اکنون ، از دستور زیر برای تنظیم گذرواژه برای دسترسی به نمونه  JupyterLab خود از راه دور استفاده کنید:
OutputEnter password:Verify password:[NotebookPasswordApp] Wrote hashed password to /home/sammy/.jupyter/jupyter_notebook_config.json
Jupyter  به شما اعلانی نشان می خواهد که رمز عبور مورد نظر خود را ارائه دهید:
Jupyter  رمز عبور را با فرمت hashed در /home/sammy/.jupyter/jupyter_notebook_config.json ذخیره می کند. در آینده به این مقدار نیاز خواهید داشت.
در آخر ، برای مشاهده گذرواژه hashed ، از دستور cat در فایل تولید شده توسط دستور قبلی استفاده کنید:
$ cat /home/sammy/.jupyter/jupyter_notebook_config.json
خروجی مشابه با موارد زیر را دریافت خواهید کرد:
/home/sammy/.jupyter/jupyter_notebook_config.json
{
“NotebookApp”: {
“password”: “sha1:your_hashed_password”
}
}
مقدار را در کلید رمز عبور JSON کپی کنید و به طور موقت آن را ذخیره کنید.
برای مثال JupyterLab یک گذرواژه تنظیم کرده اید. در مرحله بعد یک گواهی Let’s Encrypt برای سرور مجازی خود ایجاد خواهید کرد.
مرحله 2 – پیکربندی Let’s Encrypt
در این مرحله ، یک گواهی Let’s Encrypt برای دامنه خود ایجاد خواهید کرد. با دسترسی به محیط  JupyterLab از مرورگر ، داده های شما را ایمن می کند.
ابتدا Certbot را روی سرور مجازی خود نصب خواهید کرد. با اضافه کردن مخزن آن به منابع apt شروع کنید:
$ sudo add-apt-repository ppa:certbot/certbot
پس از اجرای دستور ، از شما خواسته می شود تا ENTER را فشار دهید تا PPA را اضافه کنید:
OutputThis is the PPA for packages prepared by Debian Let’s Encrypt Team and backported for Ubuntu. Note: Packages are only provided for currently supported Ubuntu releases. More info: https://launchpad.net/~certbot/+archive/ubuntu/certbotPress [ENTER] to continue or Ctrl-c to cancel adding it.
برای ادامه افزودن PPA ، ENTER  را فشار دهید.
پس از پایان اجرای فرمان ، منابع را با استفاده از دستور apt update ریفرش کنید:
$ sudo apt update
سپس ، Certbot  را نصب خواهید کرد:
$ sudo apt install certbot
قبل از شروع به کار Certbot برای تولید گواهینامه ها برای مثال شما ، اجازه دسترسی به پورت: 80 و پورت: 443 سرور مجازی خود را می دهید تا Certbot بتواند از این پورت ها برای تأیید نام دامنه شما استفاده کند. پورت: 80 برای درخواست های http به سرور مجازی بررسی می شود در حالی که پورت 443 برای درخواست های https استفاده می شود. Certbot ابتدا یک درخواست http را ایجاد می کند و پس از دریافت گواهینامه ها برای سرور مجازی شما ، یک درخواست https را ایجاد می کند که از طریق پورت از طریق پورت: 443 برای گوش دادن به پورت 80 پروکسی می شود. با این کار نصب گواه
ینامه ها با موفقیت تأیید خواهد شد.
ابتدا اجازه دسترسی به پورت 80: را بدهید:
$ sudo ufw allow 80
خروجی زیر را دریافت خواهید کرد:
OutputRule addedRule added (v6)
سپس ، اجازه دسترسی به پورت: 443:
$ sudo ufw allow 443
Output
Rule added
Rule added (v6)
در آخر ، Certbot  را اجرا کنید تا با استفاده از دستور زیر ، گواهینامه هایی را برای مثال خود تولید کنید:
$ sudo certbot certonly –standalone
پرچم standalone  ، certbot  را برای اجرای یک سرور مجازی موقت برای مدت زمان بررسی تأیید می کند.
ایمیل شما را درخواست می کند:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.logPlugins selected: Authenticator standalone, Installer NoneEnter email address (used for urgent renewal and security notices) (Enter ‘c’ tocancel): your_email
یک ایمیل فعال را وارد کنید و ENTER را فشار دهید.
در مرحله بعد ، از شما خواسته خواهد شد تا شرایط سرویس های Certbot و Let’s Encrypt t را مرور و تایید کنید. شرایط را مطالعه کنید اگر قبول کردید ، A را تایپ کنید و ENTER را فشار دهید:
Output- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – -Please read the Terms of Service athttps://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You mustagree in order to register with the ACME server athttps://acme-v02.api.letsencrypt.org/directory- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – -(A)gree/(C)ancel: A
اکنون از شما خواسته می شود که ایمیل خود را با بنیاد الکترونیکی Frontier به اشتراک بگذارید. پاسخ خود را تایپ کنید و ENTER  را فشار دهید:
Output- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – -Would you be willing to share your email address with the Electronic FrontierFoundation, a founding partner of the Let’s Encrypt project and the non-profitorganization that develops Certbot? We’d like to send you email about our workencrypting the web, EFF news, campaigns, and ways to support digital freedom.- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – -(Y)es/(N)o: Y/N
در آخر ، از شما خواسته می شود نام دامنه خود را وارد کنید. نام دامنه خود را بدون هیچ گونه مشخصات پروتکل وارد کنید:
OutputPlease enter in your domain name(s) (comma and/or space separated)  (Enter ‘c’to cancel): your_domainObtaining a new certificatePerforming the following challenges:http-01 challenge for your_domainWaiting for verification…Cleaning up challenges IMPORTANT NOTES: – Congratulations! Your certificate and chain have been saved at:   /etc/letsencrypt/live/your_domain/fullchain.pem   Your key file has been saved at:   /etc/letsencrypt/live/your_domain/privkey.pem   Your cert will expire on 2020-09-28. To obtain a new or tweaked   version of this certificate in the future, simply run certbot   again. To non-interactively renew *all* of your certificates, run   “certbot renew” – Your account credentials have been saved in your Certbot   configuration directory at /etc/letsencrypt. You should make a   secure backup of this folder now. This configuration directory will   also contain certificates and private keys obtained by Certbot so   making regular backups of this folder is ideal. – If you like Certbot, please consider supporting our work by:    Donating to ISRG / Let’s Encrypt:   https://letsencrypt.org/donate   Donating to EFF:                    https://eff.org/donate-le
Certbot تأیید دامنه را انجام خواهد داد و گواهی و کلید برای دامنه شما را ایجاد میکند و آنها در / etc / letsencrypt / live / your_domain ذخیره میکند.
اکنون که گواهی Let’s Encrypt خود را تنظیم کرده اید ، فایل پیکربندی JupyterLab خود را به روز خواهید کرد.
مرحله 3 – پیکربندی  JupyterLab
در این مرحله ، پیکربندی JupyterLab را ویرایش می کنید تا مطمئن شوید که از گواهی Let’s Encrypt که در مرحله 2 ایجاد کرده اید استفاده می کند. همچنین می توانید با استفاده از رمز عبور تنظیم شده در مرحله 1 ، آن را در دسترس قرار دهید.
ابتدا باید پیکربندی JupyterLab را در /home/sammy/.jupyter/jupyter_notebook_config.py ویرایش کنید:
$ nano /home/sammy/.jupyter/jupyter_notebook_config.py
اکنون به خطی که مقدار c.NotebookApp.certfile را تعریف می کند بروید و به شرح زیر آن را به روز کنید:
/home/sammy/.jupyter/jupyter_notebook_config.py
## The full path to an SSL/TLS certificate file.
c.NotebookApp.certfile = ‘/etc/letsencrypt/live/your_domain/fullchain.pem’
سپس ، متغیر c.NotebookApp.keyfile را پیدا کنید و آن را مطابق زیر تغییر دهید:
/home/sammy/.jupyter/jupyter_notebook_config.py
## The full path to a private key file for usage with SSL/TLS.
c.NotebookApp.keyfile = ‘/etc/letsencrypt/live/your_domain/privkey.pem’
c.NotebookApp.certfile و c.NotebookApp.keyfile به گواهی SSLاشاره می کنند که وقتی سعی می کنید از راه دور با استفاده از پروتکل https به سرور مجازی خود دسترسی پیدا کنید ، ارائه می شود.
در مرحله بعد ، به خط تعریف متغیر c.NotebookApp.ip بروید و به شرح زیر به روز کنید:
/home/sammy/.jupyter/jupyter_notebook_config.py
## The IP address the notebook server will listen on.
c.NotebookApp.ip = ‘*’
c.NotebookApp.ip  IP  هایی را تعریف می کند که می توانند به سرور مجازی شما دسترسی پیدا کنند. آن را روی * wildcard قرار داده اید تا از هر رایانه ای که برای دسترسی به JupyterLab لازم دارید دسترسی داشته باشید.
سپس ، پیکربندی c.NotebookApp.open_browser را پیدا کنید و به شرح زیر آن را به روز کنید:
/home/sammy/.jupyter/jupyter_notebook_config.py
## Whether to open in a browser after starting. The specific browser used is
#  platform dependent and determined by the python standard library `webbrowser`
#  module, unless it is overridden using the –browser (NotebookApp.browser)
#  configuration option.
c.NotebookApp.open_browser = False
به طور پیش فرض ، JupyterLab  سعی می کند به طور خودکار بخش مرورگر را شروع کند. از آنجا که در سرور مجازی راه دور مرورگر نداریم ، لازم است آن را خاموش کنید تا از خطاها جلوگیری شود.
در مرحله بعد ، به متغیر c.NotebookApp.password بروید و آن را به شرح زیر تغییر دهید:
/home/sammy/.jupyter/jupyter_notebook_config.py
## Hashed password to use for web authentication.
#
#  To generate, type in a python/IPython shell:
#
#    from notebook.auth import passwd; passwd()
#
#  The string should be of the form type:salt:hashed-password.
c.NotebookApp.password = ‘your_hashed_password’
JupyterLab از این پیکربندی پسورد رمزگذاری شده برای بررسی رمز عبور وارد شده جهت دسترسی به مرورگر شما استفاده می کند.
در آخر ، بیشتر فایل را بررسی کنید و ورودی c.NotebookApp.port را به روز کنید:
/home/sammy/.jupyter/jupyter_notebook_config.py
## The port the notebook server will listen on.
c.NotebookApp.port = 9000
c.NotebookApp.port  برای دسترسی به زمان اجرای JupyterLab یک پورت ثابت تعیین می کند. به این ترتیب ، می توانید فقط از یک فایروال ufw به یک پورت دسترسی داشته باشید.
پس از اتمام کار ، فایل را ذخیره کنید و خارج شوید.
سرانجام ، اجازه عبور در پورت 9000 را بدهید:
$ sudo ufw allow 9000
خروجی زیر را دریافت خواهید کرد:
OutputRule addedRule added (v6)
اکنون که پیکربندی خود را تنظیم کرده اید ، JupyterLab را اجرا خواهید کرد.
مرحله 4 – اجرای  JupyterLab
در این مرحله ، یک مثال آزمایشی از نمونه JupyterLab را انجام می دهید.
ابتدا دایرکتوری فعلی خود را به دیرکتوری هوم کاربر تغییر دهید:
$ cd ~
اکنون مجوزهای دسترسی فایل های گواهینامه را اصلاح کنید تا JupyterLab بتواند به آنها دسترسی پیدا کند. مجوزهای پوشه / etc / letsencrypt را به موارد زیر تغییر دهید:
$ sudo chmod 750 -R /etc/letsencrypt
$ sudo chown sammy:sammy -R /etc/letsencrypt
سپس ، به مثال JupyterLab خود مراجعه کنید تا از دستور زیر استفاده کنید:
jupyter lab
این دستور چندین پارامتر پیکربندی را می پذیرد. با این حال ، از آنجا که ما قبلاً این تغییرات را در فایل پیکربندی ایجاد کرده ایم ، نیازی به ارائه صریح آنها در اینجا نداریم. شما می توانید آنها را به عنوان آرگومان هایی برای این دستور برای غلبه بر مقادیر موجود در فایل پیکربندی ارائه دهید.
اکنون می توانید به https: // your_domain: 9000 بروید تا صفحه ورود به سیستم JupyterLab را دریافت کنید.
اگر با گذرواژه ای که برای مرحله دوم 2 برای JupyterLab تنظیم کرده اید وارد شوید ، رابط JupyterLab به شما ارائه می شود.
در آخر ، دوبار CTRL + C را فشار دهید تا سرور مجازی JupyterLab متوقف شود.
در مرحله بعد ، یک سرویس سیستمی را تنظیم می کنید تا سرور مجازی JupyterLab بطور مداوم در پس زمینه اجرا شود.
مرحله ششم – تنظیم یک سرویس سیستمی
در این مرحله ، شما یک سرویس سیستمی ایجاد خواهید کرد که به JupyterLab اجازه می دهد تا حتی در هنگام خروج از پنجره ترمینال ، عملکرد خود را ادامه دهد. می توانید اطلاعات بیشتر در مورد خدمات سیستمی و واحدهای موجود در این راهنما را در مورد ملزومات systemd مطالعه کنید.
در ابتدا ، باید با استفاده از دستور زیر ، یک فایل .service ایجاد کنید:
$ sudo nano /etc/systemd/system/jupyterlab.service
محتوای زیر را ��ه فایل /etc/systemd/system/jupyterlab.service اضافه کنید:
/etc/systemd/system/jupyterlab.service
[Unit]
Description=Jupyter Lab Server
[Service]
User=sammy
Group=sammy
Type=simple
WorkingDirectory=/home/sammy/
ExecStart=/home/sammy/anaconda3/bin/jupyter-lab –config=/home/sammy/.jupyter/jupyter_notebook_config.py
StandardOutput=null
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
پس از انجام کار ویرایشگر را ذخیره کرده و از آن خارج شوید.
فایل سرویس به صورت خودکار خود را در سیستم به عنوان یک Daemon ثبت می کند. اما به طور پیش فرض اجرا نمی شود.
برای شروع سرویس از دستور systemctl استفاده کنید:
$ sudo systemctl start jupyterlab
این کار سرور مجازی JupyterLab را در پس زمینه شروع می کند. می توانید با استفاده از دستور زیر سرور مجازی را بررسی کنید:
$ sudo systemctl status jupyterlab
خروجی زیر را دریافت خواهید کرد:
Output● jupyterlab.service – Jupyter Lab Server   Loaded: loaded (/etc/systemd/system/jupyterlab.service; disabled; vendor preset: enabled)   Active: active (running) since Sun 2020-04-26 20:58:29 UTC; 5s ago Main PID: 5654 (jupyter-lab)    Tasks: 1 (limit: 1152)   CGroup: /system.slice/jupyterlab.service           └─5654 /home/sammy/anaconda3/bin/python3.7 /home/sammy/anaconda3/bin/jupyter-lab –config=/home/
Q را فشار دهید تا از خروجی وضعیت سرویس خارج شوید.
اکنون می توانید به https: // your_domain: 9000 در هر مرورگر مورد نظر خود بروید ، رمز عبوری را که در مرحله 2 تنظیم کرده اید تهیه کنید و به محیط JupyterLab که روی سرور مجازی خود کار می کند دسترسی پیدا کنید.
مرحله 7 – پیکربندی تجدید گواهی Let’s Encrypt
در این مرحله آخر ، گواهینامه های SSL خود را که توسط Let’s Encrypt تهیه شده است پیکربندی می کنید تا هر 90 روز یکبار به طور خودکار تمدید شود و سپس سرور مجازی را مجدداً ریستارت کنید تا گواهی های جدید لود شود.
در حالی که Certbot از تجدید گواهینامه های نصب شما مراقبت می کند ، به طور خودکار سرور مجازی مجدداً راه اندازی نمی شود. برای پیکربندی سرور مجازی برای راه اندازی مجدد با گواهینامه های جدید ، باید یک پیکربندی جدید برای تنظیمات Certbot برای سرور مجازی خود تهیه کنید.
باید فایل /etc/letsencrypt/renewal/your_domain.conf را ویرایش کرده و یک فایل تازه را به انتهای فایل پیکربندی اضافه کنید.
ابتدا از دستور زیر برای باز کردن فایل /etc/letsencrypt/renewal/your_domain.conf در ویرایشگر استفاده کنید:
$ sudo nano /etc/letsencrypt/renewal/your_domain.conf
سپس در انتهای این فایل موارد زیر را اضافه کنید
/etc/letsencrypt/renewal/your_domain.conf
renew_hook = systemctl reload jupyterlab
فایل را ذخیره کنید و از آن خارج شوید.
در آخر ، دور جدیدی از روند تجدید را اجرا کنید تا صحت اعتبار فایل پیکربندی شما تایید شود:
$ sudo certbot renew –dry-run
اگر این دستور بدون خطا اجرا شود ، تجدید Certbot شما با موفقیت تنظیم شده است و هنگامی که گواهی نزدیک به تاریخ انقضا است ، سرور مجازی خود را به طور خودکار تمدید و ریستارت می کنید.
نتیجه
در این مقاله ، شما یک محیط JupyterLab را بر روی سرور مجازی خود تنظیم کرده و آن را از راه دور در دسترس قرار داده اید. اکنون می توانید از هر مرورگری به پروژه های یادگیری ماشین یا علوم داده خود دسترسی داشته باشید و مطمئن باشید که تمام تبادلات با رمزگذاری SSL در محل اتفاق می افتد. در کنار آن ، محیط شما دارای تمام مزایای سرور مجازیهای مبتنی بر ابر میباشد.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 
0 notes
vpsgoll · 4 years
Text
نحوه نصب Webmin در Ubuntu 20.04
Webmin  یک پنل کنترل وب مدرن است که به شما امکان می دهد سرور مجازی لینوکس خود را از طریق یک رابط مبتنی بر مرورگر مدیریت کنید. با Webmin ، می توانید حساب های کاربری را مدیریت کنید ، تنظیمات DNS را پیکربندی کنید و تنظیمات بسته های معمول را تغییر دهید.
در این آموزش ، Webmin  را بر روی سرور مجازی خود نصب و پیکربندی می کنید و دسترسی به رابط را با داشتن یک گواهی معتبر از Let’s Encrypt  ایمن می کنید. سپس از Webmin برای اضافه کردن حسابهای کاربری جدید استفاده خواهید کرد و کلیه بسته های موجود در داشبورد را روی سرور مجازی خود به روز می کنید.
پیش نیازها
برای تکمیل این آموزش ، به موارد زیر نیاز دارید:
یک سرور مجازی Ubuntu 20.04. این سرور مجازی باید دارای یک کاربر غیر ریشه با امتیازات sudo و فایروال UFW پیکربندی شده باشد. این کار را با دنبال کردن راهنمای تنظیم اولیه سرور مجازی Ubuntu 20.04 ما انجام دهید.
Apache که با دنبال کردن آموزش ما در مورد نحوه نصب وب سرور مجازی Apache در Ubuntu 20.04 نصب شده باشد. اگر این راهنمای پیش نیاز را دنبال می کنید ، حتماً یک هاست مجازی را پیکربندی کنید.
نام دامنه کاملاً واجد شرایط (FQDN) ، با یک رکورد A DNS که به آدرس IP سرور مجازی شما اشاره دارد.
مرحله 1 – نصب  Webmin
ابتدا ایندکس بسته سرور مجازی را به روز کنید اگر این کار را قبلا انجام نداده اید:
·         $ sudo apt update
سپس باید مخزن Webmin را اضافه کنیم تا بتوانیم Webmin را با استفاده از مدیر بسته خود نصب و به روز کنیم. این کار را با اضافه کردن مخزن به فایل /etc/apt/source.list انجام می دهیم.
فایل را در ویرایشگر مورد نظر خود باز کنید.
·         $ sudo nano /etc/apt/sources.list·
سپس این خط را در پایین فایل اضافه کنید تا مخزن جدید اضافه شود:
/etc/apt/sources.list
. . .
deb http://download.webmin.com/download/repository sarge contrib
فایل را ذخیره کرده و از ویرایشگر خارج شوید.  اگر از nano استفاده میکنید این کار را با CTRL+X, Y, سپس  ENTER انجام دهید.
در مرحله بعد ، کلید Webmin PGP را اضافه خواهید کرد تا سیستم شما به مخزن جدید اعتماد کند. برای انجام این کار، باید بسته gnupg1  را نصب کنید که ابراز GNU برای ارتباط ایمن و ذخیره داده است.
پس از آن، کلید Webmin PGP را با  wget نصب و آن را به لیست کلیدهای سیستم خود اضافه کنید:
$ wget -q -O- http://www.webmin.com/jcameron-key.asc | sudo apt-key add
فهرست بسته سرور مجازی خود را به روز کنید  تا منابع جدید Webmin را شامل شود:
·         $ sudo apt update·          ·
سپس Webmin را نصب کنید:
·         $ sudo apt install webmin ·
پس از اتمام نصب ، خروجی زیر ارائه می شود:
Output. . .Webmin install complete. You can now login to https://your_server:10000 as root with your root password, or as any user who can use sudo.·
توجه: اگر ufw را در مرحله پیش شرط نصب کردید ، باید دستور sudo ufw allow 10000را اجرا کنید تا Webmin از طریق فایروال امکان پذیر باشد. برای امنیت بیشتر ، بهتر است فایروال خود را پیکربندی کنید تا فقط از محدوده های خاص IP اجازه دسترسی به این پورت را داشته باشید.
بیایید با افزودن یک گواهی معتبر ، Webmin  را ایمن کنیم.
مرحله 2 – اضافه کردن یک گواهی معتبر با Let’s Encrypt
در حال حاضر Webmin  برای استفاده از HTTPS پیکربندی شده است ، اما از یک گواهی نامه امضاء نشده و غیرقابل اعتماد استفاده می کند. بیایید آن را با یک گواهی معتبر از Let’s Encrypt جایگزین کنیم.
به https: // your_domain: 9000 در مرورگر وب خود بروید و your_domain را با نام دامنه خود به آدرس IP سرور مجازی خود جایگزین کنید.
توجه: هنگام ورود به سیستم برای اولین بار ، یک اخطار “Invalid SSL” مشاهده خواهید کرد. این اخطار ممکن است بسته به مرورگر شما متفاوت باشد اما دلیل آن این است که سرور مجازی یک گواهی self-signed ایجاد کرده است. امکان استثناء  را بدهید و به دامنه خود بروید تا بتوانید گواهی خود امضا شده را با یک گواهی Let’s Encrypt جایگزین کنید.
به شما یک صفحه ورود به سیستم ارائه می شود. ضمن انجام پیش نیازهای این آموزش ، با کاربر غیر ریشه ای که ایجاد کرده اید وارد سیستم شوید.
پس از ورود به سیستم ، اولین صفحه ای که مشاهده خواهید کرد داشبورد Webmin است. قبل از استفاده از یک گواهی معتبر ، باید نام میزبان سرور مجازی را تنظیم کنید. همانطور که در شکل زیر نشان داده شده است ، به قسمت System hostname رفته و روی پیوند سمت راست کلیک کنید:
شما را به صفحه Hostname and DNS Client میبرد. فیلد Hostname  را پیدا کنید و نام دامنه کاملاً واجد شرایط خود را وارد این قسمت کنید. سپس بر روی دکمه ذخیره در پایین صفحه کلیک کنید تا تنظیمات اعمال شود.
پس از تنظیم نام میزبان خود ، بر روی منوی کشویی Webmin در نوار پیمایش سمت چپ کلیک کنید و سپس بر روی Webmin Configuration  کلیک کنید.
از صفحه پیکربندی Webmin   ، SSL Encryption  را از لیست آیک��ن ها انتخاب کنید ، و سپس روی سربرگ Let’s Encrypt کلیک کنید. صفحه نمایشی مانند شکل زیر را مشاهده خواهید کرد:
در این صفحه ، به Webmin  می گویید که چگونه گواهینامه شما را دریافت و تمدید کند. گواهینامه های رمزگذاری شده پس از 3 ماه منقضی میشوند ، اما می توانید به Webmin  دستور دهید که بطور خودکار سعی کند هر ماه مجوز Let’s Encrypt  را تمدید نماید. Let’s Encrypt به دنبال یک فایل تأیید بر روی سرور مجازی میباشد ، بنابراین ما Webmin را پیکربندی می کنیم تا فایل تأیید را درون پوشه / var / www / your_domain قرار دهد ، این پوشه ای است که وب سرور مجازی Apache که در پیش نیازها پیکربندی کرده اید از آن استفاده می کند. برای تنظیم گواهینامه خود این مراحل را دنبال کنید:
1-  Hostnames for certificate  را با FQDN خود پر کنید.
2- برای Website root directory for validation file ، دکمه Other Directory را انتخاب کرده و /var/www/htmlرا وارد کنید. با فرض اینکه آموزش پیش نیاز APACHE را دنبال کرده باشید، /var/www/your_domain خواهد بود.
3- برای بخش Months between automatic renewal ، گزینه Only renew manually را با وارد کردن 1 در جعبه ورودی کنسل کنید، و دکمه رادیو را در سمت چپ جعبه ورودی انتخاب کنید.
روی دکمه  Request Certificate کلیک کنید. بعد از چند ثانیه ، صفحه تأیید را مشاهده خواهید کرد.
برای استفاده از گواهینامه جدید ، روی دکمه بازگشت به پیکربندی Webmin   در صفحه تأیید کلیک کنید. از آن صفحه ، به پایین بروید و بر روی دکمه Restart Webmin کلیک کنید. حدود 30 ثانیه صبر کنید و سپس صفحه را مجدد لود کنید و دوباره وارد سیستم شوید. اکنون مرورگر شما باید نشان دهد که گواهی معتبر است.
مرحله 3 – استفاده از  Webmin
اکنون یک نمونه کار ایمن از Webmin تنظیم کرده اید. بیایید نحوه استفاده از آن را بررسی کنیم.
Webmin  ماژول های مختلف زیادی دارد که می تواند همه چیز را از سرور مجازی BIND DNS گرفته تا چیزی به سادگی اضافه کردن کاربران به سیستم را کنترل کند. بیایید به نحوه ایجاد یک کاربر جدید بپردازیم و سپس نحوه به روزرسانی بسته های سیستم خود را با استفاده از Webmin بررسی کنیم.
مدیریت کاربران و گروه ها
ابتدا بر روی منوی System در نوار کناری سمت چپ کلیک کرده و سپس روی لینک Users and Groups کلیک کنید. از اینجا می توانید کاربران و گروه ها را اضافه و مدیریت کنید.
بیایید کاربر جدیدی به نام deploy ایجاد کنیم که می توانید از آن برای میزبانی برنامه های وب استفاده کنید. هنگام ایجاد کاربر ، می توانید گزینه هایی را برای انقضاء رمز عبور ، پوسته کاربر و اینکه آیا مجاز به ورود به دیرکتوری هوم هستند ، تعیین کنید.
برای افزودن کاربر ، روی Create a new user ، که در بالای جدول کاربران قرار دارد ، کلیک کنید. این گزینه صفحه ایجاد کاربر را نمایش می دهد ، در آنجا می توانید نام کاربری ، رمز عبور ، گروه ها و گزینه های دیگر را ایجاد کنید. برای ایجاد کاربر این دستورالعمل ها را دنبال کنید:
1- نام کاربری را با deploy پر کنید.
2- برای شناسه کاربر automatic را انتخاب کنید.
3- real name را با نام توصیفی مانند deployment user پر کنید.
4- برای Home Directory ، Automatic  را انتخاب کنید.
5- برای Shell ، از لیست کشویی گزینه / bin / bash را انتخاب کنید.
6- برای گذرواژه ، Normal Password  را انتخاب کرده و پسورد مورد نظر خود را تایپ کنید.
7- برای primary group ، New group with same name as userرا انتخاب کنید.
8- برای گروه ثانویه ، از لیست همه گروه ها sudo را انتخاب کنید. باید به طور خودکار به لیست In groups اضافه شود ، اما اگر این گزینه نیست ، دکمه -> را فشار دهید تا آن را اضافه کنید.
برای ایجاد کاربر جدید روی create کلیک کنید. کاربرdeploy  را در یک ترتیب کوتاه ایجاد میکند.
در مرحله بعدی ، بیایید ببینیم که چگونه به روزرسانی های سیستم خود را نصب کنیم.
به روزرسانی بسته ها
Webmin  به شما امکان می دهد همه بسته های خود را از طریق رابط کاربری آن به روز کنید. برای به روزرسانی همه بسته های خود ، ابتدا بر روی دکمه Dashboard در بالای نوار کناری سمت چپ کلیک کرده و سپس قسمت Update Package را پیدا کنید. اگر به روزرسانی وجود داشته باشد ، پیوندی را مشاهده می کنید که تعداد به روزرسانی های موجود را بیان می کند.
برای شروع به روزرسانی ، روی Update selected packages بزنید تا به روز رسانی شروع شود. ممکن است از شما خواسته شود که سرور مجازی را ریبوت کنید ، که می توانید از طریق رابط Webmin نیز این کار را انجام دهید.
نتیجه
اکنون یک نمونه کار ایمن Webmin  دارید و از رابط کاربری برای ایجاد یک کاربر و به روزرسانی بسته ها استفاده کردید. Webmin  به شما امکان دسترسی به موارد زیادی را می دهد که به طور معمول باید از طریق کنسول به آنها دسترسی پیدا کنید ، و آنها را به روشی بصری سازماندهی می کند. به عنوان مثال ، در صورت نصب Apache ، می توانید زبانه پیکربندی آن را در زیر سرور مجازیها ، و سپس Apache پیدا کنید.
رابط را جستجو کنید یا برای یادگیری بیشتر درباره مدیریت سیستم خود با Webmin ، مطالب Official Webmin wiki را مطالعه کنید.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 
0 notes
vpsgoll · 4 years
Text
نحوه بازنویسی آدرس های اینترنتی با mod_rewrite برای Apache در اوبونتو 20.04
ماژول mod_rewrite Apache به شما امکان می دهد URL ها را با تمیزتر بازنویسی کنید ، مسیرهای قابل خواندن توسط انسان را به رشته های پرس و جوی متناسب با کد تبدیل کنید. همچنین به شما امکان می دهد URL ها را بر اساس شرایط بازنویسی کنید.
فایل .htaccess به شما امکان می دهد بدون دسترسی به فایل های پیکربندی سرور مجازی ، قوانین بازنویسی را ایجاد و اعمال کنید. با قرار دادن فایل .htaccess در ریشه وب سایت خود ، می توانید بازنویسی ها را بر اساس هر سایت یا هر دایرکتوری مدیریت کنید.
در این آموزش ، mod_rewrite  را فعال کرده و از فایلهای .htaccess برای ایجاد یک تغییر مسیر URL اصلی استفاده می کنید ، و سپس چند مورد استفاده پیشرفته را پیدا می کنید.
پیش نیازها
برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:
یک سرور مجازی Ubuntu 20.04 که با دنبال کردن راهنمای تنظیم اولیه سرور مجازی Ubuntu 20.04 راه اندازی و شامل یک کاربر sudo غیر ریشه و فایروال تنظیم شده باشد.
Apache که با دنبال کردن مرحله 1 نحوه نصب پشته Linux ، Apache ، MySQL ، PHP (LAMP)  در اوبونتو 20.04 نصب شده باشد.
مرحله 1 – فعال کردن  mod_rewrite
برای اینکه Apache بتواند قوانین بازنویسی را درک کند ، ابتدا باید mod_rewrite را فعال کنیم. قبلاً نصب شده است ، اما در نصب پیش فرض Apache غیرفعال است. برای فعال کردن ماژول از دستور a2enmod استفاده کنید:
·         $ sudo a2enmod rewrite·
با این کار ماژول فعال می شود یا به شما هشدار می دهد که ماژول از قبل فعال شده است. برای اجرای این تغییرات ، Apache  را مجدداً راه اندازی کنید.
·         $ sudo systemctl restart apache2·
اکنون mod_rewrite کاملاً فعال است. در مرحله بعدی، یک فایل .htaccess را برای تعریف قوانین بازنویسی برای تغییر مسیرها تنظیم خواهیم کرد.
مرحله 2 – تنظیم  .htaccess
یک فایل .htaccess به ما امکان می دهد قوانین بازنویسی خود را بدون دسترسی به فایل های پیکربندی سرور مجازی اصلاح کنیم. به همین دلیل ، .htaccess برای امنیت برنامه وب شما بسیار مهم است. دوره ای که نام فایل قبل از آن است ، اطمینان حاصل می کند که فایل مخفی است.
توجه: هر قانونی که می توانید در یک فایل .htaccess قرار دهید ، می تواند مستقیماً در فایل های پیکربندی سرور مجازی قرار گیرد. در حقیقت ، اسناد رسمی Apache  استفاده از فایلهای پیکربندی سرور مجازی را به جای .htaccess توصیه می کند زیرا Apache آن را سریعتر از این پردازش می کند.
با این حال ، در این مثال ساده ، افزایش عملکرد ناچیز خواهد بود. علاوه بر این ، تنظیم قوانین در .htaccess مناسب است ، به خصوص با چندین وب سایت در همان سرور مجازی. برای اجرای تغییرات نیازی به راه اندازی مجدد سرور مجازی نیست و نیازی به امتیازات اصلی برای ویرایش آن قوانین ، ساده سازی تعمیر و نگهداری و ایجاد تغییرات با یک حساب غیر شخصی نیست. برخی از نرم افزارهای منبع باز منبع آزاد ، مانند WordPress و Joomla ، اغلب برای تغییر و ایجاد قوانین اضافی در صورت تقاضا به یک فایل .htaccess متکی هستند.
قبل از شروع استفاده از فایل های .htaccess ، باید تنظیمات دیگری را انجام و آن را ایمن کنید.
به طور پیش فرض ، Apache با استفاده از فایل .htaccess اعمال قوانین بازنویسی را ممنوع می کند ، بنابراین ابتدا باید تغییراتی در فایل اعمال کنید. فایل پیش فرض پیکربندی Apache را با استفاده از nano یا ویرایشگر متن مورد علاقه خود باز کنید.
·         $ sudo nano /etc/apache2/sites-available/000-default.conf·
در داخل آن فایل ، بلوک <VirtualHost *: 80> را که از خط اول شروع می شود ، پیدا خواهید کرد. در داخل آن بلوک ، بلوک جدید زیر را اضافه کنید تا فایل پیکربندی شما مانند زیر باشد. اطمینان حاصل کنید که همه بلوک ها به درستی قرار گرفته اند.
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .
</VirtualHost>
فایل را ذخیره کنید و ببندید. برای اجرای این تغییرات ، Apache را مجدداً راه اندازی کنید.
·         $ sudo systemctl restart apache2·
اکنون ، یک فایل .htaccess را در webroot ایجاد کنید.
·         $ sudo nano /var/www/html/.htaccess·
این خط را در بالای فایل جدید اضافه کنید تا موتور بازنویسی فعال شود.
/var/www/html/.htaccess
RewriteEngine on
فایل را ذخیره کرده و خارج شوید.
اکنون ما یک فایل .htaccess عملیاتی داریم که می توانیم از آن استفاده کنیم تا قوانین مسیریابی برنامه وب را کنترل کنیم. در مرحله بعد ، ما فایلهای وب سایت نمونه را ایجاد خواهیم کرد که برای نشان دادن قوانین بازنویسی قوانین از آنها استفاده خواهیم کرد.
مرحله 3 – پیکربندی بازنویسی  URL
در اینجا ، یک بازنویسی URL اصلی را تنظیم می کنیم که URL های زیبا را به مسیرهای واقعی به صفحات تبدیل می کند. به طور خاص ، به کاربران این امکان را می دهیم که به http: // your_server_ip / about دسترسی پیدا کنند ، اما صفحه ای به نام about.html را نمایش می دهند.
با ایجاد فایلی به نام about.html در webroot شروع کنید.
·         $ sudo nano /var/www/html/about.html·
کد HTML زیر را در فایل کپی کنید ، سپس آن را ذخیره کرده و ببندید.
/var/www/html/about.html
<html>
<head>
<title>About Us</title>
</head>
<body>
<h1>About Us</h1>
</body>
</html>
می توانید به این صفحه به آدرس http: //your_server_ip/about.html دسترسی پیدا کنید ، اما توجه داشته باشید که اگر سعی کنید به http: // your_server_ip / About خود دسترسی پیدا کنید ، خطای 404 Not Found  را مشاهده خواهید کرد. برای دسترسی به صفحه با استفاده از /about ، یک قانون بازنویسی ایجاد خواهیم کرد.
همه RewriteRules از این قالب پیروی می کنند:
General RewriteRule structure
RewriteRule pattern substitution [flags]
RewriteRule بخشنامه را مشخص می کند.
pattern یک عبارت معمولی است که رشته مورد نظر را از URL مطابقت می دهد ، همان چیزی است که بیننده در مرورگر تایپ می کند.
substitution مسیر رسیدن به URL واقعی ، یعنی مسیر سرورهای فایل Apache است.
flags پارامترهای اختیاری هستند که می توانند نحوه عملکرد قانون را تغییر دهند.
بیایید قانون بازنویسی URL ما را ایجاد کنیم. فایل .htaccess را باز کنید.
·         $ sudo nano /var/www/html/.htaccess·
بعد از اولین خط ، RewriteRule هایلایت شده را اضافه کرده و فایل را ذخیره کنید.
در این حالت ، ^about$ الگو است ، About.html ، substitution است ، و [NC] پرچم است. مثال ما از چند کاراکتر با معنی خاص استفاده می کند:
^ نشان دهنده شروع URL پس از your_server_ip/ است.
$ نشانگر پایان URL است.
about با رشته “about” جفت میشود
html فایل واقعی است که کاربر به آن دسترسی پیدا می کند.
[NC] پرچمی است که قضیه را بی حس می کند.
اکنون می توانید به مرورگر خود به http: // your_server_ip / about دسترسی پیدا کنید. در واقع ، با این قانون که در بالا نشان داده شده است ، آدرس های اینترنتی زیر به about.html اشاره می کنند:
http: // your_server_ip / about ، به دلیل تعریف قانون.
http: // your_server_ip / About ، زیرا این قانون به حروف حساس نیست.
http: //your_server_ip/about.html ، زیرا نام فایل مناسب اصلی همیشه کار خواهد کرد.
با این حال ، موارد زیر کار نخواهد کرد:
http: // your_server_ip / about / ، زیرا این قانون به صراحت بیان می کند که ممکن است بعد از آن چیزی وجود نداشته باشد ، زیرا کاراکتر $ بعد از about ظاهر می شود.
http: // your_server_ip / contact ، زیرا با رشته about  در قانون مطابقت نمی دهد.
اکنون یک فایل .htaccess عملیاتی با یک قانون اساسی دارید که می توانید نیازهای خود را تغییر داده و گسترش دهید. در بخش های بعدی ، دو نمونه دیگر از بخشنامه های متداول را نشان خواهیم داد.
مثال 1 – ساده سازی رشته های جستار با  RewriteRule
برنامه های وب اغلب از رشته های جستار استفاده می کنند ، که با استفاده از علامت سؤال (؟) بعد از آدرس به URL اضافه می شوند. پارامترهای جداگانه با استفاده از چ (&) محدود می شوند. رشته های جستار ممکن است برای انتقال داده های اضافی بین صفحات برنامه فردی استفاده شود.
به عنوان مثال ، یک صفحه نتیجه جستجو که به زبان PHP نوشته شده است ممکن است از URL مانند http://example.com/results.php؟item=shirt&season=summer استفاده کند. در این مثال ، دو پارامتر اضافی به اسکریپت برنامه result.php موهومی منتقل می شود: item ، با متغیر shirt ، و مقدار summer. برنامه ممکن است از اطلاعات رشته پرس و جو برای ایجاد صفحه مناسب برای بازدید کننده استفاده کند.
قوانین بازنویسی Apache اغلب برای ساده کردن پیوندهای طولانی و ناخوشایند مانند موارد فوق در URL های دوستانه که تایپ و تفسیر بصری آسان تر است ، به کار می روند. در این مثال ، ما می خواهیم لینک بالا را ساده کنید تا به http://example.com/shirt/summer تبدیل شوید. پارامتر shirt  و summer  هنوز در آدرس هستند اما بدون نام رشته و نام اسکریپت.
در اینجا یک قانون برای اجرای این وجود دارد:
Simple substitution
RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer [QSA]
shirt/summer به طور واضح در آدرس درخواستی مطابقت دارد و به Apache گفته می شود که به جای آن ، results.php?item=shirt&season=summer را ارائه دهد.
پرچم های [QSA] معمولاً در قوانین بازنویسی استفاده می شوند. آنها به Apache می گویند هر رشته درخواست اضافی را در URL ارائه شده اضافه کند ، بنابراین اگر بازدید کننده http://example.com/shirt/summer?page=2  را تایپ کند، سرور مجازی
با results.php?item=shirt&season=summer&page=2 پاسخ خواهد داد. بدون آن ، رشته پرس و جو اضافی حذف می شود.
در حالی که این روش به افکت مطلوب دست می یابد ، هر دو نام آیتم و فصل در قانون کدگذاری می شوند. این بدان معنی است که این قانون برای سایر موارد ، مانند شلوار ، یا فصولی مانند زمستان کار نخواهد کرد.
برای عمومی تر کردن این قاعده ، می توانیم از عبارات معمول برای مطابقت با قسمت های اصلی آدرس استفاده کنیم و از آن قسمت ها در الگوی تعویض استفاده کنیم. سپس قانون اصلاح شده به شرح زیر خواهد بود:
Simple substitution
RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]
اولین گروه عبارت معمول در پرانتز با رشته ای حاوی ک��راکترهای الفبا و اعداد مانند shirt  یا pants  مطابقت دارد و قطعه را به عنوان متغیر $ 1 ذخیره می کند. دومین گروه عبارت معمول در پرانتز دقیقاً با summer, winter, fall, یا  spring مطابقت دارد و به همین ترتیب قطعه را به عنوان $2 ذخیره می کند.
قطعات همسان پس از آن به جای shirt  و summer  که قبلاً از آنها استفاده می کردیم در URL نتیجه در متغیرهای item  و season  استفاده می شوند.
موارد فوق ، به عنوان مثال ، http://example.com/pants/summer را به http://example.com/results.php؟item=pants&season=summer تبدیل می کند. این مثال همچنین اثبات آینده است ، و به چندین item  و season  اجازه می دهد تا با استفاده از یک قانون واحد به طور صحیح بازنویسی شوند.
مثال 2 – اضافه کردن شرایط با منطق با استفاده از RewriteConds
بازنویسی قوانین الزاماً همیشه یک به یک و بدون محدودیت ارزیابی نمی شوند. دستورالعمل RewriteCond به ما امکان می دهد تا شرایط را برای بازنویسی خود اضافه کنیم تا هنگام پردازش قوانین ، کنترل کنیم. کلیه RewriteConds با فرمت زیر عمل می کند:
General RewriteCond structure
RewriteCond TestString Condition [Flags]
RewriteCond بخشنامه RewriteCond را مشخص می کند.
TestString رشته ای است که باید در برابر آن آزمایش کنید.
Condition الگو یا شرط مطابقت است.
Flags پارامترهای اختیاری هستند که ممکن است شرایط و قوانین ارزیابی را تغییر دهند.
اگر RewriteCond درست ارزیابی شود ، RewriteRule  بلافاصله در نظر گرفته می شود. در صورت عدم موفقیت ، این قانون منتفی می شود. RewriteCond  چندگانه ممکن است یکی پس از دیگری مورد استفاده قرار گیرد و با رفتار پیش فرض ، همه باید درست ارزیابی کنند تا قاعده زیر در نظر گرفته شود.
به عنوان ��مونه ، فرض می کنیم شما می خواهیئ به جای نشان دادن صفحه خطای استاندارد 404 Not Found ، همه درخواست ها را به فایل ها یا دیرکتوریهای غیر موجود در سایت خود به صفحه اصلی برگردانید. این امر می تواند با قوانین زیر انجام شود:
Redirect all requests to non-existent files and directories to home page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . / [R=301]
به این شرح:
%{REQUEST_FILENAME} رشته ای برای بررسی است. در این حالت ، نام فایل درخواستی است ، که یک متغیر سیستمی برای هر درخواست است.
-f  یک وضعیت داخلی است که تأیید می کند که آیا نام درخواست شده در دیسک وجود دارد یا فایل است. ! یک عامل منفی است. ! -f  ترکیبی فقط درصورتی که یک نام مشخص وجود نداشته باشد یا فایل نداشته باشد ، درست ارزیابی می شود.
به طور مشابه ، ! -d  فقط درصورتی که یک نام مشخص وجود نداشته باشد یا یک دیرکتوری نباشد ، درست ارزیابی می شود.
RewriteRule در خط نهایی فقط برای درخواست ها به فایل ها یا دایرکتوری های غیر موجود وارد خواهد شد. خود RewriteRule  بسیار ساده است. نقطه . در این الگو با هر چیزی مطابقت دارد و جایگزینی هر درخواست را به ریشه / وب سایت هدایت می کند.
علاوه بر این ، پرچم [R = 301]  به Apache می گوید یک کد پاسخ HTTP  ، 301 Moved Permanently را به مرورگر بازگرداند ، در نتیجه مرورگر می داند که تغییر مسیر اتفاق افتاده است و صریحاً به جای URL درخواست شده ، ریشه وب سایت را واگذار می کند. و تغییری در نوار آدرس مرورگر اعمال میشود.
بدون این پرچم ، Apache  محتوای اصلی وب سایت را بر می گرداند ، اما مرورگر همچنان فکر می کند URL صفحه درخواستی وجود داشته باشد و آدرس درخواست شده را ابتدا در نوار آدرس نشان دهد.
نتیجه
mod_rewrite  به شما امکان می دهد URL های قابل خواندن توسط انسان را ایجاد کنید. در این آموزش شما از دستورالعمل RewriteRule برای هدایت آدرس های اینترنتی از جمله آدرس ها با رشته های پرس و جو استفاده کرده اید. همچنین با استفاده از دستورالعمل RewriteCond  URL  های هدایت شونده مشروط را نوشتید.
اگر می خواهید در مورد mod_rewrite اطلاعات بیشتری کسب کنید ، به mod_rewrite Introduction و مستندات رسمی Apache  برای mod_rewrite نگاهی بیندازید.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 
0 notes
vpsgoll · 4 years
Text
چگونه می توان REST API را با Prisma و PostgreSQL ساخت
Prisma ، یک ابزار پایگاه داده منبع باز است. از سه ابزار اصلی تشکیل شده است: Prisma Client: سازنده جستار خودکار و از نوع مطمئن برای Node.js و TypeScript. Prisma Migrate: یک سیستم توصیفی انتقال و مدل سازی داده ها. Prisma Studio: رابط کاربری گرافیکی برای مشاهده و ویرایش داده ها در پایگاه داده خود. این ابزارها با هدف افزایش بهره وری یک برنامه نویس در گردش کار در پایگاه داده خود ارائه می شود. یکی از مهمترین مزایای Prisma میزان انتزاع ارائه شده است: به جای فهمیدن جستارهای پیچیده SQL یا انتقال شماتیک ها ، توسعه دهندگان برنامه می توانند هنگام استفاده از Prisma برای کار با پایگاه داده خود ، اطلاعات خود را به روشی بصری تر استدلال کنند. در این آموزش ، شما یک API REST برای یک برنامه بلاگ نویسی کوچک در TypeScript با استفاده از Prisma و یک پایگاه داده PostgreSQL ایجاد خواهید کرد. پایگاه داده PostgreSQL را بصورت محلی با Docker تنظیم می کنید و مسیرهای REST API را با استفاده از Express پیاده سازی می کنید. در پایان آموزش ، یک وب سرور دارید که بصورت محلی روی دستگاه شما کار می کند که می تواند به درخواست های مختلف HTTP پاسخ دهد و داده ها را در دیتابیس بخواند و بنویسد. پیش نیازها این آموزش موارد زیر را فرض می کند: Node.js v10 یا بالاتر روی دستگاه شما نصب شده باشد. برای تنظیم این گزینه می توانید از یکی از روش های نصب Node.js و ایجاد محیط توسعه محلی برای سیستم عامل خود استفاده کنید. Docker نصب شده بر روی دستگاه تان (برای اجرای پایگاه داده PostgreSQL) . می توانید از طریق وب سایت Docker آن را روی macOS و Windows نصب کنید ، یا نحوه نصب و استفاده از Docker را برای توزیع های لینوکس دنبال کنید. آشنایی اولیه با TypeScript و API های REST مفید است اما برای این آموزش لازم نیست. مرحله 1 – ایجاد پروژه TypeScript در این مرحله با استفاده از npm یک پروژه ساده TypeScript تنظیم می کنید. این پروژه پایه و اساس API REST است که می خواهید در طول دوره این آموزش بسازید. ابتدا یک دایرکتوری جدید برای پروژه خود ایجاد کنید: $ mkdir my-blog
در مرحله بعد ، به دیرکتوری بروید و یک پروژه npm خالی را آغاز کنید. توجه داشته باشید که گزینه -y در اینجا بدان معنی است که شما از گزینه های تعاملی فرمان عبور میکنید. برای اجرای دستورها ، -y را از دستور حذف کنید: $ cd my-blog
$ npm init -y
برای اطلاعات بیشتر در مورد این پیام ها ، می توانید مرحله 1 نحوه استفاده از ماژول های Node.js را با npm و pack.json دنبال کنید. با پاسخهای پیش فرض موجود ، خروجی مشابه موارد زیر را دریافت خواهید کرد: Output Wrote to /…/my-blog/package.json:
{ “name”: “my-blog”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “test”: “echo \”Error: no test specified\” && exit 1″ }, “keywords”: [], “author”: “”, “license”: “ISC” }
این دستور یک فایل pack.json حداقلی ایجاد می کند که شما به عنوان فایل پیکربندی پروژه npm خود استفاده می کنید. اکنون آماده تنظیم پیکربندی TypeScript در پروژه خود هستید. دستور زیر را برای ستاپ ساده TypeScript اجرا کنید: npm install typescript ts-node @types/node –save-dev
این دستور، سه بسته به عنوان متعلقات توسعه در پروژه شما نصب می کند: Typescript: زنجیره ابزار TypeScript. ts-node: بسته ای برای اجرای برنامه های TypeScript بدون کامپایل قبلی با JavaScript @ types / node: تعاریف نوع TypeScript برای Node.js. آخرین کاری که باید انجام دهید اضافه کردن فایل tsconfig.json است تا اطمینان حاصل شود که TypeScript به درستی برای برنامه ای که می خواهید بسازید پیکربندی شده است. ابتدا ، دستور زیر را برای ایجاد فایل اجرا کنید: $ nano tsconfig.json
کد JSON زیر را در فایل اضافه کنید: my-blog/tsconfig.json { “compilerOptions”: { “sourceMap”: true, “outDir”: “dist”, “strict”: true, “lib”: [“esnext”], “esModuleInterop”: true } }
فایل را ذخیره و از آن خارج شوید. این یک پیکربندی استاندارد و حداقل برای یک پروژه TypeScript است. اگر می خواهید در مورد خصوصیات فردی فایل پیکربندی بیاموزید ، می توانید آنها را در مستندات TypeScript جستجو کنید. شما پروژه ساده TypeScript خود را با استفاده از npm تنظیم کرده اید. سپس پایگاه داده PostgreSQL خود را با Docker تنظیم می کنید و Prisma را به آن وصل می کنید. مرحله 2 – تنظیم Prisma با PostgreSQL در این مرحله Prisma CLI را نصب می کنید ، فایل شماتیک اولیه Prisma خود را ایجاد کرده و PostgreSQL را با Docker تنظیم می کنید و Prisma را به آن وصل می کنید. شماتیک Prism فایل پیکربندی اصلی برای تنظیم Prisma شما است و شامل شماتیک پایگاه داده شما میباشد. با نصب دستور Prisma CLI با دستور زیر شروع کنید: $ npm install @prisma/cli –save-dev
به عنوان بهترین روش ، توصیه می شود که Prisma CLI را بصورت محلی در پروژه خود نصب کنید (برخلاف نصب جهانی). این امر به شما کمک می کند تا در صورت داشتن بیش از یک پروژه Prisma در دستگاه خود ، از تداخل نسخه ها جلوگیری کنید. در مرحله بعد ، پایگاه داده PostgreSQL خود را با استفاده از Docker تنظیم می کنید. با دستور زیر یک فایل جدید Docker Compose ایجاد کنید: $ nano docker-compose.yml
اکنون کد زیر را به فایل جدید ایجاد شده اضافه کنید: my-blog/docker-compose.yml version: ‘3.8’ services: postgres: image: postgres:10.3 restart: always environment: – POSTGRES_USER=sammy – POSTGRES_PASSWORD=your_password volumes: – postgres:/var/lib/postgresql/data ports: – ‘5432:5432’ volumes: postgres:
این فایل Docker Compose یک پایگاه داده PostgreSQL را تنظیم می کند که از طریق پورت 5432 کانتینر Docker قابل دسترسی است. همچنین توجه داشته باشید که اعتبارنامه دیتابیس در حال حاضر به عنوان sammy (کاربر) و your_password (رمز عبور) تعیین شده است. در تنظیم این اعتبارها با کاربر و رمز عبور دلخواه خود اختیارعمل کامل دارید. فایل را ذخیره کنید و از آن خارج شوید. با استفاده از این ستاپ، سرور پایگاه داده PostgreSQL را با دستور زیر راه اندازی کنید: $ docker-compose up -d
خروجی این دستور مشابه این است: Output Pulling postgres (postgres:10.3)… 10.3: Pulling from library/postgres f2aa67a397c4: Pull complete 6de83ca23e55: Pull complete . . . Status: Downloaded newer image for postgres:10.3 Creating my-blog_postgres_1 … done
با دستور زیر می توانید تأیید کنید که سرور پایگاه داده در حال اجرا است: $ docker ps
این چیزی شبیه به این نتیجه خواهد داد: Output CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8547f8e007ba postgres:10.3 “docker-entrypoint.s…” 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp my-blog_postgres_1
با اجرای سرور پایگاه داده ، اکنون می توانید ستاپ Prisma خود را ایجاد کنید. دستور زیر را از Prisma CLI اجرا کنید: با این کار خروجی زیر چاپ می شود: $ npx prisma init
خروجی زیر را پرینت میکند: Output  Your Prisma schema was created at prisma/schema.prisma. You can now open it in your favorite editor.
توجه داشته باشید که به عنوان بهترین کار ، باید تمام فراخوانی های Prisma CLI را با npxپیشونددار کنید. این کار اطمینان حاصل می کند نصب محلی شما در حال استفاده است. پس از اجرای فرمان ، Prisma CLI یک پوشه جدید به نام prisma را در پروژه شما ایجاد کرد. این شامل دو فایل زیر است: schema.prisma: فایل اصلی پیکربندی پروژه Prisma شما (شامل مدل داده شما خواهد بود(. .env: یک فایل dotenv برای مشخص کردن URL اتصال به پایگاه داده خود. برای اطمینان از اینکه Prisma از مکان پایگاه داده شما اطلاع دارد ، فایل .env را باز کنید و متغیر محیط DATABASE_URL را تنظیم کنید. ابتدا فایل .env را باز کنید: $ nano prisma/.env
اکنون می توانید متغیر محیط را به شرح زیر تنظیم کنید: my-blog/prisma/.env DATABASE_URL=”postgresql://sammy:your_password@localhost:5432/my-blog?schema=public”
اطمینان حاصل کنید که اعتبار دیتابیس را به مواردی که در فایل Docker Compose معرفی کرده اید تغییر دهید. برای کسب اطلاعات بیشتر در مورد قالب URL اتصال ، به اسناد Prisma مراجعه کنید. پس از اتمام کار ، فایل را ذخیره کنید و خارج شوید. در این مرحله ، پایگاه داده PostgreSQL خود را با Docker تنظیم کرده ، Prisma CLI را نصب کرده و Prisma را از طریق یک متغیر محیط به پایگاه داده وصل می کنید. در بخش بعدی ، مدل داده خود را تعیین کرده و جداول بانک اطلاعاتی خود را ایجاد خواهید کرد. مرحله 3 – تعریف مدل داده خود و ایجاد جداول بانک اطلاعاتی در این مرحله مدل داده خود را در فایل شماتیک Prisma تعریف خواهید کرد. سپس این مدل داده با Prisma Migrate به پایگاه داده نگاشت می شود که عبارت SQL را برای ایجاد جداول متناسب با مدل داده شما تولید و ارسال می کند. از آنجا که شما در حال ایجاد یک برنامه وبلاگ نویسی هستید ، ماهیت های اصلی برنامه، کاربران و پستها خواهند بود. Prisma از زبان مدل سازی داده خود استفاده می کند تا شکل داده های برنامه شما را تعریف کند. ابتدا فایل schema.prisma خود را با دستور زیر باز کنید: $ nano prisma/schema.prisma
حالا تعاریف مدل زیر را به آن اضافه کنید. شما می توانید مدل ها را در پایین فایل ، درست پس از بلوک generator clientقرار دهید: my-blog/prisma/schema.prisma . . . model User { id Int @default(autoincrement()) @id email String @unique name String? posts Post[] }
model Post { id Int @default(autoincrement()) @id title String content String? published Boolean @default(false) author User? @relation(fields: [authorId], references: [id]) authorId Int? }
فایل را ذخیره کنید و از آن خارج شوید. شما در حال تعریف دو مدل به نام های کاربر و پست هستید. هر یک از این موارد دارای تعدادی فیلد است که نشان دهنده ویژگی های مدل است. مدل ها در جداول بانک اطلاعاتی نگاشت می شوند. فیلد ها ستون های فردی را نشان می دهند. همچنین توجه داشته باشید که بین این دو مدل رابطه یک به یک وجود دارد ، که توسط فیلدهای رابطه ای posts  و author  در User  و Post مشخص شده است. این بدان معنی است که یک کاربر می تواند با بسیاری از پست ها در ارتباط باشد. با استفاده از این مدل ها ، اکنون می توانید جداول مربوطه را با استفاده از Prisma Migrate در دیتابیس ایجاد کنید. در ترمینال خود دستور زیر را اجرا کنید: $ npx prisma migrate save –experimental –create-db –name “init”
این دستور یک تغییر جدید در سیستم فایل شما ایجاد می کند. در اینجا یک مرور اجمالی از سه گزینه ارائه شده به این دستور آمده است: –experimental: الزامی است زیرا Prisma Migrateدر حال حاضر در حالت آزمایشی قرار دارد. –create-db: Prisma Migrate را قادر می سازد تا پایگاه داده ای را با نام وبلاگ من ایجاد کند که در URL اتصال مشخص شده است. –name “init”: انتقال را مشخص می کند (برای نامگذاری پوشه جا به جایی ایجاد شده در سیستم فایل شما استفاده خواهد شد). خروجی این دستور مشابه این است: Output New datamodel:
// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema
datasource db { provider = “postgresql” url = env(“DATABASE_URL”) }
generator client { provider = “prisma-client-js” }
model User { id Int @default(autoincrement()) @id email String @unique name String? posts Post[] }
model Post { id Int @default(autoincrement()) @id title String content String? published Boolean @default(false) author User? @relation(fields: [authorId], references: [id]) authorId Int? }
Prisma Migrate just created your migration 20200811140708-init in
migrations/ └─ 20200811140708-init/ └─ steps.json └─ schema.prisma └─ README.md
در جتجوی فایل های migration که در دیرکتوری prisma/migrations ایجاد شده اند ، آزادانه عمل کنید. برای اجرای جابه جایی در برابر پایگاه داده خود و ایجاد جداول برای مدل های Prisma ، دستور زیر را در ترمینال خود اجرا کنید: $ npx prisma migrate up –experimental
خروجی زیر را دریافت خواهید کرد: Output . . . Checking the datasource for potential data loss…
Database Changes:
Migration Database actions Status
20200811140708-init 2 CreateTable statements. Done 
You can get the detailed db changes with prisma migrate up –experimental –verbose Or read about them here: ./migrations/20200811140708-init/README.md
 Done with 1 migration in 206ms.
اکنون Prisma Migrate عبارات SQL را که برای جابه جایی لازم است تولید می کند و آنها را به پایگاه داده می فرستد. موارد زیر عبارات SQL است که جدول ها را ایجاد کرده است: CREATE TABLE “public”.”User” ( “id” SERIAL, “email” text NOT NULL , “name” text , PRIMARY KEY (“id”) )
CREATE TABLE “public”.”Post” ( “id” SERIAL, “title” text NOT NULL , “content” text , “published” boolean NOT NULL DEFAULT false, “authorId” integer , PRIMARY KEY (“id”) )
CREATE UNIQUE INDEX “User.email” ON “public”.”User”(“email”)
ALTER TABLE “public”.”Post” ADD FOREIGN KEY (“authorId”)REFERENCES “public”.”User”(“id”) ON DELETE SET NULL ON UPDATE CASCADE
در این مرحله شما مدل داده خود را در شمای Prisma خود تعریف کرده و جداول پایگاه داده های مربوطه را با Prisma Migrate ایجاد کرده اید. در مرحله بعد ، Prisma Client را در پروژه خود نصب خواهید کرد تا بتوانید از پایگاه داده پرس و جو کنید. مرحله چهارم – کاوش در مورد جستارهای کلاینت Prisma در یک اسکریپت ساده Prisma Client یک سازنده جستار خودکار ایجاد شده و از نوع مطمئن است که می توانید با استفاده از برنامه های Node.js یا TypeScript ، داده ها را در یک پایگاه داده بخوانید و بنویسید. شما می توانید از آن برای دسترسی به بانک اطلاعاتی در مسیرهای REST API خود ، جایگزین کردن ORM های معمول ، جستارهای ساده SQL ، لایه های دسترسی به داده های سفارشی یا هر روش دیگری برای صحبت با یک پایگاه داده استفاده کنید. در این مرحله Prisma Client را نصب می کنید و با جستارهایی که می توانید با آن ارسال کنید آشنا می شوید. قبل از اجرای مسیرهای API REST در مراحل بعدی ، ابتدا برخی از جستارهای Prisma را با یک اسکریپت ساده و اجرایی جستجو خواهید کرد. ابتدا پیش بروید و با باز کردن ترمینال خود و نصب بسته npm Prisma Client در پروژه خود ، Prisma Client را در پروژه خود نصب کنید: npm install @prisma/client
سپس ، دایرکتوری جدیدی بنام src ایجاد کنید که شامل فایل های منبع شما باشد: mkdir src
اکنون یک فایل TypeScript را در داخل دیرکتوری جدید ایجاد کنید: nano src/index.ts
کلیه جستارهای Prisma Client ، عباراتی را برمیگرداند که می توانید در کد خود await  کنید. این امر نیاز دارد که شما جستارها را درون یک تابع async ارسال کنید. boilerplate زیر را با یک تابع async که در اسکریپت شما اجرا شده است اضافه کنید: my-blog/src/index.ts import { PrismaClient } from ‘@prisma/client’
const prisma = new PrismaClient()
async function main() { // … your Prisma Client queries will go here }
main() .catch((e) => console.error(e)) .finally(async () => await prisma.disconnect())
در اینجا مرور مختصری بر boilerplate آورده شده است: 1- سازنده PrismaClient را از بسته npm @prisma/client که قبلاً نصب شده بود ، وارد کنید. 2- با تماس با سازنده ، و دریافت نمونه ای به نام prisma ؛ PrismaClient را معرفی می کنید. 3- یک تابع async  به نام main  تعریف می کنید که در مرحله بعدی جستارهایPrisma Client خود را اضافه خواهید کرد. 4-تابع main  را فراخوانی می کنید ، در حالی که می توانید هر استثناء بالقوه را بدست آورید و اطمینان حاصل کنید که Prisma Client با فراخوانی prisma.disconnect () اتصالهای پایگاه داده باز را میبندد. با وجود تابع main  ، می توانید جستارهای Prisma Client را به اسکریپت اضافه کنید. index.ts را تنظیم کنید تا به شرح زیر باشد: my-blog/src/index.ts import { PrismaClient } from ‘@prisma/client’
const prisma = new PrismaClient()
async function main() { const newUser = await prisma.user.create({ data: { name: ‘Alice’, email: ‘[email protected]’, posts: { create: { title: ‘Hello World’, }, }, }, }) console.log(‘Created new user: ‘, newUser)
const allUsers = await prisma.user.findMany({ include: { posts: true }, }) console.log(‘All users: ‘) console.dir(allUsers, { depth: null }) }
main() .catch((e) => console.error(e)) .finally(async () => await prisma.disconnect())
در این کد ، شما از دو جستار Prisma Client استفاده می کنید: create: یک رکورد کاربر جدید ایجاد می کند. توجه کنید که شما در واقع از نوشتن تودرتو استفاده می کنید ، به این معنی که شما یک رکورد کاربر و پست را در همان جستار ایجاد می کنید. findMany: تمام رکوردهای کاربر موجود را از پایگاه داده می خواند. شما گزینه include را دارید که علاوه بر آن رکورد Post مربوط را برای هر رکورد کاربر را بارگذاری می کند. اکنون اسکریپت را با دستور زیر اجرا کنید: $ npx ts-node src/index.ts
خروجی زیر را در ترمینال خود دریافت خواهید کرد: Output Created new user: { id: 1, email: ‘[email protected]’, name: ‘Alice’ } [ { id: 1, email: ‘[email protected]’, name: ‘Alice’, posts: [ { id: 1, title: ‘Hello World’, content: null, published: false, authorId: 1 } ] }
توجه: اگر از یک رابط کاربری گرافیکی دیتابیس استفاده می کنید ، می توانید با نگاه کردن به جداول کاربر و پست ، تأیید کنید که داده ها ایجاد شده اند. از طرف دیگر ، می توانید داده های موجود در استودیوی Prisma را با اجرای npx prisma studio –experimental پیدا کنید. اکنون از Prisma Client برای خواندن و نوشتن داده در پایگاه داده خود استفاده کرده اید. در مراحل باقیمانده ، از دانش جدید برای اجرای مسیرهای مربوط به نمونه REST API استفاده خواهید کرد. مرحله 5 – اجرای اولین مسیر API REST شما در این مرحله ، Express را در برنامه خود نصب خواهید کرد. Express یک چارچوب وب محبوب برای Node.js است که شما برای اجرای مسیرهای REST API خود در این پروژه استفاده خواهید کرد. اولین مسیری که پیاده سازی خواهید کرد به شما امکان می دهد تا با استفاده از یک درخواست GET ، کلیه کاربران را از API منتقل کنید. داده های کاربر با استفاده از Prisma Client از بانک اطلاعاتی بازیابی می شوند. پیش بروید و Express را با دستور زیر نصب کنید: $ npm install express
از آنجا که از TypeScript استفاده می کنید ، بهتر است انواع مربوطه را نیز به عنوان متعلقات توسعه نصب کنید. دستور زیر را برای این کار اجرا کنید: $ npm install @types/express –save-dev
با متعلقات موجود ، می توانید برنامه Express خود را تنظیم کنید. دوباره با باز کردن فایل منبع اصلی خود شروع کنید: $ nano src/index.ts
اکنون تمام کد های موجود در index.ts را پاک کرده و آن را با موارد زیر جایگزین کنید تا REST API خود را شروع کنید: my-blog/src/index.ts import { PrismaClient } from ‘@prisma/client’ import express from ‘express’
const prisma = new PrismaClient() const app = express()
app.use(express.json())
// … your REST API routes will go here
app.listen(3000, () => console.log(‘REST API server ready at: http://localhost:3000’), )
در اینجا خلاصه ای از کد توضیح داده شده است: 1- شما PrismaClient و express را از بسته های npm مربوطه وارد می کنید. 2- با تماس با سازنده ، PrismaClient را معرفی می کنید و نمونه ای به نام prisma را دریافت می آورید. 3- با تماس با Express () برنامه Express خود را ایجاد می کنید. 4- می توانید واسط Express.json () را برای اطمینان از پردازش صحیح داده های JSON توسط Express ، اضافه کنید. 5- سرور را از پورت 3000 شروع می کنید. اکنون می توانید اولین مسیر خود را پیاده کنید. در بین تماس های app.use و app.listen ، کد زیر را اضافه کنید: my-blog/src/index.ts . . . app.use(express.json())
app.get(‘/users’, async (req, res) => { const users = await prisma.user.findMany() res.json(users) })
app.listen(3000, () => console.log(‘REST API server ready at: http://localhost:3000’), )
پس از افزودن ، فایل خود را ذخیره کنید و از آن خارج شوید. سپس سرور وب محلی خود را با استفاده از دستور زیر شروع کنید: $ npx ts-node src/index.ts
خروجی زیر را دریافت خواهید کرد: Output REST API server ready at: http://localhost:3000
برای دسترسی به مسیر /users می توانید مرورگر خود را به آدرس http: // localhost: 3000 / کاربر یا هر کلاینت HTTP دیگری هدایت کنید. در این آموزش ، تمام مسیرهای REST API را با استفاده از Curl ، یک کلاینت HTTP مبتنی بر ترمینال ، تست خواهید کرد. توجه: اگر ترجیح می دهید از یک سرویس دهنده HTTP مبتنی بر GUI استفاده کنید ، می توانید از گزینه های دیگری مانند Postwoman یا Advanced REST Client استفاده کنید. برای آزمایش مسیر خود ، یک پنجره یا تب ترمینال جدید باز کنید (به این ترتیب که وب سرور محلی شما قادر به اجرای آن باشد) و دستور زیر را اجرا کنید: $ curl http://localhost:3000/users
داده های کاربری را که در مرحله قبل ایجاد کرده اید دریافت خواهید کرد: Output [{“id”:1,”email”:”[email protected]”,”name”:”Alice”}]
توجه داشته باشید که این بار آرایه posts  گنجانده نشده است. این امر به این دلیل است که شما در اجرای مسیر /users گزینه include را به تماس findMany منتقل نمی کنید. شما اولین مسیر REST API خود را در /usersپیاده سازی کرده اید. در مرحله بعدی مسیرهای باقیمانده API را برای اضافه کردن قابلیت های بیشتر به API خود پیاده سازی خواهید کرد. مرحله 6 – اجرای مسیرهای باقیمانده REST API در این مرحله مسیرهای باقیمانده API را برای برنامه وبلاگ نویسی خود پیاده سازی خواهید کرد. در پایان ، سرور وب شما درخواست های مختلف GET ، POST ، PUT و DELETE را ارائه می دهد. در اینجا مروری بر مسیرهای مختلفی که اجرا خواهید کرد: HTTP Method مسیر توصیف GET /feed تمام پست های منتشر شده را میگیرد GET /post/:id پست خاصی را با IDمیگیرد POST /user کاربر جدید ایجاد میکند POST /post پست جدید ایجاد میکند (به عنوان پیش نویس) PUT /post/publish/:id فیلد published  را روی true قرار میدهد DELETE post/:id پستی را بر جسب ID حذف میکند
پیش بروید و ابتدا مسیرهای GET باقیمانده را پیاده سازی کنید. index.ts را با دستور زیر باز کنید: $ nano src/index.ts
سپس ، بعد از اجرای مسیر /users، کد زیر را اضافه کنید: my-blog/src/index.ts . . .
app.get(‘/feed’, async (req, res) => { const posts = await prisma.post.findMany({ where: { published: true }, include: { author: true } }) res.json(posts) })
app.get(`/post/:id`, async (req, res) => { const { id } = req.params const post = await prisma.post.findOne({ where: { id: Number(id) }, }) res.json(post) })
app.listen(3000, () => console.log(‘REST API server ready at: http://localhost:3000’), )
فایل خود را ذخیره کنید و از آن خارج شوید. این کد مسیرهای API را برای دو درخواست GET پیاده سازی می کند: / feed: لیستی از پستهای منتشر شده را برمی گرداند. / post /: id: یک پست خاص را با شناسه خود برمی گرداند. Prisma Client در هر دو پیاده سازی استفاده می شود. در اجرای مسیر /feed، جستار شما که با فیلترهای Prisma Client برای همه سوابق پست می کنید و در آن ستون published  شامل مقدار واقعی است. علاوه بر این ، جستارهای مربوط به Prisma Client شامل اطلاعات author مربوطه برای هر پست برگشتی نیز می باشد. در اجرای مسیر / post /: id ، می توانید شناسه ای را که از مسیر URL بازیابی می شود برای خواندن یک رکورد ارسال خاص از پایگاه داده در حال عبور هستید. می توانید CTRL + C را در صفحه کیبورد خود بزنید و سرور را متوقف کنید. سپس ، سرور را با استفاده از دستور زیر ریستارت کنید: $ npx ts-node src/index.ts
برای تست مسیر /feed، می توانید از دستور curl زیر استفاده کنید: $ curl http://localhost:3000/feed
از آنجا که هنوز هیچ پستی منتشر نشده است ، این پاسخ ارایه خالی به همراه دارد: Output [] برای بررسی مسیر /post/:id میتوانید از دستور زیر استفاده کنید: $ curl http://localhost:3000/post/1
پستی که ابتدا ایجاد کرده اید را برمیگرداند: Output {“id”:1,”title”:”Hello World”,”content”:null,”published”:false,”authorId”:1}
سپس دو مسیر post را اجرا کنید. کد زیر را به index.ts پس از پیاده سازی مسیر GET اضافه کنید my-blog/src/index.ts . . .
app.post(`/user`, async (req, res) => { const result = await prisma.user.create({ data: { …req.body }, }) res.json(result) })
app.post(`/post`, async (req, res) => { const { title, content, authorEmail } = req.body const result = await prisma.post.create({ data: { title, content, published: false, author: { connect: { email: authorEmail } }, }, }) res.json(result) })
app.listen(3000, () => console.log(‘REST API server ready at: http://localhost:3000’), ) پس از اتمام کار ، پرونده خود را ذخیره کنید و خارج شوید. این کد مسیرهای API را برای دو درخواست POST پیاده سازی می کند: / user: کاربر جدیدی را در دیتابیس ایجاد می کند. / post: یک پست جدید در بانک اطلاعاتی ایجاد می کند. مانند قبل ، Prisma Client در هر دو پیاده سازی استفاده می شود. در اجرای مسیر /user، مقادیر را از بدنه درخواست HTTP به جستار create  در Prisma Client منتقل می کنید. مسیر /post کمی بیشتر درگیر است: در اینجا نمی توانید مقادیر را مستقیماً از بدنه درخواست HTTP عبور دهید. در عوض ، ابتدا باید آنها را به صورت دستی استخراج کنید تا آنها را به جستار Prisma Client منتقل کنید. دلیل این امر این است که ساختار JSON در بدنه درخواست با ساختار مورد انتظار Prisma Client مطابقت ندارد ، بنابراین باید ساختار مورد نظر را بصورت دستی ایجاد کنید. با متوقف کردن سرور با CTRL + C می توانید مسیرهای جدید را آزمایش کنید. سپس ، سرور را با استفاده از دستور زیر ریستارت کنید: $ npx ts-node src/index.ts
برای ایجاد یک کاربر جدید از طریق مسیر /user، می توانید درخواست POST زیر را با استفاده از curlارسال کنید: $ curl -X POST -H ���Content-Type: application/json” -d ‘{“name”:”Bob”, “email”:”[email protected]”}’ http://localhost:3000/user
با این کار کاربر جدیدی در دیتابیس ایجاد می شود و خروجی زیر را چاپ می کند: Output {“id”:2,”email”:”[email protected]”,”name”:”Bob”}
برای ایجاد یک پست جدید از طریق مسیر /post، می توانید درخواست POST  زیر را با curl ارسال کنید: $ curl -X POST -H “Content-Type: application/json” -d ‘{“title”:”I am Bob”, “authorEmail”:”[email protected]”}’ http://localhost:3000/post
با این کار پست جدیدی در دیتابیس ایجاد شده و با ایمیل [email protected] به کاربر وصل می شود. خروجی زیر را چاپ می کند: Output {“id”:2,”title”:”I am Bob”,”content”:null,”published”:false,”authorId”:2}
سرانجام می توانید مسیرهای PUT و DELETE را پیاده سازی کنید. index.ts را با دستور زیر باز کنید: $ nano src/index.ts
در مرحله بعد ، پس از اجرای دو مسیر POST ، کد هایلایت شده را اضافه کنید: my-blog/src/index.ts . . .
app.put(‘/post/publish/:id’, async (req, res) => { const { id } = req.params const post = await prisma.post.update({ where: { id: Number(id) }, data: { published: true }, }) res.json(post) })
app.delete(`/post/:id`, async (req, res) => { const { id } = req.params const post = await prisma.post.delete({ where: { id: Number(id) }, }) res.json(post) })
app.listen(3000, () => console.log(‘REST API server ready at: http://localhost:3000’), )
فایل خود را ذخیره کنید و از آن خارج شوید. این کد مسیرهای API را برای یک PUT و یک درخواست DELETE پیاده سازی می کند: /post/publish/:id (PUT): پستی را با شناسه اش منتشر می کند. /post/:id (DELETE): پستی را با شناسه آن حذف می کند. باز هم ، Prisma Client در هر دو پیاده سازی استفاده می شود. در اجرای /post/publish/:id ، شناسه پستی که باید منتشر شود از URL برداشته می شود و به جستار به روزرسانی Prisma Client منتقل می شود. اجرای مسیر / post /: id برای پاک کردن یک پست در دیتابیس نیز شناسه پست را از URL باز می گیرد و آن را به درخواست حذف Prisma Client منتقل می کند. دوباره ، سرور را با CTRL + C در صفحه کلید خود متوقف کنید. سپس ، سرور را با استفاده از دستور زیر ریستارت کنید: $ npx ts-node src/index.ts
می توانید مسیر PUT را با دستور curl زیر آزمایش کنید: $ curl -X PUT http://localhost:3000/post/publish/2
این دستور پست را با شناسه برابر با 2 منتشر میکند. در صورت ارسال درخواست /feed، این پست در پاسخ گنجانده می شود. در آخر ، می توانید مسیر DELETE را با دستور curl زیر آزمایش کنید: $ curl -X DELETE http://localhost:3000/post/1
این دستور پست با شناسه ID 1 را حذف میکند. برای تأیید اینکه پست با این شناسه حذف شده است ، می توانید یک درخواست GET را به مسیر / post / 1 ارسال کنید. در این مرحله ، شما مسیرهای باقی مانده REST API را برای برنامه وبلاگ نویسی خود پیاده سازی کرده اید. API اکنون به درخواستهای مختلف GET ، POST ، PUT و DELETE پاسخ می دهد و عملکردی را برای خواندن و نوشتن داده ها در بانک اطلاعاتی پیاده سازی می کند. نتیجه در این مقاله ، شما یک سرور API REST ایجاد کرده اید که دارای چندین مسیر مختلف برای ایجاد ، خواندن ، به روزرسانی و حذف داده های کاربر و ارسال یک برنامه وبلاگ نویسی نمونه است. در داخل مسیرهای API ، شما در حال استفاده از Prisma Client برای ارسال جستارهای مربوطه به پایگاه داده خود هستید. به عنوان مرحله بعدی ، می توانید مسیرهای API اضافی را پیاده سازی کنید یا طرح پایگاه داده خود را با استفاده از Prisma Migrate گسترش دهید. برای اطلاع از جوانب مختلف Prisma ، به اسناد Prisma مراجعه کرده و برخی از پروژه های نمونه آماده را برای استفاده در مخزن نمونه های Prisma – با استفاده از ابزارهایی مانند GraphQL یا APP های grPC جستجو کنید.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 
0 notes
vpsgoll · 4 years
Text
نحوه مدیریت چندین سرور با دستورات Ad Hoc Ansible
Ansible ابزاری مدرن برای مدیریت پیکربندی است که کار تنظیم و نگهداری سرور محازی های از راه دور را تسهیل می کند. با یک طراحی مینیمالیستی که قصد دارد کاربران را به روز کرده و به آنها سرعت ببخشد ، به شما این امکان را می دهد تا یک یا صدها سیستم را از یک مکان مرکزی با playbook یا دستورات ad hoc کنترل کنید. بر خلاف playbook- که شامل مجموعه کارهایی است که می توان از آنها استفاده مجدد کرد – دستورات ad hoc کارهایی هستند که شما مرتباً آنها را انجام نمی دهید ، مانند راه اندازی مجدد یک سرویس یا بازیابی اطلاعات در مورد سیستمهای از راه دور که قابل اعتماد نیستند.
در این راهنما، یاد می گیرید که چگونه از دستورات ad hoc برای انجام کارهای متداول مانند نصب بسته ها ، کپی کردن فایل ها ، و راه اندازی مجدد سرویس ها بر روی یک یا چند سرور محازی از راه دور ، از یک گره کنترل Ansible استفاده کنید.
پیش نیازها برای پیروی از این راهنما ، به موارد زیر نیاز دارید: • یک گره کنترل Ansible. این راهنما فرض می کند که گره کنترل شما یک دستگاه اوبونتو 20.04 است که Ansible روی آن نصب و پیکربندی شده است تا با استفاده از کلیدهای SSH به میزبان های Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo است و فایروال را نیز فعال کرده است ، همانطور که در راهنمای ستاپ اولیه سرور محازی توضیح داده شده است. برای راه اندازی Ansible ، لطفا راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 20.04 را دنبال کنید. • دو یا چند میزبان Ansible. میزبان Ansible هر دستگاهی است که گره کنترل Ansible شما برای خودکار سازی پیکربندی شده باشد. این راهنما فرض می کند که میزبان های Ansible شما سرور محازی های Ubuntu 20.04 از راه دور هستند. اطمینان حاصل کنید که هر میزبان Ansible دارای موارد زیر است: o کلید عمومی SSH گره کنترل Ansible به کلیدهای مجاز کاربر کاربر اضافه شده باشد. این کاربر می تواند root یا یک کاربر معمولی با امتیازات sudo باشد. برای تنظیم این گزینه ، می توانید مرحله 2 راهنمای نحوه تنظیم کلیدهای SSH را در اوبونتو 20.04 دنبال کنید. • یک فایل inventory بر روی گره کنترل Ansible تنظیم شده باشد. اطمینان حاصل کنید که یک فایل inventory در آن وجود دارد که شامل همه میزبان های Ansible باشد. برای انجام این کار ، لطفاً به راهنمای چگونگی تنظیم موجودی های Ansible مراجعه کنید. سپس مطمئن شوید که با اجرای تست اتصال مشخص شده در بخش تست اتصال به میزبان های Ansible ، می توانید به گره های خود متصل شوید.
آزمایش اتصال به هاست های Ansible دستور زیر اتصال بین گره کنترل Ansible و تمام میزبان های Ansible شما را آزمایش می کند. این دستور از کاربر سیستم فعلی و کلید SSH مربوطه آن به عنوان ورود از راه دور استفاده می کند و گزینه -m را نیز شامل می شود ، که به Ansible می گوید ماژول ping را اجرا کنید. همچنین دارای پرچم -i است که به Ansible میگوید میزبان های موجود ��ر فایل inventory مشخص شده را ping کند. $ ansible all -i inventory -m ping
اگر اولین بار است که از طریق SSH به این سرور محازی ها وصل می شوید ، از شما خواسته می شود که صحت میزبان هایی را که از طریق Ansible به آنها وصل می شوید ، تأیید کنید. وقتی از شما خواسته شد ، yes را تایپ کنید و سپس برای تأیید ENTER را بزنید. باید خروجی مشابه این دریافت کنید: Output server1 | SUCCESS => { “changed”: false, “ping”: “pong” } server2 | SUCCESS => { “changed”: false, “ping”: “pong” }
هنگامی که یک پاسخ “pong” را از هاست دریافت کردید ، بدان معنی است که ارتباط زنده است و شما آماده اجرای دستورات Ansible در آن سرور محازی هستید.
تنظیم گزینه های اتصال به طور پیش فرض ، Ansible سعی دارد با استفاده از صفحه کلید SSH مربوطه ، به عنوان کاربر از راه دور با همان نام کاربری سیستم فعلی شما ، به گره ها متصل شود. برای اتصال به عنوان یک کاربر از راه دور متفاوت ، فرمان را با پرچم -u و نام کاربر در نظر گرفته شده اضافه کنید: $ ansible all -i inventory -m ping -u sammy
اگر از یک کلید SSH سفارشی برای اتصال به سرور محازی های از راه دور استفاده می کنید ، می توانید آن را در زمان اجرا با گزینه –private-key ارائه دهید: $ ansible all -i inventory -m ping –private-key=~/.ssh/custom_id
توجه: برای کسب اطلاعات بیشتر در مورد نحوه اتصال به گره ها ، لطفاً به راهنمای نحوه استفاده از Ansible ما مراجعه کنید ، که گزینه های اتصال بیشتری را نشان می دهد.
هنگامی که می توانید با استفاده از گزینه های مناسب اتصال برقرار کنید ، می توانید فایل inventory خود را تنظیم کنید تا به صورت خودکار کاربر از راه دور و کلید خصوصی خود را تنظیم کنید ، تا تفاوتی با مقادیر پیش فرض تعیین شده توسط Ansible نباشد. سپس ، لازم نیست آن پارامترها را در خط فرمان ارائه دهید. مثال فایل inventory زیر متغیر ansible_user را فقط برای سرور محازی server1 تنظیم می کند: ~/ansible/inventory server1 ansible_host=203.0.113.111 ansible_user=sammy server2 ansible_host=203.0.113.112
Ansible اکنون هنگام اتصال به سرور محازی server1 از summy به عنوان کاربر پیش فرض از راه دور استفاده می کند. برای تنظیم کلید SSH سفارشی ، متغیر ansible_ssh_private_key_file را به شرح زیر وارد کنید: ~/ansible/inventory server1 ansible_host=203.0.113.111 ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id server2 ansible_host=203.0.113.112
در هر دو مورد ، ما مقادیر سفارشی را فقط برای server1 تنظیم کرده ایم. اگر می خواهید از همان تنظیمات برای چندین سرور محازی استفاده کنید ، می توانید برای آن گروه child استفاده کنید: ~/ansible/inventory [group_a] 203.0.113.111 203.0.113.112
[group_b] 203.0.113.113
[group_a:vars] ansible_user=sammy ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id
این پیکربندی مثال فقط یک کاربر سفارشی و کلید SSH را برای اتصال به سرور محازی های ذکر شده در group_a اختصاص می دهد.
تعیین اهدافی برای اجرای فرمان هنگام اجرای دستورات ad hoc با Ansible ، می توانید میزبان های فردی و همچنین هر ترکیبی از گروه ها ، هاست ها و زیر گروه ها را هدف قرار دهید. به عنوان مثال ، به ترتیب زیر می توانید اتصال را برای هر میزبان در یک گروه به نام سرور محازی ها بررسی کنید: $ ansible servers -i inventory -m ping
همچنین می توانید میزبان ها و گروه های مختلفی را با جدا کردن آنها با ستون هایی مشخص کنید: $ ansible server1:server2:dbservers -i inventory -m ping
برای درج یک استثناء در یک الگو ، از علامت تعجب ، پیشوند با کاراکتر \ ، به شرح زیر استفاده کنید. این دستور بر روی همه سرور محازی های گروه 1 اجرا می شود ، به جز server2: $ ansible group1:\!server2 -i inventory -m ping
در صورت تمایل به اجرای یک دستور فقط بر روی سرور محازی هایی که جزئی از گروه 1 و گروه 2 هستند ، به عنوان مثال ، باید از & استفاده کنید. فراموش نکنید که پیشوند آن را یک کاراکتر \ قرار دهید: $ ansible group1:\&group2 -i inventory -m ping
برای کسب اطلاعات بیشتر در مورد چگونگی استفاده از الگوها هنگام تعیین اهداف برای اجرای فرمان ، لطفاً به مرحله 5 راهنمای ما در مورد نحوه تنظیم موجودی های Ansible مراجعه کنید.
اجرای ماژول های Ansible ماژول های Ansible قطعاتی از کد هستند که می توانند از playbooks و همچنین از خط فرمان دریافت شوند تا مراحل اجرا روی گره های از راه دور را تسهیل کنند. مثالها شامل ماژول apt  ، برای مدیریت بسته های سیستم در اوبونتو و ماژول user  است که برای مدیریت کاربران سیستم استفاده می شود. دستور ping  مورد استفاده در سراسر این راهنما نیز یک ماژول است که به طور معمول برای تست اتصال از گره کنترل به هاست استفاده می شود. Ansible با مجموعه گسترده ای از ماژول های داخلی همراه است که برخی از آنها به منظور فراهم آوردن قابلیت های کامل ، نیاز به نصب نرم افزار اضافی دارند. همچنین می توانید ماژول های دلخواه خود را با استفاده از زبان مورد نظر خود ایجاد کنید. برای اجرای یک ماژول با آرگومان ها ، پرچم -a را به همراه گزینه های مناسب در نقل قول اضافه کنید ، مانند این: $ ansible target -i inventory -m module -a “module options”
به عنوان نمونه ، از ماژول apt برای نصب بسته tree  روی server1 استفاده می کند: $ ansible server1 -i inventory -m apt -a “name=tree”
اجرای دستورات Bash
هنگامی که یک ماژول از طریق گزینه -m ارائه نمی شود ، از ماژول فرمان به طور پیش فرض برای اجرای دستور مشخص شده روی سرور محازی (های) راه دور استفاده می شود. این امر به شما امکان می دهد تا بتوانید تقریبا هر فرمانی را اجرا کنید که بطور معمول از طریق یک ترمینال SSH اجرا میشود، مادامی که کاربر در حال اتصال مجوزهای کافی داشته باشد و هیچ گونه اعلان تعاملی وجود نداشته باشد. این مثال فرمان uptime را در کلیه سرور محازی ها از موجودی مشخص شده اجرا می کند: $ ansible all -i inventory -a “uptime”
Output server1 | CHANGED | rc=0 >> 14:12:18 up 55 days, 2:15, 1 user, load average: 0.03, 0.01, 0.00 server2 | CHANGED | rc=0 >> 14:12:19 up 10 days, 6:38, 1 user, load average: 0.01, 0.02, 0.00
استفاده از افزایش امتیازات برای اجرای دستورات با sudo اگر دستور یا ماژول مورد نظر برای اجرا روی هاستهای از راه دور نیاز به امتیازات گسترده سیستم یا کاربر سیستم دیگری دارد ، لازم است که از ماژول افزایش امتیاز Ansible استفاده کنید ، که ماژولی انتزاعی برای sudo و همچنین سایر نرم افزارهای افزایش امتیاز است که توسط Ansible در سیستم عامل های مختلف پشتیبانی می شود. به عنوان مثال ، اگر می خواهید یک فرمان tail  را برای خروجی آخرین پیام های ورود به سیستم از خطای Nginx روی سرور محازی به نام server1 از inventory ، اجرا کنید ، باید گزینه –become را به شرح زیر وارد کنید: ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become
این می تواند معادل اجرای فرمان sudo tail /var/log/nginx/error.log بر روی میزبان از راه دور ، با استفاده از کاربر سیستم فعلی محلی یا کاربر از راه دور تنظیم شده در فایل inventory شما باشد. سیستم های افزایش امتیاز مانند sudo اغلب با درخواست رمز ورود کاربر، از شما میخواهند که تأیید اعتبار کنید. این باعث می شود که Ansible در اجرای یک دستور یا اجرای playbook شکست بخورد. سپس می توانید از گزینه –ask-become-pass یا -K استفاده کنید تا Ansible اعلان رمز عبور sudo را درخواست کند:
$ ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become -K
نصب و حذف بسته ها مثال زیر از ماژول apt برای نصب بسته nginx در تمام گره ها از فایل inventory استفاده می کند: $ ansible all -i inventory -m apt -a “name=nginx” –become -K
برای حذف بسته ، آرگومان state را درج کنید و آن را روی absent تنظیم کنید:. $ ansible all -i inventory -m apt -a “name=nginx state=absent” –become -K
کپی کردن فایل ها با ماژول file ، می توانید فایلها را بین گره کنترل و گره های مدیریت شده ، از هر جهت کپی کنید. دستور زیر یک فایل متنی محلی را برای همه میزبانهای از راه دور در فایل inventory مشخص شده کپی می کند: $ ansible all -i inventory -m copy -a “src=./file.txt dest=~/myfile.txt”
برای کپی کردن فایل از سرور محازی از راه دور در گره کنترل خود ، گزینه Remote_src را نیز اضافه کنید: $ ansible all -i inventory -m copy -a “src=~/myfile.txt remote_src=yes dest=./file.txt”
تغییر مجوزهای فایل برای تغییر مجوزها در فایل ها و دایرکتوری ها روی گره های از راه دور خود ، می توانید از ماژول file استفاده کنید. دستور زیر مجوزها را روی فایلی به نام file.txt که در / var / www در میزبان از راه دور قرار دارد تنظیم می کند. این قسمت کادر اجرایی فایل را روی 600 تنظیم می کند ، که مجوزهای خواندن و نوشتن را فقط برای مالک فعلی فایل فعال می کند. علاوه بر این ، مالکیت آن فایل را برای کاربر و گروهی به نام sammy تعیین می کند: $ ansible all -i inventory -m file -a “dest=/var/www/file.txt mode=600 owner=sammy group=sammy” –become -K
از آنجا که این فایل در یک دیرکتوری قرار دارد که معمولاً متعلق به root است ، برای تغییر ویژگی های آن ممکن است به مجوزهای sudo نیاز داشته باشیم. به همین دلیل گزینه های –become و -K را شامل می شود. اینها برای اجرای دستور دارای امتیازات گسترده از سیستم تشدید امتیاز Ansible استفاده می کنند ، و این امر باعث می شود که رمز عبور sudo را برای کاربر از راه دور تهیه کنید.
ریستارت سرویس ها شما می توانید از ماژول service برای مدیریت سرویس های در حال اجرا روی گره های از راه دور که توسط Ansible استفاده می شود ، استفاده کنید. این امر به امتیازات گسترده سیستم نیاز دارد ، بنابراین اطمینان حاصل کنید که کاربر از راه دور شما دارای مجوزهای sudo است و شما از گزینه –become برای استفاده از سیستم افزایش امتیاز Ansible استفاده می کنید. استفاده از -K باعث می شود که رمز عبور sudo را برای کاربر متصل کننده فراهم کنید. برای ریستارت سرویس nginx در تمام میزبانهای گروهی به نام webservers ، دستور زیر را اجرا کنید: $ ansible webservers -i inventory -m service -a “name=nginx state=restarted” –become -K
ریستارت سرور محازی ها اگرچه Ansible یک ماژول اختصاصی برای راه اندازی مجدد سرور محازی ها ندارد ، می توانید یک دستور bash صادر کنید که فرمان /sbin/reboot را روی میزبان از راه دور فراخوانی می کند. راه اندازی مجدد سرور محازی به امتیازات گسترده سیستم نیاز دارد ، بنابراین اطمینان حاصل کنید که کاربر از راه دور شما دارای مجوزهای sudo است و شما از گزینه –become برای استفاده از سیستم افزایش امتیاز Ansible استفاده می کنید. استفاده از -K باعث می شود رمز عبور sudo را برای کاربر متصل کننده فراهم کنید. هشدار: دستور زیر سرور محازی (های) هدف Ansible را ریستارت می کند. این امر ممکن است باعث ایجاد اختلال موقتی در هر برنامه ای که به آن سرور محازی ها متکی است، گردد.
برای ریستارت همه سرور محازی ها در یک گروه webservers  دستور زیر را اجرا کنید : $ ansible webservers -i inventory -a “/sbin/reboot” –become -K
جمع آوری اطلاعات در مورد گره های از راه دور ماژول setup  اطلاعات دقیق در مورد سیستمهای از راه دور مدیریت شده توسط Ansible ، که به system facts نیز شناخته میشود را نشان می دهد. برای به دست آوردن system facts برای server1 ، دستور زیر را اجرا کنید: $ ansible server1 -i inventory -m setup
این دستور مقدار زیادی از داده های JSON را چاپ می کند که حاوی جزئیاتی درباره محیط سرور محازی از راه دور است. برای اینکه فقط مرتبط ترین اطلاعات چاپ شود، عبارت “gather_subset=min” را به شرح زیر وارد کنید: $ ansible server1 -i inventory -m setup -a “gather_subset=min”
برای چاپ فقط موارد خاص JSON ، می توانید از آرگومان filter استفاده کنید. که یک الگوی wildcard را میپذیرد که برای مطابقت رشته ها ، مشابه fnmatch ، استفاده میشود. به عنوان مثال ، برای به دست آوردن اطلاعات در مورد هر دو رابط شبکه ipv4 و ipv6 ، می توانید از * ipv * به عنوان فیلتر استفاده کنید: ansible server1 -i inventory -m setup -a “filter=*ipv*”
Output server1 | SUCCESS => { “ansible_facts”: { “ansible_all_ipv4_addresses”: [ “203.0.113.111”, “10.0.0.1” ], “ansible_all_ipv6_addresses”: [ “fe80::a4f5:16ff:fe75:e758” ], “ansible_default_ipv4”: { “address”: “203.0.113.111”, “alias”: “eth0”, “broadcast”: “203.0.113.111”, “gateway”: “203.0.113.1”, “interface”: “eth0”, “macaddress”: “a6:f5:16:75:e7:58”, “mtu”: 1500, “netmask”: “255.255.240.0”, “network”: “203.0.113.0”, “type”: “ether” }, “ansible_default_ipv6”: {} }, “changed”: false }
اگر می خواهید میزان استفاده از دیسک را بررسی کنید ، می توانید یک دستور Bash را با استفاده از ابزار df اجرا کنید ، به شرح زیر: $ ansible all -i inventory -a “df -h”
Output
server1 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 798M 624K 798M 1% /run /dev/vda1 155G 2.3G 153G 2% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 395M 608K 394M 1% /run /dev/vda1 78G 2.2G 76G 3% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 395M 0 395M 0% /run/user/0
نتیجه در این راهنما ، ما نحوه استفاده از دستورات adible ad hoc را برای مدیریت سرور محازی های از راه دور ، از جمله نحوه اجرای کارهای متداول شامل ریستارت یک سرویس یا کپی کردن یک فایل از گره کنترل به سرور محازی های از راه دور که توسط آن قابل کنترل است ، نشان دادیم. همچنین نحوه جمع آوری اطلاعات از گره های از راه دور با استفاده از پارامترهای محدود کننده و فیلتر را مشاهده کردیم. به عنوان یک منبع اضافی ، می توانید مستندات رسمی Ansible را در مورد دستورات ad hoc بررسی کنید.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
0 notes
vpsgoll · 4 years
Text
چگونگی توسعه وب سایت Drupal 9 در دستگاه محلی خود با استفاده از Docker و DDEV
DDEV یک ابزار منبع باز است که از Docker برای ساختن محیط های توسعه محلی برای بسیاری از چارچوب های مختلف PHP استفاده می کند. با استفاده از قدرت کانتینر کردن ، DDEV می تواند نحوه کار روی چندین پروژه که از چندین پشته فناوری و چندین سرور مجازی ابری استفاده می کنند ، بسیار ساده نماید. DDEV شامل قالب هایی برای WordPress ، Laravel ، Magento ، TYPO3 ، Drupal و موارد دیگر است.
Drupal 9 در تاریخ 3 ژوئن 2020 برای Drupal CMS منتشر شد. Drupal که به دلیل سهولت در استفاده و کتابخانه گسترده ای از ماژول ها و تم ها شناخته شده است ، یک چارچوب محبوب PHP برای ساخت و نگهداری وب سایت ها و برنامه های مختلف در هر اندازه است. در این آموزش شما با استفاده از DDEV اقدام به تهیه وب سایت Drupal 9 در دستگاه محلی خود خواهید کرد. این کار به شما امکان می دهد تا ابتدا وب سایت خود را بسازید و سپس وقتی آماده شدید ، پروژه خود را به یک سرور مجازی تولید مستقر کنید.
پیش نیازها برای تکمیل این آموزش ، به موارد زیر نیاز دارید: • یک دستگاه محلی که لینوکس یا macOS را اجرا می کند ⦁ برای macOS: مدیر بسته Homebrew ، که شما برای نصب DDEV استفاده خواهید کرد. برای نصب Homebrew در دستگاه محلی خود ، مرحله سوم – نصب و راه اندازی Homebrew را در این آموزش Ruby دنبال کنید. ⦁ Docker و Docker Compose روی دستگاه محلی شما نصب باشد. o برای لینوکس: می توانید Docker و Docker Compose را با این دو آموزش نصب کنید: نحوه نصب و استفاده از Docker و نحوه نصب Docker Compose. توزیع لینوکس خود را از لیست انتخاب کرده و دستورالعمل های موجود را دنبال کنید. o برای macOS: Docker Compose قبلاً به عنوان بخشی از جعبه ابزار Docker در دسترس بود ، اما جعبه ابزار Docker اکنون یک راه حل اساسی است. امروز ، Docker رسما توصیه می کند که Docker Desktop را نصب کنید ، که شامل Docker Compose ، Docker Engine و موارد دیگر می باشد. برای نصب Docker Desktop در macOS ، راهنمای رسمی Docker را دنبال کنید. برای اطلاعات بیشتر می توانید راهنمای رسمی شروع کار Docker Desktop را مطالعه کنید. اگر قبلاً از Docker Toolbox برای نصب ابزارهای مختلف Docker استفاده می کردید ، می توانید در مورد تفاوت های بین Docker Toolbox و Docker Desktop و چگونگی همزیستی آنها ، این مقاله رسمی را بخوانید.
توجه: توسعه Drupal 9 با استفاده از DDEV روی یک سرور مجازی از راه دور امکان پذیر است ، اما برای دسترسی به localhost در یک مرورگر وب ، به یک راه حل نیاز خواهید داشت. دستور DDEV ddev share با ngrok کار می کند ، که تونل ایمن را برای شما و سایر ذینفعان در سرور مجازی شما ایجاد می کند تا سایت توسعه خود را مشاهده کنید. برای استفاده شخصی ، همچنین می توانید یک رابط کاربری گرافیکی را بر روی سرور مجازی راه دور خود نصب کنید و از طریق یک مرورگر وب در داخل رابط به سایت توسعه خود دسترسی پیدا کنید برای این کار می توانید راهنمای ما در مورد نحوه نصب و پیکربندی VNC در اوبونتو 20.04 را دنبال کنید. برای یک راه حل GUI حتی سریعتر ، می توانید راهنمای ما در مورد راه اندازی دسک تاپ از راه دور با X2Go در اوبونتو 20.04 را دنبال کنید.
مرحله 1 – نصب DDEV در این مرحله DDEV را روی دستگاه محلی خود نصب خواهید کرد. گزینه 1 شامل دستورالعمل هایی برای macOS است در حالی که گزینه 2 دستورالعمل هایی را برای لینوکس ارائه می دهد. این آموزش بر روی نسخه DDEV 1.15.0 تست شده است.
گزینه 1 – نصب DDEV روی macOS DDEV توصیه می کند که کاربران macOS ابزار خود را با استفاده از مدیر بسته Homebrew نصب کنند. برای نصب جدیدترین نسخه پایدار از دستور brew زیر استفاده کنید: ⦁ $ brew tap drud/ddev && brew install drud/ddev/ddev ⦁ اگر جدیدترین نسخه مطلق را ترجیح می دهید ، می توانید از brew برای نصب ddev-edge استفاده کنید: ⦁ $ brew tap drud/ddev-edge && brew install drud/ddev-edge/ddev ⦁
اگر نسخه DDEV را قبلاً نصب کرده اید ، یا می خواهید نسخه خود را به روز کنید ، DDEV را خاموش کنید و برای بروزرسانی نصب خود از brew استفاده کنید: ⦁ $ ddev poweroff ⦁ $ $ brew upgrade ddev
پس از نصب یا به روزرسانی DDEV ، نسخه ddev را برای تأیید نرم افزار خود اجرا کنید: ⦁ $ ddev version ⦁
خروجی مانند این را مشاهده خواهید کرد: Output DDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os darwin router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0
DDEV شامل یک رابط قدرتمند CLI یا خط فرمان است. ddev را اجرا کنید تا در مورد برخی دستورات معمول مطلع شوید: ⦁ $ ddev ⦁
خروجی زیر را مشاهده خواهید کرد: Output Create and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support
Usage: ddev [command]
Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries. import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses ‘docker stop’ to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project’s database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add –remove-data. version print ddev version and component versions
Flags: -h, –help help for ddev -j, –json-output If true, user-oriented output will be in JSON format. -v, –version version for ddev
Use “ddev [command] –help” for more information about a command.
برای اطلاعات بیشتر در مورد استفاده از DDEV CLI ، به اسناد رسمی DDEV مراجعه کنید. با نصب DDEV در دستگاه محلی خود ، اکنون آماده نصب Drupal 9 هستید و شروع به توسعه وب سایت خواهید کرد.
گزینه 2 – نصب DDEV در لینوکس در سیستم عامل لینوکس می توانید DDEV را با استفاده از Homebrew برای لینوکس یا با استفاده از اسکریپت نصب رسمی نصب کنید. در اوبونتو ، با به روزرسانی لیست بسته های خود در مدیر بسته apt شروع کنید (شما می توانید از Debian استفاده کنید ، در غیر این صورت از مدیر بسته معادل مرتبط با توزیع لینوکس خود استفاده نمایید): ⦁ $ sudo apt update ⦁ اکنون برخی از بسته های پیش شرط را از مخزن رسمی اوبونتو نصب کنید: ⦁ $ sudo apt install build-essential apt-transport-https ca-certificates software-properties-common curl ⦁
این بسته ها به شما امکان می دهند اسکریپت نصب DDEV را از مخزن رسمی GitHub آنها دانلود کنید. اکنون اسکریپت را دانلود کنید: ⦁ $ curl -O https://raw.githubusercontent.com/drud/ddev/master/scripts/install_ddev.sh ⦁
قبل از اجرای اسکریپت ، آن را در nano یا ویرایشگر متن مورد نظر خود باز کرده و محتویات آن را بررسی کنید: nano install_ddev.sh
پس از بررسی محتوای اسکریپت و رضایت ، فایل را ذخیره کنید و ببندید . اکنون آماده اجرای اسکریپت نصب هستید. برای اجرای اسکریپت از دستور chmod استفاده کنید:
⦁ $ chmod +x install_ddev.sh ⦁
اکنون اسکریپت را اجرا کنید: ⦁ $ ./install_ddev.sh ⦁
فرآیند نصب ممکن است از شما بخواهد که برخی از تنظیمات را تأیید کنید یا رمز عبور sudo خود را وارد کنید. پس از اتمام نصب ، DDEV را در سیستم عامل لینوکس خود در دسترس خواهید داشت. نسخه ddev را برای تأیید نرم افزار خود اجرا کنید: ⦁ $ ddev version ⦁ خروجی مانند این را مشاهده خواهید کرد: Output DDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os linux router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0
DDEV یک CLI قدرتمند یا رابط خط فرمان است. ddev را بدون هیچ چیز دیگری اجرا کنید تا در مورد برخی دستورات متداول کسب اطلاعات کنید: ⦁ $ ddev ⦁
خروجی زیر را مشاهده خواهید کرد: Output Create and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support
Usage: ddev [command]
Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries. import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses ‘docker stop’ to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project’s database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add –remove-data. version print ddev version and component versions
Flags: -h, –help help for ddev -j, –json-output If true, user-oriented output will be in JSON format. -v, –version version for ddev
Use “ddev [command] –help” for more information about a command.
برای اطلاعات بیشتر در مورد استفاده از DDEV CLI ، می توانید به اسناد رسمی DDEV مراجعه کنید. با نصب DDEV در دستگاه محلی خود ، اکنون آماده استقرار Drupal 9 و توسعه وب سایت هستید.
مرحله 2 – استقرار یک سایت جدید Drupal 9 با استفاده از DDEV با اجرای DDEV ، اکنون از آن برای ایجاد یک سیستم فایل اختصاصی Drupal ، نصب Drupal 9 استفاده کرده و سپس یک پروژه وب سایت استاندارد را آغاز می کنید. ابتدا یک دایرکتوری root Project ایجاد می کنید و سپس به آن میروید. تمام دستورات باقی مانده را از این مکان اجرا خواهید کرد. در این آموزش از d9test استفاده می شود ، اما آزاد هستید که دیرکتوری خود را هر چیز دیگری بنامید. با این حال توجه داشته باشید ، که DDEV به خوبی با اسم های خط فاصله دار کار نمی کند. بهتر است از اسامی دیرکتوری مانند my-project یا drupal-site-1 اجتناب شود. دایرکتوری اصلی پروژه خود را ایجاد کرده و به داخل آن بروید: ⦁ $ mkdir d9test ⦁ ⦁ $ cd d9test
DDEV در ایجاد شاخه های دیرکتوری که مطابق با سیستم عاملهای خاص CMS هستند ، سرآمد است. برای ایجاد یک ساختار دایرکتوری خاص برای Drupal 9 از دستور پیکربندی ddev استفاده کنید: ⦁ $ ddev config –project-type=drupal9 –docroot=web –create-docroot ⦁
خروجی مانند این را مشاهده خواهید کرد: Output Creating a new ddev project config in the current directory (/Users/sammy/d9test) Once completed, your configuration will be written to /Users/sammy/d9test/.ddev/config.yaml
Created docroot at /Users/sammy/d9test/web You have specified a project type of drupal9 but no project of that type is found in /Users/sammy/d9test/web Ensuring write permissions for d9new No settings.php file exists, creating one Existing settings.php file includes settings.ddev.php Configuration complete. You may now run ‘ddev start’.
از آنجا که شما –project-type = drupal9 را به دستور ddev config خود منتقل کردید ، DDEV چندین زیرشاخه و فایل ایجاد کرده است که نمایانگر سازمان پیش فرض برای وب سایت Drupal است. درخت دایرکتوری پروژه شما اکنون به صورت زیر خواهد بود:
A Drupal 9 directory tree . ├── .ddev │   ├── .gitignore │   ├── config.yaml │   ├── db-build │   │   └── Dockerfile.example │   └── web-build │   └── Dockerfile.example └── web └── sites └── default ├── .gitignore ├── settings.ddev.php └── settings.php
6 directories, 7 files
.ddev / پوشه اصلی تنظیمات ddev خواهد بود. web/ معیار پروژه جدید شما خواهد بود که شامل فایل های settings.خاصی است. در حال حاضر داربست اولیه برای پروژه جدید Drupal خود را دارید. قدم بعدی شما تنظیم اولیه سیستم عامل است که باعث می شود کانتینرهای لازم و تنظیمات شبکه ایجاد شود. DDEV به پورت های 80 و 443 متصل می شود ، بنابراین اگر سرور مجازی وبی مانند Apache و یا هر چیز دیگری که از آن پورت ها استفاده می کند روی دستگاه خود دارید ، قبل از ادامه کار آن سرویس ها را متوقف کنید. برای تنظیم اولیه سیستم عامل خود از دستور start ddev استفاده کنید: ⦁ $ ddev start ⦁
این کار باعث می شود تمام کانتینرهای مستقر در Docker برای پروژه شما ساخته شود ، که شامل یک کانتینر وب ، یک کانتینر دیتابیس و phpmyadmin است. پس از تکمیل اولیه ، خروجی مانند این را مشاهده خواهید کرد (ممکن است شماره پورت شما متفاوت باشد): Output … Successfully started d9test Project can be reached at http://d9test.ddev.site http://127.0.0.1:32773
توجه: به یاد داشته باشید که DDEV در اینجا کانتینرهای Docker را در پشت صحنه شروع می کند. اگر می خواهید آن کانتینرها را مشاهده کنید یا تأیید کنید که در حال اجرا هستند ، می توانید همیشه از دستور docker ps استفاده کنید: ⦁ $ docker ps ⦁
در کنار هر کانتینر دیگری که هم اکنون در حال کار هستید ، چهار کانتینر جدید پیدا خواهید کرد که هر یک تصویر متفاوتی دارند: php-myadmin, ddev-webserver, ddev-router, و  ddev-dbserver-mariadb.
ddev start با موفقیت کانتینرهای شما را ساخته و خروجی با دو URL به شما داده است. در حالی که این خروجی می گوید که پروژه شما “می تواند در http://d9test.ddev.site و http://127.0.0.1:32773” حاصل شود ، بازدید از این URL ها در حال حاضر خطایی را به همراه خواهد داشت. با شروع Drupal 8 ، هسته Drupal و ماژول های مربوطه مانند متعلقات کار می کنند. بنابراین ، ابتدا باید نصب Drupal را با استفاده از Composer ، مدیر بسته برای پروژه های PHP ، قبل از هر چیزی در مرورگر وب خود نصب کنید. یکی از مفیدترین و ظریف ترین ویژگی های DDEV این است که می توانید دستورات Composer را از طریق DDEV CLI به محیط کانتینرایز خود منتقل کنید. این بدان معنی است که می توانید تنظیمات خاص دستگاه خود را از محیط توسعه جدا کنید. دیگر نیازی به مدیریت مسیرهای مختلف فایل ، متعلقات و نسخه های مربوط به آن که عموماً با توسعه PHP محلی همراه است ، ندارید. علاوه بر این ، می توانید به سرعت بین پروژه های مختلف با استفاده از چارچوب های مختلف و پشته های فناوری با حداقل تلاش ، جابه جا شوید. برای دانلود drupal/recommended-project از دستور ddev composer استفاده کنید. این دستور هسته Drupal ، کتابخانه های آن و سایر منابع مرتبط را دانلود می کند و سپس یک پروژه پیش فرض ایجاد می کند: ⦁ $ ddev composer create “drupal/recommended-project” ⦁
اکنون یک جزء نهایی به نام Drush یا Drupal Shell را دانلود کنید. در این آموزش فقط از یک دستور drush استفاده خواهد شد و این آموزش جایگزینی را ارائه می دهد ، اما drush یک CLI قدرتمند برای توسعه Drupal است که می تواند کارایی شما را بهبود بخشد. برای نصب drush از ddev composer استفاده کنید: ⦁ $ ddev composer require “drush/drush” ⦁
اکنون یک پروژه پیش فرض Drupal 9 ساخته اید و drush را نصب کرده اید. پروژه خود را در یک مرورگر مشاهده خواهید کرد و تنظیمات وب سایت خود را پیکربندی می کنید.
مرحله 3 – پیکربندی پروژه Drupal 9 شما اکنون که Drupal 9 را نصب کردید می توانید از پروژه جدید خود در مرورگرتان بازدید کنید. برای انجام این کار ، می توانید ddev را دوباره راه اندازی کرده و یکی از دو URL را که از آن خارج شده است کپی کنید ، یا می توانید از دستور زیر استفاده کنید ، که به طور خودکار سایت شما را در یک پنجره مرورگر جدید راه اندازی می کند: ⦁ $ ddev launch ⦁
با Drupal installation wizard استاندارد روبرو می شوید.
در اینجا شما دو گزینه دارید. می توانید از این رابط کاربر استفاده کنید و wizard را از طریق نصب دنبال کنید ، یا می توانید به ترمینال خود برگردید و یک دستور drush را از ddev عبور دهید. گزینه دوم فرایند نصب را خودکار می کند و مدیر را به عنوان نام کاربری و رمز عبور خود تنظیم می کند. گزینه 1 – استفاده از Wizard در مرورگر خود به wizard برگردید. در قسمت انتخاب زبان ، زبانی را از منوی کشویی انتخاب کنید و روی  Save and continue کلیک کنید. اکنون نمایه نصب را انتخاب کنید. می توانید بین Standard ، Minimal و Demo انتخاب کنید. انتخاب خود را انجام داده و سپس بر روی  Save and continue کلیک کنید. Drupal به طور خودکار نیازهای شما را تأیید می کند ، یک بانک اطلاعاتی را راه اندازی می کند و سایت شما را نصب می کند. آخرین مرحله شما این است که چند تنظیات انجام دهید. یک نام سایت و یک آدرس ایمیل سایت که به دامنه شما ختم می شود اضافه کنید. سپس نام کاربری و رمز عبور را انتخاب کنید. یک رمز عبور قوی انتخاب کنید و اعتبارات خود را در جایی ایمن نگه دارید. در آخر ، یک آدرس ایمیل خصوصی را که مرتباً بررسی می کنید ، اضافه کنید ، تنظیمات منطقه ای را اضافه کرده و Save and continue را بزنید. سایت جدید شما با یک پیام خوش آمدید لود می شود.
گزینه 2 – استفاده از خط فرمان از دیرکتوری اصلی پروژه خود ، این دستور ddev exec را اجرا کنید تا یک سایت پیش فرض Drupal را با استفاده از drush نصب کنید: ⦁ $ ddev exec drush site:install –account-name=admin –account-pass=admin ⦁
این کار سایت شما را درست مانند wizard فقط با برخی تنظیمات boilerplate ایجاد می کند. نام کاربری و رمز عبور شما admin خواهند بود. اکنون سایت را راه اندازی کنید تا در مرورگر خود مشاهده کنید: ⦁ $ ddev launch ⦁
اکنون آماده ساخت وب سایت خود هستید ، اما بهتر است بررسی صحت مجوزهای مربوط به دیرکتوری /sites/web/default را در نظر بگیرید. وقتی به صورت محلی کار می کنید ، نگرانی مهمی نیست ، اما اگر این مجوزها را به یک سرور مجازی تولید منتقل کنید ، خطرات امنیتی ایجاد می کنند.
مرحله 4 – بررسی مجوزهای خود در حین نصب wizard یا وقتی صفحه استقبال شما لود می شود ، ممکن است هشداری در مورد تنظیمات مجوزها در دیرکتوری /sites/web/default و یک فایل در آن دیرکتوری مشاهده کنید: settings.php. پس از اجرای اسکریپت نصب ، Drupal سعی خواهد کرد مجوزهای دیرکتوری web/sites/default را برای همه گروهها مطالعه و اجرا کند: این تنظیمات مجوز 555 است. همچنین سعی خواهد کرد مجوزهای default/settings.php را روی read-only یا 444 تنظیم کنید. اگر با این اخطار مواجه شدید ، این دو دستور chmod را از دیرکتوری اصلی پروژه خود اجرا کنید. عدم انجام این کار خطر امنیتی را به همراه دارد: ⦁ $ chmod 555 web/sites/default ⦁ ⦁ $ chmod 444 web/sites/default/settings.php
برای تأیید اینکه مجوزهای درستی دارید ، این دستور ls را با کلیدهای a ، l ، h و d اجرا کنید: ⦁ $ ls -alhd web/sites/default web/sites/default/settings.php ⦁
بررسی کنید که مجوزهای شما با خروجی زیر مطابقت دارد: Output dr-xr-xr-x 8 sammy staff 256 Jul 21 12:56 web/sites/default -r–r–r– 1 sammy staff 249 Jul 21 12:12 web/sites/default/settings.php
اکنون آماده ساخت وب سایت Drupal 9 در دستگاه محلی خود هستید.
مرحله 5 – ایجاد اولین پست در Drupal برای آزمایش برخی از قابلیت های Drupal ، اکنون با استفاده از UI وب ، پستی ایجاد خواهید کرد. از صفحه اولیه سایت خود ، روی دکمه محتوا در لبه سمت چپ بالای دیرکتوری کلیک کنید. اکنون روی دکمه آبی رنگ add content کلیک کنید. یک صفحه جدید ظاهر می شود روی Article کلیک کنید و صفحه دیگری ظاهر می شود.
هر عنوان و محتوایی را که دوست دارید اضافه کنید. در صورت آماده بودن ، روی دکمه save  آبی کلیک کنید. اولین پست شما در وب سایت شما ظاهر می شود
شما اکنون به لطف Docker و DDEV ، یک وب سایت Drupal 9 را در دستگاه محلی خود ایجاد کرده اید و هیچ گونه تعامل با یک سرور مجازی ندارید. در مرحله بعد ، می توانید کانتینر DDEV را برای انطباق گردش کار خود مدیریت کنید.
مرحله 6 – مدیریت کانتینر DDEV هنگامی که پروژه خود را به پایان رسانید ، یا وقتی می خواهید استراحت کنید ، می توانید بدون نگرانی در مورد از دست رفتن داده ، کانتینر DDEV خود را متوقف کنید. DDEV می تواند تعویض سریع متن را در بین بسیاری از پروژه ها مدیریت کند. این یکی از مفیدترین ویژگی های آن است. کد و داده های شما همیشه در دیرکتوری پروژه شما نگه داشته می شود ، حتی پس از متوقف کردن یا حذف کانتینر DDEV. برای آزادسازی منابع ، می توانید DDEV را در هر زمان متوقف کنید. از دیرکتوری اصلی پروژه خود ، دستور زیر را اجرا کنید: ⦁ $ ⦁ $ ddev stop ⦁
DDEV در سطح جهانی در دسترس است ، بنابراین می توانید دستورات ddev را از هرجایی اجرا کنید ، تا زمانی که پروژه DDEV را مشخص کنید: ⦁ $ ddev stop d9test ⦁
همچنین می توانید همه پروژه های خود را به طور هم زمان با استفاده از لیست ddev مشاهده کنید: ⦁ $ ddev list ⦁
DDEV شامل بسیاری از دستورات مفید دیگر است. می توانید DDEV را مجدداً راه اندازی کنید و در هر زمان توسعه محلی خود را ادامه دهید.
نتیجه در این آموزش شما از Docker و قدرت کانتینرایز برای ایجاد یک سایت Drupal به صورت محلی و به کمک DDEV استفاده کرده اید. DDEV همچنین با IDE های زیادی ادغام خوبی دارد و اشکال زدایی داخلی PHP را برای Atom ، PHPStorm و کد ویژوال استودیو (vscode) فراهم می کند. از اینجا ، می توانید در مورد ایجاد محیط های توسعه برای Drupal با DDEV یا ساخت سایر فریم ورک های PHP مانند وردپرس اطلاعات بیشتری کسب کنید.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
0 notes
vpsgoll · 4 years
Text
چگونه می توان با Stunnel و redis-cli به یک Redis نمونه مدیریت شده از طریق TLS متصل شد
نمونه Redis مدیریت شده می تواند مزایایی مانند دسترسی بالا و به روزرسانی های خودکار را ارائه دهد. با این حال ، هر زمان که با یک سرور مجازی پایگاه داده از راه دور ارتباط برقرار کنید ، خطر حمله گران برای جاسوسی اطلاعات حساس ارسال شده به آن را به همراه دارد. redis-cli ، رابط خط فرمان Redis ، به طور مستقیم از TLS ، یعنی پروتکل رمزنگاری که امکان برقراری ارتباط امن از طریق شبکه را فراهم می کند، پشتیبانی نمی کند. این بدان معنی است که بدون پیکربندی بیشتر ، redis-cli راهی مطمئن برای اتصال به یک سرور مجازی Redis از راه دور نیست. یکی از راه های برقراری ارتباط امن با نمونه Redis ایجاد شده ، ایجاد تونلی است که از پروتکل TLS استفاده می کند. Stunnel یک پروکسی منبع باز است که برای ایجاد تونل های ایمن استفاده می شود و به شما امکان می دهد تا با ماشین های دیگر از طریق TLS ارتباط برقرار کنید. در این راهنما ، ما نصب و پیکربندی Stunnel را نشان میدهیم تا بتوانید با redis-cli به نمونه Redisمدیریت شده با Redis متصل شوید. پیش نیازها برای تکمیل این راهنما ، به موارد زیر نیاز دارید: • دسترسی به سرور مجازی اوبونتو 18.04. این سرور مجازی باید دارای کاربر غیر ریشه و امتیازات ادمین و فایروال تنظیم شده با ufw باشد. برای انجام این کار ، راهنمای راه اندازی سرور مجازی اولیه ما برای اوبونتو 18.04 را دنبال کنید. • یک نمونه پایگاه داده Redis مدیریت شده: مراحل ذکر شده در این آموزش به طور کلی برای بانکهای اطلاعاتی مدیریت شده از هر ارائه دهنده ابری کار میکنند. مرحله 1 – نصب Stunnel و redis-cli هنگامی که سرور مجازی Redis را نصب می کنید ، معمولاً با redis-cli همراه است. با این وجود ، می توانید با نصب بسته redis-tools از مخازن پیش فرض اوبونتو ، redis-cli را بدون سرور مجازی Redis نصب کنید. همچنین می توانید با دانلود بسته stunnel4 ، stunnel را از مخازن پیش فرض اوبونتو نصب کنید. اگر اخیراً این کار را نکرده اید ، دیرکتوری بسته سرور مجازی خود را به روز کنید: $ sudo apt update
سپس بسته های redis-tools و stunnel4 را با APT نصب کنید: $ sudo apt install redis-tools stunnel4
هنگامی که از شما درخواست شد ، تأیید کنید که می خواهید بسته ها را نصب کنید. با اجرای دستور زیر می توانید بررسی کنید که آیا stunnel به صورت صحیح نصب شده است یا خیر: $ sudo systemctl status stunnel4
Output ● stunnel4.service – LSB: Start or stop stunnel 4.x (TLS tunnel for network daemons) Loaded: loaded (/etc/init.d/stunnel4; generated) Active: active (exited) since Thu 2019-09-12 14:34:05 UTC; 8s ago Docs: man:systemd-sysv-generator(8) Tasks: 0 (limit: 2362) CGroup: /system.slice/stunnel4.service
Sep 12 14:34:05 stunnel systemd[1]: Starting LSB: Start or stop stunnel 4.x (TLS tunnel for network daemons)… Sep 12 14:34:05 stunnel stunnel4[2034]: TLS tunnels disabled, see /etc/default/stunnel4 Sep 12 14:34:05 stunnel systemd[1]: Started LSB: Start or stop stunnel 4.x (TLS tunn
در اینجا ، می بینید که سرویس stunnel فعال است ، اگرچه این روند بلافاصله خارج می شود. این به ما می گوید که stunnel در حال اجراست ، اما از آنجایی که ما هنوز پیکربندی نکرده ایم ، قادر به انجام عملی نیستیم. مرحله 2 – پیکربندی Stunnel سیستم های مدرن لینوکس برای تنظیم اولیه و مدیریت خدمات و دیمن ها به سیستم متکی هستند. با این حال ، stunnel برای راه اندازی از اسکریپت مبتنی بر سبک SysV که مبتنی بر سیستم قدیمی UNIX System V init است ، استفاده می کند. برای فعال کردن این اسکریپت اولیه باید فایل / etc / default / stunnel4 را تغییر دهید. این فایل را با ویرایشگر متن مورد نظر خود باز کنید. در اینجا ، ما از nano استفاده خواهیم کرد: $ sudo nano /etc/default/stunnel4
گزینه ENABLED را در بالای فایل پیدا کنید. به طور پیش فرض روی 0 تنظیم می شود ، اما ان را به 1 تغییر می دهد تا بتواند در بوت شروع به کار کند: /etc/default/stunnel4 # /etc/default/stunnel # Julien LEMOINE <[email protected]> # September 2003
# Change to one to enable stunnel automatic startup ENABLED=1 . . .
فایل را ذخیره کنید و ببندید. اگر از nano برای ویرایش فایل استفاده کرده اید ، این کار را با فشار دادن CTRL + X ، ، سپس Y انجام دهید. در مرحله بعد ، نیاز به ایجاد یک فایل پیکربندی برای stunnel دارید که به برنامه می گوید کجا به مسیریابی ترافیک نیاز دارد. فایل جدیدی به نام stunnel.conf را تحت دیرکتوری / etc / stunnel باز کنید: $ sudo nano /etc/stunnel/stunnel.conf
محتوای زیر را به این فایل اضافه کنید: /etc/stunnel/stunnel.conf fips = no setuid = nobody setgid = nogroup pid = /home/sammy/pids/stunnel.pid debug = 7 delay = yes [redis-cli] client = yes accept = 127.0.0.1:8000 connect = managed_redis_hostname_or_ip:managed_redis_port
پنج خط اول در فایل گزینه های جهانی هستند ، به این معنی که آنها برای هر سرویسی که در این فایل گنجانده اید اعمال خواهد شد: fips: حالت FIPS 140-2 را برای stunnel فعال یا غیرفعال می کند. در این حالت ، stunnel تأیید می کند که اتصال مطابق با استاندارد پردازش اطلاعات فدرال است. تنظیم آن روی no این ویژگی را غیرفعال می کند. توجه داشته باشید که غیرفعال کردن این امر امنیت کمتری ندارد ، اما فعال کردن آن (به صورت پیش فرض) به پیکربندی بیشتری نیاز دارد. setuid: شناسه کاربر یونیکس را که تحت آن stunnel اجرا می شود تعریف میکند. به طور پیش فرض ، روند stunnel متعلق به کاربر root است. با این حال ، مستندات stunnel توصیه می کنند که پس از شروع stunnel ، امتیازات ادمین را رها کنید ، زیرا عدم انجام این کار خطر امنیتی را ایجاد می کند. تنظیم پارامتر setuid  بر روی nobody  باعث می شود که هیچ کاربر غیرمجازی پس از شروع به کار stunnel ، روند آن را به تصرف خود نیاورد. setgid: شناسه گروه یونیکس را تعریف می کند که stunnel تحت آن اجرا می شود. مانند تنظیمات setuid ، این پیکربندی گروهی را بدون هیچ گونه امتیاز ویژه – nogroup  – مشخص می کند تا از مشکلات امنیتی احتمالی جلوگیری کند. pid: موقعیت فایل را تعریف می کند که در آن stunnel یک فایل .pid ایجاد کند ، نوعی فایل که حاوی PID فرآیند است. فایلهای pid معمولاً توسط برنامه های دیگر برای یافتن PID یک فرایند در حال اجرا استفاده می شوند. به طور پیش فرض ، stunnel یک فایل .pid را در دیرکتوری / var / run / stunnel4 / ایجاد می کند ، اما به دلیل اینکه هیچ کاربری اجازه دسترسی به آن دیرکتوری را ندارد ، از شروع صحیح stunnel جلوگیری می کند. در عوض ، این خط فایلی به نام stunnel.pid را که در پوشه ای به نام pids در دیرکتوری هوم کاربر Ubuntu نگهداری می شود ، مشخص می کند. ما در ادامه این دیرکتوری و فایل stunnel.pid را ایجاد خواهیم کرد. همینطور که این خط را اضافه می کنید ، حتماً sammy را به نام کاربر سیستم Ubuntu خود تغییر دهید. debug: سطح اشکال زدایی stunnel را تنظیم می کند ، که می تواند از 0 تا 7 باشد. در این مثال ما آن را به 7 ، بالاترین سطح در دسترس قرار می دهیم ، زیرا در صورت بروز هرگونه مشکل ، دقیق ترین اطلاعات را ارائه می دهد. می توانید آن را در هر سطحی که دوست دارید تنظیم کنید ، اما توجه داشته باشید که تنظیم پیش فرض 5 است. delay: هنگامی که روی بله تنظیم میشود ، این گزینه باعث می شود تا stunnel جستجوی DNS برای آدرس ذکر شده در گزینه اتصال را به تأخیر بیندازد. همچنین از عدم دسترسی آدرس IP جلوگیری می کند. این کار باعث می شود که حتی اگر نمونه Redis آفلاین باشد، همانطور که می تواند هنگام افزایش اندازه خوشه شما اتفاق بیفتد، تونل را باز نگه دارد. خطوط باقیمانده گزینه هایی در سطح سرویس ها هستند و فقط برای تونلی که ما برای redis-cli ایجاد خواهیم کرد اعمال می شود: [redis-cli] : یک نام سرویس است و مشخص می کند که خطوط زیر یک پیکربندی سرویس فردی برای یک برنامه کلاینت را نشان می دهد. شما می توانید بیش از یک سرویس را در یک فایل پیکربندی stunnel داشته باشید ، هر چند که باید با یک برنامه کلاینت موجود همراه باشد و نمی توانید دو سرویس برای یک برنامه مشابه داشته باشید. Client: تنظیم این گزینه روی بله به stunnel می گوید که در حالت کلاینت اجرا شود ، به این معنی که stunnel به جای اینکه به عنوان یک سرور مجازی TLS عمل کند ، به یک سرور مجازی TLS (نمونه Redis مدیریت شده) وصل می شود. accept: میزبان و پورت را که تونل در آن از کلاینت پشتیبانی می کند ، تعریف می کند. در اینجا ، ما آدرس IP 127.0.0.1 را مشخص می كنیم ، كه یك آدرس IPv4 loopback است كه برای نمایش localhost و پورت 8000 استفاده می شود. این بدان معناست كه stunnel اتصالات منشاء گرفته از سرور مجازی اوبونتو را در پورت 8000 گوش می دهد و آنها را رمزگذاری می كند. توجه داشته باشید که می توانید پورت را روی هر شماره پورتی که که از قبل استفاده نشده تنظیم کنید. connect: آدرس و پورت راه دور را که stunnel به آن متصل میشود را تعیین می کند. حتماً این پارامتر را تغییر دهید تا با پورت و نام میزبان یا آدرس IP پایگاه داده مدیریت شده مطابقت داشته باشید. توجه: نام میزبان یا آدرس IP و پورتی که باید در بخشنامه اتصال مشخص کنید مربوط به بانک اطلاعاتی Redis شما می باشد. این موارد معمولاً در رابط کاربری مدیریت پایگاه داده ارائه دهنده ابری شما وجود دارد که نمونه Redis خود را تهیه کرده اید. این پیکربندی نسبتاً جزیی است که بسیاری از تنظیمات پیش فرض stunnel را کنار می گذارد. این برنامه برای ایجاد تونل هایی متناسب با نیازهای خاص شما گزینه های بسیاری در اختیار شما قرار داده است. برای اطلاعات بیشتر به اسناد رسمی مراجعه کنید. پس از افزودن این محتوا ، فایل را ذخیره کنید و ببندید. سپس ، مطمئن شوید که شما در دیرکتوری اصلی کاربر اوبونتو هستید: $ cd
در مرحله بعد پوشه pids را که فایل stunnel.pid را نگه می دارد ایجاد کنید: $ mkdir pids
فرآیند stunnel فایل stunnel.pid را بطور خودکار ایجاد می کند ، بنابراین نیازی نیست خودتان این فایل را ایجاد کنید. با این حال ، نیاز به تغییر مالکیت دایرکتوری pids در گروه کاربر و گروه های جدید دارید: $ sudo chown -R nobody:nogroup pids/
سپس سرویس stunnel4 را مجدداً راه اندازی کنید تا stunnel فایل پیکربندی جدید را بخواند: $ sudo systemctl restart stunnel4
پس از آن ، می توانید آزمایش کنید که آیا stunnel با استفاده از netstat ، ابزار خط فرمان که برای نمایش اتصالات شبکه استفاده می شود ، با موفقیت یک تونل ایجاد کرده است. دستور زیر را اجرا کنید ، که خروجی netstat را به یک دستور grep پایپ می کند ، که به نوبه خود آن را برای هر نمونه از stunnel جستجو می کند: $ sudo netstat -plunt | grep stunnel
Output tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 17868/ این خروجی نشان می دهد که stunnel در حال گوش دادن به اتصالات در پورت محلی 8000 است. همچنین می توانید تأیید کنید که هیچ کس مالکیت فرآیند stunnel را با ps ، یعنی برنامه ای که تمام فرآیندهای در حال اجرا را نشان می دهد، در دست نگرفته است: $ ps aux | grep stunnel
Output nobody 15674 0.0 0.1 121912 3180 ? Ssl 19:28 0:00 /usr/bin/stunnel4 /etc/stunnel/stunnel.conf . . .
در اینجا ، می بینید که هیچ کس واقعاً روند stunnel را به دست نگرفته است. اکنون Stunnel کاملاً پیکربندی شده است و روی سیستم شما کار می کند. اکنون آماده اتصال به نمونه Redis مدیریت شده و تست کارکرد تونل هستید. مرحله 3 – اتصال به بانک اطلاعاتی مدیریت شده از طریق TLS اکنون که redis-cli را بر روی سرور مجازی خود نصب و stunnel را پیکربندی کرده اید، آماده هستید تا از طریق TLS به بانک اطلاعاتی مدیریت شده خود وصل شوید. بر اساس تنظیمات تعریف شده در فایل پیکربندی ایجاد شده در مرحله 2 ، با دستور زیر به پایگاه داده مدیریت شده خود وصل می شوید: $ redis-cli -h localhost -p 8000
این دستور شامل پرچم -h است که به redis-cli می گوید که آرگومان بعدی میزبان اتصال به آن خواهد بود. در این حالت ، از آنجا که ما به یک تونلی که به صورت محلی روی سرور مجازی ایجاد شده است متصل میشویم، localhost  خواهد بود. پس از آن پرچم -p است که بر پورت تونل محلی که به آن متصل می شویم ، پیشی میگیرد که در این حالت پورت 8000 است. پس از اجرای آن فرمان ، به سرور مجازی مدیریت شده Redis خود متصل خواهید شد. اعلان شما تغییر خواهد کرد تا منعکس کننده اتصال و در حالت تعاملی redis-cli شما باشد: Localhost:8000> توجه: اغلب اوقات ، پایگاه داده های مدیریت شده پیکربندی می شوند تا کاربران را هنگام اتصال با رمز عبوری که وارد میکنند احراز هویت کنند. اگر نمونه Redis مدیریت شده شما نیاز به رمزعبور دارد ، می توانید پرچم -a را در فرمان redis-cli خود وارد کنید ، و پس از آن رمز عبور خود را دنبال کنید: $ redis-cli -h localhost -p 8000 -a password
از طرف دیگر ، می توانید با اجرای دستور auth و پسورد خود پس از برقراری اتصال ، تأیید اعتبار کنید: Localhost:8000> auth password
با اجرای دستور ping از حالت تعاملی Redis می توانید آزمایش کنید که آیا تونل کار می کند: Localhost:8000> ping
اگر اتصال زنده باشد ، PONG را برمی گرداند: Output PONG
اگر با این حال ، stunnel به درستی ترافیک را از سرور مجازی شما به نمونه Redis شما تونل نکند ، ممکن است قبل از جدا شدن از Redis ، پیغام خطایی مانند این را مشاهده کنید: Output Error: Server closed the connection
اگر این یا یک خطای مشابه را دریافت کرده اید ، دوباره بررسی کنید که نام میزبان و پورت Redis را به درستی در فایل stunnel.conf خود وارد کرده اید. به همین ترتیب ، مطمئن باشید که شماره فرمان صحیح را در دستور redis-cli خود وارد کرده اید. همچنین می توانید هنگامی که نمونه Redis مدیریت شده اتصالات باز خود را بازنشانی می کند ، این خطا را دریافت کنید ، همانطور که می تواند هنگام پیکربندی تنظیمات خوشه اتفاق بیفتد. در چنین مواردی ، ممکن است از Redis جدا نشوید ، اگرچه لازم است مجدداً تأیید اعتبار کنید. پس از تأیید کار تونل ، پیش بروید و از نمونه Redis خود جدا شوید: Localhost:8000> exit
اگر پیکربندی stunnel را تغییر دهید ، باید سرویس stunnel4 را بار دیگر بارگذاری یا ریستارت کنید ، تا stunnel متوجه تغییرات شود: $ sudo systemctl reload stunnel4
اگر در هر زمانی در آینده می خواهید تونل TLS را ببندید ، می توانید با systemctl نیز این کار را انجام دهید: $ sudo systemctl stop stunnel4
بعد از اینکه بنز تونل بسته شد ، می توانید با شروع دوباره سرویس ، تونل را مجدداً باز کنید: $ sudo systemctl start stunnel4
اکنون که پیکربندی خود را با موفقیت انجام داده اید ، شروع به اضافه کردن داده ها به نمونه Redis مدیریت شده با Redis-cli میکنید. نتیجه Stunnel ابزاری مفید برای ایجاد تونل های TLS و برقراری اتصالات ایمن به سرور مجازی های از راه دور است. این امر به ویژه در مواردی که انتقال ایمن اطلاعات بین ماشین ها بسیار مهم است ، مانند پایگاه داده از راه دور، بسیار مفید خواهد بود. از اینجا ، می توانید کاوش در Redis و ادغام آن با برنامه بعدی خود را شروع کنید. اگر به تازگی کار با Redis را شروع کرده اید ، ممکن است مجموعه مقالات ما را در مورد چگونگی مدیریت یک بانک اطلاعاتی Redis برایتان مفید باشد.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان – 
0 notes
vpsgoll · 4 years
Text
نحوه میزبانی وب سایت با استفاده از Cloudflare و Nginx در اوبونتو 20.04
Cloudflare سرویسی است که بین بازدید کننده و سرور مجازی مالک وب سایت قرار دارد و به عنوان یک پروکسی معکوس برای وب سایت ها عمل می کند. Cloudflare یک شبکه انتقال محتوا (CDN) ، و همچنین خدمات سرور مجازی کاهش نام دامنه توزیع شده DDoS را فراهم می کند.
Nginx یک سرور مجازی وب مشهور است که مسئول میزبانی برخی از بزرگترین و پر ترافیک ترین سایتهای اینترنت است. معمولا سازمانها وب سایتها را با Nginx ارائه کرده و از Cloudflare به عنوان ارائه دهنده CDN و DNS استفاده می کنند. در این آموزش ، وب سایت خود را که توسط Nginx با گواهی Origin CA از Cloudflare ارائه میشود ایمن میکنید و سپس Nginx را برای استفاده از درخواستهای معتبر پیکربندی میکنید. مزایای استفاده از این ستاپ این است که شما از CDN Cloudflare و وضوح سریع DNS بهره می برید و در عین حال اطمینان حاصل می کنید که همه اتصالات از Cloudflare عبور می کنند. این مانع از رسیدن هرگونه درخواست مخرب به سرور مجازی شما می شود. پیش نیازها برای تکمیل این آموزش به موارد زیر نیاز دارید: ⦁ یک سرور مجازی Ubuntu 20.04 با پیروی از راهنمای ستاپ اولیه سرور مجازی Ubuntu 20.04 ، از جمله یک کاربر sudo غیر ریشه و فایروال راه اندازی شده. ⦁ Nginx بر روی سرور مجازی شما نصب شده باشد. می توانید راهنمای ما در مورد نحوه نصب Nginx را در اوبنتو 20.04 دنبال کنید. ⦁ یک حساب Cloudflare ⦁ یک دامنه ثبت شده به حساب Cloudflare شما اضافه شده باشد که به سرور مجازی Nginx شما اشاره کند. راهنمای ما در مورد چگونگی کاهش حملات DDoS علیه وب سایت خود با Cloudflare می تواند در انجام این کار به شما کمک کند. مقدمه ما در مورد اصطلاحات DNS ، مؤلفه ها و مفاهیم نیز می تواند مفید باشد. ⦁ سرور مجازی Nginx Block برای دامنه شما پیکربندی شده باشد ، که می توانید با دنبال کردن مرحله 5 نحوه نصب Nginx در اوبونتو 20.04 ، آن را انجام دهید. مرحله 1 – تولید گواهی Origin CA TLS Cloudflare Origin CA به شما امکان می دهد تا یک گواهی TLS رایگان امضا شده توسط Cloudflare برای نصب بر روی سرور مجازی Nginx خود تولید کنید. با استفاده از گواهی TLS تولید شده Cloudflare می توانید ارتباط بین سرور مجازیهای Cloudflare و سرور مجازی Nginx خود را تضمین کنید. برای تولید گواهی نامه با Origin CA ، در یک مرورگر وب به حساب Cloudflare خود وارد شوید. دامنه مورد نظر برای تأمین امنیت را انتخاب کرده و به بخش SSL / TLS داشبورد Cloudflare خود بروید. از آنجا به تب Origin Server بروید و بر روی دکمه Create Certificate کلیک کنید:
گزینه پیش فرض Let Cloudflare generate a private key and a CSR را انتخاب کنید.
بر روی Next کلیک کنید و گفتگویی با Origin Certificate و Private key را مشاهده خواهید کرد. شما باید گواهی مبدا و کلید خصوصی را از Cloudflare به سرور مجازی خود منتقل کنید. به دلایل امنیتی ، اطلاعات Private Key مجدداً نمایش داده نمی شود ، بنابراین قبل از کلیک بر روی Ok ، کلید سرور مجازی خود را کپی کنید.
شما از دیرکتوری / etc / ssl در سرور مجازی برای نگه داشتن گواهی مبدا و فایل های کلید خصوصی استفاده خواهید کرد. این پوشه در حال حاضر در سرور مجازی وجود دارد. ابتدا محتویات Certificate Origin نمایش داده شده در کادر گفتگو در مرورگر خود را کپی کنید. سپس ، در سرور مجازی خود ، /etc/ssl/cert.pem را در ویرایشگر متن مورد نظر خود باز کنید: ⦁ $ sudo nano /etc/ssl/cert.pem ⦁ محتوای گواهی را در فایل اضافه کنید. سپس ذخیره کنید و از ویرایشگر خارج شوید. سپس به مرورگر خود بازگردید و محتویات کلید خصوصی را کپی کنید. فایل /etc/ssl/key.pem را برای ویرایش باز کنید: ⦁ $ sudo nano /etc/ssl/key.pem ⦁ کلید خصوصی را درون فایل قرار دهید ، فایل را ذخیره کنید و از ویرایشگر خارج شوید. توجه: گاهی اوقات ، هنگامی که گواهی و کلید را از داشبورد Cloudflare کپی می کنید و آن را در فایل های مربوطه روی سرور مجازی پیست میکنید ، خطوط خالی درج می شود. Nginx چنین گواهینامه ها و کلیدها را نامعتبر میداند ، بنابراین اطمینان حاصل کنید که هیچ خط خالی در فایل های شما وجود نداشته باشد.
هشدار: گواهی Origin CA Cloudflare فقط به Cloudflare اعتماد میکند و بنابراین فقط باید توسط سرور مجازی های مبدأ استفاده شود که به طور فعال به Cloudflare متصل هستند. اگر در هر لحظه Cloudflare را متوقف یا غیرفعال کنید ، گواهی Origin CA شما خطای گواهی نامعتبر را به همراه خواهد داشت.
اکنون که فایلهای کلید و مجوز را در سرور مجازی خود کپی کرده اید ، برای استفاده از آنها باید پیکربندی Nginx را به روز کنید. مرحله 2 – نصب گواهی Origin CA در Nginx در بخش قبلی ، با استفاده از داشبورد Cloudflare یک گواهی مبدأ و کلید خصوصی ایجاد کرده و فایل ها را در سرور مجازی خود ذخیره کردید. اکنون پیکربندی Nginx را برای استفاده از گواهی مبدا و کلید خصوصی برای اطمینان از اتصال بین سرور مجازیهای Cloudflare و سرور مجازی خود ، پیکربندی Nginx را به روز خواهید کرد. ابتدا مطمئن شوید UFW ترافیک HTTPS را امکان پذیر می کند. Nginx Full را فعال کنید ، که پورت 80 (HTTP) و پورت 443 (HTTPS) را باز می کند: ⦁ $ sudo ufw allow ‘Nginx Full’ ⦁ اکنون UFW را مجدد لود کنید: ⦁ $ sudo ufw reload ⦁ در آخر ، بررسی کنید که قوانین جدید شما مجاز باشند یا UFW فعال باشد: ⦁ $ sudo ufw status ⦁ خروجی مانند این را مشاهده خواهید کرد: Output Status: active
To Action From — —— —- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
اکنون آماده تنظیم بلوک سرور مجازی Nginx خود هستید. Nginx در حین نصب بلوک سرور مجازی پیش فرض ایجاد می کند. اگر هنوز وجود دارد ، آن را حذف کنید ، زیرا قبلاً یک بلوک سرور مجازی اختصاصی برای دامنه خود پیکربندی کرده اید: ⦁ $ sudo rm /etc/nginx/sites-enabled/default ⦁ سپس ، فایل پیکربندی Nginx را برای دامنه خود باز کنید: ⦁ $ sudo nano /etc/nginx/sites-available/your_domain ⦁ فایل باید به صورت زیر باشد: /etc/nginx/sites-available/your_domain server { listen 80; listen [::]:80;
root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / { try_files $uri $uri/ =404; } }
برای تنظیم موارد زیر فایل پیکربندی Nginx را اصلاح می کنید: • به پورت 80 گوش دهید و کلیه درخواست ها را برای استفاده از https تغییر دهید. • به پورت443 گوش داده و از گواهی مبدا و کلید خصوصی اضافه شده در قسمت قبلی استفاده کنید. فایل را تغییر دهید تا به شکل زیر باشد: /etc/nginx/sites-available/your_domain server { listen 80; listen [::]:80; server_name your_domain www.your_domain; return 302 https://$server_name$request_uri; }
server {
# SSL configuration
listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem;
server_name your_domain www.your_domain;
root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html;
location / { try_files $uri $uri/ =404; } }
فایل را ذخیره کرده و از ویرایشگر خارج شوید. در مرحله بعد ، اطمینان حاصل کنید که هیچ خطای نحوی در هیچ یک از فایل های تنظیمات Nginx شما وجود ندارد: ⦁ $sudo nginx -t ⦁ اگر مشکلی پیدا نکردید ، Nginx را دوباره فعال کنید تا تغییرات خود را فعال کنید: ⦁ $ sudo systemctl restart nginx ⦁ حال به بخش SSL / TLS داشبورد Cloudflare بروید ، به تب Overview بروید و حالت رمزگذاری SSL / TLS را به حالت کامل (دقیق) تغییر دهید. این به Cloudflare اطلاع می دهد تا همیشه ارتباط بین Cloudflare و سرور مجازی Nginx منشاء شما را رمزگذاری کند.
اکنون به وب سایت خود در https: // your_domain مراجعه کنید تا صحت تنظیم آن را تأیید کنید. صفحه اصلی خود را مشاهده خواهید کرد و مرورگر گزارش می دهد که سایت امن است. در قسمت بعد ، شما Authenticated Origin Pulls را تأیید می کنید که سرور مجازی مبدا شما در واقع با Cloudflare ارتباط برقرار می کند و نه برخی دیگر از سرور مجازی ها. با این کار ، Nginx پیکربندی می شود که تنها درخواست هایی را که از گواهی کلاینت معتبر از Cloudflare استفاده می کنند ، بپذیرد. کلیه درخواستهایی که از Cloudflare عبور نکرده اند رد می شوند. مرحله 3 – تنظیم Authenticated Origin Pulls گواهی Origin CA به Cloudflare کمک می کند تا تایید کند که در حال گفتگو با سرور مجازی درست است. در این مرحله از تأیید هویت کلاینت TLS برای تأیید صحت سرور مجازی Nginx که با Cloudflare در حال گفتگو است ، استفاده می کند. در یک ارتباط TLS تأیید شده توسط کلاینت ، هر دو طرف یک گواهی برای تأیید ارائه می دهند. سرور مجازی مبدا پیکربندی شده است که فقط درخواستهایی را قبول کند که از گواهی کلاینت معتبر از Cloudflare استفاده می کنند. درخواست هایی که از Cloudflare عبور نکرده اند رد می شوند زیرا گواهی Cloudflare را ندارند. این بدان معنی است که حمله گران مخرب نمی توانند اقدامات امنیتی Cloudflare را دور بزنند و مستقیماً به سرور مجازی Nginx شما متصل شوند. Cloudflare گواهینامه های امضا شده توسط CA با گواهی زیر را ارائه می دهد: —–BEGIN CERTIFICATE—– MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI 42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3 Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5 lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa +4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1 QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz 6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z 0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc 5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/ fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM fVQ6VpyjEXdiIXWUq/o= —–END CERTIFICATE—–
همچنین می توانید گواهی را مستقیماً از Cloudflare در این لینک دانلود کنید. این گواهی را کپی کنید. سپس فایل /etc/ssl/cloudflare.crt را برای نگه داشتن گواهی Cloudflare ایجاد کنید: ⦁ $ sudo nano /etc/ssl/cloudflare.crt ⦁ گواهی را به فایل اضافه کنید. سپس فایل را ذخیره کرده و از ویرایشگر خارج شوید. اکنون پیکربندی Nginx خود را به روز کنید تا از TLS Authenticated Origin Pulls استفاده کنید. فایل پیکربندی را برای دامنه خود باز کنید: ⦁ $ sudo nano /etc/nginx/sites-available/your_domain ⦁
دستورالعملهای ssl_client_certificate و ssl_verify_client را همانطور که در مثال زیر نشان داده شده است اضافه کنید: /etc/nginx/sites-available/your_domain . . .
server {
# SSL configuration
listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; ssl_client_certificate /etc/ssl/cloudflare.crt; ssl_verify_client on;
. . .
فایل را ذخیره کرده و از ویرایشگر خارج شوید. سپس ، Nginx را آزمایش کنید تا مطمئن شوید که هیچ خطای نحوی در پیکربندی Nginx شما وجود ندارد: ⦁ $ sudo nginx -t ⦁ اگر مشکلی پیدا نشد ، Nginx را ریستارت کنید تا تغییرات خود را اعمال کنید: ⦁ $ sudo systemctl restart nginx ⦁ در آخر ، برای فعال کردن Authenticated Pulls ، بخش SSL / TLS را در داشبورد Cloudflare باز کنید ، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را تغییر دهید.
اکنون به وب سایت خود در https: // your_domain مراجعه کنید تا صحت تنظیم آن را تأیید کنید. مانند قبل ، صفحه اصلی خود را نمایش داده خواهید کرد. برای تأیید اینکه سرور مجازی شما فقط درخواستهای امضا شده توسط CA Cloudflare را قبول خواهد کرد ، گزینه Authenticated Origin Pulls را انتخاب کنید تا غیرفعال شود و سپس وب سایت خود را دوباره لود کنید. باید پیام خطای زیر را دریافت کنید:
اگر CA Cloudflare درخواستی را امضا نکند ، سرور مجازی مبدا شما خطایی را ایجاد می کند. توجه: بیشتر مرورگرها درخواستها را ذخیره می کنند ، بنابراین برای دیدن تغییر فوق می توانید از حالت جستجوی Incognito/Private در مرورگر خود استفاده کنید. برای جلوگیری از عدم دسترسی به درخواست Cloudflare در هنگام تنظیم وب سایت ، به مرور کلی در داشبورد Cloudflare بروید و حالت توسعه را تغییر دهید.
اکنون که می دانید درست کار می کند به بخش SSL / TLS در داشبورد Cloudflare برگردید ، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را دوباره بزنید تا فعال شود. نتیجه در این آموزش وب سایت خود Nginx را با رمزگذاری ترافیک بین Cloudflare و سرور مجازی Nginx با استفاده از گواهینامه Origin CA از Cloudflare ، ای��ن کردید. سپس Authenticated Origin Pulls را روی سرور مجازی Nginx تنظیم میکنید تا اطمینان حاصل شود که تنها درخواستهای سرور مجازی های Cloudflare را می پذیرد و از اتصال مستقیم دیگران به سرور Nginx جلوگیری می کند.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
0 notes
vpsgoll · 4 years
Text
نحوه میزبانی وب سایت با استفاده از Cloudflare و Nginx در اوبونتو 18.04
Cloudflare سرویسی است که بین بازدید کننده و سرور مجازی مالک وب سایت قرار دارد و به عنوان یک پروکسی معکوس برای وب سایت ها عمل می کند. Cloudflare یک شبکه انتقال محتوا (CDN) ، و همچنین خدمات سرور مجازی کاهش نام دامنه توزیع شده DDoS را فراهم می کند.
Nginx یک سرور مجازی وب مشهور است که مسئول میزبانی برخی از بزرگترین و پر ترافیک ترین سایتهای اینترنت است. معمولا سازمانها وب سایتها را با Nginx ارائه کرده و از Cloudflare به عنوان ارائه دهنده CDN و DNS استفاده می کنند. در این آموزش ، وب سایت خود را که توسط Nginx با گواهی Origin CA از Cloudflare ارائه میشود ایمن میکنید و سپس Nginx را برای استفاده از درخواستهای معتبر پیکربندی میکنید. مزایای استفاده از این ستاپ این است که شما از CDN Cloudflare و وضوح سریع DNS بهره می برید و در عین حال اطمینان حاصل می کنید که همه اتصالات از Cloudflare عبور می کنند. این مانع از رسیدن هرگونه درخواست مخرب به سرور مجازی شما می شود. پیش نیازها برای تکمیل این آموزش به موارد زیر نیاز دارید: ⦁ یک سرور مجازی Ubuntu 18.04 با پیروی از راهنمای ستاپ اولیه سرور مجازی Ubuntu 18.04 ، از جمله یک کاربر sudo غیر ریشه و فایروال راه اندازی شده. ⦁ Nginx بر روی سرور مجازی شما نصب شده باشد. می توانید راهنمای ما در مورد نحوه نصب Nginx را در اوبنتو 18.04 دنبال کنید. ⦁ یک حساب Cloudflare ⦁ یک دامنه ثبت شده به حساب Cloudflare شما اضافه شده باشد که به سرور مجازی Nginx شما اشاره کند. راهنمای ما در مورد چگونگی کاهش حملات DDoS علیه وب سایت خود با Cloudflare می تواند در انجام این کار به شما کمک کند. مقدمه ما در مورد اصطلاحات DNS ، مؤلفه ها و مفاهیم نیز می تواند مفید باشد. ⦁ سرور مجازی Nginx Block برای دامنه شما پیکربندی شده باشد ، که می توانید با دنبال کردن مرحله 5 نحوه نصب Nginx در اوبونتو 18.04 ، آن را انجام دهید. مرحله 1 – تولید گواهی Origin CA TLS Cloudflare Origin CA به شما امکان می دهد تا یک گواهی TLS رایگان امضا شده توسط Cloudflare برای نصب بر روی سرور مجازی Nginx خود تولید کنید. با استفاده از گواهی TLS تولید شده Cloudflare می توانید ارتباط بین سرور مجازی های Cloudflare و سرور مجازی Nginx خود را تضمین کنید. برای تولید گواهی نامه با Origin CA ، در یک مرورگر وب به حساب Cloudflare خود وارد شوید. دامنه مورد نظر برای تأمین امنیت را انتخاب کرده و به بخش SSL / TLS داشبورد Cloudflare خود بروید. از آنجا به تب Origin Server بروید و بر روی دکمه Create Certificate کلیک کنید:
گزینه پیش فرض Let Cloudflare generate a private key and a CSR را انتخاب کنید.
بر روی Next کلیک کنید و گفتگویی با Origin Certificate و Private key را مشاهده خواهید کرد. شما باید گواهی مبدا و کلید خصوصی را از Cloudflare به سرور مجازی خود منتقل کنید. به دلایل امنیتی ، اطلاعات Private Key مجدداً نمایش داده نمی شود ، بنابراین قبل از کلیک بر روی Ok ، کلید سرور مجازی خود را کپی کنید.
شما از دیرکتوری / etc / ssl در سرور مجازی برای نگه داشتن گواهی مبدا و فایل های کلید خصوصی استفاده خواهید کرد. این پوشه در حال حاضر در سرور مجازی وجود دارد. ابتدا محتویات Certificate Origin نمایش داده شده در کادر گفتگو در مرورگر خود را کپی کنید. سپس ، در سرور مجازی خود ، /etc/ssl/cert.pem را در ویرایشگر متن مورد نظر خود باز کنید: ⦁ $ sudo nano /etc/ssl/cert.pem ⦁ محتوای گواهی را در فایل اضافه کنید. سپس ذخیره کنید و از ویرایشگر خارج شوید. سپس به مرورگر خود بازگردید و محتویات کلید خصوصی را کپی کنید. فایل /etc/ssl/key.pem را برای ویرایش باز کنید: ⦁ $ sudo nano /etc/ssl/key.pem ⦁ کلید خصوصی را درون فایل قرار دهید ، فایل را ذخیره کنید و از ویرایشگر خارج شوید. توجه: گاهی اوقات ، هنگامی که گواهی و کلید را از داشبورد Cloudflare کپی می کنید و آن را در فایل های مربوطه روی سرور مجازی پیست میکنید ، خطوط خالی درج می شود. Nginx چنین گواهینامه ها و کلیدها را نامعتبر میداند ، بنابراین اطمینان حاصل کنید که هیچ خط خالی در فایل های شما وجود نداشته باشد.
هشدار: گواهی Origin CA Cloudflare فقط به Cloudflare اعتماد میکند و بنابراین فقط باید توسط سرور مجازیهای مبدأ استفاده شود که به طور فعال به Cloudflare متصل هستند. اگر در هر لحظه Cloudflare را متوقف یا غیرفعال کنید ، گواهی Origin CA شما خطای گواهی نامعتبر را به همراه خواهد داشت.
اکنون که فایلهای کلید و مجوز را در سرور مجازی خود کپی کرده اید ، برای استفاده از آنها باید پیکربندی Nginx را به روز کنید. مرحله 2 – نصب گواهی Origin CA در Nginx در بخش قبلی ، با استفاده از داشبورد Cloudflare یک گواهی مبدأ و کلید خصوصی ایجاد کرده و فایل ها را در سرور مجازی خود ذخیره کردید. اکنون پیکربندی Nginx را برای استفاده از گواهی مبدا و کلید خصوصی برای اطمینان از اتصال بین سرور مجازیهای Cloudflare و سرور مجازی خود ، پیکربندی Nginx را به روز خواهید کرد. ابتدا مطمئن شوید UFW ترافیک HTTPS را امکان پذیر می کند. Nginx Full را فعال کنید ، که پورت 80 (HTTP) و پورت 443 (HTTPS) را باز می کند: ⦁ $ sudo ufw allow ‘Nginx Full’ ⦁ اکنون UFW را مجدد لود کنید: ⦁ $ sudo ufw reload ⦁ در آخر ، بررسی کنید که قوانین جدید شما مجاز باشند یا UFW فعال باشد: ⦁ $ sudo ufw status ⦁ خروجی مانند این را مشاهده خواهید کرد: Output Status: active
To Action From — —— —- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
اکنون آماده تنظیم بلوک سرور مجازی Nginx خود هستید. Nginx در حین نصب بلوک سرور مجازی پیش فرض ایجاد می کند. اگر هنوز وجود دارد ، آن را حذف کنید ، زیرا قبلاً یک بلوک سرور مجازی اختصاصی برای دامنه خود پیکربندی کرده اید: ⦁ $ sudo rm /etc/nginx/sites-enabled/default ⦁ سپس ، فایل پیکربندی Nginx را برای دامنه خود باز کنید: ⦁ $ sudo nano /etc/nginx/sites-available/your_domain ⦁ فایل باید به صورت زیر باشد: /etc/nginx/sites-available/your_domain server { listen 80; listen [::]:80;
root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / { try_files $uri $uri/ =404; } }
برای تنظیم موارد زیر فایل پیکربندی Nginx را اصلاح می کنید: • به پورت 80 گوش دهید و کلیه درخواست ها را برای استفاده از https تغییر دهید. • به پورت443 گوش داده و از گواهی مبدا و کلید خصوصی اضافه شده در قسمت قبلی استفاده کنید. فایل را تغییر دهید تا به شکل زیر باشد: /etc/nginx/sites-available/your_domain server { listen 80; listen [::]:80; server_name your_domain www.your_domain; return 302 https://$server_name$request_uri; }
server {
# SSL configuration
listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem;
server_name your_domain www.your_domain;
root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html;
location / { try_files $uri $uri/ =404; } }
فایل را ذخیره کرده و از ویرایشگر خارج شوید. در مرحله بعد ، اطمینان حاصل کنید که هیچ خطای نحوی در هیچ یک از فایل های تنظیمات Nginx شما وجود ندارد: ⦁ $sudo nginx -t ⦁ اگر مشکلی پیدا نکردید ، Nginx را دوباره فعال کنید تا تغییرات خود را فعال کنید: ⦁ $ sudo systemctl restart nginx ⦁ حال به بخش SSL / TLS داشبورد Cloudflare بروید ، به تب Overview بروید و حالت رمزگذاری SSL / TLS را به حالت کامل (دقیق) تغییر دهید. این به Cloudflare اطلاع می دهد تا همیشه ارتباط بین Cloudflare و سرور مجازی Nginx منشاء شما را رمزگذاری کند.
اکنون به وب سایت خود در https: // your_domain مراجعه کنید تا صحت تنظیم آن را تأیید کنید. صفحه اصلی خود را مشاهده خواهید کرد و مرورگر گزارش می دهد که سایت امن است. در قسمت بعد ، شما Authenticated Origin Pulls را تأیید می کنید که سرور مجازی مبدا شما در واقع با Cloudflare ارتباط برقرار می کند و نه برخی دیگر از سرور مجازی ها. با این کار ، Nginx پیکربندی می شود که تنها درخواست هایی را که از گواهی کلاینت معتبر از Cloudflare استفاده می کنند ، بپذیرد. کلیه درخواستهایی که از Cloudflare عبور نکرده اند رد می شوند. مرحله 3 – تنظیم Authenticated Origin Pulls گواهی Origin CA به Cloudflare کمک می کند تا تایید کند که در حال گفتگو با سرور مجازی درست است. در این مرحله از تأیید هویت کلاینت TLS برای تأیید صحت سرور مجازی Nginx که با Cloudflare در حال گفتگو است ، استفاده می کند. در یک ارتباط TLS تأیید شده توسط کلاینت ، هر دو طرف یک گواهی برای تأیید ارائه می دهند. سرور مجازی مبدا پیکربندی شده است که فقط درخواستهایی را قبول کند که از گواهی کلاینت معتبر از Cloudflare استفاده می کنند. درخواست هایی که از Cloudflare عبور نکرده اند رد می شوند زیرا گواهی Cloudflare را ندارند. این بدان معنی است که حمله گران مخرب نمی توانند اقدامات امنیتی Cloudflare را دور بزنند و مستقیماً به سرور مجازی Nginx شما متصل شوند. Cloudflare گواهینامه های امضا شده توسط CA با گواهی زیر را ارائه می دهد: —–BEGIN CERTIFICATE—– MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI 42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3 Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5 lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa +4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1 QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz 6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z 0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc 5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/ fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM fVQ6VpyjEXdiIXWUq/o= —–END CERTIFICATE—–
همچنین می توانید گواهی را مستقیماً از Cloudflare در این لینک دانلود کنید. این گواهی را کپی کنید. سپس فایل /etc/ssl/cloudflare.crt را برای نگه داشتن گواهی Cloudflare ایجاد کنید: ⦁ $ sudo nano /etc/ssl/cloudflare.crt ⦁ گواهی را به فایل اضافه کنید. سپس فایل را ذخیره کرده و از ویرایشگر خارج شوید. اکنون پیکربندی Nginx خود را به روز کنید تا از TLS Authenticated Origin Pulls استفاده کنید. فایل پیکربندی را برای دامنه خود باز کنید: ⦁ $ sudo nano /etc/nginx/sites-available/your_domain ⦁
دستورالعملهای ssl_client_certificate و ssl_verify_client را همانطور که در مثال زیر نشان داده شده است اضافه کنید: /etc/nginx/sites-available/your_domain . . .
server {
# SSL configuration
listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; ssl_client_certificate /etc/ssl/cloudflare.crt; ssl_verify_client on;
. . .
فایل را ذخیره کرده و از ویرایشگر خارج شوید. سپس ، Nginx را آزمایش کنید تا مطمئن شوید که هیچ خطای نحوی در پیکربندی Nginx شما وجود ندارد: ⦁ $ sudo nginx -t ⦁ اگر مشکلی پیدا نشد ، Nginx را ریستارت کنید تا تغییرات خود را اعمال کنید: ⦁ $ sudo systemctl restart nginx ⦁ در آخر ، برای فعال کردن Authenticated Pulls ، بخش SSL / TLS را در داشبورد Cloudflare باز کنید ، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را تغییر دهید.
اکنون به وب سایت خود در https: // your_domain مراجعه کنید تا صحت تنظیم آن را تأیید کنید. مانند قبل ، صفحه اصلی خود را نمایش داده خواهید کرد. برای تأیید اینکه سرور مجازی شما فقط درخواستهای امضا شده توسط CA Cloudflare را قبول خواهد کرد ، گزینه Authenticated Origin Pulls را انتخاب کنید تا غیرفعال شود و سپس وب سایت خود را دوباره لود کنید. باید پیام خطای زیر را دریافت کنید:
اگر CA Cloudflare درخواستی را امضا نکند ، سرور مجازی مبدا شما خطایی را ایجاد می کند. توجه: بیشتر مرورگرها درخواستها را ذخیره می کنند ، بنابراین برای دیدن تغییر فوق می توانید از حالت جستجوی Incognito/Private در مرورگر خود استفاده کنید. برای جلوگیری از عدم دسترسی به درخواست Cloudflare در هنگام تنظیم وب سایت ، به مرور کلی در داشبورد Cloudflare بروید و حالت توسعه را تغییر دهید.
اکنون که می دانید درست کار می کند به بخش SSL / TLS در داشبورد Cloudflare برگردید ، به تب Origin Server بروید و گزینه Authenticated Origin Pulls را دوباره بزنید تا فعال شود. نتیجه در این آموزش وب سایت خود Nginx را با رمزگذاری ترافیک بین Cloudflare و سرور مجازی Nginx با استفاده از گواهینامه Origin CA از Cloudflare ، ایمن کردید. سپس Authenticated Origin Pulls را روی سرور مجازی Nginx تنظیم میکنید تا اطمینان حاصل شود که تنها درخواستهای سرور مجازی های Cloudflare را می پذیرد و از اتصال مستقیم دیگران به سرور مجازی Nginx جلوگیری می کند.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
0 notes
vpsgoll · 4 years
Text
نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js
برای بسیاری از برنامه ها در جاوا اسکریپت ، وقتی برنامه نویس کد را به صورت خط به خط می نویسد در همان زمان اجرا می شود. به این کار اجرای همزمان گفته می شود ، زیرا سطرها یکی پس از دیگری، به ترتیبی که نوشته شده اند اجرا می شوند. با این حال ، هر دستورالعملی که شما به رایانه می دهید نیاز به اجرای فوری ندارد. به عنوان مثال ، اگر درخواست شبکه ارسال می کنید ، فرآیند اجرای کد شما باید منتظر بماند تا داده ها قبل از اجرا بر روی آن برگردند. در این حالت ، اگر در حالی که منتظر تکمیل درخواست شبکه هستید ، کد دیگری را اجرا نکند ، وقت تلف می شود. برای حل این مشکل ، توسعه دهندگان از برنامه نویسی ناهمزمان استفاده می کنند ، که در آن خطوط کد به ترتیب متفاوتی از آنچه نوشته شده اند اجرا می شوند. با برنامه نویسی ناهمزمان ، می توانیم در حالی که منتظر هستیم فعالیتهای طولانی مانند درخواست شبکه به پایان برسد، کدهای دیگری را اجرا کنیم. کد JavaScript در یک فرآیند کامپیوتری بر روی یک رشته واحد اجرا می شود. کد آن به صورت همزمان در این رشته پردازش می شود و فقط یک دستورالعمل در هر زمان اجرا می شود. بنابراین ، اگر ما می خواستیم یک کار طولانی در این رشته انجام دهیم ، تمام کد باقی مانده تا زمان اتمام آن کار مسدود می شد. با اعمال ویژگی های برنامه نویسی ناهمزمان جاوا اسکریپت ، می توان کارهای طولانی مدت را بر روی یک رشته پس زمینه بارگذاری کرد تا از بروز این مشکل جلوگیری شود. پس از اتمام کار ، کدی که برای پردازش داده های کار نیاز داریم بر روی تک رشته اصلی قرار می گیرد. در این آموزش ، شما می آموزید که چگونه JavaScript با کمک حلقه رویداد وظایف ناهمزمان را مدیریت می کند، به این شکل که وظیفه جدیدی را هنگام انتظار برای کار دیگر انجام می دهد. سپس برنامه ای را ایجاد می کنید که از برنامه نویسی ناهمزمان استفاده می کند تا لیستی از فیلم ها را از یک Studio Ghibli API درخواست کرده و داده ها را در یک فایل CSV ذخیره کنید. کد ناهمزمان به سه روش نوشته خواهد شد: callback ، promise ها ، و با کلمات کلیدی async/await. توجه: طبق این نوشتار ، برنامه نویسی ناهمزمان دیگر فقط با استفاده از تماسهای برگشتی انجام نمی شود ، اما یادگیری این روش منسوخ می تواند زمینه ای را فراهم کند که نشان دهد چرا جامعه جاوا اسکریپت اکنون از promise ها استفاده میکنند. کلمات کلیدی async / await به ما این امکان را می دهد که از promise ها به روشی کوتاه تر استفاده کنیم ، و به این ترتیب روشی استاندارد برای انجام برنامه نویسی ناهمزمان در جاوا اسکریپت در زمان نوشتن این مقاله میباشد.
پیش نیازها Node.js بر روی دستگاه توسعه شما نصب شده باشد. در این آموزش از نسخه 10.17.0 استفاده شده است. برای نصب این در macOS یا Ubuntu 18.04 ، مراحل نحوه نصب Node.js و ایجاد محیط توسعه محلی در macOS یا نصب با استفاده از یک بخش PPA را در راهنمای نحوه نصب Node.js در اوبونتو 18.04 دنبال کنید. همچنین باید با نصب بسته ها در پروژه خود آشنا باشید. با خواندن راهنمای ما در مورد چگونگی استفاده از ماژول های Node.js با npm و pack.json سریعتر پیش روید. مهم است که قبل از یادگیری چگونگی استفاده از توابع به صورت ناهمزمان ، برای ایجاد و اجرای توابع در جاوا اسکریپت مشکلی نداشته باشید. اگر به معرفی یا اطلاعات تکمیلی نیاز دارید می توانید راهنمای ما در مورد چگونگی تعریف توابع در JavaScript را بخوانید. حلقه رویداد بیایید با مطالعه عملکرد داخلی اجرای عملکرد JavaScript شروع کنیم. درک نحوه این رفتار به شما امکان می دهد تا کدهای ناهمزمان را سنجیده تر بنویسید ، و در آینده به شما در زمینه عیب یابی کد کمک می کند. از آنجا که مترجم جاوا اسکریپت کد را اجرا می کند ، هر عملکردی که خوانده می شود به call stack در جاوا اضافه می شود. call stack یک ساختار داده لیست مانند است که در آن موارد فقط به بالا می توانند اضافه شوند و از بالا حذف شوند. stack ها از اصل “از آخر وارد شو ، از اول خارج شو” یا LIFO پیروی می کنند. اگر دو مورد را روی stack اضافه کنید ، آخرین مورد اول حذف می شود. بگذارید با یک مثال با استفاده از call stack ، توضیح دهیم. اگر جاوا اسکریپت با یک تابع functionA () فراخوانی شود ، به call stack اضافه می شود. اگر آن ت��بع functionA () یکی دیگر از عملکردهای functionB () را فراخوانی کند ، سپس functionB () به قسمت بالای call stack اضافه می شود. همانطور که جاوا اسکریپت اجرای یک عملکرد را کامل می کند ، از call stack حذف می شود. بنابراین جاوا اسکریپت ابتدا functionB () را اجرا می کند ، پس از اتمام آن را از stack جدا میکند و سپس اجرای functionA () را تمام میکند و آن را از call stack حذف میکند. به همین دلیل است که عملکردهای داخلی همیشه قبل از کارکردهای بیرونی آنها اجرا می شوند. هنگامی که جاوا اسکریپت با یک عمل ناهمزمان مواجه می شود ، مانند نوشتن یک فایل ، آن را به یک جدول در حافظه خود اضافه می کند. این جدول عملکرد را ذخیره میند ، شرط تکمیل اجرای آن و فراخوانی تابغ هنگام اتمام است. با اتمام عمل ، JavaScript عملکرد مرتبط را در صف پیام قرار می دهد. یک صف دیگر ساختار داده لیست مانند است که در آن موارد فقط می توانند به پایین اضافه شوند اما از بالا حذف شوند. در صف پیام ، اگر دو یا چند عملیات ناهمزمان برای اجرای وظایف خود آماده باشد ، عملیات ناهمزمان که ابتدا به اتمام رسیده است ، ابتدا عملکرد خود را برای اجرا مشخص می کند. توابع در صف پیام منتظرند که به call stack اضافه شوند. این حلقه رویداد یک روند دائمی است که بررسی می کند ایا call stack خالی است یا خیر. اگر اینگونه باشد ، اولین مورد در صف پیام به call stack منتقل می شود. جاوا اسکریپت عملکردهای موجود در صف پیام را بر حسب عملکرد که در کد آن تفسیر می کند، در اولویت بندی قرار می دهد. اثر ترکیبی call stack ، صف پیام و حلقه رویداد اجازه می دهد تا هنگام مدیریت فعالیت های ناهمزمان ، کد JavaScript پردازش شود. اکنون که درک درستی از حلقه رویداد دارید ، می دانید کد ناهمزمانی که می نویسید چگونه اجرا می شود. با استفاده از این دانش ، اکنون می توانید با سه رویکرد متفاوت ، کد ناهمزمان ایجاد کنید: callback ، promise ها ، و async / await. برنامه نویسی ناهمزمان با callback یک عملکرد برگشتی عملکردی است که به عنوان آرگومان به عملکرد دیگر منتقل می شود ، و بعد از اتمام کار دیگر اجرا می شود. ما از callback برای اطمینان از اجرای کد درست بعد از اتمام عملکرد ناهمزمان استفاده می کنیم. برای مدت ها ، callback رایج ترین مکانیسم برای نوشتن کد ناهمزمان بودند ، اما اکنون اکثرا منسوخ شده اند زیرا می توانند خواندن کد را گیج کننده جلوه دهند. در این مرحله ، نمونه ای از کد ناهمزمان را با استفاده از callback می نویسید تا بتوانید از آن به عنوان مبانی اولیه استفاده کنید تا بهره وری دیگر استراتژی های دیگر را ببینید. روشهای زیادی برای استفاده از توابع برگشتی در عملکردهای دیگر وجود دارد. به طور کلی ، آنها از این ساختار استفاده می کنند: function asynchronousFunction([ Function Arguments ], [ Callback Function ]) { [ Action ] }
اگرچه برای JavaScript یا Node.js به لحاظ دستوری الزامی نیست که عملکرد callback  را به عنوان آخرین آرگومان عملکرد بیرونی را داشته باشد ، این یک روش معمول است که شناسایی callback  ها را آسان تر می کند. همچنین معمول است که توسعه دهندگان JavaScript از یک عملکرد ناشناس به عنوان callback  استفاده کنند. توابع ناشناس مواردی هستند که بدون نام ایجاد می شوند. معمولاً وقتی یک عملکرد در انتهای لیست آرگومان ها تعریف می شود ، بیشتر قابل خواندن است. برای توضیح callback ها ، بیایید یک ماژول Node.js ایجاد کنیم که لیستی از فیلم های Studio Ghibli  را در یک فایل می نویسد. ابتدا پوشه ای ایجاد کنید که فایل جاوا اسکریپت و خروجی آن را ذخیره کند: $ mkdir ghibliMovies سپس آن پوشه را وارد کنید: $ cd ghibliMovies با ایجاد درخواست HTTP به Studio Ghibli API شروع خواهیم کرد که عملکرد callback ما نتایج آن را ثبت می کند. برای این کار ، کتابخانه ای را نصب می کنیم که به ما امکان می دهد به داده های پاسخ HTTP در یک callback دسترسی پیدا کنیم. در ترمینال خود، npm را آغاز کنید تا بعداً بتوانیم برای بسته های خود مرجع داشته باشیم: $ npm init -y سپس ، كتابخانه request را نصب كنید: $ npm i request –save اکنون یک فایل جدید با نام callbackMovies.js در یک ویرایشگر متنی مانند nano باز کنید: $ nano callbackMovies.js در ویرایشگر متن خود کد زیر را وارد کنید. بیایید با ارسال یک درخواست HTTP با ماژول request  شروع کنیم: callbackMovies.js const request = require(‘request’);
request(‘https://ghibliapi.herokuapp.com/films’);
در خط اول ماژول درخواستی را که از طریق npm نصب شده است بارگذاری می کنیم. ماژول تابعی را برمی گرداند که می تواند درخواست HTTP ایجاد کند . سپس آن عملکرد را در request  به صورت ثابت ذخیره می کنیم. سپس با استفاده از عملکرد request() درخواست HTTP را انجام می دهیم. اکنون بیایید با افزودن تغییرات هایلایت شده ، داده های درخواست HTTP را برای چاپ به کنسول ارسال کنیم: callbackMovies.js const request = require(‘request’);
request(‘https://ghibliapi.herokuapp.com/films’, (error, response, body) => { if (error) { console.error(`Could not send request to API: ${error.message}`); return; }
if (response.statusCode != 200) { console.error(`Expected status code 200 but received ${response.statusCode}.`); return; }
console.log(‘Processing our list of movies’); movies = JSON.parse(body); movies.forEach(movie => { console.log(`${movie[‘title’]}, ${movie[‘release_date’]}`); }); });
وقتی از تابع request() استفاده می کنیم ، به آن دو پارامتر می دهیم: آدرس URL وب سایتی که می خواهیم درخواست بدهیم عملکرد callback که پس از تکمیل درخواست ، خطاها یا پاسخ های موفقیت آمیز را مدیریت می کند عملکرد callback  ما سه آرگومان دارد: error ، response و body. هنگامی که درخواست HTTP کامل شد ، آرگومان ها بسته به نتیجه به طور خودکار مقادیر میگیرند. اگر درخواست نتواند ارسال شود ، error حاوی یک موضوع است ، اما response و body ، null خواهند بود. اگر درخواست را با موفقیت انجام داد ، پاسخ HTTP در response ذخیره می شود. اگر پاسخ HTTP ما داده ها را برگرداند (در این مثال JSON را دریافت می کنیم) سپس داده ها به صورت body تنظیم می شوند. عملکرد callback  ما ابتدا بررسی می کند که آیا خطایی دریافت کرده ایم یا خیر. بهترین کار این است که ابتدا خطاها را در یک callback  بررسی کنید تا اجرای callback  با داده های از دست رفته ادامه پیدا نکند. در این حالت خطا و اجرای عملکرد را ثبت می کنیم. سپس کد وضعیت پاسخ را بررسی می کنیم. سرور مجازی ما ممکن است همیشه در دسترس نباشد و API ها می توانند تغییر کنند و باعث نادرست شدن درخواست های معقول شوند. با بررسی اینکه کد وضعیت 200 است ، به این معنی که درخواست “OK” است ، می توانیم اطمینان داشته باشیم که پاسخ ما همان چیزی است که انتظار داریم. سرانجام ، body پاسخ را به یک Array تجزیه کرده و از طریق هر فیلم حلقه می کنیم تا نام و سال انتشار آن ثبت شود. پس از ذخیره و خروج از فایل ، این اسکریپت را با دستور زیر اجرا کنید: $ node callbackMovies.js خروجی زیر را دریافت خواهید کرد: Output Castle in the Sky, 1986 Grave of the Fireflies, 1988 My Neighbor Totoro, 1988 Kiki’s Delivery Service, 1989 Only Yesterday, 1991 Porco Rosso, 1992 Pom Poko, 1994 Whisper of the Heart, 1995 Princess Mononoke, 1997 My Neighbors the Yamadas, 1999 Spirited Away, 2001 The Cat Returns, 2002 Howl’s Moving Castle, 2004 Tales from Earthsea, 2006 Ponyo, 2008 Arrietty, 2010 From Up on Poppy Hill, 2011 The Wind Rises, 2013 The Tale of the Princess Kaguya, 2013 When Marnie Was There, 2014
ما لیستی از فیلمهای Studio Ghibli را با سالی که اکران شدند دریافت کردیم. اکنون بگذارید این برنامه را با نوشتن لیست فیلم هایی که در حال حاضر در فایل هست تکمیل کنیم. فایل callbackMovies.js را در ویرایشگر متن خود به روز کنید تا کد هایلایت شده زیر را شامل شود ، که یک فایل CSV را با داده های فیلم ما ایجاد می کند: callbackMovies.js const request = require(‘request’); const fs = require(‘fs’);
request(‘https://ghibliapi.herokuapp.com/films’, (error, response, body) => { if (error) { console.error(`Could not send request to API: ${error.message}`); return; }
if (response.statusCode != 200) { console.error(`Expected status code 200 but received ${response.statusCode}.`); return; }
console.log(‘Processing our list of movies’); movies = JSON.parse(body); let movieList = ”; movies.forEach(movie => { movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`; });
fs.writeFile(‘callbackMovies.csv’, movieList, (error) => { if (error) { console.error(`Could not save the Ghibli movies to a file: ${error}`); return; }
console.log(‘Saved our list of movies to callbackMovies.csv’);; }); });
با دقت به تغییرات هایلایت شده ، می بینیم که ماژول fs را وارد کردیم. این ماژول در تمام نصب های Node.js استاندارد است و شامل روش writeFile () است که می تواند به صورت غیر همزمان در یک فایل بنویسد. به جای اینکه داده ها را به کنسول وارد کنیم ، اکنون آن را به یک متغیر رشته ای movieList اضافه می کنیم. سپس از writeFile() براي ذخيره محتواي movieList در یک فایل جدید به نام callbackMovies.csv استفاده مي كنيم. سرانجام ، برای تابع writeFile () یک callback ارائه می دهیم که یک آرگومان دارد: erorr. این به ما امکان می دهد مواردی را کنترل کنیم که قادر به نوشتن روی یک فایل نیستیم ، به عنوان مثال وقتی کاربری که فرآیند node را در آن اجرا می کنیم ، آن مجوزها را ندارد. فایل را ذخیره کرده و این برنامه Node.js را بار دیگر با دستور زیر اجرا کنید: $ node callbackMovies.js در پوشه ghibliMovies ، callbackMovies.csv را مشاهده خواهید کرد که دارای محتوای زیر است: callbackMovies.csv Castle in the Sky, 1986 Grave of the Fireflies, 1988 My Neighbor Totoro, 1988 Kiki’s Delivery Service, 1989 Only Yesterday, 1991 Porco Rosso, 1992 Pom Poko, 1994 Whisper of the Heart, 1995 Princess Mononoke, 1997 My Neighbors the Yamadas, 1999 Spirited Away, 2001 The Cat Returns, 2002 Howl’s Moving Castle, 2004 Tales from Earthsea, 2006 Ponyo, 2008 Arrietty, 2010 From Up on Poppy Hill, 2011 The Wind Rises, 2013 The Tale of the Princess Kaguya, 2013 When Marnie Was There, 2014
توجه به این نکته مهم است که ما در پاسخ به درخواست HTTP در فایل CSV خود می نویسیم. هنگامی که کد در عملکرد callback قرار دارد ، تنها پس از تکمیل درخواست HTTP برای فایل نوشته خواهد شد. اگر می خواستیم بعد از نوشتن فایل CSV خود با یک بانک اطلاعاتی ارتباط برقرار کنیم ، عملکرد غیر ناهمزمان دیگری را ایجاد می کردیم که در پاسخ به writeFile () فراخوانی می شد. هرچه کد غیر ناهمزمان بیشتری داشته باشیم ، عملکردهای callback بیشتری باید سکنی گزیده شوند. بیایید تصور کنیم که می خواهیم پنج عملیات ناهمزمان را انجام دهیم ، هر کدام فقط در صورت کامل شدن دیگری قادر به اجرا هستند. اگر ما این را کدگذاری می کردیم ، چیزی شبیه به این داشتیم: doSomething1(() => { doSomething2(() => { doSomething3(() => { doSomething4(() => { doSomething5(() => { // final action }); }); }); }); });
هنگامی که callback های تو در تو خطوط زیادی برای اجرای کد دارند ، بسیار پیچیده تر و غیرقابل خواندن می شوند. هرچه اندازه و پیچیدگی پروژه جاوا اسکریپت بزرگ تر شود ، تا زمانی که نهایتا قابل کنترل نباشد ، این اثر برجسته تر می شود. به همین دلیل ، توسعه دهندگان دیگر از callback برای انجام عملیات غیر همزمان استفاده نمی کنند. برای بهبود دستورات کد ناهمزمان ، می توانیم به جای آن از promise ها استفاده کنیم. استفاده از promise ها برای برنامه نویسی ناهمزمان مختصر یک promise یک موضوع JavaScript است که در آینده مقداری را به شما باز می گرداند. توابع ناهمزمان میتوانند به جای مقادیر در هم تنیده، موضوعات promise را برگردانند. اگر در آینده مقداری را دریافت کنیم ، می گوییم این promise تحقق یافته است. اگر در آینده با ارور مواجه شویم ، می گوییم این promise رد شده است. در غیر این صورت ، این promise هنوز در حالت معلق در حال کار است. promise ها به طور کلی شکل زیر را دارند: promiseFunction() .then([ Callback Function for Fulfilled Promise ]) .catch([ Callback Function for Rejected Promise ])
همانطور که در این الگو نشان داده شده است ، promise ها همچنین از توابع callback استفاده می کنند. ما یک تابع callback برای متد then () داریم که وقتی یک promise برآورده می شود اجرا می شود. ما همچنین یک تابع callback برای روش catch() داریم تا خطایی را که هنگام اجرای promise اجرا می شود ، برطرف کنیم. بیایید با بازنویسی برنامه Studio Ghibli برای استفاده از promise ها ، اولین تجربه را با promise ها بدست آوریم. Axios یک سرویس دهنده HTTP مبتنی بر promise برای JavaScript است ، بنابراین بیایید ادامه دهیم و آن را نصب کنیم: $ npm i axios –save اکنون ، با ویرایشگر متن مورد نظر خود ، یک فایل جدید premMovies.js ایجاد کنید: $ nano promiseMovies.js برنامه ما درخواست HTTP را با axios انجام می دهد و سپس از نسخه ویژه promise داده شده مبتنی بر fs برای ذخیره در فایل جدید CSV استفاده می کند. این کد را در premMovies.js تایپ کنید تا بتوانیم Axios را بارگذاری کنیم و یک درخواست HTTP را به فیلم API ارسال کنیم: promiseMovies.js const axios = require(‘axios’);
axios.get(‘https://ghibliapi.herokuapp.com/films’);
در خط اول ماژول axios را بارگذاری می کنیم ، عملکرد برگشتی را در فایل ثابت به نام axios ذخیره می کنیم. سپس از روش axios.get () برای ارسال درخواست HTTP به API استفاده می کنیم. روش axios.get () ، promise را بر می گرداند. بگذارید این promise را زنجیره ای کنیم تا بتوانیم لیست فیلمهای Ghibli را روی کنسول چاپ کنیم: promiseMovies.js const axios = require(‘axios’); const fs = require(‘fs’).promises;
axios.get(‘https://ghibliapi.herokuapp.com/films’) .then((response) => { console.log(‘Successfully retrieved our list of movies’); response.data.forEach(movie => { console.log(`${movie[‘title’]}, ${movie[‘release_date’]}`); }); })
بگذارید آنچه را که اتفاق می افتد تجزیه کنیم. پس از درخواست HTTP GET با axios.get () ، ما از تابع then() استفاده می کنیم ، که فقط در صورت تحقق promise اجرا می شود. در این حالت ، فیلم ها را مانند مثال callbacks روی صفحه نمایش چاپ می کنیم. برای بهبود این برنامه ، کد هایلایت شده را برای نوشتن داده های HTTP به یک فایل اضافه کنید: promiseMovies.js const axios = require(‘axios’); const fs = require(‘fs’).promises;
axios.get(‘https://ghibliapi.herokuapp.com/films’) .then((response) => { console.log(‘Successfully retrieved our list of movies’); let movieList = ”; response.data.forEach(movie => { movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`; });
return fs.writeFile(‘promiseMovies.csv’, movieList); }) .then(() => { console.log(‘Saved our list of movies to promiseMovies.csv’); })
ما علاوه بر این ماژول fs را بار دیگر وارد می کنیم. توجه داشته باشید که پس از وارد کردن fs چگونه promise داریم. Node.js شامل نسخه مبتنی بر promise از کتابخانه fs مبتنی بر callback است، بنابراین سازگاری رو به عقب در پروژه های بعدی از بین نمیرود. اولین عملکرد then() که پردازش درخواست HTTP را انجام می دهد ، اکنون به جای چاپ برای کنسول ، fs.writeFile () را فراخوانی می کند. از آنجا که ما نسخه fs مبتنی بر promise را وارد کردیم ، عملکرد writeFile() ما promise دیگری را برمی گرداند. به این ترتیب ، ما عملکرد then() دیگری را برای زمان تحقق promise writeFile()ایجاد می کنیم. یک promise می تواند یک promise جدید را برگرداند و به ما امکان می دهد promise های خود را یکی پس از دیگری اجرا کنیم. این امر مسیری را برای ما فراهم می کند که چندین عملیات ناهمزمان را انجام دهیم. به این عمل، زنجیره promise گفته می شود و شبیه به callbackهای تو در تو است. then() دوم فقط پس از آنكه فایل را با موفقیت نوشتیم فراخوانی می شود. توجه: در این مثال ، ما کد وضعیت HTTP را مانند آنچه در مثال callback انجام دادیم ، بررسی نکردیم. به طور پیش فرض ، axios در صورت دریافت کد وضعیت نشانگر خطا ، به promise خود عمل نمی کند. به همین ترتیب ، دیگر نیازی به اعتبار سنجی آن نداریم.
برای تکمیل این برنامه ، promise را با عملکرد catch() مانند چیزی که در شکل زیر هایلاین شده است زنجیر کنید: promiseMovies.js const axios = require(‘axios’); const fs = require(‘fs’).promises;
axios.get(‘https://ghibliapi.herokuapp.com/films’) .then((response) => { console.log(‘Successfully retrieved our list of movies’); let movieList = ”; response.data.forEach(movie => { movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`; });
return fs.writeFile(‘promiseMovies.csv’, movieList); }) .then(() => { console.log(‘Saved our list of movies to promiseMovies.csv’); }) .catch((error) => { console.error(`Could not save the Ghibli movies to a file: ${error}`); });
اگر در زنجیره ی promise ها هیچ یک از promiseها عملی نشد، JavaScript به طور خودکار به تابع catch() می رود. به همین دلیل ما فقط یک شرط catch() داریم حتی اگر دو عملیات ناهمزمان داشته باشیم. با اجرای دستور زیر بیایید تأیید کنیم که برنامه ما همان خروجی را تولید می کند: $ node promiseMovies.js در پوشه ghibliMovies ، فایل sozdaMovies.csv را مشاهده خواهید کرد که شامل موارد زیر است: promiseMovies.csv Castle in the Sky, 1986 Grave of the Fireflies, 1988 My Neighbor Totoro, 1988 Kiki’s Delivery Service, 1989 Only Yesterday, 1991 Porco Rosso, 1992 Pom Poko, 1994 Whisper of the Heart, 1995 Princess Mononoke, 1997 My Neighbors the Yamadas, 1999 Spirited Away, 2001 The Cat Returns, 2002 Howl’s Moving Castle, 2004 Tales from Earthsea, 2006 Ponyo, 2008 Arrietty, 2010 From Up on Poppy Hill, 2011 The Wind Rises, 2013 The Tale of the Princess Kaguya, 2013 When Marnie Was There, 2014
با promise ها ، می توانیم کد مختصرتری نسبت به callback صرف بنویسیم. زنجیره promise برای callbackها گزینه ای شفاف تر نسبت به لانه گزینی callbackها است. با این حال ، هنگامی که ما تماس های غیر همزمان برقرار میکنیم ، زنجیره promise ما طولانی تر و حفظ آن سخت تر می شود. صریح بودن callbackها و promise ها ناشی از نیاز به ایجاد توابعی است که نتیجه کار غیر ناهمزمان را داشته باشیم. تجربه بهتر، انتظار برای نتیجه ناهمزمان و قرار دادن آن در متغیری خارج از تابع است. به این ترتیب ، می توانیم از نتایج در متغیرها استفاده کنیم بدون اینکه تابعی داشته باشیم. ما می توانیم با کلمات کلیدی async و await به این هدف برسیم. نوشتن JavaScript با async / await کلمات کلیدی async / await در هنگام کار با promise ها دستور دیگری را ارائه می دهند. به جای اینکه نتیجه یک promise موجود در روش then() را داشته باشیم ، نتیجه به عنوان یک مقدار مانند هر تابع دیگر بازگردانده می شود. ما یک تابع را با کلمه کلیدی async تعریف می کنیم تا به JavaScript بگوییم که این یک عملکرد ناهمزمان است که promise را برمی گرداند. از کلمه کلیدی await استفاده می کنیم تا به JavaScript بگوییم که به جای بازگرداندن خود promise هنگام اجرا ، نتایج promise را برگرداند. به طور کلی ، استفاده از async/await این چنین است: async function() { await [Asynchronous Action] }
بیایید ببینیم که چگونه استفاده از async / await می تواند برنامه Studio Ghibli ما را بهبود ببخشد. از ویرایشگر متن خود برای ایجاد و باز کردن فایل جدید asyncAwaitMovies.js استفاده کنید: $ nano asyncAwaitMovies.js در فایل JavaScript که به تازگی باز شده است ، بیایید با وارد کردن همان ماژول هایی که در مثال promise خود استفاده کرده ایم، شروع کنیم: asyncAwaitMovies.js const axios = require(‘axios’); const fs = require(‘fs’).promises;
ورودی ها همانند premMovies.js است زیرا async / await از promise ها استفاده می کند. اکنون ما از کلمه کلیدی async برای ایجاد تابعی با کد ناهمزمان استفاده می کنیم: asyncAwaitMovies.js const axios = require(‘axios’); const fs = require(‘fs’).promises;
async function saveMovies() {}
ما یک تابع جدید به نام saveMovies () ایجاد می کنیم اما async را در ابتدای تعریف آن قرار می دهیم. این مسئله از این جهت مهم است که ما فقط می توانیم از کلمه کلیدی await در یک عملکرد غیرهمزمان استفاده کنیم. از کلمه کلیدی await استفاده کنید تا یک درخواست HTTP ایجاد کنید که لیست فیلم ها را از Ghibli API دریافت می کند: asyncAwaitMovies.js const axios = require(‘axios’); const fs = require(‘fs’).promises;
async function saveMovies() { let response = await axios.get(‘https://ghibliapi.herokuapp.com/films’); let movieList = ”; response.data.forEach(movie => { movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`; }); }
در عملکرد saveMovies () ما مانند گذشته درخواست HTTP را با axios.get () انجام می دهیم. این بار ، ما آن را با یک تابع then() زنجیر نمی کنیم. در عوض ، قبل از اینکه فراخوانی شود ، await را اضافه می کنیم. هنگامی که جاوا اسکریپت await را می بیند ، تنها پس از اتمام axios.get ()کد باقی مانده تابع را اجرا می کند و متغیر response را تنظیم می کند. کد دیگر داده های فیلم را ذخیره می کند بنابراین می توانیم در یک فایل بنویسیم. بگذارید داده های فیلم را در یک فایل بنویسیم: asyncAwaitMovies.js const axios = require(‘axios’); const fs = require(‘fs’).promises;
async function saveMovies() { let response = await axios.get(‘https://ghibliapi.herokuapp.com/films’); let movieList = ”; response.data.forEach(movie => { movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`; }); await fs.writeFile(‘asyncAwaitMovies.csv’, movieList); }
همچنین وقتی با fs.writeFile ()در فایل مینوسیم از کلمه کلیدی await استفاده می کنیم. برای تکمیل این عملکرد ، باید خطاهایی را پیدا کنیم که promise های ما می توانند ایجاد کنند. بیایید این کار را با کپسوله کردن کد خود در یک محفظه try/catch انجام دهیم: asyncAwaitMovies.js const axios = require(‘axios’); const fs = require(‘fs’).promises;
async function saveMovies() { try { let response = await axios.get(‘https://ghibliapi.herokuapp.com/films’); let movieList = ”; response.data.forEach(movie => { movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`; }); await fs.writeFile(‘asyncAwaitMovies.csv’, movieList); } catch (error) { console.error(`Could not save the Ghibli movies to a file: ${error}`); } }
از آنجا که promise ها می توانند با شکست مواجه شوند ، ما کد ناهمزمان خود را با یک عبارت try/catch رمزگذاری می کنیم. با این کار در صورت عدم موفقیت درخواست HTTP یا عملیات نوشتن فایل ، هر گونه خطایی یافت میشود. در آخر ، بیایید تابع ناهمزمان saveMovies() را فراخوانی کنیم ، تا وقتی برنامه را با node اجرا می کنیم ، عملی شود asyncAwaitMovies.js const axios = require(‘axios’); const fs = require(‘fs’).promises;
async function saveMovies() { try { let response = await axios.get(‘https://ghibliapi.herokuapp.com/films’); let movieList = ”; response.data.forEach(movie => { movieList += `${movie[‘title’]}, ${movie[‘release_date’]}\n`; }); await fs.writeFile(‘asyncAwaitMovies.csv’, movieList); } catch (error) { console.error(`Could not save the Ghibli movies to a file: ${error}`); } }
saveMovies();
در یک نگاه ، مانند یک بلوک کد همزمان JavaScript به نظر می رسد. عملکردهای کمتری در اطراف آن منتقل می شود که کمی ساده تر به نظر می رسد. این ترفندهای کوچک باعث می شود کد ناهمزمان با async/await راحت تر حفظ شود. با وارد کردن این قسمت در ترمینال خود ، این تکرار برنامه را امتحان کنید: $ node asyncAwaitMovies.js در پوشه ghibliMovies ، فایل جدید asyncAwaitMovies.csv با محتوای زیر ایجاد می شود: asyncAwaitMovies.csv Castle in the Sky, 1986 Grave of the Fireflies, 1988 My Neighbor Totoro, 1988 Kiki’s Delivery Service, 1989 Only Yesterday, 1991 Porco Rosso, 1992 Pom Poko, 1994 Whisper of the Heart, 1995 Princess Mononoke, 1997 My Neighbors the Yamadas, 1999 Spirited Away, 2001 The Cat Returns, 2002 Howl’s Moving Castle, 2004 Tales from Earthsea, 2006 Ponyo, 2008 Arrietty, 2010 From Up on Poppy Hill, 2011 The Wind Rises, 2013 The Tale of the Princess Kaguya, 2013 When Marnie Was There, 2014
اکنون برای مدیریت کد ناهمزمان از ویژگیهای async/await در JavaScript استفاده کرده ایم. نتیجه در این آموزش ، شما یاد گرفتید که چگونه JavaScript توابع اجرایی و مدیریت عملیات ناهمزمان را با حلقه رویداد کنترل می کند. سپس برنامه هایی را نوشتید که پس از درخواست HTTP برای داده های فیلم با استفاده از تکنیک های مختلف برنامه نویسی ناهمگام ، فایل CSV ایجاد کرده اند. ابتدا ، از رویکرد منسوخ بر اساس callback استفاده کردید. سپس از promise ها ، و در نهایت async/await استفاده کردید که ترکیب promise را خلاصه تر میکند. با درک کنونی خود از کد ناهمزمان با Node.js ، می توانید برنامه هایی را تهیه کنید که از برنامه نویسی ناهمزمان بهره مند میشوند ، مانند برنامه هایی که به تماس های API وابسته اند. به این لیست از API های عمومی نگاهی بیندازید. برای استفاده از آنها ، شما باید درخواستهای HTTP ناهمزمان مانند آنچه در این آموزش انجام دادیم را ایجاد کنید. برای مطالعه بیشتر ، سعی کنید برنامه ای بسازید که از این API ها استفاده کند تا تکنیک هایی را که در اینجا آموخته اید تمرین کنید.
0 notes
vpsgoll · 4 years
Text
نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8
Cron یک برنامه زمانبندی شغلی مبتنی بر زمان است که در سیستم عاملهای یونیکس مانند، از جمله توزیع های لینوکس یافت می شود. Cron در پس زمینه اجرا می شود و کارهای برنامه ریزی شده با Cron ، که به صورت “cron jobs” شناخته میشوند به طور خودکار انجام می گردند ، و باعث می شود cron برای اتوماسیون کارهای مربوط به تعمیر و نگهداری مفید باشد.
این راهنما مروری بر نحوه برنامه ریزی کارها با استفاده از دستور ویژه cron ارائه می دهد. همچنین به چندین میانبر می رود که می توان برای نوشتن و فهم جدول کارها از آنها استفاده کرد. پیش نیازها برای تکمیل این راهنما ، به رایانه ای نیاز دارید که CentOS 8 در آن در حال اجرا باشد. این کامپیوتر می تواند دستگاه محلی شما ، یک ماشین مجازی یا یک سرور مجازی خصوصی مجازی باشد. صرف نظر از این که از چه نوع رایانه ای برای دنبال کردن این راهنما استفاده می کنید ، باید یک کاربر غیر ریشه با امتیازات ادمین و پیکربندی شده داشته باشد. برای انجام این کار ، راهنمای راه اندازی سرور مجازی اولیه ما را برای CentOS 8 دنبال کنید. نصب Cron تقریباً هر توزیع لینوکس به صورت پیش فرض شکلی از cron را به صورت نصب شده دارد. اما ، اگر از دستگاه CentOS 8 استفاده می کنید که cron در آن نصب نشده است ، می توانید آن را با استفاده از dnfنصب کنید. قبل از نصب cron در دستگاه CentOS 8 ، ایندکس پکیج محلی کامپیوتر را به روز کنید: $ sudo dnf update
سپس cron را با دستور زیر نصب کنید: $ sudo dnf install crontabs این دستور اعلانی صادر میکند که از شما میخواهد تأیید کنید که می خواهید بسته crontabs و متعلقات آن را نصب کنید یا خیر. با فشار دادن y و سپس ENTER این کار را انجام دهید.
با این کار cron روی سیستم شما نصب می شود ، اما لازم است که Daemon را بصورت دستی شروع کنید. همچنین باید اطمینان داشته باشید که هر زمان که سرور مجازی بوت شود ، برای اجرا تنظیم شده است. می توانید هر دو این کارها را با دستور systemctl انجام دهید.
برای شروع cron daemon ، دستور زیر را اجرا کنید: $ sudo systemctl start crond.service
برای تنظیم cron جهت اجرا هنگام شروع کار سرور مجازی، دستور زیر را تایپ کنید: $ sudo systemctl enable crond.service
پس از آن ، cron بر روی سیستم شما نصب می شود و برای شروع برنامه ریزی کارها برای شما آماده است. درک نحوه کار Cron وظایف cron در یک فایل ویژه به اسم crontab ثبت و مدیریت می شوند. هر پروفایل کاربر در سیستم می تواند crontab مخصوص به خود را داشته باشد تا بتواند کارهایی را ترتیب دهد ، که تحت / var / spool / cron ذخیره می شود. برای برنامه ریزی یک عملکرد ، فقط کافی است crontab خود را برای ویرایش باز کنید و یک کار نوشته شده در قالب یک cron expression را اضافه کنید. ترکیب عبارات cron را می توان به دو عنصر تقسیم کرد: برنامه ریزی و دستور برای اجرا. این دستور می تواند تقریباً هر دستوری باشد که معمولاً در خط فرمان اجرا می کنید. مولفه برنامه ریزی دستور به 5 قسمت مختلف تقسیم می شود که به ترتیب زیر نوشته می شوند: زمان مقادیر مجاز دقیقه 0-59 ساعت 0-23 روزی از ماه 1-31 ماه 1-12 or JAN-DEC روز هفته 0-6 or SUN-SAT
وظایفی که با هم در یک crontab برنامه ریزی شده اند به صورت زیر ساختار یافته اند: minute hour day_of_month month day_of_week command_to_run
در اینجا یک مثال کاربردی از یک عبارت cron آورده شده است. این عبارت هر سه شنبه ساعت 5:30 دقیقه بعد از ظهر فرمان http://www.google.com را اجرا می کند: 30 17 * * 2 curl http://www.google.com همچنین چند کاراکتر ویژه وجود دارد که می توانید در جزء برنامه یک عبارت Cron درج کنید تا برنامه ریزی ساده تر شود: *: در عبارات Cron ، ستاره یک متغیر عام است که “all” را نشان می دهد. بنابراین ، یک کار که با * * * * * … برنامه ریزی شده هر دقیقه از هر ساعت از هر روز از هر ماه است. ،: کاما مقادیر برنامه ریزی را برای تشکیل لیست می شکنند. اگر می خواهید یک کار در ابتدا و اواسط هر ساعت انجام شود، به جای نوشتن دو وظیفه جداگانه (به عنوان مثال ، 0 * * * * … و 30 * * * * …) ، می توانید همان عملکرد مشابه را با یک کار یعنی (0,30 * * * * …) به دست آورید. -: یک خط فاصله طیف وسیعی از مقادیر را در قسمت برنامه نمایش می دهد. به جای داشتن 30 کار برنامه ریزی شده جداگانه برای یک فرمان ،که می خواهید 30 دقیقه اول هر ساعت اجرا شود (مانند 0 * * * * …، 1 * * * * … ، 2 * * * * … ، و غیره) ، می توانید فقط آن را به عنوان 0-29 * * * * … برنامه ریزی کنید … /: برای بیان یک مقدار مرحله می توانید از فوروارد اسلش با ستاره استفاده کنید. به عنوان مثال ، به جای نوشتن 8 وظیفه جداگانه برای اجرای یک فرمان هر سه ساعت یک بار (مانند 0 ، 0 * * * * … ، 0 3 * * * … ، 0 6 * * * * … ، و غیره) ، می توانید آن را به صورت برنامه ریزی 0 */3 * * * …. کنید . توجه: شما نمی توانید مقادیر گام را به صورت اختیاری بیان کنید. فقط می توانید از اعداد صحیح استفاده کنید که به طور مساوی در محدوده مجاز از قسمت مورد نظر تقسیم شوند. به عنوان مثال ، در قسمت “ساعت” فقط می توانید یک فوروارد اسلش را با 1 ، 2 ، 3 ، 4 ، 6 ، 8 یا 12 دنبال کنید. در اینجا چند نمونه دیگر از نحوه استفاده از مؤلفه برنامه ریزی cron آورده شده است: * * * * – فرمان را هر دقیقه اجرا کنید. 12 * * * * – دستور را 12 دقیقه بعد از هر ساعت اجرا کنید. 0,15,30,45 * * * * – فرمان را هر 15 دقیقه یک بار اجرا کنید. / 15 * * * * – دستور را هر 15 دقیقه یک بار اجرا کنید. 0 4 * * * – دستور را هر روز در ساعت 4 صبح اجرا کنید. 0 4 * * 2-4 – فرمان را هر سه شنبه ، چهارشنبه و پنجشنبه ساعت 4:00 صبح اجرا کنید. 20,40 */8 * 7-12 * – فرمان را در 20 و 40 دقیقه هر ساعت 8 هر روز از 6 ماه گذشته سال اجرا کنید. اگر هر یک از این موارد برای شما گیج کننده ها بود یا برای برنامه ریزی برای کارهای مهم خود کمک میخواهید ، Cronitor یک ویرایشگر برنامه مفید Cron به نام “Crontab Guru” را ارائه می دهد که می توانید برای بررسی صحت برنامه های cron خود استفاده کنید. مدیریت Crontabs وقتی برنامه خود را تنظیم کردید و کاری را که می خواهید اجرا کنید، تعیین نمودید، باید آن را در جایی قرار دهید که Daemon شما قادر به خواندن آن باشد. همانطور که قبلاً ذکر شد ، crontab یک فایل ویژه است که زمان بندی کارها را اجرا می کند. اما ، این کارها به طور مستقیم ویرایش نمیشوند. بلکه ، توصیه می شود از دستور crontab استفاده کنید. این کار به شما امکان می دهد crontab پروفایل کاربر خود را بدون تغییر امتیازات خود با sudo ، ویرایش کنید. دستور crontab همچنین در مورد خطاهای دستوری که در crontab دارید به شما اطلاع می دهد ، در حالی که ویرایش مستقیم آن این کار را نمیکند. شما می توانید crontab خود را با دستور زیر ویرایش کنید: $ crontab -e با این کار ، crontab را در ویرایشگر متن پیش فرض پروفایل کاربرتان باز می کنید. توجه: در سرور مجازی های جدید CentOS 8 ، دستور crontab -e به طور پیش فرض crontab کاربر شما را با vi باز می کند. vi یک ویرایشگر متن بسیار قدرتمند و قابل انعطاف است ، اما می تواند برای کاربرانی که تجربه کار با آن را ندارند ، کمی خسته کننده باشد. اگر مایل به استفاده از ویرایشگر متن قابل دسترس تر به عنوان ویرایشگر پیش فرض crontab خود هستید ، می توانید nano را به همین ترتیب نصب و پیکربندی کنید. برای این کار ، nano را با dnf نصب کنید: $ sudo dnf install nano
وقتی از شما خواسته شد ، y و سپس ENTER را فشار دهید تا تأیید کنید که می خواهید nano نصب کنید. برای تنظیم نانو به عنوان ویرایشگر تصویری پیش فرض پروفایل کاربر ، فایل .bash_profile را برای ویرایش باز کنید. اکنون که آن را نصب کرده اید ، می توانید این کار را با nano انجام دهید: $ nano ~/.bash_profile در انتهای فایل، خط زیر را اضافه کنید: ~/.bash_profile . . . export VISUAL=”nano”
این کار متغیر محیط visual را روی nano تنظیم میکند. visual یک متغیر محیط یونیکس است که بسیاری از برنامه ها از جمله crontab را برای ویراشگر فایل به کار میگیرد. پس از افزودن این خط، فایل را با فشردن CTRL + X، y و سپس enter ذخیره کنید و ببندید. سپس را .bash_profile دوباره لود کنید تا shell تغییر جدید را دریافت کند: $ . ~/.bash_profile
هنگامی که در ویرایشگر هستید ، می توانید برنامه خود را با تعریف هر کار در یک خط جدید وارد کنید. در غیر این صورت ، می توانید فعلا crontab را ذخیره کنید و ببندید. اگر crontab خود را با vi ، ویرایشگر پیش فرض CentOS 8 باز کردید ، می توانید این کار را با فشار دادن ESC انجام دهید تا مطمئن شوید در حالت فرمان vi هستید ، سپس x را تایپ کنید و ENTER را فشار دهید. توجه داشته باشید که در سیستم های لینوکس ، crontab دیگری وجود دارد که تحت دایرکتوری / etc / ذخیره شده است. این crontab یک نوع سیستم گسترده است که دارای یک فیلد اضافی است که برای آن باید مشخصات کاربری هر کار cron تحت آن اجرا شود. این آموزش بر روی crontab های اختصاصی کاربر تمرکز دارد ، اما اگر می خواهید crontab سیستم گسترده را ویرایش کنید ، می توانید با دستور زیر این کار را انجام دهید: $ sudo nano /etc/crontab اگر می خواهید محتوای crontab خود را مشاهده کنید ، اما آن را ویرایش نکنید ، می توانید از دستور زیر استفاده کنید: $ crontab -l می توانید crontab خود را با دستور زیر پاک کنید: هشدار: دستور زیر از شما نمی خواهد تأیید کنید که می خواهید crontab خود را پاک کنید یا خیر. فقط در صورتی آن را اجرا کنید که مطمئن هستید می خواهید آن را پاک کنید . $ crontab -r این دستور بلافاصله crontab کاربر را حذف می کند. با این وجود، می توانید از فلگ -i استفاده کنید تا این فرمان از شما تأیید بخواهد که آیا واقعاً می خواهید crontab کاربر را حذف کنید: $ crontab -r -i Output crontab: really delete sammy’s crontab?
هنگامی که از شما این تایید خواسته شد ، باید y را وارد کنید تا crontab حذف شود یا n را وارد کنید تا کنسل شود. مدیریت خروجی عملکرد Cron از آنجا که کارهای Cron در پس زمینه اجرا می شوند ، همیشه مشخص نیست که آیا با موفقیت اجرا میشوند یا خیر. اکنون که می دانید چگونه از دستور crontab استفاده کنید و چگونه یک کار cron را برنامه ریزی نمایید، می توانید با روش های مختلف هدایت مجدد خروجی کارهای cron شروع به آزمایش کنید تا به شما در ردیابی موفقیت آمیز بودن آنها کمک کند. اگر یک  mail transfer agent – مانند Sendmail – در سرور مجازی خود نصب و به درستی پیکربندی کرده اید ، می توانید خروجی کارهای cron را به آدرس ایمیل مرتبط با پروفایل کاربر لینوکس خود ارسال کنید. همچنین می توانید با ارائه تنظیمات MAILTO در بالای crontab ، آدرس ایمیل را به صورت دستی مشخص کنید. به عنوان مثال ، می توانید خطوط زیر را به crontab اضافه کنید. این خطوط شامل عبارت MAILTO به همراه یک آدرس ایمیل مثال میباشد، و همچنین یک دستورالعمل SHELL که به shell میگوید اجرا شود ( در این مثال bash ) ، یک دستورالعمل HOME با اشاره به مسیری که در آن می توانید جستجوی باینری cron را انجام دهید، و یک کار تکی cron : . . .
MAILTO=”[email protected]” SHELL=/bin/bash HOME=/
* * * * * echo ‘Run this command every minute’
این کار خاص، دستور “هر دقیقه این دستور را اجرا کن” را به همراه دارد و آن خروجی هر دقیقه به آدرس ایمیل مشخص شده پس از دستورالعمل MAILTO ارسال می شود. همچنین می توانید برای جلوگیری از دریافت ایمیل با خروجی ، خروجی یک کار cron را به یک فایل log یا به یک مکان خالی هدایت کنید. برای افزودن خروجی یک دستور برنامه ریزی شده در یک فایل log ، >> را به انتهای فرمان اضافه کنید که به دنبال آن نام و مکان یک فایل log به انتخاب شما قرار میگیرد ، مانند این: * * * * * echo ‘Run this command every minute’ >> /directory/path/file.log
بهتر است بگوییم شما می خواهید از cron برای اجرای یک اسکریپت استفاده کنید اما آن را در پس زمینه اجرا کنید. برای این کار ، می توانید خروجی اسکریپت را به یک مکان خالی ، مانند / dev / null هدایت کنید که بلافاصله تمام داده های نوشته شده برای آن را حذف می کند. به عنوان مثال ، کار cron زیر یک اسکریپت PHP را اجرا می کند و آن را در پس زمینه اجرا می کند: * * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1
این کار cron همچنین خطای استاندارد را – که با 2 نمایش داده میشود- به خروجی استاندارد( >&1) هدایت می کند. از آنجا که خروجی استاندارد در حال حاضر به / dev / null هدایت می شود ، اساساً به اسکریپت اجازه می دهد تا بی صدا اجرا شود. حتی اگر crontab حاوی جمله MAILTO باشد ، خروجی این فرمان به آدرس ایمیل مشخص شده ارسال نمی شود. محدود کردن دسترسی شما می توانید کاربران مجاز به استفاده از دستور crontab را با فایل های cron.allow و cron.deny مدیریت کنید، که هر دو در فهرست / etc / ذخیره شده اند. اگر فایل cron.deny وجود داشته باشد ، هر کاربر ذکر شده در آن از ویرایش crontab خود منع خواهد شد. اگر cron.allow وجود داشته باشد ، فقط کاربران ذکر شده در آن قادر به ویرایش crontab های خود هستند. اگر هر دو فایل وجود داشته باشد و در هر یک از کاربران یکسان قرار داشته باشد ، فایل cron.allow بر cron.deny غلبه می کند و کاربر قادر به ویرایش crontab خود خواهد بود. به عنوان مثال ، برای رد دسترسی برای همه کاربران و سپس دسترسی به کاربر ishmael ، می توانید از ترتیب دستور زیر استفاده کنید: $ sudo echo ALL >>/etc/cron.deny
$ sudo echo ishmael >>/etc/cron.allow ابتدا، با افزودن ALL به فایل cron.deny ، کلیه کاربران را قفل می کنیم. سپس با اضافه کردن نام کاربری به فایل cron.allow ، به پروفایل کاربر ishmael برای اجرای کارهای cron دسترسی می دهیم. توجه داشته باشید که اگر یک کاربر دارای امتیازات sudo است ، می تواند crontab کاربر دیگری را با دستور زیر ویرایش کند: $ sudo crontab -u user -e با این حال ، اگر cron.deny وجود داشته باشد و کاربرها در آن لیست شده باشند و در cron.allow ذکر نشده باشند ، پس از اجرای دستور قبلی ، خطای زیر را دریافت خواهید کرد: Output The user user cannot use this program (crontab)
به صورت پیش فرض، بیشتر cron daemon ها فرض خواهند کرد که همه کاربران به cron دسترسی دارند مگر اینکه cron.allow یا cron.deny وجود داشته باشد. دستور ویژه فرمان های کوتاه متعددی وجود دارند که می توانید در فایل crontab خود استفاده کنید تا به ساده سازی برنامه ریزی کاری کمک کند. آنها در اصل میانبرهایی هستند برای برنامه ریزی عددی معادل که به صورت زیر مشخص شده: Shortcut Shorthand for @hourly 0 * * * * @daily 0 0 * * * @weekly 0 0 * * 0 @monthly 0 0 1 * * @yearly 0 0 1 1 *
توجه: همه cron daemon ها (به ویژه نسخه های قدیمی) نمی توانند این ترکیب را تجزیه کنند ، بنابراین قبل از اعتماد به آن ، دوبار بررسی کنید. علاوه بر این، هر زمان که سرور مجازی شروع به کار کند، @reboot همه فرمان های بعد از خود را اجرا می کند: @reboot echo “System start up”
استفاده از این میانبرها در هر زمان ممکن می تواند به تفسیر برنامه کارها در crontab شما کمک کند. نتیجه Cron یک ابزار انعطاف پذیر و قدرتمند است که می تواند بار بسیاری از وظایف مرتبط با مدیریت سیستم را کاهش دهد. هنگامی که با اسکریپت های shell ترکیب شود ، می توانید کارهایی را که معمولاً خسته کننده یا پیچیده هستند ، به طور خودکار انجام دهید.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
0 notes
vpsgoll · 4 years
Text
نحوه راه اندازی بستگی به سیستم عامل برنامه Eclipse Theia Cloud IDE در اوبونتو 18.04 [Quickstart]
Eclipse Theia یک Cloud IDE قابل توسعه است که بر روی یک سرور مجازی از راه دور اجرا میشود و از یک مرورگر وب قابل دسترسی است. از لحاظ بصری ، به گونه ای طراحی شده است که به طور مشابه با Microsoft Visual Studio Code دیده شود و با آن کار شود. آنچه Eclipse Theia را از دیگر نرم افزارهای cloud IDE جدا می کند قابلیت توسعه آن است. می توان آن را با استفاده از افزونه های سفارشی اصلاح کرد ، که به شما امکان می دهد یک Cloud IDE متناسب با نیازهای خود تهیه کنید.
در این آموزش ،Eclipse Theia را با استفاده از Docker Compose ، به سرور مجازی Ubuntu 18.04 خود منتقل خواهید کرد. با استفاده از nginx-proxy ، یک سیستم خودکار برای Docker ، آن را در دامنه خود قرار می دهید و با استفاده از یک گواهی نامه Let Encrypt TLS ، که با استفاده از افزونه تخصصی آن تهیه می کنید ، آن را ایمن خواهید کرد. برای مشاهده نسخه جزیی تر این آموزش به راهنمای نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE روی اوبونتو 18.04 مراجعه کنید. پیش نیازها ⦁ یک سرور مجازی Ubuntu 18.04 با امتیازات اصلی و یک حساب ثانویه و غیر ریشه طبق راهنمای تنظیم اولیه سرور مجازی ما برای Ubuntu 18.04 ⦁ Docker نصب شده روی سرور مجازی تان. مرحله 1 و مرحله 2 نحوه نصب Docker را در اوبونتو 18.04 دنبال کنید. ⦁ Docker Compose که روی سرور مجازی شما نصب باشد. مرحله 1 نحوه نصب Docker Compose را در اوبونتو 18.04 دنبال کنید. ⦁ نام دامنه کاملاً ثبت شده. در این آموزش کلا از theia.your_domain استفاده می شود. ⦁ یک ثبت A DNS با theia.your_domain که به آدرس IP عمومی سرور مجازی شما اشاره میکند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این معرفی را در DigitalOcean DNS دنبال کنید. مرحله 1 – استفاده از پروکسی nginx با Let’s Encrypt دیرکتوری برای ذخیره داده ها برای Eclipse Theia ایجاد کنید $ mkdir ~/eclipse-theia به آن مراجعه کنید: ⦁ $ cd ~/eclipse-theia nginx-proxy-compose.yaml را برای ذخیره پیکربندی Docker Compose برای nginx-proxy ایجاد کنید: ⦁ $ 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 را نقشه برداری می کنید ، و حجم هایی را تعریف می کنید که در زمان اجرا در دسترس باشند. فایل را ذخیره کنید و ببندید. پیکربندی را به کار بگیرید: ⦁ docker-compose -f nginx-proxy-compose.yaml up -d ⦁ خروجی نهایی اینگونه خواهد بود: 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
مرحله 2 – به کارگیری Eclipse Theia دوکرایز شده nginx-proxy انتظار دارد که ترکیب های ورود به سیستم در فایلی پس از دامنه نمایش داده شده ، با فرمت htpasswd قرار بگیرند و در زیر فهرست / etc / nginx / htpasswd در کانتینر ذخیره شوند. نصب 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 دستور زیر را با نام کاربری و رمز عبور اجرا کنید: ⦁ $ sudo htpasswd /etc/nginx/htpasswd/theia.your-domain username htpasswd در انتهای فایل ، نام کاربری و جفت رمز عبور را اضافه می کند. پیکربندی را برای استقرار Eclipse Theia ایجاد کنید: ⦁ $ 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 را با restart تنظیم شده روی always و theiaide/theia:next به عنوان تصویر کانتینر تعریف می کنید. همچنین init را روی true تنظیم میکنید. سپس دو متغیر محیط را در بخش environment مشخص می کنید: VIRTUAL_HOST و LETSENCRYPT_HOST. فایل را ذخیره کنید و ببندید. اکنون با اجرای دستور زیر 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 را وارد کرده و GUI ویرایشگر آن را مشاهده خواهید کرد. همچنین یک پدلاک را مشاهده خواهید کرد که نشان می دهد اتصال امن است.
نتیجه اکنون Eclipse Theia ، یک cloud IDE همه کاره را با استفاده از Docker Compose و nginx-proxy بر روی سرور مجازی Ubuntu 18.04 خود نصب کرده اید. شما آن را با مجوز رایگان Let’s Encrypt TLS ایمن کرده اید و نمونه ای را تنظیم کرده اید تا نیاز به اعتبار ورود به سیستم از طرف کاربر داشته باشید. می توانید به صورت جداگانه روی کد منبع خود و مطالب آن کار کنید و یا با تیم خود همکاری کنید. در صورت نیاز به قابلیت های بیشتر ، می توانید نسخه دیگری از Eclipse Theia خود را نیز ایجاد کنید. برای کسب اطلاعات بیشتر در مورد چگونگی انجام این کار ، به مطالب Theia مراجعه نمایید.Eclipse Theia یک Cloud IDE قابل توسعه است که بر روی یک سرور مجازی از راه دور اجرا میشود و از یک مرورگر وب قابل دسترسی است. از لحاظ بصری ، به گونه ای طراحی شده است که به طور مشابه با Microsoft Visual Studio Code دیده شود و با آن کار شود. آنچه Eclipse Theia را از دیگر نرم افزارهای cloud IDE جدا می کند قابلیت توسعه آن است. می توان آن را با استفاده از افزونه های سفارشی اصلاح کرد ، که به شما امکان می دهد یک Cloud IDE متناسب با نیازهای خود تهیه کنید.
در این آموزش ،Eclipse Theia را با استفاده از Docker Compose ، به سرور مجازی Ubuntu 18.04 خود منتقل خواهید کرد. با استفاده از nginx-proxy ، یک سیستم خودکار برای Docker ، آن را در دامنه خود قرار می دهید و با استفاده از یک گواهی نامه Let Encrypt TLS ، که با استفاده از افزونه تخصصی آن تهیه می کنید ، آن را ایمن خواهید کرد. برای مشاهده نسخه جزیی تر این آموزش به راهنمای نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE روی اوبونتو 18.04 مراجعه کنید. پیش نیازها ⦁ یک سرور مجازی Ubuntu 18.04 با امتیازات اصلی و یک حساب ثانویه و غیر ریشه طبق راهنمای تنظیم اولیه سرور مجازی ما برای Ubuntu 18.04 ⦁ Docker نصب شده روی سرور مجازی تان. مرحله 1 و مرحله 2 نحوه نصب Docker را در اوبونتو 18.04 دنبال کنید. ⦁ Docker Compose که روی سرور مجازی شما نصب باشد. مرحله 1 نحوه نصب Docker Compose را در اوبونتو 18.04 دنبال کنید. ⦁ نام دامنه کاملاً ثبت شده. در این آموزش کلا از theia.your_domain استفاده می شود. ⦁ یک ثبت A DNS با theia.your_domain که به آدرس IP عمومی سرور مجازی شما اشاره میکند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این معرفی را در DigitalOcean DNS دنبال کنید. مرحله 1 – استفاده از پروکسی nginx با Let’s Encrypt دیرکتوری برای ذخیره داده ها برای Eclipse Theia ایجاد کنید $ mkdir ~/eclipse-theia به آن مراجعه کنید: ⦁ $ cd ~/eclipse-theia nginx-proxy-compose.yaml را برای ذخیره پیکربندی Docker Compose برای nginx-proxy ایجاد کنید: ⦁ $ 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 را نقشه برداری می کنید ، و حجم هایی را تعریف می کنید که در زمان اجرا در دسترس باشند. فایل را ذخیره کنید و ببندید. پیکربندی را به کار بگیرید: ⦁ docker-compose -f nginx-proxy-compose.yaml up -d ⦁ خروجی نهایی اینگونه خواهد بود: 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
مرحله 2 – به کارگیری Eclipse Theia دوکرایز شده nginx-proxy انتظار دارد که ترکیب های ورود به سیستم در فایلی پس از دامنه نمایش داده شده ، با فرمت htpasswd قرار بگیرند و در زیر فهرست / etc / nginx / htpasswd در کانتینر ذخیره شوند. نصب 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 دستور زیر را با نام کاربری و رمز عبور اجرا کنید: ⦁ $ sudo htpasswd /etc/nginx/htpasswd/theia.your-domain username htpasswd در انتهای فایل ، نام کاربری و جفت رمز عبور را اضافه می کند. پیکربندی را برای استقرار Eclipse Theia ایجاد کنید: ⦁ $ 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 را با restart تنظیم شده روی always و theiaide/theia:next به عنوان تصویر کانتینر تعریف می کنید. همچنین init را روی true تنظیم میکنید. سپس دو متغیر محیط را در بخش environment مشخص می کنید: VIRTUAL_HOST و LETSENCRYPT_HOST. فایل را ذخیره کنید و ببندید. اکنون با اجرای دستور زیر 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 را وارد کرده و GUI ویرایشگر آن را مشاهده خواهید کرد. همچنین یک پدلاک را مشاهده خواهید کرد که نشان می دهد اتصال امن است.
نتیجه اکنون Eclipse Theia ، یک cloud IDE همه کاره را با استفاده از Docker Compose و nginx-proxy بر روی سرور مجازی Ubuntu 18.04 خود نصب کرده اید. شما آن را با مجوز رایگان Let’s Encrypt TLS ایمن کرده اید و نمونه ای را تنظیم کرده اید تا نیاز به اعتبار ورود به سیستم از طرف کاربر داشته باشید. می توانید به صورت جداگانه روی کد منبع خود و مطالب آن کار کنید و یا با تیم خود همکاری کنید. در صورت نیاز به قابلیت های بیشتر ، می توانید نسخه دیگری از Eclipse Theia خود را نیز ایجاد کنید. برای کسب اطلاعات بیشتر در مورد چگونگی انجام این کار ، به مطالب Theia مراجعه نمایید.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
0 notes
vpsgoll · 4 years
Text
نحوه راه اندازی بستگی به سیستم عامل برنامه Eclipse Theia Cloud IDE در اوبونتو 18.04 [Quickstart]
Eclipse Theia یک Cloud IDE قابل توسعه است که بر روی یک سرور مجازی از راه دور اجرا میشود و از یک مرورگر وب قابل دسترسی است. از لحاظ بصری ، به گونه ای طراحی شده است که به طور مشابه با Microsoft Visual Studio Code دیده شود و با آن کار شود. آنچه Eclipse Theia را از دیگر نرم افزارهای cloud IDE جدا می کند قابلیت توسعه آن است. می توان آن را با استفاده از افزونه های سفارشی اصلاح کرد ، که به شما امکان می دهد یک Cloud IDE متناسب با نیازهای خود تهیه کنید.
در این آموزش ،Eclipse Theia را با استفاده از Docker Compose ، به سرور مجازی Ubuntu 18.04 خود منتقل خواهید کرد. با استفاده از nginx-proxy ، یک سیستم خودکار برای Docker ، آن را در دامنه خود قرار می دهید و با استفاده از یک گواهی نامه Let Encrypt TLS ، که با استفاده از افزونه تخصصی آن تهیه می کنید ، آن را ایمن خواهید کرد. برای مشاهده نسخه جزیی تر این آموزش به راهنمای نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE روی اوبونتو 18.04 مراجعه کنید. پیش نیازها ⦁ یک سرور مجازی Ubuntu 18.04 با امتیازات اصلی و یک حساب ثانویه و غیر ریشه طبق راهنمای تنظیم اولیه سرور مجازی ما برای Ubuntu 18.04 ⦁ Docker نصب شده روی سرور مجازی تان. مرحله 1 و مرحله 2 نحوه نصب Docker را در اوبونتو 18.04 دنبال کنید. ⦁ Docker Compose که روی سرور مجازی شما نصب باشد. مرحله 1 نحوه نصب Docker Compose را در اوبونتو 18.04 دنبال کنید. ⦁ نام دامنه کاملاً ثبت شده. در این آموزش کلا از theia.your_domain استفاده می شود. ⦁ یک ثبت A DNS با theia.your_domain که به آدرس IP عمومی سرور مجازی شما اشاره میکند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این معرفی را در DigitalOcean DNS دنبال کنید. مرحله 1 – استفاده از پروکسی nginx با Let’s Encrypt دیرکتوری برای ذخیره داده ها برای Eclipse Theia ایجاد کنید $ mkdir ~/eclipse-theia به آن مراجعه کنید: ⦁ $ cd ~/eclipse-theia nginx-proxy-compose.yaml را برای ذخیره پیکربندی Docker Compose برای nginx-proxy ایجاد کنید: ⦁ $ 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 را نقشه برداری می کنید ، و حجم هایی را تعریف می کنید که در زمان اجرا در دسترس باشند. فایل را ذخیره کنید و ببندید. پیکربندی را به کار بگیرید: ⦁ docker-compose -f nginx-proxy-compose.yaml up -d ⦁ خروجی نهایی اینگونه خواهد بود: 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
مرحله 2 – به کارگیری Eclipse Theia دوکرایز شده nginx-proxy انتظار دارد که ترکیب های ورود به سیستم در فایلی پس از دامنه نمایش داده شده ، با فرمت htpasswd قرار بگیرند و در زیر فهرست / etc / nginx / htpasswd در کانتینر ذخیره شوند. نصب 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 دستور زیر را با نام کاربری و رمز عبور اجرا کنید: ⦁ $ sudo htpasswd /etc/nginx/htpasswd/theia.your-domain username htpasswd در انتهای فایل ، نام کاربری و جفت رمز عبور را اضافه می کند. پیکربندی را برای استقرار Eclipse Theia ایجاد کنید: ⦁ $ 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 را با restart تنظیم شده روی always و theiaide/theia:next به عنوان تصویر کانتینر تعریف می کنید. همچنین init را روی true تنظیم میکنید. سپس دو متغیر محیط را در بخش environment مشخص می کنید: VIRTUAL_HOST و LETSENCRYPT_HOST. فایل را ذخیره کنید و ببندید. اکنون با اجرای دستور زیر 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 را وارد کرده و GUI ویرایشگر آن را مشاهده خواهید کرد. همچنین یک پدلاک را مشاهده خواهید کرد که نشان می دهد اتصال امن است.
نتیجه اکنون Eclipse Theia ، یک cloud IDE همه کاره را با استفاده از Docker Compose و nginx-proxy بر روی سرور مجازی Ubuntu 18.04 خود نصب کرده اید. شما آن را با مجوز رایگان Let’s Encrypt TLS ایمن کرده اید و نمونه ای را تنظیم کرده اید تا نیاز به اعتبار ورود به سیستم از طرف کاربر داشته باشید. می توانید به صورت جداگانه روی کد منبع خود و مطالب آن کار کنید و یا با تیم خود همکاری کنید. در صورت نیاز به قابلیت های بیشتر ، می توانید نسخه دیگری از Eclipse Theia خود را نیز ایجاد کنید. برای کسب اطلاعات بیشتر در مورد چگونگی انجام این کار ، به مطالب Theia مراجعه نمایید.Eclipse Theia یک Cloud IDE قابل توسعه است که بر روی یک سرور مجازی از راه دور اجرا میشود و از یک مرورگر وب قابل دسترسی است. از لحاظ بصری ، به گونه ای طراحی شده است که به طور مشابه با Microsoft Visual Studio Code دیده شود و با آن کار شود. آنچه Eclipse Theia را از دیگر نرم افزارهای cloud IDE جدا می کند قابلیت توسعه آن است. می توان آن را با استفاده از افزونه های سفارشی اصلاح کرد ، که به شما امکان می دهد یک Cloud IDE متناسب با نیازهای خود تهیه کنید.
در این آموزش ،Eclipse Theia را با استفاده از Docker Compose ، به سرور مجازی Ubuntu 18.04 خود منتقل خواهید کرد. با استفاده از nginx-proxy ، یک سیستم خودکار برای Docker ، آن را در دامنه خود قرار می دهید و با استفاده از یک گواهی نامه Let Encrypt TLS ، که با استفاده از افزونه تخصصی آن تهیه می کنید ، آن را ایمن خواهید کرد. برای مشاهده نسخه جزیی تر این آموزش به راهنمای نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE روی اوبونتو 18.04 مراجعه کنید. پیش نیازها ⦁ یک سرور مجازی Ubuntu 18.04 با امتیازات اصلی و یک حساب ثانویه و غیر ریشه طبق راهنمای تنظیم اولیه سرور مجازی ما برای Ubuntu 18.04 ⦁ Docker نصب شده روی سرور مجازی تان. مرحله 1 و مرحله 2 نحوه نصب Docker را در اوبونتو 18.04 دنبال کنید. ⦁ Docker Compose که روی سرور مجازی شما نصب باشد. مرحله 1 نحوه نصب Docker Compose را در اوبونتو 18.04 دنبال کنید. ⦁ نام دامنه کاملاً ثبت شده. در این آموزش کلا از theia.your_domain استفاده می شود. ⦁ یک ثبت A DNS با theia.your_domain که ب�� آدرس IP عمومی سرور مجازی شما اشاره میکند. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این معرفی را در DigitalOcean DNS دنبال کنید. مرحله 1 – استفاده از پروکسی nginx با Let’s Encrypt دیرکتوری برای ذخیره داده ها برای Eclipse Theia ایجاد کنید $ mkdir ~/eclipse-theia به آن مراجعه کنید: ⦁ $ cd ~/eclipse-theia nginx-proxy-compose.yaml را برای ذخیره پیکربندی Docker Compose برای nginx-proxy ایجاد کنید: ⦁ $ 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 را نقشه برداری می کنید ، و حجم هایی را تعریف می کنید که در زمان اجرا در دسترس باشند. فایل را ذخیره کنید و ببندید. پیکربندی را به کار بگیرید: ⦁ docker-compose -f nginx-proxy-compose.yaml up -d ⦁ خروجی نهایی اینگونه خواهد بود: 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
مرحله 2 – به کارگیری Eclipse Theia دوکرایز شده nginx-proxy انتظار دارد که ترکیب های ورود به سیستم در فایلی پس از دامنه نمایش داده شده ، با فرمت htpasswd قرار بگیرند و در زیر فهرست / etc / nginx / htpasswd در کانتینر ذخیره شوند. نصب 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 دستور زیر را با نام کاربری و رمز عبور اجرا کنید: ⦁ $ sudo htpasswd /etc/nginx/htpasswd/theia.your-domain username htpasswd در انتهای فایل ، نام کاربری و جفت رمز عبور را اضافه می کند. پیکربندی را برای استقرار Eclipse Theia ایجاد کنید: ⦁ $ 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 را با restart تنظیم شده روی always و theiaide/theia:next به عنوان تصویر کانتینر تعریف می کنید. همچنین init را روی true تنظیم میکنید. سپس دو متغیر محیط را در بخش environment مشخص می کنید: VIRTUAL_HOST و LETSENCRYPT_HOST. فایل را ذخیره کنید و ببندید. اکنون با اجرای دستور زیر 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 را وارد کرده و GUI ویرایشگر آن را مشاهده خواهید کرد. همچنین یک پدلاک را مشاهده خواهید کرد که نشان می دهد اتصال امن است.
نتیجه اکنون Eclipse Theia ، یک cloud IDE همه کاره را با استفاده از Docker Compose و nginx-proxy بر روی سرور مجازی Ubuntu 18.04 خود نصب کرده اید. شما آن را با مجوز رایگان Let’s Encrypt TLS ایمن کرده اید و نمونه ای را تنظیم کرده اید تا نیاز به اعتبار ورود به سیستم از طرف کاربر داشته باشید. می توانید به صورت جداگانه روی کد منبع خود و مطالب آن کار کنید و یا با تیم خود همکاری کنید. در صورت نیاز به قابلیت های بیشتر ، می توانید نسخه دیگری از Eclipse Theia خود را نیز ایجاد کنید. برای کسب اطلاعات بیشتر در مورد چگونگی انجام این کار ، به مطالب Theia مراجعه نمایید.
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
0 notes
vpsgoll · 4 years
Text
نحوه تنظیم Mattermost در اوبونتو 20.04
مقدمه Mattermost یک پلتفرم همکاری و پیام رسانی منبع باز است که با امنیت و قابل پیکربندی ایجاد شده است و عملکرد قابل مقایسه ای را با Discord یا Slack ارائه میدهد. این برنامه پیام رسانی گروهی ، رشته ای و یک به یک ، سابقه جستجوی نامحدود و قابلیت های اشتراک فایل ، مجوزها و اعلانات دو عامل فاکتوریی را ارائه می دهد. Mattermost همچنین webhooks را برای شخصی سازی بیشتر و ادغام ربات ها فراهم می کند. به دلیل رابط وب پاسخگو و برنامه های اختصاصی تلفن همراه ، از هر نوع دستگاه مدرن قابل دسترسی است. در این آموزش Mattermost Team Edition را روی سرور مجازی Ubuntu 20.04 خود تنظیم می کنید. ابتدا ، آن را نصب خواهید کرد و در دامنه خود قرار می دهید ، با یک مجوز رایگان رمزگذاری TLS ایمن می کنید. سپس ، اعلان های ایمیل را فعال می کنید ، برندینگ را سفارشی می کنید و صفحه پیام خود را ایجاد می کنید (به نام یک تیم درMattermost ( پیش نیازها ⦁ سرور مجازی که اوبونتو 20.04 را اجرا کند با حداقل 2 گیگابایت حافظه رم ، دسترسی به ریشه و یک حساب غیر ریشه و sudo. با دنبال کردن راهنمای تنظیم اولیه سرور مجازی می توانید این کار را انجام دهید. ⦁ MariaDB روی سرور مجازی شما نصب شده باشد. برای دیدن نحوه انجام این کار ، به نحوه نصب MariaDB در اوبونتو 20.04 مراجعه کنید. می توانید نسخه کوتاهی را که در ابتدای آموزش ذکر شده است ، دنبال کنید. ⦁ Postfix در حالت فقط ارسال بر روی سرور مجازی شما نصب شده باشد. برای تنظیم این برنامه به آموزش نحوه نصب و پیکربندی Postfix به عنوان سرور مجازی SMTP فقط ارسالی در اوبونتو 20.04 مراجعه کنید. شما می توانید از آن برای فعال کردن ارسال اعلان های ایمیل از Mattermost استفاده کنید. ⦁ Nginx بر روی سرور مجازی شما نصب شده باشد. برای راهنمایی در مورد نحوه انجام این کار ، مراحل 1 تا 4 نحوه نصب Nginx را در اوبونتو 20.04 کامل کنید. ⦁ یک نام دامنه کاملاً ثبت شده برای میزبانی Mattermost ، که به سرور مجازی شما اشاره کند. در این آموزش از materough.your_domain استفاده خواهد شد. می توانید نام دامنه را در Namecheap خریداری کنید ، به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید. توجه: برای کارکرد صحیح سرور مجازی SMTP Postfix ، رکوردهای PTR سرور مجازی شما باید با your_domain مطابقت داشته باشد. می توانید با وارد کردن نام میزبان در خط فرمان ، نام میزبان سرور را تأیید کنید. خروجی باید با نام سرور مجازی شما هنگام ایجاد آن مطابقت داشته باشد.
مرحله 1 – نصب Mattermost در این بخش Mattermost را روی سرور مجازی خود تنظیم می کنید. این کار شامل دانلود آخرین نسخه ، پیکربندی آن برای استفاده از پایگاه داده MariaDB ، و ایجاد یک سرویس سیستمی است که Mattermost را همیشه در پس زمینه اجرا می کند. دانلود Mattermost تمام داده های مربوط به نصب Mattermost را در پوشه ای به نام ~/mattermost ذخیره خواهید کرد. با اجرای دستور زیر آن را ایجاد کنید: ⦁ $ mkdir ~/mattermost ⦁ به آن پوشه بروید: ⦁ $ cd ~/mattermost ⦁ لازم است به صفحه دانلود Mattermost در وب سایت رسمی بروید و لینک آخرین نسخه را کپی کنید. در زمان نوشتن این مقاله، آخرین نسخه 5.24.2 بوده است. آن را با استفاده از wget با دستور زیر دانلود کنید: ⦁ $ wget https://releases.mattermost.com/5.24.2/mattermost-5.24.2-linux-amd64.tar.gz ⦁ سپس با اجرای دستور زیر آرشیو را باز کنید: ⦁ $ tar -xvzf mattermost*.gz ⦁ این دستور کلیه فایل های بایگانی شده را در پوشه ای که نام آنها با mattermost شروع می شود باز می کند. پوشه ای دقیقاً به عنوان فایل اصلی که دانلود کرده اید ، تهیه می شود که حاوی باینری های Mattermost است. آن را کپی کنید تا /opt را انتخاب کنید تا بتوانید با اجرای دستور زیر، به آن دسترسی گسترده به سیستم داشته باشید: ⦁ $ sudo cp -r mattermost /opt ⦁
سپس یک پوشه برای Mattermost ایجاد کنید ، که در آن داده های کاربر را ذخیره می کند: ⦁ $ sudo mkdir /opt/mattermost/data ⦁ توجه: Mattermost فایل ها و تصاویری را که شما و تیمتان در این دیرکتوری به اشتراک خواهید گذاشت ، ذخیره می کند ، بنابراین اطمینان حاصل کنید که فضای درایو زیادی را که در آن قرار دارد فضای خالی زیادی داشته باشید. سپس ، برای Mattermost کاربر و گروه ایجاد کنید: ⦁ $ sudo useradd –system –user-group mattermost ⦁ سپس ، کاربر و گروه تازه ساخته آن را در پوشه داده خود قرار دهید: ⦁ $ sudo chown -R mattermost:mattermost /opt/mattermost ⦁ این کار به گونه ای انجام می شود که در صورت نفوذ ، حمله کننده به دیرکتوری Mattermost محدود می شود و نمی تواند به راحتی به بقیه سیستم دسترسی پیدا کند. در آخر ، دیرکتوری /opt/mattermost را با گروه ها قابل نوشتن کنید: ⦁ $ sudo chmod -R g+w /opt/mattermost ⦁ اکنون که باینری های Mattermost دارای مجوزهای امن هستند ، اجازه دهید یک بانک اطلاعاتی برای آن تنظیم کنیم. تنظیم پایگاه داده با وارد کردن اعلان MariaDB و اجرای دستور زیر شروع کنید: ⦁ $ sudo mysql ⦁ با اجرای دستور زیر ، یک کاربر دیتابیس به نام mmuser ایجاد کنید و با یک رمز به انتخاب خود جایگزین your_mmuser_password نمایید: ⦁ mariaDB> CREATE USER ‘mmuser’@’%’ IDENTIFIED BY ‘your_mmuser_password’; ⦁ سپس برای Mattermost یک بانک اطلاعاتی ایجاد کنید: ⦁ mariaDB> CREATE DATABASE mattermost; ⦁ برای دسترسی به mmuser به مهمترین پایگاه داده ، با اجرای دستور زیر ، امتیازات دسترسی را به آن بدهید: ⦁ mariaDB> GRANT ALL PRIVILEGES ON mattermost.* TO ‘mmuser’@’%’; ⦁ سپس جداول امتیازات را مجدد لود کنید تا بلافاصله تغییرات اعمال شود: ⦁ mariaDB> FLUSH PRIVILEGES; ⦁ وقتی کارتان تمام شد ، از اعلان خارج شوید: ⦁ mariaDB> exit ⦁ با ایجاد پایگاه داده و یک کاربر همراه ، اکنون فایل پیکربندی اصلی Mattermost را ویرایش کرده و رشته اتصال صحیح پایگاه داده را تنظیم می کنید. آن را برای ویرایش باز کنید: ⦁ $ sudo nano /opt/mattermost/config/config.json ⦁ سطرهایی را که به شکل زیر است پیدا کنید: /opt/mattermost/config/config.json . . . “DriverName”: “…” “DataSource”: “…” . . .
آنها را مطابق شکل زیر تغییر دهید ، و your_mmuser_password را با رمز عبوری جایگزین کنید که برای حساب پایگاه داده mmuser تعیین کرده اید: /opt/mattermost/config/config.json … “DriverName”: “mysql” “DataSource”: “mmuser:your_mmuser_password@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s” …
هنگام کار ، فایل را ذخیره کنید و ببندید. اکنون Mattermost را پیکربندی کرده اید تا از بانک اطلاعاتی تازه ایجاد شده استفاده کند، جایی که کاربران ، تیم ها و پیام ها را در آن ذخیره می کند. اکنون آماده هستید تا به ایجاد یک سرویس systemd  برای آن بپردازید. ایجاد یک سرویس systemd اجرای Mattermost به عنوان یک سرویس با استفاده از systemd تضمین می کند که همیشه در پس زمینه اجرا می شود. پیکربندی سرویس را در فایلی به نام mattermost.service در دیرکتوری / lib / systemd / system ذخیره خواهید کرد ، جایی که سیستم عامل سرویس های خود را ذخیره می کند. آن را با استفاده از ویرایشگر متن خود ایجاد کنید: ⦁ $ sudo nano /lib/systemd/system/mattermost.service ⦁ خطوط زیر را اضافه کنید: /lib/systemd/system/mattermost.service [Unit] Description=Mattermost After=network.target After=mysql.service Requires=mysql.service
[Service] Type=notify User=mattermost Group=mattermost ExecStart=/opt/mattermost/bin/mattermost TimeoutStartSec=3600 Restart=always RestartSec=10 WorkingDirectory=/opt/mattermost LimitNOFILE=49152
[Install] WantedBy=mysql.service
در اینجا ابتدا شرح سرویس را مشخص می کنید. سپس ، اظهار می کنید که سرویس mysql باید قبل از سرویس Mattermost آغاز شود زیرا سرویس Mattermost به کار در MariDB نیاز دارد. بعد از بخش [Unit] نوع سرویس را تعیین می کنید. notify  بدان معنی است که فرایند به سیستم اطلاع داده خواهد شد که لود شده است. شما فرمانی را ارائه میکنید که اجرا می شود و رویکرد را روی always تنظیم میکند. همچنین دایرکتوری در حال کار را برای فرآیند تعریف می کنید و کاربر و گروهی که باید به عنوان آن اجرا شود. در بخش [Install] ، سرویس دیتابیس را به عنوان مقدار پارامتر WantedBy تعیین می کنید تا اطمینان حاصل شود که Mattermost دوباره با پایگاه داده راه اندازی می شود. با به روزرسانی خودکار پایگاه داده ، حذف این تنظیمات ممکن است مشکلی ایجاد کند ، زیرا اگر ریستارت نشود ، ممکن است متوقف شود. فایل را ذخیره کرده و ببندید ، سپس با اجرای دستور زیر کلیه خدمات را مجدد دانلود کنید: ⦁ $ sudo systemctl daemon-reload ⦁ بررسی کنید که به درستی دانلود شده است: ⦁ $ sudo systemctl status mattermost ⦁ خروجی زیر را مشاهده خواهید کرد: Output ● mattermost.service – Mattermost Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled) Active: inactive (dead)
اگر systemd خطایی را گزارش کرد ، نام فایل فایل سرویس ، محل آن و اعتبار محتوای آن را دوبار بررسی کنید. سپس با اجرای دستور زیر سرویس Mattermostرا فعال کنید: ⦁ $ sudo systemctl enable mattermost ⦁ در این مرحله ، Mattermost را دانلود کرده اید ، آن را پیکربندی کردد تا از بانک اطلاعاتی MariaDB استفاده کند ، و یک سرویس سیستمی برای آن ایجاد کردید. در مرحله بعد ، آن را در دامنه خود قرار می دهید. مرحله 2 – قرار دادن Mattermost در معرض دامنه در این بخش ، Nginx را به عنوان سرور مجازی پروکسی معکوس برای Mattermost پیکربندی می کنید. قبل از پیکربندی Nginx ، باید دامنه خود را در فایل اصلی پیکربندی Mattermost مشخص کنید. آن را برای ویرایش باز کنید: ⦁ sudo nano /opt/mattermost/config/config.json ⦁ خطی را پیدا کنید که به شکل زیر باشد: /opt/mattermost/config/config.json . . . “SiteURL”: “” . . . نام دامنه خود را در نقل قول ها وارد کنید: /opt/mattermost/config/config.json … “SiteURL”: “http://mattermost.your_domain” …
فایل را ذخیره کنید و ببندید. همانطور که در مرحله پیش نیاز Nginx آموخته اید ، فایل های پیکربندی سایت آن تحت /etc/nginx/sites-available ذخیره می شوند و بعداً باید برای فعال شدن آنها را با /etc/nginx/sites-enabled لینک کنید. پیکربندی را برای قرار گرفتن Mattermost در معرض دامنه خود در فایلی با نام Mattermost.conf ، تحت /etc/nginx/sites-available ذخیره خواهید کرد. با استفاده از ویرایشگر خود آن را ایجاد کنید: ⦁ $ sudo nano /etc/nginx/sites-available/mattermost.conf ⦁ خطوط زیر را اضافه کنید: /etc/nginx/sites-available/mattermost.conf upstream backend { server localhost:8065; keepalive 32; }
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;
server { listen 80; server_name mattermost.your_domain;
location ~ /api/v[0-9]+/(users/)?websocket$ { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “upgrade”; client_max_body_size 50M; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_buffers 256 16k; proxy_buffer_size 16k; client_body_timeout 60; send_timeout 300; lingering_timeout 5; proxy_connect_timeout 90; proxy_send_timeout 300; proxy_read_timeout 90s; proxy_pass http://backend; }
location / { client_max_body_size 50M; proxy_set_header Connection “”; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_buffers 256 16k; proxy_buffer_size 16k; proxy_read_timeout 600s; proxy_cache mattermost_cache; proxy_cache_revalidate on; proxy_cache_min_uses 2; proxy_cache_use_stale timeout; proxy_cache_lock on; proxy_http_version 1.1; proxy_pass http://backend; } }
Mattermost.your_domain را با دامنه مورد نظر خود جایگزین کنید ، سپس فایل را ذخیره کنید و ببندید. در این فایل ، شما تعریف می کنید که Nginx باید به پورت HTTP 80 گوش دهد. سپس ، یک name_name را تعیین می کنید که به Nginx می گوید که کدام دامنه درخواست ها را بپذیرد و از این پیکربندی خاص استفاده کند. دو بلوک بعدی اتصالات پروکسی را پیکربندی می کنند ، تا Mattermost به درستی کار کند. برای فعال سازی این پیکربندی سایت ، باید با اجرای دستور زیر ، یک لینک به پوشه /etc/nginx/sites-enabled ایجاد کنید: ⦁ $ sudo ln -s /etc/nginx/sites-available/mattermost.conf /etc/nginx/sites-enabled/mattermost.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 ⦁ سپس ، با اجرای دستور زیر سرویس Mattermostرا شروع کنید: ⦁ $ sudo systemctl start mattermost ⦁
پس از اتمام این دستور ، سعی کنید در مرورگر خود به دامنه بروید. باید صفحه ای را مشاهده کنید که از شما می خواهد وارد شوید:
اکنون نصب Mattermost را در دامنه خود دارید و در دسترس است. در مرحله بعد ، شما با استفاده از یک گواهی نامه Let’s Encrypt TLS رایگان ، آن را ایمن خواهید کرد. مرحله 3 – ایمن کردن دامنه خود در این بخش دامنه خود را با استفاده از گواهی نامه Let’s Encrypt TLS که با استفاده از Certbot تهیه می کنید ، ایمن می کنید. شما باید قبلاً Certbot را به عنوان بخشی از پیش نیازها نصب کرده باشید ، بنابراین فقط باید با اجرای آن ، افزونه Nginx را نصب کنید: ⦁ $ sudo apt install python3-certbot-nginx ⦁ همچنین به عنوان بخشی از پیش شرط ها ، ufw (فایروال کامپایل نشده) را فعال کرده و آن را پیکربندی کرده اید تا امکان ترافیک HTTP رمزگذاری نشده را فراهم کند. برای دسترسی ایمن به سایت ، باید آن را پیکربندی کنید تا با اجرای دستور زیر ، ترافیک رمزگذاری شده را بپذیرید: ⦁ $ sudo ufw allow https ⦁ خروجی به این صورت خواهد بود: Output Rule added Rule added (v6) به طور مشابه با Nginx ، لازم است آن را مجدد لود کنید تا پیکربندی آن به مرحله اجرا برسد: ⦁ $ sudo ufw reload ⦁ این خروجی نشان داده می شود: Output Firewall reloaded برای درخواست گواهی نامه برای دامنه خود ، دستور زیر را اجرا کنید: ⦁ $ sudo certbot –nginx -d mattermost.your_domain ⦁ در این دستور ، شما certbot را برای درخواست گواهینامه برای دامنه خود اجرا می کنید – نام دامنه را با پارامتر -d می گذرانید. پرچم –nginx به آن می گوید برای پشتیبانی از HTTPS ، پیکربندی سایت Nginx را به طور خودکار تغییر دهید. به یاد داشته باشید که materimum.your_domain را با نام دامنه خود جایگزین کنید. اگر اولین بار است که Certbot را اجرا می کنید ، از شما خواسته می شود که یک آدرس ایمیل را برای اخطارهای فوری و پدیرش شرایط خدمات EFF ارائه کنید. سپس Certbot از Let’s Encrypt برای گواهی دامنه شما درخواست می کند. و از شما سؤال می کند که آیا مایلید همه ترافیک HTTP را به HTTPS هدایت کنید: Output Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – 1: No redirect – Make no further changes to the webserver configuration. 2: Redirect – Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you’re confident your site works on HTTPS. You can undo this change by editing your web server’s configuration. – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):
توصیه می شود برای به حداکثر رساندن امنیت گزینه دوم را انتخاب کنید. پس از وارد کردن انتخاب خود ، ENTER را فشار دهید. خروجی شما شبیه به این خواهد بود: Output IMPORTANT NOTES: – Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/mattermost.your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/mattermost.your_domain/privkey.pem Your cert will expire on 2020-09-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the “certonly” option. To non-interactively renew *all* of your certificates, run “certbot renew” – Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. – If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
این بدان معنی است که Certbot موفق به تولید گواهینامه های TLS شده و آنها را در پیکربندی Nginx برای دامنه شما به کار می برد. از آنجا که اکنون با استفاده از HTTPS به دامنه شما قابل دسترسی است ،باید URL دامنه خود را در فایل اصلی پیکربندی Mattermost تصحیح کنید. آن را برای ویرایش باز کنید: ⦁ $ sudo nano /opt/mattermost/config/config.json ⦁ یک بار دیگر ، خطی را پیدا کنید که به شکل زیر است: /opt/mattermost/config/config.json . . . “SiteURL”: “http://mattermost.your_domain” . . .
http را به https تغییر دهید: /opt/mattermost/config/config.json . . . “SiteURL”: “https://mattermost.your_domain” . . .
این تنها چیزی است که شما باید ویرایش کنید ، بنابراین فایل را ذخیره کنید و ببندید . با اجرای دستور زیر Mattermost را ریستارت کنید: ⦁ $ sudo systemctl restart mattermost ⦁ اکنون می توانید دامنه Mattermost را در مرورگر خود مجدد لود کنید و یک پد لاک در سمت چپ آدرس سایت مشاهده کنید ، به این معنی که اتصال خود را به درستی ایمن کرده اید. اکنون که گواهینامه های TLS شما با موفقیت پیکربندی شده و دامنه شما از طریق یک اتصال مطمئن در دسترس است ، آماده پیکربندی Mattermost هستید. مرحله 4 – تنظیم Mattermost در این بخش ، تیم خود را در Mattermost ایجاد خواهید کرد ، اعلان های ایمیل را تنظیم و برند سرور مجازی را تغییر می دهید. هنگامی که برای اولین بار به Mattermost دسترسی پیدا می کنید ، باید یک حساب کاربری با امتیازات ادمین برای سرور مجازی خود ایجاد کنید. اگر از قبل حساب کاربری دارید ، می توانید با آن وارد شوید. پس از ورود به سیستم ، صفحه‌ای را مشاهده خواهید کرد که به شما میگوید تیمی وجود ندارد که بتوانید به آن بپیوندید. برای رفع این مشکل ، Create a team را انتخاب کنید. صفحه ای را مشاهده خواهید کرد که از شما میخواهد تیم خود را معرفی کنید (به عنوان مثا ل Sammy):
نام مورد نظر خود را وارد کرده و روی Next کلیک کنید. سپس از شما می خواهد که آدرس وب خود را برای تیم خود ، در دامنه خود تعیین كنید ، كه این نقطه دسترسی برای تیم شما در Mattermost خواهد بود:
می توانید URL را بدون تغییر بگذارید. پس از اتمام کار ، روی « Finish » کلیک کنید. Mattermost تیم شما را ایجاد می کند و پس از گذراندن آموزش ، رابط اصلی را خواهید دید ، جایی که بیشتر وقت خود را صرف برقراری ارتباط می کنید:
رابط کاربری در مرحله بعدی با جزئیات توضیح داده خواهد شد. برای دسترسی به تنظیمات ، بر روی نام کاربری خود در گوشه بالا سمت چپ و سپس System Console کلیک کنید. فقط اگر کاربر ادمین باشید می توانید به این گزینه دسترسی پیدا کنید.
در سمت چپ یک منو وجود دارد که دسترسی به بخش هایی از پیکربندی Mattermost را در اختیار شما قرار می دهد. ابتدا اعلان های ایمیل تنظیم می کنید ، بنابراین روی گزینه SMTP که می تواند در منوی Environment یافت شود کلیک کنید:
برای اتصال به سرور مجازی Postfix که به عنوان بخشی از پیش شرط ها نصب کرده اید ، localhost  را به عنوان SMTP Server و 25 را به عنوان SMTP Server Port تایپ کنید. هنگامی که کار خود را انجام دادید ، روی دکمه آبی Save  کلیک کنید و سپس دکمه Test Connection را که در پایین قرار دارد ، بزنید. یک پیام در یک کادر سبز دریافت خواهید کرد که میگیود هنگام ارسال ایمیل خطایی گزارش نشده است. لطفاً صندوق ورودی خود را بررسی کنید.
اکنون می توانید صندوق ورودی ایمیلی را که با آن وارد سیستم شده اید ، بررسی کنید. یک پیام از Mattermost پیدا خواهید کرد ، می گویند تنظیمات ایمیل به درستی تنظیم شده است. اگر آن را دریافت نکردید ، پوشه اسپم خود را بررسی کنید. اگر خطایی از Mattermost دریافت شده ، آنچه را که وارد کرده اید ، دوباره بررسی کنید و در صورت لزوم ، یک بار دیگر آموزش قبلی را انجام دهید. اکنون که تأیید کردید که ایمیل ها در حال کار هستند ، باید اعلان های ایمیل را با انتخاب Notifications  در زیر Site Configuration در منو فعال کنید. Enable Email Notifications را روی true  قرار دهید و Notification From Address را روی آدرس ایمیل مورد نظر خود ، مانند mattermost@your_domain ، تنظیم کنید. از آنجا که دیگر نیازی به وجود ندارد و نظارت نمی شود ، no-reply را به عنوان Notification Display Name ، یعنی نام فرستنده ای که در کلاینت ایمیل نشان داده می شود ، تایپ کنید. برای کم کردن تعداد کل ایمیل هایی که برای اعضای تیم خود ارسال می کنید می توانید بصورت اختیاری Email Batching را برای فشرده سازی چندین پیام خوانده نشده در یک ایمیل فعال کنید. پس از پایان انجام تنظیمات ، روی Save  کلیک کنید. شما اعلان های ایمیل را در سطح جهانی فعال کرده اید و اکنون می توانید با انتخاب گزینه Customization در زیر پیکربندی سایت ، برندینگ سرور مجازی را به طور اختیاری تغییر دهید. در اینجا می توانید نام سایت و توضیحات سایت را تنظیم کنید و همچنین یک تصویر و متن با نام تجاری سفارشی بارگذاری کنید. می توانید با کلیک کردن روی نام کاربری خود در گوشه بالا سمت چپ و انتخاب اولین گزینه از منوی کشویی ، از System Console خارج شوید. شما تیم خود را در Mattermost ایجاد کرده اید و اعلان های ایمیل را تنظیم کرده اید ، بنابراین درباره بحث های جدیدی که در تیم شما اتفاق می افتد ، مطلع می شوید. نتیجه اکنون پلتفرم پیام رسانی قابل مقیاس بندی به میزبانی خود دارید که شما و تیم تان می توانید برای همکاری در همه دستگاه ها استفاده کنید. اکنون می توانید به صورت کارآمدتر ارتباط برقرار کنید ، فایل ها را به اشتراک بگذارید و با سهولت در پیام ها و کانال ها جستجو کنید. اگر می خواهید در مورد استفاده از رابط کاربری Mattermost اطلاعات بیشتری کسب کنید ، به مطالب رسمی مراجعه کنید.
برچسب‌ها:
MariaDB
,
Mattermost
,
Postfix
0 notes