<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>هم‌روش نویسنده در بلاگ هم‌روش</title>
	<atom:link href="https://hamravesh.com/blog/author/hamravesh-blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://hamravesh.com/blog/author/hamravesh-blog/</link>
	<description>بلاگ رسمی هم‌روش</description>
	<lastBuildDate>Wed, 10 Jun 2026 10:10:19 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://hamravesh.com/blog/wp-content/uploads/2026/05/cropped-typeGeneral-32x32.png</url>
	<title>هم‌روش نویسنده در بلاگ هم‌روش</title>
	<link>https://hamravesh.com/blog/author/hamravesh-blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>حمله HTTP/2 Bomb چیست؟ کالبدشکافی حمله، تأثیر بر nginx و راهکارهای مقابله</title>
		<link>https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/</link>
					<comments>https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 15:09:45 +0000</pubDate>
				<category><![CDATA[شبکه]]></category>
		<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5266</guid>

					<description><![CDATA[<p>جلوگیری از حمله HTTP/2 Bomb به یکی از موضوعات مهم امنیت زیرساخت‌های وب تبدیل شده است. HTTP/2 Bomb یک تکنیک حمله Denial-of-Service (DoS) است که تیم تحقیقاتی شرکت Calif در ژوئن ۲۰۲۶ با کمک مدل هوش مصنوعی OpenAI Codex آن را معرفی کرد. </p>
<p>The post <a href="https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/">حمله HTTP/2 Bomb چیست؟ کالبدشکافی حمله، تأثیر بر nginx و راهکارهای مقابله</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>HTTP/2 Bomb یکی از جدیدترین تکنیک‌های حمله مبتنی بر HTTP/2 است که در ژوئن ۲۰۲۶ معرفی شد. این حمله می‌تواند با ترکیب دو مکانیزم استاندارد در پروتکل HTTP/2 مصرف حافظه سرور را افزایش دهد و باعث اختلال در سرویس شود. نکته مهم این است که HTTP/2 Bomb یک آسیب‌پذیری ناشناخته نیست و از ترکیب قابلیت‌هایی استفاده می‌کند که سال‌ها در HTTP/2 وجود داشته‌اند. در این مقاله بررسی می‌کنیم حمله HTTP/2 Bomb چیست و چه تفاوتی با ا دارد، چگونه باعث حمله مصرف حافظه سرور می‌شود و برای جلوگیری از این حمله و مقابله با حملات HTTP/2 چه راهکارهایی ارائه شده است.</p>



<div class="wp-block-group is-vertical is-content-justification-left is-layout-flex wp-container-core-group-is-layout-41619b2b wp-block-group-is-layout-flex">
<h2 class="wp-block-heading" id="h-آنچه-در-این-مطلب-می-خوانید">آنچه در این مطلب می‌خوانید</h2>



<h3 class="wp-block-heading" id="h-خلاصه">خلاصه</h3>



<p>HTTP/2 Bomb یک حمله DoS است که با ترکیب HPACK و Flow Control در HTTP/2 باعث مصرف غیرعادی حافظه و کندی شدید یا اختلال سرویس می‌شود. این مشکل بیشتر به نحوه پیاده‌سازی سرویس‌های سرورها مربوط است تا یک باگ مستقل.</p>



<h3 class="wp-block-heading" id="h-نکات-کلیدی">نکات کلیدی</h3>



<ul class="wp-block-list">
<li>روش سوءاستفاده، ترکیب HPACK و Flow Control در HTTP/2 است</li>



<li> هدف حمله، ایجاد فشار بر حافظه و کندی پایدار است و نه صرفاً ایجاد OOM</li>



<li> شدت اثر، وابسته به پیاده‌سازی در nginx، Apache، Envoy و IIS است</li>



<li> کنترل‌های ساده هدر، برای مقابله با این حمله کافی نیستند</li>



<li>راهکارهای جلوگیری، شامل به‌روزرسانی سرویس‌ها، محدودسازی هدر و stream، استفاده از CDN یا reverse proxy و اعمال memory limit است</li>



<li> نتیجه اصلی این است که ترکیب قابلیت‌های استاندارد می‌تواند سناریوی حمله جدید ایجاد کند</li>
</ul>
</div>



<h2 class="wp-block-heading" id="h-چگونه-ویژگی-های-http-2-به-سطح-حمله-تبدیل-شد">چگونه ویژگی‌های HTTP/2 به سطح حمله تبدیل شد؟</h2>



<p>پروتکل HTTP/2 با هدف بهبود عملکرد وب و کاهش سربار ارتباطات معرفی شد. قابلیت‌هایی مانند فشرده‌سازی هدرها (HPACK) و کنترل جریان (Flow-Control Window) باعث افزایش سرعت و کاهش مصرف پهنای باند شده‌اند، اما این دو ویژگی در حمله HTTP/2 Bomb توسط مهاجم به ابزار افزایش مصرف حافظه سرور تبدیل می‌شوند.&nbsp;موفقیت HTTP/2 Bomb به این دلیل است که یکی از این قابلیت‌ها حافظه را تخصیص می‌دهد و دیگری مانع آزاد شدن آن می‌شود. نتیجه، انباشت تدریجی حافظه و کاهش پاسخ‌دهی سرور است.</p>



<p><strong>HPACK:</strong> یک الگوریتم فشرده‌سازی وضعیت‌دار است که رشته‌های هدر را در یک جدول داینامیک ذخیره می‌کند. در درخواست‌های بعدی، به جای ارسال کامل هدر، تنها یک index ارسال می‌شود. این مکانیزم باعث کاهش سربار هدرها می‌شود، اما در ترکیب با کنترل جریان، مهاجم می‌تواند حافظه زیادی روی سرور رزرو کند.</p>



<p><strong>کنترل جریان (Flow-Control Window):</strong> به گیرنده امکان می‌دهد میزان داده قابل دریافت را محدود کند. مهاجم می‌تواند با ارسال داده کم و نگه داشتن اتصال باز، حافظه رزرو شده را آزاد نکند و در نتیجه باعث افزایش مصرف حافظه، کاهش کارایی و افت پاسخ‌دهی سرور شود.</p>



<p>این دو مکانیزم دقیقا موتور اصلی HTTP/2 Bomb هستند. در بخش بعد، سازوکار دقیق حمله و ترکیب دو تکنیک را مرحله به مرحله بررسی می‌کنیم.</p>



<h2 class="wp-block-heading" id="h-کالبدشکافی-حمله-http-2-bomb-چگونه-کار-می-کند">کالبدشکافی حمله؛ HTTP/2 Bomb چگونه کار می‌کند؟</h2>



<p>هسته حمله از ترکیب دو قابلیت داخلی HTTP/2 ساخته شده است که هر یک به تنهایی برای بهبود عملکرد وب استفاده می‌شدند، اما کنار هم مسیر جدیدی برای حمله DoS ایجاد کرده‌اند.</p>



<h3 class="wp-block-heading" id="h-hpack-bomb-وقتی-یک-بایت-به-هزاران-بایت-تبدیل-می-شود">HPACK Bomb: وقتی یک بایت به هزاران بایت تبدیل می‌شود</h3>



<p>HPACK هدرها را در جدول داینامیک ذخیره می‌کند. مهاجم ابتدا یک هدر را ثبت و سپس هزاران بار تنها با یک index به آن ارجاع می‌دهد. حجم داده ارسالی کم است، اما سرور برای هر ارجاع باید اطلاعات مربوط به هدر را در حافظه ایجاد کند. برخلاف نسخه‌های قدیمی HPACK Bomb، حتی هدرهای کوچک یا خالی باعث مصرف حافظه قابل توجه می‌شوند. همچنین محدودیت‌های قدیمی روی حجم هدرهای Decode شده در برابر این روش بی‌اثر هستند.</p>



<h3 class="wp-block-heading" id="h-flow-control-چگونه-حافظه-آزاد-نمی-شود">Flow Control: چگونه حافظه آزاد نمی‌شود؟</h3>



<p>کنترل جریان HTTP/2 به سرور امکان می‌دهد میزان داده قابل دریافت را محدود کند. مهاجم پس از ایجاد تخصیص حافظه، اندازه پنجره را روی صفر قرار داده و با ارسال WINDOW_UPDATE کوچک، اتصال را باز نگه می‌دارد. حافظه اشغال‌شده برای مدت طولانی باقی می‌ماند و سرور تحت فشار قرار می‌گیرد.</p>



<p>در یک حمله واقعی، هدف مهاجم لزوماً رساندن فرایند به وضعیت OOM (مخفف Out-of-Memory) نیست؛ وضعیتی که در آن سیستم به دلیل کمبود حافظه، برخی پردازش‌ها را به‌طور اجباری متوقف می‌کند. اگر در حالت OOM، پردازش توسط OOM Killer متوقف شود، معمولاً Worker به‌سرعت مجدداً راه‌اندازی می‌شود و بخشی از اثر حمله از بین می‌رود. راهبرد مؤثرتر این است که مصرف حافظه درست در آستانه فعال شدن OOM نگه داشته شود؛ به‌طوری که سیستم ناچار به استفاده گسترده از حافظه Swap شود. در این وضعیت، اگرچه سرویس کاملاً از دسترس خارج نمی‌شود، اما زمان پاسخ‌دهی به‌شدت افزایش می‌یابد و عملکرد سایر درخواست‌ها نیز به‌طور محسوسی کاهش پیدا می‌کند.</p>



<h2 class="wp-block-heading" id="h-اثر-واقعی-http-2-bomb-روی-سرورها">اثر واقعی HTTP/2 Bomb روی سرورها</h2>



<p>HTTP/2 Bomb فقط یک ایده تئوریک نیست. محققان <a href="https://blog.calif.io/p/codex-discovered-a-hidden-http2-bomb" type="link" id="https://blog.calif.io/p/codex-discovered-a-hidden-http2-bomb">Calif</a> این حمله را روی چند مورد از پرکاربردترین سرورهای وب آزمایش کرده‌اند و نتایج نشان می‌دهد که پیاده‌سازی HTTP/2 در هر محصول، تاثیر مستقیمی بر شدت حمله دارد.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1920" height="1080" src="https://hamravesh.com/blog/wp-content/uploads/2026/06/hamravesh-discover-http-2-bomb-dos-attack01.gif" alt="" class="wp-image-5284"/><figcaption class="wp-element-caption">روند افزایش مصرف حافظه در آپاچی httpd، سپس Envoy، انجین‌اکس و مایکروسافت IIS در آزمایش محققان Calif (به ترتیب از بالا سمت چپ و در جهت عقربه‌های ساعت مشاهده کنید).  تصویر با سرعت ۲X نمایش داده شده است.</figcaption></figure>



<p>نتایج این آزمایش‌ها در جدول زیر خلاصه شده است:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>سرور</strong></td><td><strong>ضریب بزرگنمایی</strong></td><td><strong>زمان تقریبی مصرف کامل حافظه</strong></td></tr><tr><td><strong>Envoy 1.37.2</strong></td><td>حدود ۵۷۰۰:۱</td><td>حدود ۱۰ ثانیه برای ۳۲GB</td></tr><tr><td><strong>Apache httpd 2.4.67</strong></td><td>حدود ۴۰۰۰:۱</td><td>حدود ۱۸ ثانیه برای ۳۲GB</td></tr><tr><td><strong>nginx 1.29.7</strong></td><td>حدود ۷۰:۱</td><td>حدود ۴۵ ثانیه برای ۳۲GB</td></tr><tr><td><strong>Microsoft IIS (Windows Server 2025)</strong></td><td>حدود ۶۸:۱</td><td>حدود ۴۵ ثانیه (تا ۶۴GB)</td></tr></tbody></table></figure>



<p>منظور از ضریب بزرگنمایی (Amplification Ratio) این است که هر یک بایت داده‌ای که مهاجم ارسال می‌کند، چه مقدار حافظه روی سرور اشغال می‌شود. هرچه این عدد بزرگ‌تر باشد، مهاجم با پهنای باند کمتر می‌تواند فشار بیشتری به سرور وارد کند.</p>



<p>نتایج آزمایش‌ها نشان می‌دهد که Envoy و Apache httpd بیشترین تاثیر را از این حمله می‌پذیرند. در سمت مقابل، nginx و Microsoft IIS ضریب بزرگنمایی کمتری دارند، اما همچنان در برابر حمله HTTP/2 Bomb آسیب‌پذیر هستند. به‌طورکلی، جلوگیری از حمله HTTP/2 Bomb نیازمند شناخت دقیق همین تفاوت‌ها در پیاده‌سازی سرورهاست.</p>



<p>محققان تفاوت نتایج را به جزئیات پیاده‌سازی HPACK و نحوه مدیریت حافظه در محصولات مختلف نسبت می‌دهند. در Apache httpd و Envoy، بازسازی هدرها و ساختارهای داخلی مرتبط با آن‌ها حافظه بیشتری مصرف می‌کند، در حالی که nginx و IIS سربار کمتری دارند. به همین دلیل ضریب بزرگنمایی حمله در آنها متفاوت است.</p>



<h2 class="wp-block-heading" id="h-تکنیک-های-دور-زدن-محدودیت-ها-bypass-techniques">تکنیک‌های دور زدن محدودیت‌ها (Bypass Techniques)</h2>



<p>یکی از دلایل خطرناک‌تر بودن HTTP/2 Bomb نسبت به HPACK Bomb کلاسیک، توانایی آن در دور زدن مکانیزم‌های دفاعی موجود است. در ادامه، دو تکنیک اصلی این حمله برای عبور از محدودیت‌های حجم و تعداد هدرها را بررسی می‌کنیم.</p>



<h3 class="wp-block-heading" id="h-عبور-از-محدودیت-حجم-هدرها">عبور از محدودیت حجم هدرها</h3>



<p>پس از معرفی HPACK Bomb در سال ۲۰۱۶، بسیاری از پیاده‌سازی‌های HTTP/2 محدودیتی برای Total Decoded Header Size در نظر گرفتند تا از بازسازی هدرهای بسیار بزرگ جلوگیری کنند.</p>



<p>در HTTP/2 Bomb، هدرها می‌توانند بسیار کوچک یا تقریبا خالی باشند و بخش عمده مصرف حافظه از metadata و ساختارهای داخلی HPACK ناشی می‌شود. در نتیجه محدودیت حجم هدرهای Decode شده عملا اثرگذار نیست و دفاع طراحی‌شده برای نسخه‌های قدیمی‌تر، کارایی خود را از دست می‌دهد.</p>



<h3 class="wp-block-heading" id="h-دور-زدن-محدودیت-تعداد-هدرها-با-cookie-crumbs">دور زدن محدودیت تعداد هدرها با Cookie Crumbs</h3>



<p>برخی پیاده‌سازی‌ها مانند Apache httpd و Envoy علاوه بر محدودیت حجم، تعداد Header Fieldها را هم کنترل می‌کنند تا مهاجم نتواند با ارسال تعداد زیادی هدر کوچک، منابع سرور را مصرف کند.</p>



<p>HTTP/2 امکان تقسیم یک Cookie بزرگ به چند Cookie Header کوچک‌تر (Cookie Crumbs) را فراهم می‌کند (RFC 9113). این قابلیت برای بهبود فشرده‌سازی طراحی شده است، اما در آزمایش‌ها مشخص شد که در برخی شرایط، این Crumbها در Apache و Envoy در شمارش محدودیت تعداد هدرها لحاظ نمی‌شوند.</p>



<p>در نتیجه، مهاجم می‌تواند بدون فعال شدن محدودیت تعداد هدر، تعداد زیادی Cookie Crumb ایجاد کند و هر Crumb هم ورودی جدیدی در HPACK ایجاد می‌کند و سربار حافظه را افزایش می‌دهد.</p>



<h2 class="wp-block-heading" id="h-وضعیت-وصله-ها-در-سرورهای-مختلف">وضعیت وصله‌ها در سرورهای مختلف</h2>



<p>پس از افشای حمله HTTP/2 Bomb، مهم‌ترین سوال برای مدیران سیستم و مهندسان امنیت این است که سرورهای ما ایمن هستند؟ چه اقداماتی برای جلوگیری از حمله HTTP/2 Bomb باید انجام داد؟</p>



<p>محققان Calif قبل از انتشار عمومی، آسیب‌پذیری را به تیم‌های توسعه گزارش کردند. با این حال، وضعیت وصله‌ها (پچ‌ها) در زمان انتشار برای سرورهای مختلف متفاوت بود. جدول زیر خلاصه‌ای از وضعیت هر سرور را نشان می‌دهد:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>سرور</strong></td><td><strong>وضعیت</strong></td><td><strong>نسخه / توضیح</strong></td></tr><tr><td><strong>nginx</strong></td><td>وصله شده</td><td>1.29.8+ – اضافه شدن max_headers با پیش‌فرض ۱۰۰۰</td></tr><tr><td><strong>Apache httpd</strong></td><td>وصله شده</td><td>رفع شده در &nbsp;<a href="https://github.com/icing/mod_h2/releases">mod_http2 v2.0.41</a> &#8211; اگر قصد آپگرید ندارید، پیشنهاد می‌شود پروتکل http/1.1 را طوری تنظیم کنید که HTTP/2 غیر فعال شود.</td></tr><tr><td><strong>Microsoft IIS</strong></td><td>وصله نشده</td><td>در زمان نگارش این مقاله، مایکروسافت هنوز جزئیات فنی یا وصله رسمی برای IIS منتشر نکرده است.</td></tr><tr><td><strong>Envoy</strong></td><td>در حال بررسی</td><td>وصله منتشر شده، اما محققان همچنان در حال راستی‌آزمایی دقیق‌تر هستند. تا تأیید نهایی، بهتر است HTTP/2 را موقتاً غیرفعال کنید.</td></tr><tr><td><strong>Cloudflare Pingora</strong></td><td>محافظت معماری</td><td>به طور خودکار در برابر حمله محافظت ایجاد می‌کند</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-راهکارهای-کاهش-آسیب-mitigation-strategies">راهکارهای کاهش آسیب (Mitigation Strategies)</h2>



<p>چند اقدام موثر برای جلوگیری از حمله HTTP/2 Bomb وجود دارند که می‌توانید آن‌ها را اجرا کنید. این اقدامات را می‌توان در چند سطح اصلی اجرا کرد:</p>



<h3 class="wp-block-heading" id="h-ارتقا-به-نسخه-وصله-شده">ارتقا به نسخه وصله‌شده</h3>



<p>نصب سریع وصله‌های رسمی اولین و مهم‌ترین گام است. برای سرورهایی که وصله منتشر شده، نسخه‌ها باید به‌روزرسانی شوند:</p>



<ul class="wp-block-list">
<li>انجین‌اکس: نسخه 1.29.8+</li>



<li>آپاچی httpd: نسخه <a href="https://github.com/icing/mod_h2/releases" type="link" id="https://github.com/icing/mod_h2/releases" target="_blank" rel="noreferrer noopener">mod_http2 v2.0.41</a></li>
</ul>



<h3 class="wp-block-heading" id="h-غیرفعال-کردن-موقت-http-2">غیرفعال کردن موقت HTTP/2</h3>



<p>در سرورهایی که وصله در دسترس نیست یا قصد آصب وصله را ندارید، غیرفعال کردن پروتکل HTTP/2 و بازگشت به HTTP/1.1، می‌تواند به عنوان راهکار موقت عمل کند:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>سرور</strong></td><td><strong>دستور غیرفعال‌سازی</strong></td></tr><tr><td><strong>nginx</strong></td><td>اگر قصد آپگرید ندارید، HTTP/2 را با <code>http2 off;</code> غیر فعال کنید.</td></tr><tr><td><strong>Apache httpd</strong></td><td>اگر قصد آپگرید ندارید، پیشنهاد می‌شود پروتکل http/1.1 را طوری تنظیم کنید که HTTP/2 غیر فعال شود.</td></tr><tr><td><strong>سایر سرورها</strong></td><td>مستندات فروشنده را بررسی کنید</td></tr></tbody></table></figure>



<h3 class="wp-block-heading" id="h-استفاده-از-reverse-proxy-یا-cdn">استفاده از Reverse Proxy یا CDN</h3>



<p>قرار دادن سرور پشت یک Reverse Proxy یا CDN که وصله شده یا به‌طور ذاتی محافظت دارد، می‌تواند حمله را قبل از رسیدن به سرور اصلی متوقف کند. برای مثال:</p>



<ul class="wp-block-list">
<li>استفاده از Cloudflare که به صورت خودکار محافظت ارائه می‌کند</li>



<li>استفاده از nginx وصله‌شده به عنوان پروکسی جلوی سرورهای آسیب‌پذیر، محافظت ایجاد می‌کند.</li>
</ul>



<h3 class="wp-block-heading" id="h-اعمال-محدودیت-روی-هدرها-و-streamها">اعمال محدودیت روی هدرها و Streamها</h3>



<p>به‌طور کلی، «حداکثر اندازه هدرهای Decode شده» و «حداکثر تعداد هدرها» دو محدودیت متفاوت هستند و هر سرور باید هر دو را اعمال کند. هر سرویس یا مؤلفه‌ای که ترافیک HTTP/2 را دریافت و پردازش می‌کند (مانند وب‌سرورها، Reverse Proxyها، لود بالانسرها و API Gatewayها)، باید تعداد فیلدهای هدر در هر درخواست را (از جمله Cookie Crumbها) مستقل از اندازه کلی آن‌ها محدود کند. همچنین، مدت‌زمان مجاز برای باز ماندن یک stream متوقف‌شده را بدون توجه به فعالیت WINDOW_UPDATE مشخص و محدود سازد.</p>



<h3 class="wp-block-heading" id="h-محدودیت-حافظه-memory-limits">محدودیت حافظه (Memory Limits)</h3>



<p>اگر در حال حاضر امکان اعمال این کنترل‌ها را ندارید، بهتر است برای هر ورکر محدودیت حافظه تعریف کنید؛ برای مثال با استفاده از cgroups، دستور <code>ulimit -v</code> یا محدودیت‌های حافظه در کانتینرها. این محدودیت‌ها باید به اندازه‌ای سخت‌گیرانه باشند که در صورت وقوع حمله، ورکر آسیب‌دیده پیش از آنکه کل سیستم را وارد Swap کند، توسط OOM Killer متوقف و مجدداً راه‌اندازی شود. یک ورکر معمولاً به چندین گیگابایت حافظه نیاز ندارد؛ بنابراین متوقف شدن زودهنگام یک ورکر، سناریوی بسیار بهتری نسبت به این است که مهاجم بتواند کل سرور را برای مدت طولانی در آستانه ۹۵ درصد مصرف حافظه نگه دارد.</p>



<h3 class="wp-block-heading" id="h-محدودیت-نرخ-rate-limiting">محدودیت نرخ (Rate Limiting)</h3>



<p>کنترل نرخ ایجاد اتصال‌ها یا استریم‌ها به ازای هر IP می‌تواند سرعت اجرای حمله را کاهش دهد و فرصت واکنش برای تیم امنیتی فراهم کند. این اقدام به تنهایی کافی نیست اما موثر است.</p>



<h2 class="wp-block-heading" id="h-نقش-هوش-مصنوعی-در-کشف-حمله-codex-effect">نقش هوش مصنوعی در کشف حمله (Codex Effect)</h2>



<p>HTTP/2 Bomb توسط تیم امنیتی Calif با کمک OpenAI Codex شناسایی شد. در این پژوهش، Codex دو تکنیک شناخته‌شده یعنی HPACK Bomb و سوءاستفاده از HTTP/2 Flow Control را کنار هم قرار داد و اثر ترکیبی آن‌ها را آشکار کرد.</p>



<p>این یافته نشان می‌دهد مدل‌های هوش مصنوعی می‌توانند در تحلیل RFCها، مستندات فنی و رفتار پروتکل‌ها به کشف سناریوهای حمله جدید کمک کنند. با این حال، هوش مصنوعی در این پژوهش نقش یک ابزار کمکی برای تحلیل و کشف الگوها را داشت و جایگزین پژوهشگران امنیتی نشد.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>HTTP/2 Bomb یک آسیب‌پذیری جدید در پروتکل HTTP/2 نیست، بلکه روشی برای ترکیب دو قابلیت استاندارد این پروتکل یعنی HPACK و Flow Control است. همین موضوع باعث شد مکانیزم‌هایی که سال‌ها برای مقابله با HPACK Bomb یا محدود کردن اندازه هدرها طراحی شده بودند، در برخی پیاده‌سازی‌ها نتوانند از این حمله جلوگیری کنند.</p>



<p>نتایج آزمایش‌ها نشان می‌دهد شدت تأثیر HTTP/2 Bomb به نحوه پیاده‌سازی HTTP/2 در هر محصول وابسته است. هرچند nginx ،Apache httpd ،Envoy و Microsoft IIS همگی تحت تأثیر این تکنیک قرار گرفته‌اند، اما میزان مصرف حافظه و ضریب بزرگنمایی حمله در آن‌ها یکسان نیست.</p>



<p>برای کاهش ریسک و جلوگیری از حمله HTTP/2 Bomb، اولین اقدام باید ارتقا به نسخه‌های وصله‌شده باشد. در محیط‌هایی که امکان به‌روزرسانی فوری وجود ندارد، محدود کردن تعداد هدرها، کنترل طول عمر Streamها، اعمال محدودیت حافظه برای Workerها و استفاده از Reverse Proxyها یا CDNهای محافظت‌شده می‌تواند اثر حمله را کاهش دهد.</p>



<p>شاید مهم‌ترین درس HTTP/2 Bomb این باشد که در امنیت نرم‌افزارها، همیشه مشکل از یک قابلیت منفرد نیست. گاهی ترکیب چند رفتار کاملاً استاندارد و قانونی می‌تواند به یک روش حمله جدید تبدیل شود که سال‌ها از دید پژوهشگران پنهان مانده است.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/">حمله HTTP/2 Bomb چیست؟ کالبدشکافی حمله، تأثیر بر nginx و راهکارهای مقابله</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/discover-http-2-bomb-dos-attack/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Wiki.js چیست؟ مقایسه با رقبا و راهنمای نصب</title>
		<link>https://hamravesh.com/blog/what-is-wikijs/</link>
					<comments>https://hamravesh.com/blog/what-is-wikijs/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 12:30:53 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5220</guid>

					<description><![CDATA[<p>Wiki.js یکی از محبوب‌ترین راهکارهای متن‌باز برای ایجاد پایگاه دانش و مستندسازی سازمانی است که به تیم‌ها کمک می‌کند مستندات، فرایندها و دانش فنی خود را به‌جای فایل‌ها و ابزارهای پراکنده، در یک مخزن متمرکز نگهداری و مدیریت کنند. در این مقاله بررسی می‌کنیم که Wiki.js چیست، چه مزایا و معایبی دارد، چه تفاوتی با [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-wikijs/">Wiki.js چیست؟ مقایسه با رقبا و راهنمای نصب</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Wiki.js یکی از محبوب‌ترین راهکارهای متن‌باز برای ایجاد پایگاه دانش و مستندسازی سازمانی است که به تیم‌ها کمک می‌کند مستندات، فرایندها و دانش فنی خود را به‌جای فایل‌ها و ابزارهای پراکنده، در یک مخزن متمرکز نگهداری و مدیریت کنند. در این مقاله بررسی می‌کنیم که Wiki.js چیست، چه مزایا و معایبی دارد، چه تفاوتی با ابزارهای مشابه دارد و مراحل نصب Wiki.js با Docker چگونه انجام می‌شود.</p>



<h2 class="wp-block-heading" id="h-ابزار-wiki-js-چیست-و-چه-ویژگی-هایی-دارد">ابزار Wiki.js چیست و چه ویژگی‌هایی دارد؟</h2>



<p>Wiki.js یک نرم‌افزار ویکی سازمانی متن‌باز و Self-Hosted است که برای مدیریت دانش، مستندسازی سازمانی و ایجاد ویکی داخلی سازمان استفاده می‌شود. این پلتفرم بر پایه Node.js توسعه یافته و از <a href="https://hamravesh.com/blog/what-is-postgresql/" type="link" id="https://hamravesh.com/blog/what-is-postgresql/" target="_blank" rel="noreferrer noopener">دیتابیس PostgreSQL</a> برای ذخیره‌سازی داده‌ها استفاده می‌کند.</p>



<p>سازمان‌ها می‌توانند Wiki.js را روی سرور اختصاصی، ماشین مجازی یا کانتینرهای Docker اجرا کنند و مدیریت مستندات، دسترسی کاربران و زیرساخت نرم‌افزار را در محیط خود انجام دهند. همچنین این پلتفرم از روش‌های مختلف احراز هویت، ویرایش محتوا و یکپارچه‌سازی با ابزارهای توسعه، پشتیبانی می‌کند. برخی از قابلیت‌های اصلی Wiki.js عبارت‌اند از:</p>



<ul class="wp-block-list">
<li>ویرایشگرهای چندگانه: پشتیبانی از Markdown، ویرایشگر بصری (WYSIWYG) و HTML برای گروه‌های مختلف کاربران</li>



<li>همگام‌سازی با Git: امکان اتصال به مخازن Git برای نسخه‌بندی و نگهداری مستندات</li>



<li>احراز هویت سازمانی: پشتیبانی از LDAP ،SAML و OAuth2 برای مدیریت دسترسی کاربران</li>



<li>معماری ماژولار: امکان فعال یا غیرفعال کردن ماژول‌های مختلف بر اساس نیاز سازمان</li>
</ul>



<h2 class="wp-block-heading" id="h-چرا-شرکت-ها-به-wiki-داخلی-نیاز-دارند">چرا شرکت‌ها به Wiki داخلی نیاز دارند؟</h2>



<p>ویکی داخلی سازمان ابزاری برای ثبت و نگهداری دانش سازمانی، مستندات فنی و فرایندهای کاری است. استفاده از این ابزارها به تیم‌ها کمک می‌کند دانش و مستندات سازمانی به افراد وابسته نباشد و در یک پایگاه دانش متمرکز نگهداری شود. رایج‌ترین کاربردهای یک نرم‌افزار ویکی سازمانی عبارت‌اند از:</p>



<ul class="wp-block-list">
<li>ثبت Runbookها و دستورالعمل‌های عملیاتی برای عیب‌یابی و مدیریت رخدادها</li>



<li>مستندسازی معماری سیستم، سرویس‌ها، تنظیمات و فرایندهای فنی</li>



<li>تسهیل فرایند آنبوردینگ نیروهای جدید از طریق دسترسی به مستندات متمرکز</li>



<li>مدیریت سیاست‌ها، رویه‌ها و سطوح دسترسی در بخش‌های مختلف سازمان</li>
</ul>



<h2 class="wp-block-heading" id="h-مزایای-wiki-js-چیست">مزایای Wiki.js چیست؟</h2>



<p>ابزار Wiki.js به‌عنوان یک نرم‌افزار ویکی سازمانی، امکانات موردنیاز تیم‌های فنی و کاربران غیرفنی را در یک پلتفرم واحد ارائه می‌کند. بررسی مزایای زیر به خوبی نشان می‌دهد که دلیل محبوبیت ویکی جی اس چیست:</p>



<ul class="wp-block-list">
<li>ویرایشگرهای چندگانه: Wiki.js از Markdown، ویرایشگر بصری (WYSIWYG) و HTML پشتیبانی می‌کند. این موضوع باعث می‌شود کاربران فنی و غیرفنی بتوانند با روش موردنظر خود مستندات را ایجاد و ویرایش کنند.</li>



<li>همگام‌سازی با Git: امکان اتصال به مخازن GitHub و GitLab برای نسخه‌بندی و نگهداری مستندات فراهم است. این قابلیت به تیم‌های فنی کمک می‌کند تاریخچه تغییرات مستندات را مدیریت کنند، از محتوا نسخه پشتیبان داشته باشند و در صورت نیاز، مستندات را بین زیرساخت‌ها یا محیط‌های مختلف جابه‌جا کنند.</li>



<li>احراز هویت سازمانی: Wiki.js از LDAP ،SAML ،OAuth2 و احراز هویت دو عاملی (2FA) پشتیبانی می‌کند و امکان یکپارچه‌سازی با زیرساخت‌های هویتی سازمان را فراهم می‌کند.</li>



<li>نصب و استقرار ساده: نصب Wiki.js با Docker و Docker Compose به‌سادگی انجام می‌شود و فرایند راه‌اندازی آن روی بسیاری از محیط‌های لینوکسی از جمله نصب Wiki.js روی Ubuntu هم پیچیدگی زیادی ندارد.</li>



<li>عملکرد سبک: این پلتفرم بر پایه Node.js توسعه یافته و برای اجرا به منابع سخت‌افزاری محدودی نیاز دارد.</li>



<li>پشتیبانی از دیاگرام و مستندات فنی: امکان استفاده از ابزارهایی مانند draw.io ،Mermaid و PlantUML برای ایجاد فلوچارت‌ها، نمودارها و مستندات معماری وجود دارد.</li>



<li>معماری ماژولار: مدیر سیستم می‌تواند برخی قابلیت‌ها و ماژول‌ها را بر اساس نیاز سازمان فعال یا غیرفعال کند.</li>



<li>پشتیبانی از زبان‌های مختلف و RTL: ویکی جی اس از زبان‌های مختلف پشتیبانی می‌کند و با زبان‌های راست‌به‌چپ نیز سازگار است. این قابلیت برای ایجاد یک ویکی داخلی سازمان به زبان فارسی کاربردی است.</li>



<li>مدیریت دسترسی: امکان تعریف سطوح دسترسی مبتنی بر گروه‌ها و مسیر صفحات (Path-based Permissions) برای کنترل دسترسی کاربران وجود دارد.</li>



<li>موتور جستجو: سیستم جستجوی داخلی مبتنی بر PostgreSQL امکان جستجوی متن کامل در مستندات را فراهم می‌کند و در برخی سناریوها قابلیت استفاده از Elasticsearch نیز وجود دارد.</li>



<li>شخصی‌سازی و چندسکویی: این ابزار از حالت روشن و تاریک پشتیبانی می‌کند و امکان استفاده از CSS و JavaScript سفارشی را در اختیار مدیران قرار می‌دهد. همچنین روی لینوکس، ویندوز و macOS قابل اجرا است.</li>
</ul>



<h2 class="wp-block-heading" id="h-معایب-ویکی-جی-اس-چیست">معایب ویکی جی اس چیست؟</h2>



<p>برای انتخاب هوشمندانه یک نرم‌افزار، شناخت مزایا کافی نیست و باید بدانید چالش‌ها و معایب Wiki.js چیست. مهم‌ترین نقاط ضعف این ابزار عبارتند از:</p>



<ul class="wp-block-list">
<li>وضعیت نسخه v3: توسعه نسخه سوم Wiki.js طی چند سال گذشته ادامه داشته است، اما تا سال ۲۰۲۶ نسخه v2 همچنان نسخه اصلی و پایدار محسوب می‌شود. به همین دلیل بهتر است ارزیابی فنی بر اساس قابلیت‌های موجود انجام شود.</li>



<li>عدم پشتیبانی از ویرایش هم‌زمان: Wiki.js قابلیت ویرایش هم‌زمان یک صفحه توسط چند کاربر را مشابه ابزارهایی مانند Confluence یا Google Docs ارائه نمی‌کند.</li>



<li>وابستگی به PostgreSQL: هرچند پشتیبانی از چند پایگاه داده در برخی بخش‌ها مطرح شده است، اما PostgreSQL همچنان مهم‌ترین و رایج‌ترین گزینه برای استفاده از قابلیت‌های اصلی پلتفرم محسوب می‌شود.</li>



<li>برخی قابلیت‌های محدود یا در حال توسعه: بخش‌هایی مانند سیستم نظرات یا برخی قابلیت‌های ویرایشگر بصری ممکن است نسبت به برخی رقبا امکانات کمتری در اختیار کاربران قرار دهند.</li>



<li>نبود سیستم Template داخلی: برای ساخت صفحات تکرارشونده، قابلیت قالب‌سازی داخلی محدودی وجود دارد و در برخی سناریوها لازم است ساختار صفحات به‌صورت دستی ایجاد شود.</li>



<li>منحنی یادگیری API: رابط برنامه‌نویسی کاربردی (API) مبتنی بر GraphQL انعطاف‌پذیری بالایی ارائه می‌دهد، اما ممکن است برای تیم‌هایی که تجربه کار با GraphQL ندارند به زمان بیشتری برای یادگیری نیاز داشته باشد.</li>
</ul>



<h2 class="wp-block-heading" id="h-مقایسه-wiki-js-با-confluence-bookstack-و-mediawiki">مقایسه Wiki.js با Confluence ،BookStack و MediaWiki</h2>



<p>انتخاب ابزار مناسب برای مستندسازی سازمانی بستگی به نیازهای فنی، ساختار تیم، بودجه و نحوه استقرار زیرساخت دارد. برای درک بهتر اینکه تفاوت Wiki.js با سایر راهکارهای مطرح چیست، می‌توان آن را در کنار Confluence ،BookStack و MediaWiki بررسی کرد.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="668" src="https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02-1024x668.webp" alt="Wiki.js چیست؟ مقایسه با Confluence ،BookStack و MediaWiki" class="wp-image-5240" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02-1024x668.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02-300x196.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02-768x501.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02-120x78.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/06/Hamravesh-what-is-wikijs02.webp 1201w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><a href="https://hamravesh.com/blog/what-is-confluence/" type="link" id="https://hamravesh.com/blog/what-is-confluence/" target="_blank" rel="noreferrer noopener">کانفلوئنس</a> یک پلتفرم تجاری است که به‌صورت گسترده در سازمان‌ها برای همکاری تیمی، مدیریت دانش و مستندسازی استفاده می‌شود. در سمت مقابل، Wiki.js به‌عنوان یک نرم‌افزار ویکی سازمانی متن‌باز، امکان استقرار روی زیرساخت اختصاصی سازمان را فراهم می‌کند و هزینه لایسنس ندارد.</p>



<p>BookStack هم یک راهکار متن‌باز برای مستندسازی سازمانی است که از ساختار سلسله‌مراتبی مشخص (قفسه، کتاب، فصل و صفحه) استفاده می‌کند. این ساختار برای تیم‌هایی که به دنبال سازمان‌دهی ساده‌تر محتوا هستند می‌تواند مناسب باشد.</p>



<p>MediaWiki که هسته اصلی ویکی‌پدیا را تشکیل می‌دهد، برای مدیریت پایگاه‌های دانش بزرگ و محتوای مشارکتی توسعه یافته است. در مقابل، Wiki.js تمرکز بیشتری بر استقرار سازمانی، یکپارچه‌سازی با Git و پشتیبانی از روش‌های مختلف احراز هویت دارد. برای مقایسه دقیق‌تر، فاکتورهای کلیدی این چهار ابزار در جدول زیر آورده شده است.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>فاکتور کلیدی</strong></td><td><strong>Wiki.js</strong></td><td><strong>Confluence</strong></td><td><strong>BookStack</strong></td><td><strong>MediaWiki</strong></td></tr><tr><td><strong>نوع لایسنس و هزینه</strong></td><td>رایگان و متن‌باز</td><td>تجاری (اشتراک ماهانه)</td><td>رایگان و متن‌باز</td><td>رایگان و متن‌باز</td></tr><tr><td><strong>نحوه میزبانی (Hosting)</strong></td><td>Self-Hosted (داکر/سرور اختصاصی)</td><td>فقط ابری / دیتا سنتر</td><td>Self-Hosted (سرور اختصاصی)</td><td>Self-Hosted (سرور اختصاصی)</td></tr><tr><td><strong>ویرایش هم‌زمان (Real-time)</strong></td><td>ندارد&nbsp;</td><td>دارد (بسیار قدرتمند)</td><td>ندارد&nbsp;</td><td>ندارد&nbsp;</td></tr><tr><td><strong>همگام‌سازی با Git</strong></td><td>دارد (بومی و دوطرفه)</td><td>ندارد</td><td>ندارد</td><td>ندارد (نیاز به افزونه)</td></tr><tr><td><strong>نوع ویرایشگر (Editor)</strong></td><td>چندگانه (Markdown/بصری/HTML)</td><td>بصری پیشرفته</td><td>بصری + Markdown</td><td>Wikitext + بصری</td></tr><tr><td><strong>احراز هویت سازمانی</strong></td><td>بسیار جامع (LDAP ،SAML ،OIDC ،OAuth2 و ۱۵+ ارائه‌دهنده دیگر)&nbsp;</td><td>کامل (LDAP ،Active ،Directory ،SAML ،OIDC ،Crowd و Jira)</td><td>محدود (LDAP ،SAML ،OIDC)</td><td>محدود (نیازمند افزونه)</td></tr><tr><td><strong>ساختار درختی صفحات</strong></td><td>انعطاف‌پذیر (فولدرهای درختی)</td><td>ساختار درختی و سلسله‌مراتبی</td><td>ثابت (قفسه &gt; کتاب &gt; صفحه)</td><td>مسطح (دسته‌بندی‌محور)</td></tr><tr><td><strong>پشتیبانی از زبان فارسی</strong></td><td>دارد (بومی و RTL)</td><td>دارد</td><td>دارد (ترجمه جامعه کاربری)</td><td>دارد</td></tr><tr><td><strong>مناسب برای چه سازمانی؟</strong><strong>&nbsp;</strong></td><td>تیم‌های فنی، سازمان‌های نیازمند استقرار داخلی، شرکت‌های دارای زیرساخت Git و LDAP</td><td>سازمان‌های بزرگ استفاده‌کننده از اکوسیستم Atlassian&nbsp;</td><td>تیم‌های کوچک و متوسط که به راه‌اندازی ساده و سریع نیاز دارند&nbsp;</td><td>پایگاه‌های دانش بزرگ، پروژه‌های عمومی و جوامع کاربری گسترده&nbsp;</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-راهنمای-نصب-wiki-js-با-docker">راهنمای نصب Wiki.js با Docker</h2>



<p>استفاده از Docker و Docker Compose، یکی از رایج‌ترین روش‌ها برای راه‌اندازی Wiki.js به شمار می‌آید. این روش روی اکثر توزیع‌های لینوکس (مخصوصا برای نصب Wiki.js روی Ubuntu Server)، بسیار رایج و پایدار است. البته قبل از هرکاری باید پیش‌نیازهای زیر را فراهم کنید:</p>



<ul class="wp-block-list">
<li>سرور لینوکس با نصب Docker و Docker Compose نصب‌شده. می‌توانید راهنمای آموزش <a href="https://hamravesh.com/blog/install-docker-ubuntu/" type="link" id="https://hamravesh.com/blog/install-docker-ubuntu/">نصب داکر</a> و <a href="https://hamravesh.com/blog/install-docker-compose-on-ubuntu/" type="link" id="https://hamravesh.com/blog/install-docker-compose-on-ubuntu/" target="_blank" rel="noreferrer noopener">نصب Docker Compose</a> استفاده کنید.</li>



<li>حداقل ۱ گیگابایت رم (۲ گیگابایت توصیه می‌شود).</li>



<li>دامنه اختصاصی برای دسترسی در محیط پروداکشن (اختیاری).</li>



<li>یک مخزن Git برای همگام‌سازی محتوا (اختیاری).</li>
</ul>



<p id="h-گام-اول-ایجاد-ساختار-پوشه-پروژه"><strong>گام اول: ایجاد ساختار پوشه پروژه</strong></p>



<p>ابتدا باید پوشه‌های مورد نیاز را برای ماندگاری داده‌های دیتابیس (Data Persist) ایجاد کنید و وارد آن شوید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>mkdir -p ~/wikijs/{db,config}

cd ~/wikijs</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">mkdir</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-p</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">~/wikijs/{db,config}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6CB6FF">cd</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">~/wikijs</span></span></code></pre></div>



<p id="h-گام-دوم-ایجاد-فایل-docker-compose-yml"><strong>گام دوم: ایجاد فایل docker-compose.yml</strong></p>



<p>یک فایل با نام docker-compose.yml در همان پوشه بسازید و کانفیگ زیر را در آن قرار دهید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>version: "3.8"
services:
  db:
    image: postgres:16-alpine
    container_name: wikijs-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: wikijs
      POSTGRES_USER: wikijs
      POSTGRES_PASSWORD: YOUR_STRONG_PASSWORD
    volumes:
      - ./db:/var/lib/postgresql/data
    networks:
      - wikijs-net
  wikijs:
    image: ghcr.io/requarks/wiki:2
    container_name: wikijs
    restart: unless-stopped
    depends_on:
      - db
    ports:
      - "3000:3000"
    environment:
      DB_TYPE: postgres
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: wikijs
      DB_PASS: YOUR_STRONG_PASSWORD
      DB_NAME: wikijs
    networks:
      - wikijs-net
networks:
  wikijs-net:
    driver: bridge</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">version</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;3.8&quot;</span></span>
<span class="line"><span style="color: #8DDB8C">services</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">db</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">image</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">postgres:16-alpine</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">container_name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs-db</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">restart</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">unless-stopped</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">environment</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">POSTGRES_DB</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">POSTGRES_USER</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">POSTGRES_PASSWORD</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">YOUR_STRONG_PASSWORD</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">volumes</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">./db:/var/lib/postgresql/data</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">networks</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">wikijs-net</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">wikijs</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">image</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">ghcr.io/requarks/wiki:2</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">container_name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">restart</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">unless-stopped</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">depends_on</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">db</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">ports</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">&quot;3000:3000&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">environment</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_TYPE</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">postgres</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_HOST</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">db</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_PORT</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">5432</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_USER</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_PASS</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">YOUR_STRONG_PASSWORD</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #8DDB8C">DB_NAME</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">networks</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      - </span><span style="color: #96D0FF">wikijs-net</span></span>
<span class="line"><span style="color: #8DDB8C">networks</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">wikijs-net</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">driver</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">bridge</span></span></code></pre></div>



<p>حتما مقدار YOUR_STRONG_PASSWORD را با یک رمز عبور مناسب جایگزین کنید. این مقدار باید در تنظیمات PostgreSQL و Wiki.js یکسان باشد تا اتصال به دیتابیس برقرار شود. همچنین مراقب باشید که فاصله‌ها و ساختار خطوط در فایل YAML تغییر نکند.</p>



<p id="h-گام-سوم-اجرا-و-بررسی-لاگ-ها"><strong>گام سوم: اجرا و بررسی لاگ‌ها</strong></p>



<p>برای بالا آوردن کانتینرها در پس‌زمینه، دستور زیر را اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker compose up -d</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">up</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-d</span></span></code></pre></div>



<p>برای بررسی وضعیت سرویس، لاگ‌ها را مشاهده کنید</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker compose logs -f wikijs</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">logs</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">wikijs</span></span></code></pre></div>



<p>در صورت مشاهده پیام &#8220;Listening on port 3000&#8243;، سرویس با موفقیت راه‌اندازی شده است. سپس می‌توانید آدرس زیر را در مرورگر باز کنید:</p>



<p>http://&lt;SERVER-IP&gt;:3000</p>



<p>در اولین ورود، صفحه راه‌اندازی اولیه Wiki.js نمایش داده می‌شود.</p>



<p id="h-گام-چهارم-تنظیم-اولیه-setup-wizard"><strong>گام چهارم: تنظیم اولیه (Setup Wizard)</strong></p>



<p>در اولین ورود، صفحه راه‌اندازی اولیه ظاهر می‌شود که اطلاعات زیر را از شما می‌خواهد:</p>



<ul class="wp-block-list">
<li>Administrator Account: ایمیل و رمز عبور مدیر ارشد سیستم را تعیین کنید.</li>



<li>Site URL: آدرس نهایی دسترسی به ویکی را وارد کنید (مانند (<a href="https://wiki.your-domain.com" rel="nofollow">https://wiki.your-domain.com </a>).</li>



<li>Telemetry: وضعیت ارسال آمار ناشناس استفاده از ابزار را مشخص کنید.</li>
</ul>



<p>پس از تکمیل این فرم، به‌طور مستقیم وارد داشبورد مدیریت می‌شوید.</p>



<p><strong>نکته:</strong> اگر Wiki.js را در محیط پروداکشن اجرا می‌کنید، بهتر است سرویس را پشت یک Reverse Proxy مانند Nginx یا Traefik قرار دهید. این روش امکان مدیریت گواهی SSL، استفاده از دامنه اختصاصی، هدایت ترافیک HTTPS و اعمال تنظیمات امنیتی را فراهم می‌کند. هرچند Wiki.js به‌صورت مستقیم روی پورت ۳۰۰۰ اجرا می‌شود، اما در بسیاری از استقرارهای سازمانی دسترسی کاربران از طریق Reverse Proxy انجام می‌شود.&nbsp;</p>



<p id="h-گام-پنجم-تنظیم-همگام-سازی-با-git"><strong>گام پنجم: تنظیم همگام‌سازی با Git&nbsp;</strong></p>



<p>همگام‌سازی با Git (یا Git Sync) یکی از قابلیت‌های Wiki.js برای نسخه‌بندی و نگهداری مستندات در مخازن Git است. این قابلیت امکان مدیریت تاریخچه تغییرات، نگهداری نسخه‌های قبلی و بکاپ‌گیری از محتوای صفحات را فراهم می‌کند. برای فعال‌سازی این قابلیت مراحل زیر را انجام دهید:</p>



<p>مرحله اول: به مسیر Administration &gt; Storage بروید.</p>



<p>مرحله دوم: روی گزینه Git کلیک کرده و آن را فعال کنید.</p>



<p>مرحله سوم: تنظیمات مخزن را در Wiki.js وارد کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Authentication Type: SSH
Repository URL: git@github.com:your-org/wiki-content.git
Branch: main
SSH Private Key: (Deploy Key)
Sync Direction: Bi-directional
Sync Schedule: Every 5 minutes</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">Authentication Type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">SSH</span></span>
<span class="line"><span style="color: #8DDB8C">Repository URL</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">git@github.com:your-org/wiki-content.git</span></span>
<span class="line"><span style="color: #8DDB8C">Branch</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">main</span></span>
<span class="line"><span style="color: #8DDB8C">SSH Private Key</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">(Deploy Key)</span></span>
<span class="line"><span style="color: #8DDB8C">Sync Direction</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Bi-directional</span></span>
<span class="line"><span style="color: #8DDB8C">Sync Schedule</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Every 5 minutes</span></span></code></pre></div>



<p>بازه زمانی همگام‌سازی را تنظیم کنید (مثلا هر ۵ دقیقه).</p>



<p>مرحله چهارم: یک Deploy Key ایجاد کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>ssh-keygen -t ed25519 -f ~/wikijs/git-deploy-key -N ""</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">ssh-keygen</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-t</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ed25519</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">~/wikijs/git-deploy-key</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-N</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;&quot;</span></span></code></pre></div>



<p>مرحله پنجم: کلید عمومی ایجادشده را به‌عنوان Deploy Key در مخزن GitHub یا GitLab خود و با دسترسی write اضافه کنید.</p>



<p><strong>نکته:</strong> همگام‌سازی با Git می‌تواند نسخه‌ای از محتوای صفحات را در مخزن Git نگهداری کند، اما جایگزین بکاپ کامل Wiki.js نیست. از آنجا که اطلاعات اصلی پلتفرم در PostgreSQL ذخیره می‌شوند، توصیه می‌شود به‌صورت منظم از پایگاه داده و فایل‌های پیوست نسخه پشتیبان تهیه کنید. در محیط‌های عملیاتی، استفاده از بکاپ خودکار برای دیتابیس و فضای ذخیره‌سازی می‌تواند ریسک از دست رفتن اطلاعات را کاهش دهد.</p>



<p id="h-گام-آخر-به-روزرسانی-wiki-js"><strong>گام آخر: به‌روزرسانی Wiki.js</strong></p>



<p>برای آپدیت پلتفرم به آخرین نسخه پایدار، کافیست کانتینرها را مجدداً Pull کنید تا فرایند مهاجرت دیتابیس (Migration) هم به طور خودکار انجام شود:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker compose pull wikijs
docker compose up -d wikijs</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pull</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">wikijs</span></span>
<span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">up</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-d</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">wikijs</span></span></code></pre></div>



<h2 class="wp-block-heading" id="h-اجرای-wiki-js-روی-cloud">اجرای Wiki.js روی Cloud</h2>



<p>با افزایش تعداد کاربران، حجم مستندات و نیازهای عملیاتی، معمولا نگهداری Wiki.js روی یک سرور واحد، چالش‌هایی مانند مدیریت بکاپ، به‌روزرسانی، دسترس‌پذیری و مقیاس‌پذیری را ایجاد کند. بسیاری از سازمان‌ها برای اینکه با این چالش‌ها مواجه نشوند، این پلتفرم را روی زیرساخت‌های ابری اجرا می‌کنند تا بخشی از مدیریت زیرساخت و نگهداری سرویس ساده‌تر شود. معمولا برای استقرار Wiki.js در محیط ابری از دو الگوی رایج استفاده می‌شود:</p>



<h3 class="wp-block-heading" id="h-راه-اندازی-روی-سکوهای-ابری-paas">راه‌اندازی روی سکوهای ابری (PaaS)</h3>



<p>در این سناریو، نیازی به مدیریت سیستم‌عامل لینوکس یا پیکربندی دستی Docker ندارید و می‌توانید با استفاده از ایمیج رسمی Wiki.js، سرویس را روی سکوی ابری مستقر کنید. همچنین برخی سکوهای ابری هم قابلیت‌هایی مانند مقیاس‌پذیری خودکار را در اختیار شما قرار می‌دهند.</p>



<h3 class="wp-block-heading" id="h-معماری-ابری-مدیریت-شده-managed-services">معماری ابری مدیریت‌شده (Managed Services)</h3>



<p>برای تضمین امنیت و پایداری در محیط‌های پروداکشن، پلتفرم ابری خود را بر پایه فاکتورهای زیر پیکربندی کنید:</p>



<ul class="wp-block-list">
<li>دیتابیس ابری مدیریت‌شده (Managed PostgreSQL): به‌جای اجرای PostgreSQL درون کانتینر، می‌توانید Wiki.js را به یک سرویس دیتابیس مدیریت‌شده متصل کنید تا مدیریت بکاپ، به‌روزرسانی و نگهداری پایگاه داده ساده‌تر شود.</li>



<li>ذخیره‌سازی ابری فایل‌ها (Object Storage): می‌توانید از طریق مسیر `Administration &gt; Storage` سرویس‌های ذخیره‌سازی سازگار با S3 را برای نگهداری تصاویر و فایل‌های پیوست مستندات پیکربندی کنید.</li>



<li>همگام‌سازی با Git: اتصال Wiki.js به مخازن GitHub یا GitLab، امکان نسخه‌بندی و نگهداری مستندات در یک مخزن مجزا را فراهم می‌کند.</li>
</ul>



<h3 class="wp-block-heading" id="h-راه-اندازی-wiki-js-بدون-مدیریت-زیرساخت">راه‌اندازی Wiki.js بدون مدیریت زیرساخت</h3>



<p>برای راه‌اندازی سریع‌تر Wiki.js، می‌توانید از نسخه آماده این نرم‌افزار در بازارچه هم‌روش استفاده کنید. در این روش، نصب Docker، استقرار و به‌روزرسانی سرویس و بخشی از مدیریت زیرساخت به‌صورت خودکار انجام می‌شود تا تیم‌ها بتوانند به‌جای صرف زمان برای پیکربندی و نگهداری، روی تولید و مدیریت مستندات تمرکز کنند.</p>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-ad2f72ca wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading" id="h-سرویس-wiki-js-هم-روش-راه-اندازی-سریع-و-ساده">💡 سرویس Wiki.js هم‌روش؛ راه‌اندازی سریع و ساده</h3>



<p><br>✅ پرداخت به میزان استفاده (PAYG)<br>✅ بدون دغدغه نگهداری زیرساخت<br>✅ بکاپ خودکار روزانه</p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p id="h-"></p>



<p class="btn btn--main btn--wide"><a href="https://console.hamravesh.com/marketplace/explore/oneclick_wikijs" target="_blank" rel="noreferrer noopener">راه‌اندازی ویکی جی اس</a><a href="#"></a></p>
</div></div>
</div>



<h2 class="wp-block-heading" id="h-چه-سروری-برای-wiki-js-مناسب-است">چه سروری برای Wiki.js مناسب است؟</h2>



<p>نیازمندی‌های Wiki.js به تعداد کاربران، حجم مستندات و نحوه استفاده از پلتفرم بستگی دارد. در این بخش از آموزش Wiki.js، مهم‌ترین نیازمندی‌های سخت‌افزاری و نرم‌افزاری این نرم‌افزار ویکی سازمانی را بررسی می‌کنیم.</p>



<h3 class="wp-block-heading" id="h-نیازمندی-های-سخت-افزاری-hardware">نیازمندی‌های سخت‌افزاری (Hardware)</h3>



<p>میزان مصرف منابع در Wiki.js به تعداد کاربران هم‌زمان، حجم داده‌ها و سرویس‌های جانبی مورد استفاده بستگی دارد. برای بسیاری از سناریوهای سازمانی، منابع زیر قابل استفاده هستند:</p>



<ul class="wp-block-list">
<li>پردازنده (CPU): ویکی جی اس روی یک هسته پردازنده هم&nbsp; قابل اجرا است، اما برای پردازش‌های پس‌زمینه و بارهای کاری بیشتر، استفاده از حداقل دو هسته CPU توصیه می‌شود.</li>



<li>حافظه رم (RAM): حداقل ۱ گیگابایت رم برای اجرا موردنیاز است. البته در سناریوهای عملیاتی و استفاده طولانی‌مدت، تخصیص رم بیشتر می‌تواند پایداری و عملکرد بهتری فراهم کند.</li>



<li>فضای ذخیره‌سازی (Storage): حجم موردنیاز به تعداد مستندات و فایل‌های بارگذاری‌شده بستگی دارد. برای راه‌اندازی اولیه، استفاده از فضای ذخیره‌سازی SSD توصیه می‌شود.</li>
</ul>



<h3 class="wp-block-heading" id="h-نیازمندی-های-نرم-افزاری-و-شبکه-software-amp-network">نیازمندی‌های نرم‌افزاری و شبکه (Software &amp; Network)</h3>



<p>علاوه بر سخت‌افزار، باید زیرساخت نرم‌افزاری هم با نیازهای Wiki.js سازگار باشد.</p>



<ul class="wp-block-list">
<li>پایگاه داده: استفاده از دیتابیس PostgreSQL نسخه 11 یا بالاتر الزامی است، زیرا تمرکز اصلی توسعه نسخه‌های جدید Wiki.js روی PostgreSQL قرار دارد و این دیتابیس، انتخاب استاندارد و پایدار این پلتفرم محسوب می‌شود.</li>



<li>محیط اجرا (Runtime): این پلتفرم بر پایه Node.js توسعه یافته است، اما در صورت استفاده از Docker نیازی به نصب مستقیم Node.js روی سرور خود ندارید. در واقع این پلتفرم به صورت پیش‌فرض درون ایمیج داکر قرار دارد.</li>



<li>وب‌سرور و شبکه: Wiki.js می‌تواند بدون Nginx یا Apache اجرا شود، اما در بسیاری از محیط‌های پروداکشن از Reverse Proxy برای مدیریت SSL، مسیریابی درخواست‌ها و تنظیمات شبکه استفاده می‌شود. همچنین استفاده از یک دامنه یا زیر دامنه اختصاصی برای استقرار ویکی داخلی سازمان، مدیریت و دسترسی به سرویس را ساده‌تر می‌کند.</li>
</ul>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>اگر به دنبال یک سیستم مستندسازی self-hosted هستید که هم با Git یکپارچه شود و هم روی زیرساخت اختصاصی شما اجرا شود، Wiki.js یکی از گزینه‌های جدی پیش‌رو است. Wiki.js در عمل بین دو نیاز مهم تعادل ایجاد می‌کند: از یک طرف سادگی استقرار و استفاده (به‌خصوص با Docker) و از طرف دیگر امکانات فنی مثل همگام‌سازی با گیت، احراز هویت سازمانی و کنترل دسترسی دقیق. به همین دلیل برای تیم‌های DevOps، تیم‌های توسعه نرم‌افزار و سازمان‌هایی که رویکرد زیرساخت‌محور دارند، انتخاب مناسبی محسوب می‌شود.</p>



<p>با این حال، این ابزار برای سناریوهایی که نیاز به همکاری هم‌زمان پیشرفته، جریان‌های کاری پیچیده یا اکوسیستم یکپارچه سازمانی (در حد ابزارهایی مثل Confluence) دارند، ممکن است محدودیت‌هایی داشته باشد. بنابراین انتخاب Wiki.js زمانی منطقی است که اولویت شما «کنترل، سادگی زیرساخت و انعطاف‌پذیری» باشد، نه یک پلتفرم کاملاً enterprise با همه امکانات همکاری بلادرنگ.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-wikijs/">Wiki.js چیست؟ مقایسه با رقبا و راهنمای نصب</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-wikijs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RBAC در کوبرنتیز چیست؟ آشنایی با اجزا و روش‌های پیاده‌سازی</title>
		<link>https://hamravesh.com/blog/what-is-kubernetes-rbac/</link>
					<comments>https://hamravesh.com/blog/what-is-kubernetes-rbac/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 27 May 2026 12:30:00 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5199</guid>

					<description><![CDATA[<p>RBAC در کوبرنتیز یکی از اصلی‌ترین مکانیزم‌های کنترل دسترسی در کوبرنتیز است که تعیین می‌کند هر کاربر، سرویس یا برنامه چه عملیاتی را روی منابع کلاستر می‌تواند انجام دهد. این سیستم با تکیه بر نقش‌ها (Role و ClusterRole) و اتصال آن‌ها به هویت‌ها (RoleBinding و ClusterRoleBinding)، لایه Authorization در API Server را مدیریت می‌کند و [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-rbac/">RBAC در کوبرنتیز چیست؟ آشنایی با اجزا و روش‌های پیاده‌سازی</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>RBAC در کوبرنتیز یکی از اصلی‌ترین مکانیزم‌های کنترل دسترسی در کوبرنتیز است که تعیین می‌کند هر کاربر، سرویس یا برنامه چه عملیاتی را روی منابع کلاستر می‌تواند انجام دهد. این سیستم با تکیه بر نقش‌ها (Role و ClusterRole) و اتصال آن‌ها به هویت‌ها (RoleBinding و ClusterRoleBinding)، لایه Authorization در API Server را مدیریت می‌کند و نقش کلیدی در پیاده‌سازی اصل حداقل سطح دسترسی دارد. در این مقاله، ساختار، نحوه عملکرد، اجزای اصلی، مثال عملی پیاده‌سازی و محدودیت‌های RBAC کوبرنتیز را به‌صورت دقیق بررسی می‌کنیم.</p>



<h2 class="wp-block-heading" id="h-rbac-در-کوبرنتیز-چیست">RBAC در کوبرنتیز چیست؟</h2>



<p>RBAC مخفف Role-Based Access Control یا «کنترل دسترسی مبتنی بر نقش» است. این مکانیزم امنیتی در کوبرنتیز مشخص می‌کند که هر کاربر، سرویس یا برنامه چه عملیاتی را روی کدام منابع کلاستر می‌تواند انجام دهد.</p>



<p>در کوبرنتیز، تمام درخواست‌ها از طریق API Server پردازش می‌شوند و سیستم RBAC کوبرنتیز وظیفه دارد سطح دسترسی این درخواست‌ها را کنترل کند. به‌کمک این مکانیزم می‌توان تعیین کرد که یک هویت مشخص چه منابعی را مشاهده کند، چه عملیاتی انجام دهد و این دسترسی در کدام Namespace یا در سطح کل کلاستر معتبر باشد. برای مثال، با استفاده از RBAC در کوبرنتیز می‌توان به یک توسعه‌دهنده فقط اجازه مشاهده Podها در Namespace توسعه (Dev) را داد؛ بدون اینکه به منابع محیط Production دسترسی داشته باشد.</p>



<p>سیستم RBAC کوبرنتیز فقط برای کاربران انسانی استفاده نمی‌شود و برنامه‌ها و Podهای داخل کلاستر نیز از طریق Service Accountها با همین مکانیزم احراز دسترسی می‌شوند.</p>



<p>به‌طور کلی، RBAC استانداردترین روش مدیریت دسترسی کاربران در کوبرنتیز است و نقش مهمی در پیاده‌سازی اصل Least Privilege یا «حداقل سطح دسترسی» دارد.</p>



<h2 class="wp-block-heading" id="h-تفاوت-authentication-و-authorization-در-kubernetes"><a></a>تفاوت Authentication و Authorization در Kubernetes</h2>



<p>برای درک جایگاه RBAC در کوبرنتیز، ابتدا باید تفاوت Authentication (احراز هویت) و Authorization (تعیین سطح دسترسی) را بدانید. هر درخواستی که به API Server کلاستر ارسال می‌شود، ابتدا هویت فرستنده را بررسی می‌کند و سپس سطح دسترسی او را می‌سنجد.</p>



<p><strong>مرحله اول، Authentication: </strong>کوبرنتیز مشخص می‌کند درخواست از طرف چه کاربری، سرویس یا برنامه‌ای ارسال شده است. این فرایند معمولاً با استفاده از توکن‌ها، Client Certificateها یا سرویس‌های هویت خارجی انجام می‌شود. اگر هویت فرستنده تأیید نشود، درخواست با خطای HTTP 401 Unauthorized رد خواهد شد.</p>



<p><strong>مرحله دوم، Authorization: </strong>پس از تأیید هویت، مرحله Authorization یا آغاز می‌شود. در این مرحله، کوبرنتیز بررسی می‌کند که آیا این هویت، اجازه انجام عملیات موردنظر را دارد یا خیر. اینجاست که RBAC کوبرنتیز وارد عمل می‌شود و بر اساس Roleها و Bindingهای تعریف‌شده، مجوز دسترسی را صادر یا رد می‌کند. در صورت نداشتن مجوز کافی، درخواست با خطای HTTP 403 Forbidden مواجه می‌شود.</p>



<p>برای درک بهتر تفاوت این دو لایه امنیتی، جدول زیر را ببینید:<br></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>ویژگی</strong><strong></strong></td><td><strong>Authentication</strong><strong> (احراز هویت)</strong><strong></strong></td><td><strong>Authorization</strong><strong> (تعیین سطح دسترسی)</strong><strong></strong></td></tr><tr><td>سؤال اصلی</td><td>شما چه کسی هستید؟ (تشخیص هویت)</td><td>مجاز به انجام دادن چه کاری هستید؟ (بررسی مجوز)</td></tr><tr><td>زمان اجرا</td><td>مرحله ۱: قبل از بررسی دسترسی‌ها</td><td>مرحله ۲: پس از تأیید هویت</td></tr><tr><td>وظیفه اصلی</td><td>شناسایی هویت کاربر یا سرویس</td><td>بررسی مجوز عملیات</td></tr><tr><td>کد وضعیت HTTP در صورت شکست</td><td>401 Unauthorized</td><td>403 Forbidden</td></tr><tr><td>ورودی‌های سیستم</td><td>هدرهای HTTP، گواهی کلاینت، توکن‌ها</td><td>نام کاربر، نوع عملیات (Action)، منبع مورد نظر (Object)</td></tr><tr><td>خروجی فرایند</td><td>استخراج نام کاربری (Username) یا شناسه گروه</td><td>صدور اجازه دسترسی (Allow) یا رد آن (Deny)</td></tr></tbody></table></figure>



<p></p>



<h2 class="wp-block-heading" id="h-اجزای-اصلی-rbac-در-کوبرنتیز">اجزای اصلی RBAC در کوبرنتیز</h2>



<p>سیستم RBAC در کوبرنتیز از چند جزء اصلی تشکیل شده است که در کنار هم مشخص می‌کنند چه هویتی چه عملیاتی را روی کدام منابع می‌تواند انجام دهد. این اجزا عبارت‌اند از:</p>



<h3 class="wp-block-heading">Role</h3>



<p>Role مجموعه‌ای از مجوزهاست که دسترسی به منابع را در یک <a href="https://hamravesh.com/blog/what-is-kubernetes-namespace/" type="link" id="https://hamravesh.com/blog/what-is-kubernetes-namespace/" target="_blank" rel="noreferrer noopener">Namespace در کوبرنتیز</a> تعریف می‌کند. با استفاده از Role می‌توان مشخص کرد که یک کاربر یا Service Account چه عملیاتی را روی منابع کوبرنتیز انجام دهد.</p>



<h3 class="wp-block-heading">ClusterRole</h3>



<p>ClusterRole نیز مجموعه‌ای از مجوزها را تعریف می‌کند، اما در سطح کل کلاستر قابل استفاده است و محدود به یک Namespace مشخص نیست.</p>



<h3 class="wp-block-heading">RoleBinding</h3>



<p>RoleBinding یک Role را به یک کاربر، گروه یا Service Account متصل می‌کند. این اتصال فقط در همان Namespace معتبر است و مشخص می‌کند چه هویتی از مجوزهای تعریف‌شده در Role استفاده کند.</p>



<h3 class="wp-block-heading">ClusterRoleBinding</h3>



<p>ClusterRoleBinding یک ClusterRole را در سطح کل کلاستر به کاربران، گروه‌ها یا Service Accountها متصل می‌کند. این نوع Binding معمولاً برای دسترسی‌های سراسری استفاده می‌شود.</p>



<h3 class="wp-block-heading">Subjects</h3>



<p>Subjects همان هویت‌هایی هستند که مجوزها به آن‌ها اختصاص داده می‌شود. این هویت‌ها می‌توانند کاربران، گروه‌ها یا Service Accountهای داخل کلاستر باشند.</p>



<p>در تنظیمات RBAC کوبرنتیز، هر Role یا ClusterRole معمولاً شامل فیلدهایی برای تعیین منابع و نوع دسترسی است. برای مثال، فیلد <code>verbs</code> مشخص می‌کند یک هویت چه عملیاتی مانند <code>get</code> ،<code>list</code> ،<code>create</code> یا <code>delete</code> را می‌تواند انجام دهد.</p>



<p>همچنین فیلد <code>apiGroups</code> برای تعیین گروه API مربوط به هر منبع استفاده می‌شود. در منابع اصلی کوبرنتیز مانند Pod و Service معمولاً مقدار آن به‌صورت رشته خالی <code>""</code> نوشته می‌شود، اما برای منابعی مانند <a href="https://hamravesh.com/blog/what-is-kubernetes-deployment/" type="link" id="https://hamravesh.com/blog/what-is-kubernetes-deployment/" target="_blank" rel="noreferrer noopener">Deployment در کوبرنتیز</a> از گروه‌هایی مانند <code>apps</code> استفاده می‌شود.</p>



<h2 class="wp-block-heading" id="h-تفاوت-role-و-clusterrole-مرز-میان-namespace-و-کلاستر">تفاوت Role و ClusterRole؛ مرز میان Namespace و کلاستر</h2>



<p>اصلی‌ترین تفاوت Role و ClusterRole در Kubernetes، محدوده دسترسی یا Scope آن‌هاست. Role فقط در یک Namespace مشخص معتبر است و مجوزهای تعریف‌شده در آن خارج از همان Namespace اعمال نمی‌شوند. برای مثال، اگر کاربری در Namespace مربوط به محیط توسعه (dev) اجازه مشاهده پادها را داشته باشد، این دسترسی در Namespace محیط Production معتبر نخواهد بود.</p>



<p>در مقابل، ClusterRole در سطح کل کلاستر عمل می‌کند و به یک Namespace محدود نیست. این نوع Role معمولاً برای منابعی استفاده می‌شود که وابسته به Namespace نیستند؛ مانند نودها یا PersistentVolumeها. همچنین می‌توان از ClusterRole برای تعریف دسترسی‌های یکسان در چند Namespace مختلف استفاده کرد.</p>



<p>در عمل، Role و RoleBinding بیشتر برای مدیریت دسترسی‌های محدود در یک Namespace استفاده می‌شوند، درحالی‌که ClusterRole و ClusterRoleBinding برای دسترسی‌های سراسری در سطح کلاستر کاربرد دارند.</p>



<h2 class="wp-block-heading" id="h-نحوه-عملکرد-rbac-در-kubernetes"><a></a>نحوه عملکرد RBAC در Kubernetes</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="741" src="https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-1024x741.webp" alt="نحوه عملکرد RBAC در Kubernetes" class="wp-image-5201" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-1024x741.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-300x217.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-768x556.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-150x108.webp 150w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02-120x87.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/05/hamravesh-what-is-kubernetes-rbac02.webp 1201w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">یک کاربر یا Service Account از طریق Role یا ClusterRole و اتصال آن با RoleBinding یا ClusterRoleBinding، مجوز دسترسی به منابع API در سطح Namespace یا کل کلاستر را دریافت می‌کند.</figcaption></figure>



<p>سیستم RBAC در کوبرنتیز برای بررسی دسترسی‌ها، هر درخواست را به‌صورت مرحله‌به‌مرحله ارزیابی می‌کند. زمانی که یک کاربر، Service Account یا برنامه درخواستی را به API Server ارسال می‌کند، کوبرنتیز مراحل زیر را برای تصمیم‌گیری طی می‌کند:</p>



<p><strong>گام ۱: شناسایی هویت درخواست‌کننده</strong></p>



<p>در ابتدا کوبرنتیز مشخص می‌کند درخواست از طرف چه هویتی ارسال شده است. این هویت می‌تواند یک کاربر، گروه یا Service Account باشد.</p>



<p id="h-گام-۲-بررسی-rol-eها-و-clusterroleها"><strong>گام ۲: بررسی Rol‍eها و ClusterRoleها</strong></p>



<p>پس از شناسایی هویت، کوبرنتیز Roleها و ClusterRoleهای تعریف‌شده را بررسی می‌کند تا مشخص شود چه مجوزهایی برای آن هویت وجود دارد.</p>



<p><strong>گام ۳: بررسی Bindingها</strong></p>



<p>در ادامه، کوبرنتیز بررسی می‌کند که آیا Role یا ClusterRole موردنظر از طریق RoleBinding یا ClusterRoleBinding به آن کاربر یا Service Account متصل شده است یا خیر.</p>



<p><strong>گام ۴: تطبیق درخواست با مجوزها</strong></p>



<p>در این مرحله، کوبرنتیز نوع عملیات درخواستی (مانند <code>get</code> ،<code>list</code> یا <code>delete</code>) و منبع هدف (مانند Pod یا Service) را با قوانین تعریف‌شده در RBAC تطبیق می‌دهد.</p>



<p><strong>گام ۵: صدور نتیجه نهایی</strong></p>



<p>اگر مجوز لازم وجود داشته باشد، درخواست تأیید می‌شود و کاربر به منبع موردنظر دسترسی پیدا می‌کند. در غیر این صورت، کوبرنتیز درخواست را با خطای <code>403 Forbidden</code> رد می‌کند.</p>



<div class="wp-block-dh-blog-card-database-block card database">
<div class="wp-block-group row align-items-center is-nowrap is-layout-flex wp-container-core-group-is-layout-ad2f72ca wp-block-group-is-layout-flex">
<div class="wp-block-group col-md"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading" id="h-کوبرنتیز-مدیریت-شده-هم-روش-راهی-مطمئن-برای-رشد-بی-وقفه">💡 کوبرنتیز مدیریت‌شده هم‌روش، راهی مطمئن برای رشد بی‌وقفه</h3>



<p>راهکار کوبرنتیز مدیریت شده، بر بستر ابر اختصاصی یا به صورت On-Premise</p>



<p><br>✅ کاهش هزینه‌های عملیاتی<br>✅ احراز هویت یکپارچه با اتصال به SSO سازمانی<br>✅ قابل استقرار روی سرورهای on-premise</p>



<p></p>
</div></div>
</div>



<div class="wp-block-group col-md-auto"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p class="btn btn--main btn--wide"><a href="https://hamravesh.com/managed-kubernetes" type="link" id="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز مدیریت‌شده</a></p>
</div></div>
</div>



<h2 class="wp-block-heading" id="h-آموزش-عملی-پیاده-سازی-rbac-در-کوبرنتیز-به-همراه-کد"><a></a>آموزش عملی پیاده‌سازی RBAC در کوبرنتیز (به همراه کد)</h2>



<p>در این مثال، یک Service Account ایجاد می‌کنیم که فقط اجازه مشاهده Serviceها و ConfigMapها را در یک Namespace مشخص داشته باشد.</p>



<p id="h-گام-۱-ایجاد-namespace-و-service-account"><strong>گام ۱: ایجاد Namespace و Service Account</strong></p>



<p>ابتدا یک Namespace و سپس یک Service Account اختصاصی ایجاد می‌کنیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl create namespace random-numbers
kubectl create sa random-numbers-sa -n random-numbers</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">create</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">namespace</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">create</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">sa</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">random-numbers-sa</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-n</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">random-numbers</span></span></code></pre></div>



<p><strong>گام ۲: تعریف Role</strong></p>



<p>در این مرحله، یک Role در فایلی به نام فایل به نام role.yaml می‌سازیم که فقط دسترسی <code>get</code> و <code>list</code> را روی Serviceها و ConfigMapها داشته باشد.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: random-numbers
  name: client-access-role
rules:
- apiGroups: &#91;""&#93;
  resources:
    - configmaps
    - services
  verbs:
    - get
    - list</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">apiVersion</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">rbac.authorization.k8s.io/v1</span></span>
<span class="line"><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Role</span></span>
<span class="line"><span style="color: #8DDB8C">metadata</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">namespace</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">client-access-role</span></span>
<span class="line"><span style="color: #8DDB8C">rules</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">- </span><span style="color: #8DDB8C">apiGroups</span><span style="color: #ADBAC7">: &#91;</span><span style="color: #96D0FF">&quot;&quot;</span><span style="color: #ADBAC7">&#93;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">resources</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    - </span><span style="color: #96D0FF">configmaps</span></span>
<span class="line"><span style="color: #ADBAC7">    - </span><span style="color: #96D0FF">services</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">verbs</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    - </span><span style="color: #96D0FF">get</span></span>
<span class="line"><span style="color: #ADBAC7">    - </span><span style="color: #96D0FF">list</span></span></code></pre></div>



<p>برای اعمال این Role روی کلاستر، دستور زیر را اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl apply -f role.yaml</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">apply</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">role.yaml</span></span></code></pre></div>



<p><strong>گام ۳: ایجاد RoleBinding</strong></p>



<p>اکنون باید Role تعریف‌شده را به Service Account متصل کنیم. فایل yaml زیر با نام <code>rolebinding.yaml</code> را ایجاد کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: client-access-role-binding
  namespace: random-numbers
subjects:
- kind: ServiceAccount
  name: random-numbers-sa
  namespace: random-numbers
roleRef:
  kind: Role
  name: client-access-role
  apiGroup: rbac.authorization.k8s.io</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">apiVersion</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">rbac.authorization.k8s.io/v1</span></span>
<span class="line"><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">RoleBinding</span></span>
<span class="line"><span style="color: #8DDB8C">metadata</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">client-access-role-binding</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">namespace</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #8DDB8C">subjects</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">- </span><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">ServiceAccount</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers-sa</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">namespace</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #8DDB8C">roleRef</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Role</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">client-access-role</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">apiGroup</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">rbac.authorization.k8s.io</span></span></code></pre></div>



<p>برای اعمال RoleBinding دستور زیر را اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl apply -f rolebinding.yaml</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">apply</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">rolebinding.yaml</span></span></code></pre></div>



<p id="h-گام-۴-راه-اندازی-پاد-تست-با-سرویس-اکانت-اختصاصی"><strong>گام ۴: راه‌اندازی پاد تست با سرویس‌اکانت اختصاصی</strong></p>



<p>در ادامه یک پاد می‌سازیم تا بتوانیم درخواست‌های امنیتی را از داخل کلاستر تست کنیم. برای انجام این کار فایلی به نام pod-test.yaml بسازید و کد زیر را در آن قرار دهید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">YAML</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>apiVersion: v1
kind: Pod
metadata:
  name: curlo
  namespace: random-numbers
spec:
  serviceAccountName: random-numbers-sa
  containers:
  - name: curlo
    image: curlimages/curl
    command: &#91;"sleep","999999"&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #8DDB8C">apiVersion</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">v1</span></span>
<span class="line"><span style="color: #8DDB8C">kind</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">Pod</span></span>
<span class="line"><span style="color: #8DDB8C">metadata</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">curlo</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">namespace</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers</span></span>
<span class="line"><span style="color: #8DDB8C">spec</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">serviceAccountName</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">random-numbers-sa</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">containers</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  - </span><span style="color: #8DDB8C">name</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">curlo</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">image</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">curlimages/curl</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #8DDB8C">command</span><span style="color: #ADBAC7">: &#91;</span><span style="color: #96D0FF">&quot;sleep&quot;</span><span style="color: #ADBAC7">,</span><span style="color: #96D0FF">&quot;999999&quot;</span><span style="color: #ADBAC7">&#93;</span></span></code></pre></div>



<p>پاد را اجرا کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl apply -f pod-test.yaml</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">apply</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-f</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pod-test.yaml</span></span></code></pre></div>



<p><strong>گام ۵: بررسی سطح دسترسی</strong></p>



<p>ابتدا وارد Pod شوید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl exec -it curlo -n random-numbers -- /bin/sh</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">kubectl</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">exec</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-it</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">curlo</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-n</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">random-numbers</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">/bin/sh</span></span></code></pre></div>



<p>سپس توکن Service Account را برای ارسال درخواست به API Server تنظیم کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
export CURL_CA_BUNDLE=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F47067">export</span><span style="color: #ADBAC7"> TOKEN</span><span style="color: #F47067">=</span><span style="color: #96D0FF">$(</span><span style="color: #F69D50">cat</span><span style="color: #96D0FF"> /var/run/secrets/kubernetes.io/serviceaccount/token)</span></span>
<span class="line"><span style="color: #F47067">export</span><span style="color: #ADBAC7"> CURL_CA_BUNDLE</span><span style="color: #F47067">=</span><span style="color: #96D0FF">/var/run/secrets/kubernetes.io/serviceaccount/ca.crt</span></span></code></pre></div>



<p id="h-آزمایش-اول-بررسی-دسترسی-مجاز-مشاهده-سرویس-ها"><strong>آزمایش اول: بررسی دسترسی مجاز (مشاهده سرویس‌ها)</strong></p>



<p>یک درخواست به آدرس API سرویس‌های این Namespace می‌فرستیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>curl -k --header "Authorization: Bearer $TOKEN" \
https://kubernetes.default.svc/api/v1/namespaces/random-numbers/services</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">curl</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-k</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--header</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;Authorization: Bearer </span><span style="color: #ADBAC7">$TOKEN</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">\</span></span>
<span class="line"><span style="color: #ADBAC7">https://kubernetes.default.svc/api/v1/namespaces/random-numbers/services</span></span></code></pre></div>



<p>در صورت موفقیت، Kubernetes اطلاعات Serviceها را با پاسخ <code>200 OK</code> برمی‌گرداند.</p>



<p id="h-آزمایش-دوم-بررسی-دسترسی-غیرمجاز"><strong>آزمایش دوم: بررسی دسترسی غیرمجاز</strong></p>



<p>اکنون درخواست مشاهده Podها را ارسال می‌کنیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>curl -k --header "Authorization: Bearer $TOKEN" \
https://kubernetes.default.svc/api/v1/namespaces/random-numbers/pods</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">curl</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-k</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--header</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;Authorization: Bearer </span><span style="color: #ADBAC7">$TOKEN</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">\</span></span>
<span class="line"><span style="color: #ADBAC7">https://kubernetes.default.svc/api/v1/namespaces/random-numbers/pods</span></span></code></pre></div>



<p>چون در Role تعریف‌شده مجوز دسترسی به Podها وجود ندارد، Kubernetes پاسخ <code>403 Forbidden</code> را برمی‌گرداند:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">JSON</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>{
  "status": "Failure",
  "message": "pods is forbidden: User \"system:serviceaccount:random-numbers:random-numbers-sa\" cannot list resource \"pods\" in the namespace \"random-numbers\"",
  "reason": "Forbidden",
  "code": 403
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #ADBAC7">{</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">&quot;status&quot;</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;Failure&quot;</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">&quot;message&quot;</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;pods is forbidden: User </span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF">system:serviceaccount:random-numbers:random-numbers-sa</span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF"> cannot list resource </span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF">pods</span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF"> in the namespace </span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF">random-numbers</span><span style="color: #F47067">\&quot;</span><span style="color: #96D0FF">&quot;</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">&quot;reason&quot;</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">&quot;Forbidden&quot;</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">&quot;code&quot;</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">403</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<h2 class="wp-block-heading" id="h-بهترین-روش-ها-best-practices-برای-پیاده-سازی-rbac"><a></a>بهترین روش‌ها (Best Practices) برای پیاده‌سازی RBAC</h2>



<p>پیاده‌سازی صحیح RBAC در کوبرنتیز نقش مهمی در کاهش ریسک‌های امنیتی و کنترل دسترسی کاربران دارد. مهم‌ترین راهکارهای این حوزه عبارت‌اند از:</p>



<p><strong>اصل حداقل دسترسی (Least Privilege)</strong></p>



<p>دسترسی‌ها باید فقط بر اساس نیاز واقعی کاربران و سرویس‌ها تعریف شوند. بهتر است از اعطای مجوزهای گسترده یا استفاده از وایلدکارد <code>*</code> در بخش منابع و عملیات‌ها خودداری شود.</p>



<p><strong>استفاده از Role و RoleBinding در سطح Namespace</strong></p>



<p>در بیشتر سناریوها، بهتر است دسترسی‌ها در سطح Namespace مدیریت شوند. استفاده از Role و RoleBinding باعث می‌شود دامنه دسترسی محدود بماند و ایزوله‌سازی بین محیط‌هایی مانند <code>dev</code> و <code>prod</code> حفظ شود.</p>



<p><strong>محدود کردن استفاده از ClusterRole و ClusterRoleBinding</strong></p>



<p>ClusterRole و ClusterRoleBinding فقط باید برای دسترسی‌های سراسری یا منابع cluster-scoped استفاده شوند. استفاده غیرضروری از آن‌ها می‌تواند سطح دسترسی کاربران را بیش از حد افزایش دهد.</p>



<p><strong>استفاده از Service Account اختصاصی</strong></p>



<p>بهتر است هر Pod یا برنامه از Service Account اختصاصی خود استفاده کند و به Service Account پیش‌فرض Namespace وابسته نباشد. این کار باعث می‌شود دسترسی سرویس‌ها از یکدیگر جدا شود.</p>



<p>همچنین در صورت عدم نیاز، می‌توان قابلیت mount خودکار توکن Service Account را با تنظیم <code>automountServiceAccountToken: false</code> غیرفعال کرد.</p>



<p><strong>بازبینی و حساب‌رسی دوره‌ای</strong></p>



<p>تنظیمات RBAC باید به‌صورت دوره‌ای بررسی شوند تا دسترسی‌های قدیمی، RoleBindingهای بلااستفاده یا مجوزهای غیرضروری حذف شوند. همچنین دسترسی‌های حساس، به‌ویژه اعضای گروه <code>system:masters</code>، باید به‌صورت مستمر کنترل شوند.</p>



<h2 class="wp-block-heading" id="h-اشتباهات-رایج-در-مدیریت-rbac-کوبرنتیز"><a></a>اشتباهات رایج در مدیریت RBAC کوبرنتیز</h2>



<p>در پیاده‌سازی RBAC، بسیاری از مشکلات امنیتی نه به دلیل ضعف ابزار، بلکه به خاطر تنظیمات نادرست رخ می‌دهند. مهم‌ترین اشتباهات رایج عبارت‌اند از:</p>



<p><strong>استفاده از ClusterRoleBinding به‌جای RoleBinding</strong></p>



<p>یکی از خطاهای رایج، استفاده بی‌دلیل از ClusterRoleBinding است. این کار می‌تواند باعث شود کاربری که باید فقط در یک Namespace محدود باشد، به منابع سایر Namespaceها نیز دسترسی پیدا کند.</p>



<p><strong>استفاده از وایلدکارد در دسترسی‌ها</strong></p>



<p>دادن دسترسی <code>*</code> در منابع یا عملیات‌ها عملاً تمام محدودیت‌های RBAC را از بین می‌برد و باعث ایجاد دسترسی‌های غیرقابل‌کنترل می‌شود.</p>



<p><strong>استفاده از حساب cluster-admin برای کارهای روزمره</strong></p>



<p>حساب cluster-admin دسترسی کامل به کل کلاستر دارد. استفاده روزمره از آن ریسک خطای انسانی را به‌شدت افزایش می‌دهد و می‌تواند منجر به تغییرات مخرب در کل سیستم شود.</p>



<p><strong>اضافه کردن کاربران به گروه system:masters</strong></p>



<p>عضویت در این گروه باعث دور زدن کامل RBAC می‌شود. این سطح دسترسی عملاً معادل دسترسی روت در کل کلاستر است و باید به‌شدت محدود شود.</p>



<p><strong>استفاده از Service Account پیش‌فرض</strong></p>



<p>استفاده از Service Account پیش‌فرض یک Namespace برای همه پادها باعث می‌شود سرویس‌های مختلف، یک سطح دسترسی مشترک داشته باشند. این موضوع ریسک نفوذ را افزایش می‌دهد.</p>



<p><strong>فعال‌سازی تنظیمات ناامن در API Server</strong></p>



<p>فعال کردن گزینه‌هایی مانند <code>--insecure-port</code> یا <code>--anonymous-auth</code> می‌تواند لایه احراز هویت و کنترل دسترسی را عملاً بی‌اثر کند.</p>



<p><strong>عدم بازبینی دوره‌ای دسترسی‌ها</strong></p>



<p>اگر Roleها و RoleBindingها به‌صورت دوره‌ای بررسی نشوند، دسترسی‌های قدیمی و غیرضروری باقی می‌مانند و به مرور زمان سطح حمله (Attack Surface) را افزایش می‌دهند.</p>



<p><strong>نادیده گرفتن تغییرات سازمانی</strong></p>



<p>تغییر نقش افراد در سازمان یا خروج آن‌ها باید بلافاصله در RBAC اعمال شود. عدم به‌روزرسانی دسترسی‌ها می‌تواند باعث انباشت مجوزهای اضافی شود.</p>



<h2 class="wp-block-heading" id="h-محدودیت-های-سیستم-rbac-در-کوبرنتیز">محدودیت‌های سیستم RBAC در کوبرنتیز</h2>



<p>سیستم RBAC در کوبرنتیز ابزار اصلی کنترل دسترسی است، اما به‌تنهایی برای پوشش تمام سناریوهای امنیتی کافی نیست و محدودیت‌های مشخصی دارد:</p>



<p><strong>۱. عدم کنترل روی محتوای منابع</strong></p>



<p>RBAC فقط مشخص می‌کند چه کسی به یک resource دسترسی دارد، اما روی محتوای آن کنترل ندارد. برای مثال، اگر کاربری اجازه دسترسی به Secrets را داشته باشد، می‌تواند به محتوای رمزگذاری‌شده آن‌ها دسترسی پیدا کند، بدون اینکه RBAC بتواند سطح جزئی‌تری از محدودیت اعمال کند.</p>



<p><strong>۲. عدم جلوگیری از Privilege Escalation در سطح Pod</strong></p>



<p>در صورتی که کاربر اجازه ایجاد پاد داشته باشد، می‌تواند از طریق اتصال Service Accountهای دارای سطح دسترسی بالاتر، به مجوزهای بیشتری دست پیدا کند. RBAC به‌تنهایی جلوی این نوع ارتقا سطح دسترسی را نمی‌گیرد.</p>



<p><strong>۳. محدودیت در کنترل منابع زیرساختی</strong></p>



<p>RBAC فقط دسترسی به ایجاد یا مدیریت منابع را کنترل می‌کند، اما نمی‌تواند نوع یا رفتار دقیق برخی منابع را محدود کند. برای مثال، کاربر می‌تواند در صورت داشتن مجوز، نوع PersistentVolume را به شکلی انتخاب کند که ریسک امنیتی ایجاد کند.</p>



<p><strong>۴. عدم کنترل روی عملیات‌های حساس خاص</strong></p>



<p>برخی عملیات مانند <code>impersonate</code> ،<code>bind</code> و <code>escalate</code> می‌توانند منجر به دور زدن سیاست‌های دسترسی شوند. RBAC این عملیات‌ها را در سطح منطقی کنترل می‌کند، اما سوءاستفاده از آن‌ها در صورت داشتن مجوز، همچنان امکان‌پذیر است.</p>



<p><strong>۵. محدودیت در برابر حملات سطح کلاستر</strong></p>



<p>RBAC توانایی محدود کردن رفتارهایی مانند ایجاد حجم بالای resource و مصرف بیش از حد etcd یا CPU را ندارد. برای این موارد باید از مکانیزم‌های مکمل مانند ResourceQuota و LimitRange استفاده شود.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی"><a></a>جمع‌بندی</h2>



<p>RBAC در کوبرنتیز یکی از مهم‌ترین لایه‌های امنیتی برای مدیریت دسترسی کاربران و سرویس‌ها در کلاستر است. این مکانیزم بر پایه تعریف نقش‌ها (Role و ClusterRole)، اتصال آن‌ها به هویت‌ها (RoleBinding و ClusterRoleBinding) و اعمال سیاست‌های دسترسی در سطح API Server عمل می‌کند.</p>



<p>در سطح عملی، RBAC به شما اجازه می‌دهد دسترسی‌ها را به‌صورت دقیق و محدود در سطح Namespace یا کل کلاستر کنترل کنید و اصل Least Privilege را پیاده‌سازی کنید. با این حال، این سیستم به‌تنهایی کافی نیست و باید در کنار سایر مکانیزم‌های امنیتی مانند ResourceQuota، LimitRange و سیاست‌های امنیتی تکمیلی استفاده شود.</p>



<p>همچنین بیشترین خطاها در پیاده‌سازی RBAC معمولاً ناشی از استفاده بیش از حد از دسترسی‌های سراسری، بی‌توجهی به Service Accountها و عدم بازبینی دوره‌ای مجوزهاست. در نهایت، RBAC یک ابزار پایه و ضروری برای امنیت Kubernetes است، اما ارزش واقعی آن زمانی مشخص می‌شود که به‌درستی طراحی، محدود و در کنار سایر لایه‌های امنیتی استفاده شود.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-kubernetes-rbac/">RBAC در کوبرنتیز چیست؟ آشنایی با اجزا و روش‌های پیاده‌سازی</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-kubernetes-rbac/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>به‌روزرسانی تعرفه خدمات هم‌روش از ابتدای خرداد ۱۴۰۵</title>
		<link>https://hamravesh.com/blog/pricing-update-1405/</link>
					<comments>https://hamravesh.com/blog/pricing-update-1405/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Thu, 21 May 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[اخبار هم‌روش]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4755</guid>

					<description><![CDATA[<p>با تداوم افزایش قیمت منابع پردازشی و ذخیره‌سازی، هزینه‌های زیرساختی در سال گذشته افزایش یافته است. در راستای حفظ و ارتقای پایداری بلندمدت و کیفیت خدمات، تعرفه سرویس‌های هم‌روش از ابتدای خرداد ۱۴۰۵ به‌روزرسانی شده است. در این مسیر، تلاش کرده‌ایم تعادلی مناسب میان کیفیت خدمات و هزینه نهایی برای مشتریان برقرار بماند. برای بررسی [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/pricing-update-1405/">به‌روزرسانی تعرفه خدمات هم‌روش از ابتدای خرداد ۱۴۰۵</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>با تداوم افزایش قیمت منابع پردازشی و ذخیره‌سازی، هزینه‌های زیرساختی در سال گذشته افزایش یافته است. در راستای حفظ و ارتقای پایداری بلندمدت و کیفیت خدمات، تعرفه سرویس‌های هم‌روش از ابتدای خرداد ۱۴۰۵ به‌روزرسانی شده است. در این مسیر، تلاش کرده‌ایم تعادلی مناسب میان کیفیت خدمات و هزینه نهایی برای مشتریان برقرار بماند.</p>



<p>برای بررسی جزئیات تغییرات و آشنایی با هزینه منابع و سرویس‌ها، می‌توانید جدول‌های زیر را مشاهده کنید. کلیه هزینه‌ها، بر اساس دوره ماهانه سرویس‌ها ذکر شده‌اند. همچنین <a href="https://hamravesh.com/pricing" target="_blank" rel="noreferrer noopener">صفحه قیمت‌گذاری هم‌روش</a> از ابتدای خرداد با اعمال تغییرات به‌روزرسانی شده‌ است.</p>



<h2 class="wp-block-heading" id="h-منابع">منابع</h2>



<p>هزینه منابع کلاسترهای سرویس‌ها (اختصاصی و عمومی) بر اساس جدول زیر محاسبه می‌شود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="822" height="889" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1.webp" alt="قیمت منابع هم‌روش در سال ۱۴۰۵" class="wp-image-5178" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1.webp 822w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1-277x300.webp 277w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1-768x831.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-81-1-120x130.webp 120w" sizes="auto, (max-width: 822px) 100vw, 822px" /></figure>



<h2 class="wp-block-heading" id="h-پلتفرم-ابری-دارکوب">پلتفرم ابری دارکوب</h2>



<p><a href="https://hamravesh.com/darkube" target="_blank" rel="noreferrer noopener">دارکوب</a> یک پلتفرم ابری بر پایه کوبرنتیز است که به سازمان‌ها این امکان را می‌دهد تا بدون مواجه شدن با دشواری‌های مسائل زیرساخت و نگهداری کوبرنتیز، پروژه‌های خود را به سادگی و با سرعت بالا روی اینترنت بارگذاری و اجرا کنند. هزینه سرویس دارکوب بر اساس منابع ذکر شده در جدول بالا محاسبه می‌شود. همچنین امکان <a href="https://console.hamravesh.com/monitoring" type="link" id="https://console.hamravesh.com/monitoring">فعال کردن سرویس مانیتورینگ عمومی</a> برای اپلیکیشن‌های پلتفرم دارکوب با قیمت ۱،۴۰۰،۰۰۰ تومان فراهم شده است. </p>



<p>در میان سرویس‌هایی که در کنسول هم‌روش،‌ در این بخش قابل مشاهده هستند، هزینه موارد زیر بر اساس جدول‌های جداگانه‌ای محاسبه می‌شود که در ادامه این مطلب، در بخش مربوط به هر سرویس ذکر شده‌اند:</p>



<ul class="wp-block-list">
<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1%DA%86%D9%87-%D9%87%D9%85-%D8%B1%D9%88%D8%B4" type="link" id="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1%DA%86%D9%87-%D9%87%D9%85-%D8%B1%D9%88%D8%B4">اپلیکیشن‌های بازارچه</a></li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%B4%D8%AF%D9%87">دیتابیس مدیریت‌شده</a> (شامل دیتابیس‌های PostgreSQL و MySQL)</li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%AC%DB%8C%D8%B1%D8%A7">جیرا</a></li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%DA%A9%D8%A7%D9%86%D9%81%D9%84%D9%88%D8%A6%D9%86%D8%B3">کانفلوئنس</a></li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%DA%AF%DB%8C%D8%AA-%D9%84%D8%A8-%D8%B1%D8%A7%D9%86%D8%B1" type="link" id="https://hamravesh.com/blog/pricing-update-1405/#h-%DA%AF%DB%8C%D8%AA-%D9%84%D8%A8-%D8%B1%D8%A7%D9%86%D8%B1">گیت‌لب رانر</a></li>
</ul>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/darkube/create" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>ساخت اپ جدید با دارکوب</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-کوبرنتیز-مدیریت-شده">کوبرنتیز مدیریت‌شده</h2>



<p><a href="https://hamravesh.com/managed-kubernetes" target="_blank" rel="noreferrer noopener">کوبرنتیز مدیریت‌شده</a>، عمده فرایندهای مرتبط با زیرساخت را خودکارسازی می‌کند و علاوه بر کاهش هزینه‌های عملیاتی، بهبود کیفیت و افزایش مشاهده‌پذیری را برای سازمان‌ها به همراه می‌آورد. هزینه منابع این کلاستر بر اساس هزینه منابع <a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D9%85%D9%86%D8%A7%D8%A8%D8%B9">جدول بالا</a> به‌علاوه هزینه مدیریت کلاستر بر اساس جدول زیر محاسبه می‌شود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="822" height="458" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82.webp" alt="قیمت سرویس کوبرنتیز مدیریت‌شده هم‌روش در سال ۱۴۰۵" class="wp-image-5179" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82.webp 822w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82-300x167.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82-768x428.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-82-120x67.webp 120w" sizes="auto, (max-width: 822px) 100vw, 822px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>درخواست کوبرنتیز مدیریت‌شده</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-دیتابیس-مدیریت-شده">دیتابیس مدیریت‌شده</h2>



<p><a href="https://hamravesh.com/managed-database" target="_blank" rel="noreferrer noopener">دیتابیس مدیریت‌شده</a> به کسب‌وکارها این امکان را می‌دهد که بدون دغدغه‌‌های مرتبط با مدیریت زیرساخت، سرویس دیتابیس را راه‌اندازی کرده و بر توسعه محصول خود تمرکز کنند. هزینه دیتابیس مدیریت‌شده بر اساس منابع به شرح زیر است.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="821" height="454" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83.webp" alt="قیمت سرویس دیتابیس مدیریت‌شده هم‌روش در سال ۱۴۰۵" class="wp-image-5180" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83.webp 821w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83-300x166.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83-768x425.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-83-120x66.webp 120w" sizes="auto, (max-width: 821px) 100vw, 821px" /><figcaption class="wp-element-caption">*اعداد این جدول در ۱۶ اردیبهشت ۱۴۰۵ اصلاح شده است.</figcaption></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/dbaas" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>ساخت دیتابیس</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-آبجکت-استورج">آبجکت استورج</h2>



<p>سرویس آبجکت استورج هم‌روش، راهکاری مقیاس‌پذیر برای ذخیره‌سازی بهینه انواع آبجکت‌‌ها را ارائه می‌کند. این سرویس امکان توسعه و سازگاری با نیازهای آینده سازمان‌ها را فراهم می‌آورد و می‌تواند به عنوان راهکار اصلی ذخیره‌سازی داده‌های حیاتی یا مکمل زیرساخت موجود، در بهینه‌سازی و افزایش کارایی، نقش کلیدی داشته باشد. هزینه این سرویس در جدول زیر ذکر شده است. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="460" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84.webp" alt="قیمت آبکجت استورج هم‌روش در سال ۱۴۰۵" class="wp-image-5181" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84-300x168.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84-768x429.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-84-120x67.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex" id="https://console.hamravesh.com/marketplace/explore/jira">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/storage" style="background-color:#4a48c2" target="_blank" rel="noopener noreferrer noreferrer noopener">
<strong>ساخت باکت در آبجکت استورج</strong>
</a></div>
</div>



<h2 class="wp-block-heading" id="h-بکاپ">بکاپ</h2>



<p><a href="https://hamravesh.com/backup" target="_blank" rel="noreferrer noopener">سرویس بکاپ</a> هم‌روش امکان پشتیبان‌گیری مستمر و خودکار از اپلیکیشن‌ها و دیسک‌ها را بر اساس سیاست‌های پشتیبان‌گیری متنوع ارائه می‌کند. هزینه سرویس بکاپ بر اساس جدول زیر محاسبه می‌شود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="819" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85.webp" alt="قیمت آبکجت استورج هم‌روش در سال ۱۴۰۵" class="wp-image-5182" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-300x300.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-150x150.webp 150w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-768x764.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-70x70.webp 70w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-85x85.webp 85w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-85-120x119.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex" id="https://console.hamravesh.com/marketplace/explore/jira">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/backup" style="background-color:#4a48c2" target="_blank" rel="noopener noreferrer noreferrer noopener">
<strong>کنسول سرویس بکاپ</strong>
</a></div>
</div>



<h2 class="wp-block-heading" id="h-بازارچه-هم-روش">بازارچه هم‌روش</h2>



<p>بازارچه هم‌روش امکان راه‌اندازی سریع برنامه‌های آماده را بدون پیکربندی پیچیده ارائه می‌کنند. هزینه سرویس‌های بازارچه به شرح زیر است.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="825" height="456" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86.webp" alt="قیمت برنامه‌های آماده بازارچه هم‌روش در سال ۱۴۰۵" class="wp-image-5183" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86.webp 825w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86-300x166.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86-768x424.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-86-120x66.webp 120w" sizes="auto, (max-width: 825px) 100vw, 825px" /></figure>



<p>در میان سرویس‌های بازارچه که در کنسول هم‌روش قابل مشاهده هستند، هزینه سرویس‌های مدیریت‌شده زیر بر اساس جدول‌های جداگانه‌ای محاسبه می‌شود که در ادامه این مطلب، در بخش مربوط به هر سرویس ذکر شده‌اند:</p>



<ul class="wp-block-list">
<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%D8%AC%DB%8C%D8%B1%D8%A7">جیرا</a></li>



<li><a href="https://hamravesh.com/blog/pricing-update-1405/#h-%DA%A9%D8%A7%D9%86%D9%81%D9%84%D9%88%D8%A6%D9%86%D8%B3">کانفلوئنس</a></li>



<li><kbd><a href="https://hamravesh.com/blog/pricing-update-1405/#h-n8n">n8n</a></kbd></li>
</ul>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex" id="https://console.hamravesh.com/darkube/create">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/marketplace/explore" style="background-color:#4a48c2" target="_blank" rel="noopener noreferrer noreferrer noopener">
<strong>ساخت اپ جدید از بازارچه هم‌روش</strong>
</a></div>
</div>



<h2 class="wp-block-heading" id="h-جیرا">جیرا</h2>



<p>سرویس جیرا هم‌روش یک راهکار آماده و بدون پیچیدگی برای سازمان‌هایی است که به یک راهکار قدرتمند و منعطف برای مدیریت پروژه‌های تیم‌ها نیاز دارند. پلن‌های این سرویس به شرح زیر هستند.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="522" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87.webp" alt="قیمت برنامه‌های آماده بازارچه هم‌روش در سال ۱۴۰۵" class="wp-image-5184" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87-300x190.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87-768x487.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-87-120x76.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex" id="https://console.hamravesh.com/marketplace/explore/jira">
<div class="wp-block-button"><a class="wp-block-button__link has-background has-text-align-center wp-element-button" href="https://console.hamravesh.com/marketplace/explore/jira" style="background-color:#4a48c2" target="_blank" rel="noopener noreferrer noreferrer noopener">
<strong>راه‌اندازی سرویس جیرا</strong>
</a></div>
</div>



<h2 class="wp-block-heading" id="h-کانفلوئنس">کانفلوئنس</h2>



<p>سرویس کانفلوئنس هم‌روش یک بستر متمرکز و قابل اعتماد برای مستندسازی، اشتراک دانش و همکاری تیمی در مقیاس سازمانی فراهم می‌کند. پلن‌های این سرویس در جدول زیر ذکر شده‌اند.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="523" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88.webp" alt="هزینه سرویس کانفلوئنس هم‌روش در سال ۱۴۰۵" class="wp-image-5185" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88-300x191.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88-768x488.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-88-120x76.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/marketplace/explore/confluence" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>راه‌اندازی سرویس کانفلوئنس</strong></a></div>
</div>



<p></p>



<p class="has-large-font-size" id="h-n8n"><kbd><strong>n8n</strong></kbd> </p>



<p>سرویس <kbd>n8n</kbd> هم‌روش راهکاری پایدار و مقیاس‌پذیر برای پیاده‌سازی اتوماسیون سازمانی و یکپارچه‌سازی سرویس‌ها در بستر ابری را فراهم می‌کند. این سرویس به تیم‌ها امکان می‌دهد workflowهای پیچیده میان APIها و سیستم‌های داخلی را بدون محدودیت اتصال و با عملکردی بهینه اجرا کنند. پلن‌های این سرویس در جدول زیر ذکر شده‌اند.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="461" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89.webp" alt="هزینه سرویس n8n هم‌روش در سال ۱۴۰۵" class="wp-image-5186" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89.webp 823w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89-300x168.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89-768x430.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-89-120x67.webp 120w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/marketplace/explore/n8n" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>راه‌اندازی سرویس <kbd>n8n</kbd></strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-سنتری">سنتری</h2>



<p><a href="https://hamravesh.com/sentry" target="_blank" rel="noreferrer noopener">سرویس Sentry</a> هم‌روش، راهکاری برای تیم‌های دواپس است که به مانیتورینگ جامع و تحلیل عمیق خطاها در محیط‌های امن و مقیاس‌پذیر نیاز دارند. هزینه‌ این سرویس بر اساس تعداد spanها و errorها به شرح زیر محاسبه می‌شود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="825" height="1020" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90.webp" alt="قیمت سرویس سنتری هم‌روش در سال ۱۴۰۵" class="wp-image-5187" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90.webp 825w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90-243x300.webp 243w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90-768x950.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-90-120x148.webp 120w" sizes="auto, (max-width: 825px) 100vw, 825px" /></figure>



<p><br>در گذشته، هزینه سرویس سنتری بر اساس میزان error و transaction محاسبه می‌شد اما از این پس بر مبنای error و span در نظر گرفته می‌شود. در مبنای محاسبه جدید، هر یک transaction سابق معادل متوسط ۲۰ عدد span در نظر گرفته شده است. همچنین در طرح جدید سرویس، تعداد بسته‌های قابل انتخاب برای span و error افزایش یافته است.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/sentry/create" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>ساخت سنتری</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-گیت-لب-رانر">گیت‌لب رانر</h2>



<p><a href="https://hamravesh.com/gitlab-runner" type="link" id="https://hamravesh.com/gitlab-runner" target="_blank" rel="noreferrer noopener">گیت‌لب رانر</a> هم‌روش با بهره‌گیری از بستر کوبرنتیز و در تعامل با <a href="https://hamgit.ir" target="_blank" rel="noreferrer noopener">هم‌گیت</a> یا گیت‌لب اختصاصی سازمان‌ها، امکان اجرای jobها و ساخت imageهای نرم‌افزارهای سازمان‌ها را به‌صورت خودکار و بدون دغدغه‌ تحریم فراهم می‌کند. پلن‌های سرویس گیت‌لب رانر در جدول زیر ذکر شده است.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="821" height="587" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91.webp" alt="قیمت سرویس گیت‌لب رانر هم‌روش در سال ۱۴۰۵" class="wp-image-5188" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91.webp 821w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91-300x214.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91-768x549.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91-150x108.webp 150w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-91-120x86.webp 120w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://console.hamravesh.com/darkube/create?type=gitlab_runner" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>راه‌اندازی گیت‌لب رانر</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-لود-بالانسر-اختصاصی">لود بالانسر اختصاصی</h2>



<p>سرویس لود بالانسر اختصاصی هم‌روش امکان ایزوله کردن درخواست‌‌‌های HTTP اپلیکیشن‌های سازمان‌ها از دیگر مشتریان کلاستر را فراهم می‌کند. با لود بالانسر اختصاصی سازمان‌ها می‌توانند لاگ‌ها و متریک‌ها را از طریق فعال‌سازی سرویس مانیتورینگ و لاگ جمع‌آوری کنند. لود بالانسر هم‌روش همچنین از SSL termination و health check پشتیبانی می‌کند. هزینه لود بالانسر اختصاصی در جدول زیر مشخص شده است.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="821" height="329" src="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92.webp" alt="قیمت سرویس گیت‌لب رانر هم‌روش در سال ۱۴۰۵" class="wp-image-5189" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92.webp 821w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92-300x120.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92-768x308.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/04/hamravesh-pricing-update-1405-92-120x48.webp 120w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت لودبالانسر اختصاصی</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-پشتیبانی-سازمانی">پشتیبانی سازمانی</h2>



<p>سرویس پشتیبانی سازمانی هم‌روش راهکاری حرفه‌ای برای کسب‌‌وکارهایی است که زیرساخت ابری را بخشی حیاتی از عملیات خود می‌دانند. این سرویس به کسب‌وکارها کمک می‌کند با تمرکز بیشتر روی توسعه محصول،‌ پشتیبانی سرویس‌های ابری را به تیم متخصص بسپارند. با پشتیبانی سازمانی، تیکت‌ها با بالاترین اولویت بررسی می‌شوند، اکانت منیجر اختصاصی به سازمان اختصاص می‌یابد و مانیتورینگ آپ‌تایم و اندپوینت‌های حیاتی توسط هم‌روش انجام می‌شود.</p>



<p>هزینه سرویس‌ پشتیبانی سازمانی به این صورت محاسبه می‌شود که پس از محاسبه هزینه‌های سرویس، به میزان ۸ درصد از مبلغ کل فاکتور، تحت هزینه پشتیبانی سازمانی، به مبلغ افزوده می‌شود و حداقل هزینه پشتیبانی سازمانی ۴۸،۰۰۰،۰۰۰ تومان در نظر گرفته شده است.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت مشاوره برای پشتیبانی سازمانی</strong></a></div>
</div>



<h2 class="wp-block-heading" id="h-سایر-راهکارهای-هم-روش">سایر راهکارهای هم‌روش</h2>



<p>علاوه بر سرویس‌هایی که اشاره شد، راهکارهای اختصاصی زیر نیز توسط هم‌روش ارائه می‌شوند.</p>



<h3 class="wp-block-heading" id="h-مهاجرت-ابری">مهاجرت ابری</h3>



<p>سازمان‌هایی که قصد مهاجرت به زیرساخت ابری هم‌روش را دارند می‌توانند از خدمات مشاوره مهاجرت بهره‌مند شوند. در این خدمات، راهکارهای طراحی و پیاده‌سازی معماری cloud native و مایکروسرویس، dockerize کردن سرویس‌ها و راه‌اندازی CI/CD ارائه می‌شود.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت مشاوره مهاجرت ابری</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-گیت-لب-عمومی-هم-گیت">گیت‌لب عمومی (هم‌گیت)</h3>



<p><a href="https://hamgit.ir" target="_blank" rel="noreferrer noopener">هم‌گیت</a>، سرویس گیت‌لب رایگان است که برای کاربران هم‌روش امکان بارگذاری امن ریپوها را با حفظ حریم خصوصی فراهم می‌کند. هم‌گیت، برخلاف گیت‌لب مشکلات مرتبط با تحریم را ندارد و به صورت مستمر، توسط هم‌روش نگهداری و به‌روزرسانی می‌شود.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamgit.ir" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دسترسی به سرویس هم‌گیت</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-گیت-لب-اختصاصی">گیت‌لب اختصاصی</h3>



<p>سرویس راه‌اندازی گیت‌لب اختصاصی هم‌روش بر پایه گیت‌لب، به سازمان‌ها کمک می‌کند تا یک بستر اختصاصی و یکپارچه برای مدیریت کد و چرخه کامل توسعه نرم‌افزار در اختیار داشته باشند. این سرویس با استقرار در زیرساخت ابری اختصاصی، امکان مدیریت مخازن کد، پیاده‌سازی CI/CD، کنترل دسترسی‌های سازمانی و اجرای خودکار فرایندهای توسعه را فراهم می‌کند.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت گیت‌لب اختصاصی</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-جیتسی-مدیریت-شده">جیتسی مدیریت‌شده</h3>



<p>سرویس Jitsi مدیریت‌شده هم‌روش یک بستر امن، پایدار و مقیاس‌پذیر برای برگزاری جلسات ویدئویی و ارتباطات آنلاین را در اختیار سازمان‌ها قرار می‌دهد. این سرویس با استقرار در زیرساخت ابری اختصاصی، امکان برقراری تماس‌های صوتی و تصویری با کیفیت بالا، مدیریت دسترسی کاربران و کنترل کامل بر داده‌ها را فراهم می‌کند.</p>



<p></p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت جیتسی مدیریت‌شده</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-سرویس-gpu">سرویس GPU</h3>



<p>سرویس GPU هم‌روش راهکاری پیشرفته برای سازمان‌هایی است که قصد دارند بدون نیاز به سرمایه‌گذاری در زیرساخت سخت‌افزاری، از قدرت پردازشگرهای گرافیکی پیشرفته و به‌روز برای پردازش‌های سنگین حوزه هوش مصنوعی (AI) و یادگیری ماشین (ML) استفاده کنند. </p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت سرویس GPU</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-سرویس-vault">سرویس Vault</h3>



<p>سرویس Vault مدیریت‌شده هم‌روش (مبتنی بر Hashicorp Vault)، راهکار مدیریت متمرکز و امن اطلاعات حساس را در بستر ابر به سازمان‌ها ارائه می‌کند. این سرویس امکان ذخیره‌سازی، کنترل دسترسی و استفاده ایمن از کلیدهای API، رمزهای عبور، توکن‌ها و سایر داده‌های محرمانه را فراهم می‌کند و با اعمال سیاست‌های دسترسی مبتنی بر نقش، از دسترسی غیرمجاز جلوگیری می‌کند.</p>



<p></p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button" href="https://hamravesh.com/contact-sales" style="background-color:#4a48c2" target="_blank" rel="noreferrer noopener"><strong>دریافت سرویس Vault</strong></a></div>
</div>



<h3 class="wp-block-heading" id="h-اعتبار-هدیه">اعتبار هدیه </h3>



<p>هم‌روش در ابتدای ثبت‌نام در کنسول، مبلغی به عنوان هدیه را برای مشتریان در نظر می‌گیرد. این مبلغ که تا پیش از این ۱۰۰،۰۰۰ تومان بوده، از ابتدای خرداد ماه به ۵۰۰،۰۰۰ تومان افزایش یافته است.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="has-text-align-center has-white-color has-text-color has-background has-link-color has-medium-font-size wp-elements-f53fe5db44cbed0fd0ebc97dadc3c166" style="background-color:#0f0d23"><strong>اگر سوالی درباره به‌روزرسانی تعرفه خدمات دارید، می‌توانید با واحد فروش، به شماره ۹۲۰۰۹۲۴۰-۰۲۱ &#8211; داخلی ۲، در ارتباط باشید یا درخواست خود را در صفحه </strong><a href="https://hamravesh.com/contact-sales" type="link" id="https://hamravesh.com/contact-sales" target="_blank" rel="noreferrer noopener">درخواست مشاوره</a><strong> ثبت کنید.</strong></p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/pricing-update-1405/">به‌روزرسانی تعرفه خدمات هم‌روش از ابتدای خرداد ۱۴۰۵</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/pricing-update-1405/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>اطلاعیه مهم؛ تغییر فرایند دریافت گواهی SSL برای اپلیکیشن‌‌های بازارچه و دارکوب</title>
		<link>https://hamravesh.com/blog/hamravesh-ssl-process-update/</link>
					<comments>https://hamravesh.com/blog/hamravesh-ssl-process-update/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 13 May 2026 16:10:00 +0000</pubDate>
				<category><![CDATA[اخبار هم‌روش]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5112</guid>

					<description><![CDATA[<p>در راستای حفظ کیفیت سرویس‌دهی اپلیکیشن‌های بازارچه و دارکوب هم‌روش، فرایند صدور گواهی‌های SSL تغییر کرده است. اگر تا پیش از این از دامنه‌های شخصی برای اپلیکیشن‌های خود استفاده می‌کردید، لازم است در اولین فرصت و پیش از انقضای گواهی SSL فعلی صادر شده توسط هم‌روش، تغییرات زیر را اعمال کنید. تغییر نحوه دریافت گواهی [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/hamravesh-ssl-process-update/">اطلاعیه مهم؛ تغییر فرایند دریافت گواهی SSL برای اپلیکیشن‌‌های بازارچه و دارکوب</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در راستای حفظ کیفیت سرویس‌دهی اپلیکیشن‌های بازارچه و دارکوب هم‌روش، فرایند صدور گواهی‌های SSL تغییر کرده است. اگر تا پیش از این از دامنه‌های شخصی برای اپلیکیشن‌های خود استفاده می‌کردید، لازم است <strong>در اولین فرصت و پیش از انقضای گواهی SSL فعلی صادر شده توسط هم‌روش، </strong>تغییرات زیر را اعمال کنید.</p>



<h2 class="wp-block-heading" id="h-تغییر-نحوه-دریافت-گواهی-ssl-برای-اپلیکیشن-های-دارکوب">تغییر نحوه دریافت گواهی SSL برای اپلیکیشن‌های دارکوب</h2>



<p>برای صدور گواهی SSL به روش ثبت رکورد DNS، مراحل زیر را دنبال کنید.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="395" src="https://hamravesh.com/blog/wp-content/uploads/2026/05/02-1024x395.png" alt="" class="wp-image-5113" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/05/02-1024x395.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/05/02-300x116.png 300w, https://hamravesh.com/blog/wp-content/uploads/2026/05/02-768x296.png 768w, https://hamravesh.com/blog/wp-content/uploads/2026/05/02-1536x593.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/05/02-120x46.png 120w, https://hamravesh.com/blog/wp-content/uploads/2026/05/02.png 1912w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>مرحله ۱ و ۲: </strong>ابتدا به <a href="https://console.hamravesh.com/darkube" target="_blank" rel="noreferrer noopener">منوی دارکوب کنسول هم‌روش</a> بروید و سپس روی اپلیکیشن مورد نظر خود کلیک کنید.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="456" src="https://hamravesh.com/blog/wp-content/uploads/2026/05/4-1024x456.png" alt="" class="wp-image-5116" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/05/4-1024x456.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/05/4-300x133.png 300w, https://hamravesh.com/blog/wp-content/uploads/2026/05/4-768x342.png 768w, https://hamravesh.com/blog/wp-content/uploads/2026/05/4-1536x683.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/05/4-120x53.png 120w, https://hamravesh.com/blog/wp-content/uploads/2026/05/4.png 1771w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>مرحله ۳: </strong>از منوی سمت راست روی گزینه «آدرس دامنه» کلیک کنید.</p>



<p><strong>مرحله ۴: </strong>در قسمت «تنظیم گواهی SSL» گزینه «DNS» را انتخاب کنید.</p>



<p><strong>مرحله ۵:</strong> در قسمت «Host Address»، آدرس دامین مورد نظر خود را مشاهده می‌کنید. از صحت این آدرس اطمینان حاصل کنید. همچنین می‌توانید در صورت نیاز این آدرس را تغییر دهید.</p>



<p><strong>مرحله ۶ و ۷:</strong> پس از اطمینان از آدرس، باید به پنل ارائه‌دهنده سرویس DNS مرتبط با دامین خود مراجعه کرده و یک رکورد از نوع CNAME با مشخصات زیر ایجاد کنید:</p>



<ul class="wp-block-list">
<li>در این رکورد، مقدار ساب‌دامین نمایش داده شده در گزینه ۶ تصویر (در این مثال <code>acme-challenge_</code>) را وارد کنید. توجه داشته باشید که اگر آدرس وارد شده در مرحله ۵، شامل ساب‌دامین (مثلا a.example.ir) باشد، مقدار این گزینه نیز شامل ساب‌‌دامین (مثلا <code>acme-challenge.a_</code>) خواهد بود. </li>



<li>Value را نیز مطابق با عبارت نمایش داده شده در گزینه ۷ تصویر وارد کنید.</li>



<li>در نهایت این مقادیر را در پنل ارائه‌دهنده سرویس DNS خود ذخیره کنید و به کنسول هم‌روش بازگردید.</li>
</ul>



<p><strong>مرحله ۸:</strong> حتما در کنسول هم‌روش،<strong> روی «ذخیره تغییرات» کلیک کنید</strong>.</p>



<p><strong>نکته:</strong> توجه داشته باشید که اعمال رکورد CNAME در پنل ارائه‌دهنده سرویس DNS و فرایند Propagation رکورد ممکن است تا ۲ ساعت زمان ببرد.</p>



<h2 class="wp-block-heading" id="h-تغییر-نحوه-دریافت-گواهی-ssl-برای-اپلیکیشن-های-بازارچه">تغییر نحوه دریافت گواهی SSL برای اپلیکیشن‌های بازارچه</h2>



<p>برای صدور گواهی SSL به روش ثبت رکورد DNS، مراحل زیر را دنبال کنید.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1784" height="888" src="https://hamravesh.com/blog/wp-content/uploads/2026/05/10-1024x510.png" alt="" class="wp-image-5117" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/05/10-1024x510.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/05/10-300x149.png 300w, https://hamravesh.com/blog/wp-content/uploads/2026/05/10-768x382.png 768w, https://hamravesh.com/blog/wp-content/uploads/2026/05/10-1536x765.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/05/10-120x60.png 120w, https://hamravesh.com/blog/wp-content/uploads/2026/05/10.png 1784w" sizes="auto, (max-width: 1784px) 100vw, 1784px" /></figure>



<p><strong>مرحله ۱ و ۲:</strong> برای تعریف رکورد CNAME اپلیکیشن‌های بازارچه ابتدا به <a href="https://console.hamravesh.com/marketplace">منوی بازارچه در کنسول هم‌روش</a> بروید سپس روی اپلیکیشن مورد نظر خود کلیک کنید.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="535" src="https://hamravesh.com/blog/wp-content/uploads/2026/05/11-1024x535.png" alt="" class="wp-image-5120" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/05/11-1024x535.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/05/11-300x157.png 300w, https://hamravesh.com/blog/wp-content/uploads/2026/05/11-768x401.png 768w, https://hamravesh.com/blog/wp-content/uploads/2026/05/11-1536x802.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2026/05/11-2048x1070.png 2048w, https://hamravesh.com/blog/wp-content/uploads/2026/05/11-120x63.png 120w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>مرحله ۳ و ۴: </strong>از منوی سمت راست روی گزینه «دامنه» کلیک کنید و سپس در مقابل دامنه خود، روی علامت چرخ‌دنده کلیک کنید.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="859" src="https://hamravesh.com/blog/wp-content/uploads/2026/05/15-1024x859.png" alt="" class="wp-image-5121" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/05/15-1024x859.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/05/15-300x252.png 300w, https://hamravesh.com/blog/wp-content/uploads/2026/05/15-768x645.png 768w, https://hamravesh.com/blog/wp-content/uploads/2026/05/15-120x101.png 120w, https://hamravesh.com/blog/wp-content/uploads/2026/05/15.png 1027w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>مرحله ۵:</strong> در پنجره‌ای که باز می‌شود گزینه «dns01» را انتخاب کنید.</p>



<p><strong>مرحله ۶ و ۷:</strong> حالا باید به پنل ارائه‌دهنده سرویس DNS مرتبط با دامین خود مراجعه کرده و یک رکورد از نوع CNAME با مشخصات زیر ایجاد کنید:</p>



<ul class="wp-block-list">
<li>در این رکورد، مقدار ساب‌دامین نمایش داده شده در گزینه ۶ تصویر (در این مثال <code>acme-challenge_</code>) را وارد کنید. توجه داشته باشید که اگر آدرس وارد شده در مرحله ۵، شامل ساب‌دامین (مثلا a.example.com) باشد، مقدار این گزینه نیز شامل ساب‌‌دامین (مثلا <code>acme-challenge.a_</code>) خواهد بود. </li>



<li>Value را نیز مطابق با عبارت نمایش داده شده در گزینه ۷ تصویر وارد کنید.</li>



<li>در نهایت این مقادیر را در پنل ارائه‌دهنده سرویس DNS خود ذخیره کنید و به کنسول هم‌روش بازگردید.</li>
</ul>



<p><strong>مرحله ۸:</strong> حتما در کنسول هم‌روش، <strong>روی «ذخیره تغییرات» کلیک کنید</strong>.</p>



<p><strong>نکته:</strong> توجه داشته باشید که اعمال رکورد CNAME در پنل ارائه‌دهنده سرویس DNS و فرایند Propagation رکورد ممکن است تا ۲ ساعت زمان ببرد.</p>



<h2 class="wp-block-heading" id="h-سوالات-متداول">سوالات متداول</h2>



<div class="faqListWrapper"><div class="faqItem active"><div class="faqItem__header"><button class="button" type="button"><div class="row align-items-center gx-2"><div class="col-auto"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.09009 9.00106C9.32519 8.33273 9.78924 7.76916 10.4 7.41019C11.0108 7.05122 11.729 6.92 12.4273 7.03977C13.1255 7.15954 13.7589 7.52258 14.2152 8.06459C14.6714 8.60659 14.9211 9.29258 14.9201 10.0011C14.9201 12.0011 11.9201 13.0011 11.9201 13.0011M12 17.001H12.01M7.9 20.001C9.80858 20.9801 12.0041 21.2453 14.0909 20.7488C16.1777 20.2523 18.0186 19.0269 19.2818 17.2932C20.545 15.5596 21.1474 13.4317 20.9806 11.2932C20.8137 9.15464 19.8886 7.14599 18.3718 5.62922C16.855 4.11244 14.8464 3.18727 12.7078 3.02044C10.5693 2.8536 8.44147 3.45607 6.70782 4.71927C4.97417 5.98247 3.74869 7.82333 3.25222 9.91014C2.75575 11.9969 3.02094 14.1924 4 16.101L2 22.001L7.9 20.001Z" stroke="#121119" stroke-opacity="0.88" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="col"><h4><span>اگر این رکورد را برای سرویس فعلی من که دامنه برای آن تعریف شده ایجاد نکنم، چه می‌شود؟</span></h4></div><div class="col-auto arrow"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15 12.501L10 7.50098L5 12.501" stroke="#121119" stroke-opacity="0.45" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div></button></div><div class="faqItem__body"><p><span>در این صورت با فرا رسیدن زمان انقضای گواهی SSL فعلی، سرویس شما در سطح اینترنت از دسترس خارج می‌شود. با توجه به این‌‌که فرایند دریافت گواهی SSL می‌تواند زمان‌بر باشد، پیشنهاد می‌کنیم قبل از منقضی شدن گواهی قبلی، این فرایند را طی کنید. </span></p></div></div><div class="faqItem active"><div class="faqItem__header"><button class="button" type="button"><div class="row align-items-center gx-2"><div class="col-auto"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.09009 9.00106C9.32519 8.33273 9.78924 7.76916 10.4 7.41019C11.0108 7.05122 11.729 6.92 12.4273 7.03977C13.1255 7.15954 13.7589 7.52258 14.2152 8.06459C14.6714 8.60659 14.9211 9.29258 14.9201 10.0011C14.9201 12.0011 11.9201 13.0011 11.9201 13.0011M12 17.001H12.01M7.9 20.001C9.80858 20.9801 12.0041 21.2453 14.0909 20.7488C16.1777 20.2523 18.0186 19.0269 19.2818 17.2932C20.545 15.5596 21.1474 13.4317 20.9806 11.2932C20.8137 9.15464 19.8886 7.14599 18.3718 5.62922C16.855 4.11244 14.8464 3.18727 12.7078 3.02044C10.5693 2.8536 8.44147 3.45607 6.70782 4.71927C4.97417 5.98247 3.74869 7.82333 3.25222 9.91014C2.75575 11.9969 3.02094 14.1924 4 16.101L2 22.001L7.9 20.001Z" stroke="#121119" stroke-opacity="0.88" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="col"><h4><span>پیش از این برای اپلیکیشن بازارچه یا دارکوب دامین اختصاصی تعریف نکرده‌ام، آیا باید این فرایند را طی کنم؟</span></h4></div><div class="col-auto arrow"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15 12.501L10 7.50098L5 12.501" stroke="#121119" stroke-opacity="0.45" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div></button></div><div class="faqItem__body"><p><span>خیر. نیازی به طی کردن این فرایند ندارید. با این حال در صورت تمایل می‌توانید دامنه دلخواه خود را در بخش مربوط به اپ مورد نظرتان وارد و گواهی SSL را فعال کنید. </span></p></div></div><div class="faqItem active"><div class="faqItem__header"><button class="button" type="button"><div class="row align-items-center gx-2"><div class="col-auto"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.09009 9.00106C9.32519 8.33273 9.78924 7.76916 10.4 7.41019C11.0108 7.05122 11.729 6.92 12.4273 7.03977C13.1255 7.15954 13.7589 7.52258 14.2152 8.06459C14.6714 8.60659 14.9211 9.29258 14.9201 10.0011C14.9201 12.0011 11.9201 13.0011 11.9201 13.0011M12 17.001H12.01M7.9 20.001C9.80858 20.9801 12.0041 21.2453 14.0909 20.7488C16.1777 20.2523 18.0186 19.0269 19.2818 17.2932C20.545 15.5596 21.1474 13.4317 20.9806 11.2932C20.8137 9.15464 19.8886 7.14599 18.3718 5.62922C16.855 4.11244 14.8464 3.18727 12.7078 3.02044C10.5693 2.8536 8.44147 3.45607 6.70782 4.71927C4.97417 5.98247 3.74869 7.82333 3.25222 9.91014C2.75575 11.9969 3.02094 14.1924 4 16.101L2 22.001L7.9 20.001Z" stroke="#121119" stroke-opacity="0.88" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="col"><h4><span>آیا این گواهی SSL، پیش از انقضا به طور خودکار تمدید می‌شود؟<br></span></h4></div><div class="col-auto arrow"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15 12.501L10 7.50098L5 12.501" stroke="#121119" stroke-opacity="0.45" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div></button></div><div class="faqItem__body"><p><span>بله. هم‌روش به صورت خودکار این گواهی را پیش از انقضا تمدید می‌کند. </span></p></div></div><div class="faqItem active"><div class="faqItem__header"><button class="button" type="button"><div class="row align-items-center gx-2"><div class="col-auto"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.09009 9.00106C9.32519 8.33273 9.78924 7.76916 10.4 7.41019C11.0108 7.05122 11.729 6.92 12.4273 7.03977C13.1255 7.15954 13.7589 7.52258 14.2152 8.06459C14.6714 8.60659 14.9211 9.29258 14.9201 10.0011C14.9201 12.0011 11.9201 13.0011 11.9201 13.0011M12 17.001H12.01M7.9 20.001C9.80858 20.9801 12.0041 21.2453 14.0909 20.7488C16.1777 20.2523 18.0186 19.0269 19.2818 17.2932C20.545 15.5596 21.1474 13.4317 20.9806 11.2932C20.8137 9.15464 19.8886 7.14599 18.3718 5.62922C16.855 4.11244 14.8464 3.18727 12.7078 3.02044C10.5693 2.8536 8.44147 3.45607 6.70782 4.71927C4.97417 5.98247 3.74869 7.82333 3.25222 9.91014C2.75575 11.9969 3.02094 14.1924 4 16.101L2 22.001L7.9 20.001Z" stroke="#121119" stroke-opacity="0.88" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="col"><h4><span>آیا در حین مدت حداکثر ۲ ساعته که اعمال رکورد CNAME از طرف ارائه‌دهنده سرویس DNS زمان می‌برد، سرویس‌های مرتبط به این دامین من در سطح اینترنت در دسترس است؟</span></h4></div><div class="col-auto arrow"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15 12.501L10 7.50098L5 12.501" stroke="#121119" stroke-opacity="0.45" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div></button></div><div class="faqItem__body"><p><span>اگر تا پیش از این گواهی قبلی شما منقضی نشده باشد، سرویس‌های شما همچنان در دسترس باقی می‌ماند. اگر پیش از این سرویس شما به دلیل انقضای گواهی قبلی از دسترس خارج شده، با اعمال رکورد از طرف ارائه‌دهنده سرویس DNS شما و پس از کامل شدن فرایند Propagation، گواهی صادر شده و ارتباط HTTPS برقرار می‌شود. </span></p></div></div><div class="faqItem active"><div class="faqItem__header"><button class="button" type="button"><div class="row align-items-center gx-2"><div class="col-auto"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.09009 9.00106C9.32519 8.33273 9.78924 7.76916 10.4 7.41019C11.0108 7.05122 11.729 6.92 12.4273 7.03977C13.1255 7.15954 13.7589 7.52258 14.2152 8.06459C14.6714 8.60659 14.9211 9.29258 14.9201 10.0011C14.9201 12.0011 11.9201 13.0011 11.9201 13.0011M12 17.001H12.01M7.9 20.001C9.80858 20.9801 12.0041 21.2453 14.0909 20.7488C16.1777 20.2523 18.0186 19.0269 19.2818 17.2932C20.545 15.5596 21.1474 13.4317 20.9806 11.2932C20.8137 9.15464 19.8886 7.14599 18.3718 5.62922C16.855 4.11244 14.8464 3.18727 12.7078 3.02044C10.5693 2.8536 8.44147 3.45607 6.70782 4.71927C4.97417 5.98247 3.74869 7.82333 3.25222 9.91014C2.75575 11.9969 3.02094 14.1924 4 16.101L2 22.001L7.9 20.001Z" stroke="#121119" stroke-opacity="0.88" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="col"><h4><span>پیش از این گواهی SSL دامین خود را از یک ارائه‌دهنده دیگر دریافت و به هم‌روش ارائه کرده‌ام و توسط هم‌روش روی سرویس من اعمال شده است. آیا در این صورت نیاز به اعمال تغییرات گفته شده در این مقاله دارم؟</span></h4></div><div class="col-auto arrow"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15 12.501L10 7.50098L5 12.501" stroke="#121119" stroke-opacity="0.45" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div></button></div><div class="faqItem__body"><p><span>خیر. در این صورت نیازی به اعمال تغییرات ندارید.</span></p></div></div></div>
<p>The post <a href="https://hamravesh.com/blog/hamravesh-ssl-process-update/">اطلاعیه مهم؛ تغییر فرایند دریافت گواهی SSL برای اپلیکیشن‌‌های بازارچه و دارکوب</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/hamravesh-ssl-process-update/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>گزارش حادثه عمومی زون c13 هم‌روش در ۱۰ فروردین ۱۴۰۵</title>
		<link>https://hamravesh.com/blog/c13-zone-disaster-report-1405/</link>
					<comments>https://hamravesh.com/blog/c13-zone-disaster-report-1405/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 29 Apr 2026 15:26:14 +0000</pubDate>
				<category><![CDATA[اخبار هم‌روش]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4756</guid>

					<description><![CDATA[<p>در ساعات پایانی دوشنبه ۱۰ فروردین ۱۴۰۵ دیتاسنتر زون c13 هم‌روش دچار حادثه شد و سرویس‌‌های عمومی روی این زون به مدت ۲۴ ساعت و سرویس‌های تعدادی از مشتریان به مدت ۳۱ ساعت از دسترس خارج شد. دلیل این حادثه، آتش‌سوزی کابل‌ها و تجهیزات برق بود که قطع برق دیتاسنتر میزبان را به همراه داشت. [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/c13-zone-disaster-report-1405/">گزارش حادثه عمومی زون c13 هم‌روش در ۱۰ فروردین ۱۴۰۵</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در ساعات پایانی دوشنبه ۱۰ فروردین ۱۴۰۵ دیتاسنتر زون c13 هم‌روش دچار حادثه شد و سرویس‌‌های عمومی روی این زون به مدت ۲۴ ساعت و سرویس‌های تعدادی از مشتریان به مدت ۳۱ ساعت از دسترس خارج شد. دلیل این حادثه، آتش‌سوزی کابل‌ها و تجهیزات برق بود که قطع برق دیتاسنتر میزبان را به همراه داشت. این حادثه در سطح زیرساخت فیزیکی رخ داد و خارج از اختیارات هم‌روش بود.</p>



<p>طی مدت حادثه صفحه «<a href="https://status.hamravesh.com" type="link" id="https://status.hamravesh.com" target="_blank" rel="noreferrer noopener">وضعیت سرویس‌های هم‌روش</a>» در حال به‌روزرسانی بود تا کاربران در جریان آخرین وضعیت دیتاسنتر و سرویس‌ها قرار بگیرند.</p>



<h2 class="wp-block-heading" id="h-روند-زمانی-حادثه-و-اقدامات-انجام-شده">روند زمانی حادثه و اقدامات انجام شده</h2>



<ul class="wp-block-list">
<li><strong>۲۲:۴۰ &#8211; ۱۰ فروردین ۱۴۰۵:</strong> هشدار افزایش دمای سرورها دریافت شد و به سرعت تعدادی از سرورها از دسترس خارج شدند. با پیگیری از دیتاسنتر مشخص شد که حادثه ناشی از اختلال برق و از کار افتادن سیستم‌های سرمایش دیتاسنتر بوده است. در ادامه به منظور جلوگیری از آسیب بیشتر به سخت‌افزارها، سایر سرورها نیز خاموش شدند.</li>



<li><strong>۲۲:۴۵ &#8211; ۱۰ فروردین ۱۴۰۵:</strong> دسترسی هم‌روش به دیتاسنتر قطع شد. با پیگیری از دیتاسنتر مشخص شد که بخشی از کابل‌های تامین برق دچار آتش‌سوزی شده و دیتاسنتر به‌صورت کامل از دسترس خارج شده است. پس از مهار آتش‌سوزی، فرایند تعویض کابل‌ها توسط تیم تاسیسات دیتاسنتر آغاز شد.</li>



<li><strong>۱۲:۰۵ &#8211; ۱۱ فروردین ۱۴۰۵:</strong> تیم فنی هم‌روش اطمینان پیدا کرد که ساختمان دیتاسنتر آسیبی ندیده و فرایند بازیابی سرویس‌ها را آغاز کرد.</li>



<li><strong>۱۹:۱۵ &#8211; ۱۱ فروردین ۱۴۰۵: </strong>جریان برق دیتاسنتر، مجدد برقرار و شارژ شدن یو‌پی‌اس‌ها آغاز شد.</li>



<li><strong>۱۹:۵۳ &#8211; ۱۱ فروردین ۱۴۰۵:</strong> فرایند روشن شدن سرورها شروع شد. البته سرورهایی که به دلیل دمای بالا خاموش شده بودند همچنان خاموش باقی ماندند. برخی از سرویس‌ها مجدد در دسترس قرار گرفتند.</li>



<li><strong>۲۱:۵۷ &#8211; ۱۱ فروردین ۱۴۰۵:</strong> برق دیتاسنتر بار دیگر به دلیل مشکل در ورودی برق شهری قطع و فرایند بازیابی و راه‌اندازی سرویس‌ها متوقف شد.</li>



<li><strong>۲۲:۲۴ &#8211; ۱۱ فروردین ۱۴۰۵: </strong>جریان برق برقرار شد و سرورها روشن شدند. تیم فنی هم‌روش اطمینان پیدا کرد که همه سخت‌افزارهای سرورها سالم هستند ولی برخی از استورج‌های SSD در اثر شوک ناشی از قطع برق آسیب دیده‌اند. در ادامه، فرایند راه‌اندازی و بازیابی سرویس‌ها مجدد از سر گرفته شد.</li>



<li><strong>۲۳:۰۰ &#8211; ۱۱ فروردین ۱۴۰۵:</strong> در ۳۶ دقیقه پس از وصل مجدد برق، تمام سرویس‌های عمومی هم‌روش به‌طور کامل در دسترس کاربران قرار گرفت.</li>



<li><strong>۰۰:۰۵ &#8211; ۱۲ فروردین ۱۴۰۵: </strong>فرایند بازیابی داده‌های استورج‌های معیوب شروع شد. همچنین استورج‌های SSD خراب که دچار شوک ناشی از حادثه شده بودند تعویض شدند.</li>



<li><strong>۰۶:۰۰ &#8211; ۱۲ فروردین ۱۴۰۵: </strong>سرویس‌های تمام مشتریان به‌صورت پایدار در دسترس قرار گرفت.</li>
</ul>



<p>طی این حادثه، حداکثر میزان از دست رفتن داده‌ها مربوط به بازه ۲۴ ساعته و محدود به تعداد کمی از مشتریان بود که سرویس‌های آن‌ها با مشکل آسیب استورج‌های SSD مواجه شد. همچنین سرویس «دیتابیس مدیریت‌شده» با استفاده از مکانیزم PITR و بر پایه آخرین base backup و لاگ‌های تراکنش، تا نقطه‌ای کمتر از ۳۰ ثانیه قبل از زمان وقوع حادثه بازیابی شد.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/c13-zone-disaster-report-1405/">گزارش حادثه عمومی زون c13 هم‌روش در ۱۰ فروردین ۱۴۰۵</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/c13-zone-disaster-report-1405/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>رایانش Serverless چیست؟ آشنایی با کاربردهای معماری بدون سرور</title>
		<link>https://hamravesh.com/blog/what-is-serverless/</link>
					<comments>https://hamravesh.com/blog/what-is-serverless/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 25 Mar 2026 12:30:00 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[فضای ابری]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2088</guid>

					<description><![CDATA[<p>امروزه با گسترش رایانش ابری، شیوه‌های سنتی توسعه و استقرار نرم‌افزار در حال تغییر هستند. معماری serverless یکی از این رویکردهای نوین است که به توسعه‌دهندگان اجازه می‌دهد بدون درگیر شدن با مدیریت سرورها و زیرساخت، برنامه‌های خود را اجرا کنند. در این مقاله بررسی می‌کنیم که مفهوم رایانش serverless چیست، نحوه عملکرد آن چگونه [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-serverless/">رایانش Serverless چیست؟ آشنایی با کاربردهای معماری بدون سرور</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>امروزه با گسترش رایانش ابری، شیوه‌های سنتی توسعه و استقرار نرم‌افزار در حال تغییر هستند. معماری serverless یکی از این رویکردهای نوین است که به توسعه‌دهندگان اجازه می‌دهد بدون درگیر شدن با مدیریت سرورها و زیرساخت، برنامه‌های خود را اجرا کنند. در این مقاله بررسی می‌کنیم که مفهوم رایانش serverless چیست، نحوه عملکرد آن چگونه است و مهم‌ترین مزایا و چالش‌های استفاده از این مدل آشنا می‌شویم.</p>



<h2 class="wp-block-heading" id="h-معماری-serverless-چیست"><strong>معماری serverless چیست؟</strong></h2>



<p>معماری serverless مدلی از رایانش ابری است که به کمک آن توسعه‌دهندگان می‌توانند برنامه‌های خود را بدون نیاز به مدیریت سرورها، سیستم‌عامل و زیرساخت اجرا کنند و این مسئولیت‌ها را بر عهده ارائه‌دهنده خدمات ابری بگذارند.</p>



<p>در این نوع رایانش ابری، کماکان برنامه‌ها روی سرورها اجرا می‌شوند، اما بخش مدیریت و نگه‌داری زیرساخت، بر عهده‌ شرکت ارائه‌دهنده‌ خدمات ابری است. این ویژگی باعث می‌شود توسعه‌دهندگان بیشتر بر توسعه قابلیت‌های نرم‌افزار و منطق کسب‌وکار تمرکز کنند.</p>



<h2 class="wp-block-heading" id="h-معماری-serverless-چطور-کار-می-کند"><strong>معماری serverless چطور کار می‌کند؟</strong></h2>



<p>در روش‌های سنتی، تیم‌های فنی باید زیرساخت سرور، به‌روزرسانی‌های امنیتی، مقیاس‌پذیری و نگه‌داری سیستم را مدیریت کنند. با به‌کارگیری خدمات serverless، توسعه‌دهندگان می‌توانند این مسئولیت‌ها را به یک ارائه‌دهنده خدمات ابری محول کرده و بر وظایف اصلی خود تمرکز کنند.</p>



<p>یکی از محبوب‌ترین معماری‌های بدون سرور، Function as a Service (به اختصار FaaS) است که در آن توسعه‌دهندگان کد برنامه خود را به‌عنوان مجموعه‌ای از فانکشن‌ها می‌نویسند. هر فانکشن هنگامی‌که توسط یک رویداد فراخوانی شود، کار خاصی را انجام می‌دهد. پس از مراحل مرسوم تست، توسعه‌دهندگان فانکشن‌های خود را روی یک ارائه‌دهنده ابری مستقر می‌کنند.</p>



<p>هنگامی که یک تابع فراخوانی می‌شود، ارائه‌دهنده خدمات ابری، تابع را روی یک محیط فعال اجرا می‌کند، یا اگر محیط فعالی برای اجرای تابع وجود نداشته باشد، ارائه‌دهنده خدمات ابری یک محیط جدید، معمولاً به شکل کانتینر یا microVM (ماشین مجازی بسیار سبک) ایجاد کرده و کد تابع را در آن اجرا می‌کند. این فرایند در پس‌زمینه انجام می‌شود و برای توسعه‌دهندگانی که بر نوشتن و استقرار کد تمرکز دارند، شفاف است و تأثیری بر روند کار آن‌ها ندارد.</p>



<h2 class="wp-block-heading" id="h-مزایا-و-معایب-استفاده-از-معماری-serverless-چیست"><strong>مزایا و معایب استفاده از معماری serverless</strong> چیست؟</h2>



<p>استفاده از معماری serverless در سال‌های گذشته رشد چشمگیری داشته است. طیف وسیعی از سازمان‌های کوچک و بزرگ و استارت‌‌آپ‌ها به استفاده از این معماری برای برنامه‌های خود روی آورده‌اند. این استقبال از معماری بدون سرور به دلایل زیر اتفاق افتاده است:</p>



<ul class="wp-block-list">
<li><strong>هزینه‌ کمتر:</strong> ارائه‌دهندگان خدمات ابری صرفا برای منابعی که استفاده می‌شوند از کاربر هزینه دریافت می‌کنند. در معماری رایانش بدون سرور، معمولاً هزینه‌ها بر اساس میزان استفاده از منابع مانند مدت زمان پردازش و مصرف حافظه محاسبه می‌شوند؛ هرچند برخی ارائه‌دهندگان خدمات serverless ممکن است هزینه‌های پایه یا محدودیت‌های خاص را نیز در نظر بگیرند.</li>



<li><strong>افزایش بهره‌وری:</strong> رایانش بدون سرور به تیم‌های توسعه این امکان را می‌دهد که به جای مدیریت زیرساخت، بر نوشتن کد تمرکز کنند. در نتیجه توسعه‌دهندگان زمان بیشتری برای نوآوری و بهینه‌سازی منطق کسب‌وکار و عملکرد بخش‌های فرانت‌اند برنامه خواهند داشت.</li>



<li><strong>توسعه با هر زبان برنامه‌نویسی:</strong> محیط‌های خدمات serverless معمولاً چندزبانه هستند و به توسعه‌دهندگان اجازه می‌دهند با زبان‌ها و فریم‌ورک‌هایی که با آن‌ها راحت‌تر هستند کار کنند؛ مانند Java ،Python ،JavaScript یا محیط اجرایی Node.js.</li>



<li><strong>ساده‌تر شدن فرایندهای توسعه و DevOps: </strong>رایانش serverless فرایند استقرار را ساده‌تر و چرخه‌های DevOps را بهینه می‌کند؛ زیرا توسعه‌دهندگان نیازی ندارند زیرساخت لازم برای یکپارچه‌سازی، تست، تحویل و استقرار نسخه‌های نرم‌افزار در محیط تولید را به‌طور دستی تعریف و مدیریت کنند.</li>



<li><strong>کارایی مقرون‌به‌صرفه: </strong>برای برخی بارهای کاری خاص مانند پردازش‌های کاملاً موازی، پردازش جریان داده یا برخی وظایف پردازش داده، رایانش بدون سرور می‌تواند هم سریع‌تر و هم مقرون‌به‌صرفه‌تر از سایر مدل‌های پردازشی باشد.</li>



<li><strong>کاهش تأخیر (Latency):</strong> در برخی پلتفرم‌های serverless امکان اجرای کد در نزدیکی کاربر نهایی وجود دارد. این موضوع می‌تواند باعث کاهش زمان تأخیر در پاسخ‌دهی سیستم شود.</li>
</ul>



<p>البته استفاده از معماری بدون سرور سراسر مزیت نیست. این معماری که به کمک سازمان‌های مختلف آمده، معایبی هم دارد که عبارت‌اند از:</p>



<ul class="wp-block-list">
<li><strong>کنترل کمتر: </strong>در رایانش بدون سرور، سازمان‌ها کنترل سرورها را به یک ارائه‌دهنده خدمات ابری واگذار می‌کنند. در نتیجه مدیریت سخت‌افزار و محیط‌های اجرایی در اختیار ارائه‌دهنده قرار می‌گیرد و توسعه‌دهندگان کنترل مستقیم کمتری بر زیرساخت دارند.</li>



<li><strong>نیاز به برقراری امنیت دقیق: </strong>در بسیاری از پلتفرم‌های serverless، کد کاربران مختلف ممکن است روی زیرساخت مشترک اجرا شود و اگر تنظیمات به‌درستی انجام نشوند، احتمال بروز آسیب‌پذیری‌های امنیتی یا دسترسی غیرمجاز به داده‌ها وجود دارد. با این حال ارائه‌دهندگان ابری معمولاً با استفاده از فناوری‌هایی مانند ایزولیشن کانتینر یا microVM امنیت و جداسازی محیط‌های اجرایی را تضمین می‌کنند.</li>



<li><strong>تأثیر بر عملکرد:</strong> در محیط‌های بدون سرور، اگر مدتی هیچ درخواستی برای یک تابع ارسال نشود، پلتفرم ابری ممکن است محیط مربوط به آن را متوقف کند تا منابع آزاد شوند. در این حالت، هنگام فراخوانی مجدد تابع، سیستم باید محیط اجرایی را دوباره آماده کند. این فرایند باعث ایجاد یک تاخیر اولیه در پاسخ‌دهی می‌شود که به استارت سرد (Cold Start) معروف است.</li>



<li><strong>پیچیدگی در تست و اشکال‌زدایی:</strong> در رایانش serverless فرایند اشکال‌زدایی و تست یکپارچگی می‌تواند پیچیده‌تر باشد، زیرا توسعه‌دهندگان دید شفاف و کاملی نسبت به زیرساخت و فرایندهای پشت‌صحنه ندارند.</li>



<li><strong>هزینه بیشتر برای پردازش‌های طولانی‌مدت:</strong> مدل اجرای رایانش serverless برای اجرای طولانی‌مدت کد طراحی نشده است. بنابراین در برخی موارد، اجرای پردازش‌های طولانی ممکن است نسبت به استفاده از سرور اختصاصی یا ماشین مجازی هزینه بیشتری داشته باشد.</li>



<li><strong>محدودیت تأمین‌کننده:</strong> هر ارائه‌دهنده خدمات ابری قابلیت‌ها و ویژگی‌های خاص خود را در سرویس‌های serverless ارائه می‌دهد که معمولاً با سرویس‌های سایر ارائه‌دهندگان سازگار نیستند. این موضوع می‌تواند مهاجرت به ارائه‌دهندگان دیگر را دشوار کند.</li>
</ul>



<p>به‌طور کلی شرکت‌هایی که می‌خواهند در سریع‌ترین زمان ممکن وارد بازار شوند و برنامه‌های مقیاس‌پذیر و سبک بسازند، می‌توانند از مزایای معماری بدون سرور بهره‌مند شوند.</p>



<p>اما اگر برنامه‌های کسب‌وکار شامل تعداد زیادی فرایند مداوم و طولانی‌مدت است، ماشین‌های مجازی یا کانتینر ابری ممکن است انتخاب بهتری باشند. در یک زیرساخت ترکیبی، توسعه‌دهندگان ممکن است از کانتینرها یا ماشین‌های مجازی برای پاسخ به اکثر درخواست‌ها استفاده کنند، اما برخی از تسک‌های کوتاه‌مدت مانند پردازش تصاویر، ارسال ایمیل، پردازش رویدادها یا اجرای وظایف پس‌زمینه می‌توانند با استفاده از رایانش بدون سرور انجام شوند.</p>



<h2 class="wp-block-heading" id="h-موارد-استفاده-از-معماری-serverless-چیست"><strong>موارد استفاده از معماری serverless</strong> چیست؟</h2>



<p>معماری serverless معمولاً برای بارهای کاری رویدادمحور (event-driven)، پردازش‌های مقطعی و سناریوهایی با ترافیک متغیر یا غیرقابل پیش‌بینی بسیار مناسب است. علاوه بر این، معماری serverless در موارد زیر کاربرد دارد:</p>



<ul class="wp-block-list">
<li><strong>برنامه‌های مبتنی بر رویداد (Trigger-based):</strong> هر برنامه‌ای که با فعالیت کاربران یا رخدادهای مشخصی فعال شود، می‌تواند به‌صورت serverless پیاده‌سازی شود.</li>



<li><strong>ساخت APIهای RESTful:</strong> با استفاده از گیت‌وی‌های API مانند Amazon API Gateway، می‌توان APIهایی ساخت که با تقاضا مقیاس‌پذیر باشند و فقط زمانی منابع مصرف کنند که فراخوانی می‌شوند.</li>



<li><strong>پردازش ناهمزمان (Asynchronous Processing):</strong> توابع بدون سرور می‌توانند وظایف پس‌زمینه مانند پردازش اطلاعات محصولات یا رمزگذاری ویدیوها پس از آپلود را بدون ایجاد تأخیر انجام دهند.</li>



<li><strong>پشتیبانی از بررسی‌های امنیتی:</strong> توسعه‌دهندگان می‌توانند توابعی برای اسکن کانتینرها یا بررسی پیکربندی‌ها و آسیب‌پذیری‌ها فراخوانی کنند. همچنین این توابع می‌توانند در فرایندهای احراز هویت مانند تأیید SSH یا احراز هویت دو مرحله‌ای نقش ایمن‌تری ایفا کنند.</li>



<li><strong>یکپارچه‌سازی و تحویل مداوم (CI/CD):</strong> معماری رایانش بدون سرور می‌تواند در پایپ‌لاین‌های <a href="https://hamravesh.com/blog/what-is-ci-cd/" target="_blank" rel="noreferrer noopener">CI/CD</a> برای خودکارسازی وظایفی مانند تست، پردازش رویدادها و استقرار سرویس‌ها به کار رود.</li>
</ul>



<h2 class="wp-block-heading" id="h-تفاوت-معماری-مایکروسرویس-با-معماری-serverless-چیست"><strong>تفاوت معماری مایکروسرویس</strong> با <strong>معماری serverless </strong>چیست؟</h2>



<p>مایکروسرویس‌ها به نحوه طراحی و ساختار سیستم اشاره دارند، در حالی که رایانش بدون سرور مدلی برای اجرا و استقرار برنامه‌ها محسوب می‌شود.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="638" src="https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-serverless-02-1024x638.webp" alt="مقایسه معماری serverless با معماری مایکروسرویس" class="wp-image-4668" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-serverless-02-1024x638.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-serverless-02-300x187.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-serverless-02-768x478.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-serverless-02-120x75.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-serverless-02.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>برنامه‌های بدون سرور می‌توانند بر اساس اصول معماری مایکروسرویس طراحی شوند و در بسیاری از موارد، این رویکرد توصیه می‌شود. با این حال، استفاده از رایانش Serverless برای مایکروسرویس‌ها الزامی نیست و ممکن است برخی یا همه سرویس‌های یک سیستم مایکروسرویس بدون بهره‌گیری از معماری رایانش بدون سرور پیاده‌سازی شوند. به عبارت دیگر، Serverless یک مدل اجرایی است و مایکروسرویس‌ها یک سبک طراحی؛ بنابراین می‌توانند مستقل از هم یا همراه با هم پیاده‌سازی شوند.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی"><strong>جمع‌بندی</strong></h2>



<p>در این مطلب بررسی کردیم که معماری Serverless چیست و چگونه کار می‌‌کند. معماری رایانش بدون سرور رویکردی نوین در توسعه و اجرای نرم‌افزار است که با واگذاری مدیریت زیرساخت به ارائه‌دهندگان خدمات ابری، به توسعه‌دهندگان اجازه می‌دهد تمرکز خود را بر طراحی قابلیت‌ها و منطق کسب‌وکار قرار دهند. این مدل با ویژگی‌هایی مانند مقیاس‌پذیری خودکار، پرداخت بر اساس میزان مصرف و ساده‌تر شدن فرایندهای استقرار، به گزینه‌ای جذاب برای بسیاری از سازمان‌ها و استارت‌آپ‌ها تبدیل شده است. با این حال، محدودیت‌هایی مانند وابستگی به ارائه‌دهنده، پیچیدگی در تست و احتمال بروز تأخیر در اجرای اولیه نیز باید در نظر گرفته شود.</p>



<p>در نهایت، انتخاب استفاده از رایانش serverless به نوع بار کاری، نیازهای فنی و مقیاس سیستم بستگی دارد و در بسیاری از پروژه‌ها می‌تواند در کنار معماری‌های دیگر مانند کانتینرها یا ماشین‌های مجازی، بخشی از یک زیرساخت ترکیبی باشد.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-serverless/">رایانش Serverless چیست؟ آشنایی با کاربردهای معماری بدون سرور</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-serverless/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>راهنمای استفاده از کش‌رجیستری‌ها و میرورها در شرایط قطعی اینترنت</title>
		<link>https://hamravesh.com/blog/container-registry-mirroring-and-caching/</link>
					<comments>https://hamravesh.com/blog/container-registry-mirroring-and-caching/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Thu, 22 Jan 2026 12:09:01 +0000</pubDate>
				<category><![CDATA[اخبار هم‌روش]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4565</guid>

					<description><![CDATA[<p>در شرایط قطعی اینترنت بین‌الملل، وابستگی مستقیم به رجیستری‌های خارجی می‌تواند فرایند دیپلوی و CI/CD را به‌طور کامل متوقف کند. در این بلاگ‌پست توضیح می‌دهیم چگونه با استفاده از کش‌رجیستری‌ها و میرورهای هم‌روش، بدون وابستگی به رجیستری‌های خارجی، ایمیج‌ها را به‌صورت پایدار و امن دریافت و استفاده کنید.</p>
<p>The post <a href="https://hamravesh.com/blog/container-registry-mirroring-and-caching/">راهنمای استفاده از کش‌رجیستری‌ها و میرورها در شرایط قطعی اینترنت</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>با هدف افزایش پایداری بیلد، کمک به توسعه‌دهندگان و تسریع فرایند دریافت ایمیج‌ها و پکیج‌ها، مجموعه‌ای از کش‌رجیستری‌ها و میرورها در بستر هم‌داکر و هم‌روش فراهم شده است. این مستند نحوه‌ی استفاده از این سرویس‌ها، ساختار آدرس‌دهی، و نکات مهم مرتبط با فرآیند بیلد و دیپلوی را توضیح می‌دهد.</p>



<h2 class="wp-block-heading" id="h-کش-رجیستری-های-در-دسترس"><strong>کش‌رجیستری‌های در دسترس</strong></h2>



<p>در حال حاضر، پنج کش‌رجیستری زیر قابل استفاده هستند که شامل تعداد قابل توجهی از ایمیج‌های پراستفاده می‌باشند:</p>



<p class="has-text-align-left">hub.hamdocker.ir</p>



<p class="has-text-align-left">mcr.hamdocker.ir</p>



<p class="has-text-align-left">gcr.hamdocker.ir</p>



<p class="has-text-align-left">quay.hamdocker.ir</p>



<p class="has-text-align-left">elastic.hamdocker.ir</p>



<p>این رجیستری‌ها به‌ترتیب به‌عنوان میرور رجیستری‌های معروف (Docker Hub، Microsoft Container Registry، Google Container Registry، Quay و Elastic) عمل می‌کنند.</p>



<h2 class="wp-block-heading" id="h-مشاهده-و-جست-وجوی-ایمیج-ها"><strong>مشاهده و جست‌وجوی ایمیج‌ها</strong></h2>



<p>برای مشاهده‌ ایمیج‌های موجود در هر رجیستری، می‌توانید از رابط کاربری وب استفاده کنید.</p>



<h3 class="wp-block-heading"><strong>مثال: Docker Hub (هم‌داکر)</strong></h3>



<p>برای مشاهده‌ی ایمیج‌های موجود در Docker Hub هم‌داکر، به آدرس زیر مراجعه کنید:</p>



<p class="has-text-align-left"><a href="https://hub.hamdocker.ir/ui/packages">https://hub.hamdocker.ir/ui/packages</a></p>



<p>پس از باز شدن صفحه:</p>



<ol class="wp-block-list">
<li>روی آیکون ضربدر در گوشه‌ی بالا و سمت راست کلیک کنید.</li>



<li>سپس می‌توانید از طریق نوار جستجو، ایمیج مورد نظر خود را پیدا کنید.</li>
</ol>



<h3 class="wp-block-heading"><strong>سایر رجیستری‌ها</strong></h3>



<p>برای سایر رجیستری‌ها نیز ساختار آدرس مشابه است و تنها کافی است /ui/packages را به انتهای دامنه اضافه کنید. به عنوان مثال:</p>



<p class="has-text-align-left"><a href="https://mcr.hamdocker.ir/ui/packages">https://mcr.hamdocker.ir/ui/packages</a></p>



<h2 class="wp-block-heading" id="h-ساختار-استفاده-از-ایمیج-ها">ساختار استفاده از ایمیج‌ها</h2>



<h3 class="wp-block-heading"><strong>ایمیج‌های متعلق به یک کاربر مشخص</strong></h3>



<p>برای ایمیج‌هایی که متعلق به یک یوزر خاص هستند، از قالب زیر استفاده کنید:</p>



<p class="has-text-align-left">hub.hamdocker.ir/{username}/{imagename:tag}</p>



<h3 class="wp-block-heading"><strong>ایمیج‌های عمومی (Library)</strong></h3>



<p>برای ایمیج‌های عمومی Docker Hub، از قالب زیر استفاده می‌شود:</p>



<p class="has-text-align-left">hub.hamdocker.ir/library/{imagename:tag}</p>



<p><strong>مثال:</strong></p>



<p class="has-text-align-left">hub.hamdocker.ir/library/nginx:latest</p>



<h3 class="wp-block-heading"><strong>جایگزینی رجیستری‌ها</strong></h3>



<p>برای سایر رجیستری‌ها، کافی است دامنه‌ی اصلی را با معادل هم‌داکر جایگزین کنید.</p>



<p><strong>مثال:</strong></p>



<p>به‌جای:</p>



<p class="has-text-align-left">mcr.microsoft.com/dotnet/aspnet:9.0</p>



<p>از:</p>



<p class="has-text-align-left">mcr.hamdocker.ir/dotnet/aspnet:9.0</p>



<p>استفاده کنید.</p>



<h2 class="wp-block-heading" id="h-کش-رجیستری-پکیج-ها-repo-hmirror"><strong>کش‌رجیستری پکیج‌ها (repo.hmirror)</strong></h2>



<p>علاوه بر ایمیج‌های داکر، کش‌رجیستری repo.hmirror برای مدیریت و دریافت پکیج‌ها نیز ایجاد شده است. در حال حاضر، این کش برای موارد زیر در دسترس است:</p>



<pre class="wp-block-code"><code><strong>npm:</strong> repo.hmirror.ir/npm</code></pre>



<pre class="wp-block-code"><code><strong>Python:</strong> repo.hmirror.ir/python/simple</code></pre>



<pre class="wp-block-code"><code><strong>Go:</strong> repo.hmirror.ir/go</code></pre>



<pre class="wp-block-code"><code><strong>NuGet</strong>: repo.hmirror.ir/nuget</code></pre>



<pre class="wp-block-code"><code><strong>Maven</strong>:  repo.hmirror.ir/maven</code></pre>



<pre class="wp-block-code"><code><strong>Alpine:</strong> repo.hmirror.ir/apk</code></pre>



<pre class="wp-block-code"><code><strong>Debian:</strong> repo.hmirror.ir/debian</code></pre>



<pre class="wp-block-code"><code><strong>Ubuntu:</strong> repo.hmirror.ir/ubuntu</code></pre>



<p>با استفاده از این میرورها، وابستگی پروژه به منابع خارجی کاهش یافته و پایداری بیلد افزایش می‌یابد.</p>



<h2 class="wp-block-heading" id="h-نحوه-استفاده-از-میرورها-در-پروژه-ها-و-dockerfile"><strong>نحوه استفاده از میرورها در پروژه‌ها و Dockerfile</strong></h2>



<p>به‌صورت کلی، هر زبان یا ابزار مدیریت پکیج، یک متغیر محیطی (Environment Variable) یا فایل تنظیمات (Config) برای تعریف میرور دارد. لازم است این تنظیمات در Dockerfile یا کانفیگ پروژه اعمال شوند تا در زمان بیلد، وابستگی‌ها از طریق میرورهای داخلی دریافت شوند.</p>



<h3 class="wp-block-heading"><strong>مثال: (Python pip)</strong></h3>



<p>برای پایتون، می‌توان از متغیر محیطی PIP_INDEX_URL استفاده کرد.</p>



<h4 class="wp-block-heading"><strong>استفاده در Dockerfile:</strong></h4>



<p>در این حالت، تمامی پکیج‌های پایتون از طریق میرور repo.hmirror.ir دریافت می‌شوند.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Dockerfile</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>FROM python:3.11-slim
#تنظیم میرور pip
ENV PIP_INDEX_URL=https://repo.hmirror.ir/python/simple/
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD &#91;"python", "app.py"&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F47067">FROM</span><span style="color: #ADBAC7"> python:3.11-slim</span></span>
<span class="line"><span style="color: #768390">#تنظیم میرور pip</span></span>
<span class="line"><span style="color: #F47067">ENV</span><span style="color: #ADBAC7"> PIP_INDEX_URL=https://repo.hmirror.ir/python/simple/</span></span>
<span class="line"><span style="color: #F47067">WORKDIR</span><span style="color: #ADBAC7"> /app</span></span>
<span class="line"><span style="color: #F47067">COPY</span><span style="color: #ADBAC7"> requirements.txt .</span></span>
<span class="line"><span style="color: #F47067">RUN</span><span style="color: #ADBAC7"> pip install --no-cache-dir -r requirements.txt</span></span>
<span class="line"><span style="color: #F47067">COPY</span><span style="color: #ADBAC7"> . .</span></span>
<span class="line"><span style="color: #F47067">CMD</span><span style="color: #ADBAC7"> &#91;</span><span style="color: #96D0FF">&quot;python&quot;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&quot;app.py&quot;</span><span style="color: #ADBAC7">&#93;</span></span></code></pre></div>



<h2 class="wp-block-heading" id="h-نکات-مهم-درباره-فرایند-بیلد-و-دیپلوی"><strong>نکات مهم درباره‌ فرایند بیلد و دیپلوی</strong></h2>



<ul class="wp-block-list">
<li>در صورتی که پروژه دارای وابستگی به اندپوینت‌های خارجی باشد و از میرورها استفاده نشده باشد، فرایند بیلد با خطا مواجه خواهد شد.</li>



<li>اگر دیپلوی خودکار (Auto Deploy) فعال باشد:
<ul class="wp-block-list">
<li>هر بیلد، منجر به دیپلوی مجدد اپلیکیشن می‌شود.</li>



<li>در صورت شکست بیلد، کانتینر متوقف شده و ممکن است اختلال<strong> </strong>در<strong> </strong>سرویس ایجاد شود.</li>
</ul>
</li>



<li>در صورتی که دیپلوی خودکار غیرفعال باشد:
<ul class="wp-block-list">
<li>خطای بیلد باعث از کار افتادن اپلیکیشن در حال اجرا نخواهد شد.</li>
</ul>
</li>
</ul>



<p>بنابراین، توصیه می‌شود پیش از فعال‌سازی دیپلوی خودکار، اطمینان حاصل کنید که تمامی وابستگی‌ها از طریق کش‌رجیستری‌ها و میرورها تأمین می‌شوند.</p>



<h2 class="wp-block-heading"><strong>منابع تکمیلی</strong></h2>



<p>برای آشنایی بیشتر با نحوه‌ بیلد اپلیکیشن‌ها در شرایط اختلال اینترنت، مطالعه‌ مستند زیر پیشنهاد می‌شود:</p>



<p><strong><a href="https://hamravesh.com/blog/build-app-in-internet-disruption/">راهنمای بیلد اپلیکیشن در زمان اختلال اینترنت</a><br></strong></p>



<h2 class="wp-block-heading"><strong>جمع‌بندی</strong></h2>



<p>استفاده از کش‌رجیستری‌ها و میرورهای هم‌داکر و هم‌روش، نقش مهمی در افزایش پایداری، امنیت و سرعت بیلد و دیپلوی اپلیکیشن‌ها دارد. با رعایت ساختارهای معرفی‌شده در این مستند و جایگزینی منابع خارجی، می‌توانید از بروز خطاهای بیلد و اختلال در سرویس جلوگیری کنید.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/container-registry-mirroring-and-caching/">راهنمای استفاده از کش‌رجیستری‌ها و میرورها در شرایط قطعی اینترنت</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/container-registry-mirroring-and-caching/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title> Supabase چیست و چه کاربردی دارد؟</title>
		<link>https://hamravesh.com/blog/what-is-supabase/</link>
					<comments>https://hamravesh.com/blog/what-is-supabase/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Tue, 06 Jan 2026 12:37:03 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4558</guid>

					<description><![CDATA[<p>Supabase یک پلتفرم متن‌باز برای ساخت بک‌اند است که با ارائه دیتابیس PostgreSQL، احراز هویت و APIهای آماده، توسعه اپلیکیشن‌های وب و موبایل را ساده‌تر می‌کند. در این مقاله با چیستی Supabase و کاربردهای اصلی آن آشنا می‌شویم.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-supabase/"> Supabase چیست و چه کاربردی دارد؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Supabase یک پلتفرم Backend-as-a-Service متن‌باز است که مجموعه‌ای از سرویس‌های آماده بک‌اند مانند دیتابیس، احراز هویت، ذخیره‌سازی فایل و API را در اختیار توسعه‌دهندگان قرار می‌دهد. هدف اصلی BaaS این است که توسعه‌دهنده بدون درگیری با پیاده‌سازی و نگه‌داری زیرساخت‌های پیچیده، مستقیماً روی منطق محصول و تجربه کاربری تمرکز کند.</p>



<p>Supabase با تکیه بر PostgreSQL و رویکرد متن‌باز، به‌عنوان یک جایگزین جدی برای Firebase مطرح شده و به‌ویژه برای پروژه‌هایی که به داده‌های رابطه‌ای و کنترل بیشتر روی بک‌اند نیاز دارند، کاربرد زیادی دارد.</p>



<h2 class="wp-block-heading" id="h-supabase-چه-نیازی-را-برطرف-می-کند"><strong>Supabase چه نیازی را برطرف می‌کند؟</strong></h2>



<p>سوپابیس دقیقاً برای جایی ساخته شده که سرعت توسعه به یک مزیت رقابتی تبدیل می‌شود. زمانی که تیم‌ها نمی‌خواهند هفته‌ها درگیر پیاده‌سازی و نگه‌داری بک‌اند شوند، Supabase مسیر را کوتاه می‌کند. با آماده بودن زیرساخت‌های اصلی، تمرکز از «چطور بسازیم» به «چی بسازیم» منتقل می‌شود. نتیجه، لانچ سریع‌تر محصول و حرکت چابک‌تر در مسیر رشد است.Supabase در عین حال که برای بالا آوردن یک MVP سریع است. برای محصولات جدی و مقیاس‌پذیر، نیز یک انتخاب آینده‌نگرانه است.</p>



<h2 class="wp-block-heading" id="h-ویژگی-های-کلیدی-supabase"><strong>ویژگی‌های کلیدی Supabase</strong></h2>



<h3 class="wp-block-heading"><strong>۱- پایگاه داده PostgreSQL</strong></h3>



<p>مهم‌ترین مزیت Supabase این است که هسته‌ آن PostgreSQL است که یکی از محبوب‌ترین دیتابیس‌های جهان می‌باشد</p>



<p>مزایای کلیدی:</p>



<ul class="wp-block-list">
<li>SQL واقعی: کوئری‌های پیچیده، JOIN، Subquery و Viewها</li>



<li>روابط (Relationships) بین جداول به‌صورت Native</li>



<li>اگر Postgres بلد باشید، Supabase را بلدید</li>



<li>قابل مهاجرت: دیتای شما قفل یک فرمت اختصاصی نیست</li>
</ul>



<h3 class="wp-block-heading" id="h-۲-احراز-هویت-authentication"><strong>۲- احراز هویت (Authentication)</strong></h3>



<p>Supabase از پروژه‌ی متن‌باز GoTrue برای احراز هویت استفاده می‌کند و امکانات زیر را ارائه می‌دهد:</p>



<ul class="wp-block-list">
<li>ثبت‌نام و ورود با ایمیل/پسورد</li>



<li>Google and Github Auth</li>



<li>JWT-based Auth</li>



<li>یکپارچگی آن با فیچر RLS یا Row-Level Security</li>
</ul>



<p>با RLS می‌توانید مستقیماً در دیتابیس مشخص کنید چه کسی به کدام ردیف داده دسترسی دارد؛ بدون نیاز به نوشتن Middlewareهای پیچیده، این امکان در اختیار شما است.</p>



<h3 class="wp-block-heading" id="h-۳-real-time"><strong>۳- Real-time</strong></h3>



<p>Supabase می‌تواند به تغییرات دیتابیس گوش دهد و آن‌ها را به‌صورت Real-time به کلاینت ارسال کند.</p>



<p>کاربردها:</p>



<ul class="wp-block-list">
<li>چت آنلاین</li>



<li>داشبوردهای زنده</li>



<li>Notification سیستم‌ها</li>
</ul>



<p>این قابلیت از طریق replication و WebSocket پیاده‌سازی شده و مستقیماً به Postgres متصل است.</p>



<h3 class="wp-block-heading"><strong>۴- Storage و Edge Functions</strong></h3>



<ul class="wp-block-list">
<li><strong>Storage</strong>:<br>مدیریت فایل‌ها (عکس، ویدئو، PDF و …) با API ساده و کنترل دسترسی مبتنی بر Auth و RLS</li>



<li><strong>Edge Functions</strong>:<br>اجرای توابع Serverless نزدیک به کاربر، مناسب برای:
<ul class="wp-block-list">
<li>Logicهای سبک</li>



<li>اعتبارسنجی و پردازش سریع</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><strong>۴- Log and Monitoring</strong></h3>



<p>نسخه‌ Supabase همچنین این امکان را فراهم می‌کند که لاگ تمامی کامپوننت‌ها به‌صورت متمرکز در داشبورد اختصاصی Supabase قابل مشاهده باشند؛ به‌طوری‌که توسعه‌دهندگان بتوانند به‌راحتی لاگ‌ها را بررسی، عیب‌یابی و پایش کنند.</p>



<h2 class="wp-block-heading" id="h-مقایسه-supabase-با-firebase"><strong><strong>مقایسه Supabase با Firebase</strong></strong></h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>ویژگی</strong></td><td class="has-text-align-center" data-align="center"><strong>Supabase</strong></td><td class="has-text-align-center" data-align="center"><strong>Firebase</strong></td></tr><tr><td class="has-text-align-center" data-align="center">نوع دیتابیس</td><td class="has-text-align-center" data-align="center">Postgresql</td><td class="has-text-align-center" data-align="center">NoSQL</td></tr><tr><td class="has-text-align-center" data-align="center">روابط داده‌ها </td><td class="has-text-align-center" data-align="center">JOIN، Foreign Key، Relation</td><td class="has-text-align-center" data-align="center">دستی و پیچیده</td></tr><tr><td class="has-text-align-center" data-align="center">زبان کوئری</td><td class="has-text-align-center" data-align="center">SQL استاندارد</td><td class="has-text-align-center" data-align="center">کوئری‌های اختصاصی و محدود</td></tr><tr><td class="has-text-align-center" data-align="center">متن‌باز بودن</td><td class="has-text-align-center" data-align="center">✅</td><td class="has-text-align-center" data-align="center">❌</td></tr><tr><td class="has-text-align-center" data-align="center">مدل قیمت‌گذاری</td><td class="has-text-align-center" data-align="center">Resource based</td><td class="has-text-align-center" data-align="center">Usage-based</td></tr><tr><td class="has-text-align-center" data-align="center">گروه توسعه</td><td class="has-text-align-center" data-align="center">Open source</td><td class="has-text-align-center" data-align="center">Google</td></tr></tbody></table></figure>



<p></p>



<h2 class="wp-block-heading" id="h-سوپابیس-one-click-هم-روش"><strong>سوپابیس One-click هم‌روش</strong></h2>



<p>در حالی‌که نسخه‌های Self-Hosted و Cloud سوپابیس هرکدام مزایا و محدودیت‌های خود را دارند، نسخه‌ one-click هم‌روش تلاش می‌کند بهترین ویژگی‌های هر دو را در یک راه‌حل یکپارچه ارائه دهد. در این مدل، Supabase روی زیرساخت پایدار و اختصاصی هم‌روش و در بستر Kubernetes اجرا می‌شود؛ به همین دلیل پایداری، مقیاس‌پذیری و در دسترس‌بودن سرویس به‌صورت تضمین شده است.<br>برای تیم‌هایی که می‌خواهند از Supabase در محیط پروداکشن استفاده کنند و در عین حال دغدغه‌ پایداری سرویس را نداشته باشند، <a href="https://console.hamravesh.com/marketplace/explore/oneclick_supabase">سوپابیس هم‌روش</a> یک انتخاب آماده و مطمئن است. اجرای سرویس روی Kubernetes تضمین می‌کند که حتی در شرایط بار بالا یا خطاهای مقطعی، سرویس در دسترس باقی بماند و تیم‌ها بتوانند تمام تمرکز خود را نه در مدیریت زیرساخت بلکه روی توسعه‌ محصول بگذارند.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-supabase/"> Supabase چیست و چه کاربردی دارد؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-supabase/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>n8n؛ از دستیار شخصی تا زیرساخت اتوماسیون سازمانی</title>
		<link>https://hamravesh.com/blog/n8n-from-hobby-tool-to-production-automation/</link>
					<comments>https://hamravesh.com/blog/n8n-from-hobby-tool-to-production-automation/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Tue, 25 Nov 2025 08:46:03 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4548</guid>

					<description><![CDATA[<p>این مطلب مسیر تبدیل n8n از یک ابزار ساده‌ شخصی به پلتفرمی قابل اعتماد برای اتوماسیون در محیط پروداکشن را بررسی می‌کند. از طراحی معماری و تنظیمات محیط تا پایداری، امنیت و نگه‌داری، گام‌های کلیدی اجرای n8n در سطح سازمانی مرور شده و در پایان به نسخه‌ مدیریت‌شده‌ هم‌روش به‌عنوان نمونه‌ای از پیاده‌سازی آماده اشاره می‌شود.</p>
<p>The post <a href="https://hamravesh.com/blog/n8n-from-hobby-tool-to-production-automation/">n8n؛ از دستیار شخصی تا زیرساخت اتوماسیون سازمانی</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>برای بسیاری از کاربران، n8n هنوز همان ابزار سبک و آزمایشی است که چند گردش‌کار ساده را خودکار می‌کند و بیشتر برای کارهای شخصی یا تست سناریوهای کوچک به کار می‌رود. اما این برداشت، تنها سطح بسیار محدودی از قابلیت‌های واقعی آن را نشان می‌دهد. n8n به‌گونه‌ای طراحی شده که می‌تواند در قلب عملیات سازمانی قرار گیرد و بار اتوماسیون روزانه‌ی یک تیم یا شرکت را به‌دوش بکشد؛ از یکپارچه‌سازی داده‌ها بین سامانه‌های قدیمی تا اجرای فرایندهای پیچیده در مقیاس بزرگ.</p>



<p>در ادامه، نگاهی می‌اندازیم به این‌که چگونه n8n از یک ابزار هابی فراتر می‌رود و به بخشی واقعی از زیرساخت تولید و تصمیم‌گیری در شرکت‌ها تبدیل می‌شود.</p>



<h2 class="wp-block-heading" id="h-از-تست-تا-پروداکشن-تغییر-معماری-در-استقرار-n8n">از تست تا پروداکشن؛ تغییر معماری در استقرار n8n</h2>



<p>اجرای <a href="https://hamravesh.com/blog/what-is-n8n/">n8n</a> در محیط تست، معمولاً ساده و سریع است. چند دستور نصب، یک کانتینر Docker، و جریان‌ها آماده اجرا هستند. در این مرحله، تمرکز روی تجربه اولیه و اثبات ایده است؛ اگر چیزی از کار بیفتد یا داده‌ای از بین برود، تأثیر جدی بر کسب‌وکار ندارد.</p>



<p>اما استقرار در محیط پروداکشن داستان دیگری دارد. اینجا هدف فقط «بالا آمدن» سرویس نیست؛ پایداری، امنیت، قابلیت بازیابی و مقیاس‌پذیری به اولویت‌های اصلی تبدیل می‌شوند. هر گردش‌کاری (workflow) که پیش‌تر آزادانه و بدون محدودیت اجرا می‌شد، حالا باید تحت سیاست‌های امنیتی و ساختارهای کنترلی مشخص پیاده شود.</p>



<p>این تغییر پارادایم یعنی تصمیمات اجرایی از جنس مهندسی زیرساخت می‌شوند: معماری باید قبل از نصب طراحی شود، پایگاه داده و ذخیره‌ساز باید جداگانه و ایمن نگه‌داری شود و مکانیزم‌های مانیتورینگ و پشتیبان‌گیری از روز اول فعال باشد. در غیر این صورت، n8n همچنان در همان نقش آزمایشگاهی باقی می‌ماند و ورودش به سطح سرویس سازمانی به تأخیر می‌افتد.</p>



<p>از این نقطه به بعد، n8n دیگر یک ابزار شخصی برای توسعه‌دهنده نیست. بخشی از زیرساخت کسب‌وکار محسوب می‌شود. سرویسی که باید درست مثل دیگر اجزای حیاتی سیستم، مراقبت شود، به‌روزرسانی منظم داشته باشد و در فرایند نگه‌داری سازمانی جای بگیرد. همین تغییر زاویه نگاه است که مسیر اتوماسیون را از سطح آزمایش به سطح تولید واقعی می‌برد. مسیری که در ادامه با مهم‌ترین پایه‌ آن، یعنی معماری استقرار درست، سراغش می‌رویم.</p>



<h2 class="wp-block-heading" id="h-معماری-استقرار-در-محیط-پروداکشن-از-تک-سرور-تا-مقیاس-سازمانی">معماری استقرار در محیط پروداکشن: از تک‌سرور تا مقیاس سازمانی</h2>



<p>هرچند شروع کار با n8n ساده است، اما رسیدن به سطح پایداری و امنیت لازم برای کسب‌وکار، نیاز به نگاهی کاملاً متفاوت دارد. اینجا دیگر صحبت از نصب روی یک VPS یا حتی یک Docker ساده نیست؛ باید بتوان معماری‌ای پیاده کرد که قابلیت اطمینان، توسعه‌پذیری و مقیاس‌پذیری را تضمین کند.</p>



<p>در نگاه حرفه‌ای، چهار اصل کلیدی در معماری سطح پروداکشن n8n خودش را نشان می‌دهد:</p>



<p><strong>۱. جداسازی اجزای حیاتی</strong><br>در نسخه‌های ساده n8n، دیتابیس (معمولاً PostgreSQL) و ذخیره‌سازی فایل اغلب روی یک سرور اجرا می‌شود. اما در محیط پروداکشن، این رویکرد ریسک بزرگی دارد: کافی‌ست یکی از سرویس‌ها دچار مشکل شود، کل سرویس n8n مختل می‌شود یا داده‌ای از دست می‌رود. معماری اصولی یعنی جداسازی کامل اجزا؛ دیتابیس باید روی سرور اختصاصی یا سرویس مدیریت‌شده باشد، ذخیره‌سازی فایل‌ها به سمت ذخیره‌ساز مقاوم (مثل S3 یا MinIO) هدایت شود و هر جزء به‌صورت قابل نظارت و ایمن اجرا شود.</p>



<p><strong>۲. انتخاب مدل استقرار: Docker Compose یا Kubernetes</strong></p>



<p>بسته به اندازه سازمان و نرخ رشد نیازها، مدل استقرار فرق می‌کند. برای سازمان‌های کوچک یا تیم‌های توسعه‌، Docker Compose اغلب کفایت می‌کند: راه‌اندازی ساده، مدیریت اجزای اصلی و حداقلی از مقیاس‌پذیری. اما از جایی به بعد، مثلا وقتی حجم کار یا حساسیت دیتا بالا می‌رود، باید به <a href="https://hamravesh.com/blog/what-is-kubernetes/">Kubernetes</a> فکر کرد. اینجا، مقیاس‌پذیری، ایزولیشن محیط‌ها، مدیریت خودکار پادها و استفاده از ابزارهایی مثل Helm اهمیت حیاتی پیدا می‌کند.</p>



<p><strong>۳. لایه‌ پراکسی و مدیریت دسترسی</strong></p>



<p>در محیط پروداکشن، قرار نیست n8n مستقیماً از طریق اینترنت در دسترس باشد. راه‌اندازی <a href="https://hamravesh.com/blog/what-is-reverse-proxy/">پراکسی معکوس</a> (مثل Nginx یا Traefik) حیاتی است تا هم بتوان مدیریت ترافیک ورودی را دقیق‌تر انجام داد و هم امکاناتی مثل SSL و محدودیت IP پیاده کرد. لایه پراکسی فرصتی است تا مدیریت session، احراز هویت یکپارچه (SSO) و فیلترهای امنیتی در سطح سازمان پیاده شود.</p>



<p><strong>۴. متغیرهای محیطی و تکرارپذیری استقرار</strong></p>



<p>در محیط پروداکشن، هر تنظیم باید قابل ردیابی و بازتولید باشد. تعریف پارامترهای کلیدی به‌صورت Environment Variables (مثل مسیر ذخیره‌سازی، کلیدهای API، آدرس دیتابیس یا تنظیمات امنیتی) باعث می‌شود پیکره‌بندی سرویس شفاف و تکرارپذیر باشد. به‌جای اعمال تنظیمات دستی در سیستم، نگه‌داری متغیرها در فایل‌های مستند یا سیستم مدیریت پیکره‌بندی (ConfigMap در Kubernetes یا فایل env در Compose) اطمینان می‌دهد هر زمان لازم شد، بتوان همان محیط را سریع و بدون خطا بازسازی کرد. این اصل، ریشه‌ پایداری و انطباق‌پذیری در هر معماری سطح پروداکشن است.</p>



<h2 class="wp-block-heading">پایداری سرویس و مدیریت محیط اجرایی</h2>



<p>وقتی معماری پایه‌ای طراحی و پیاده شد، قدم بعدی حفظ پایداری سرویس در عمل است. در محیط پروداکشن، n8n دیگر یک فرایند ساده Node.js نیست؛ بلکه بخشی از اکوسیستم عملیاتی سازمان است، و باید بتواند مانند هر سرویس حیاتی دیگر در شرایط مختلف پاسخ‌گو باقی بماند.</p>



<p>پایداری یعنی سیستم نه فقط «بالا» بماند، بلکه رفتار قابل پیش‌بینی داشته باشد: اگر خطایی رخ داد، مشخص باشد چه اتفاقی افتاده. اگر بار زیاد شد، منابع مناسب اختصاص داده شود. و اگر محیط نیاز به نگه‌داری داشت، بدون توقف کامل بتوان تغییرات را اعمال کرد. برای رسیدن به این سطح از اطمینان، چند اصل کلیدی وجود دارد که در همه مدل‌های استقرار جدی n8n مشترک‌اند:</p>



<p><strong>۱. پایش سلامت و رفتار سرویس</strong></p>



<p>اولین گام در حفظ پایداری، مانیتورینگ دقیق است. n8n در محیط پروداکشن باید مدام پایش شود: از مصرف CPU و حافظه گرفته تا تعداد گردش‌کارهای (workflow) فعال، مدت زمان اجرای هر job و خطاهای احتمالی. ابزارهایی مثل Prometheus یا Grafana برای جمع‌آوری و مصورسازی این داده‌ها مؤثرند.</p>



<p>به کمک این پایش، تیم می‌تواند قبل از آنکه سرویس دچار بحران شود، نشانه‌های فشار یا ناپایداری را شناسایی کند. در واقع، مانیتورینگ صرفا ابزار گزارش‌گیری نیست، بلکه بخشی از فرهنگ نگه‌داری سرویس است.</p>



<p><strong>۲. مدیریت منابع و مقیاس‌پذیری</strong></p>



<p>n8n با رشد تعداد گردش‌کارها (workflow) و بخش‌های متصل به آن، به‌سرعت مصرف منابع را افزایش می‌دهد. در محیط‌هایی که بر پایه‌ Docker یا Kubernetes طراحی شده‌اند، باید منابع CPU و RAM به‌صورت کنترل‌شده تخصیص داده شوند و محدودیت‌ها (resource limits) مشخص باشد.</p>



<p>در Kubernetes، می‌توان با سیاست‌های Autoscaling سرویس را به شکل انعطاف‌پذیر گسترش داد. این یعنی هر زمان بار کاری افزایش یابد، سیستم خود به‌صورت خودکار پادهای اضافی ایجاد کند و پس از افت بار دوباره جمع شود. به این ترتیب، سرویس از نظر هزینه بهینه می‌شود و در برابر رشد ترافیک ناگهانی هم افت چشمگیری نخواهد داشت.</p>



<p><strong>۳. مکانیزم‌های پشتیبان‌گیری و بازیابی</strong></p>



<p>پایداری واقعی بدون Backup و Disaster Recovery معنایی ندارد. n8n داده‌های حساس ذخیره می‌کند. هر نوع اختلال در پایگاه داده یا فایل‌های ذخیره‌شده می‌تواند کل سرویس را فلج کند.</p>



<p>بنابراین، سیاست پشتیبان‌گیری منظم و آزموده‌شده باید از روز اول فعال باشد. نسخه‌برداری دوره‌ای از دیتابیس Postgres و Sync فایل‌های ذخیره‌شده به فضای امن (S3 یا ذخیره‌ساز آفلاین) ضروری است.</p>



<p>فراتر از گرفتن Backup، باید فرایند بازیابی هم مستند و تست‌شده باشد؛ یعنی تیم بداند اگر حادثه‌ای رخ دهد، دقیقاً چه گام‌هایی لازم است تا سرویس در حداقل زمان ممکن دوباره بالا بیاید.</p>



<p><strong>۴. مدیریت به‌روزرسانی و نسخه‌ها</strong></p>



<p>در محیط پروداکشن، هیچ به‌روزرسانی نباید «در لحظه و بر اساس حدس» انجام شود. هر تغییر نسخه، هر آپدیت Node یا Image جدید، باید از قبل در محیط staging بررسی شود. نسخه‌های جدید n8n معمولاً قابلیت‌های تازه یا تغییرات در ساختار داده دارند، و استقرار غیراصولی آن ممکن است جریان‌های قبلی را بشکند یا رفتار jobها را تغییر دهد.</p>



<p>رویکرد حرفه‌ای این است که فرایند استقرار نسخه جدید به‌صورت تدریجی و قابل بازگشت باشد. ابزارهایی مثل Docker tags یا Helm Releases این کار را راحت می‌کنند. </p>



<p>در مجموع، پایداری یعنی n8n را همچون یک سرویس زنده اداره کنیم، نه یک برنامه‌ نصب‌شده و رهاشده. پایداری حاصل مجموعه‌ای از رفتارهای مداوم است: پایش، نگه‌داری، پشتیبان‌گیری و به‌روزرسانی آگاهانه. سازمان‌هایی که از همان ابتدا این فرهنگ عملی را در تیم خود ایجاد می‌کنند، معمولاً نیمی از چالش‌های پروداکشن را پشت سر گذاشته‌اند.</p>



<h2 class="wp-block-heading" id="h-امنیت-محافظت-از-قلب-زیرساخت-اتوماسیون">امنیت: محافظت از قلب زیرساخت اتوماسیون</h2>



<p>پایداری بدون امنیت زیربنای محکمی ندارد. اگر معماری و عملیات روزمره‌ n8n بر بستر ناامن اجرا شوند، یک نشتی کوچک می‌تواند کسب‌وکار را به توقف کامل بکشاند. در محیط پروداکشن، امنیت فقط انجام چند کار کوچک فنی نیست؛ امنیت یعنی شناخت تهدیدها، مدیریت دسترسی، و کاهش سطح حمله تا حد ممکن.</p>



<p><strong>۱. احراز هویت و کنترل دسترسی</strong></p>



<p>به‌طور پیش‌فرض، n8n یک مکانیزم احراز هویت داخلی دارد، اما این برای سازمان‌ها کافی نیست. باید دسترسی‌ها بر اساس نیاز واقعی افراد تنظیم شوند (اصل Least Privilege).</p>



<p>در ساختارهای سازمانی، پیاده‌سازی Single Sign-On (SSO) یا اتصال به سرویس‌های احراز هویت متمرکز (LDAP، Keycloak) کمک می‌کند تا مدیریت کاربران یکپارچه شود. علاوه بر این، ایجاد حساب‌های جداگانه برای هر کاربر و ثبت فعالیت‌ها (Audit Log) باعث می‌شود ردگیری تغییرات و اقدامات ساده‌تر و مطمئن‌تر باشد.</p>



<p><strong>2. ایمن‌سازی لایه انتقال داده</strong></p>



<p>تمام ارتباطات با n8n باید از طریق HTTPS با گواهی معتبر انجام شوند. گواهی‌های Let’s Encrypt برای آغاز کار رایگان و عملیاتی‌اند، اما در زیرساخت سازمانی بهتر است فرایند صدور و تمدید گواهی‌ها خودکار باشد.</p>



<p>همچنین، اگر سرویس بین چند محیط (dev، staging، prod) داده مبادله می‌کند، باید مجرای ارتباطی از طریق شبکه‌های خصوصی (VPN یا VPC Peering) انجام شود تا اطلاعات حساس از مسیر اینترنت عمومی عبور نکنند.</p>



<p><strong>3. حفاظت از داده‌های حساس</strong></p>



<p>n8n در پیکره‌بندی خود اطلاعات حساسی ذخیره می‌کند: کلیدهای API، توکن‌های OAuth، اطلاعات دسترسی به دیتابیس‌ها و… . در محیط تولید، این داده‌ها باید به‌صورت رمزنگاری‌شده نگه‌داری شوند.</p>



<p>ذخیره این متغیرها ترجیحاً در Secret Managers (مثل Vault,  یا Kubernetes Secrets) انجام شود، نه صرفاً در فایل <code>.env</code> روی سرور. به این ترتیب حتی اگر بخشی از زیرساخت نفوذپذیر شود، اطلاعات حیاتی همچنان محفوظ می‌ماند.</p>



<p><strong>4. محدودسازی سطح حمله</strong></p>



<p>یکی از مزیت‌های اجرای n8n پشت پراکسی معکوس، امکان محدود کردن محل و نوع دسترسی است. با بستن مسیرهای غیرضروری، محدود کردن محدوده IPهای مجاز، و فعال کردن Rate Limiting می‌توان بخشی از حملات brute-force یا موارد دیگر را بی‌اثر کرد.</p>



<p>علاوه بر این، غیرفعال کردن endpointهای پیش‌فرض یا ماژول‌هایی که استفاده نمی‌شوند باعث کاهش تعداد نقاط بالقوه تهدید می‌شود.</p>



<p><strong>5. به‌روزرسانی‌های امنیتی و Patch Management</strong></p>



<p>نسخه‌های جدید n8n نه فقط ویژگی‌های تازه، بلکه اصلاحات امنیتی نیز دارند. در پروداکشن، فاصله بین انتشار آسیب‌پذیری و وصله (Patch) آن باید حداقل شود. برای این کار، فرایند به‌روزرسانی باید مستند، آزمایش‌شده در staging و زمان‌بندی‌شده باشد تا بدون ایجاد downtime ناخواسته اجرا شود.</p>



<p>همین اصل برای وابستگی‌ها (dependencies) و زیرساخت میزبانی هم صادق است؛ گاهی آسیب‌پذیری در Docker base image یا پکیج‌های Node.js پنهان مانده و به‌روزرسانی آن‌ها به همان اندازه حیاتی است که آپدیت خود n8n.</p>



<p>نکته‌ای که باید در خاطر داشته باشید این است که امنیت یک فاز یک‌باره نیست؛ فرایندی مداوم است که با رشد کسب‌وکار و پیچیده‌تر شدن گردش‌کارها باید توسعه یابد. هر گاه امنیت را به‌عنوان بخشی از DNA معماری و عملیات ببینیم، n8n می‌تواند با آرامش خاطر در قلب اتوماسیون سازمانی کار کند.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>در نهایت، مسیری که طی کردیم از آماده‌سازی معماری تا امنیت و پایداری، تصویر روشنی از الزامات اجرای n8n در سطح تولید به‌دست می‌دهد. وقتی این اجزا درست کنار هم قرار بگیرند، سرویس نه‌فقط اجرا می‌شود، بلکه قابل اعتماد و قابل نگه‌داری باقی می‌ماند.</p>



<p>برای تیم‌هایی که ترجیح می‌دهند این مجموعه تصمیم‌ها و نگه‌داری روزمره توسط زیرساختی آماده انجام شود،<a href="https://console.hamravesh.com/marketplace/explore/n8n?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=n8n-launch"> نسخه‌ مدیریت‌شده‌ n8n هم‌روش</a> همان پیاده‌سازی با همان منطق فنی است. اما در قالبی یکپارچه، با امنیت و مانیتورینگ از پیش تنظیم‌شده.</p>



<p>هدف، چه در استقرار مستقل و چه در نسخه‌ مدیریت‌شده، یکی است: داشتن محیطی پایدار و قابل پیش‌بینی برای اجرای اتوماسیون سازمانی، بدون از بین رفتن سادگی و انعطاف‌پذیری اصلی n8n.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex"></div>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/n8n-from-hobby-tool-to-production-automation/">n8n؛ از دستیار شخصی تا زیرساخت اتوماسیون سازمانی</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/n8n-from-hobby-tool-to-production-automation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>n8n چیست و چطور کار می‌کند؟</title>
		<link>https://hamravesh.com/blog/what-is-n8n/</link>
					<comments>https://hamravesh.com/blog/what-is-n8n/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Sat, 15 Nov 2025 13:47:48 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4531</guid>

					<description><![CDATA[<p>n8n یک ابزار اتوماسیون متن‌باز است که به شما امکان می‌دهد فرایندهای کاری‌تان را بدون نیاز به کدنویسی طراحی و اجرا کنید. با n8n می‌توانید کارهای تکراری را خودکار کرده و از اتصال اپ‌هایی مثل Telegram و Gmail تا ساخت جریان‌های پیچیده داده را به‌سادگی انجام دهید.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-n8n/">n8n چیست و چطور کار می‌کند؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>امروز دیگر فرقی نمی‌کند در چه صنعت یا کسب‌وکاری فعالیت می‌کنیم؛ همه‌ ما با مجموعه‌ای از ابزارها و نرم‌افزارهای تخصصی سروکار داریم. برای مدیریت ارتباط با مشتریان از CRM استفاده می‌کنیم، برای بازاریابی سراغ پلتفرم ایمیل می‌رویم، پروژه‌هایمان را در ابزارهای مدیریت پروژه پیش می‌بریم و ده‌ها سرویس دیگر را هم روزانه باز و بسته می‌کنیم تا کارمان جلو برود.</p>



<p>اما نتیجه‌ این تنوع ابزارها، معمولاً چیزی جز پراکندگی جریان کار نیست. نرم‌افزارهایی که قرار بود کار را ساده‌تر کنند، حالا خودشان به مسئله‌ تازه تبدیل شده‌اند؛ سیستم‌هایی جدا از هم که برای اتصالشان باید زمان و انرژی زیادی صرف کنیم.</p>



<p>درست همین‌جا است که خودکارسازی جریان کار (Workflow Automation) معنا پیدا می‌کند؛ اتوماسیون جریان کار (Workflow) راهی برای کنار زدن کارهای تکراری و ساختن اکوسیستم واحدی است میان تمام ابزارهایی که از آن‌ها استفاده می‌کنیم.</p>



<p>یکی از ابزارهایی که این کار را می‌تواند به بهترین شکل ممکن انجام دهد n8n است. n8n پلتفرمی برای خودکارسازی جریان کار است که به شما کمک می‌کند بین سرویس‌های مختلف ارتباط بسازید و کارهای تکراری را به‌صورت خودکار انجام دهید. </p>



<p>در این بلاگ‌پست با n8n آشنا می‌شویم و می‌بینیم چطور این ابزار می‌تواند قطعات پراکنده‌ کار روزانه را به یک جریان یکپارچه تبدیل کند.</p>



<h2 class="wp-block-heading" id="h-n8n-چیست">n8n چیست؟</h2>



<p>n8n ابزاری قدرتمند و متن‌باز برای خودکارسازی جریان کار (Workflow) است. این ابزار به شما کمک می‌کند تا میان برنامه‌های مختلف ارتباط برقرار کنید، کارهای تکراری را خودکار انجام دهید و عملیات روزمره‌تان را بدون نیاز به کدنویسی گسترده ساده‌تر کنید. اگر نام سرویس‌هایی مثل Zapier را شنیده‌اید، درک کاری که n8n انجام می‌دهد برای‌تان آسان‌تر است. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="297" src="https://hamravesh.com/blog/wp-content/uploads/2025/11/n8n-workflow-example-1024x297.png" alt="" class="wp-image-4535" srcset="https://hamravesh.com/blog/wp-content/uploads/2025/11/n8n-workflow-example-1024x297.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2025/11/n8n-workflow-example-300x87.png 300w, https://hamravesh.com/blog/wp-content/uploads/2025/11/n8n-workflow-example-768x223.png 768w, https://hamravesh.com/blog/wp-content/uploads/2025/11/n8n-workflow-example-120x35.png 120w, https://hamravesh.com/blog/wp-content/uploads/2025/11/n8n-workflow-example.png 1460w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>n8n ابزاری است که تقریبا به کار همه می‌آید. نویسندگان، توسعه‌دهندگان، متخصصان مارکتینگ و بسیاری از حوزه‌های دیگر. محیط بصری و مبتنی بر نود (Node) در n8n باعث می‌شود کار با آن بسیار ساده باشد. تصور کنید دارید با لگوهای دیجیتال کار می‌کنید: نودهای مختلف را که هرکدام نمایانگر یک برنامه یا یک اکشن هستند، می‌کشید و رها می‌کنید و بعد آن‌ها را به‌هم وصل می‌کنید تا جریان کاری دلخواهتان ساخته شود.</p>



<h2 class="wp-block-heading" id="h-مفاهیم-کلیدی-در-کار-با-n8n">مفاهیم کلیدی در کار با n8n</h2>



<p>برای شروع کار با n8n فقط کافی است چند مفهوم کلیدی را بشناسید. این‌ها همان بلوک‌های سازنده‌ هر جریان کاری در n8n هستند.</p>



<p><strong>نودها (Nodes):</strong> نود، واحد پایه در n8n است. هر نود می‌تواند نمایانگر یک اپلیکیشن باشد (مثل Google Sheets، Telegram یا WordPress)، یا یک ابزار درونی (مثل تابعی برای ویرایش داده یا افزودن شرط منطقی)، یا یک تریگر. شما نودها را به مسیر کاری خود اضافه می‌کنید تا عمل خاصی را انجام دهند.</p>



<p><strong>اتصالات (Connections):</strong> خطوطی هستند که بین نودها رسم می‌کنید. این خطوط مسیر جریان داده را مشخص می‌کنند. داده از یک نود خارج می‌شود و به‌عنوان ورودی نود بعدی عمل می‌کند؛ به این ترتیب می‌توانید چندین عمل را پشت سر هم زنجیره کنید.</p>



<p><strong>جریان‌ها (Workflows):</strong> یک Workflow همان بوم (canvas) کامل است که مجموعه‌ای از نودها و اتصالات را در خود دارد. این تصویر تمامِ فرایند خودکارشده از آغاز تا پایان است. شما می‌توانید در n8n چندین Workflow‌ مختلف داشته باشید که هرکدام وظیفه مستقلی را انجام می‌دهد.</p>



<p><strong>تریگرها (Triggers):</strong> نود تریگر نقطه‌ شروع یک Workflow است. رویدادی است که کل فرایند را آغاز می‌کند. تریگرها می‌توانند زمان‌بندی باشند (مثلاً «این جریان را هر دوشنبه ساعت ۹ صبح اجرا کن»)، ورود داده‌ جدید در بانک اطلاعاتی، یا دریافت اطلاعات از یک Webhook.</p>



<p><strong>اعتبارسنجی‌ها (Credentials):</strong> برای اینکه n8n بتواند به داده‌های شما در اپلیکیشن‌های دیگر دسترسی داشته باشد (مانند ارسال پیام در کانال Telegram یا افزودن ردیفی به Google Sheet خصوصی‌تان)، باید دسترسی امنی در اختیارش بگذارید. n8n این کلیدها و اطلاعات ورود را به‌صورت رمزنگاری‌شده ذخیره می‌کند تا بتوانید در تمام Workflowهای خود از آن‌ها دوباره استفاده کنید.</p>



<h2 class="wp-block-heading" id="h-کاربردهای-n8n"><strong>کاربردهای n8n</strong></h2>



<p>n8n می‌تواند از ساده‌ترین خودکارسازی‌ها تا پیچیده‌ترین یکپارچه‌سازی‌ها را انجام دهد. این ابزار در حوزه‌های مارکتینگ، فروش، عملیات، توسعه، پشتیبانی مشتریان، مالی و موارد دیگر کاربرد دارد.</p>



<p><strong>اتوماسیون مارکتینگ</strong></p>



<p>اتصال میان CRMها، ابزارهای ایمیل، آنالیتیکس و شبکه‌های اجتماعی را برقرار کنید. مثلاً انتشار پست جدید در WordPress می‌تواند به‌صورت خودکار در شبکه‌های اجتماعی سازمان‌تان به اشتراک گذاشته شود.</p>



<p><strong>اتوماسیون فروشگاه‌های آنلاین (eCommerce)</strong></p>



<p>تأیید سفارش‌ها، به‌روزرسانی موجودی و اعلام وضعیت ارسال را خودکار کنید. برای مثال با تکمیل خرید در فروشگاهتان، n8n می‌تواند داده‌های این خرید را در Google Sheets به‌روزرسانی کند و تیم مسئول ارسال را در کانال Telegram مطلع سازد.</p>



<p><strong>هماهنگ‌سازی فروش و CRM</strong></p>



<p>ورود لیدها را به شکل خودکار ثبت کنید. مثلاً پر شدن یک فرم در Typeform می‌تواند منجر به ساخت کانتکت در CRM، ذخیره داده در Google Sheets و ارسال اعلان به کارشناس فروش در Telegram شود.</p>



<p><strong>جریان‌های کاری توسعه‌دهندگان (Developer Workflows)</strong></p>



<p>GitHub را با ابزارهای مدیریت پروژه پیوند دهید. مثلاً ایجاد یک issue جدید در GitHub می‌تواند به‌صورت خودکار کارت مربوطه را در Jira بسازد و در Telegram پیام اطلاع‌رسانی ارسال کند.</p>



<p><strong>پایپ‌لاین‌های داده و فرایندهای ETL</strong></p>



<p>استخراج، فیلتر و بارگذاری داده‌ها را خودکار کنید. مثلاً داده‌های نظرسنجی در Google Sheets را تمیز کنید و در پایگاه داده PostgreSQL ذخیره نمایید.</p>



<p><strong>اتوماسیون پشتیبانی مشتریان</strong></p>



<p>با استفاده از n8n در پلتفرم پشتیبانی کسب‌وکارتان می‌توانید به‌صورت خودکار تیکت‌ها را به اوپراتور مربوطه اختصاص دهید و اعلان‌های مربوط به آن را در Telegram برای تیم مناسب بفرستید.</p>



<p><strong>اتوماسیون مالی و اداری</strong></p>



<p>هنگامی‌که پرداختی انجام شد، به‌طور خودکار فاکتور ایجاد و ارسال شود و سپس نسخه‌ای از آن در Google Drive ذخیره گردد.</p>



<p><strong>وظایف زمان‌بندی‌شده و هشدارها</strong></p>



<p>گزارش‌ها و یادآوری‌ها را زمان‌بندی کنید. مثلاً هر دوشنبه گزارش هفتگی فروش ایجاد و از طریق ایمیل ارسال شود.</p>



<p><strong>یکپارچه‌سازی SaaS و جریان‌های کاری محصول</strong></p>



<p>فرایند آغاز همکاری (Onboarding) کاربران را خودکار کنید. ثبت‌نام جدید می‌تواند ورودی دیتابیس بسازد، ایمیل خوش‌آمد ارسال کند، وضعیت را در Notion به‌روزرسانی کند و تیم موفقیت مشتری را باخبر سازد.</p>



<p><strong>کاربرد در آموزش و پروژه‌های شخصی</strong></p>



<p>درس‌ها و فایل‌های آموزشی را سازمان‌دهی کنید؛ مثلاً پیوست‌های ایمیل با برچسب خاص به‌صورت خودکار در Google Drive ذخیره شوند.</p>



<p>همان‌طور که می‌بینیم، n8n تقریباً در هر بخش از کسب‌وکار جای خودش را باز می‌کند. حالا بیایید ببینیم چطور می‌توانیم از آن در عمل استفاده کنیم.</p>



<h2 class="wp-block-heading" id="h-چطور-از-n8n-استفاده-کنیم"><strong>چطور از n8n استفاده کنیم؟</strong></h2>



<p>برای شروع کار با <strong>n8n</strong> دو روش اصلی وجود دارد: نسخه سلف‌‌هاست (Self‑Hosted) و نسخه ابری (Cloud). </p>



<p><strong>نسخه Self‑Hosted:</strong></p>



<p>در این حالت، شما n8n را روی سرور یا محیط دلخواه خود نصب می‌کنید — از Docker گرفته تا VPS یا حتی محیط محلی. کنترل کامل داده‌ها، تنظیمات امنیتی و نحوه اجرا در دست شماست. این گزینه برای تیم‌هایی مناسب است که دوست دارند اتوماسیون‌ها را در بستر داخلی خودشان اجرا کنند.</p>



<p><strong>نسخه Cloud:</strong></p>



<p>اگر به‌دنبال شروع سریع‌تر و بدون دردسر مدیریت سرور هستید، نسخه n8n Cloud بهترین گزینه است. تنها با ساخت حساب کاربری می‌توانید جریان‌های کاری خود را طراحی، اجرا و مانیتور کنید، بدون آن‌که درگیر پیکربندی یا به‌روزرسانی فنی شوید. البته با توجه به مشکلات مربوط به تحریم یا قطعی اینترنت، این گزینه ممکن است در شرایط خاص مشکلاتی برای کسب‌وکار شما پیش بیاورد. </p>



<p>در بخش بعدی، به n8n مدیریت‌شده‌ی هم‌روش می‌پردازیم؛ راه‌حلی که مزایای سلف‌‌هاست را با سادگی و اطمینان نسخه ابری ترکیب می‌کند.</p>



<h3 class="wp-block-heading" id="h-n8n-مدیریت-شده-هم-روش"><strong>n8n مدیریت‌شده هم‌روش</strong></h3>



<p>در حالی‌که نسخه‌های Self‑Hosted و Cloud هرکدام مزایای خود را دارند، نسخه‌<a href="https://console.hamravesh.com/marketplace/explore/n8n?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=n8n-launch"> n8n مدیریت‌شده‌ هم‌روش</a> تلاش می‌کند بهترین ویژگی‌های هر دو را در یک راه‌حل ترکیب کند. در این مدل، n8n روی زیرساخت اختصاصی و پایدار هم‌روش اجرا می‌شود، اما همچنان کنترل و انعطاف نسخه‌ سلف‌ هاست را حفظ می‌کند.</p>



<p>تیم هم‌روش تمام نگه‌داری، به‌روزرسانی و امنیت سرور را بر عهده دارد؛ یعنی بدون درگیر شدن با تنظیمات فنی، همیشه به آخرین نسخه‌ پایدار و امن n8n دسترسی دارید. در عین حال می‌توانید جریان‌های کاری خود را دقیقاً مانند نسخه سلف‌‌هاست طراحی، ویرایش و گسترش دهید.</p>



<p>برای تیم‌هایی که می‌خواهند تأثیر اتوماسیون را در محیط پروداکشن تجربه کنند، بدون هزینه‌های فنی نگه‌داری زیرساخت، n8n مدیریت‌شده‌ هم‌روش گزینه‌ای مطمئن و آماده برای اجراست. یک محیط انعطاف‌پذیر، امن و همیشه در دسترس؛ مخصوص تیم‌هایی که می‌خواهند فقط روی ساخت جریان‌های کاری تمرکز کنند، نه روی مدیریت سرورها.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-n8n/">n8n چیست و چطور کار می‌کند؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-n8n/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>نحوه انتقال از ایمیج‌های Bitnami به گزینه‌های جایگزین</title>
		<link>https://hamravesh.com/blog/bitnami-images-alternatives/</link>
					<comments>https://hamravesh.com/blog/bitnami-images-alternatives/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Thu, 18 Sep 2025 08:37:44 +0000</pubDate>
				<category><![CDATA[اخبار هم‌روش]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4506</guid>

					<description><![CDATA[<p>Bitnami پشتیبانی بسیاری از ایمیج‌های رایگانش را متوقف کرده است. در این مطلب، دو مسیر کم‌ریسک برای ادامه کار یا مهاجرت به جایگزین‌ها را معرفی می‌کنیم.</p>
<p>The post <a href="https://hamravesh.com/blog/bitnami-images-alternatives/">نحوه انتقال از ایمیج‌های Bitnami به گزینه‌های جایگزین</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در ماه‌های اخیر، Bitnami اعلام کرده است که پشتیبانی رسمی از بسیاری از ایمیج‌های رایگان خود را متوقف می‌کند. و فقط ایمیج‌های latest به‌صورت رایگان در دسترس خواهند بود. این تغییر، به‌ویژه برای تیم‌هایی که سرویس‌های خود را بر پایه این ایمیج‌ها ساخته‌اند می‌تواند بر امنیت، پایداری و روند توسعه سرویس‌هایشان تأثیر بگذارد. </p>



<p>در ادامه، بسته به وضعیت و نیاز شما، راهکارهایی برای هر دو دسته اپلیکیشن‌های آماده و اپلیکیشن‌های مبتنی بر گیت یا داکر ارائه شده است.</p>



<p><strong>توصیه مهم</strong>: قبل از اعمال هرگونه تغییر، حتماً از سرویس و داده‌های خود بکاپ کامل تهیه کنید تا در صورت بروز مشکل بتوانید به وضعیت قبلی بازگردید.</p>



<h2 class="wp-block-heading" id="h-اپلیکیشن-های-آماده">اپلیکیشن‌های آماده</h2>



<p>ایمیج‌های آماده‌ کنسول هم‌روش از سوی تیم فنی هم‌روش اصلاح می‌شود. <strong>فقط اگر از  MySQL و یا MariaDB استفاده می‌کنید، لازم است وارد اپ شوید و ذخیره تغییرات را بزنید تا ایمیج‌های بیت‌نامی اصلاح شود.</strong></p>



<h2 class="wp-block-heading" id="h-اپ-های-گیتی-و-داکری"><br>اپ‌های گیتی و داکری</h2>



<p>اگر اپلیکیشن‌های شما بر پایه ایمیج‌های گیتی یا داکری است، می‌توانید از دو روش زیر استفاده کنید:</p>



<h3 class="wp-block-heading" id="h-استفاده-از-ایمیج-های-bitnami-legacy"><strong> استفاده از ایمیج‌های Bitnami Legacy </strong></h3>



<p>بر اساس اطلاع‌رسانی بیت‌نامی اکثر ایمیج‌ها برای همیشه ذیل bitnamilegacy در دسترس هستند. برای این حالت نیاز است آدرس ایمیج خود را از bitnami به bitnamilegacy تغییر دهید. در این حالت برای مثال ایمیج bitnami/mongodb به ایمیج bitnamilegacy/mongodb تغییر می‌کند.</p>



<p> این روش ساده است و نیازی به تغییر بیشتری ندارد. اما نکنه منفی پیرامون آن این است که دیگر این ایمیج‌ها هیچ آپدیتی دریافت نمی‌کنند(چه از نوع فیچر و چه امنیتی) و در صورتی که آسیب‌پذیری امنیتی حادی گزارش شود با مشکل روبه‌رو می‌شویم. <br></p>



<h3 class="wp-block-heading" id="h-مهاجرت-به-ایمیج-های-غیر-bitnami"><strong>مهاجرت به ایمیج‌های غیر Bitnami</strong></h3>



<p>راهکار دوم، استفاده از ایمیج‌های جایگزین (غیر Bitnami) است. در این حالت لازم است برخی تغییرات در محیط و مسیرهای داده انجام شود:</p>



<ul class="wp-block-list">
<li><strong>بازبینی متغیرهای محیطی (Environment Variables):</strong></li>
</ul>



<p>&nbsp;ایمیج‌های جدید معمولاً ساختار متفاوتی برای تنظیمات دارند. باید مقادیر موجود را با داکیومنتیشن ایمیج جدید تطبیق دهید.</p>



<ul class="wp-block-list">
<li><strong>بررسی و تغییر مسیرهای داده (Data Path):</strong></li>
</ul>



<p>مسیر ذخیره‌سازی داده‌ها در ایمیج‌های جایگزین با Bitnami تفاوت دارد. لازم است مسیر قدیمی را شناسایی کرده و داده‌ها را به مسیر جدید منتقل کنید. برای انجام این کار مراحل زیر را به‌ترتیب انجام دهید:</p>



<ul class="wp-block-list">
<li> گرفتن بکاپ قبل از اعمال تغییرات</li>



<li>شناسایی مسیر جدید ذخیره دیتا بر اساس ایمیج جدید</li>



<li>افزودن پارتیشن مربوط به مسیر جدید و پرسیست کردن آن</li>



<li>تغییر ایمیج اجرایی به sleep با آرگومان یک زمان زیاد</li>



<li>کپی کردن دیتا از مسیر قدیمی به جدید</li>



<li>تغییر ایمیج</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>بررسی و تغییر پرمیشن‌های مسیرهای داده :</strong></li>
</ul>



<p>مسیر ذخیره‌سازی داده‌ها در ایمیج‌های جایگزین با Bitnami ممکن است پرمیشن متفاوتی داشته باشند که در صورت لزوم باید آن را اعمال کنید.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی"><strong>جمع‌بندی</strong></h2>



<p>اگرچه ایمیج‌های Bitnami مدت‌ها یکی از محبوب‌ترین انتخاب‌ها برای توسعه‌دهندگان بوده‌اند، اما با توجه به توقف پشتیبانی رسمی از ایمیج‌های رایگان، ادامه استفاده از آن‌ها می‌تواند ریسک‌زا باشد. ما به شما توصیه می‌کنیم در کوتاه‌مدت از <strong>Bitnami Legacy</strong> و در بلندمدت با برنامه‌ریزی مناسب به ایمیج‌های <strong>غیر Bitnami</strong> مهاجرت کنید تا از امنیت و پایداری سرویس‌های خود اطمینان داشته باشید.</p>



<p><br></p>
<p>The post <a href="https://hamravesh.com/blog/bitnami-images-alternatives/">نحوه انتقال از ایمیج‌های Bitnami به گزینه‌های جایگزین</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/bitnami-images-alternatives/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>راهکار build گرفتن از اپ‌ها در شرایط اختلال شبکه بین‌الملل</title>
		<link>https://hamravesh.com/blog/build-app-in-internet-disruption/</link>
					<comments>https://hamravesh.com/blog/build-app-in-internet-disruption/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Sun, 22 Jun 2025 10:45:45 +0000</pubDate>
				<category><![CDATA[اخبار هم‌روش]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4394</guid>

					<description><![CDATA[<p>قطعی یا اختلال در شبکه بین‌الملل مشکلاتی برای فرایند بیلد اپ‌ها پیش می‌آورد. گرچه هم‌روش همواره در تلاش هست تا ارتباط با شبکه بین‌الملل را برای رانر‌ها فراهم کند، اما ممکن است در زمان‌هایی، این محدودیت فرایند بیلد را با مشکل مواجه کند. در هم‌روش راهکارهایی برای مواجه با چنین شرایطی در نظر گرفته‌ایم. در [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/build-app-in-internet-disruption/">راهکار build گرفتن از اپ‌ها در شرایط اختلال شبکه بین‌الملل</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>قطعی یا اختلال در شبکه بین‌الملل مشکلاتی برای فرایند بیلد اپ‌ها پیش می‌آورد. گرچه هم‌روش همواره در تلاش هست تا ارتباط با شبکه بین‌الملل را برای رانر‌ها فراهم کند، اما ممکن است در زمان‌هایی، این محدودیت فرایند بیلد را با مشکل مواجه کند.</p>



<p>در هم‌روش راهکارهایی برای مواجه با چنین شرایطی در نظر گرفته‌ایم. در ادامه این مقاله به بررسی این راه‌حل‌ خواهیم پرداخت.  </p>



<h2 class="wp-block-heading" id="h-۱-مخزن-کدتان-را-به-شبکه-داخلی-انتقال-دهید">۱. مخزن کدتان را به شبکه داخلی انتقال دهید</h2>



<p>طبیعتا در زمان قطعی اینترنت بین‌الملل برای ارتباط با ریپازیتوری کدتان باید مخزن کد را به داخل انتقال دهید. بنابراین پیشنهاد ما این است که در گام اول ریپازیتوری خود را به سرویس گیت‌لب هم‌روش (<a href="https://hamgit.ir/users/sign_in">هم‌گیت</a>) انتقال دهید. </p>



<h2 class="wp-block-heading" id="h-۲-دارکوب-را-به-هم-گیت-خود-متصل-کنید"><br>۲. دارکوب را به هم‌گیت خود متصل کنید</h2>



<p>پس از انتقال ریپازیتوری به هم‌گیت، باید هم‌گیت‌تان را به دارکوب متصل کنید تا فرایند بیلد اپ از روی هم‌گیت انجام شود. برای انجام این کار وارد قسمت ساخت اپ در دارکوب شوید.<br>اگر فرایند اتصال را درست طی کرده باشید، لیست این ریپازیتوری‌ها از قسمت هم‌گیت در هنگام ساخت اپ گیتی در دارکوب برای‌تان قابل مشاهده خواهد بود.</p>



<h2 class="wp-block-heading" id="h-۳-در-اپلیکیشن-مورد-نظر-آدرس-ریپازیتوری-را-تغییر-دهید">۳. در اپلیکیشن مورد نظر، آدرس ریپازیتوری را تغییر دهید</h2>



<p>برای تغییر ریپازیتوری، در صفحه تنظیمات اپ یا تب CI/CD آن، ابتدا روی گزینه مداد کنار اسم ریپو کلیک و سپس نسبت به تغییر آدرس اقدام کنید. نهایتا برای اعمال تغییرات جدید، روی گزینه ذخیره تغییرات کلیک کنید.</p>



<h2 class="wp-block-heading" id="h-۴-تغییرات-موردنیاز-را-بر-روی-داکرفایلتان-اعمال-کنید">۴. تغییرات موردنیاز را بر روی داکرفایلتان اعمال کنید</h2>



<p>هم‌زمان با تغییر ریپازیتوری اپلیکیشن از سمت پشتیبانی هم‌روش، شما می‌توانید تغییرات مدنظرتان را بر روی داکر فایل موجود در هم‌گیت خود اعمال کنید. در اینجا منظور از تغییرات،‌ حذف بخش‌هایی است که برای اجرا در مرحله بیلد به اینترنت بین‌الملل وابسته است. </p>



<p>همان‌طور که می‌دانید در اغلب بیلدها ما به نصب پکیچ‌های مشخص نیاز داریم. برای رفع این نیاز در شرایط حاضر می‌توانید از راهکار زیر استفاده کنید: </p>



<p><strong>۴.۱. در ابتدا کامند‌های مربوط به نصب پکیج در داکرفایل را کامنت کنید.</strong></p>



<p><strong>۴.۲. برای تامین پکیج‌های موردنیاز از پکیج‌های موجود در بیلدهای قدیمی‌تر استفاده کنید.</strong></p>



<p> برای انجام این کار ابتدا به اپ مورد نظرتان در دارکوب مراجعه کنید.</p>



<p>در قسمت اطلاعات عمومی اپ دارکوبی‌تان، در باکس ایمیج داکری، اطلاعات مربوط به ایمیجی را که در حال حاضر بر روی دارکوب پیاده شده  مشاهده می‌کنید. نام ایمیج را به همراه تگ آن از قسمت آبی رنگ، باید به‌عنوان ایمیج پایه در Dockerfile و جلوی کلیدواژه FROM استفاده کنیم. تصویر زیر شروع یک داکرفایل برای اپ پایتونی را قبل و بعد از این تغییرات نشان می‌دهد:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="134" src="https://hamravesh.com/blog/wp-content/uploads/2025/06/dockerfile-1024x134.png" alt="شروع داکرفایل قبل و بعد از اعمال تغییرات" class="wp-image-4406" srcset="https://hamravesh.com/blog/wp-content/uploads/2025/06/dockerfile-1024x134.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2025/06/dockerfile-300x39.png 300w, https://hamravesh.com/blog/wp-content/uploads/2025/06/dockerfile-768x101.png 768w, https://hamravesh.com/blog/wp-content/uploads/2025/06/dockerfile-1536x201.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2025/06/dockerfile-2048x268.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>۴.۳. در قدم آخر فقط باید مطمئن شویم که تغییرات کد به‌درستی و کامل روی کد قبلی ایمیج پایه overwrite می‌شود.</strong></p>



<p>نهایتا قبل و بعد یک داکرفایل پایتونی به‌عنوان مثال می‌تواند به این شکل باشد:</p>



<p>قبل از اعمال تغییرات:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="223" src="https://hamravesh.com/blog/wp-content/uploads/2025/06/before-1024x223.png" alt="تصویر داکرفایل قبل از اعمال تغییرات" class="wp-image-4404" srcset="https://hamravesh.com/blog/wp-content/uploads/2025/06/before-1024x223.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2025/06/before-300x65.png 300w, https://hamravesh.com/blog/wp-content/uploads/2025/06/before-768x167.png 768w, https://hamravesh.com/blog/wp-content/uploads/2025/06/before-1536x334.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2025/06/before-2048x445.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>بعد از اعمال تغییرات:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="236" src="https://hamravesh.com/blog/wp-content/uploads/2025/06/after-1024x236.png" alt="تصویر داکرفایل پس از اعمال تغییرات" class="wp-image-4405" srcset="https://hamravesh.com/blog/wp-content/uploads/2025/06/after-1024x236.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2025/06/after-300x69.png 300w, https://hamravesh.com/blog/wp-content/uploads/2025/06/after-768x177.png 768w, https://hamravesh.com/blog/wp-content/uploads/2025/06/after-1536x354.png 1536w, https://hamravesh.com/blog/wp-content/uploads/2025/06/after-2048x472.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>در انتها پس از انتقال ریپو و حذف وابستگی‌ها از خارج انتظار داریم که بیلد‌ها با موفقیت و سرعت انجام شوند و تغییرات کد روی اپ‌ها به درستی اعمال شود.</p>



<p>در طول این فرایند، در هر مرحله‌ای اگر نیاز به راهنمایی داشتید یا هر دغدغه‌ای در این زمان با توجه به شرایط داشتید، حتما با <a href="https://console.hamravesh.com/ticketing/create">پشتیبانی هم‌روش</a> در ارتباط باشید.<br></p>
<p>The post <a href="https://hamravesh.com/blog/build-app-in-internet-disruption/">راهکار build گرفتن از اپ‌ها در شرایط اختلال شبکه بین‌الملل</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/build-app-in-internet-disruption/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>راهنمای نجات در شرایط بحران</title>
		<link>https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d8%ac%d8%a7%d8%aa-%d8%af%d8%b1-%d8%b4%d8%b1%d8%a7%db%8c%d8%b7-%d8%a8%d8%ad%d8%b1%d8%a7%d9%86/</link>
					<comments>https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d8%ac%d8%a7%d8%aa-%d8%af%d8%b1-%d8%b4%d8%b1%d8%a7%db%8c%d8%b7-%d8%a8%d8%ad%d8%b1%d8%a7%d9%86/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Sat, 21 Jun 2025 07:27:08 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4385</guid>

					<description><![CDATA[<p>همراه عزیز هم‌روش سلام؛ در پی رویدادهای اخیر در کشور عزیزمان، ما در هم‌روش با تمام توان در کنار جامعه فناوری ایران هستیم و همدلی خود را با شما ابراز می‌کنیم. با توجه به شرایط فعلی چند نکته را در خصوص سرویس‌های مستقر در هم‌روش را با شما به اشتراک می‌گذاریم: بک‌آپ گرفتن جهت اطمینان [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d8%ac%d8%a7%d8%aa-%d8%af%d8%b1-%d8%b4%d8%b1%d8%a7%db%8c%d8%b7-%d8%a8%d8%ad%d8%b1%d8%a7%d9%86/">راهنمای نجات در شرایط بحران</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>همراه عزیز هم‌روش سلام؛</strong></p>



<p>در پی رویدادهای اخیر در کشور عزیزمان، ما در هم‌روش با تمام توان در کنار جامعه فناوری ایران هستیم و همدلی خود را با شما ابراز می‌کنیم. با توجه به شرایط فعلی چند نکته را در خصوص سرویس‌های مستقر در هم‌روش را با شما به اشتراک می‌گذاریم:</p>



<h2 class="wp-block-heading" id="h-بک-آپ-گرفتن">بک‌آپ گرفتن</h2>



<p>جهت اطمینان از صحت داده‌ها، حتماً امکان بکاپ را از طریق کنسول هم‌روش برای سرویس‌های خود فعال نمایید تا نسخه‌های بکاپ به صورت خودکار تهیه و ذخیره گردند.همچنین در کنسول هم‌روش، امکان دریافت نسخه‌های مختلف بکاپ به صورت مستقیم برای شما فراهم شده است. پیشنهاد اکید ما دریافت نسخه‌های بکاپ و نگهداری به صورت local است تا در صورت بروز مشکل، آخرین نسخه از داده‌های خود را در اختیار داشته باشید. در خصوص استفاده از این امکان، مستنداتی تهیه شده که آن را می‌توانید در بلاگ هم‌روش از این <a href="https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%af%d8%a7%d9%86%d9%84%d9%88%d8%af-%d9%88-%da%af%d8%b1%d9%81%d8%aa%d9%86-%d8%a8%da%a9%d8%a2%d9%be/"><strong>لینک</strong></a> مشاهده نمایید. با این حال، می‌توانید به‌صورت مستقل از ابزارهایی مانند «<strong>pgdump</strong>»یا «<strong>mysqldump</strong>» برای تهیه بک‌آپ از دیتابیس‌های خود استفاده کنید.</p>



<h2 class="wp-block-heading" id="h-اختلالات-بین-المللی">اختلالات بین‌المللی</h2>



<p>در پی بروز برخی اختلالات شبکه‌ای که خارج از کنترل ماست (خصوصاً اتصال به اینترنت بین‌الملل) در روزهای پیش‌رو و با هدف پیش‌گیری از پایین آمدن سرویس، اکیداً پیشنهاد می‌کنیم تا هر گونه وابستگی سرویس‌های خود به سرویس‌های خارج از کشور (نظیر DNS، مخازن کد و فرآیندهای build و دریافت image و موارد مشابه) را بررسی و اولویت‌بندی نموده و در اولین فرصت نسبت به رفع آنها (با انتقال سرویس‌ها به داخل کشور یا رفع وابستگی به سرویس خارجی) اقدام نمایید. در صورت بروز اختلالات گسترده‌ی شبکه یا قطعی دسترسی به اینترنت بین‌الملل از سمت دیتاسنترها یا شرکت ارتباطات زیرساخت، پیگیری برای برقراری مجدد ارتباط با توجه به شرایط فعلی کشور امری دشوار و عملاً خارج از کنترل ما خواهد بود. همچنین، با دنبال کردن صفحه وضعیت شبکه <a href="https://status.hamravesh.com/"><strong>(Status Page)</strong></a> ما، می‌توانید به‌صورت فعالانه و به‌روز از آخرین شرایط شبکه مراکز داده‌ی هم‌روش مطلع شوید.&nbsp;</p>



<h2 class="wp-block-heading" id="h-اختلالات-مرتبط-با-فرایند-build-اپلیکیشن">اختلالات مرتبط با فرایند build اپلیکیشن</h2>



<p> همان‌طور که پیش از این اشاره شد، هنگام قطع اینترنت بین‌الملل پیش آمدن مشکلاتی در فرایند بیلد اپلیکیشن دور از انتظار نیست. برای حل این مشکل تیم فنی هم‌روش راهکاری در نظر گرفته است. برای کسب اطلاعات بیشتر درباره نحوه حل این مشکل می‌توانید بلاگ پست «<a href="https://hamravesh.com/blog/build-app-in-internet-disruption/">راهکار بیلد گرفتن از اپ‌ها در شرایط اختلال اینترنت</a>» را مطالعه کنید.</p>



<h2 class="wp-block-heading" id="h-امنیت">امنیت</h2>



<p>همکاران ما در هم‌روش فعالانه در حال بررسی تهدیدها و اقدام برای رفع آن‌ها هستند. اما با توجه به ریسک فزاینده‌ی موجود لطفا رمزهای عبور را تغییر دهید، دسترسی‌ها را بازبینی کنید، سناریوهایی که ممکن است آسیب جدی به کسب و کار شما وارد شود را بررسی کنید و در صورتی که از امنیت سیستم‌های حساس خود مطمئن نیستید برای خاموش کردن آن‌ها در صورت مواجهه با تهدیدها آماده باشید.حتماً توصیه‌ها و مسائل مرتبط با امنیت سرویس، داده‌ها و دسترسی‌ها را بر روی تمامی سرویس‌های خود بررسی و ارزیابی نموده و وضعیت را مرتباً از طریق پایش Logها یا سایر ابزارها و اطلاعات مرتبط امنیتی زیر نظر داشته باشید.</p>



<h2 class="wp-block-heading" id="h-پشتیبانی">پشتیبانی</h2>



<p>در آخر، اطمینان داشته باشید که ما همراه شما و کسب‌وکار شما در این شرایط هستیم و از هیچ کوششی برای کمک و رفع دغدغه‌هایتان دریغ نخواهیم کرد. از این رو هر مشکل یا درخواستی را از طریق سیستم تیکت (<a href="https://console.hamravesh.com/ticketing"><strong>console.hamravesh.com/ticketing</strong></a>) با ما در میان بگذارید تا در اولین فرصت بررسی و رسیدگی گردد.</p>



<p></p>



<p>به امید روزهای بهتر برای وطن عزیزمان، ایران</p>



<p>روابط عمومی هم‌روش</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d8%ac%d8%a7%d8%aa-%d8%af%d8%b1-%d8%b4%d8%b1%d8%a7%db%8c%d8%b7-%d8%a8%d8%ad%d8%b1%d8%a7%d9%86/">راهنمای نجات در شرایط بحران</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d8%ac%d8%a7%d8%aa-%d8%af%d8%b1-%d8%b4%d8%b1%d8%a7%db%8c%d8%b7-%d8%a8%d8%ad%d8%b1%d8%a7%d9%86/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>راهنمای دانلود و گرفتن بک‌آپ‌</title>
		<link>https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%af%d8%a7%d9%86%d9%84%d9%88%d8%af-%d9%88-%da%af%d8%b1%d9%81%d8%aa%d9%86-%d8%a8%da%a9%d8%a2%d9%be/</link>
					<comments>https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%af%d8%a7%d9%86%d9%84%d9%88%d8%af-%d9%88-%da%af%d8%b1%d9%81%d8%aa%d9%86-%d8%a8%da%a9%d8%a2%d9%be/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 18 Jun 2025 12:37:02 +0000</pubDate>
				<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=4351</guid>

					<description><![CDATA[<p>در این مقاله قصد داریم نحوه‌ی دریافت بکاپ از سرویس‌های موجود در هم‌روش را توضیح دهیم. ابتدا در مورد اپ‌های دیسک‌دار در دارکوب و دیتابیس‌های عادی صحبت می‌کنیم. سپس به گرفتن بکاپ لایه‌ی اپلیکیشن در دیتابیس‌های PostgreSQL و MySQL (چه عادی چه مدیریت‌شده) می‌پردازیم. دانلود بک‌آپ اپ‌های دیسک‌دار از کنسول هم‌روش برای دانلود بکاپ دیسک‌های [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%af%d8%a7%d9%86%d9%84%d9%88%d8%af-%d9%88-%da%af%d8%b1%d9%81%d8%aa%d9%86-%d8%a8%da%a9%d8%a2%d9%be/">راهنمای دانلود و گرفتن بک‌آپ‌</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در این مقاله قصد داریم نحوه‌ی دریافت بکاپ از سرویس‌های موجود در هم‌روش را توضیح دهیم. ابتدا در مورد اپ‌های دیسک‌دار در دارکوب و دیتابیس‌های عادی صحبت می‌کنیم. سپس به گرفتن بکاپ لایه‌ی اپلیکیشن در دیتابیس‌های PostgreSQL و MySQL (چه عادی چه مدیریت‌شده) می‌پردازیم.</p>



<h2 class="wp-block-heading" id="h-دانلود-بک-آپ-اپ-های-دیسک-دار-از-کنسول-هم-روش">دانلود بک‌آپ اپ‌های دیسک‌دار از کنسول هم‌روش</h2>



<p>برای دانلود بکاپ دیسک‌های خود مراحل زیر را طی کنید:</p>



<p>۱. ابتدا از طریق کنسول هم‌روش وارد بخش <a href="http://console.hamravesh.com/backup">بکاپ</a> شوید.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXemxHEtRlK1Z9X-RhqOcOJCkNBBDM4MbEJFVXq3_DtgwlrbEX_s0IuMpWErbcpQ1A7ouAK7oapev9i75Yq-mkCk3PpayZ0w1dVo5Co6_8DN2uYRj3LoFHEcBPMwSTg8-GC1sckP7w?key=x9FSx_0gaAutswBSLBMvmg" alt=""/></figure>



<p>۲. در این صفحه لیست همه بکاپ‌های خود را می‌توانید مشاهده کنید. این لیست شامل بکاپ اپ‌های دیسک‌دار دارکوبی و دیتابیس‌های عادی است. بکاپ مورد نظر را از داخل لیست پیدا کنید و روی آن کلیک کنید تا وارد صفحه آن بکاپ شوید. (در این جا به صورت نمونه وارد بکاپ دیتابیس postgres-data می‌شویم)</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeKG0m2hkdmRIK6Znnocu8907zkYjRvwxh8KTzmX6r1ddYh9HQtgIYj6xDwcqX2wBif-syDLp1MY83fADg4jOepEfZ0q8WD80Y_Kb0AYvVESQxmum-_eXN-r4OvOm6jykfnR_zcVQ?key=x9FSx_0gaAutswBSLBMvmg" alt=""/></figure>



<p>۳. در صفحه مربوط به بکاپ مورد نظر، روی گزینه دانلود بکاپ‌ها کلیک کنید.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXd_XIZ7FvUTr1HKNXtTEdy2rraizyd3fFbiB-nSC6T57m9SwSk0CV7gz2wCHYXLOc89UUdwandgqJeB0n7lIIj15dbzXvzFeRgebdwnhMEeim2XD1Re_V-ou34nGlyXUyPMMLxLvw?key=x9FSx_0gaAutswBSLBMvmg" alt=""/></figure>



<p>۴. حال از داخل باکس زیر، روی «محل ذخیره‌سازی بکاپ‌ها» کلیک کنید. در صفحه‌ی جدید بازشده، برای ورود از نام کاربری و پسورد نمایش‌ داده‌ شده در باکس زیر استفاده کنید.</p>



<p>توجه: لطفا توضیحات داخل باکس زیر را به دقت بخوانید.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcmyVpdEm77D1hOKpqozVtOg_xiUI4Yr2XsofyXOB3aXSJ87_eDHZCq5KQJgfLBEMJ_uxFMG05a9E2yBVt-yww6pUdFnuvR7OLlf50NEk_YOAxgXi0ChtP3QxZc4zLTvmhiiSR9DQ?key=x9FSx_0gaAutswBSLBMvmg" alt=""/></figure>



<p>۵. در داخل محل ذخیره‌سازی بکاپ‌هافایل‌بروزر لیست بکاپ‌های دیسک مورد نظر نمایش داده شده است. نام هر پوشه زمان بکاپ‌گیری را نشان می‌دهد. بکاپ مورد نظر خود را انتخاب کنید و روی دکمه دانلود که در قسمت بالا‌راست صفحه قرار دارد کلیک کنید.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcM0ZZfERLfBK6zPwEHW7AoiZ8Ch5WzymnGEcixp1Q7Y9RAo0irVLps01SrZutOSrpyrcwQ9A-MmIG4qIZqTzeV3Y-7jdo0n3GYEBrkjcfsQvuwRSsJ9ITv5z8UpFy0Nce4zApa?key=x9FSx_0gaAutswBSLBMvmg" alt=""/></figure>



<p>۶. در آخرین گام فرمت مد نظر خود را انتخاب کنید. با این کار دانلود بکاپ شما آغاز می‌شود.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdMC0ei78LAfv3fvI6cB24oxXK5HwOXY1f_HV5bIEtT-i5IM2zpJENDYRFC7HYaagjPFjL2lu60lA-Uc0j_PGQx077Bakus1zr2U6Qe0U8Jpd3yszBva3TPufFJ1EUXXVEVbVEjug?key=x9FSx_0gaAutswBSLBMvmg" alt=""/></figure>



<p></p>



<p><strong>نکات تکمیلی:</strong></p>



<ul class="wp-block-list">
<li>در نظر داشته باشید که بکاپ‌ هر سرویس شما در دیتاسنتری متفاوت با دیتاسنتر خود سرویس، ذخیره‌سازی می‌شوند.</li>



<li>هر چند همان طور که از دو تصویر آخر مشخص است شما می‌توانید به پوشه‌های بالاتر (به طور مثال hamravesh-c11) بروید و از این طریق اقدام به دانلود بکاپ‌ها خود بکنید. اما در نظر داشته باشید که مرجع اصلی و لیست کامل بکاپ‌های شما داخل بخش بکاپ در کنسول هم‌روش است. فلذا در صورت عدم مشاهده بکاپ مورد نظر خود در محل ذخیره‌سازی (به علت حضور آن بکاپ در یک محل ذخیره‌سازی دیگر)، مجددا&nbsp; گام‌های ۱ تا ۶ را جهت دانلود بکاپ مورد نظر خود انجام دهید.&nbsp;</li>



<li>پیشنهاد می‌کنیم <strong>به صورت همزمان اقدام به دانلود چند بکاپ نکنید.</strong></li>
</ul>



<h2 class="wp-block-heading" id="h-بک-آپ-گیری-از-دیتابیس-های-postgresql">بک‌آپ‌گیری از دیتابیس‌های PostgreSQL</h2>



<p><strong>مقدمه</strong></p>



<p>برای گرفتن بک‌آپ از داده‌های MySQL از ابزار pg_dump&nbsp; که در پکیج postgresql-client ارائه می‌شود استفاده می‌کنیم. برای نصب این ابزار از <a href="https://www.postgresql.org/download/linux/ubuntu/">این راهنما</a> می‌توانید استفاده کنید.</p>



<p><strong>گرفتن بک‌آپ از دیتابیس‌ها</strong></p>



<p>برای این کار، با در دست داشتن آدرس خارجی سرور دیتابیس، می‌توانید یک دیتابیس خاص را بک‌آپ گرفته و فایل‌های آن را به صورت محلی ذخیره کنید:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>pg_dump -h [remote host] -U [postgres user]&nbsp; [database name] &gt; [local file name]</td></tr></tbody></table></figure>



<p>علاوه بر آن می‌توانید به صورت زیر از تمام دیتابیس‌های موجود بک‌آپ بگیرید:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>pg_dump -h [remote host] -U [postgres user]&nbsp; [database name] &gt; [local file name]</td></tr></tbody></table></figure>



<p>در صورتی که قصد بک‌آپ‌گیری از چند تیبل خاص در یک دیتابیس را دارید به صورت زیر عمل کنید:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>pg_dump -h [remote host] -U [postgres user]&nbsp; -d [database name] -t [table 1] -t [table 2] -t [&#8230;] &gt; [local file name]</td></tr></tbody></table></figure>



<p><strong>فشرده‌سازی داده‌ها</strong></p>



<p>توصیه می‌شود برای اینکه داده‌ها حجم کم‌تری را اشغال کنند، آن‌ها را به صورت فشرده ذخیره‌سازی کنید. از روش‌ها و ابزارهای متعددی برای این کار می‌توان استفاده کرد اما معمول‌ترینِ این روش‌ها استفاده از gzip می‌باشد:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>pg_dump -h [remote host] -U [postgres user]&nbsp; [database name] | gzip &gt; [local file name]</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-بک-آپ-گیری-از-دیتابیس-های-mysql">بک‌آپ‌گیری از دیتابیس‌های MySQL</h2>



<p><strong>مقدمه</strong></p>



<p>برای گرفتن بک‌آپ از داده‌های MySQL از ابزار mysqldump&nbsp; که در پکیج mysql-client ارائه می‌شود استفاده می‌کنیم. برای نصب این ابزار از <a href="https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/">این راهنما</a> می‌توانید استفاده کنید.</p>



<p><strong>گرفتن بک‌آپ از دیتابیس‌ها</strong></p>



<p>برای این کار، با در دست داشتن آدرس خارجی سرور دیتابیس، می‌توانید یک دیتابیس خاص را بک‌آپ گرفته و فایل‌های آن را به صورت محلی ذخیره کنید:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>mysqldump -h [remote host] -u [mysql user] -p [database name] &gt; [local file name]</td></tr></tbody></table></figure>



<p>علاوه بر آن می‌توانید به صورت زیر از تمام دیتابیس‌های موجود بک‌آپ بگیرید:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>mysqldump -h [remote host] -u [mysql user] -p &#8211;al-databases &gt; [local file name]</td></tr></tbody></table></figure>



<p>در صورتی که قصد بک‌آپ‌گیری از چند تیبل خاص در یک دیتابیس را دارید به صورت زیر عمل کنید:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>mysqldump -h [remote host] -u [mysql user] -p [database name] [table 1] [table 2] [&#8230;] &gt; [local file name]</td></tr></tbody></table></figure>



<p>همچنین می‌توانید با استفاده از یک کوئری، بخشی از داده‌ها را انتخاب کرده و صرفا همان‌ها را در فایل بک‌آپ ذخیره کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * 1rem);line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="کپی" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>mysqldump -h &#91;remote host&#93; -u &#91;username&#93; -p &#91;database name&#93; &#91;table1&#93; --where="WHERE CLAUSE" > &#91;local file name&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">mysqldump</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-h</span><span style="color: #ADBAC7"> &#91;remote </span><span style="color: #96D0FF">host&#93;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-u</span><span style="color: #ADBAC7"> &#91;username&#93; -p &#91;database name&#93; &#91;table1&#93; --where=</span><span style="color: #96D0FF">&quot;WHERE CLAUSE&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> &#91;local file name&#93;</span></span></code></pre></div>



<p><strong>فشرده‌سازی داده‌ها</strong></p>



<p>توصیه می‌شود برای اینکه داده‌ها حجم کم‌تری را اشغال کنند، آن‌ها را به صورت فشرده ذخیره‌سازی کنید. از روش‌ها و ابزارهای متعددی برای این کار می‌توان استفاده کرد اما معمول‌ترینِ این روش‌ها استفاده از gzip می‌باشد:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * 1rem);line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="کپی" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>mysqldump -h &#91;remote host&#93; -u &#91;mysql user&#93; -p &#91;database name&#93; | gzip > &#91;local file name&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">mysqldump</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-h</span><span style="color: #ADBAC7"> &#91;remote </span><span style="color: #96D0FF">host&#93;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-u</span><span style="color: #ADBAC7"> &#91;mysql </span><span style="color: #96D0FF">user&#93;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-p</span><span style="color: #ADBAC7"> &#91;database </span><span style="color: #96D0FF">name&#93;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">|</span><span style="color: #ADBAC7"> </span><span style="color: #F69D50">gzip</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> &#91;local </span><span style="color: #96D0FF">file</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name&#93;</span></span></code></pre></div>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%af%d8%a7%d9%86%d9%84%d9%88%d8%af-%d9%88-%da%af%d8%b1%d9%81%d8%aa%d9%86-%d8%a8%da%a9%d8%a2%d9%be/">راهنمای دانلود و گرفتن بک‌آپ‌</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%af%d8%a7%d9%86%d9%84%d9%88%d8%af-%d9%88-%da%af%d8%b1%d9%81%d8%aa%d9%86-%d8%a8%da%a9%d8%a2%d9%be/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
