<?xml version="1.0" encoding="utf-8"?>

	<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">

	<channel>

	<title>سرور مجازی</title>

	<description>سرور مجازی Rss Feed</description>

	<link>https://vpsgoll.farsiblog.com/</link>

	<language>Fa</language>

	<generator>farsiblog.com</generator>

	<lastBuildDate>2020-09-10T11:09:59+04:30</lastBuildDate>
	<item>
		<title><![CDATA[نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در Ubuntu 18.04]]></title>
		<description><![CDATA[<p>Docker &nbsp;می تواند روشی کارآمد برای اجرای برنامه های وب در حال تولید باشد ، اما ممکن است بخواهید چندین برنامه را در یک هاست &nbsp;Docker اجرا کنید. در این شرایط ، باید پروکسی معکوس تنظیم کنید زیرا فقط می خواهید پورت 80 و 443 را در معرض دید قرار دهید.</p>
<p>Traefik &nbsp;یک پروکسی معکوس آگاه از Docker است که شامل داشبورد نظارت خود میباشد. در این آموزش ، از Traefik برای مسیر یابی درخواست ها به دو کانتینر مختلف برنامه وب استفاده می کنید: یک کانتینر وردپرس و یک کانتینر Adminer که هر کدام با یک پایگاه داده MySQL در ارتباط هستند. با استفاده از Let&rsquo;s Encrypt ، Traefik را پیکربندی می کنید تا همه چیز را از طریق HTTPS &nbsp;ارائه دهد.</p>
<p><strong>پیش نیازها</strong></p>
<p>برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:</p>
<ul>
<li>یک&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Ubuntu 18.04 با پیروی از راهنمای ستاپ اولیه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Ubuntu 18.04 ، از جمله کاربر غیر ریشه sudo و فایروال ، راه اندازی شده.</li>
<li>Docker روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;شما نصب شده باشد ، که می توانید با دنبال کردن نحوه نصب و استفاده از Docker در Ubuntu 18.04 این کار را انجام دهید.</li>
<li>Docker Compose با دستورالعمل نحوه نصب Docker Compose در Ubuntu 18.04 نصب شده باشد.</li>
<li>یک دامنه و سه رکورد A ، db-admin ، blog و monitor. هر کدام باید به آدرس IP&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;شما اشاره کنند. در طول این آموزش ، دامنه خود را به جای your_domain در فایلهای پیکربندی و مثالها جایگزین کنید.</li>
</ul>
<p><strong>مرحله 1 &ndash; پیکربندی و اجرای&nbsp;</strong><strong>&nbsp;Traefik</strong></p>
<p>پروژه Traefik دارای یک تصویر Docker رسمی است ، بنابراین ما برای اجرای Traefik در یک کانتینر Docker از آن استفاده خواهیم کرد.</p>
<p>اما قبل از راه اندازی کانتینر Traefik ، باید یک فایل پیکربندی ایجاد کرده و یک پسورد رمزگذاری شده تنظیم کنیم تا بتوانیم به داشبورد نظارت دسترسی پیدا کنیم.</p>
<p>برای ایجاد این گذرواژه رمزگذاری شده از ابزار htpasswd استفاده خواهیم کرد. ابتدا برنامه کمکی را نصب کنید که در بسته apache2-utils &nbsp;وجود دارد:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo apt-get install apache2-utils&middot;</p>
<p>&nbsp;</p>
<p>سپس رمز عبور را با htpasswd تولید کنید. secure_password را با رمز عبوری که می خواهید برای کاربر مدیر Traefik استفاده کنید جایگزین کنید:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ htpasswd -nb admin secure_password&middot;</p>
<p>خروجی برنامه به صورت زیر خواهد بود:</p>
<p>Output</p>
<p>admin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/</p>
<p>&nbsp;</p>
<p>برای تنظیم احراز هویت پایه HTTP برای داشبورد بررسی و نظارت بر سلامت Traefik ، از خروجی منحصر به فرد خود در فایل پیکربندی Traefik استفاده خواهید کرد. تمام خط خروجی خود را کپی کنید تا بعداً بتوانید آن را جایگذاری کنید. از خروجی مثال استفاده نکنید.</p>
<p>برای پیکربندی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Traefik ، با استفاده از قالب TOML ، یک فایل پیکربندی جدید به نام traefik.toml ایجاد خواهیم کرد. TOML یک زبان پیکربندی شبیه به فایل های INI اما استاندارد است. این فایل به ما اجازه می دهد تا&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Traefik و ادغام های مختلف یا providers را که می خواهیم استفاده کنیم پیکربندی کنیم. در این آموزش ، ما از سه ارائه دهنده موجود Traefik استفاده خواهیم کرد: api ، docker &nbsp;و acme. آخرین مورد ، acme &nbsp;با استفاده از Let&rsquo;s Encrypt از گواهینامه های TLS پشتیبانی می کند.</p>
<p>فایل جدید خود را در nano یا ویرایشگر متن مورد علاقه خود باز کنید:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ nano traefik.toml&middot;</p>
<p>ابتدا دو نقطه ورودی به نام http و https اضافه کنید که به طور پیش فرض همه backends به آنها دسترسی خواهند داشت:</p>
<p>traefik.toml</p>
<p>defaultEntryPoints = [&ldquo;http&rdquo;, &ldquo;https&rdquo;]</p>
<p>&nbsp;</p>
<p>بعداً در این فایل نقاط ورودی http و https را پیکربندی خواهیم کرد.</p>
<p>در مرحله بعد ، ارائه دهنده api را پیکربندی کنید ، که به شما امکان دسترسی به رابط داشبورد را می دهد. اینجاست که می توانید خروجی را از دستور htpasswd پیست کنید:</p>
<p>traefik.toml</p>
<p>&hellip;</p>
<p>[entryPoints]</p>
<p>[entryPoints.dashboard]</p>
<p>address = &ldquo;:8080&rdquo;</p>
<p>[entryPoints.dashboard.auth]</p>
<p>[entryPoints.dashboard.auth.basic]</p>
<p>users = [&ldquo;admin:your_encrypted_password&rdquo;]</p>
<p>&nbsp;</p>
<p>[api]</p>
<p>entrypoint=&rdquo;dashboard&rdquo;</p>
<p>&nbsp;</p>
<p>داشبورد یک برنامه وب جداگانه است که در کانتینر Traefik اجرا می شود. ما داشبورد را تنظیم می کنیم تا روی پورت 8080 کار کند.</p>
<p>بخش entrypoints.dashboard نحوه ارتباط ما با ارائه دهنده api را تنظیم می کند و بخش entrypoints.dashboard.auth.basic &nbsp;تأیید اعتبار اصلی HTTP را برای داشبورد پیکربندی می کند. برای مقدار ورودی کاربران از خروجی دستور htpasswd استفاده کنید. می توانید ورودهای اضافی را با جدا کردن آنها با ویرگول مشخص کنید.</p>
<p>ما اولین ورودی خود را تعریف کرده ایم ، اما باید سایر موارد را برای ارتباطات استاندارد HTTP و HTTPS که به سمت ارائه دهنده api &nbsp;نیست ، تعریف کنیم. بخش entryPoints آدرس هایی را که Traefik و کانتینرهای پروکسی می توانند به آن گوش دهند پیکربندی می کند. این خطوط را به فایل زیر عنوان entryPoints اضافه کنید:</p>
<p>traefik.toml</p>
<p>&hellip;</p>
<p>[entryPoints.http]</p>
<p>address = &ldquo;:80&rdquo;</p>
<p>[entryPoints.http.redirect]</p>
<p>entryPoint = &ldquo;https&rdquo;</p>
<p>[entryPoints.https]</p>
<p>address = &ldquo;:443&rdquo;</p>
<p>[entryPoints.https.tls]</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>نقطه ورود http پورت 80 را کنترل می کند ، در حالی که نقطه ورود https از پورت 443 برای TLS / SSL استفاده می کند. ما به طور خودکار تمام ترافیک موجود در پورت 80 را به نقطه ورود https هدایت می کنیم تا اتصالات ایمن را برای همه درخواست ها تضمین کنیم.</p>
<p>در مرحله بعد ، این بخش را برای پیکربندی Let&rsquo;s Encrypt پشتیبانی از گواهی Traefik اضافه کنید:</p>
<p>traefik.toml</p>
<p>&hellip;</p>
<p>[acme]</p>
<p>email = &ldquo;your_email@your_domain&rdquo;</p>
<p>storage = &ldquo;acme.json&rdquo;</p>
<p>entryPoint = &ldquo;https&rdquo;</p>
<p>onHostRule = true</p>
<p>[acme.httpChallenge]</p>
<p>entryPoint = &ldquo;http&rdquo;</p>
<p>&nbsp;</p>
<p>این بخش acme نامیده می شود زیرا ACME نام پروتكلی است كه برای ارتباط با Let&rsquo;s Encrypt برای مدیریت گواهینامه ها استفاده می شود. سرویس Let&rsquo;s Encrypt نیاز به ثبت نام با یک آدرس ایمیل معتبر دارد ، بنابراین برای اینکه Traefik برای هاست های ما گواهی تولید کند ، کلید ایمیل را روی آدرس ایمیل خود تنظیم کنید. سپس مشخص می کنیم که اطلاعاتی که از Let&rsquo;s Encrypt &nbsp;دریافت خواهیم کرد را در یک فایل JSON به نام acme.json ذخیره خواهیم کرد. کلید entryPoint باید به نقطه ورودی پورت 443 اشاره کند ، که در مورد ما نقطه ورود https است.</p>
<p>کلید onHostRule نحوه عملکرد Traefik برای تولید گواهینامه ها را تعیین می کند. ما می خواهیم گواهینامه خود را به محض ایجاد کانتینرها با نام هاست های مشخص دریافت کنیم ، و این همان کاری است که تنظیم onHostRule انجام می دهد.</p>
<p>بخش acme.httpChallenge به ما اجازه می دهد تا تعیین کنیم چگونه Let&rsquo;s Encrypt بتواند تأیید کند که گواهی تولید شده است. ما در حال پیکربندی آن هستیم تا به عنوان بخشی از چالش از طریق نقطه ورود http ، یک فایل را ارائه دهد.</p>
<p>در آخر ، بیایید با اضافه کردن این خطوط به فایل ، ارائه دهنده docker را پیکربندی کنیم:</p>
<p>traefik.toml</p>
<p>&hellip;</p>
<p>[docker]</p>
<p>domain = &ldquo;your_domain&rdquo;</p>
<p>watch = true</p>
<p>network = &ldquo;web&rdquo;</p>
<p>&nbsp;</p>
<p>ارائه دهنده docker ، Traefik &nbsp;را قادر می سازد به عنوان یک پروکسی در مقابل کانتینرهای Docker عمل کند. ما ارائه دهنده را پیکربندی کرده ایم تا کانتینرهای جدیدی را در شبکه وب مشاهده کند که به زودی ایجاد خواهیم کرد و آنها را به عنوان زیر دامنه های your_domain نمایش می دهد.</p>
<p>در این مرحله ، traefik.toml &nbsp;باید دارای محتوای زیر باشد:</p>
<p>traefik.toml</p>
<p>defaultEntryPoints = [&ldquo;http&rdquo;, &ldquo;https&rdquo;]</p>
<p>&nbsp;</p>
<p>[entryPoints]</p>
<p>[entryPoints.dashboard]</p>
<p>address = &ldquo;:8080&rdquo;</p>
<p>[entryPoints.dashboard.auth]</p>
<p>[entryPoints.dashboard.auth.basic]</p>
<p>users = [&ldquo;admin:your_encrypted_password&rdquo;]</p>
<p>[entryPoints.http]</p>
<p>address = &ldquo;:80&rdquo;</p>
<p>[entryPoints.http.redirect]</p>
<p>entryPoint = &ldquo;https&rdquo;</p>
<p>[entryPoints.https]</p>
<p>address = &ldquo;:443&Prime;</p>
<p>[entryPoints.https.tls]</p>
<p>&nbsp;</p>
<p>[api]</p>
<p>entrypoint=&rdquo;dashboard&rdquo;</p>
<p>&nbsp;</p>
<p>[acme]</p>
<p>email = &ldquo;your_email@your_domain&rdquo;</p>
<p>storage = &ldquo;acme.json&rdquo;</p>
<p>entryPoint = &ldquo;https&rdquo;</p>
<p>onHostRule = true</p>
<p>[acme.httpChallenge]</p>
<p>entryPoint = &ldquo;http&rdquo;</p>
<p>&nbsp;</p>
<p>[docker]</p>
<p>domain = &ldquo;your_domain&rdquo;</p>
<p>watch = true</p>
<p>network = &ldquo;web&rdquo;</p>
<p>Copy</p>
<p>&nbsp;</p>
<p>فایل را ذخیره کرده و از ویرایشگر خارج شوید. با استفاده از این پیکربندی ها ، می توانیم Traefik را مقداردهی اولیه کنیم.</p>
<p><strong>مرحله 2 &ndash; اجرای&nbsp;</strong><strong>&nbsp;</strong><strong>کانتینر&nbsp;</strong><strong>&nbsp;Traefik</strong></p>
<p>سپس ، یک شبکه Docker برای پروکسی ایجاد کنید تا با کانتینرها به اشتراک گذاشته شود. شبکه Docker لازم است تا بتوانیم از آن در برنامه هایی که با استفاده از Docker Compose اجرا می شوند استفاده کنیم. بیایید با این شبکه وب تماس بگیریم:</p>
<ul>
<li>$ docker network create web</li>
<li></li>
</ul>
<p>وقتی کانتینر Traefik شروع به کار کرد ، ما آن را به این شبکه اضافه خواهیم کرد. سپس می توانیم کانتینرهای دیگری را برای پروکسی Trafik به این شبکه اضافه کنیم.</p>
<p>سپس ، یک فایل خالی ایجاد کنید که اطلاعات Let&rsquo;s Encrypt ما را در خود نگه دارد. ما این را در کانتینر به اشتراک خواهیم گذاشت تا Traefik بتواند از آن استفاده کند:</p>
<ul>
<li>$ touch acme.json</li>
<li></li>
</ul>
<p>Traefik &nbsp;فقط درصورتی امکان استفاده از این فایل را خواهد داشت که کاربر ریشه داخل کانتینر دسترسی خواندن و نوشتن منحصر به فرد به آن داشته باشد. برای انجام این کار ، مجوزهای acme.json را قفل کنید تا فقط صاحب فایل اجازه خواندن و نوشتن را داشته باشد:</p>
<ul>
<li>$ chmod 600 acme.json</li>
<li></li>
</ul>
<p>هنگامی که فایل به Docker منتقل شد ، مالک به طور خودکار به کاربر اصلی داخل کانتینر تغییر می کند.</p>
<p>در آخر ، با استفاده از این دستور کانتینر Traefik را ایجاد کنید:</p>
<ul>
<li>docker run -d </li>
<li></li>
<li>-v /var/run/docker.sock:/var/run/docker.sock </li>
<li></li>
<li>-v $PWD/traefik.toml:/traefik.toml </li>
<li></li>
<li>-v $PWD/acme.json:/acme.json </li>
<li></li>
<li>-p 80:80 </li>
<li></li>
<li>-p 443:443 </li>
<li></li>
<li>-l traefik.frontend.rule=Host:monitor.your_domain </li>
<li></li>
<li>-l traefik.port=8080 </li>
<li></li>
<li>&ndash;network web </li>
<li></li>
<li>&ndash;name traefik </li>
<li></li>
<li>traefik:1.7-alpine</li>
</ul>
<p>&nbsp;</p>
<p>دستور کمی طولانی است ، بنابراین اجازه دهید آن را تجزیه کنیم.</p>
<p>ما از پرچم -d برای اجرای کانتینر در پس زمینه به عنوان یک دمون استفاده می کنیم. سپس فایل docker.sock خود را در کانتینر به اشتراک می گذاریم تا روند Traefik بتواند تغییرات در کانتینرها را گوش دهد. همچنین فایل پیکربندی traefik.toml و فایل acme.json &nbsp;را که ایجاد کردیم در کانتینر به اشتراک می گذاریم.</p>
<p>سپس ، از پورت های 80 و: 443 هاست Docker خود به همان پورت های موجود در کانتینر Traefik ترسیم می کنیم تا Traefik تمام ترافیک HTTP و HTTPS را به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;دریافت کند.</p>
<p>سپس دو برچسب Docker تنظیم می کنیم که به Traefik می گوید که باید ترافیک را به سمت نام هاست monitor.your_domain به :8080 درون کانتینر Traefik هدایت کند، که داشبورد نظارت را نشان می دهد.</p>
<p>شبکه کانتینر را روی وب تنظیم می کنیم و کانتینر را traefik نامگذاری می گذاریم.</p>
<p>سرانجام ، از تصویر traefik: 1.7-alpine برای این کانتینر استفاده می کنیم ، زیرا کوچک است.</p>
<p>یک ENTRYPOINT تصویر Docker فرمانی است که همیشه هنگام ایجاد کانتینر از تصویر اجرا می شود. در این حالت ، دستور باینری traefik درون کانتینر است. هنگام راه اندازی کانتینر می توانید آرگومان های دیگری را به آن دستور منتقل کنید ، اما همه تنظیمات خود را در فایل traefik.toml پیکربندی کرده ایم.</p>
<p>با راه اندازی کانتینر ، اکنون داشبوردی دارید که می توانید برای مشاهده سلامت کانتینرهای خود به آن دسترسی داشته باشید. همچنین می توانید از این داشبورد برای تجسم frontends &nbsp;و &nbsp;backends که Traefik ثبت کرده استفاده کنید. با رفتن به ادرس https: //monitor.your_domain &nbsp;در مرورگر خود به داشبورد نظارت دسترسی پیدا کنید. نام کاربری و گذرواژه ادمین&nbsp; و رمز عبوری که در مرحله 1 پیکربندی کرده اید ، از شما خواسته می شود.</p>
<p>پس از ورود به سیستم ، رابط کاربری مشابه این را مشاهده خواهید کرد:</p>
<p>چیز چندانی برای مشاهده وجود ندارد ، اما این پنجره را باز بگذارید ، و با افزودن کانتینرهایی برای مدیریت Traefik ، تغییر محتوا را مشاهده خواهید کرد.</p>
<p>اکنون پروکسی Traefik در حال اجرا ، پیکربندی شده برای کار با Docker و آماده نظارت بر سایر کانتینرها Docker است. بیایید چند کانتینر برای Traefik به پروکسی اضافه کنیم.</p>
<p><strong>مرحله 3 &ndash; ثبت کانتینرها با&nbsp;</strong><strong>&nbsp;Traefik</strong></p>
<p>با استفاده از کانتینر Traefik ، آماده اجرای برنامه هایی در ورای آن هستید. اجازه دهید کانتینرهای زیر را تحت Traefik راه اندازی کنیم:</p>
<p>1- وبلاگی با استفاده از تصویر رسمی وردپرس.</p>
<p>2- یک&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;مدیریت پایگاه داده با استفاده از تصویر رسمی &nbsp;Adminer.</p>
<p>ما با استفاده از یک فایل docker-compose.yml هر دو این برنامه ها را با Docker Compose مدیریت خواهیم کرد.</p>
<p>فایل docker-compose.yml را در ویرایشگر خود ایجاد و باز کنید:</p>
<ul>
<li>$ nano docker-compose.yml</li>
<li></li>
</ul>
<p>خطوط زیر را به فایل اضافه کنید تا نسخه و شبکه هایی را که استفاده خواهیم کرد مشخص کنید:</p>
<p>docker-compose.yml</p>
<p>version: &ldquo;3&rdquo;</p>
<p>&nbsp;</p>
<p>networks:</p>
<p>web:</p>
<p>external:&nbsp;<strong>true</strong></p>
<p>internal:</p>
<p>external:&nbsp;<strong>false</strong></p>
<p>&nbsp;</p>
<p>ما از Docker Compose نسخه 3 استفاده می کنیم زیرا جدیدترین نسخه اصلی قالب فایل Compose است.</p>
<p>برای اینکه Traefik برنامه های ما را بشناسد ، آنها باید بخشی از یک شبکه باشند و از آنجا که ما شبکه را به صورت دستی ایجاد کرده ایم ، با تعیین نام شبکه وب و تنظیم external&nbsp; روی true ، آن را به داخل می کشیم. سپس یک شبکه دیگر تعریف می کنیم تا بتوانیم کانتینرهای در معرض دید خود را به یک کانتینر پایگاه داده متصل کنیم که از طریق Traefik در معرض آن قرار نمی گیریم. ما این شبکه را internalمی نامیم.</p>
<p>در مرحله بعدی ، هر یک از سرویس های خود را یک به یک تعریف خواهیم کرد. بیایید با محتوای وبلاگ شروع کنیم ، که پایه آن را تصویر رسمی وردپرس قرار خواهیم داد. این پیکربندی را به پایین فایل خود اضافه کنید:</p>
<p>docker-compose.yml</p>
<p>version: &ldquo;3&rdquo;</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>services:</p>
<p>blog:</p>
<p>image: wordpress:4.9.8-apache</p>
<p>environment:</p>
<p>WORDPRESS_DB_PASSWORD:</p>
<p>labels:</p>
<p>&ndash; traefik.backend=blog</p>
<p>&ndash; traefik.frontend.rule=Host:blog.your_domain</p>
<p>&ndash; traefik.docker.network=web</p>
<p>&ndash; traefik.port=80</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>&ndash; web</p>
<p>depends_on:</p>
<p>&ndash; mysql</p>
<p>&nbsp;</p>
<p>کلید environment&nbsp;به شما امکان می دهد متغیرهای محیطی را که در داخل کانتینر تنظیم می شوند ، تعیین کنید. با تعیین نکردن مقداری برای WORDPRESS_DB_PASSWORD ، به Docker Compose می گوییم که هنگام ایجاد کانتینر مقدار را از پوسته ما گرفته و آن را عبور دهد. قبل از شروع کانتینرها ، این متغیر محیط را در پوسته خود تعریف خواهیم کرد. به این ترتیب گذرواژه های محکم کد گذاری شده را در فایل پیکربندی وارد نمی کنیم.</p>
<p>قسمت labels&nbsp; جایی است که شما مقادیر پیکربندی Traefik را تعیین می کنید. برچسب های Docker به تنهایی کاری انجام نمی دهند ، اما Traefik این موارد را می خواند تا بداند چگونه با کانتینرها رفتار کند. آنچه در هر یک از این برچسب ها انجام می شود به این شرح است:</p>
<ul>
<li>backend نام سرویس backend را در Traefik مشخص می کند (که به کانتینر واقعی blog&nbsp;اشاره دارد).</li>
<li>frontend.rule=Host:blog.your_domain به Traefik می گوید که میزبان درخواستی را بررسی کند و اگر با الگوی blog.your_domain مطابقت دارد باید ترافیک را به کانتینر blog هدایت کند.</li>
<li>docker.network=web مشخص می کند برای یافتن IP داخلی این کانتینر در کدام شبکه به دنبال Traefik بگردید. از آنجا که کانتینر Traefik ما به تمام اطلاعات Docker دسترسی دارد ، اگر این مورد را مشخص نکنیم ، احتمالاً IP را برای شبکه داخلی می گیرد.</li>
<li>port پورت در معرض مشخصی را مشخص می کند که Traefik باید از آن برای مسیر یابی به این کانتینر استفاده کند.</li>
</ul>
<p>با استفاده از این پیکربندی ، تمام ترافیک ارسال شده به پورت 80 میزبان Docker ما به کانتینر blog&nbsp; هدایت می شود.</p>
<p>ما این کانتینر را به دو شبکه مختلف اختصاص می دهیم تا Traefik بتواند آن را از طریق شبکه وب پیدا کند و بتواند از طریق شبکه داخلی با کانتینر پایگاه داده ارتباط برقرار کند.</p>
<p>سرانجام ، کلید depend_on به Docker Compose می گوید که این کانتینر پس از اجرای متعلقات باید شروع شود. از آنجا که وردپرس برای اجرا به یک پایگاه داده احتیاج دارد ، ما باید قبل از شروع محتوای وبلاگ خود ، محتوای mysql خود را اجرا کنیم.</p>
<p>سپس ، با اضافه کردن این پیکربندی به پایین فایل ، سرویس MySQL را پیکربندی کنید:</p>
<p>docker-compose.yml</p>
<p>services:</p>
<p>&hellip;</p>
<p>mysql:</p>
<p>image: mysql:5.7</p>
<p>environment:</p>
<p>MYSQL_ROOT_PASSWORD:</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>labels:</p>
<p>&ndash; traefik.enable=false</p>
<p>&nbsp;</p>
<p>ما برای این کانتینر از تصویر رسمی MySQL 5.7 استفاده می کنیم. مشاهده خواهید کرد که بار دیگر از یک آیتم environment&nbsp; بدون مقدار استفاده می کنیم. متغیرهای MYSQL_ROOT_PASSWORD و WORDPRESS_DB_PASSWORD &nbsp;باید در همان مقدار تنظیم شوند تا اطمینان حاصل شود که کانتینر وردپرس ما می تواند با &nbsp;MySQL &nbsp;ارتباط برقرار کند. ما نمی خواهیم کانتینر mysql را در معرض Traefik یا جهان خارج قرار دهیم ، بنابراین فقط این کانتینر را به شبکه داخلی اختصاص می دهیم. از آنجا که Traefik به سوکت Docker دسترسی دارد ، این فرایند همچنان پیش فرض یک کانتینر mysql را نشان می دهد ، بنابراین ما برچسب traefik.enable = false را اضافه می کنیم تا مشخص کنیم Traefik نباید این کانتینر را نشان دهد.</p>
<p>سرانجام ، این پیکربندی را به قسمت پایین فایل خود اضافه کنید تا کانتینر Adminer را تعریف کنید:</p>
<p>docker-compose.yml</p>
<p>services:</p>
<p>&hellip;</p>
<p>adminer:</p>
<p>image: adminer:4.6.3-standalone</p>
<p>labels:</p>
<p>&ndash; traefik.backend=adminer</p>
<p>&ndash; traefik.frontend.rule=Host:db-admin.your_domain</p>
<p>&ndash; traefik.docker.network=web</p>
<p>&ndash; traefik.port=8080</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>&ndash; web</p>
<p>depends_on:</p>
<p>&ndash; mysql</p>
<p>&nbsp;</p>
<p>این کانتینر بر اساس تصویر رسمی ادمین است. پیکربندی network&nbsp; و depends_on برای این کانتینر دقیقاً با آنچه برای کانتینر blog&nbsp; استفاده می کنیم مطابقت دارد.</p>
<p>با این حال ، از آنجا که همه ترافیک را به پورت 80 هاست Docker خود مستقیماً به کانتینر blog&nbsp; هدایت می کنیم ، باید این کانتینر را به گونه دیگری پیکربندی کنیم تا ترافیک به کانتینر ادمین ما برسد. traefik.frontend.rule=Host:db-admin.your_domain به Traefik می گوید هاست درخواستی را بررسی کند. اگر با الگوی db-admin.your_domain مطابقت داشته باشد ، Traefik ترافیک را به سمت کانتینر مدیر هدایت می کند.</p>
<p>در این مرحله ، docker-compose.yml &nbsp;باید دارای محتوای زیر باشد:</p>
<p>docker-compose.yml</p>
<p>version: &ldquo;3&rdquo;</p>
<p>&nbsp;</p>
<p>networks:</p>
<p>web:</p>
<p>external:&nbsp;<strong>true</strong></p>
<p>internal:</p>
<p>external:&nbsp;<strong>false</strong></p>
<p>&nbsp;</p>
<p>services:</p>
<p>blog:</p>
<p>image: wordpress:4.9.8-apache</p>
<p>environment:</p>
<p>WORDPRESS_DB_PASSWORD:</p>
<p>labels:</p>
<p>&ndash; traefik.backend=blog</p>
<p>&ndash; traefik.frontend.rule=Host:blog.your_domain</p>
<p>&ndash; traefik.docker.network=web</p>
<p>&ndash; traefik.port=80</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>&ndash; web</p>
<p>depends_on:</p>
<p>&ndash; mysql</p>
<p>mysql:</p>
<p>image: mysql:5.7</p>
<p>environment:</p>
<p>MYSQL_ROOT_PASSWORD:</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>labels:</p>
<p>&ndash; traefik.enable=false</p>
<p>adminer:</p>
<p>image: adminer:4.6.3-standalone</p>
<p>labels:</p>
<p>&ndash; traefik.backend=adminer</p>
<p>&ndash; traefik.frontend.rule=Host:db-admin.your_domain</p>
<p>&ndash; traefik.docker.network=web</p>
<p>&ndash; traefik.port=8080</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>&ndash; web</p>
<p>depends_on:</p>
<p>&ndash; mysql</p>
<p>&nbsp;</p>
<p>فایل را ذخیره کرده و از ویرایشگر متن خارج شوید.</p>
<p>سپس ، مقادیر را برای پوسته خود برای متغیرهای WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD قبل از شروع کانتینرها خود تنظیم کنید:</p>
<ul>
<li>$ export WORDPRESS_DB_PASSWORD=secure_database_password</li>
<li></li>
<li>$ export MYSQL_ROOT_PASSWORD=secure_database_password</li>
</ul>
<p>&nbsp;</p>
<p>secure_database_password &nbsp;را با گذرواژه پایگاه داده مورد نظر خود جایگزین کنید. فراموش نکنید که برای هر دو WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD از رمز عبور یکسانی استفاده کنید.</p>
<p>با تنظیم این متغیرها ، کانتینرها را با استفاده از docker-compose اجرا کنید:</p>
<ul>
<li>$ docker-compose up -d</li>
<li></li>
</ul>
<p>اکنون نگاهی دوباره به داشبورد مدیریت Traefik بیندازید. خواهید دید که اکنون یک backend&nbsp; و &nbsp;frontend برای دو&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;وجود دارد:</p>
<p>به blog.your_domain خود بروید. به یک اتصال TLS هدایت خواهید شد و اکنون می توانید تنظیمات WordPress را انجام دهید:</p>
<p>اکنون با مراجعه به db-admin.your_domain در مرورگر خود ، به Adminer دسترسی پیدا کنید و your_domain را دوباره با دامنه خود جایگزین کنید. کانتینر mysql در معرض دنیای خارج نیست ، اما کانتینر adminer&nbsp; از طریق شبکه داخلی Docker &nbsp;که با استفاده از نام کانتینر mysql به عنوان نام هاست به آن استفاده میکنند ، دسترسی دارد.</p>
<p>در صفحه ورود به سیستم Adminer ، از ROOT به عنوان نام کاربری، MySQL برای&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;استفاده کنید. و مقداری را که برای MYSQL_ROOT_PASSWORD &nbsp;تعیین کرده اید برای رمز عبور وارد کنید. پس از ورود به سیستم ، رابط کاربری Adminer را مشاهده خواهید کرد:</p>
<p>هر دو سایت اکنون کار می کنند و شما می توانید از داشبورد موجود در monitor.your_domain استفاده کنید تا برنامه های خود را تحت نظر داشته باشید.</p>
<p><strong>نتیجه</strong></p>
<p>در این آموزش ، Traefik را به درخواست پروکسی از برنامه های دیگر در کانتینرهای Docker پیکربندی کرده اید.</p>
<p>پیکربندی اعلانی Traefik در سطح کانتینر برنامه ، پیکربندی سرویس های بیشتر را آسان می کند و هنگام افزودن برنامه های جدید به ترافیک پروکسی ، نیازی به راه اندازی مجدد کانتینر traefik نیست زیرا Traefik بلافاصله از طریق فایل سوکت Docker که در حال کنترل است، متوجه تغییر می شود.</p>
<p>برای کسب اطلاعات بیشتر در مورد آنچه می توانید با Traefik انجام دهید ، به مطالب رسمی Traefik مراجعه کنید.</p>
<p><a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خریدvps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-england/">سرور مجازی انگلیس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-germany/">سرور مجازی آلمان</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-canada/">سرور مجازی کانادا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps خرید</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">سرور مجازی فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی ارزان هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید vps هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">خرید vps فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">تست vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">سرور مجازی تست</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور مجازی ویندوز</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">ارزانترین vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps ارزان</a>&nbsp;&ndash;&nbsp;</p>]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-10T11:09:59+04:30</pubDate>
	</item>
	<item>
		<title><![CDATA[نحوه دانلود فایل ها با cURL]]></title>
		<description><![CDATA[<p>URL &nbsp;کلاینت یا cURL ، یک کتابخانه و ابزار خط فرمان برای انتقال داده ها بین سیستم ها است. از بسیاری از پروتکل ها پشتیبانی می کند و به طور پیش فرض روی بسیاری از سیستم عامل های یونیکس مانند نصب میباشد. به دلیل در دسترس بودن به صورت عمومی ، برای زمانی که شما نیاز به دانلود یک فایل در سیستم محلی خود دارید ، به خصوص در محیط&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;، انتخاب خوبی است.</p>
<p>در این آموزش ، از دستور curl برای دانلود یک فایل متنی از&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;وب استفاده خواهید کرد. شما محتویات آن را مشاهده خواهید کرد ، آن را به صورت محلی ذخیره خواهید کرد و به curl خواهید گفت که اگر فایل ها منتقل شده اند ، ریدایرکت ها را دنبال کند.</p>
<p>دانلود فایل ها از طریق اینترنت می تواند خطرناک باشد ، بنابراین مطمئن شوید که از منابع معتبر دانلود می کنید.</p>
<p><strong>مرحله 1 &ndash; گرفتن فایل های از راه دور</strong></p>
<p>خارج از باکس ، بدون هیچ آرگومان خط فرمان ، دستور curl یک فایل را واکشی می کند و محتوای آن را به خروجی استاندارد نشان می دهد.</p>
<p>با دانلود فایل robots.txt بیایید آن را امتحان کنیم:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ curl https://www.digitalocean.com/robots.txt</p>
<p>محتوای فایل را در صفحه نمایش خواهید دید:</p>
<p>Output</p>
<p>User-agent: *</p>
<p>Disallow:</p>
<p>&nbsp;</p>
<p>sitemap: https://www.digitalocean.com/sitemap.xml</p>
<p>sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz</p>
<p>sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz</p>
<p>sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz</p>
<p>&nbsp;</p>
<p>به curl یک URL بدهید و منبع را واکشی کرده و محتوای آن را نمایش می دهد.</p>
<p><strong>ذخیره فایل های از راه دور</strong></p>
<p>واکشی یک فایل و نمایش محتوای آن کاملاً خوب است ، اما اگر بخواهید فایل را در سیستم خود ذخیره کنید چه می کنید؟</p>
<p>برای ذخیره فایل از راه دور در سیستم محلی خود ، با همان نام فایل&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;که از آن دانلود می کنید ، آرگومان &ndash;remote-name را اضافه کنید یا از گزینه -O استفاده کنید:</p>
<ul>
<li>$ curl -O https://www.digitalocean.com/robots.txt</li>
<li></li>
</ul>
<p>فایل شما دانلود می شود:</p>
<p>[secondary_label Output</p>
<p>% Total&nbsp;&nbsp;&nbsp; % Received % Xferd&nbsp; Average Speed&nbsp;&nbsp; Time&nbsp;&nbsp;&nbsp; Time&nbsp;&nbsp;&nbsp;&nbsp; Time&nbsp; Current</p>
<p>Dload&nbsp; Upload&nbsp;&nbsp; Total&nbsp;&nbsp; Spent&nbsp;&nbsp;&nbsp; Left&nbsp; Speed</p>
<p>100&nbsp;&nbsp; 286&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 286&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 5296&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 &ndash;:&ndash;:&ndash; &ndash;:&ndash;:&ndash; &ndash;:&ndash;:&ndash;&nbsp; 5296</p>
<p>&nbsp;</p>
<p>curl به جای نمایش محتویات فایل ، پیشرفت بر پایه متن را نشان می دهد و فایل را به همان نام فایل راه دور ذخیره می کند. با دستور cat می توانید موارد را بررسی کنید:</p>
<ul>
<li>$ cattxt</li>
<li></li>
</ul>
<p>این فایل شامل همان مطالبی است که قبلاً مشاهده کرده اید:</p>
<p>[secondary_label Output</p>
<p>User-agent: *</p>
<p>Disallow:</p>
<p>&nbsp;</p>
<p>sitemap: https://www.digitalocean.com/sitemap.xml</p>
<p>sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz</p>
<p>sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz</p>
<p>sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz</p>
<p>&nbsp;</p>
<p>اکنون بیایید به تعیین یک نام فایل برای فایل دانلود شده بپردازیم.</p>
<p><strong>مرحله 2 &ndash; ذخیره فایل های از راه دور با نام فایل خاص</strong></p>
<p>ممکن است قبلاً یک فایل محلی با همان نام فایل در&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;راه دور داشته باشید.</p>
<p>برای جلوگیری از رونویسی مجدد فایل محلی خود به همین نام ، از آرگومان -o یا &ndash;output و به دنبال آن نام فایل محلی که می خواهید محتوا را در آن ذخیره کنید استفاده کنید.</p>
<p>برای دانلود فایل از راه دور robots.txt در فایل do-bots.txt که به صورت محلی نامگذاری شده است ، دستور زیر را اجرا کنید:</p>
<ul>
<li>$ curl -o do-bots.txt https://www.digitalocean.com/robots.txt</li>
<li></li>
</ul>
<p>بار دیگر نوار پیشرفت را مشاهده خواهید کرد:</p>
<p>Output</p>
<p>% Total&nbsp;&nbsp;&nbsp; % Received % Xferd&nbsp; Average Speed&nbsp;&nbsp; Time&nbsp;&nbsp;&nbsp; Time&nbsp;&nbsp;&nbsp;&nbsp; Time&nbsp; Current</p>
<p>Dload&nbsp; Upload&nbsp;&nbsp; Total&nbsp;&nbsp; Spent&nbsp;&nbsp;&nbsp; Left&nbsp; Speed</p>
<p>100&nbsp;&nbsp; 286&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 286&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 6975&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 &ndash;:&ndash;:&ndash; &ndash;:&ndash;:&ndash; &ndash;:&ndash;:&ndash;&nbsp; 7150</p>
<p>&nbsp;</p>
<p>اکنون برای نمایش محتویات do-bots.txt از دستور cat استفاده کنید تا فایل مورد نظر را دانلود کنید:</p>
<ul>
<li>$ cat do-bots.txt</li>
<li></li>
</ul>
<p>خروجی یکسان میباشد:</p>
<p>Output</p>
<p>User-agent: *</p>
<p>Disallow:</p>
<p>&nbsp;</p>
<p>sitemap: https://www.digitalocean.com/sitemap.xml</p>
<p>sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz</p>
<p>sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz</p>
<p>sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz</p>
<p>&nbsp;</p>
<p>به طور پیش فرض ، curl تغییر مسیرها را دنبال نمی کند ، بنابراین هنگام انتقال فایل ها ، ممکن است آنچه انتظار دارید را دریافت نکنید. بیایید ببینیم چگونه این مشکل را برطرف کنیم.</p>
<p><strong>مرحله 3 &ndash; دنبال کردن تغییر مسیرها</strong></p>
<p>تاکنون همه مثالها شامل URL های کاملاً واجد شرایط هستند که شامل پروتکل https: // هستند. اگر بخواهید فایل robots.txt را گرفته و فقط www.example.com را مشخص کنید ، هیچ خروجی نمی بینید ، زیرا example درخواست های http: // را به https: // هدایت می کند:</p>
<p>شما می توانید این را با استفاده از پرچم -I تأیید کنید ، که عناوین درخواست را به جای محتویات فایل نمایش می دهد:</p>
<ul>
<li>$ curl -I www.digitalocean.com</li>
<li></li>
</ul>
<p>خروجی نشان می دهد که URL تغییر مسیر داده است. خط اول خروجی به شما می گوید که جابه جا شده است و خط location مکان آن را به شما می گوید:</p>
<p>[secondary_label Output</p>
<p>HTTP/1.1 301 Moved Permanently</p>
<p>Date: Wed, 26 Aug 2020 19:01:33 GMT</p>
<p>Connection: keep-alive</p>
<p>Cache-Control: max-age=3600</p>
<p>Expires: Wed, 26 Aug 2020 20:01:33 GMT</p>
<p>Location: https://www.digitalocean.com/robots.txt</p>
<p>cf-request-id: 04cdbea7a40000c5cc8d34d200000001</p>
<p>Server: cloudflare</p>
<p>CF-RAY: 5c8fcd52aea0c5cc-EWR</p>
<p>&nbsp;</p>
<p>می توانید از curl برای درخواستی دیگر به صورت دستی استفاده کنید ، یا می توانید از آرگومان &ndash;location یا -L استفاده کنید که به curl می گوید هر زمان که با یک تغییر مسیر مواجه شد درخواست را به مکان جدید دوباره انجام دهد. آن را امتحان کنید:</p>
<ul>
<li>$ curl -L www.digitalocean.com/robots.txt</li>
<li></li>
</ul>
<p>این بار خروجی را مشاهده می کنید ، زیرا curl به دنبال تغییر مسیر می رود:</p>
<p>Output</p>
<p>User-agent: *</p>
<p>Sitemap: https://www.digitalocean.com/sitemap.xml</p>
<p>&nbsp;</p>
<p>برای دانلود فایل در سیستم محلی خود می توانید آرگومان -L را با برخی از آرگومان های فوق الذکر ترکیب کنید:</p>
<ul>
<li>$ curl -L -o do-bots.txt www.digitalocean.com/robots.txt</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>هشدار: بسیاری از منابع آنلاین از شما می خواهند که برای دانلود اسکریپت ها و اجرای آنها از curl استفاده کنید. قبل از اجرای اسکریپت های دانلود شده ، بهتر است محتوای آنها را بررسی کنید. برای بررسی کد و اطمینان از چیزی که می خواهید اجرا کنید ، از دستور less استفاده کنید.</p>
<p>&nbsp;</p>
<p><strong>نتیجه</strong></p>
<p>curl به شما امکان می دهد که فایل ها را سربع از یک سیستم از راه دور دانلود کنید. &nbsp;Curl &nbsp;از پروتکل های مختلف پشتیبانی می کند و همچنین می تواند درخواست های وب پیچیده تری از جمله تعامل با API های از راه دور برای ارسال و دریافت داده ها را ایجاد کند.</p>
<p>با مشاهده صفحه دستی &nbsp;man در مورد curl می توانید اطلاعات بیشتری کسب کنید.</p>
<p><a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خریدvps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-england/">سرور مجازی انگلیس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-germany/">سرور مجازی آلمان</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-canada/">سرور مجازی کانادا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps خرید</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">سرور مجازی فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی ارزان هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید vps هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">خرید vps فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">تست vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">سرور مجازی تست</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور مجازی ویندوز</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">ارزانترین vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps ارزان</a>&nbsp;&ndash;&nbsp;</p>]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-09T14:27:15+04:30</pubDate>
	</item>
	<item>
		<title><![CDATA[نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در اوبونتو 20.04]]></title>
		<description><![CDATA[<p>Docker &nbsp;می تواند روشی کارآمد برای اجرای برنامه های وب در حال تولید باشد ، اما ممکن است بخواهید چندین برنامه را در یک هاست &nbsp;Docker اجرا کنید. در این شرایط ، باید پروکسی معکوس تنظیم کنید زیرا فقط می خواهید پورت 80 و 443 را در معرض دید قرار دهید.</p>
<p>Traefik &nbsp;یک پروکسی معکوس آگاه از Docker است که شامل داشبورد نظارت خود میباشد. در این آموزش ، از Traefik برای مسیر یابی درخواست ها به دو کانتینر مختلف برنامه وب استفاده می کنید: یک کانتینر وردپرس و یک کانتینر Adminer که هر کدام با یک پایگاه داده MySQL در ارتباط هستند. با استفاده از Let&rsquo;s Encrypt ، Traefik را پیکربندی می کنید تا همه چیز را از طریق HTTPS &nbsp;ارائه دهد.</p>
<p><strong>پیش نیازها</strong></p>
<p>برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:</p>
<ul>
<li>یک&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;اوبونتو 20.04 با پیروی از راهنمای ستاپ اولیه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;اوبونتو 20.04 ، از جمله کاربر غیر ریشه sudo و فایروال ، راه اندازی شده.</li>
<li>Docker روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;شما نصب شده باشد ، که می توانید با دنبال کردن نحوه نصب و استفاده از Docker در Ubuntu 20.04 این کار را انجام دهید.</li>
<li>Docker Compose با دستورالعمل نحوه نصب Docker Compose در اوبونتو 20.04 نصب شده باشد.</li>
<li>یک دامنه و سه رکورد A ، db-admin.your_domain ، your_domain و monitor.your_domain. هر کدام باید به آدرس IP&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;شما اشاره کنند. در طول این آموزش ، دامنه خود را به جای your_domain در فایلهای پیکربندی و مثالها جایگزین کنید.</li>
</ul>
<p><strong>مرحله 1 &ndash; پیکربندی و اجرای&nbsp;</strong><strong>&nbsp;Traefik</strong></p>
<p>پروژه Traefik دارای یک تصویر Docker رسمی است ، بنابراین ما برای اجرای Traefik در یک کانتینر Docker از آن استفاده خواهیم کرد.</p>
<p>اما قبل از راه اندازی کانتینر Traefik ، باید یک فایل پیکربندی ایجاد کرده و یک پسورد رمزگذاری شده تنظیم کنیم تا بتوانیم به داشبورد نظارت دسترسی پیدا کنیم.</p>
<p>برای ایجاد این گذرواژه رمزگذاری شده از ابزار htpasswd استفاده خواهیم کرد. ابتدا برنامه کمکی را نصب کنید که در بسته apache2-utils &nbsp;وجود دارد:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo apt-get install apache2-utils&middot;</p>
<p>&nbsp;</p>
<p>سپس رمز عبور را با htpasswd تولید کنید. secure_password را با رمز عبوری که می خواهید برای کاربر مدیر Traefik استفاده کنید جایگزین کنید:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ htpasswd -nb admin secure_password&middot;</p>
<p>خروجی برنامه به صورت زیر خواهد بود:</p>
<p>Output</p>
<p>admin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/</p>
<p>&nbsp;</p>
<p>برای تنظیم احراز هویت پایه HTTP برای داشبورد بررسی و نظارت بر سلامت Traefik ، از خروجی منحصر به فرد خود در فایل پیکربندی Traefik استفاده خواهید کرد. تمام خط خروجی خود را کپی کنید تا بعداً بتوانید آن را جایگذاری کنید. از خروجی مثال استفاده نکنید.</p>
<p>برای پیکربندی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;Traefik ، با استفاده از قالب TOML ، یک فایل پیکربندی جدید به نام traefik.toml ایجاد خواهیم کرد. TOML یک زبان پیکربندی شبیه به فایل های INI اما استاندارد است. این فایل به ما اجازه می دهد تا&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;Traefik و ادغام های مختلف یا providers را که می خواهیم استفاده کنیم پیکربندی کنیم. در این آموزش ، ما از سه ارائه دهنده موجود Traefik استفاده خواهیم کرد: api ، docker &nbsp;و acme. آخرین مورد ، acme &nbsp;با استفاده از Let&rsquo;s Encrypt از گواهینامه های TLS پشتیبانی می کند.</p>
<p>فایل جدید خود را در nano یا ویرایشگر متن مورد علاقه خود باز کنید:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ nano traefik.toml&middot;</p>
<p>ابتدا دو نقطه ورودی به نام http و https اضافه کنید که به طور پیش فرض همه backends به آنها دسترسی خواهند داشت:</p>
<p>traefik.toml</p>
<p>defaultEntryPoints = [&ldquo;http&rdquo;, &ldquo;https&rdquo;]</p>
<p>&nbsp;</p>
<p>بعداً در این فایل نقاط ورودی http و https را پیکربندی خواهیم کرد.</p>
<p>در مرحله بعد ، ارائه دهنده api را پیکربندی کنید ، که به شما امکان دسترسی به رابط داشبورد را می دهد. اینجاست که می توانید خروجی را از دستور htpasswd پیست کنید:</p>
<p>traefik.toml</p>
<p>&hellip;</p>
<p>[entryPoints]</p>
<p>[entryPoints.dashboard]</p>
<p>address = &ldquo;:8080&rdquo;</p>
<p>[entryPoints.dashboard.auth]</p>
<p>[entryPoints.dashboard.auth.basic]</p>
<p>users = [&ldquo;admin:your_encrypted_password&rdquo;]</p>
<p>&nbsp;</p>
<p>[api]</p>
<p>entrypoint=&rdquo;dashboard&rdquo;</p>
<p>&nbsp;</p>
<p>داشبورد یک برنامه وب جداگانه است که در کانتینر Traefik اجرا می شود. ما داشبورد را تنظیم می کنیم تا روی پورت 8080 کار کند.</p>
<p>بخش entrypoints.dashboard نحوه ارتباط ما با ارائه دهنده api را تنظیم می کند و بخش entrypoints.dashboard.auth.basic &nbsp;تأیید اعتبار اصلی HTTP را برای داشبورد پیکربندی می کند. برای مقدار ورودی کاربران از خروجی دستور htpasswd استفاده کنید. می توانید ورودهای اضافی را با جدا کردن آنها با ویرگول مشخص کنید.</p>
<p>ما اولین ورودی خود را تعریف کرده ایم ، اما باید سایر موارد را برای ارتباطات استاندارد HTTP و HTTPS که به سمت ارائه دهنده api &nbsp;نیست ، تعریف کنیم. بخش entryPoints آدرس هایی را که Traefik و کانتینرهای پروکسی می توانند به آن گوش دهند پیکربندی می کند. این خطوط را به فایل زیر عنوان entryPoints اضافه کنید:</p>
<p>traefik.toml</p>
<p>&hellip;</p>
<p>[entryPoints.http]</p>
<p>address = &ldquo;:80&rdquo;</p>
<p>[entryPoints.http.redirect]</p>
<p>entryPoint = &ldquo;https&rdquo;</p>
<p>[entryPoints.https]</p>
<p>address = &ldquo;:443&rdquo;</p>
<p>[entryPoints.https.tls]</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>نقطه ورود http پورت 80 را کنترل می کند ، در حالی که نقطه ورود https از پورت 443 برای TLS / SSL استفاده می کند. ما به طور خودکار تمام ترافیک موجود در پورت 80 را به نقطه ورود https هدایت می کنیم تا اتصالات ایمن را برای همه درخواست ها تضمین کنیم.</p>
<p>در مرحله بعد ، این بخش را برای پیکربندی Let&rsquo;s Encrypt پشتیبانی از گواهی Traefik اضافه کنید:</p>
<p>traefik.toml</p>
<p>&hellip;</p>
<p>[acme]</p>
<p>email = &ldquo;your_email@your_domain&rdquo;</p>
<p>storage = &ldquo;acme.json&rdquo;</p>
<p>entryPoint = &ldquo;https&rdquo;</p>
<p>onHostRule = true</p>
<p>[acme.httpChallenge]</p>
<p>entryPoint = &ldquo;http&rdquo;</p>
<p>&nbsp;</p>
<p>این بخش acme نامیده می شود زیرا ACME نام پروتكلی است كه برای ارتباط با Let&rsquo;s Encrypt برای مدیریت گواهینامه ها استفاده می شود. سرویس Let&rsquo;s Encrypt نیاز به ثبت نام با یک آدرس ایمیل معتبر دارد ، بنابراین برای اینکه Traefik برای هاست های ما گواهی تولید کند ، کلید ایمیل را روی آدرس ایمیل خود تنظیم کنید. سپس مشخص می کنیم که اطلاعاتی که از Let&rsquo;s Encrypt دریافت خواهیم کرد را در یک فایل JSON به نام acme.json ذخیره خواهیم کرد. کلید entryPoint باید به نقطه ورودی پورت 443 اشاره کند ، که در مورد ما نقطه ورود https است.</p>
<p>کلید onHostRule نحوه عملکرد Traefik برای تولید گواهینامه ها را تعیین می کند. ما می خواهیم گواهینامه خود را به محض ایجاد کانتینرها با نام هاست های مشخص دریافت کنیم ، و این همان کاری است که تنظیم onHostRule انجام می دهد.</p>
<p>بخش acme.httpChallenge به ما اجازه می دهد تا تعیین کنیم چگونه Let&rsquo;s Encrypt بتواند تأیید کند که گواهی تولید شده است. ما در حال پیکربندی آن هستیم تا به عنوان بخشی از چالش از طریق نقطه ورود http ، یک فایل را ارائه دهد.</p>
<p>در آخر ، بیایید با اضافه کردن این خطوط به فایل ، ارائه دهنده docker را پیکربندی کنیم:</p>
<p>traefik.toml</p>
<p>&hellip;</p>
<p>[docker]</p>
<p>domain = &ldquo;your_domain&rdquo;</p>
<p>watch = true</p>
<p>network = &ldquo;web&rdquo;</p>
<p>&nbsp;</p>
<p>ارائه دهنده docker ، Traefik &nbsp;را قادر می سازد به عنوان یک پروکسی در مقابل کانتینرهای Docker عمل کند. ما ارائه دهنده را پیکربندی کرده ایم تا کانتینرهای جدیدی را در شبکه وب مشاهده کند که به زودی ایجاد خواهیم کرد و آنها را به عنوان زیر دامنه های your_domain نمایش می دهد.</p>
<p>در این مرحله ، traefik.toml &nbsp;باید دارای محتوای زیر باشد:</p>
<p>traefik.toml</p>
<p>defaultEntryPoints = [&ldquo;http&rdquo;, &ldquo;https&rdquo;]</p>
<p>&nbsp;</p>
<p>[entryPoints]</p>
<p>[entryPoints.dashboard]</p>
<p>address = &ldquo;:8080&rdquo;</p>
<p>[entryPoints.dashboard.auth]</p>
<p>[entryPoints.dashboard.auth.basic]</p>
<p>users = [&ldquo;admin:your_encrypted_password&rdquo;]</p>
<p>[entryPoints.http]</p>
<p>address = &ldquo;:80&rdquo;</p>
<p>[entryPoints.http.redirect]</p>
<p>entryPoint = &ldquo;https&rdquo;</p>
<p>[entryPoints.https]</p>
<p>address = &ldquo;:443&Prime;</p>
<p>[entryPoints.https.tls]</p>
<p>&nbsp;</p>
<p>[api]</p>
<p>entrypoint=&rdquo;dashboard&rdquo;</p>
<p>&nbsp;</p>
<p>[acme]</p>
<p>email = &ldquo;your_email@your_domain&rdquo;</p>
<p>storage = &ldquo;acme.json&rdquo;</p>
<p>entryPoint = &ldquo;https&rdquo;</p>
<p>onHostRule = true</p>
<p>[acme.httpChallenge]</p>
<p>entryPoint = &ldquo;http&rdquo;</p>
<p>&nbsp;</p>
<p>[docker]</p>
<p>domain = &ldquo;your_domain&rdquo;</p>
<p>watch = true</p>
<p>network = &ldquo;web&rdquo;</p>
<p>Copy</p>
<p>&nbsp;</p>
<p>فایل را ذخیره کرده و از ویرایشگر خارج شوید. با استفاده از این پیکربندی ها ، می توانیم Traefik را مقداردهی اولیه کنیم.</p>
<p><strong>مرحله 2 &ndash; اجرای&nbsp;</strong><strong>&nbsp;</strong><strong>کانتینر&nbsp;</strong><strong>&nbsp;Traefik</strong></p>
<p>سپس ، یک شبکه Docker برای پروکسی ایجاد کنید تا با کانتینرها به اشتراک گذاشته شود. شبکه Docker لازم است تا بتوانیم از آن در برنامه هایی که با استفاده از Docker Compose اجرا می شوند استفاده کنیم. بیایید با این شبکه وب تماس بگیریم:</p>
<ul>
<li>$ docker network create web</li>
<li></li>
</ul>
<p>وقتی کانتینر Traefik شروع به کار کرد ، ما آن را به این شبکه اضافه خواهیم کرد. سپس می توانیم کانتینرهای دیگری را برای پروکسی Trafik به این شبکه اضافه کنیم.</p>
<p>سپس ، یک فایل خالی ایجاد کنید که اطلاعات Let&rsquo;s Encrypt ما را در خود نگه دارد. ما این را در کانتینر به اشتراک خواهیم گذاشت تا Traefik بتواند از آن استفاده کند:</p>
<ul>
<li>$ touch acme.json</li>
<li></li>
</ul>
<p>Traefik &nbsp;فقط درصورتی امکان استفاده از این فایل را خواهد داشت که کاربر ریشه داخل کانتینر دسترسی خواندن و نوشتن منحصر به فرد به آن داشته باشد. برای انجام این کار ، مجوزهای acme.json را قفل کنید تا فقط صاحب فایل اجازه خواندن و نوشتن را داشته باشد:</p>
<ul>
<li>$ chmod 600 acme.json</li>
<li></li>
</ul>
<p>هنگامی که فایل به Docker منتقل شد ، مالک به طور خودکار به کاربر اصلی داخل کانتینر تغییر می کند.</p>
<p>در آخر ، با استفاده از این دستور کانتینر Traefik را ایجاد کنید:</p>
<ul>
<li>docker run -d </li>
<li></li>
<li>-v /var/run/docker.sock:/var/run/docker.sock </li>
<li></li>
<li>-v $PWD/traefik.toml:/traefik.toml </li>
<li></li>
<li>-v $PWD/acme.json:/acme.json </li>
<li></li>
<li>-p 80:80 </li>
<li></li>
<li>-p 443:443 </li>
<li></li>
<li>-l traefik.frontend.rule=Host:monitor.your_domain </li>
<li></li>
<li>-l traefik.port=8080 </li>
<li></li>
<li>&ndash;network web </li>
<li></li>
<li>&ndash;name traefik </li>
<li></li>
<li>traefik:1.7-alpine</li>
</ul>
<p>&nbsp;</p>
<p>دستور کمی طولانی است ، بنابراین اجازه دهید آن را تجزیه کنیم.</p>
<p>ما از پرچم -d برای اجرای کانتینر در پس زمینه به عنوان یک دمون استفاده می کنیم. سپس فایل docker.sock خود را در کانتینر به اشتراک می گذاریم تا روند Traefik بتواند تغییرات در کانتینرها را گوش دهد. همچنین فایل پیکربندی traefik.toml و فایل acme.json &nbsp;را که ایجاد کردیم در کانتینر به اشتراک می گذاریم.</p>
<p>سپس ، از پورت های 80 و: 443 هاست Docker خود به همان پورت های موجود در کانتینر Traefik ترسیم می کنیم تا Traefik تمام ترافیک HTTP و HTTPS را به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;دریافت کند.</p>
<p>سپس دو برچسب Docker تنظیم می کنیم که به Traefik می گوید که باید ترافیک را به سمت نام هاست monitor.your_domain به :8080 درون کانتینر Traefik هدایت کند، که داشبورد نظارت را نشان می دهد.</p>
<p>شبکه کانتینر را روی وب تنظیم می کنیم و کانتینر را traefik نامگذاری می گذاریم.</p>
<p>سرانجام ، از تصویر traefik: 1.7-alpine برای این کانتینر استفاده می کنیم ، زیرا کوچک است.</p>
<p>یک ENTRYPOINT تصویر Docker فرمانی است که همیشه هنگام ایجاد کانتینر از تصویر اجرا می شود. در این حالت ، دستور باینری traefik درون کانتینر است. هنگام راه اندازی کانتینر می توانید آرگومان های دیگری را به آن دستور منتقل کنید ، اما همه تنظیمات خود را در فایل traefik.toml پیکربندی کرده ایم.</p>
<p>با راه اندازی کانتینر ، اکنون داشبوردی دارید که می توانید برای مشاهده سلامت کانتینرهای خود به آن دسترسی داشته باشید. همچنین می توانید از این داشبورد برای تجسم frontends &nbsp;و &nbsp;backends که Traefik ثبت کرده استفاده کنید. با رفتن به ادرس https: //monitor.your_domain &nbsp;در مرورگر خود به داشبورد نظارت دسترسی پیدا کنید. نام کاربری و گذرواژه ادمین&nbsp; و رمز عبوری که در مرحله 1 پیکربندی کرده اید ، از شما خواسته می شود.</p>
<p>پس از ورود به سیستم ، رابط کاربری مشابه این را مشاهده خواهید کرد:</p>
<p>چیز چندانی برای مشاهده وجود ندارد ، اما این پنجره را باز بگذارید ، و با افزودن کانتینرهایی برای مدیریت Traefik ، تغییر محتوا را مشاهده خواهید کرد.</p>
<p>اکنون پروکسی Traefik در حال اجرا ، پیکربندی شده برای کار با Docker و آماده نظارت بر سایر کانتینرها Docker است. بیایید چند کانتینر برای Traefik به پروکسی اضافه کنیم.</p>
<p><strong>مرحله 3 &ndash; ثبت کانتینرها با&nbsp;</strong><strong>&nbsp;Traefik</strong></p>
<p>با استفاده از کانتینر Traefik ، آماده اجرای برنامه هایی در ورای آن هستید. اجازه دهید کانتینرهای زیر را تحت Traefik راه اندازی کنیم:</p>
<p>1- وبلاگی با استفاده از تصویر رسمی وردپرس.</p>
<p>2- یک&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;مدیریت پایگاه داده با استفاده از تصویر رسمی &nbsp;Adminer.</p>
<p>ما با استفاده از یک فایل docker-compose.yml هر دو این برنامه ها را با Docker Compose مدیریت خواهیم کرد.</p>
<p>فایل docker-compose.yml را در ویرایشگر خود ایجاد و باز کنید:</p>
<ul>
<li>$ nano docker-compose.yml</li>
<li></li>
</ul>
<p>خطوط زیر را به فایل اضافه کنید تا نسخه و شبکه هایی را که استفاده خواهیم کرد مشخص کنید:</p>
<p>docker-compose.yml</p>
<p>version: &ldquo;3&rdquo;</p>
<p>&nbsp;</p>
<p>networks:</p>
<p>web:</p>
<p>external:&nbsp;<strong>true</strong></p>
<p>internal:</p>
<p>external:&nbsp;<strong>false</strong></p>
<p>&nbsp;</p>
<p>ما از Docker Compose نسخه 3 استفاده می کنیم زیرا جدیدترین نسخه اصلی قالب فایل Compose است.</p>
<p>برای اینکه Traefik برنامه های ما را بشناسد ، آنها باید بخشی از یک شبکه باشند و از آنجا که ما شبکه را به صورت دستی ایجاد کرده ایم ، با تعیین نام شبکه وب و تنظیم external&nbsp; روی true ، آن را به داخل می کشیم. سپس یک شبکه دیگر تعریف می کنیم تا بتوانیم کانتینرهای در معرض دید خود را به یک کانتینر پایگاه داده متصل کنیم که از طریق Traefik در معرض آن قرار نمی گیریم. ما این شبکه را internalمی نامیم.</p>
<p>در مرحله بعدی ، هر یک از سرویس های خود را یک به یک تعریف خواهیم کرد. بیایید با محتوای وبلاگ شروع کنیم ، که پایه آن را تصویر رسمی وردپرس قرار خواهیم داد. این پیکربندی را به پایین فایل خود اضافه کنید:</p>
<p>docker-compose.yml</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>services:</p>
<p>blog:</p>
<p>image: wordpress:4.9.8-apache</p>
<p>environment:</p>
<p>WORDPRESS_DB_PASSWORD:</p>
<p>labels:</p>
<p>&ndash; traefik.backend=blog</p>
<p>&ndash; traefik.frontend.rule=Host:blog.your_domain</p>
<p>&ndash; traefik.docker.network=web</p>
<p>&ndash; traefik.port=80</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>&ndash; web</p>
<p>depends_on:</p>
<p>&ndash; mysql</p>
<p>&nbsp;</p>
<p>کلید environment&nbsp;به شما امکان می دهد متغیرهای محیطی را که در داخل کانتینر تنظیم می شوند ، تعیین کنید. با تعیین نکردن مقداری برای WORDPRESS_DB_PASSWORD ، به Docker Compose می گوییم که هنگام ایجاد کانتینر مقدار را از پوسته ما گرفته و آن را عبور دهد. قبل از شروع کانتینرها ، این متغیر محیط را در پوسته خود تعریف خواهیم کرد. به این ترتیب گذرواژه های محکم کد گذاری شده را در فایل پیکربندی وارد نمی کنیم.</p>
<p>قسمت labels&nbsp; جایی است که شما مقادیر پیکربندی Traefik را تعیین می کنید. برچسب های Docker به تنهایی کاری انجام نمی دهند ، اما Traefik این موارد را می خواند تا بداند چگونه با کانتینرها رفتار کند. آنچه در هر یک از این برچسب ها انجام می شود به این شرح است:</p>
<ul>
<li>backend نام سرویس backend را در Traefik مشخص می کند (که به کانتینر واقعی blog&nbsp;اشاره دارد).</li>
<li>frontend.rule=Host:blog.your_domain به Traefik می گوید که میزبان درخواستی را بررسی کند و اگر با الگوی blog.your_domain مطابقت دارد باید ترافیک را به کانتینر blog هدایت کند.</li>
<li>docker.network=web مشخص می کند برای یافتن IP داخلی این کانتینر در کدام شبکه به دنبال Traefik بگردید. از آنجا که کانتینر Traefik ما به تمام اطلاعات Docker دسترسی دارد ، اگر این مورد را مشخص نکنیم ، احتمالاً IP را برای شبکه داخلی می گیرد.</li>
<li>port پورت در معرض مشخصی را مشخص می کند که Traefik باید از آن برای مسیر یابی به این کانتینر استفاده کند.</li>
</ul>
<p>با استفاده از این پیکربندی ، تمام ترافیک ارسال شده به پورت 80 میزبان Docker ما به کانتینر blog&nbsp; هدایت می شود.</p>
<p>ما این کانتینر را به دو شبکه مختلف اختصاص می دهیم تا Traefik بتواند آن را از طریق شبکه وب پیدا کند و بتواند از طریق شبکه داخلی با کانتینر پایگاه داده ارتباط برقرار کند.</p>
<p>سرانجام ، کلید depend_on به Docker Compose می گوید که این کانتینر پس از اجرای متعلقات باید شروع شود. از آنجا که وردپرس برای اجرا به یک پایگاه داده احتیاج دارد ، ما باید قبل از شروع محتوای وبلاگ خود ، محتوای mysql خود را اجرا کنیم.</p>
<p>سپس ، با اضافه کردن این پیکربندی به پایین فایل ، سرویس MySQL را پیکربندی کنید:</p>
<p>docker-compose.yml</p>
<p>&hellip;</p>
<p>mysql:</p>
<p>image: mysql:5.7</p>
<p>environment:</p>
<p>MYSQL_ROOT_PASSWORD:</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>labels:</p>
<p>&ndash; traefik.enable=false</p>
<p>&nbsp;</p>
<p>ما برای این کانتینر از تصویر رسمی MySQL 5.7 استفاده می کنیم. مشاهده خواهید کرد که بار دیگر از یک آیتم environment&nbsp; بدون مقدار استفاده می کنیم. متغیرهای MYSQL_ROOT_PASSWORD و WORDPRESS_DB_PASSWORD &nbsp;باید در همان مقدار تنظیم شوند تا اطمینان حاصل شود که کانتینر وردپرس ما می تواند با &nbsp;MySQL &nbsp;ارتباط برقرار کند. ما نمی خواهیم کانتینر mysql را در معرض Traefik یا جهان خارج قرار دهیم ، بنابراین فقط این کانتینر را به شبکه داخلی اختصاص می دهیم. از آنجا که Traefik به سوکت Docker دسترسی دارد ، این فرایند همچنان پیش فرض یک کانتینر mysql را نشان می دهد ، بنابراین ما برچسب traefik.enable = false را اضافه می کنیم تا مشخص کنیم Traefik نباید این کانتینر را نشان دهد.</p>
<p>سرانجام ، این پیکربندی را به قسمت پایین فایل خود اضافه کنید تا کانتینر Adminer را تعریف کنید:</p>
<p>docker-compose.yml</p>
<p>&hellip;</p>
<p>adminer:</p>
<p>image: adminer:4.6.3-standalone</p>
<p>labels:</p>
<p>&ndash; traefik.backend=adminer</p>
<p>&ndash; traefik.frontend.rule=Host:db-admin.your_domain</p>
<p>&ndash; traefik.docker.network=web</p>
<p>&ndash; traefik.port=8080</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>&ndash; web</p>
<p>depends_on:</p>
<p>&ndash; mysql</p>
<p>&nbsp;</p>
<p>این کانتینر بر اساس تصویر رسمی ادمین است. پیکربندی network&nbsp; و depends_on برای این کانتینر دقیقاً با آنچه برای کانتینر blog&nbsp; استفاده می کنیم مطابقت دارد.</p>
<p>با این حال ، از آنجا که همه ترافیک را به پورت 80 هاست Docker خود مستقیماً به کانتینر blog&nbsp; هدایت می کنیم ، باید این کانتینر را به گونه دیگری پیکربندی کنیم تا ترافیک به کانتینر ادمین ما برسد. traefik.frontend.rule=Host:db-admin.your_domain به Traefik می گوید هاست درخواستی را بررسی کند. اگر با الگوی db-admin.your_domain مطابقت داشته باشد ، Traefik ترافیک را به سمت کانتینر مدیر هدایت می کند.</p>
<p>در این مرحله ، docker-compose.yml &nbsp;باید دارای محتوای زیر باشد:</p>
<p>docker-compose.yml</p>
<p>version: &ldquo;3&rdquo;</p>
<p>&nbsp;</p>
<p>networks:</p>
<p>web:</p>
<p>external:&nbsp;<strong>true</strong></p>
<p>internal:</p>
<p>external:&nbsp;<strong>false</strong></p>
<p>&nbsp;</p>
<p>services:</p>
<p>blog:</p>
<p>image: wordpress:4.9.8-apache</p>
<p>environment:</p>
<p>WORDPRESS_DB_PASSWORD:</p>
<p>labels:</p>
<p>&ndash; traefik.backend=blog</p>
<p>&ndash; traefik.frontend.rule=Host:blog.your_domain</p>
<p>&ndash; traefik.docker.network=web</p>
<p>&ndash; traefik.port=80</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>&ndash; web</p>
<p>depends_on:</p>
<p>&ndash; mysql</p>
<p>mysql:</p>
<p>image: mysql:5.7</p>
<p>environment:</p>
<p>MYSQL_ROOT_PASSWORD:</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>labels:</p>
<p>&ndash; traefik.enable=false</p>
<p>adminer:</p>
<p>image: adminer:4.6.3-standalone</p>
<p>labels:</p>
<p>&ndash; traefik.backend=adminer</p>
<p>&ndash; traefik.frontend.rule=Host:db-admin.your_domain</p>
<p>&ndash; traefik.docker.network=web</p>
<p>&ndash; traefik.port=8080</p>
<p>networks:</p>
<p>&ndash; internal</p>
<p>&ndash; web</p>
<p>depends_on:</p>
<p>&ndash; mysql</p>
<p>&nbsp;</p>
<p>فایل را ذخیره کرده و از ویرایشگر متن خارج شوید.</p>
<p>سپس ، مقادیر را برای پوسته خود برای متغیرهای WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD قبل از شروع کانتینرها خود تنظیم کنید:</p>
<ul>
<li>$ export WORDPRESS_DB_PASSWORD=secure_database_password</li>
<li></li>
<li>$ export MYSQL_ROOT_PASSWORD=secure_database_password</li>
</ul>
<p>&nbsp;</p>
<p>SECURE_database_password &nbsp;را با گذرواژه پایگاه داده مورد نظر خود جایگزین کنید. فراموش نکنید که برای هر دو WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD از رمز عبور یکسانی استفاده کنید.</p>
<p>با تنظیم این متغیرها ، کانتینرها را با استفاده از docker-compose اجرا کنید:</p>
<ul>
<li>$ docker-compose up -d</li>
<li></li>
</ul>
<p>اکنون نگاهی دوباره به داشبورد مدیریت Traefik بیندازید. خواهید دید که اکنون یک backend&nbsp; و &nbsp;frontend برای دو&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;وجود دارد:</p>
<p>به blog.your_domain خود بروید. به یک اتصال TLS هدایت خواهید شد و اکنون می توانید تنظیمات WordPress را انجام دهید:</p>
<p>اکنون با مراجعه به db-admin.your_domain در مرورگر خود ، به Adminer دسترسی پیدا کنید و your_domain را دوباره با دامنه خود جایگزین کنید. کانتینر mysql در معرض دنیای خارج نیست ، اما کانتینر adminer&nbsp; از طریق شبکه داخلی Docker &nbsp;که با استفاده از نام کانتینر mysql به عنوان نام هاست به آن استفاده میکنند ، دسترسی دارد.</p>
<p>در صفحه ورود به سیستم Adminer ، منوی کشویی System را روی MySQL تنظیم کنید. حالا mysql را برای&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرورمجازی</a>&nbsp;وارد کنید ، root &nbsp;را برای نام کاربری وارد کنید و مقداری را که برای MYSQL_ROOT_PASSWORD برای رمز عبور تعیین کرده اید وارد کنید.&nbsp;<strong>Database</strong>&nbsp; را خالی بگذارید. اکنون&nbsp;<strong>Login</strong>&nbsp;را فشار دهید.</p>
<p>پس از ورود به سیستم ، رابط کاربری Adminer را مشاهده خواهید کرد:</p>
<p>هر دو سایت اکنون کار می کنند و شما می توانید از داشبورد موجود در monitor.your_domain استفاده کنید تا برنامه های خود را تحت نظر داشته باشید.</p>
<p><strong>نتیجه</strong></p>
<p>در این آموزش ، Traefik را به درخواست پروکسی از برنامه های دیگر در کانتینرهای Docker پیکربندی کرده اید.</p>
<p>پیکربندی اعلانی Traefik در سطح کانتینر برنامه ، پیکربندی سرویس های بیشتر را آسان می کند و هنگام افزودن برنامه های جدید به ترافیک پروکسی ، نیازی به راه اندازی مجدد کانتینر traefik نیست زیرا Traefik بلافاصله از طریق فایل سوکت Docker که در حال کنترل است، متوجه تغییر می شود.</p>
<p>برای کسب اطلاعات بیشتر در مورد آنچه می توانید با Traefik انجام دهید ، به مطالب رسمی Traefik مراجعه کنید.</p>
<p><a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خریدvps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-england/">سرور مجازی انگلیس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-germany/">سرور مجازی آلمان</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-canada/">سرور مجازی کانادا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps خرید</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">سرور مجازی فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی ارزان هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید vps هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">خرید vps فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">تست vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">سرور مجازی تست</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور مجازی ویندوز</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">ارزانترین vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps ارزان</a>&nbsp;&ndash;&nbsp;</p>]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-08T13:19:43+04:30</pubDate>
	</item>
	<item>
		<title><![CDATA[نحوه نصب و ایمن سازی Redis در Centos7]]></title>
		<description><![CDATA[<p>Redis &nbsp;یک فروشگاه ساختار داده منبع باز با حافظه داخلی است که به دلیل انعطاف پذیری ، عملکرد و پشتیبانی گسترده زبانی شناخته شده است.</p>
<p>Redis برای استفاده کلاینت های مورد اعتماد در یک محیط قابل اعتماد طراحی شده است و از نظر امنیتی ویژگی های قدرتمندی ندارد. با این حال ، Redis چند ویژگی امنیتی دارد که شامل یک پسورد رمزگذاری نشده و دستور تغییر نام و غیرفعال کردن است. این آموزش دستورالعمل هایی در مورد چگونگی پیکربندی این ویژگی های امنیتی را ارائه می دهد ، همچنین چند تنظیمات دیگر را نیز شامل می شود که می تواند باعث افزایش امنیت نصب مستقل Redis در CentOS 7 شود.</p>
<p>توجه داشته باشید که این راهنما به موقعیت هایی که&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Redis و برنامه های کلاینت در هاست های مختلف یا در مراکز داده های مختلف هستند ، نمی پردازد. نصب هایی که ترافیک Redis مجبور است از یک شبکه ناایمن یا غیر قابل اعتماد عبور کند ، به مجموعه دیگری از تنظیمات ، مانند راه اندازی یک پروکسی SSL یا VPN بین دستگاه های Redis نیاز دارد.</p>
<p><strong>پیش نیازها</strong></p>
<p>برای تکمیل این راهنما ، به یک&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Centos7 که با دنبال کردن راهنمای راه اندازی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;اولیه ما تنظیم شده نیاز دارید.</p>
<p>یک فایروال نصب و پیکربندی شده، به روز و شامل مرحله Turning on the Firewall.</p>
<p>با انجام این پیش نیاز ها آماده نصب Redis و اجرای برخی کارهای پیکربندی اولیه خواهیم بود.</p>
<p><strong>مرحله 1 &ndash; نصب&nbsp;</strong><strong>Redis</strong></p>
<p>قبل از نصب Redis ، ابتدا باید بسته های اضافی برای منبع Enterprise Linux&nbsp; (EPEL) را به لیست بسته های&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;اضافه کنیم. EPEL یک مخزن بسته است که شامل تعدادی بسته نرم افزاری اضافی منبع باز است که بیشتر آنها توسط پروژه Fedora نگهداری می شوند.</p>
<p>ما می توانیم EPEL را با استفاده از yum نصب کنیم:</p>
<ul>
<li>$ sudo yum install epel-release</li>
<li></li>
</ul>
<p>پس از پایان نصب EPEL ، می توانید Redis را نصب کنید ، دوباره با استفاده از yum:</p>
<ul>
<li>$ sudo yum install redis -y</li>
<li></li>
</ul>
<p>انجام این کار ممکن است چند دقیقه طول بکشد. پس از اتمام نصب ، سرویس Redis را شروع کنید:</p>
<ul>
<li>$ sudo systemctl start redis.service</li>
</ul>
<p>&nbsp;</p>
<p>اگر می خواهید Redis از بوت شروع شود ، می توانید آن را با دستور enable&nbsp; فعال کنید:</p>
<ul>
<li>$ sudo systemctl enable redis</li>
<li></li>
</ul>
<p>با اجرای موارد زیر می توانید وضعیت Redis را بررسی کنید:</p>
<ul>
<li>$ sudo systemctl status redis.service</li>
<li></li>
</ul>
<p>Output</p>
<ul>
<li>redis.service &ndash; Redis persistent key-value database</li>
</ul>
<p>Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)</p>
<p>Drop-In: /etc/systemd/system/redis.service.d</p>
<p>└─limit.conf</p>
<p>Active: active (running) since Thu 2018-03-01 15:50:38 UTC; 7s ago</p>
<p>Main PID: 3962 (redis-server)</p>
<p>CGroup: /system.slice/redis.service</p>
<p>└─3962 /usr/bin/redis-server 127.0.0.1:6379</p>
<p>&nbsp;</p>
<p>هنگامی که تأیید کردید Redis در حال اجرا است ، با این دستور ستاپ را امتحان کنید:</p>
<ul>
<li>$ redis-cli ping</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>این باید PONG را به عنوان پاسخ چاپ کند. اگر این گونه باشد ، به این معنی است که شما اکنون Redis را در&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود اجرا کرده و ما می توانیم پیکربندی آن را برای افزایش امنیت آن آغاز کنیم.</p>
<p><strong>مرحله 2 &ndash; اتصال&nbsp;</strong><strong>Redis</strong><strong>&nbsp;و ایمن سازی آن با فایروال</strong></p>
<p>یک روش موثر برای محافظت از Redis ، ایمن سازی سروری است که روی آن اجرا میشود. شما می توانید این کار را با اطمینان حاصل کردن از این که Redis فقط به localhost یا یک آدرس IP خصوصی متصل است و اینکه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;دارای فایروال و به روز است این کار را انجام دهید.</p>
<p>با این حال ، اگر با استفاده از این آموزش خوشه Redis را راه اندازی کرده اید ، پس فایل پیکربندی را به روز کرده اید تا از هرجایی اتصال برقرار شود ، این امنیت به اندازه اتصال به localhost یا IP خصوصی نیست.</p>
<p>برای رفع این مشکل ، فایل پیکربندی Redis را برای ویرایش باز کنید:</p>
<ul>
<li>$ sudo vi /etc/redis.conf</li>
<li></li>
</ul>
<p>ابتدا خطی که با BIND شروع میشود پیدا کنید و مطمئن شوید که خارج شده است:</p>
<p>/etc/redis.conf</p>
<p>bind 127.0.0.1</p>
<p>&nbsp;</p>
<p>اگر لازم است Redis را به آدرس IP دیگری متصل کنید (مانند مواردی که از یک میزبان جداگانه به Redis دسترسی پیدا خواهید کرد) به شما توصیه می کنیم آن را به یک آدرس IP خصوصی متصل کنید. اتصال به یک آدرس IP عمومی ، قرار گرفتن در معرض رابط Redis شما را در برابر طرف های خارجی افزایش می دهد.</p>
<p>/etc/redis.conf</p>
<p>bind your_private_ip</p>
<p>&nbsp;</p>
<p>اگر پیش نیازها را دنبال کرده و firewalld را بر روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود نصب کرده اید و قصد ندارید از میزبان دیگری به Redis متصل شوید ، دیگر نیازی به افزودن قوانین فایروال اضافی برای Redis ندارید. از این گذشته ، هرگونه ترافیک ورودی به طور پیش فرض کاهش می یابد مگر اینکه صریحاً توسط قوانین فایروال اجازه داده شود. از آنجا که نصب مستقل پیش فرض&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Redis فقط به رابط loopback (127.0.0.1 یا localhost) گوش می کند ، دیگر نباید نگرانی برای ترافیک ورودی در پورت پیش فرض آن وجود داشته باشد.</p>
<p>اگر می خواهید از میزبان دیگری به Redis دسترسی پیدا کنید ، باید با استفاده از دستور firewall-cmd تغییراتی در پیکربندی firewalld خود ایجاد کنید. باز هم ، فقط باید با استفاده از آدرس IP خصوصی هاست ها ، به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Redis خود اجازه دسترسی دهید تا تعداد هاست هایی که سرویس شما در معرض آنهاست را محدود کنید.</p>
<p>برای شروع ، یک منطقه اختصاصی Redis را به رویکرد فایروال خود اضافه کنید:</p>
<ul>
<li>$ sudo firewall-cmd &ndash;permanent &ndash;new-zone=redis</li>
<li></li>
</ul>
<p>سپس مشخص کنید کدام پورت را می خواهید باز کنید. Redis به طور پیش فرض از پورت6397 استفاده می کند:</p>
<ul>
<li>$ sudo firewall-cmd &ndash;permanent &ndash;zone=redis &ndash;add-port=6379/tcp</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>سپس ، آدرسهای IP خصوصی را که باید از طریق فایروال عبور کرده و به Redis دسترسی پیدا کنند ، مشخص کنید:</p>
<ul>
<li>$ sudo firewall-cmd &ndash;permanent &ndash;zone=redis &ndash;add-source=client_server_private_IP</li>
<li></li>
</ul>
<p>پس از اجرای این دستورات ، فایروال را دانلود کنید تا قوانین جدید را اجرا کنید:</p>
<ul>
<li>$ sudo firewall-cmd &ndash;reload</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>تحت این پیکربندی ، هنگامی که فایروال بسته ای را از آدرس IP کلاینت شما مشاهده می کند ، قوانینی را در منطقه اختصاصی Redis برای آن اتصال اعمال می کند. سایر اتصالات توسط منطقه عمومی پیش فرض پردازش می شوند. سرویس های موجود در منطقه پیش فرض برای هر اتصال اعمال می شوند ، نه فقط برای سرویس هایی که به وضوح مطابقت ندارند ، بنابراین نیازی نیست که سرویس های دیگری (به عنوان مثال SSH) را به منطقه Redis اضافه کنید زیرا این قوانین به طور خودکار برای آن اتصال اعمال می شوند.</p>
<p>اگر تصمیم به ایجاد فایروال با استفاده از Iptables کرده اید ، لازم است مجوزهای ثانویه خود را به پورت Redis با دستورات زیر دسترسی دهید:</p>
<ul>
<li>$ sudo iptables -A INPUT -i lo -j ACCEPT</li>
<li></li>
<li>$ sudo iptables -A INPUT -m conntrack &ndash;ctstate ESTABLISHED,RELATED -j ACCEPT</li>
<li></li>
<li>$ sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 &ndash;dport 6397 -m conntrack &ndash;ctstate NEW,ESTABLISHED -j ACCEPT</li>
<li></li>
<li>$ sudo iptables -P INPUT DROP</li>
</ul>
<p>&nbsp;</p>
<p>اطمینان حاصل کنید که قوانین فایروال Iptables خود را با استفاده از مکانیزم ارائه شده توسط توزیع ذخیره کنید. با نگاهی به راهنمای ملزومات Iptables می توانید درباره Iptables بیشتر بیاموزید.</p>
<p>به خاطر داشته باشید که استفاده از هر دو ابزار فایروال کار می کند. نکته مهم این است که فایروال در حال کار است و به گونه ای انجام می شود که افراد ناشناس نتوانند به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;شما دسترسی پیدا کنند. در مرحله بعدی ، Redis را پیکربندی می کنیم تا فقط با یک رمز عبور قوی قابل دسترسی باشد.</p>
<p><strong>مرحله 3 &ndash; پیکربندی رمز عبور&nbsp;</strong><strong>Redis</strong></p>
<p>اگر Redis را با استفاده از آموزش نحوه پیکربندی خوشه Redis &nbsp;در CentOS 7 نصب کرده اید ، باید یک رمز عبور برای آن پیکربندی کرده باشید. بنا به صلاحدید خود ، می توانید با دنبال کردن این بخش یک رمز عبور ایمن تر ایجاد کنید. اگر هنوز رمز عبوری تنظیم نکرده اید ، دستورالعمل های موجود در این بخش نحوه تنظیم رمز&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;پایگاه داده را نشان می دهد.</p>
<p>پیکربندی رمز عبور Redis یکی از دو ویژگی امنیتی داخلی خود را ایجاد می کند &ndash; دستور auth ، که به تایید اعتبار کلاینت ها برای دسترسی به پایگاه داده نیاز دارد. رمز عبور مستقیماً در فایل پیکربندی Redis ، /etc/redis/redis.conf &nbsp;پیکربندی شده است ، بنابراین دوباره آن فایل را با ویرایشگر مورد نظر خود باز کنید:</p>
<p>$ sudo vi /etc/redis.conf</p>
<p>به بخش SECURITY بروید و به دنبال دستورالعملی باشید که وظیفه خواندن را دارد:</p>
<p>/etc/redis.conf</p>
<p># requirepass foobared</p>
<p>&nbsp;</p>
<p>با حذف # آن را لغو کنید و foobared&nbsp; را به یک رمزعبور امن تغییر دهید. به جای اینکه خودتان یک رمز عبور بسازید ، ممکن است از ابزاری مانند apg یا pwgen برای تولید آن استفاده کنید. اگر نمی خواهید یک برنامه فقط برای تولید گذرواژه نصب کنید ، می توانید از دستور زیر استفاده کنید.</p>
<p>&nbsp;</p>
<p>توجه داشته باشید که وارد کردن این دستور به صورت نوشته شده هر بار رمز عبور یکسانی را ایجاد می کند. برای ایجاد رمز عبور متفاوت از رمز عبوری که با این کار ایجاد می شود ، کلمه را در صورت نقل قول به هر کلمه یا عبارت دیگری تغییر دهید.</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ &nbsp;echo &ldquo;digital-ocean&rdquo; | sha256sum</p>
<p>&nbsp;</p>
<p>اگرچه رمز ورود ایجاد شده قابل تلفظ نیست ، اما یک رمز بسیار قوی و طولانی است که دقیقاً همان نوع رمز مورد نیاز Redis است. پس از کپی و پیست کردن خروجی آن دستور به عنوان مقدار جدید برای Requirese ، به این صورت خواهد بود:</p>
<p>/etc/redis.conf</p>
<p>requirepass password_copied_from_output</p>
<p>&nbsp;</p>
<p>اگر رمز عبور کوتاه تری را ترجیح می دهید ، به جای آن از خروجی دستور زیر استفاده کنید. دوباره ، کلمه را به صورت نقل قول تغییر دهید تا رمز عبور مشابه این رمز ایجاد نشود:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ echo &ldquo;digital-ocean&rdquo; | sha1sum&middot;</p>
<p>پس از تنظیم پسورد فایل را ذخیره کنید و ببندید و Redis را ریستارت کنید:</p>
<ul>
<li>$ sudo systemctl restart redis.service</li>
<li></li>
</ul>
<p>سپس برای بررسی کارکرد گذرواژه، به خط فرمان Redis دسترسی پیدا کنید:</p>
<ul>
<li>$ redis-cli</li>
<li></li>
</ul>
<p>در زیر توالی دستورات مورد استفاده برای تست رمز Redis وجود دارد. دستور اول سعی می کند قبل از تأیید اعتبار ، کلید را روی یک مقدار تنظیم کند:</p>
<ul>
<li>0.0.1:6379> set key1 10</li>
<li></li>
</ul>
<p>این رمز کار نخواهد کرد زیرا شما تأیید اعتبار نکردید ، بنابراین Redis خطایی را برمی گرداند:</p>
<p>Output(error) NOAUTH Authentication required.</p>
<p>&nbsp;</p>
<p>دستور بعدی با گذرواژه مشخص شده در فایل پیکربندی Redis تأیید اعتبار می کند:</p>
<ul>
<li>0.0.1:6379> auth your_redis_password</li>
<li></li>
</ul>
<p>Redis تایید می کند:</p>
<p>OutputOK</p>
<p>پس از آن ، اجرای دوباره فرمان قبلی موفق خواهد بود:</p>
<ul>
<li>0.0.1:6379> set key1 10</li>
<li></li>
</ul>
<p>Output</p>
<p>OK</p>
<p>&nbsp;</p>
<p>دستور get key1 مقدار کلید جدید را از Redis جستجو میکند.</p>
<ul>
<li>0.0.1:6379> get key1</li>
<li></li>
</ul>
<p>Output</p>
<p>&ldquo;10&rdquo;</p>
<p>&nbsp;</p>
<p>با دستور آخر یعنی redis-cli میتوانید خارج شوید:</p>
<ul>
<li>0.0.1:6379> quit</li>
<li></li>
</ul>
<p>اکنون دسترسی به نصب Redis برای کاربران غیرمجاز بسیار دشوار است. البته توجه داشته باشید که اگر از راه دور به Redis متصل شوید ، بدون SSL یا VPN پسورد رمزگذاری نشده برای اشخاص خارجی قابل مشاهده خواهد بود.</p>
<p>در مرحله بعدی ، برای محافظت بیشتر از Redis در برابر حملات مخرب ، به تغییر دستورات Redis خواهیم پرداخت.</p>
<p><strong>مرحله 5 &ndash; تغییر نام دستورات خطرناک</strong></p>
<p>ویژگی امنیتی دیگر که در Redis قرار داده شده ، تغییر نام یا غیرفعال کردن کامل فرامین خاصی است که خطرناک به نظر می رسند.هنگامی که این دستورات توسط کاربران غیرمجاز اجرا می شوند ، می توانند برای پیکربندی ، از بین بردن یا پاک کردن داده های شما استفاده شوند. برخی از دستوراتی که خطرناک به حساب می آیند عبارتند از</p>
<ul>
<li>FLUSHDB</li>
<li>FLUSHALL</li>
<li>KEYS</li>
<li>PEXPIRE</li>
<li>DEL</li>
<li>CONFIG</li>
<li>SHUTDOWN</li>
<li>BGREWRITEAOF</li>
<li>BGSAVE</li>
<li>SAVE</li>
<li>SPOP</li>
<li>SREM&nbsp;RENAME&nbsp;DEBUG</li>
</ul>
<p>&nbsp;</p>
<p>این یک لیست جامع نیست ، اما تغییر نام یا غیرفعال کردن کلیه دستورات موجود در آن لیست ، نقطه شروع خوبی برای افزایش امنیت&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Redis شما است.</p>
<p>این که آیا شما باید یک فرمان را غیرفعال کنید یا تغییر نام دهید ، به نیازهای خاص شما یا نیازهای سایت شما بستگی دارد. اگر می دانید هرگز از دستوری که مورد سوءاستفاده قرار می گیرد استفاده نمی کنید ، می توانید آن را غیرفعال کنید. در غیر این صورت ، نام آن مفید را تغییر دهید.</p>
<p>مانند رمز عبور احراز هویت ، تغییر نام یا غیرفعال کردن دستورات در قسمت SECURITY فایل /etc/redis.conf پیکربندی شده است. برای فعال یا غیرفعال کردن دستورات Redis ، یک بار دیگر فایل پیکربندی را برای ویرایش باز کنید:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo vi&nbsp; /etc/redis.conf</p>
<p>هشدار: این ها چند نمونه مثال است. فقط باید غیرفعال کردن یا تغییر نام دستوراتی که منطقی میباشد را انتخاب کنید. می توانید لیست کامل دستورات را برای خود مرور کنید و نحوه استفاده آنها در redis.io/commands &nbsp;را تعیین کنید.</p>
<p>برای غیرفعال کردن یک دستور ، کافی است آن را به یک رشته خالی تغییر دهید ، همانطور که در زیر نشان داده شده:</p>
<p>/etc/redis.conf</p>
<p># It is also possible to completely kill a command by renaming it into</p>
<p># an empty string:</p>
<p>#</p>
<p>rename-command FLUSHDB &ldquo;&rdquo;</p>
<p>rename-command FLUSHALL &ldquo;&rdquo;</p>
<p>rename-command DEBUG &ldquo;&rdquo;</p>
<p>&nbsp;</p>
<p>برای تغییرنام یک فرمان، نام دیگری مانند زیر به آن بدهید. حدس زدن فرمان های تغییر نام یافته باید برای دیگران دشوار باشد اما به راحتی بتوانید آن ها را به خاطر بسپارید.</p>
<p>/etc/redis.conf</p>
<p>rename-command CONFIG &ldquo;&rdquo;</p>
<p>rename-command SHUTDOWN SHUTDOWN_MENOT</p>
<p>rename-command CONFIG ASC12_CONFIG</p>
<p>&nbsp;</p>
<p>تغییرات خود را ذخیره کرده و فایل را ببندید و سپس با راه اندازی مجدد Redis ، تغییر را اعمال کنید:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo systemctl restart redis.service</p>
<p>برای آزمایش دستور جدید ، وارد خط فرمان Redis شوید:</p>
<ul>
<li>$ redis-cli</li>
<li></li>
</ul>
<p>سپس ، تأیید اعتبار کنید:</p>
<ul>
<li>0.0.1:6379> auth your_redis_password</li>
<li></li>
</ul>
<p>Output</p>
<p>OK</p>
<p>فرض کنیم که شما دستور CONFIG را مانند مثال قبل به &nbsp;ASC12_CONFIGتغییر نام دادید . ابتدا سعی کنید از دستور اصلی CONFIG &nbsp;استفاده کنید. باید با شکست مواجه شود ، زیرا آن را تغییر نام داده اید:</p>
<ul>
<li>0.0.1:6379> config get requirepass</li>
<li></li>
</ul>
<p>Output</p>
<p>(error) ERR unknown command &lsquo;config&rsquo;</p>
<p>&nbsp;</p>
<p>با این وجود فراخوانی فرمان تغییر نام داده شده موفقیت آمیز خواهد بود. به کوچک و بزرگ بودن کاراکترها حساس نیست:</p>
<ul>
<li>0.0.1:6379> asc12_config get requirepass</li>
<li></li>
</ul>
<p>Output</p>
<p>1) &ldquo;requirepass&rdquo;</p>
<p>2) &ldquo;your_redis_password&rdquo;</p>
<p>&nbsp;</p>
<p>درنهایت ، می توانید از redis-cli خارج شوید:</p>
<ul>
<li>0.0.1:6379> exit</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>توجه داشته باشید که اگر قبلاً از خط فرمان Redis استفاده کرده اید و دوباره Redis را ریستارت کرده اید ، باید مجددا تأیید اعتبار کنید. در غیر این صورت ، اگر یک دستور تایپ کنید ، این خطا را دریافت خواهید کرد:</p>
<p>OutputNOAUTH Authentication required.</p>
<p>&nbsp;</p>
<p>به خاطر تغییر نام دستورات ، در پایان بخش SECURITY در /etc/redis/redis.conf یک عبارت هشدار وجود دارد:</p>
<p>/etc/redis.conf</p>
<p>. . .&nbsp;# Please note that changing the name of commands that are logged into the# AOF file or transmitted to slaves may cause problems.&nbsp;. . .</p>
<p>این بدان معناست که اگر دستور تغییر نام یافته در فایل AOF نباشد ، یا اگر موجود باشد اما فایل AOF به slaves ارسال نشده باشد ، دیگر مشکلی وجود نخواهد داشت.بنابراین ، هنگام تغییر نام دستورات ، این را به خاطر داشته باشید. بهترین زمان برای تغییر نام یک فرمان زمانی است که شما از ماندگاری AOF استفاده نمی کنید ، یا درست بعد از نصب ، یعنی قبل از استقرار برنامه مبتنی بر Redis.</p>
<p>هنگامی که از AOF استفاده می کنید و با یک نصب master slave سرو کار دارید ، این پاسخ را از صفحه صدور GitHub پروژه در نظر بگیرید.</p>
<p>بنابراین ، بهترین روش برای تغییر نام در مواردی از این دست ، این است که مطمئن شوید دستورات تغییر نام یافته به تمام مثال های نصب های master-slave اعمال میشود.</p>
<p><strong>مرحله 5 &ndash; تنظیم مالکیت دایرکتوری داده و مجوزهای پرونده</strong></p>
<p>در این مرحله ، ما تغییرات مالکیت و مجوزهایی را که می توانید برای بهبود نمایه امنیتی نصب Redis خود ایجاد کنید ، در نظر خواهیم گرفت. این شامل اطمینان از این است که فقط کاربری که باید به Redis دسترسی پیدا کند اجازه خواندن اطلاعات آن را دارد. این کاربر به طور پیش فرض ، کاربر redis است.</p>
<p>این را می توانید با grep-ing برای دیرکتوری داده Redis در لیست طولانی دیرکتوری اصلی خود تأیید کنید. دستور و خروجی آن در زیر آورده شده است.</p>
<ul>
<li>$ ls -l /var/lib | grep redis</li>
<li></li>
</ul>
<p>Output</p>
<p>drwxr-xr-x 2 redis&nbsp;&nbsp; redis&nbsp;&nbsp; 4096 Aug&nbsp; 6 09:32 redis</p>
<p>&nbsp;</p>
<p>می بینید که دایرکتوری داده Redis متعلق به کاربر redis است و دسترسی ثانویه به گروه redis اعطا می شود. این تنظیم مالکیت ایمن است ، اما مجوزهای پوشه (که روی 755 تنظیم شده است) اینگونه نیست. برای اطمینان از دسترسی انحصاری کاربر Redis به پوشه و محتویات آن ، تنظیمات مجوزها را به 770 تغییر دهید:</p>
<ul>
<li>$ sudo chmod 770 /var/lib/redis</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>مجوز دیگری که باید تغییر دهید ، فایل پیکربندی Redis است. به طور پیش فرض ، دارای مجوز فایل 644 است و توسط root متعلق به مالکیت ثانویه توسط گروه root است:</p>
<ul>
<li>$ ls -l /etc/redis.conf</li>
<li></li>
</ul>
<p>Output</p>
<p>-rw-r&ndash;r&ndash; 1 root root 30176 Jan 14&nbsp; 2014 /etc/redis.conf</p>
<p>&nbsp;</p>
<p>این مجوز (644) به صورت سراسر جهانی قابل خواندن است. این یک مشکل امنیتی است زیرا فایل پیکربندی حاوی پسورد رمزگذاری نشده ای است که در مرحله 4 پیکربندی کرده اید ، به این معنی که ما باید مالکیت و مجوزهای فایل پیکربندی را تغییر دهیم. در حالت ایده آل ، این مالکیت باید توسط کاربر redis و با مالکیت ثانویه توسط گروه redis باشد. برای انجام این کار ، دستور زیر را اجرا کنید:</p>
<ul>
<li>$ sudo chown redis:redis /etc/redis.conf</li>
<li></li>
</ul>
<p>سپس مجوزها را تغییر دهید تا فقط صاحب فایل بتواند آن را بخواند و یا بنویسد:</p>
<ul>
<li>$ sudo chmod 600 /etc/redis.conf</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>شما می توانید مالکیت و مجوزهای جدید را با استفاده از موارد زیر تأیید کنید:</p>
<ul>
<li>$ ls -l /etc/redis.conf</li>
<li></li>
</ul>
<p>Output</p>
<p>total 40</p>
<p>-rw&mdash;&mdash;- 1 redis redis 29716 Sep 22 18:32 /etc/redis.conf</p>
<p>&nbsp;</p>
<p>در آخر ، Redis را دوباره راه اندازی کنید:</p>
<ul>
<li>$ sudo systemctl restart redis.service</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>تبریک ، نصب Redis شما اکنون ایمن تر شده است!</p>
<p><strong>نتیجه</strong></p>
<p>به خاطر داشته باشید که پس از ورود شخصی به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;شما ، دور زدن ویژگی های امنیتی ویژه Redis که ما در آن قرار داده ایم بسیار آسان است. بنابراین ، مهمترین ویژگی امنیتی در&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Redis ، فایروال شماست (که در صورت پیروی از آموزش مقدماتی راه اندازی اولیه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور</a>&nbsp;اولیه، آن را پیکربندی کرده اید) ، زیرا این کار پرش از آن حصار امنیتی را برای حمله گران بسیار دشوار می کند.</p>
<p>اگر سعی در برقراری ارتباطات Redis از طریق یک شبکه غیر معتبر دارید ، باید پروکسی SSL را به کار ببرید ، همانطور که توسط توسعه دهندگان Redis در راهنمای رسمی امنیتی Redis توصیه شده است.</p>
<p><a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خریدvps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-england/">سرور مجازی انگلیس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-germany/">سرور مجازی آلمان</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-canada/">سرور مجازی کانادا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps خرید</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">سرور مجازی فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی ارزان هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید vps هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">خرید vps فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">تست vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">سرور مجازی تست</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور مجازی ویندوز</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">ارزانترین vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps ارزان</a>&nbsp;&ndash;&nbsp;</p>]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-07T12:45:19+04:30</pubDate>
	</item>
	<item>
		<title><![CDATA[چگونه می توان محیط JupyterLab را در اوبونتو 18.04 تنظیم کرد]]></title>
		<description><![CDATA[<p>JupyterLab &nbsp;یک رابط کاربری کاملاً غنی از ویژگی های مختلف است که انجام وظایف را به خصوص در زمینه علوم داده ها و هوش مصنوعی برای کاربران آسان می کند. محیط های JupyterLab طراحی مجدد Jupyter Notebook را با محوریت بهره وری ارائه می دهد. این برنامه ابزاری مانند یک نمایشگر HTML داخلی و بیننده CSV را به همراه ویژگی هایی ارائه می دهد که چندین ویژگی مجزا از Jupyter Notebook را در همان صفحه جمع می کند.</p>
<p>در این آموزش ، JupyterLab &nbsp;را روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Ubuntu 18.04 خود نصب و تنظیم می کنید. همچنین می توانید سرور خود را پیکربندی کنید تا بتواند از راه دور با هر نامی از مرورگر وب به طور ایمن و با استفاده از یک نام دامنه به نمونه &nbsp;JupyterLab متصل شود.</p>
<p><strong>پیش نیازها</strong></p>
<p>برای تکمیل این آموزش ، به موارد زیر نیاز دارید:</p>
<ul>
<li><a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Ubuntu 18.04 با یک حساب کاربری غیر ریشه با امتیازات sudo با استفاده از راهنمای ستاپ اولیه سرور.</li>
<li>نصب توزیع پایتون Anaconda روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>تان. می توانید از آموزش نحوه نصب &nbsp;توزیع پایتون Anaconda &nbsp;در اوبونتو 18.04 استفاده کنید.</li>
<li>یک نام دامنه یا زیر دامنه ثبت شده که در آن به ویرایش رکورد DNS دسترسی دارید. در سراسر این آموزش از your_domain استفاده خواهد کرد. می توانید دامنه ها را در Namecheap خریداری کنید ، یک دامنه رایگان در Freenom &nbsp;دریافت کنید ، یا یک دامنه جدید را با هر نوع ثبت دلخواه خود ثبت کنید.</li>
<li>سوابق DNS زیر برای دامنه شما تنظیم شده باشد:</li>
</ul>
<p>o یک رکورد A با your_domain که آدرس IP عمومی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;شما را نشان می دهد.</p>
<p>O رکورد A با www.your_domain که آدرس IP عمومی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;شما را نشان می دهد. مقاله نحوه ایجاد ، ویرایش و حذف اسناد &nbsp;رکوردهای DNS &nbsp;می تواند در تنظیم این رکوردها به شما کمک کند.</p>
<p><strong>مرحله 1 &ndash; تنظیم گذرواژه</strong></p>
<p>در این مرحله یک رمز عبور را روی نصب JupyterLab خود تنظیم خواهید کرد. داشتن گذرواژه مهم است زیرا نمونه شما در دسترس عموم خواهد بود.</p>
<p>ابتدا مطمئن شوید که محیط Anaconda شما فعال شده است. طبق آموزش پیش نیاز محیط، base نامیده می شود.</p>
<p>برای فعال کردن محیط ، از دستور زیر استفاده کنید:</p>
<ul>
<li>$ conda activate base</li>
<li></li>
</ul>
<p>اعلان شما در ترمینال تغییر خواهد کرد تا پایه محیط پیش فرض Anaconda &nbsp;را منعکس کند:</p>
<p>(base) sammy@your_server:~$</p>
<p>کلیه دستورات آینده در این آموزش در محیط baseاجرا می شود.</p>
<p>با فعال شدن محیط Anaconda ، می توانید یک رمز ورود برای JupyterLab را در&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود تنظیم کنید.</p>
<p>ابتدا ، اجازه دهید یک فایلbase پیکربندی برای &nbsp;Jupyter ایجاد کنیم:</p>
<ul>
<li>$ jupyter notebook &ndash;generate-config</li>
<li></li>
</ul>
<p>خروجی زیر را دریافت خواهید کرد:</p>
<p>OutputWriting default config to: /home/sammy/.jupyter/jupyter_notebook_config.py</p>
<p>&nbsp;</p>
<p>هم &nbsp;JupyterLab و Jupyter Notebookیک فایل پیکربندی مشترک را دارند.</p>
<ul>
<li>$ jupyter notebook password</li>
<li></li>
</ul>
<p>اکنون ، از دستور زیر برای تنظیم گذرواژه برای دسترسی به نمونه &nbsp;JupyterLab خود از راه دور استفاده کنید:</p>
<p>OutputEnter password:Verify password:[NotebookPasswordApp] Wrote hashed password to /home/sammy/.jupyter/jupyter_notebook_config.json</p>
<p>&nbsp;</p>
<p>Jupyter &nbsp;به شما اعلانی نشان می خواهد که رمز عبور مورد نظر خود را ارائه دهید:</p>
<p>Jupyter &nbsp;رمز عبور را با فرمت hashed در /home/sammy/.jupyter/jupyter_notebook_config.json ذخیره می کند. در آینده به این مقدار نیاز خواهید داشت.</p>
<p>در آخر ، برای مشاهده گذرواژه hashed ، از دستور cat در فایل تولید شده توسط دستور قبلی استفاده کنید:</p>
<ul>
<li>$ cat /home/sammy/.jupyter/jupyter_notebook_config.json</li>
<li></li>
</ul>
<p>خروجی مشابه با موارد زیر را دریافت خواهید کرد:</p>
<p>/home/sammy/.jupyter/jupyter_notebook_config.json</p>
<p>{</p>
<p>&ldquo;NotebookApp&rdquo;: {</p>
<p>&ldquo;password&rdquo;: &ldquo;sha1:your_hashed_password&rdquo;</p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
<p>مقدار را در کلید رمز عبور JSON کپی کنید و به طور موقت آن را ذخیره کنید.</p>
<p>برای مثال JupyterLab یک گذرواژه تنظیم کرده اید. در مرحله بعد یک گواهی Let&rsquo;s Encrypt برای&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود ایجاد خواهید کرد.</p>
<p><strong>مرحله 2 &ndash; پیکربندی&nbsp;</strong><strong>Let&rsquo;s Encrypt</strong></p>
<p>در این مرحله ، یک گواهی Let&rsquo;s Encrypt برای دامنه خود ایجاد خواهید کرد. با دسترسی به محیط &nbsp;JupyterLab از مرورگر ، داده های شما را ایمن می کند.</p>
<p>ابتدا Certbot را روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود نصب خواهید کرد. با اضافه کردن مخزن آن به منابع apt شروع کنید:</p>
<ul>
<li>$ sudo add-apt-repository ppa:certbot/certbot</li>
<li></li>
</ul>
<p>پس از اجرای دستور ، از شما خواسته می شود تا ENTER را فشار دهید تا PPA را اضافه کنید:</p>
<p>OutputThis is the PPA for packages prepared by Debian Let&rsquo;s Encrypt Team and backported for Ubuntu.&nbsp;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.</p>
<p>&nbsp;</p>
<p>برای ادامه افزودن PPA ، ENTER &nbsp;را فشار دهید.</p>
<p>پس از پایان اجرای فرمان ، منابع را با استفاده از دستور apt update ریفرش کنید:</p>
<ul>
<li>$ sudo apt update</li>
<li></li>
</ul>
<p>سپس ، Certbot &nbsp;را نصب خواهید کرد:</p>
<ul>
<li>$ sudo apt install certbot</li>
<li></li>
</ul>
<p>قبل از شروع به کار Certbot برای تولید گواهینامه ها برای مثال شما ، اجازه دسترسی به پورت: 80 و پورت: 443&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود را می دهید تا Certbot بتواند از این پورت ها برای تأیید نام دامنه شما استفاده کند. پورت: 80 برای درخواست های http به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;بررسی می شود در حالی که پورت 443 برای درخواست های https استفاده می شود. Certbot ابتدا یک درخواست http را ایجاد می کند و پس از دریافت گواهینامه ها برای&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;شما ، یک درخواست https را ایجاد می کند که از طریق پورت از طریق پورت: 443 برای گوش دادن به پورت 80 پروکسی می شود. با این کار نصب گواه</p>
<p>ینامه ها با موفقیت تأیید خواهد شد.</p>
<p>ابتدا اجازه دسترسی به پورت 80: را بدهید:</p>
<ul>
<li>$ sudo ufw allow 80</li>
<li></li>
</ul>
<p>خروجی زیر را دریافت خواهید کرد:</p>
<p>OutputRule addedRule added (v6)</p>
<p>سپس ، اجازه دسترسی به پورت: 443:</p>
<ul>
<li>$ sudo ufw allow 443</li>
<li></li>
</ul>
<p>Output</p>
<p>Rule added</p>
<p>Rule added (v6)</p>
<p>&nbsp;</p>
<p>در آخر ، Certbot &nbsp;را اجرا کنید تا با استفاده از دستور زیر ، گواهینامه هایی را برای مثال خود تولید کنید:</p>
<ul>
<li>$ sudo certbot certonly &ndash;standalone</li>
<li></li>
</ul>
<p>پرچم standalone&nbsp; ، certbot &nbsp;را برای اجرای یک&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;موقت برای مدت زمان بررسی تأیید می کند.</p>
<p>ایمیل شما را درخواست می کند:</p>
<p>OutputSaving debug log to /var/log/letsencrypt/letsencrypt.logPlugins selected: Authenticator standalone, Installer NoneEnter email address (used for urgent renewal and security notices) (Enter &lsquo;c&rsquo; tocancel): your_email</p>
<p>&nbsp;</p>
<p>یک ایمیل فعال را وارد کنید و ENTER را فشار دهید.</p>
<p>در مرحله بعد ، از شما خواسته خواهد شد تا شرایط سرویس های Certbot و Let&rsquo;s Encrypt t را مرور و تایید کنید. شرایط را مطالعه کنید اگر قبول کردید ، A را تایپ کنید و ENTER را فشار دهید:</p>
<p>Output- &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; -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- &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; -(A)gree/(C)ancel: A</p>
<p>&nbsp;</p>
<p>اکنون از شما خواسته می شود که ایمیل خود را با بنیاد الکترونیکی Frontier به اشتراک بگذارید. پاسخ خود را تایپ کنید و ENTER &nbsp;را فشار دهید:</p>
<p>Output- &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; -Would you be willing to share your email address with the Electronic FrontierFoundation, a founding partner of the Let&rsquo;s Encrypt project and the non-profitorganization that develops Certbot? We&rsquo;d like to send you email about our workencrypting the web, EFF news, campaigns, and ways to support digital freedom.- &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; &ndash; -(Y)es/(N)o: Y/N</p>
<p>&nbsp;</p>
<p>در آخر ، از شما خواسته می شود نام دامنه خود را وارد کنید. نام دامنه خود را بدون هیچ گونه مشخصات پروتکل وارد کنید:</p>
<p>OutputPlease enter in your domain name(s) (comma and/or space separated)&nbsp; (Enter &lsquo;c&rsquo;to cancel): your_domainObtaining a new certificatePerforming the following challenges:http-01 challenge for your_domainWaiting for verification&hellip;Cleaning up challenges&nbsp;IMPORTANT NOTES: &ndash; Congratulations! Your certificate and chain have been saved at:&nbsp;&nbsp; /etc/letsencrypt/live/your_domain/fullchain.pem&nbsp;&nbsp; Your key file has been saved at:&nbsp;&nbsp; /etc/letsencrypt/live/your_domain/privkey.pem&nbsp;&nbsp; Your cert will expire on 2020-09-28. To obtain a new or tweaked&nbsp;&nbsp; version of this certificate in the future, simply run certbot&nbsp;&nbsp; again. To non-interactively renew *all* of your certificates, run&nbsp;&nbsp; &ldquo;certbot renew&rdquo; &ndash; Your account credentials have been saved in your Certbot&nbsp;&nbsp; configuration directory at /etc/letsencrypt. You should make a&nbsp;&nbsp; secure backup of this folder now. This configuration directory will&nbsp;&nbsp; also contain certificates and private keys obtained by Certbot so&nbsp;&nbsp; making regular backups of this folder is ideal. &ndash; If you like Certbot, please consider supporting our work by:&nbsp;&nbsp;&nbsp; Donating to ISRG / Let&rsquo;s Encrypt:&nbsp;&nbsp; https://letsencrypt.org/donate&nbsp;&nbsp; Donating to EFF:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; https://eff.org/donate-le</p>
<p>&nbsp;</p>
<p>Certbot تأیید دامنه را انجام خواهد داد و گواهی و کلید برای دامنه شما را ایجاد میکند و آنها در / etc / letsencrypt / live / your_domain ذخیره میکند.</p>
<p>اکنون که گواهی Let&rsquo;s Encrypt خود را تنظیم کرده اید ، فایل پیکربندی JupyterLab خود را به روز خواهید کرد.</p>
<p><strong>مرحله 3 &ndash; پیکربندی&nbsp;</strong><strong>&nbsp;JupyterLab</strong></p>
<p>در این مرحله ، پیکربندی JupyterLab را ویرایش می کنید تا مطمئن شوید که از گواهی Let&rsquo;s Encrypt که در مرحله 2 ایجاد کرده اید استفاده می کند. همچنین می توانید با استفاده از رمز عبور تنظیم شده در مرحله 1 ، آن را در دسترس قرار دهید.</p>
<p>ابتدا باید پیکربندی JupyterLab را در /home/sammy/.jupyter/jupyter_notebook_config.py ویرایش کنید:</p>
<ul>
<li>$ nano /home/sammy/.jupyter/jupyter_notebook_config.py</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>اکنون به خطی که مقدار c.NotebookApp.certfile را تعریف می کند بروید و به شرح زیر آن را به روز کنید:</p>
<p>/home/sammy/.jupyter/jupyter_notebook_config.py</p>
<p>&hellip;</p>
<p>## The full path to an SSL/TLS certificate file.</p>
<p>c.NotebookApp.certfile = &lsquo;/etc/letsencrypt/live/your_domain/fullchain.pem&rsquo;</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>سپس ، متغیر c.NotebookApp.keyfile را پیدا کنید و آن را مطابق زیر تغییر دهید:</p>
<p>/home/sammy/.jupyter/jupyter_notebook_config.py</p>
<p>&hellip;</p>
<p>## The full path to a private key file for usage with SSL/TLS.</p>
<p>c.NotebookApp.keyfile = &lsquo;/etc/letsencrypt/live/your_domain/privkey.pem&rsquo;</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>c.NotebookApp.certfile و c.NotebookApp.keyfile به گواهی SSLاشاره می کنند که وقتی سعی می کنید از راه دور با استفاده از پروتکل https به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود دسترسی پیدا کنید ، ارائه می شود.</p>
<p>در مرحله بعد ، به خط تعریف متغیر c.NotebookApp.ip بروید و به شرح زیر به روز کنید:</p>
<p>/home/sammy/.jupyter/jupyter_notebook_config.py</p>
<p>&hellip;</p>
<p>## The IP address the notebook server will listen on.</p>
<p>c.NotebookApp.ip = &lsquo;*&rsquo;</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>c.NotebookApp.ip &nbsp;IP &nbsp;هایی را تعریف می کند که می توانند به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;شما دسترسی پیدا کنند. آن را روی * wildcard قرار داده اید تا از هر رایانه ای که برای دسترسی به JupyterLab لازم دارید دسترسی داشته باشید.</p>
<p>سپس ، پیکربندی c.NotebookApp.open_browser را پیدا کنید و به شرح زیر آن را به روز کنید:</p>
<p>/home/sammy/.jupyter/jupyter_notebook_config.py</p>
<p>&hellip;</p>
<p>## Whether to open in a browser after starting. The specific browser used is</p>
<p>#&nbsp; platform dependent and determined by the python standard library `webbrowser`</p>
<p>#&nbsp; module, unless it is overridden using the &ndash;browser (NotebookApp.browser)</p>
<p>#&nbsp; configuration option.</p>
<p>c.NotebookApp.open_browser = False</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>به طور پیش فرض ، JupyterLab &nbsp;سعی می کند به طور خودکار بخش مرورگر را شروع کند. از آنجا که در&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;راه دور مرورگر نداریم ، لازم است آن را خاموش کنید تا از خطاها جلوگیری شود.</p>
<p>در مرحله بعد ، به متغیر c.NotebookApp.password بروید و آن را به شرح زیر تغییر دهید:</p>
<p>/home/sammy/.jupyter/jupyter_notebook_config.py</p>
<p>&hellip;</p>
<p>## Hashed password to use for web authentication.</p>
<p>#</p>
<p>#&nbsp; To generate, type in a python/IPython shell:</p>
<p>#</p>
<p>#&nbsp;&nbsp;&nbsp; from notebook.auth import passwd; passwd()</p>
<p>#</p>
<p>#&nbsp; The string should be of the form type:salt:hashed-password.</p>
<p>c.NotebookApp.password = &lsquo;your_hashed_password&rsquo;</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>JupyterLab از این پیکربندی پسورد رمزگذاری شده برای بررسی رمز عبور وارد شده جهت دسترسی به مرورگر شما استفاده می کند.</p>
<p>در آخر ، بیشتر فایل را بررسی کنید و ورودی c.NotebookApp.port را به روز کنید:</p>
<p>/home/sammy/.jupyter/jupyter_notebook_config.py</p>
<p>&hellip;</p>
<p>## The port the notebook server will listen on.</p>
<p>c.NotebookApp.port = 9000</p>
<p>&hellip;</p>
<p>&nbsp;</p>
<p>c.NotebookApp.port &nbsp;برای دسترسی به زمان اجرای JupyterLab یک پورت ثابت تعیین می کند. به این ترتیب ، می توانید فقط از یک فایروال ufw به یک پورت دسترسی داشته باشید.</p>
<p>پس از اتمام کار ، فایل را ذخیره کنید و خارج شوید.</p>
<p>سرانجام ، اجازه عبور در پورت 9000 را بدهید:</p>
<ul>
<li>$ sudo ufw allow 9000</li>
<li></li>
</ul>
<p>خروجی زیر را دریافت خواهید کرد:</p>
<p>OutputRule addedRule added (v6)</p>
<p>&nbsp;</p>
<p>اکنون که پیکربندی خود را تنظیم کرده اید ، JupyterLab را اجرا خواهید کرد.</p>
<p><strong>مرحله 4 &ndash; اجرای&nbsp;</strong><strong>&nbsp;JupyterLab</strong></p>
<p>در این مرحله ، یک مثال آزمایشی از نمونه JupyterLab را انجام می دهید.</p>
<p>ابتدا دایرکتوری فعلی خود را به دیرکتوری هوم کاربر تغییر دهید:</p>
<ul>
<li>$ cd ~</li>
</ul>
<p>اکنون مجوزهای دسترسی فایل های گواهینامه را اصلاح کنید تا JupyterLab بتواند به آنها دسترسی پیدا کند. مجوزهای پوشه / etc / letsencrypt را به موارد زیر تغییر دهید:</p>
<ul>
<li>$ sudo chmod 750 -R /etc/letsencrypt</li>
<li></li>
<li>$ sudo chown sammy:sammy -R /etc/letsencrypt</li>
</ul>
<p>&nbsp;</p>
<p>سپس ، به مثال JupyterLab خود مراجعه کنید تا از دستور زیر استفاده کنید:</p>
<ul>
<li>jupyter lab</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>این دستور چندین پارامتر پیکربندی را می پذیرد. با این حال ، از آنجا که ما قبلاً این تغییرات را در فایل پیکربندی ایجاد کرده ایم ، نیازی به ارائه صریح آنها در اینجا نداریم. شما می توانید آنها را به عنوان آرگومان هایی برای این دستور برای غلبه بر مقادیر موجود در فایل پیکربندی ارائه دهید.</p>
<p>اکنون می توانید به https: // your_domain: 9000 بروید تا صفحه ورود به سیستم JupyterLab را دریافت کنید.</p>
<p>اگر با گذرواژه ای که برای مرحله دوم 2 برای JupyterLab تنظیم کرده اید وارد شوید ، رابط JupyterLab به شما ارائه می شود.</p>
<p>در آخر ، دوبار CTRL + C را فشار دهید تا&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;JupyterLab متوقف شود.</p>
<p>در مرحله بعد ، یک سرویس سیستمی را تنظیم می کنید تا&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;JupyterLab بطور مداوم در پس زمینه اجرا شود.</p>
<p><strong>مرحله ششم &ndash; تنظیم یک سرویس سیستمی</strong></p>
<p>در این مرحله ، شما یک سرویس سیستمی ایجاد خواهید کرد که به JupyterLab اجازه می دهد تا حتی در هنگام خروج از پنجره ترمینال ، عملکرد خود را ادامه دهد. می توانید اطلاعات بیشتر در مورد خدمات سیستمی و واحدهای موجود در این راهنما را در مورد ملزومات systemd مطالعه کنید.</p>
<p>در ابتدا ، باید با استفاده از دستور زیر ، یک فایل .service ایجاد کنید:</p>
<ul>
<li>$ sudo nano /etc/systemd/system/jupyterlab.service</li>
<li></li>
</ul>
<p>محتوای زیر را به فایل /etc/systemd/system/jupyterlab.service اضافه کنید:</p>
<p>/etc/systemd/system/jupyterlab.service</p>
<p>[Unit]</p>
<p>Description=Jupyter Lab Server</p>
<p>&nbsp;</p>
<p>[Service]</p>
<p>User=sammy</p>
<p>Group=sammy</p>
<p>Type=simple</p>
<p>WorkingDirectory=/home/sammy/</p>
<p>ExecStart=/home/sammy/anaconda3/bin/jupyter-lab &ndash;config=/home/sammy/.jupyter/jupyter_notebook_config.py</p>
<p>StandardOutput=null</p>
<p>Restart=always</p>
<p>RestartSec=10</p>
<p>&nbsp;</p>
<p>[Install]</p>
<p>WantedBy=multi-user.target</p>
<p>&nbsp;</p>
<p>پس از انجام کار ویرایشگر را ذخیره کرده و از آن خارج شوید.</p>
<p>فایل سرویس به صورت خودکار خود را در سیستم به عنوان یک Daemon ثبت می کند. اما به طور پیش فرض اجرا نمی شود.</p>
<p>برای شروع سرویس از دستور systemctl استفاده کنید:</p>
<ul>
<li>$ sudo systemctl start jupyterlab</li>
<li></li>
</ul>
<p>این کار&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;JupyterLab را در پس زمینه شروع می کند. می توانید با استفاده از دستور زیر&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;را بررسی کنید:</p>
<ul>
<li>$ sudo systemctl status jupyterlab</li>
<li></li>
</ul>
<p>خروجی زیر را دریافت خواهید کرد:</p>
<p>Output● jupyterlab.service &ndash; Jupyter Lab Server&nbsp;&nbsp; Loaded: loaded (/etc/systemd/system/jupyterlab.service; disabled; vendor preset: enabled)&nbsp;&nbsp; Active: active (running) since Sun 2020-04-26 20:58:29 UTC; 5s ago Main PID: 5654 (jupyter-lab)&nbsp;&nbsp;&nbsp; Tasks: 1 (limit: 1152)&nbsp;&nbsp; CGroup: /system.slice/jupyterlab.service&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─5654 /home/sammy/anaconda3/bin/python3.7 /home/sammy/anaconda3/bin/jupyter-lab &ndash;config=/home/</p>
<p>&nbsp;</p>
<p>Q را فشار دهید تا از خروجی وضعیت سرویس خارج شوید.</p>
<p>اکنون می توانید به https: // your_domain: 9000 در هر مرورگر مورد نظر خود بروید ، رمز عبوری را که در مرحله 2 تنظیم کرده اید تهیه کنید و به محیط JupyterLab که روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود کار می کند دسترسی پیدا کنید.</p>
<p><strong>مرحله 7 &ndash; پیکربندی تجدید گواهی&nbsp;</strong><strong>Let&rsquo;s Encrypt</strong></p>
<p>در این مرحله آخر ، گواهینامه های SSL خود را که توسط Let&rsquo;s Encrypt تهیه شده است پیکربندی می کنید تا هر 90 روز یکبار به طور خودکار تمدید شود و سپس&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;را مجدداً ریستارت کنید تا گواهی های جدید لود شود.</p>
<p>در حالی که Certbot از تجدید گواهینامه های نصب شما مراقبت می کند ، به طور خودکار&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;مجدداً راه اندازی نمی شود. برای پیکربندی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;برای راه اندازی مجدد با گواهینامه های جدید ، باید یک پیکربندی جدید برای تنظیمات Certbot برای&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود تهیه کنید.</p>
<p>باید فایل /etc/letsencrypt/renewal/your_domain.conf را ویرایش کرده و یک فایل تازه را به انتهای فایل پیکربندی اضافه کنید.</p>
<p>ابتدا از دستور زیر برای باز کردن فایل /etc/letsencrypt/renewal/your_domain.conf در ویرایشگر استفاده کنید:</p>
<ul>
<li>$ sudo nano /etc/letsencrypt/renewal/your_domain.conf</li>
<li></li>
</ul>
<p>سپس در انتهای این فایل موارد زیر را اضافه کنید</p>
<p>/etc/letsencrypt/renewal/your_domain.conf</p>
<p>&hellip;</p>
<p>renew_hook = systemctl reload jupyterlab</p>
<p>&nbsp;</p>
<p>فایل را ذخیره کنید و از آن خارج شوید.</p>
<p>در آخر ، دور جدیدی از روند تجدید را اجرا کنید تا صحت اعتبار فایل پیکربندی شما تایید شود:</p>
<ul>
<li>$ sudo certbot renew &ndash;dry-run</li>
<li></li>
</ul>
<p>&nbsp;</p>
<p>اگر این دستور بدون خطا اجرا شود ، تجدید Certbot شما با موفقیت تنظیم شده است و هنگامی که گواهی نزدیک به تاریخ انقضا است ،&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود را به طور خودکار تمدید و ریستارت می کنید.</p>
<p><strong>نتیجه</strong></p>
<p>در این مقاله ، شما یک محیط JupyterLab را بر روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود تنظیم کرده و آن را از راه دور در دسترس قرار داده اید. اکنون می توانید از هر مرورگری به پروژه های یادگیری ماشین یا علوم داده خود دسترسی داشته باشید و مطمئن باشید که تمام تبادلات با رمزگذاری SSL در محل اتفاق می افتد. در کنار آن ، محیط شما دارای تمام مزایای&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>های مبتنی بر ابر میباشد.</p>
<p><a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خریدvps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-england/">سرور مجازی انگلیس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-germany/">سرور مجازی آلمان</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-canada/">سرور مجازی کانادا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps خرید</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">سرور مجازی فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی ارزان هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید vps هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">خرید vps فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">تست vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">سرور مجازی تست</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور مجازی ویندوز</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">ارزانترین vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps ارزان</a>&nbsp;&ndash;&nbsp;</p>]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-06T12:50:05+04:30</pubDate>
	</item>
	<item>
		<title><![CDATA[نحوه نصب Webmin در Ubuntu 20.04]]></title>
		<description><![CDATA[<p>Webmin &nbsp;یک پنل کنترل وب مدرن است که به شما امکان می دهد&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;لینوکس خود را از طریق یک رابط مبتنی بر مرورگر مدیریت کنید. با Webmin ، می توانید حساب های کاربری را مدیریت کنید ، تنظیمات DNS را پیکربندی کنید و تنظیمات بسته های معمول را تغییر دهید.</p>
<p>در این آموزش ، Webmin &nbsp;را بر روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود نصب و پیکربندی می کنید و دسترسی به رابط را با داشتن یک گواهی معتبر از Let&rsquo;s Encrypt &nbsp;ایمن می کنید. سپس از Webmin برای اضافه کردن حسابهای کاربری جدید استفاده خواهید کرد و کلیه بسته های موجود در داشبورد را روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود به روز می کنید.</p>
<p><strong>پیش نیازها</strong></p>
<p>برای تکمیل این آموزش ، به موارد زیر نیاز دارید:</p>
<ul>
<li>یک&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Ubuntu 20.04. این&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;باید دارای یک کاربر غیر ریشه با امتیازات sudo و فایروال UFW پیکربندی شده باشد. این کار را با دنبال کردن راهنمای تنظیم اولیه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Ubuntu 20.04 ما انجام دهید.</li>
<li>Apache که با دنبال کردن آموزش ما در مورد نحوه نصب وب&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Apache در Ubuntu 20.04 نصب شده باشد. اگر این راهنمای پیش نیاز را دنبال می کنید ، حتماً یک هاست مجازی را پیکربندی کنید.</li>
<li>نام دامنه کاملاً واجد شرایط (FQDN) ، با یک رکورد A DNS که به آدرس IP&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;شما اشاره دارد.</li>
</ul>
<p><strong>مرحله 1 &ndash; نصب&nbsp;</strong><strong>&nbsp;Webmin</strong></p>
<p>ابتدا ایندکس بسته&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;را به روز کنید اگر این کار را قبلا انجام نداده اید:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo apt update</p>
<p>سپس باید مخزن Webmin را اضافه کنیم تا بتوانیم Webmin را با استفاده از مدیر بسته خود نصب و به روز کنیم. این کار را با اضافه کردن مخزن به فایل /etc/apt/source.list انجام می دهیم.</p>
<p>فایل را در ویرایشگر مورد نظر خود باز کنید.</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo nano /etc/apt/sources.list&middot;</p>
<p>سپس این خط را در پایین فایل اضافه کنید تا مخزن جدید اضافه شود:</p>
<p>/etc/apt/sources.list</p>
<p>. . .</p>
<p>deb http://download.webmin.com/download/repository sarge contrib</p>
<p>&nbsp;</p>
<p>فایل را ذخیره کرده و از ویرایشگر خارج شوید. &nbsp;اگر از nano استفاده میکنید این کار را با CTRL+X,&nbsp;Y, سپس &nbsp;ENTER انجام دهید.</p>
<p>در مرحله بعد ، کلید Webmin PGP را اضافه خواهید کرد تا سیستم شما به مخزن جدید اعتماد کند. برای انجام این کار، باید بسته gnupg1&nbsp; را نصب کنید که ابراز GNU برای ارتباط ایمن و ذخیره داده است.</p>
<p>پس از آن، کلید Webmin PGP را با &nbsp;wget نصب و آن را به لیست کلیدهای سیستم خود اضافه کنید:</p>
<ul>
<li>$ wget -q -O- http://www.webmin.com/jcameron-key.asc | sudo apt-key add</li>
<li></li>
</ul>
<p>فهرست بسته&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود را به روز کنید &nbsp;تا منابع جدید Webmin را شامل شود:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo apt update&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&middot;</p>
<p>سپس Webmin را نصب کنید:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo apt install webmin &middot;</p>
<p>پس از اتمام نصب ، خروجی زیر ارائه می شود:</p>
<p>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.&middot;</p>
<p>توجه: اگر ufw را در مرحله پیش شرط نصب کردید ، باید دستور sudo ufw allow 10000را اجرا کنید تا Webmin از طریق فایروال امکان پذیر باشد. برای امنیت بیشتر ، بهتر است فایروال خود را پیکربندی کنید تا فقط از محدوده های خاص IP اجازه دسترسی به این پورت را داشته باشید.</p>
<p>بیایید با افزودن یک گواهی معتبر ، Webmin &nbsp;را ایمن کنیم.</p>
<p><strong>مرحله 2 &ndash; اضافه کردن یک گواهی معتبر با&nbsp;</strong><strong>Let&rsquo;s Encrypt</strong></p>
<p>در حال حاضر Webmin &nbsp;برای استفاده از HTTPS پیکربندی شده است ، اما از یک گواهی نامه امضاء نشده و غیرقابل اعتماد استفاده می کند. بیایید آن را با یک گواهی معتبر از Let&rsquo;s Encrypt جایگزین کنیم.</p>
<p>به https: // your_domain: 9000 در مرورگر وب خود بروید و your_domain را با نام دامنه خود به آدرس IP&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;خود جایگزین کنید.</p>
<p>توجه: هنگام ورود به سیستم برای اولین بار ، یک اخطار &ldquo;Invalid SSL&rdquo; مشاهده خواهید کرد. این اخطار ممکن است بسته به مرورگر شما متفاوت باشد اما دلیل آن این است که&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;یک گواهی self-signed ایجاد کرده است. امکان استثناء &nbsp;را بدهید و به دامنه خود بروید تا بتوانید گواهی خود امضا شده را با یک گواهی Let&rsquo;s Encrypt جایگزین کنید.</p>
<p>&nbsp;</p>
<p>به شما یک صفحه ورود به سیستم ارائه می شود. ضمن انجام پیش نیازهای این آموزش ، با کاربر غیر ریشه ای که ایجاد کرده اید وارد سیستم شوید.</p>
<p>پس از ورود به سیستم ، اولین صفحه ای که مشاهده خواهید کرد داشبورد Webmin است. قبل از استفاده از یک گواهی معتبر ، باید نام میزبان&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;را تنظیم کنید. همانطور که در شکل زیر نشان داده شده است ، به قسمت&nbsp;<strong>System hostname</strong>&nbsp;رفته و روی پیوند سمت راست کلیک کنید:</p>
<p>&nbsp;</p>
<p>شما را به صفحه&nbsp;<strong>Hostname and DNS Client</strong>&nbsp;میبرد. فیلد&nbsp;<strong>Hostname</strong>&nbsp; را پیدا کنید و نام دامنه کاملاً واجد شرایط خود را وارد این قسمت کنید. سپس بر روی دکمه ذخیره در پایین صفحه کلیک کنید تا تنظیمات اعمال شود.</p>
<p>پس از تنظیم نام میزبان خود ، بر روی منوی کشویی Webmin در نوار پیمایش سمت چپ کلیک کنید و سپس بر روی Webmin Configuration &nbsp;کلیک کنید.</p>
<p>از صفحه پیکربندی Webmin&nbsp; &nbsp;، SSL Encryption &nbsp;را از لیست آیکون ها انتخاب کنید ، و سپس روی سربرگ Let&rsquo;s Encrypt کلیک کنید. صفحه نمایشی مانند شکل زیر را مشاهده خواهید کرد:</p>
<p>&nbsp;</p>
<p>در این صفحه ، به Webmin&nbsp; می گویید که چگونه گواهینامه شما را دریافت و تمدید کند. گواهینامه های رمزگذاری شده پس از 3 ماه منقضی میشوند ، اما می توانید به Webmin &nbsp;دستور دهید که بطور خودکار سعی کند هر ماه مجوز Let&rsquo;s Encrypt &nbsp;را تمدید نماید. Let&rsquo;s Encrypt به دنبال یک فایل تأیید بر روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;میباشد ، بنابراین ما Webmin را پیکربندی می کنیم تا فایل تأیید را درون پوشه / var / www / your_domain قرار دهد ، این پوشه ای است که وب&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Apache که در پیش نیازها پیکربندی کرده اید از آن استفاده می کند. برای تنظیم گواهینامه خود این مراحل را دنبال کنید:</p>
<p>1- &nbsp;<strong>Hostnames for certificate</strong>&nbsp; را با FQDN خود پر کنید.</p>
<p>2- برای&nbsp;<strong>Website root directory for validation file</strong>&nbsp;، دکمه Other Directory را انتخاب کرده و /var/www/htmlرا وارد کنید. با فرض اینکه آموزش پیش نیاز APACHE را دنبال کرده باشید، /var/www/your_domain خواهد بود.</p>
<p>3- برای بخش&nbsp;<strong>Months between automatic renewal</strong>&nbsp;، گزینه&nbsp;<strong>Only renew manually</strong>&nbsp;را با وارد کردن 1 در جعبه ورودی کنسل کنید، و دکمه رادیو را در سمت چپ جعبه ورودی انتخاب کنید.</p>
<p>روی دکمه &nbsp;<strong>Request Certificate</strong>&nbsp;کلیک کنید. بعد از چند ثانیه ، صفحه تأیید را مشاهده خواهید کرد.</p>
<p>برای استفاده از گواهینامه جدید ، روی دکمه بازگشت به پیکربندی Webmin&nbsp; &nbsp;در صفحه تأیید کلیک کنید. از آن صفحه ، به پایین بروید و بر روی دکمه Restart Webmin کلیک کنید. حدود 30 ثانیه صبر کنید و سپس صفحه را مجدد لود کنید و دوباره وارد سیستم شوید. اکنون مرورگر شما باید نشان دهد که گواهی معتبر است.</p>
<p><strong>مرحله 3 &ndash; استفاده از&nbsp;</strong><strong>&nbsp;Webmin</strong></p>
<p>اکنون یک نمونه کار ایمن از Webmin تنظیم کرده اید. بیایید نحوه استفاده از آن را بررسی کنیم.</p>
<p>Webmin &nbsp;ماژول های مختلف زیادی دارد که می تواند همه چیز را از&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;BIND DNS گرفته تا چیزی به سادگی اضافه کردن کاربران به سیستم را کنترل کند. بیایید به نحوه ایجاد یک کاربر جدید بپردازیم و سپس نحوه به روزرسانی بسته های سیستم خود را با استفاده از Webmin بررسی کنیم.</p>
<p><strong>مدیریت کاربران و گروه ها</strong></p>
<p>ابتدا بر روی منوی System در نوار کناری سمت چپ کلیک کرده و سپس روی لینک Users and Groups کلیک کنید. از اینجا می توانید کاربران و گروه ها را اضافه و مدیریت کنید.</p>
<p>بیایید کاربر جدیدی به نام deploy ایجاد کنیم که می توانید از آن برای میزبانی برنامه های وب استفاده کنید. هنگام ایجاد کاربر ، می توانید گزینه هایی را برای انقضاء رمز عبور ، پوسته کاربر و اینکه آیا مجاز به ورود به دیرکتوری هوم هستند ، تعیین کنید.</p>
<p>برای افزودن کاربر ، روی&nbsp;<strong>Create a new user</strong>&nbsp;، که در بالای جدول کاربران قرار دارد ، کلیک کنید. این گزینه صفحه ایجاد کاربر را نمایش می دهد ، در آنجا می توانید نام کاربری ، رمز عبور ، گروه ها و گزینه های دیگر را ایجاد کنید. برای ایجاد کاربر این دستورالعمل ها را دنبال کنید:</p>
<p>1- نام کاربری را با deploy پر کنید.</p>
<p>2- برای شناسه کاربر automatic را انتخاب کنید.</p>
<p>3- real name را با نام توصیفی مانند deployment user پر کنید.</p>
<p>4- برای Home Directory ، Automatic &nbsp;را انتخاب کنید.</p>
<p>5- برای Shell ، از لیست کشویی گزینه / bin / bash را انتخاب کنید.</p>
<p>6- برای گذرواژه ، Normal Password &nbsp;را انتخاب کرده و پسورد مورد نظر خود را تایپ کنید.</p>
<p>7- برای primary group ،&nbsp;<strong>New group with same name as user</strong>را انتخاب کنید.</p>
<p>8- برای گروه ثانویه ، از لیست همه گروه ها sudo را انتخاب کنید. باید به طور خودکار به لیست In groups اضافه شود ، اما اگر این گزینه نیست ، دکمه&nbsp;<strong>-></strong>&nbsp;را فشار دهید تا آن را اضافه کنید.</p>
<p>برای ایجاد کاربر جدید روی create کلیک کنید. کاربر<strong>deploy</strong>&nbsp; را در یک ترتیب کوتاه ایجاد میکند.</p>
<p>در مرحله بعدی ، بیایید ببینیم که چگونه به روزرسانی های سیستم خود را نصب کنیم.</p>
<p><strong>به روزرسانی بسته ها</strong></p>
<p>Webmin &nbsp;به شما امکان می دهد همه بسته های خود را از طریق رابط کاربری آن به روز کنید. برای به روزرسانی همه بسته های خود ، ابتدا بر روی دکمه Dashboard در بالای نوار کناری سمت چپ کلیک کرده و سپس قسمت Update Package را پیدا کنید. اگر به روزرسانی وجود داشته باشد ، پیوندی را مشاهده می کنید که تعداد به روزرسانی های موجود را بیان می کند.</p>
<p>برای شروع به روزرسانی ، روی Update selected packages بزنید تا به روز رسانی شروع شود. ممکن است از شما خواسته شود که&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;را ریبوت کنید ، که می توانید از طریق رابط Webmin نیز این کار را انجام دهید.</p>
<p><strong>نتیجه</strong></p>
<p>اکنون یک نمونه کار ایمن Webmin &nbsp;دارید و از رابط کاربری برای ایجاد یک کاربر و به روزرسانی بسته ها استفاده کردید. Webmin &nbsp;به شما امکان دسترسی به موارد زیادی را می دهد که به طور معمول باید از طریق کنسول به آنها دسترسی پیدا کنید ، و آنها را به روشی بصری سازماندهی می کند. به عنوان مثال ، در صورت نصب Apache ، می توانید زبانه پیکربندی آن را در زیر&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>ها ، و سپس Apache پیدا کنید.</p>
<p>رابط را جستجو کنید یا برای یادگیری بیشتر درباره مدیریت سیستم خود با Webmin ، مطالب&nbsp;<a rel="nofollow" rel="nofollow" href="http://doxfer.webmin.com/Webmin/Main_Page">Official Webmin wiki</a>&nbsp;را مطالعه کنید.</p>
<p><a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خریدvps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-england/">سرور مجازی انگلیس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-germany/">سرور مجازی آلمان</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-canada/">سرور مجازی کانادا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps خرید</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">سرور مجازی فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی ارزان هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید vps هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">خرید vps فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">تست vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">سرور مجازی تست</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور مجازی ویندوز</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">ارزانترین vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps ارزان</a>&nbsp;&ndash;&nbsp;</p>]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-06T12:37:19+04:30</pubDate>
	</item>
	<item>
		<title><![CDATA[نحوه بازنویسی آدرس های اینترنتی با mod_rewrite برای Apache در اوبونتو 20.04]]></title>
		<description><![CDATA[<p>ماژول mod_rewrite Apache به شما امکان می دهد URL ها را با تمیزتر بازنویسی کنید ، مسیرهای قابل خواندن توسط انسان را به رشته های پرس و جوی متناسب با کد تبدیل کنید. همچنین به شما امکان می دهد URL ها را بر اساس شرایط بازنویسی کنید.</p>
<p>فایل .htaccess به شما امکان می دهد بدون دسترسی به فایل های پیکربندی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;، قوانین بازنویسی را ایجاد و اعمال کنید. با قرار دادن فایل .htaccess در ریشه وب سایت خود ، می توانید بازنویسی ها را بر اساس هر سایت یا هر دایرکتوری مدیریت کنید.</p>
<p>در این آموزش ، mod_rewrite &nbsp;را فعال کرده و از فایلهای .htaccess برای ایجاد یک تغییر مسیر URL اصلی استفاده می کنید ، و سپس چند مورد استفاده پیشرفته را پیدا می کنید.</p>
<p>پیش نیازها</p>
<p>برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:</p>
<ul>
<li>یک&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Ubuntu 20.04 که با دنبال کردن راهنمای تنظیم اولیه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;Ubuntu 20.04 راه اندازی و شامل یک کاربر sudo غیر ریشه و فایروال تنظیم شده باشد.</li>
<li>Apache که با دنبال کردن مرحله 1 نحوه نصب پشته Linux ، Apache ، MySQL ، PHP (LAMP) &nbsp;در اوبونتو 20.04 نصب شده باشد.</li>
</ul>
<p>مرحله 1 &ndash; فعال کردن&nbsp;&nbsp;mod_rewrite</p>
<p>برای اینکه Apache بتواند قوانین بازنویسی را درک کند ، ابتدا باید mod_rewrite را فعال کنیم. قبلاً نصب شده است ، اما در نصب پیش فرض Apache غیرفعال است. برای فعال کردن ماژول از دستور a2enmod استفاده کنید:</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo a2enmod rewrite&middot;</p>
<p>با این کار ماژول فعال می شود یا به شما هشدار می دهد که ماژول از قبل فعال شده است. برای اجرای این تغییرات ، Apache &nbsp;را مجدداً راه اندازی کنید.</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo systemctl restart apache2&middot;</p>
<p>اکنون mod_rewrite کاملاً فعال است. در مرحله بعدی، یک فایل .htaccess را برای تعریف قوانین بازنویسی برای تغییر مسیرها تنظیم خواهیم کرد.</p>
<p>مرحله 2 &ndash; تنظیم&nbsp;&nbsp;.htaccess</p>
<p>یک فایل .htaccess به ما امکان می دهد قوانین بازنویسی خود را بدون دسترسی به فایل های پیکربندی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;اصلاح کنیم. به همین دلیل ، .htaccess برای امنیت برنامه وب شما بسیار مهم است. دوره ای که نام فایل قبل از آن است ، اطمینان حاصل می کند که فایل مخفی است.</p>
<p>توجه: هر قانونی که می توانید در یک فایل .htaccess قرار دهید ، می تواند مستقیماً در فایل های پیکربندی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;قرار گیرد. در حقیقت ، اسناد رسمی Apache &nbsp;استفاده از فایلهای پیکربندی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;را به جای .htaccess توصیه می کند زیرا Apache آن را سریعتر از این پردازش می کند.</p>
<p>با این حال ، در این مثال ساده ، افزایش عملکرد ناچیز خواهد بود. علاوه بر این ، تنظیم قوانین در .htaccess مناسب است ، به خصوص با چندین وب سایت در همان&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>. برای اجرای تغییرات نیازی به راه اندازی مجدد&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a>&nbsp;نیست و نیازی به امتیازات اصلی برای ویرایش آن قوانین ، ساده سازی تعمیر و نگهداری و ایجاد تغییرات با یک حساب غیر شخصی نیست. برخی از نرم افزارهای منبع باز منبع آزاد ، مانند WordPress و Joomla ، اغلب برای تغییر و ایجاد قوانین اضافی در صورت تقاضا به یک فایل .htaccess متکی هستند.</p>
<p>قبل از شروع استفاده از فایل های .htaccess ، باید تنظیمات دیگری را انجام و آن را ایمن کنید.</p>
<p>به طور پیش فرض ، Apache با استفاده از فایل .htaccess اعمال قوانین بازنویسی را ممنوع می کند ، بنابراین ابتدا باید تغییراتی در فایل اعمال کنید. فایل پیش فرض پیکربندی Apache را با استفاده از nano یا ویرایشگر متن مورد علاقه خود باز کنید.</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo nano /etc/apache2/sites-available/000-default.conf&middot;</p>
<p>در داخل آن فایل ، بلوک <VirtualHost *: 80> را که از خط اول شروع می شود ، پیدا خواهید کرد. در داخل آن بلوک ، بلوک جدید زیر را اضافه کنید تا فایل پیکربندی شما مانند زیر باشد. اطمینان حاصل کنید که همه بلوک ها به درستی قرار گرفته اند.</p>
<p>/etc/apache2/sites-available/000-default.conf</p>
<p><VirtualHost *:80></p>
<p><Directory /var/www/html></p>
<p>Options Indexes FollowSymLinks</p>
<p>AllowOverride All</p>
<p>Require all granted</p>
<p></Directory></p>
<p>&nbsp;</p>
<p>. . .</p>
<p></VirtualHost></p>
<p>&nbsp;</p>
<p>فایل را ذخیره کنید و ببندید. برای اجرای این تغییرات ، Apache را مجدداً راه اندازی کنید.</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo systemctl restart apache2&middot;</p>
<p>اکنون ، یک فایل .htaccess را در webroot ایجاد کنید.</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo nano /var/www/html/.htaccess&middot;</p>
<p>این خط را در بالای فایل جدید اضافه کنید تا موتور بازنویسی فعال شود.</p>
<p>/var/www/html/.htaccess</p>
<p>RewriteEngine on</p>
<p>&nbsp;</p>
<p>فایل را ذخیره کرده و خارج شوید.</p>
<p>اکنون ما یک فایل .htaccess عملیاتی داریم که می توانیم از آن استفاده کنیم تا قوانین مسیریابی برنامه وب را کنترل کنیم. در مرحله بعد ، ما فایلهای وب سایت نمونه را ایجاد خواهیم کرد که برای نشان دادن قوانین بازنویسی قوانین از آنها استفاده خواهیم کرد.</p>
<p>مرحله 3 &ndash; پیکربندی بازنویسی&nbsp;&nbsp;URL</p>
<p>در اینجا ، یک بازنویسی URL اصلی را تنظیم می کنیم که URL های زیبا را به مسیرهای واقعی به صفحات تبدیل می کند. به طور خاص ، به کاربران این امکان را می دهیم که به http: // your_server_ip / about دسترسی پیدا کنند ، اما صفحه ای به نام about.html را نمایش می دهند.</p>
<p>با ایجاد فایلی به نام about.html در webroot شروع کنید.</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo nano /var/www/html/about.html&middot;</p>
<p>کد HTML زیر را در فایل کپی کنید ، سپس آن را ذخیره کرده و ببندید.</p>
<p>/var/www/html/about.html</p>
<p><html></p>
<p><head></p>
<p><title>About Us</title></p>
<p></head></p>
<p><body></p>
<p><h1>About Us</h1></p>
<p></body></p>
<p></html></p>
<p>&nbsp;</p>
<p>می توانید به این صفحه به آدرس http: //your_server_ip/about.html دسترسی پیدا کنید ، اما توجه داشته باشید که اگر سعی کنید به http: // your_server_ip / About خود دسترسی پیدا کنید ، خطای&nbsp;404 Not Found&nbsp; را مشاهده خواهید کرد. برای دسترسی به صفحه با استفاده از /about ، یک قانون بازنویسی ایجاد خواهیم کرد.</p>
<p>همه RewriteRules از این قالب پیروی می کنند:</p>
<p>General RewriteRule structure</p>
<p>RewriteRule pattern substitution [flags]</p>
<p>&nbsp;</p>
<ul>
<li>RewriteRule بخشنامه را مشخص می کند.</li>
</ul>
<ul>
<li>pattern یک عبارت معمولی است که رشته مورد نظر را از URL مطابقت می دهد ، همان چیزی است که بیننده در مرورگر تایپ می کند.</li>
<li>substitution مسیر رسیدن به URL واقعی ، یعنی مسیر سرورهای فایل Apache است.</li>
<li>flags پارامترهای اختیاری هستند که می توانند نحوه عملکرد قانون را تغییر دهند.</li>
</ul>
<p>بیایید قانون بازنویسی URL ما را ایجاد کنیم. فایل .htaccess را باز کنید.</p>
<p>&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ sudo nano /var/www/html/.htaccess&middot;</p>
<p>بعد از اولین خط ، RewriteRule هایلایت شده را اضافه کرده و فایل را ذخیره کنید.</p>
<p>در این حالت ، ^about$ الگو است ، About.html ، substitution است ، و [NC] پرچم است. مثال ما از چند کاراکتر با معنی خاص استفاده می کند:</p>
<ul>
<li>^ نشان دهنده شروع URL پس از your_server_ip/ است.</li>
<li>$ نشانگر پایان URL است.</li>
<li>about با رشته &ldquo;about&rdquo; جفت میشود</li>
<li>html فایل واقعی است که کاربر به آن دسترسی پیدا می کند.</li>
<li>[NC] پرچمی است که قضیه را بی حس می کند.</li>
</ul>
<p>اکنون می توانید به مرورگر خود به http: // your_server_ip / about دسترسی پیدا کنید. در واقع ، با این قانون که در بالا نشان داده شده است ، آدرس های اینترنتی زیر به about.html اشاره می کنند:</p>
<ul>
<li>http: // your_server_ip / about ، به دلیل تعریف قانون.</li>
<li>http: // your_server_ip / About ، زیرا این قانون به حروف حساس نیست.</li>
<li>http: //your_server_ip/about.html ، زیرا نام فایل مناسب اصلی همیشه کار خواهد کرد.</li>
</ul>
<p>با این حال ، موارد زیر کار نخواهد کرد:</p>
<p>http: // your_server_ip / about / ، زیرا این قانون به صراحت بیان می کند که ممکن است بعد از آن چیزی وجود نداشته باشد ، زیرا کاراکتر $ بعد از about ظاهر می شود.</p>
<p>http: // your_server_ip / contact ، زیرا با رشته about&nbsp; در قانون مطابقت نمی دهد.</p>
<p>اکنون یک فایل .htaccess عملیاتی با یک قانون اساسی دارید که می توانید نیازهای خود را تغییر داده و گسترش دهید. در بخش های بعدی ، دو نمونه دیگر از بخشنامه های متداول را نشان خواهیم داد.</p>
<p>مثال 1 &ndash; ساده سازی رشته های جستار با&nbsp;&nbsp;RewriteRule</p>
<p>برنامه های وب اغلب از رشته های جستار استفاده می کنند ، که با استفاده از علامت سؤال (؟) بعد از آدرس به URL اضافه می شوند. پارامترهای جداگانه با استفاده از چ (&) محدود می شوند. رشته های جستار ممکن است برای انتقال داده های اضافی بین صفحات برنامه فردی استفاده شود.</p>
<p>به عنوان مثال ، یک صفحه نتیجه جستجو که به زبان PHP نوشته شده است ممکن است از URL مانند http://example.com/results.php؟item=shirt&season=summer استفاده کند. در این مثال ، دو پارامتر اضافی به اسکریپت برنامه result.php موهومی منتقل می شود: item ، با متغیر shirt ، و مقدار summer. برنامه ممکن است از اطلاعات رشته پرس و جو برای ایجاد صفحه مناسب برای بازدید کننده استفاده کند.</p>
<p>قوانین بازنویسی Apache اغلب برای ساده کردن پیوندهای طولانی و ناخوشایند مانند موارد فوق در URL های دوستانه که تایپ و تفسیر بصری آسان تر است ، به کار می روند. در این مثال ، ما می خواهیم لینک بالا را ساده کنید تا به http://example.com/shirt/summer تبدیل شوید. پارامتر shirt&nbsp; و summer&nbsp; هنوز در آدرس هستند اما بدون نام رشته و نام اسکریپت.</p>
<p>در اینجا یک قانون برای اجرای این وجود دارد:</p>
<p>Simple substitution</p>
<p>RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer [QSA]</p>
<p>&nbsp;</p>
<p>shirt/summer به طور واضح در آدرس درخواستی مطابقت دارد و به Apache گفته می شود که به جای آن ، results.php?item=shirt&season=summer را ارائه دهد.</p>
<p>پرچم های [QSA] معمولاً در قوانین بازنویسی استفاده می شوند. آنها به Apache می گویند هر رشته درخواست اضافی را در URL ارائه شده اضافه کند ، بنابراین اگر بازدید کننده http://example.com/shirt/summer?page=2 &nbsp;را تایپ کند،&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور مجازی</a></p>
<p>با results.php?item=shirt&season=summer&page=2 پاسخ خواهد داد. بدون آن ، رشته پرس و جو اضافی حذف می شود.</p>
<p>در حالی که این روش به افکت مطلوب دست می یابد ، هر دو نام آیتم و فصل در قانون کدگذاری می شوند. این بدان معنی است که این قانون برای سایر موارد ، مانند شلوار ، یا فصولی مانند زمستان کار نخواهد کرد.</p>
<p>برای عمومی تر کردن این قاعده ، می توانیم از عبارات معمول برای مطابقت با قسمت های اصلی آدرس استفاده کنیم و از آن قسمت ها در الگوی تعویض استفاده کنیم. سپس قانون اصلاح شده به شرح زیر خواهد بود:</p>
<p>Simple substitution</p>
<p>RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]</p>
<p>&nbsp;</p>
<p>اولین گروه عبارت معمول در پرانتز با رشته ای حاوی کاراکترهای الفبا و اعداد مانند shirt&nbsp; یا pants&nbsp; مطابقت دارد و قطعه را به عنوان متغیر $ 1 ذخیره می کند. دومین گروه عبارت معمول در پرانتز دقیقاً با summer,&nbsp;winter,&nbsp;fall, یا &nbsp;spring مطابقت دارد و به همین ترتیب قطعه را به عنوان $2 ذخیره می کند.</p>
<p>قطعات همسان پس از آن به جای shirt&nbsp; و summer&nbsp; که قبلاً از آنها استفاده می کردیم در URL نتیجه در متغیرهای item&nbsp; و season&nbsp; استفاده می شوند.</p>
<p>موارد فوق ، به عنوان مثال ، http://example.com/pants/summer را به http://example.com/results.php؟item=pants&season=summer تبدیل می کند. این مثال همچنین اثبات آینده است ، و به چندین item&nbsp; و season&nbsp; اجازه می دهد تا با استفاده از یک قانون واحد به طور صحیح بازنویسی شوند.</p>
<p>مثال 2 &ndash; اضافه کردن شرایط با منطق با استفاده از&nbsp;RewriteConds</p>
<p>بازنویسی قوانین الزاماً همیشه یک به یک و بدون محدودیت ارزیابی نمی شوند. دستورالعمل RewriteCond به ما امکان می دهد تا شرایط را برای بازنویسی خود اضافه کنیم تا هنگام پردازش قوانین ، کنترل کنیم. کلیه RewriteConds با فرمت زیر عمل می کند:</p>
<p>General RewriteCond structure</p>
<p>RewriteCond TestString Condition [Flags]</p>
<p>&nbsp;</p>
<ul>
<li>RewriteCond بخشنامه RewriteCond را مشخص می کند.</li>
<li>TestString رشته ای است که باید در برابر آن آزمایش کنید.</li>
<li>Condition الگو یا شرط مطابقت است.</li>
<li>Flags پارامترهای اختیاری هستند که ممکن است شرایط و قوانین ارزیابی را تغییر دهند.</li>
</ul>
<p>اگر RewriteCond درست ارزیابی شود ، RewriteRule &nbsp;بلافاصله در نظر گرفته می شود. در صورت عدم موفقیت ، این قانون منتفی می شود. RewriteCond &nbsp;چندگانه ممکن است یکی پس از دیگری مورد استفاده قرار گیرد و با رفتار پیش فرض ، همه باید درست ارزیابی کنند تا قاعده زیر در نظر گرفته شود.</p>
<p>به عنوان نمونه ، فرض می کنیم شما می خواهیئ به جای نشان دادن صفحه خطای استاندارد 404 Not Found ، همه درخواست ها را به فایل ها یا دیرکتوریهای غیر موجود در سایت خود به صفحه اصلی برگردانید. این امر می تواند با قوانین زیر انجام شود:</p>
<p>Redirect all requests to non-existent files and directories to home page</p>
<p>RewriteCond %{REQUEST_FILENAME} !-f</p>
<p>RewriteCond %{REQUEST_FILENAME} !-d</p>
<p>RewriteRule . / [R=301]</p>
<p>&nbsp;</p>
<p>به این شرح:</p>
<p>%{REQUEST_FILENAME} رشته ای برای بررسی است. در این حالت ، نام فایل درخواستی است ، که یک متغیر سیستمی برای هر درخواست است.</p>
<p>-f &nbsp;یک وضعیت داخلی است که تأیید می کند که آیا نام درخواست شده در دیسک وجود دارد یا فایل است. ! یک عامل منفی است. ! -f &nbsp;ترکیبی فقط درصورتی که یک نام مشخص وجود نداشته باشد یا فایل نداشته باشد ، درست ارزیابی می شود.</p>
<p>به طور مشابه ، ! -d &nbsp;فقط درصورتی که یک نام مشخص وجود نداشته باشد یا یک دیرکتوری نباشد ، درست ارزیابی می شود.</p>
<p>RewriteRule در خط نهایی فقط برای درخواست ها به فایل ها یا دایرکتوری های غیر موجود وارد خواهد شد. خود RewriteRule &nbsp;بسیار ساده است. نقطه . در این الگو با هر چیزی مطابقت دارد و جایگزینی هر درخواست را به ریشه / وب سایت هدایت می کند.</p>
<p>علاوه بر این ، پرچم [R = 301] &nbsp;به Apache می گوید یک کد پاسخ HTTP &nbsp;،&nbsp;<em>301 Moved Permanently</em>&nbsp;را به مرورگر بازگرداند ، در نتیجه مرورگر می داند که تغییر مسیر اتفاق افتاده است و صریحاً به جای URL درخواست شده ، ریشه وب سایت را واگذار می کند. و تغییری در نوار آدرس مرورگر اعمال میشود.</p>
<p>بدون این پرچم ، Apache &nbsp;محتوای اصلی وب سایت را بر می گرداند ، اما مرورگر همچنان فکر می کند URL صفحه درخواستی وجود داشته باشد و آدرس درخواست شده را ابتدا در نوار آدرس نشان دهد.</p>
<p>نتیجه</p>
<p>mod_rewrite &nbsp;به شما امکان می دهد URL های قابل خواندن توسط انسان را ایجاد کنید. در این آموزش شما از دستورالعمل RewriteRule برای هدایت آدرس های اینترنتی از جمله آدرس ها با رشته های پرس و جو استفاده کرده اید. همچنین با استفاده از دستورالعمل RewriteCond &nbsp;URL &nbsp;های هدایت شونده مشروط را نوشتید.</p>
<p>اگر می خواهید در مورد mod_rewrite اطلاعات بیشتری کسب کنید ، به mod_rewrite Introduction و مستندات رسمی Apache &nbsp;برای mod_rewrite نگاهی بیندازید.</p>
<p>&nbsp;</p>
<p><a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خریدvps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-england/">سرور مجازی انگلیس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-germany/">سرور مجازی آلمان</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-canada/">سرور مجازی کانادا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps خرید</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">سرور مجازی فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی ارزان هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید vps هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">خرید vps فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">تست vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">سرور مجازی تست</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور مجازی ویندوز</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">ارزانترین vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps ارزان</a>&nbsp;&ndash;&nbsp;</p>]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-05T14:00:39+04:30</pubDate>
	</item>
	<item>
		<title><![CDATA[نحوه مدیریت چندین سرور با دستورات Ad Hoc Ansible]]></title>
		<description><![CDATA[<p>Ansible ابزاری مدرن برای مدیریت پیکربندی است که کار تنظیم و نگهداری&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;های از راه دور را تسهیل می کند. با یک طراحی مینیمالیستی که قصد دارد کاربران را به روز کرده و به آنها سرعت ببخشد ، به شما این امکان را می دهد تا یک یا صدها سیستم را از یک مکان مرکزی با playbook یا دستورات ad hoc کنترل کنید.<br />بر خلاف playbook- که شامل مجموعه کارهایی است که می توان از آنها استفاده مجدد کرد &ndash; دستورات ad hoc کارهایی هستند که شما مرتباً آنها را انجام نمی دهید ، مانند راه اندازی مجدد یک سرویس یا بازیابی اطلاعات در مورد سیستمهای از راه دور که قابل اعتماد نیستند.</p>
<p>در این راهنما، یاد می گیرید که چگونه از دستورات ad hoc برای انجام کارهای متداول مانند نصب بسته ها ، کپی کردن فایل ها ، و راه اندازی مجدد سرویس ها بر روی یک یا چند&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;از راه دور ، از یک گره کنترل Ansible استفاده کنید.</p>
<p>پیش نیازها<br />برای پیروی از این راهنما ، به موارد زیر نیاز دارید:<br />&bull; یک گره کنترل Ansible. این راهنما فرض می کند که گره کنترل شما یک دستگاه اوبونتو 20.04 است که Ansible روی آن نصب و پیکربندی شده است تا با استفاده از کلیدهای SSH به میزبان های Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo است و فایروال را نیز فعال کرده است ، همانطور که در راهنمای ستاپ اولیه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;توضیح داده شده است. برای راه اندازی Ansible ، لطفا راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 20.04 را دنبال کنید.<br />&bull; دو یا چند میزبان Ansible. میزبان Ansible هر دستگاهی است که گره کنترل Ansible شما برای خودکار سازی پیکربندی شده باشد. این راهنما فرض می کند که میزبان های Ansible شما&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;های Ubuntu 20.04 از راه دور هستند. اطمینان حاصل کنید که هر میزبان Ansible دارای موارد زیر است:<br />o کلید عمومی SSH گره کنترل Ansible به کلیدهای مجاز کاربر کاربر اضافه شده باشد. این کاربر می تواند root یا یک کاربر معمولی با امتیازات sudo باشد. برای تنظیم این گزینه ، می توانید مرحله 2 راهنمای نحوه تنظیم کلیدهای SSH را در اوبونتو 20.04 دنبال کنید.<br />&bull; یک فایل inventory بر روی گره کنترل Ansible تنظیم شده باشد. اطمینان حاصل کنید که یک فایل inventory در آن وجود دارد که شامل همه میزبان های Ansible باشد. برای انجام این کار ، لطفاً به راهنمای چگونگی تنظیم موجودی های Ansible مراجعه کنید. سپس مطمئن شوید که با اجرای تست اتصال مشخص شده در بخش تست اتصال به میزبان های Ansible ، می توانید به گره های خود متصل شوید.</p>
<p>آزمایش اتصال به هاست های Ansible<br />دستور زیر اتصال بین گره کنترل Ansible و تمام میزبان های Ansible شما را آزمایش می کند. این دستور از کاربر سیستم فعلی و کلید SSH مربوطه آن به عنوان ورود از راه دور استفاده می کند و گزینه -m را نیز شامل می شود ، که به Ansible می گوید ماژول ping را اجرا کنید. همچنین دارای پرچم -i است که به Ansible میگوید میزبان های موجود در فایل inventory مشخص شده را ping کند.<br />$ ansible all -i inventory -m ping</p>
<p>اگر اولین بار است که از طریق SSH به این&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;ها وصل می شوید ، از شما خواسته می شود که صحت میزبان هایی را که از طریق Ansible به آنها وصل می شوید ، تأیید کنید. وقتی از شما خواسته شد ، yes را تایپ کنید و سپس برای تأیید ENTER را بزنید.<br />باید خروجی مشابه این دریافت کنید:<br />Output<br />server1 | SUCCESS => {<br />&ldquo;changed&rdquo;: false,<br />&ldquo;ping&rdquo;: &ldquo;pong&rdquo;<br />}<br />server2 | SUCCESS => {<br />&ldquo;changed&rdquo;: false,<br />&ldquo;ping&rdquo;: &ldquo;pong&rdquo;<br />}</p>
<p>هنگامی که یک پاسخ &ldquo;pong&rdquo; را از هاست دریافت کردید ، بدان معنی است که ارتباط زنده است و شما آماده اجرای دستورات Ansible در آن&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;هستید.</p>
<p>تنظیم گزینه های اتصال<br />به طور پیش فرض ، Ansible سعی دارد با استفاده از صفحه کلید SSH مربوطه ، به عنوان کاربر از راه دور با همان نام کاربری سیستم فعلی شما ، به گره ها متصل شود.<br />برای اتصال به عنوان یک کاربر از راه دور متفاوت ، فرمان را با پرچم -u و نام کاربر در نظر گرفته شده اضافه کنید:<br />$ ansible all -i inventory -m ping -u sammy</p>
<p>اگر از یک کلید SSH سفارشی برای اتصال به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;های از راه دور استفاده می کنید ، می توانید آن را در زمان اجرا با گزینه &ndash;private-key ارائه دهید:<br />$ ansible all -i inventory -m ping &ndash;private-key=~/.ssh/custom_id</p>
<p>توجه: برای کسب اطلاعات بیشتر در مورد نحوه اتصال به گره ها ، لطفاً به راهنمای نحوه استفاده از Ansible ما مراجعه کنید ، که گزینه های اتصال بیشتری را نشان می دهد.</p>
<p>هنگامی که می توانید با استفاده از گزینه های مناسب اتصال برقرار کنید ، می توانید فایل inventory خود را تنظیم کنید تا به صورت خودکار کاربر از راه دور و کلید خصوصی خود را تنظیم کنید ، تا تفاوتی با مقادیر پیش فرض تعیین شده توسط Ansible نباشد. سپس ، لازم نیست آن پارامترها را در خط فرمان ارائه دهید.<br />مثال فایل inventory زیر متغیر ansible_user را فقط برای&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;server1 تنظیم می کند:<br />~/ansible/inventory<br />server1 ansible_host=203.0.113.111 ansible_user=sammy<br />server2 ansible_host=203.0.113.112</p>
<p>Ansible اکنون هنگام اتصال به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;server1 از summy به عنوان کاربر پیش فرض از راه دور استفاده می کند.<br />برای تنظیم کلید SSH سفارشی ، متغیر ansible_ssh_private_key_file را به شرح زیر وارد کنید:<br />~/ansible/inventory<br />server1 ansible_host=203.0.113.111 ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id<br />server2 ansible_host=203.0.113.112</p>
<p>در هر دو مورد ، ما مقادیر سفارشی را فقط برای server1 تنظیم کرده ایم. اگر می خواهید از همان تنظیمات برای چندین&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;استفاده کنید ، می توانید برای آن گروه child استفاده کنید:<br />~/ansible/inventory<br />[group_a]<br />203.0.113.111<br />203.0.113.112</p>
<p>[group_b]<br />203.0.113.113</p>
<p>[group_a:vars]<br />ansible_user=sammy<br />ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id</p>
<p>این پیکربندی مثال فقط یک کاربر سفارشی و کلید SSH را برای اتصال به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;های ذکر شده در group_a اختصاص می دهد.</p>
<p>تعیین اهدافی برای اجرای فرمان<br />هنگام اجرای دستورات ad hoc با Ansible ، می توانید میزبان های فردی و همچنین هر ترکیبی از گروه ها ، هاست ها و زیر گروه ها را هدف قرار دهید. به عنوان مثال ، به ترتیب زیر می توانید اتصال را برای هر میزبان در یک گروه به نام&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;ها بررسی کنید:<br />$ ansible servers -i inventory -m ping</p>
<p>همچنین می توانید میزبان ها و گروه های مختلفی را با جدا کردن آنها با ستون هایی مشخص کنید:<br />$ ansible server1:server2:dbservers -i inventory -m ping</p>
<p>برای درج یک استثناء در یک الگو ، از علامت تعجب ، پیشوند با کاراکتر  ، به شرح زیر استفاده کنید. این دستور بر روی همه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;های گروه 1 اجرا می شود ، به جز server2:<br />$ ansible group1:!server2 -i inventory -m ping</p>
<p>در صورت تمایل به اجرای یک دستور فقط بر روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;هایی که جزئی از گروه 1 و گروه 2 هستند ،<br />به عنوان مثال ، باید از & استفاده کنید. فراموش نکنید که پیشوند آن را یک کاراکتر  قرار دهید:<br />$ ansible group1:&group2 -i inventory -m ping</p>
<p>برای کسب اطلاعات بیشتر در مورد چگونگی استفاده از الگوها هنگام تعیین اهداف برای اجرای فرمان ، لطفاً به مرحله 5 راهنمای ما در مورد نحوه تنظیم موجودی های Ansible مراجعه کنید.</p>
<p>اجرای ماژول های Ansible<br />ماژول های Ansible قطعاتی از کد هستند که می توانند از playbooks و همچنین از خط فرمان دریافت شوند تا مراحل اجرا روی گره های از راه دور را تسهیل کنند. مثالها شامل ماژول apt&nbsp; ، برای مدیریت بسته های سیستم در اوبونتو و ماژول user&nbsp; است که برای مدیریت کاربران سیستم استفاده می شود. دستور ping&nbsp; مورد استفاده در سراسر این راهنما نیز یک ماژول است که به طور معمول برای تست اتصال از گره کنترل به هاست استفاده می شود.<br />Ansible با مجموعه گسترده ای از ماژول های داخلی همراه است که برخی از آنها به منظور فراهم آوردن قابلیت های کامل ، نیاز به نصب نرم افزار اضافی دارند. همچنین می توانید ماژول های دلخواه خود را با استفاده از زبان مورد نظر خود ایجاد کنید.<br />برای اجرای یک ماژول با آرگومان ها ، پرچم -a را به همراه گزینه های مناسب در نقل قول اضافه کنید ، مانند این:<br />$ ansible target -i inventory -m module -a &ldquo;module options&rdquo;</p>
<p>به عنوان نمونه ، از ماژول apt برای نصب بسته tree&nbsp; روی server1 استفاده می کند:<br />$ ansible server1 -i inventory -m apt -a &ldquo;name=tree&rdquo;</p>
<p>اجرای دستورات Bash</p>
<p>هنگامی که یک ماژول از طریق گزینه -m ارائه نمی شود ، از ماژول فرمان به طور پیش فرض برای اجرای دستور مشخص شده روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;(های) راه دور استفاده می شود.<br />این امر به شما امکان می دهد تا بتوانید تقریبا هر فرمانی را اجرا کنید که بطور معمول از طریق یک ترمینال SSH اجرا میشود، مادامی که کاربر در حال اتصال مجوزهای کافی داشته باشد و هیچ گونه اعلان تعاملی وجود نداشته باشد.<br />این مثال فرمان uptime را در کلیه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;ها از موجودی مشخص شده اجرا می کند:<br />$ ansible all -i inventory -a &ldquo;uptime&rdquo;</p>
<p>Output<br />server1 | CHANGED | rc=0 >><br />14:12:18 up 55 days, 2:15, 1 user, load average: 0.03, 0.01, 0.00<br />server2 | CHANGED | rc=0 >><br />14:12:19 up 10 days, 6:38, 1 user, load average: 0.01, 0.02, 0.00</p>
<p>استفاده از افزایش امتیازات برای اجرای دستورات با sudo<br />اگر دستور یا ماژول مورد نظر برای اجرا روی هاستهای از راه دور نیاز به امتیازات گسترده سیستم یا کاربر سیستم دیگری دارد ، لازم است که از ماژول افزایش امتیاز Ansible استفاده کنید ، که ماژولی انتزاعی برای sudo و همچنین سایر نرم افزارهای افزایش امتیاز است که توسط Ansible در سیستم عامل های مختلف پشتیبانی می شود.<br />به عنوان مثال ، اگر می خواهید یک فرمان tail&nbsp; را برای خروجی آخرین پیام های ورود به سیستم از خطای Nginx روی&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;به نام server1 از inventory ، اجرا کنید ، باید گزینه &ndash;become را به شرح زیر وارد کنید:<br />ansible server1 -i inventory -a &ldquo;tail /var/log/nginx/error.log&rdquo; &ndash;become</p>
<p>این می تواند معادل اجرای فرمان sudo tail /var/log/nginx/error.log بر روی میزبان از راه دور ، با استفاده از کاربر سیستم فعلی محلی یا کاربر از راه دور تنظیم شده در فایل inventory شما باشد.<br />سیستم های افزایش امتیاز مانند sudo اغلب با درخواست رمز ورود کاربر، از شما میخواهند که تأیید اعتبار کنید. این باعث می شود که Ansible در اجرای یک دستور یا اجرای playbook شکست بخورد. سپس می توانید از گزینه &ndash;ask-become-pass یا -K استفاده کنید تا Ansible اعلان رمز عبور sudo را درخواست کند:</p>
<p>$ ansible server1 -i inventory -a &ldquo;tail /var/log/nginx/error.log&rdquo; &ndash;become -K</p>
<p>نصب و حذف بسته ها<br />مثال زیر از ماژول apt برای نصب بسته nginx در تمام گره ها از فایل inventory استفاده می کند:<br />$ ansible all -i inventory -m apt -a &ldquo;name=nginx&rdquo; &ndash;become -K</p>
<p>برای حذف بسته ، آرگومان state را درج کنید و آن را روی absent تنظیم کنید:.<br />$ ansible all -i inventory -m apt -a &ldquo;name=nginx state=absent&rdquo; &ndash;become -K</p>
<p>&nbsp;</p>
<p>کپی کردن فایل ها<br />با ماژول file ، می توانید فایلها را بین گره کنترل و گره های مدیریت شده ، از هر جهت کپی کنید. دستور زیر یک فایل متنی محلی را برای همه میزبانهای از راه دور در فایل inventory مشخص شده کپی می کند:<br />$ ansible all -i inventory -m copy -a &ldquo;src=./file.txt dest=~/myfile.txt&rdquo;</p>
<p>برای کپی کردن فایل از&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;از راه دور در گره کنترل خود ، گزینه Remote_src را نیز اضافه کنید:<br />$ ansible all -i inventory -m copy -a &ldquo;src=~/myfile.txt remote_src=yes dest=./file.txt&rdquo;</p>
<p>تغییر مجوزهای فایل<br />برای تغییر مجوزها در فایل ها و دایرکتوری ها روی گره های از راه دور خود ، می توانید از ماژول file استفاده کنید.<br />دستور زیر مجوزها را روی فایلی به نام file.txt که در / var / www در میزبان از راه دور قرار دارد تنظیم می کند. این قسمت کادر اجرایی فایل را روی 600 تنظیم می کند ، که مجوزهای خواندن و نوشتن را فقط برای مالک فعلی فایل فعال می کند. علاوه بر این ، مالکیت آن فایل را برای کاربر و گروهی به نام sammy تعیین می کند:<br />$ ansible all -i inventory -m file -a &ldquo;dest=/var/www/file.txt mode=600 owner=sammy group=sammy&rdquo; &ndash;become -K</p>
<p>از آنجا که این فایل در یک دیرکتوری قرار دارد که معمولاً متعلق به root است ، برای تغییر ویژگی های آن ممکن است به مجوزهای sudo نیاز داشته باشیم. به همین دلیل گزینه های &ndash;become و -K را شامل می شود. اینها برای اجرای دستور دارای امتیازات گسترده از سیستم تشدید امتیاز Ansible استفاده می کنند ، و این امر باعث می شود که رمز عبور sudo را برای کاربر از راه دور تهیه کنید.</p>
<p>ریستارت سرویس ها<br />شما می توانید از ماژول service برای مدیریت سرویس های در حال اجرا روی گره های از راه دور که توسط Ansible استفاده می شود ، استفاده کنید. این امر به امتیازات گسترده سیستم نیاز دارد ، بنابراین اطمینان حاصل کنید که کاربر از راه دور شما دارای مجوزهای sudo است و شما از گزینه &ndash;become برای استفاده از سیستم افزایش امتیاز Ansible استفاده می کنید. استفاده از -K باعث می شود که رمز عبور sudo را برای کاربر متصل کننده فراهم کنید.<br />برای ریستارت سرویس nginx در تمام میزبانهای گروهی به نام webservers ، دستور زیر را اجرا کنید:<br />$ ansible webservers -i inventory -m service -a &ldquo;name=nginx state=restarted&rdquo; &ndash;become -K</p>
<p>ریستارت&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;ها<br />اگرچه Ansible یک ماژول اختصاصی برای راه اندازی مجدد&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;ها ندارد ، می توانید یک دستور bash صادر کنید که فرمان /sbin/reboot را روی میزبان از راه دور فراخوانی می کند.<br />راه اندازی مجدد&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;به امتیازات گسترده سیستم نیاز دارد ، بنابراین اطمینان حاصل کنید که کاربر از راه دور شما دارای مجوزهای sudo است و شما از گزینه &ndash;become برای استفاده از سیستم افزایش امتیاز Ansible استفاده می کنید. استفاده از -K باعث می شود رمز عبور sudo را برای کاربر متصل کننده فراهم کنید.<br />هشدار: دستور زیر&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;(های) هدف Ansible را ریستارت می کند. این امر ممکن است باعث ایجاد اختلال موقتی در هر برنامه ای که به آن&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;ها متکی است، گردد.</p>
<p>برای ریستارت همه&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;ها در یک گروه webservers&nbsp; دستور زیر را اجرا کنید :<br />$ ansible webservers -i inventory -a &ldquo;/sbin/reboot&rdquo; &ndash;become -K</p>
<p>جمع آوری اطلاعات در مورد گره های از راه دور<br />ماژول setup&nbsp; اطلاعات دقیق در مورد سیستمهای از راه دور مدیریت شده توسط Ansible ، که به system facts نیز شناخته میشود را نشان می دهد.<br />برای به دست آوردن system facts برای server1 ، دستور زیر را اجرا کنید:<br />$ ansible server1 -i inventory -m setup</p>
<p>این دستور مقدار زیادی از داده های JSON را چاپ می کند که حاوی جزئیاتی درباره محیط&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;از راه دور است. برای اینکه فقط مرتبط ترین اطلاعات چاپ شود، عبارت &ldquo;gather_subset=min&rdquo; را به شرح زیر وارد کنید:<br />$ ansible server1 -i inventory -m setup -a &ldquo;gather_subset=min&rdquo;</p>
<p>برای چاپ فقط موارد خاص JSON ، می توانید از آرگومان filter استفاده کنید. که یک الگوی wildcard را میپذیرد که برای مطابقت رشته ها ، مشابه fnmatch ، استفاده میشود. به عنوان مثال ، برای به دست آوردن اطلاعات در مورد هر دو رابط شبکه ipv4 و ipv6 ، می توانید از * ipv * به عنوان فیلتر استفاده کنید:<br />ansible server1 -i inventory -m setup -a &ldquo;filter=*ipv*&rdquo;</p>
<p>Output<br />server1 | SUCCESS => {<br />&ldquo;ansible_facts&rdquo;: {<br />&ldquo;ansible_all_ipv4_addresses&rdquo;: [<br />&ldquo;203.0.113.111&rdquo;,<br />&ldquo;10.0.0.1&rdquo;<br />],<br />&ldquo;ansible_all_ipv6_addresses&rdquo;: [<br />&ldquo;fe80::a4f5:16ff:fe75:e758&rdquo;<br />],<br />&ldquo;ansible_default_ipv4&rdquo;: {<br />&ldquo;address&rdquo;: &ldquo;203.0.113.111&rdquo;,<br />&ldquo;alias&rdquo;: &ldquo;eth0&rdquo;,<br />&ldquo;broadcast&rdquo;: &ldquo;203.0.113.111&rdquo;,<br />&ldquo;gateway&rdquo;: &ldquo;203.0.113.1&rdquo;,<br />&ldquo;interface&rdquo;: &ldquo;eth0&rdquo;,<br />&ldquo;macaddress&rdquo;: &ldquo;a6:f5:16:75:e7:58&rdquo;,<br />&ldquo;mtu&rdquo;: 1500,<br />&ldquo;netmask&rdquo;: &ldquo;255.255.240.0&rdquo;,<br />&ldquo;network&rdquo;: &ldquo;203.0.113.0&rdquo;,<br />&ldquo;type&rdquo;: &ldquo;ether&rdquo;<br />},<br />&ldquo;ansible_default_ipv6&rdquo;: {}<br />},<br />&ldquo;changed&rdquo;: false<br />}</p>
<p>اگر می خواهید میزان استفاده از دیسک را بررسی کنید ، می توانید یک دستور Bash را با استفاده از ابزار df اجرا کنید ، به شرح زیر:<br />$ ansible all -i inventory -a &ldquo;df -h&rdquo;</p>
<p>Output</p>
<p>server1 | CHANGED | rc=0 >><br />Filesystem Size Used Avail Use% Mounted on<br />udev 3.9G 0 3.9G 0% /dev<br />tmpfs 798M 624K 798M 1% /run<br />/dev/vda1 155G 2.3G 153G 2% /<br />tmpfs 3.9G 0 3.9G 0% /dev/shm<br />tmpfs 5.0M 0 5.0M 0% /run/lock<br />tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup<br />/dev/vda15 105M 3.6M 101M 4% /boot/efi<br />tmpfs 798M 0 798M 0% /run/user/0</p>
<p>server2 | CHANGED | rc=0 >><br />Filesystem Size Used Avail Use% Mounted on<br />udev 2.0G 0 2.0G 0% /dev<br />tmpfs 395M 608K 394M 1% /run<br />/dev/vda1 78G 2.2G 76G 3% /<br />tmpfs 2.0G 0 2.0G 0% /dev/shm<br />tmpfs 5.0M 0 5.0M 0% /run/lock<br />tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup<br />/dev/vda15 105M 3.6M 101M 4% /boot/efi<br />tmpfs 395M 0 395M 0% /run/user/0</p>
<p>نتیجه<br />در این راهنما ، ما نحوه استفاده از دستورات adible ad hoc را برای مدیریت&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;های از راه دور ، از جمله نحوه اجرای کارهای متداول شامل ریستارت یک سرویس یا کپی کردن یک فایل از گره کنترل به&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps/">سرور محازی</a>&nbsp;های از راه دور که توسط آن قابل کنترل است ، نشان دادیم. همچنین نحوه جمع آوری اطلاعات از گره های از راه دور با استفاده از پارامترهای محدود کننده و فیلتر را مشاهده کردیم.<br />به عنوان یک منبع اضافی ، می توانید مستندات رسمی Ansible را در مورد دستورات ad hoc بررسی کنید.</p>
<p>&nbsp;</p>
<p><a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خریدvps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">فروش سرور مجازی</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">سرور آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-england/">سرور مجازی انگلیس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-germany/">سرور مجازی آلمان</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-canada/">سرور مجازی کانادا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps خرید</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">سرور مجازی فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">سرور مجازی هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید vps آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید سرور مجازی ارزان هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-netherlands/">خرید vps هلند</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-usa/">خرید سرور مجازی آمریکا</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/vps-france/">خرید vps فرانسه</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">تست vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/speedtest/">سرور مجازی تست</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">سرور مجازی ویندوز</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">ارزانترین vps</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">خرید وی پی اس</a>&nbsp;&ndash;&nbsp;<a rel="nofollow" rel="nofollow" href="https://vpsgol.net/">vps ارزان</a>&nbsp;&ndash;&nbsp;</p>]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-05T13:55:58+04:30</pubDate>
	</item>
	<item>
		<title><![CDATA[چگونه می توان REST API را با Prisma و PostgreSQL ساخت]]></title>
		<description><![CDATA[<p>Prisma ، یک ابزار پایگاه داده منبع باز است. از سه ابزار اصلی تشکیل شده است:<br />Prisma Client: سازنده جستار خودکار و از نوع مطمئن برای Node.js و TypeScript.<br />Prisma Migrate: یک سیستم توصیفی انتقال و مدل سازی داده ها.<br />Prisma Studio: رابط کاربری گرافیکی برای مشاهده و ویرایش داده ها در پایگاه داده خود.<br />این ابزارها با هدف افزایش بهره وری یک برنامه نویس در گردش کار در پایگاه داده خود ارائه می شود. یکی از مهمترین مزایای Prisma میزان انتزاع ارائه شده است: به جای فهمیدن جستارهای پیچیده SQL یا انتقال شماتیک ها ، توسعه دهندگان برنامه می توانند هنگام استفاده از Prisma برای کار با پایگاه داده خود ، اطلاعات خود را به روشی بصری تر استدلال کنند.<br />در این آموزش ، شما یک API REST برای یک برنامه بلاگ نویسی کوچک در TypeScript با استفاده از Prisma و یک پایگاه داده PostgreSQL ایجاد خواهید کرد. پایگاه داده PostgreSQL را بصورت محلی با Docker تنظیم می کنید و مسیرهای REST API را با استفاده از Express پیاده سازی می کنید. در پایان آموزش ، یک وب سرور دارید که بصورت محلی روی دستگاه شما کار می کند که می تواند به درخواست های مختلف HTTP پاسخ دهد و داده ها را در دیتابیس بخواند و بنویسد.<br />پیش نیازها<br />این آموزش موارد زیر را فرض می کند:<br />Node.js v10 یا بالاتر روی دستگاه شما نصب شده باشد. برای تنظیم این گزینه می توانید از یکی از روش های نصب Node.js و ایجاد محیط توسعه محلی برای سیستم عامل خود استفاده کنید.<br />Docker نصب شده بر روی دستگاه تان (برای اجرای پایگاه داده PostgreSQL) . می توانید از طریق وب سایت Docker آن را روی macOS و Windows نصب کنید ، یا نحوه نصب و استفاده از Docker را برای توزیع های لینوکس دنبال کنید.<br />آشنایی اولیه با TypeScript و API های REST مفید است اما برای این آموزش لازم نیست.<br />مرحله 1 &ndash; ایجاد پروژه TypeScript<br />در این مرحله با استفاده از npm یک پروژه ساده TypeScript تنظیم می کنید. این پروژه پایه و اساس API REST است که می خواهید در طول دوره این آموزش بسازید.<br />ابتدا یک دایرکتوری جدید برای پروژه خود ایجاد کنید:<br />$ mkdir my-blog</p>
<p>در مرحله بعد ، به دیرکتوری بروید و یک پروژه npm خالی را آغاز کنید. توجه داشته باشید که گزینه -y در اینجا بدان معنی است که شما از گزینه های تعاملی فرمان عبور میکنید. برای اجرای دستورها ، -y را از دستور حذف کنید:<br />$ cd my-blog</p>
<p>$ npm init -y</p>
<p>برای اطلاعات بیشتر در مورد این پیام ها ، می توانید مرحله 1 نحوه استفاده از ماژول های Node.js را با npm و pack.json دنبال کنید.<br />با پاسخهای پیش فرض موجود ، خروجی مشابه موارد زیر را دریافت خواهید کرد:<br />Output<br />Wrote to /&hellip;/my-blog/package.json:</p>
<p>{<br />&ldquo;name&rdquo;: &ldquo;my-blog&rdquo;,<br />&ldquo;version&rdquo;: &ldquo;1.0.0&rdquo;,<br />&ldquo;description&rdquo;: &ldquo;&rdquo;,<br />&ldquo;main&rdquo;: &ldquo;index.js&rdquo;,<br />&ldquo;scripts&rdquo;: {<br />&ldquo;test&rdquo;: &ldquo;echo &rdquo;Error: no test specified&rdquo; && exit 1&Prime;<br />},<br />&ldquo;keywords&rdquo;: [],<br />&ldquo;author&rdquo;: &ldquo;&rdquo;,<br />&ldquo;license&rdquo;: &ldquo;ISC&rdquo;<br />}</p>
<p>این دستور یک فایل pack.json حداقلی ایجاد می کند که شما به عنوان فایل پیکربندی پروژه npm خود استفاده می کنید. اکنون آماده تنظیم پیکربندی TypeScript در پروژه خود هستید.<br />دستور زیر را برای ستاپ ساده TypeScript اجرا کنید:<br />npm install typescript ts-node @types/node &ndash;save-dev</p>
<p>این دستور، سه بسته به عنوان متعلقات توسعه در پروژه شما نصب می کند:<br />Typescript: زنجیره ابزار TypeScript.<br />ts-node: بسته ای برای اجرای برنامه های TypeScript بدون کامپایل قبلی با JavaScript<br />@ types / node: تعاریف نوع TypeScript برای Node.js.<br />آخرین کاری که باید انجام دهید اضافه کردن فایل tsconfig.json است تا اطمینان حاصل شود که TypeScript به درستی برای برنامه ای که می خواهید بسازید پیکربندی شده است.<br />ابتدا ، دستور زیر را برای ایجاد فایل اجرا کنید:<br />$ nano tsconfig.json</p>
<p>کد JSON زیر را در فایل اضافه کنید:<br />my-blog/tsconfig.json<br />{<br />&ldquo;compilerOptions&rdquo;: {<br />&ldquo;sourceMap&rdquo;: true,<br />&ldquo;outDir&rdquo;: &ldquo;dist&rdquo;,<br />&ldquo;strict&rdquo;: true,<br />&ldquo;lib&rdquo;: [&ldquo;esnext&rdquo;],<br />&ldquo;esModuleInterop&rdquo;: true<br />}<br />}</p>
<p>فایل را ذخیره و از آن خارج شوید.<br />این یک پیکربندی استاندارد و حداقل برای یک پروژه TypeScript است. اگر می خواهید در مورد خصوصیات فردی فایل پیکربندی بیاموزید ، می توانید آنها را در مستندات TypeScript جستجو کنید.<br />شما پروژه ساده TypeScript خود را با استفاده از npm تنظیم کرده اید. سپس پایگاه داده PostgreSQL خود را با Docker تنظیم می کنید و Prisma را به آن وصل می کنید.<br />مرحله 2 &ndash; تنظیم Prisma با PostgreSQL<br />در این مرحله Prisma CLI را نصب می کنید ، فایل شماتیک اولیه Prisma خود را ایجاد کرده و PostgreSQL را با Docker تنظیم می کنید و Prisma را به آن وصل می کنید. شماتیک Prism فایل پیکربندی اصلی برای تنظیم Prisma شما است و شامل شماتیک پایگاه داده شما میباشد.<br />با نصب دستور Prisma CLI با دستور زیر شروع کنید:<br />$ npm install @prisma/cli &ndash;save-dev</p>
<p>به عنوان بهترین روش ، توصیه می شود که Prisma CLI را بصورت محلی در پروژه خود نصب کنید (برخلاف نصب جهانی). این امر به شما کمک می کند تا در صورت داشتن بیش از یک پروژه Prisma در دستگاه خود ، از تداخل نسخه ها جلوگیری کنید.<br />در مرحله بعد ، پایگاه داده PostgreSQL خود را با استفاده از Docker تنظیم می کنید. با دستور زیر یک فایل جدید Docker Compose ایجاد کنید:<br />$ nano docker-compose.yml</p>
<p>اکنون کد زیر را به فایل جدید ایجاد شده اضافه کنید:<br />my-blog/docker-compose.yml<br />version: &lsquo;3.8&rsquo;<br />services:<br />postgres:<br />image: postgres:10.3<br />restart: always<br />environment:<br />&ndash; POSTGRES_USER=sammy<br />&ndash; POSTGRES_PASSWORD=your_password<br />volumes:<br />&ndash; postgres:/var/lib/postgresql/data<br />ports:<br />&ndash; &lsquo;5432:5432&rsquo;<br />volumes:<br />postgres:</p>
<p>این فایل Docker Compose یک پایگاه داده PostgreSQL را تنظیم می کند که از طریق پورت 5432 کانتینر Docker قابل دسترسی است. همچنین توجه داشته باشید که اعتبارنامه دیتابیس در حال حاضر به عنوان sammy (کاربر) و your_password (رمز عبور) تعیین شده است. در تنظیم این اعتبارها با کاربر و رمز عبور دلخواه خود اختیارعمل کامل دارید. فایل را ذخیره کنید و از آن خارج شوید.<br />با استفاده از این ستاپ، سرور پایگاه داده PostgreSQL را با دستور زیر راه اندازی کنید:<br />$ docker-compose up -d</p>
<p>خروجی این دستور مشابه این است:<br />Output<br />Pulling postgres (postgres:10.3)&hellip;<br />10.3: Pulling from library/postgres<br />f2aa67a397c4: Pull complete<br />6de83ca23e55: Pull complete<br />. . .<br />Status: Downloaded newer image for postgres:10.3<br />Creating my-blog_postgres_1 &hellip; done</p>
<p>با دستور زیر می توانید تأیید کنید که سرور پایگاه داده در حال اجرا است:<br />$ docker ps</p>
<p>این چیزی شبیه به این نتیجه خواهد داد:<br />Output<br />CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES<br />8547f8e007ba postgres:10.3 &ldquo;docker-entrypoint.s&hellip;&rdquo; 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp my-blog_postgres_1</p>
<p>با اجرای سرور پایگاه داده ، اکنون می توانید ستاپ Prisma خود را ایجاد کنید. دستور زیر را از Prisma CLI اجرا کنید:<br />با این کار خروجی زیر چاپ می شود:<br />$ npx prisma init</p>
<p>خروجی زیر را پرینت میکند:<br />Output<br /><img class="emoji" draggable="false" src="https://s.w.org/images/core/emoji/13.0.0/svg/2714.svg" alt="✔" />&nbsp;Your Prisma schema was created at prisma/schema.prisma.<br />You can now open it in your favorite editor.</p>
<p>توجه داشته باشید که به عنوان بهترین کار ، باید تمام فراخوانی های Prisma CLI را با npxپیشونددار کنید. این کار اطمینان حاصل می کند نصب محلی شما در حال استفاده است.<br />پس از اجرای فرمان ، Prisma CLI یک پوشه جدید به نام prisma را در پروژه شما ایجاد کرد. این شامل دو فایل زیر است:<br />schema.prisma: فایل اصلی پیکربندی پروژه Prisma شما (شامل مدل داده شما خواهد بود(.<br />.env: یک فایل dotenv برای مشخص کردن URL اتصال به پایگاه داده خود.<br />برای اطمینان از اینکه Prisma از مکان پایگاه داده شما اطلاع دارد ، فایل .env را باز کنید و متغیر محیط DATABASE_URL را تنظیم کنید.<br />ابتدا فایل .env را باز کنید:<br />$ nano prisma/.env</p>
<p>اکنون می توانید متغیر محیط را به شرح زیر تنظیم کنید:<br />my-blog/prisma/.env<br />DATABASE_URL=&rdquo;postgresql://sammy:your_password@localhost:5432/my-blog?schema=public&rdquo;</p>
<p>اطمینان حاصل کنید که اعتبار دیتابیس را به مواردی که در فایل Docker Compose معرفی کرده اید تغییر دهید. برای کسب اطلاعات بیشتر در مورد قالب URL اتصال ، به اسناد Prisma مراجعه کنید.<br />پس از اتمام کار ، فایل را ذخیره کنید و خارج شوید.<br />در این مرحله ، پایگاه داده PostgreSQL خود را با Docker تنظیم کرده ، Prisma CLI را نصب کرده و Prisma را از طریق یک متغیر محیط به پایگاه داده وصل می کنید. در بخش بعدی ، مدل داده خود را تعیین کرده و جداول بانک اطلاعاتی خود را ایجاد خواهید کرد.<br />مرحله 3 &ndash; تعریف مدل داده خود و ایجاد جداول بانک اطلاعاتی<br />در این مرحله مدل داده خود را در فایل شماتیک Prisma تعریف خواهید کرد. سپس این مدل داده با Prisma Migrate به پایگاه داده نگاشت می شود که عبارت SQL را برای ایجاد جداول متناسب با مدل داده شما تولید و ارسال می کند. از آنجا که شما در حال ایجاد یک برنامه وبلاگ نویسی هستید ، ماهیت های اصلی برنامه، کاربران و پستها خواهند بود.<br />Prisma از زبان مدل سازی داده خود استفاده می کند تا شکل داده های برنامه شما را تعریف کند.<br />ابتدا فایل schema.prisma خود را با دستور زیر باز کنید:<br />$ nano prisma/schema.prisma</p>
<p>حالا تعاریف مدل زیر را به آن اضافه کنید. شما می توانید مدل ها را در پایین فایل ، درست پس از بلوک generator clientقرار دهید:<br />my-blog/prisma/schema.prisma<br />. . .<br />model User {<br />id Int @default(autoincrement()) @id<br />email String @unique<br />name String?<br />posts Post[]<br />}</p>
<p>model Post {<br />id Int @default(autoincrement()) @id<br />title String<br />content String?<br />published Boolean @default(false)<br />author User? @relation(fields: [authorId], references: [id])<br />authorId Int?<br />}</p>
<p>فایل را ذخیره کنید و از آن خارج شوید.<br />شما در حال تعریف دو مدل به نام های کاربر و پست هستید. هر یک از این موارد دارای تعدادی فیلد است که نشان دهنده ویژگی های مدل است. مدل ها در جداول بانک اطلاعاتی نگاشت می شوند. فیلد ها ستون های فردی را نشان می دهند.<br />همچنین توجه داشته باشید که بین این دو مدل رابطه یک به یک وجود دارد ، که توسط فیلدهای رابطه ای posts&nbsp; و author&nbsp; در User&nbsp; و Post مشخص شده است. این بدان معنی است که یک کاربر می تواند با بسیاری از پست ها در ارتباط باشد.<br />با استفاده از این مدل ها ، اکنون می توانید جداول مربوطه را با استفاده از Prisma Migrate در دیتابیس ایجاد کنید. در ترمینال خود دستور زیر را اجرا کنید:<br />$ npx prisma migrate save &ndash;experimental &ndash;create-db &ndash;name &ldquo;init&rdquo;</p>
<p>این دستور یک تغییر جدید در سیستم فایل شما ایجاد می کند. در اینجا یک مرور اجمالی از سه گزینه ارائه شده به این دستور آمده است:<br />&ndash;experimental: الزامی است زیرا Prisma Migrateدر حال حاضر در حالت آزمایشی قرار دارد.<br />&ndash;create-db: Prisma Migrate را قادر می سازد تا پایگاه داده ای را با نام وبلاگ من ایجاد کند که در URL اتصال مشخص شده است.<br />&ndash;name &ldquo;init&rdquo;: انتقال را مشخص می کند (برای نامگذاری پوشه جا به جایی ایجاد شده در سیستم فایل شما استفاده خواهد شد).<br />خروجی این دستور مشابه این است:<br />Output<br />New datamodel:</p>
<p>// This is your Prisma schema file,<br />// learn more about it in the docs: https://pris.ly/d/prisma-schema</p>
<p>datasource db {<br />provider = &ldquo;postgresql&rdquo;<br />url = env(&ldquo;DATABASE_URL&rdquo;)<br />}</p>
<p>generator client {<br />provider = &ldquo;prisma-client-js&rdquo;<br />}</p>
<p>model User {<br />id Int @default(autoincrement()) @id<br />email String @unique<br />name String?<br />posts Post[]<br />}</p>
<p>model Post {<br />id Int @default(autoincrement()) @id<br />title String<br />content String?<br />published Boolean @default(false)<br />author User? @relation(fields: [authorId], references: [id])<br />authorId Int?<br />}</p>
<p>Prisma Migrate just created your migration 20200811140708-init in</p>
<p>migrations/<br />└─ 20200811140708-init/<br />└─ steps.json<br />└─ schema.prisma<br />└─ README.md</p>
<p>در جتجوی فایل های migration که در دیرکتوری prisma/migrations ایجاد شده اند ، آزادانه عمل کنید.<br />برای اجرای جابه جایی در برابر پایگاه داده خود و ایجاد جداول برای مدل های Prisma ، دستور زیر را در ترمینال خود اجرا کنید:<br />$ npx prisma migrate up &ndash;experimental</p>
<p>خروجی زیر را دریافت خواهید کرد:<br />Output<br />. . .<br />Checking the datasource for potential data loss&hellip;</p>
<p>Database Changes:</p>
<p>Migration Database actions Status</p>
<p>20200811140708-init 2 CreateTable statements. Done&nbsp;<img class="emoji" draggable="false" src="https://s.w.org/images/core/emoji/13.0.0/svg/1f680.svg" alt="]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-05T13:50:54+04:30</pubDate>
	</item>
	<item>
		<title><![CDATA[چگونه می توان REST API را با Prisma و PostgreSQL ساخت]]></title>
		<description><![CDATA[<p>Prisma ، یک ابزار پایگاه داده منبع باز است. از سه ابزار اصلی تشکیل شده است:<br />Prisma Client: سازنده جستار خودکار و از نوع مطمئن برای Node.js و TypeScript.<br />Prisma Migrate: یک سیستم توصیفی انتقال و مدل سازی داده ها.<br />Prisma Studio: رابط کاربری گرافیکی برای مشاهده و ویرایش داده ها در پایگاه داده خود.<br />این ابزارها با هدف افزایش بهره وری یک برنامه نویس در گردش کار در پایگاه داده خود ارائه می شود. یکی از مهمترین مزایای Prisma میزان انتزاع ارائه شده است: به جای فهمیدن جستارهای پیچیده SQL یا انتقال شماتیک ها ، توسعه دهندگان برنامه می توانند هنگام استفاده از Prisma برای کار با پایگاه داده خود ، اطلاعات خود را به روشی بصری تر استدلال کنند.<br />در این آموزش ، شما یک API REST برای یک برنامه بلاگ نویسی کوچک در TypeScript با استفاده از Prisma و یک پایگاه داده PostgreSQL ایجاد خواهید کرد. پایگاه داده PostgreSQL را بصورت محلی با Docker تنظیم می کنید و مسیرهای REST API را با استفاده از Express پیاده سازی می کنید. در پایان آموزش ، یک وب سرور دارید که بصورت محلی روی دستگاه شما کار می کند که می تواند به درخواست های مختلف HTTP پاسخ دهد و داده ها را در دیتابیس بخواند و بنویسد.<br />پیش نیازها<br />این آموزش موارد زیر را فرض می کند:<br />Node.js v10 یا بالاتر روی دستگاه شما نصب شده باشد. برای تنظیم این گزینه می توانید از یکی از روش های نصب Node.js و ایجاد محیط توسعه محلی برای سیستم عامل خود استفاده کنید.<br />Docker نصب شده بر روی دستگاه تان (برای اجرای پایگاه داده PostgreSQL) . می توانید از طریق وب سایت Docker آن را روی macOS و Windows نصب کنید ، یا نحوه نصب و استفاده از Docker را برای توزیع های لینوکس دنبال کنید.<br />آشنایی اولیه با TypeScript و API های REST مفید است اما برای این آموزش لازم نیست.<br />مرحله 1 &ndash; ایجاد پروژه TypeScript<br />در این مرحله با استفاده از npm یک پروژه ساده TypeScript تنظیم می کنید. این پروژه پایه و اساس API REST است که می خواهید در طول دوره این آموزش بسازید.<br />ابتدا یک دایرکتوری جدید برای پروژه خود ایجاد کنید:<br />$ mkdir my-blog</p>
<p>در مرحله بعد ، به دیرکتوری بروید و یک پروژه npm خالی را آغاز کنید. توجه داشته باشید که گزینه -y در اینجا بدان معنی است که شما از گزینه های تعاملی فرمان عبور میکنید. برای اجرای دستورها ، -y را از دستور حذف کنید:<br />$ cd my-blog</p>
<p>$ npm init -y</p>
<p>برای اطلاعات بیشتر در مورد این پیام ها ، می توانید مرحله 1 نحوه استفاده از ماژول های Node.js را با npm و pack.json دنبال کنید.<br />با پاسخهای پیش فرض موجود ، خروجی مشابه موارد زیر را دریافت خواهید کرد:<br />Output<br />Wrote to /&hellip;/my-blog/package.json:</p>
<p>{<br />&ldquo;name&rdquo;: &ldquo;my-blog&rdquo;,<br />&ldquo;version&rdquo;: &ldquo;1.0.0&rdquo;,<br />&ldquo;description&rdquo;: &ldquo;&rdquo;,<br />&ldquo;main&rdquo;: &ldquo;index.js&rdquo;,<br />&ldquo;scripts&rdquo;: {<br />&ldquo;test&rdquo;: &ldquo;echo &rdquo;Error: no test specified&rdquo; && exit 1&Prime;<br />},<br />&ldquo;keywords&rdquo;: [],<br />&ldquo;author&rdquo;: &ldquo;&rdquo;,<br />&ldquo;license&rdquo;: &ldquo;ISC&rdquo;<br />}</p>
<p>این دستور یک فایل pack.json حداقلی ایجاد می کند که شما به عنوان فایل پیکربندی پروژه npm خود استفاده می کنید. اکنون آماده تنظیم پیکربندی TypeScript در پروژه خود هستید.<br />دستور زیر را برای ستاپ ساده TypeScript اجرا کنید:<br />npm install typescript ts-node @types/node &ndash;save-dev</p>
<p>این دستور، سه بسته به عنوان متعلقات توسعه در پروژه شما نصب می کند:<br />Typescript: زنجیره ابزار TypeScript.<br />ts-node: بسته ای برای اجرای برنامه های TypeScript بدون کامپایل قبلی با JavaScript<br />@ types / node: تعاریف نوع TypeScript برای Node.js.<br />آخرین کاری که باید انجام دهید اضافه کردن فایل tsconfig.json است تا اطمینان حاصل شود که TypeScript به درستی برای برنامه ای که می خواهید بسازید پیکربندی شده است.<br />ابتدا ، دستور زیر را برای ایجاد فایل اجرا کنید:<br />$ nano tsconfig.json</p>
<p>کد JSON زیر را در فایل اضافه کنید:<br />my-blog/tsconfig.json<br />{<br />&ldquo;compilerOptions&rdquo;: {<br />&ldquo;sourceMap&rdquo;: true,<br />&ldquo;outDir&rdquo;: &ldquo;dist&rdquo;,<br />&ldquo;strict&rdquo;: true,<br />&ldquo;lib&rdquo;: [&ldquo;esnext&rdquo;],<br />&ldquo;esModuleInterop&rdquo;: true<br />}<br />}</p>
<p>فایل را ذخیره و از آن خارج شوید.<br />این یک پیکربندی استاندارد و حداقل برای یک پروژه TypeScript است. اگر می خواهید در مورد خصوصیات فردی فایل پیکربندی بیاموزید ، می توانید آنها را در مستندات TypeScript جستجو کنید.<br />شما پروژه ساده TypeScript خود را با استفاده از npm تنظیم کرده اید. سپس پایگاه داده PostgreSQL خود را با Docker تنظیم می کنید و Prisma را به آن وصل می کنید.<br />مرحله 2 &ndash; تنظیم Prisma با PostgreSQL<br />در این مرحله Prisma CLI را نصب می کنید ، فایل شماتیک اولیه Prisma خود را ایجاد کرده و PostgreSQL را با Docker تنظیم می کنید و Prisma را به آن وصل می کنید. شماتیک Prism فایل پیکربندی اصلی برای تنظیم Prisma شما است و شامل شماتیک پایگاه داده شما میباشد.<br />با نصب دستور Prisma CLI با دستور زیر شروع کنید:<br />$ npm install @prisma/cli &ndash;save-dev</p>
<p>به عنوان بهترین روش ، توصیه می شود که Prisma CLI را بصورت محلی در پروژه خود نصب کنید (برخلاف نصب جهانی). این امر به شما کمک می کند تا در صورت داشتن بیش از یک پروژه Prisma در دستگاه خود ، از تداخل نسخه ها جلوگیری کنید.<br />در مرحله بعد ، پایگاه داده PostgreSQL خود را با استفاده از Docker تنظیم می کنید. با دستور زیر یک فایل جدید Docker Compose ایجاد کنید:<br />$ nano docker-compose.yml</p>
<p>اکنون کد زیر را به فایل جدید ایجاد شده اضافه کنید:<br />my-blog/docker-compose.yml<br />version: &lsquo;3.8&rsquo;<br />services:<br />postgres:<br />image: postgres:10.3<br />restart: always<br />environment:<br />&ndash; POSTGRES_USER=sammy<br />&ndash; POSTGRES_PASSWORD=your_password<br />volumes:<br />&ndash; postgres:/var/lib/postgresql/data<br />ports:<br />&ndash; &lsquo;5432:5432&rsquo;<br />volumes:<br />postgres:</p>
<p>این فایل Docker Compose یک پایگاه داده PostgreSQL را تنظیم می کند که از طریق پورت 5432 کانتینر Docker قابل دسترسی است. همچنین توجه داشته باشید که اعتبارنامه دیتابیس در حال حاضر به عنوان sammy (کاربر) و your_password (رمز عبور) تعیین شده است. در تنظیم این اعتبارها با کاربر و رمز عبور دلخواه خود اختیارعمل کامل دارید. فایل را ذخیره کنید و از آن خارج شوید.<br />با استفاده از این ستاپ، سرور پایگاه داده PostgreSQL را با دستور زیر راه اندازی کنید:<br />$ docker-compose up -d</p>
<p>خروجی این دستور مشابه این است:<br />Output<br />Pulling postgres (postgres:10.3)&hellip;<br />10.3: Pulling from library/postgres<br />f2aa67a397c4: Pull complete<br />6de83ca23e55: Pull complete<br />. . .<br />Status: Downloaded newer image for postgres:10.3<br />Creating my-blog_postgres_1 &hellip; done</p>
<p>با دستور زیر می توانید تأیید کنید که سرور پایگاه داده در حال اجرا است:<br />$ docker ps</p>
<p>این چیزی شبیه به این نتیجه خواهد داد:<br />Output<br />CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES<br />8547f8e007ba postgres:10.3 &ldquo;docker-entrypoint.s&hellip;&rdquo; 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp my-blog_postgres_1</p>
<p>با اجرای سرور پایگاه داده ، اکنون می توانید ستاپ Prisma خود را ایجاد کنید. دستور زیر را از Prisma CLI اجرا کنید:<br />با این کار خروجی زیر چاپ می شود:<br />$ npx prisma init</p>
<p>خروجی زیر را پرینت میکند:<br />Output<br /><img class="emoji" draggable="false" src="https://s.w.org/images/core/emoji/13.0.0/svg/2714.svg" alt="✔" />&nbsp;Your Prisma schema was created at prisma/schema.prisma.<br />You can now open it in your favorite editor.</p>
<p>توجه داشته باشید که به عنوان بهترین کار ، باید تمام فراخوانی های Prisma CLI را با npxپیشونددار کنید. این کار اطمینان حاصل می کند نصب محلی شما در حال استفاده است.<br />پس از اجرای فرمان ، Prisma CLI یک پوشه جدید به نام prisma را در پروژه شما ایجاد کرد. این شامل دو فایل زیر است:<br />schema.prisma: فایل اصلی پیکربندی پروژه Prisma شما (شامل مدل داده شما خواهد بود(.<br />.env: یک فایل dotenv برای مشخص کردن URL اتصال به پایگاه داده خود.<br />برای اطمینان از اینکه Prisma از مکان پایگاه داده شما اطلاع دارد ، فایل .env را باز کنید و متغیر محیط DATABASE_URL را تنظیم کنید.<br />ابتدا فایل .env را باز کنید:<br />$ nano prisma/.env</p>
<p>اکنون می توانید متغیر محیط را به شرح زیر تنظیم کنید:<br />my-blog/prisma/.env<br />DATABASE_URL=&rdquo;postgresql://sammy:your_password@localhost:5432/my-blog?schema=public&rdquo;</p>
<p>اطمینان حاصل کنید که اعتبار دیتابیس را به مواردی که در فایل Docker Compose معرفی کرده اید تغییر دهید. برای کسب اطلاعات بیشتر در مورد قالب URL اتصال ، به اسناد Prisma مراجعه کنید.<br />پس از اتمام کار ، فایل را ذخیره کنید و خارج شوید.<br />در این مرحله ، پایگاه داده PostgreSQL خود را با Docker تنظیم کرده ، Prisma CLI را نصب کرده و Prisma را از طریق یک متغیر محیط به پایگاه داده وصل می کنید. در بخش بعدی ، مدل داده خود را تعیین کرده و جداول بانک اطلاعاتی خود را ایجاد خواهید کرد.<br />مرحله 3 &ndash; تعریف مدل داده خود و ایجاد جداول بانک اطلاعاتی<br />در این مرحله مدل داده خود را در فایل شماتیک Prisma تعریف خواهید کرد. سپس این مدل داده با Prisma Migrate به پایگاه داده نگاشت می شود که عبارت SQL را برای ایجاد جداول متناسب با مدل داده شما تولید و ارسال می کند. از آنجا که شما در حال ایجاد یک برنامه وبلاگ نویسی هستید ، ماهیت های اصلی برنامه، کاربران و پستها خواهند بود.<br />Prisma از زبان مدل سازی داده خود استفاده می کند تا شکل داده های برنامه شما را تعریف کند.<br />ابتدا فایل schema.prisma خود را با دستور زیر باز کنید:<br />$ nano prisma/schema.prisma</p>
<p>حالا تعاریف مدل زیر را به آن اضافه کنید. شما می توانید مدل ها را در پایین فایل ، درست پس از بلوک generator clientقرار دهید:<br />my-blog/prisma/schema.prisma<br />. . .<br />model User {<br />id Int @default(autoincrement()) @id<br />email String @unique<br />name String?<br />posts Post[]<br />}</p>
<p>model Post {<br />id Int @default(autoincrement()) @id<br />title String<br />content String?<br />published Boolean @default(false)<br />author User? @relation(fields: [authorId], references: [id])<br />authorId Int?<br />}</p>
<p>فایل را ذخیره کنید و از آن خارج شوید.<br />شما در حال تعریف دو مدل به نام های کاربر و پست هستید. هر یک از این موارد دارای تعدادی فیلد است که نشان دهنده ویژگی های مدل است. مدل ها در جداول بانک اطلاعاتی نگاشت می شوند. فیلد ها ستون های فردی را نشان می دهند.<br />همچنین توجه داشته باشید که بین این دو مدل رابطه یک به یک وجود دارد ، که توسط فیلدهای رابطه ای posts&nbsp; و author&nbsp; در User&nbsp; و Post مشخص شده است. این بدان معنی است که یک کاربر می تواند با بسیاری از پست ها در ارتباط باشد.<br />با استفاده از این مدل ها ، اکنون می توانید جداول مربوطه را با استفاده از Prisma Migrate در دیتابیس ایجاد کنید. در ترمینال خود دستور زیر را اجرا کنید:<br />$ npx prisma migrate save &ndash;experimental &ndash;create-db &ndash;name &ldquo;init&rdquo;</p>
<p>این دستور یک تغییر جدید در سیستم فایل شما ایجاد می کند. در اینجا یک مرور اجمالی از سه گزینه ارائه شده به این دستور آمده است:<br />&ndash;experimental: الزامی است زیرا Prisma Migrateدر حال حاضر در حالت آزمایشی قرار دارد.<br />&ndash;create-db: Prisma Migrate را قادر می سازد تا پایگاه داده ای را با نام وبلاگ من ایجاد کند که در URL اتصال مشخص شده است.<br />&ndash;name &ldquo;init&rdquo;: انتقال را مشخص می کند (برای نامگذاری پوشه جا به جایی ایجاد شده در سیستم فایل شما استفاده خواهد شد).<br />خروجی این دستور مشابه این است:<br />Output<br />New datamodel:</p>
<p>// This is your Prisma schema file,<br />// learn more about it in the docs: https://pris.ly/d/prisma-schema</p>
<p>datasource db {<br />provider = &ldquo;postgresql&rdquo;<br />url = env(&ldquo;DATABASE_URL&rdquo;)<br />}</p>
<p>generator client {<br />provider = &ldquo;prisma-client-js&rdquo;<br />}</p>
<p>model User {<br />id Int @default(autoincrement()) @id<br />email String @unique<br />name String?<br />posts Post[]<br />}</p>
<p>model Post {<br />id Int @default(autoincrement()) @id<br />title String<br />content String?<br />published Boolean @default(false)<br />author User? @relation(fields: [authorId], references: [id])<br />authorId Int?<br />}</p>
<p>Prisma Migrate just created your migration 20200811140708-init in</p>
<p>migrations/<br />└─ 20200811140708-init/<br />└─ steps.json<br />└─ schema.prisma<br />└─ README.md</p>
<p>در جتجوی فایل های migration که در دیرکتوری prisma/migrations ایجاد شده اند ، آزادانه عمل کنید.<br />برای اجرای جابه جایی در برابر پایگاه داده خود و ایجاد جداول برای مدل های Prisma ، دستور زیر را در ترمینال خود اجرا کنید:<br />$ npx prisma migrate up &ndash;experimental</p>
<p>خروجی زیر را دریافت خواهید کرد:<br />Output<br />. . .<br />Checking the datasource for potential data loss&hellip;</p>
<p>Database Changes:</p>
<p>Migration Database actions Status</p>
<p>20200811140708-init 2 CreateTable statements. Done&nbsp;<img class="emoji" draggable="false" src="https://s.w.org/images/core/emoji/13.0.0/svg/1f680.svg" alt="]]></description>
		<link><![CDATA[]]></link>
		<pubDate>2020-09-02T13:48:21+04:30</pubDate>
	</item>
</channel>
</rss>