<?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/category/devops/feed/" rel="self" type="application/rss+xml" />
	<link>https://hamravesh.com/blog/category/devops/</link>
	<description>بلاگ رسمی هم‌روش</description>
	<lastBuildDate>Wed, 17 Jun 2026 16:07:32 +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/category/devops/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>بازنشستگی Ingress NGINX؛ ریسک‌ها، جایگزین‌ها و مسیر مهاجرت</title>
		<link>https://hamravesh.com/blog/ingress-nginx-retirement/</link>
					<comments>https://hamravesh.com/blog/ingress-nginx-retirement/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Wed, 17 Jun 2026 12:30:07 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=5247</guid>

					<description><![CDATA[<p>بازنشستگی ingress-nginx یکی از مهم‌ترین تغییرات اخیر در اکوسیستم Kubernetes به شمار می‌آید. این پروژه که سال‌ها یکی از رایج‌ترین Ingress Controllerهای Kubernetes بود، دیگر در مسیر توسعه عادی قرار ندارد و پس از پایان دوره پشتیبانی، به‌روزرسانی امنیتی و اصلاح باگ جدیدی برای آن منتشر نمی‌شود. </p>
<p>The post <a href="https://hamravesh.com/blog/ingress-nginx-retirement/">بازنشستگی Ingress NGINX؛ ریسک‌ها، جایگزین‌ها و مسیر مهاجرت</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>بازنشستگی ingress-nginx یکی از مهم‌ترین تغییرات اخیر در اکوسیستم کوبرنتیز به شمار می‌آید. این پروژه که سال‌ها یکی از رایج‌ترین Ingress Controllerهای کوبرنتیز بود، دیگر در مسیر توسعه عادی قرار ندارد و پس از پایان دوره پشتیبانی، به‌روزرسانی امنیتی و اصلاح باگ جدیدی برای آن منتشر نمی‌شود. این اتفاق باعث شده است که مهاجرت از ingress nginx و بررسی جایگزین به یکی از دغدغه‌های اصلی تیم‌های زیرساخت و DevOps تبدیل شود.</p>



<p>در این مقاله بررسی می‌کنیم که ingress-nginx چیست، دقیقاً چه بخشی از این پروژه بازنشسته شده، چرا کوبرنتیز این تصمیم را گرفته است و ادامه استفاده از آن چه ریسک‌هایی دارد. همچنین گزینه‌های موجود برای جایگزین ingress-nginx، نقش Gateway API و مراحل مهاجرت از اینگرس nginx با استفاده از ابزار Ingress2Gateway را به‌صورت عملی آموزش می‌دهیم.</p>



<h2 class="wp-block-heading" id="h-اهمیت-بازنشستگی-ingress-nginx-چرا-کوبرنتیز-درباره-آن-هشدار-می-دهد">اهمیت بازنشستگی ingress-nginx؛ چرا کوبرنتیز درباره آن هشدار می‌دهد؟</h2>



<p>بازنشستگی ingress-nginx صرفا پایان عمر یک پروژه متن‌باز نیست، بلکه به پایان چرخه نگهداری یکی از پرکاربردترین Ingress Controllerهای کوبرنتیز اشاره دارد. بر اساس بیانیه رسمی کوبرنتیز، ادامه استفاده از این پروژه پس از پایان دوره پشتیبانی، می‌تواند ریسک‌های امنیتی و عملیاتی جدیدی برای محیط‌های Production ایجاد کند.</p>



<p>اهمیت این موضوع زمانی بیشتر مشخص می‌شود که بخش قابل توجهی از کلاسترهای کوبرنتیز همچنان از ingress-nginx برای مدیریت ترافیک HTTP و HTTPS استفاده می‌کنند. هرچند استقرارهای فعلی به کار خود ادامه می‌دهند، اما پس از بازنشستگی، هیچ وصله امنیتی، اصلاح باگ یا نسخه جدیدی برای پروژه منتشر نمی‌شود و آسیب‌پذیری‌های آینده ممکن است بدون راهکار رسمی باقی بمانند.</p>



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



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



<p>ingress-nginx یک Ingress Controller مبتنی بر NGINX برای کوبرنتیز است که منابع Ingress را پایش کرده و بر اساس قوانین تعریف‌شده، پیکربندی NGINX را به‌صورت خودکار ایجاد و به‌روزرسانی می‌کند تا ترافیک HTTP و HTTPS به سرویس‌های مناسب هدایت شود.</p>



<p>در کوبرنتیز، منبع Ingress فقط شامل قوانین مسیریابی است و به‌تنهایی درخواست‌ها را پردازش نمی‌کند. برای اعمال این قوانین به یک Ingress Controller نیاز است و ingress-nginx یکی از شناخته‌شده‌ترین پیاده‌سازی‌های این مدل به شمار می‌آید.</p>



<p>یکی از دلایل محبوبیت ingress-nginx، متن‌باز بودن و امکان استفاده از آن در انواع محیط‌های کوبرنتیز، چه در سرویس‌های ابری و چه در زیرساخت‌های On-Premise، بود و به همین دلیل در میان تیم‌های DevOps و SRE جایگاه ویژه‌ای پیدا کرد.</p>



<h2 class="wp-block-heading" id="h-دقیقا-چه-چیزی-بازنشسته-شده-است">دقیقاً چه چیزی بازنشسته شده است؟</h2>



<p>نکته مهمی که باید بدانید این است که قابلیت Ingress همچنان بخشی از کوبرنتیز  باقی می‌ماند، اما پروژه ingress-nginx پس از پایان دوره پشتیبانی دیگر به‌روزرسانی نمی‌شود. بر اساس اعلام رسمی کوبرنتیز ، پس از پایان نگهداری پروژه:</p>



<ul class="wp-block-list">
<li>نسخه جدیدی از ingress-nginx منتشر نمی‌شود</li>



<li>باگ‌های جدید برطرف نخواهند شد</li>



<li>برای آسیب‌پذیری‌های آینده وصله امنیتی ارائه نمی‌شود</li>



<li>مخازن GitHub پروژه در حالت فقط‌خواندنی (Read-only) قرار می‌گیرند.</li>
</ul>



<p>در عین حال، استقرارهای فعلی همچنان به کار خود ادامه می‌دهند و آرتیفکت‌هایی مانند Helm Chartها و Container Imageهای موجود در دسترس هستند. البته با این حال استفاده از نرم‌افزاری که دیگر به‌روزرسانی امنیتی دریافت نمی‌کند، می‌تواند به مرور زمان ریسک‌های عملیاتی و امنیتی را افزایش دهد. اگر می‌خواهید بررسی کنید که آیا کلاستر شما از ingress-nginx استفاده می‌کند یا خیر، می‌توانید دستور زیر را اجرا کنید:</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 get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginx</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">get</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pods</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--all-namespaces</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--selector</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">app.kubernetes.io/name=ingress-nginx</span></span></code></pre></div>



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



<h2 class="wp-block-heading" id="h-چرا-ingress-nginx-بازنشسته-شد">چرا ingress-nginx بازنشسته شد؟</h2>



<p>بازنشستگی ingress-nginx نتیجه مجموعه‌ای از چالش‌های فنی و مدیریتی است که طی سال‌های گذشته شکل گرفته‌اند. تیم کوبرنتیز اعلام کرده است که نگهداری این پروژه برای مدت طولانی بر عهده تعداد محدودی افراد مسئول نگهداری بوده و این مدل برای یکی از پرکاربردترین اجزای اکوسیستم Cloud Native پایداری لازم را نداشته است.</p>



<p>عامل مهم دیگر، انباشت بدهی فنی (Technical Debt) است. ingress-nginx در ابتدا به‌عنوان یکی از پیاده‌سازی‌های Ingress API توسعه یافت، اما به مرور زمان قابلیت‌ها و Annotationهای متعددی به آن اضافه شد. این انعطاف‌پذیری برای کاربران مفید بود، اما پیچیدگی نگهداری و مدیریت امنیت پروژه را افزایش داد.</p>



<p>از سوی دیگر، جامعه کوبرنتیز در سال‌های اخیر به سمت معماری‌ها و استانداردهای جدیدتر مدیریت ترافیک حرکت کرده است؛ به همین دلیل، به جای توسعه بیشتر ingress-nginx، تمرکز اکوسیستم به سمت راهکارهایی مانند Gateway API و نسل جدید Ingress Controllerها معطوف شده است.</p>



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



<h2 class="wp-block-heading" id="h-اگر-مهاجرت-نکنیم-چه-اتفاقی-می-افتد">اگر مهاجرت نکنیم چه اتفاقی می‌افتد؟</h2>



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



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



<p>موضوع دیگر، افزایش بدهی فنی است. هرچه وابستگی سرویس‌ها به قابلیت‌های اختصاصی ingress-nginx، تنظیمات ویژه و Annotationها بیشتر شود، فرایند مهاجرت در آینده پیچیده‌تر و پرهزینه‌تر می‌شود. </p>



<p>همچنین ممکن است به دلیل عدم به‌روزرسانی پروژه ingress-nginx برای سازگاری با تغییرات، در نسخه‌های آینده کوبرنتیز یا سایر اجزای اکوسیستم، ناسازگاری‌های جدیدی ایجاد شود. توصیه جامعه کوبرنتیز این است که سازمان‌ها پیش از تبدیل شدن این وابستگی به یک چالش عملیاتی، وضعیت کلاسترهای خود را بررسی و برای مهاجرت از ingress nginx یا انتخاب یک جایگزین ingress-nginx مناسب برنامه‌ریزی کنند.</p>



<h2 class="wp-block-heading" id="h-جایگزین-های-ingress-nginx-چیست">جایگزین‌های ingress-nginx چیست؟</h2>



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



<p>انتخاب بهترین گزینه به عواملی مانند معماری کلاستر، نیازهای عملیاتی و برنامه بلندمدت سازمان بستگی دارد. برخی تیم‌ها فقط به دنبال جایگزینی Ingress Controller فعلی هستند و برخی دیگر ترجیح می‌دهند هم‌زمان به سمت فناوری‌های جدیدتر حرکت کنند. در ادامه برخی از مهم‌ترین جایگزین‌های ingress-nginx را معرفی می‌کنیم.</p>



<p id="h-traefik"><strong>Traefik</strong></p>



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



<p>Traefik معمولاً برای تیم‌هایی مناسب است که به دنبال مهاجرت کم‌دردسر از ingress-nginx هستند و می‌خواهند علاوه بر Ingress API، به‌تدریج از Gateway API نیز استفاده کنند. سادگی راه‌اندازی و مدیریت، این گزینه را برای کلاسترهای کوچک و متوسط جذاب کرده است.</p>



<p><strong>Kong Gateway</strong></p>



<p>Kong Gateway یکی دیگر از گزینه‌های شناخته‌شده برای مدیریت ترافیک در Kubernetes است که علاوه بر قابلیت‌های Ingress Controller، امکانات گسترده‌ای در حوزه API Gateway نیز ارائه می‌دهد. این پروژه از Gateway API پشتیبانی می‌کند و برای سازمان‌هایی که علاوه بر مسیریابی ترافیک، به قابلیت‌هایی مانند احراز هویت، Rate Limiting، مدیریت API و سیاست‌های امنیتی پیشرفته نیاز دارند، گزینه مناسبی محسوب می‌شود.</p>



<p id="h-envoy-gateway"><strong>Envoy Gateway</strong></p>



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



<p>Envoy Gateway بیشتر برای سازمان‌هایی مناسب است که قصد دارند از ابتدا بر پایه Gateway API حرکت کنند یا به قابلیت‌های پیشرفته مدیریت ترافیک در معماری‌های Cloud Native و Microservices نیاز دارند.</p>



<p id="h-nginx-gateway-fabric"><strong>NGINX Gateway Fabric</strong></p>



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



<p>NGINX Gateway Fabric گزینه مناسبی برای تیم‌هایی است که تجربه کار با NGINX را دارند و می‌خواهند ضمن استفاده از Gateway API، همچنان در اکوسیستم محصولات NGINX باقی بمانند.</p>



<p><strong>نکته مهم:</strong> در اطلاعیه رسمی بازنشستگی ingress-nginx، تیم کوبرنتیز استفاده از Gateway API را به‌عنوان یکی از مسیرهای آینده مدیریت ترافیک معرفی کرده است. البته Gateway API جایگزین مستقیم و یک‌به‌یک Ingress نیست و معمولا مهاجرت به آن به بررسی دقیق معماری فعلی نیاز دارد.</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-راه-اندازی-سریع-سرور-nginx-در-بازارچه-هم-روش">💡 راه‌اندازی سریع سرور NGINX در بازارچه هم‌روش</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_nginx" target="_blank" rel="noreferrer noopener">راه‌اندازی NGINX</a><a href="#"></a></p>
</div></div>
</div>



<h2 class="wp-block-heading" id="h-gateway-api-چرا-در-آینده-کوبرنتیز-اهمیت-بیشتری-پیدا-می-کند">Gateway API؛ چرا در آینده کوبرنتیز اهمیت بیشتری پیدا می‌کند؟</h2>



<p><a href="https://hamravesh.com/blog/what-is-kubernetes-gateway-api/" id="https://hamravesh.com/blog/what-is-kubernetes-gateway-api/" target="_blank" rel="noreferrer noopener">Gateway API در کوبرنتیز</a> مجموعه‌ای از APIهای جدید برای مدیریت ترافیک در کوبرنتیز است که با هدف ایجاد انعطاف‌پذیری بیشتر و پوشش سناریوهای پیچیده‌تر طراحی شده است. بسیاری از پروژه‌های جدید اکوسیستم کوبرنتیز هم توسعه خود را بر اساس این استاندارد انجام می‌دهند.</p>



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



<p>البته این موضوع به معنای حذف Ingress API نیست. در واقع Ingress همچنان بخشی از کوبرنتیز  محسوب می‌شود و بسیاری از کلاسترها به استفاده از آن ادامه می‌دهند. با این حال، جهت‌گیری کلی اکوسیستم به سمت استفاده گسترده‌تر از Gateway API است و به همین دلیل بسیاری از سازمان‌ها هنگام برنامه‌ریزی برای مهاجرت از ingress nginx، این استاندارد را هم در ارزیابی‌های خود در نظر می‌گیرند.</p>



<h2 class="wp-block-heading" id="h-چرا-مهاجرت-از-ingress-nginx-همیشه-ساده-نیست">چرا مهاجرت از ingress-nginx همیشه ساده نیست؟</h2>



<p>مهاجرت از ingress-nginx به یک کنترلر دیگر یا Gateway API، پیچیدگی‌های خاص خود را دارد و فراتر از تبدیل چند فایل YAML است. طی سال‌های گذشته، ingress-nginx رفتارها و قابلیت‌های خاصی را از طریق Annotationها و تنظیمات اختصاصی ارائه کرده که بخشی از استاندارد کوبرنتیز نیستند و احتمالا در راهکارهای دیگر باید به شکل متفاوت یا بدون معادل مستقیم پیاده‌سازی شوند. حتی اگر تبدیلات ظاهرا درست انجام شوند، ممکن است رفتار سرویس‌ها تغییر کند یا اختلالی ایجاد شود. بر اساس مستندات رسمی کوبرنتیز، هنگام مهاجرت باید به موارد زیر توجه ویژه داشت:</p>



<ul class="wp-block-list">
<li>پردازش مسیرهای مبتنی بر Regular Expression</li>



<li>تاثیر Annotationهای اختصاصی مانند use-regex</li>



<li>رفتار وابسته به rewrite-target</li>



<li>مدیریت مسیرهای دارای یا فاقد / انتهایی</li>



<li>تفاوت در URL Normalization</li>
</ul>



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



<h2 class="wp-block-heading" id="h-مهاجرت-واقعی-و-ابزارها-آموزش-عملی-با-ingress2gateway">مهاجرت واقعی و ابزارها؛ آموزش عملی با Ingress2Gateway</h2>



<p>تا اینجا دیدیم که مهاجرت از ingress-nginx همیشه یک تبدیل ساده و یک‌به‌یک نیست. در واقع تفاوت در Annotationها، رفتارهای خاص این کنترلر و تفاوت معماری Gateway API باعث می‌شود که انتقال بدون برنامه‌ریزی، ریسک ایجاد اختلال در سرویس را به همراه داشته باشد.</p>



<p>تیم SIG Network ابزار رسمی Ingress2Gateway را معرفی کرده است. در مستندات رسمی، این ابزار به‌عنوان یک Migration Assistant یا دستیار مهاجرت معرفی می‌شود&nbsp;که می‌تواند بررسی Ingressهای فعلی را انجام دهد و آن‌ها را تا حد امکان به Gateway API تبدیل کند. همچنین می‌تواند در عین حال، در مورد بخش‌هایی که نیاز به بازبینی دستی دارند به شما هشدار ‌دهد. به طور کلی، Ingress2Gateway سه هدف اصلی زیر را دنبال می‌کند:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>تبدیل پیکربندی: </strong>ترجمه Ingressها و Annotationهای پشتیبانی‌شده به Gateway API</li>



<li><strong>شناسایی مشکلات: </strong>تشخیص تنظیماتی که معادل مستقیمی ندارند</li>



<li><strong>ارائه پیشنهاد: </strong>اعلام هشدارها و پیشنهاد برای اصلاح دستی</li>
</ul>



<h3 class="wp-block-heading" id="h-نسخه-۱-۰-چه-قابلیت-هایی-دارد">نسخه ۱.۰ چه قابلیت‌هایی دارد؟</h3>



<p>نسخه ۱.۰ که در مارس ۲۰۲۶ منتشر شد، نسبت به نسخه‌های قبلی پیشرفت قابل توجهی داشته است. مهم‌ترین تغییرات این نسخه عبارت‌اند از:</p>



<ul class="wp-block-list">
<li>پشتیبانی از بیش از ۳۰ Annotation رایج ingress-nginx&nbsp;</li>



<li>پشتیبانی از قابلیت‌هایی مانند CORS ،Backend TLS ،Regex Matching و Path Rewrite&nbsp;</li>



<li>تست‌های یکپارچگی برای اطمینان از یکسان بودن رفتار Ingress-NGINX و Gateway API&nbsp;</li>



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



<h3 class="wp-block-heading" id="h-مرحله-اول-نصب-ingress2gateway">مرحله اول: نصب Ingress2Gateway</h3>



<p>برای استفاده از این ابزار، ابتدا باید آن را نصب کنید. اگر روی سیستم خود محیط Go را دارید، می‌توانید با دستور زیر آخرین نسخه پایدار را نصب کنید:</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>go install github.com/kubernetes-sigs/ingress2gateway@v1.0.0</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">go</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">github.com/kubernetes-sigs/ingress2gateway@v1.0.0</span></span></code></pre></div>



<p>اگر از macOS و Homebrew استفاده می‌کنید، دستور نصب آن ساده‌تر است:</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>brew install ingress2gateway</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">brew</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway</span></span></code></pre></div>



<p>همچنین امکان دانلود فایل باینری از <a href="https://github.com/kubernetes-sigs/ingress2gateway/releases/tag/v1.0.0" id="https://github.com/kubernetes-sigs/ingress2gateway/releases/tag/v1.0.0">GitHub</a> یا <a href="https://github.com/kubernetes-sigs/ingress2gateway/" id="https://github.com/kubernetes-sigs/ingress2gateway/">کامپایل ابزار از سورس</a> هم وجود دارد.</p>



<h3 class="wp-block-heading" id="h-مرحله-دوم-اجرای-ingress2gateway">مرحله دوم: اجرای Ingress2Gateway</h3>



<p>پس از نصب می‌توانید مانیفست‌های Ingress را به Ingress2Gateway ارسال کنید، یا ابزار را مستقیما از کلاستر خود بخوانید.</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># ارسال به فایل
ingress2gateway print --input-file my-manifest.yaml,my-other-manifest.yaml --providers=ingress-nginx > gwapi.yaml
# استفاده از فضای نام در کلاستر خودتان
ingress2gateway print --namespace my-api --providers=ingress-nginx > gwapi.yaml
# یا برای کل کلاستر
ingress2gateway print --providers=ingress-nginx --all-namespaces > gwapi.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: #768390"># ارسال به فایل</span></span>
<span class="line"><span style="color: #F69D50">ingress2gateway</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">print</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--input-file</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-manifest.yaml,my-other-manifest.yaml</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--providers=ingress-nginx</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gwapi.yaml</span></span>
<span class="line"><span style="color: #768390"># استفاده از فضای نام در کلاستر خودتان</span></span>
<span class="line"><span style="color: #F69D50">ingress2gateway</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">print</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--namespace</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-api</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--providers=ingress-nginx</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gwapi.yaml</span></span>
<span class="line"><span style="color: #768390"># یا برای کل کلاستر</span></span>
<span class="line"><span style="color: #F69D50">ingress2gateway</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">print</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--providers=ingress-nginx</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">--all-namespaces</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gwapi.yaml</span></span></code></pre></div>



<p>نکته: همچنین می‌توانید <code>--emitter &lt;agentgateway|envoy-gateway|kgateway&gt;</code> را برای خروجی پسوندهای خاص پیاده‌سازی ارسال کنید.</p>



<h3 class="wp-block-heading" id="h-مرحله-سوم-بررسی-خروجی">مرحله سوم: بررسی خروجی</h3>



<p>این مهم‌ترین مرحله است. دستورات بخش قبلی یک مانیفست Gateway API را در gwapi.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">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>apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: nginx
  namespace: my-ns
spec:
  gatewayClassName: nginx
  listeners:
  - hostname: my-host.example.com
    name: my-host-example-com-http
    port: 80
    protocol: HTTP
  - hostname: my-host.example.com
    name: my-host-example-com-https
    port: 443
    protocol: HTTPS
    tls:
      certificateRefs:
      - group: ""
        kind: Secret
        name: my-secret
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: my-ingress-my-host-example-com
  namespace: my-ns
spec:
  hostnames:
  - my-host.example.com
  parentRefs:
  - name: nginx
    port: 443
  rules:
  - backendRefs:
    - name: website-service
      port: 80
    filters:
    - cors:
        allowCredentials: true
        allowHeaders:
        - DNT
        - Keep-Alive
        - User-Agent
        - X-Requested-With
        - If-Modified-Since
        - Cache-Control
        - Content-Type
        - Range
        - Authorization
        allowMethods:
        - GET
        - PUT
        - POST
        - DELETE
        - PATCH
        - OPTIONS
        allowOrigins:
        - '*'
        maxAge: 1728000
      type: CORS
    matches:
    - path:
        type: RegularExpression
        value: (?i)/users/(\d+).*
    name: rule-0
    timeouts:
      request: 10s
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: my-ingress-my-host-example-com-ssl-redirect
  namespace: my-ns
spec:
  hostnames:
  - my-host.example.com
  parentRefs:
  - name: nginx
    port: 80
  rules:
  - filters:
    - requestRedirect:
        scheme: https
        statusCode: 308
      type: RequestRedirect</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">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Gateway</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">gatewayClassName:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">listeners:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">hostname:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host-example-com-http</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">protocol:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTP</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">hostname:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host-example-com-https</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">443</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">protocol:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPS</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">tls:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">certificateRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">group:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Secret</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-secret</span></span>
<span class="line"><span style="color: #F69D50">---</span></span>
<span class="line"><span style="color: #F69D50">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPRoute</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">hostnames:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">parentRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">443</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">rules:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">backendRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">website-service</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">filters:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">cors:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowCredentials:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">true</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowHeaders:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">DNT</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Keep-Alive</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">User-Agent</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">X-Requested-With</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">If-Modified-Since</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Cache-Control</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Content-Type</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Range</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Authorization</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowMethods:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">GET</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">PUT</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">POST</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">DELETE</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">PATCH</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">OPTIONS</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowOrigins:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;*&#39;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">maxAge:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1728000</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">CORS</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">matches:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">path:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">RegularExpression</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">value:</span><span style="color: #ADBAC7"> (?i)/users/(</span><span style="color: #F69D50">\d+</span><span style="color: #ADBAC7">).</span><span style="color: #F47067">*</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">rule-0</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">timeouts:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">request:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">10</span><span style="color: #96D0FF">s</span></span>
<span class="line"><span style="color: #F69D50">---</span></span>
<span class="line"><span style="color: #F69D50">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPRoute</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ingress-my-host-example-com-ssl-redirect</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">hostnames:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">parentRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">rules:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">filters:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">requestRedirect:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">scheme:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">https</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">statusCode:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">308</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">RequestRedirect</span></span></code></pre></div>



<p>همان‌طور که در بالا مشاهده کردید، Ingress2Gateway با موفقیت برخی annotationها را به معادل‌های Gateway API خود ترجمه کرد. به عنوان مثال، <code>nginx.ingress.kubernetes.io/enable-cors</code> به یک فیلتر CORS ترجمه شد، اما با بررسی دقیق‌تر، annotationهای <code>nginx.ingress.kubernetes.io/proxy-{read,send}-timeout</code> و <code>nginx.ingress.kubernetes.io/proxy-body-size</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">Plaintext</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>┌─ WARN  ────────────────────────────────────────
│  Unsupported annotation nginx.ingress.kubernetes.io/configuration-snippet
│  source: INGRESS-NGINX
│  object: Ingress: my-ns/my-ingress
└─
┌─ INFO  ────────────────────────────────────────
│  Using case-insensitive regex path matches. You may want to change this.
│  source: INGRESS-NGINX
│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com
└─
┌─ WARN  ────────────────────────────────────────
│  ingress-nginx only supports TCP-level timeouts; i2gw has made a best-effort translation to Gateway API timeouts.request. Please verify that this meets your needs. See documentation: https://gateway-api.sigs.k8s.io/guides/http-timeouts/
│  source: INGRESS-NGINX
│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com
└─
┌─ WARN  ────────────────────────────────────────
│  Failed to apply my-ns.my-ingress.metadata.annotations."nginx.ingress.kubernetes.io/proxy-body-size" from my-ns/my-ingress: Most Gateway API implementations have reasonable body size and buffering defaults
│  source: STANDARD_EMITTER
│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com
└─
┌─ WARN  ────────────────────────────────────────
│  Gateway API does not support configuring URL normalization (RFC 3986, Section 6). Please check if this matters for your use case and consult implementation-specific details.
│  source: STANDARD_EMITTER
└─</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">┌─ WARN  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  Unsupported annotation nginx.ingress.kubernetes.io/configuration-snippet</span></span>
<span class="line"><span style="color: #adbac7">│  source: INGRESS-NGINX</span></span>
<span class="line"><span style="color: #adbac7">│  object: Ingress: my-ns/my-ingress</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span>
<span class="line"><span style="color: #adbac7">┌─ INFO  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  Using case-insensitive regex path matches. You may want to change this.</span></span>
<span class="line"><span style="color: #adbac7">│  source: INGRESS-NGINX</span></span>
<span class="line"><span style="color: #adbac7">│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span>
<span class="line"><span style="color: #adbac7">┌─ WARN  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  ingress-nginx only supports TCP-level timeouts; i2gw has made a best-effort translation to Gateway API timeouts.request. Please verify that this meets your needs. See documentation: https://gateway-api.sigs.k8s.io/guides/http-timeouts/</span></span>
<span class="line"><span style="color: #adbac7">│  source: INGRESS-NGINX</span></span>
<span class="line"><span style="color: #adbac7">│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span>
<span class="line"><span style="color: #adbac7">┌─ WARN  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  Failed to apply my-ns.my-ingress.metadata.annotations.&quot;nginx.ingress.kubernetes.io/proxy-body-size&quot; from my-ns/my-ingress: Most Gateway API implementations have reasonable body size and buffering defaults</span></span>
<span class="line"><span style="color: #adbac7">│  source: STANDARD_EMITTER</span></span>
<span class="line"><span style="color: #adbac7">│  object: HTTPRoute: my-ns/my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span>
<span class="line"><span style="color: #adbac7">┌─ WARN  ────────────────────────────────────────</span></span>
<span class="line"><span style="color: #adbac7">│  Gateway API does not support configuring URL normalization (RFC 3986, Section 6). Please check if this matters for your use case and consult implementation-specific details.</span></span>
<span class="line"><span style="color: #adbac7">│  source: STANDARD_EMITTER</span></span>
<span class="line"><span style="color: #adbac7">└─</span></span></code></pre></div>



<p>یک هشدار وجود دارد که Ingress2Gateway از annotation نوع <code>nginx.ingress.kubernetes.io/configuration-snippet</code> پشتیبانی نمی‌کند. برای دیدن اینکه آیا راهی برای دستیابی به رفتار معادل وجود دارد، باید مستندات پیاده‌سازی Gateway API خود را بررسی کنید.</p>



<p>این ابزار همچنین به ما اطلاع داد که تطابق‌های ریجکس Ingress-NGINX تطابق‌های پیشوندی غیر حساس به حروف کوچک و بزرگ هستند. به همین دلیل یک الگوی تطابق <code>(?i)/users/(\d+).*</code> وجود دارد. بیشتر سازمان‌ها می‌خواهند این رفتار را با حذف <code>(?i)</code> ابتدایی و <code>.*</code> انتهایی از الگوی مسیر به یک تطابق دقیق و حساس به حروف کوچک و بزرگ تغییر دهند.</p>



<p>Ingress2Gateway ترجمه‌ای با بهترین تلاش از annotationهای <code>nginx.ingress.kubernetes.io/proxy-{send,read}-timeout</code> به یک زمان انتظار درخواست ۱۰ ثانیه در مسیر HTTP ما انجام داد. اگر درخواست‌های این سرویس باید بسیار کوتاه‌تر باشد (مثلا ۳ ثانیه)، می‌توانید تغییرات مربوطه را در مانیفست‌های Gateway API خود اعمال کنید.</p>



<p>همچنین، <code>nginx.ingress.kubernetes.io/proxy-body-size</code> معادل Gateway API ندارد، بنابراین ترجمه نشده است. البته با این حال، بیشتر پیاده‌سازی‌های Gateway API، پیش‌فرض‌های معقولی برای حداکثر اندازه بدنه و بافرینگ دارند، بنابراین این موضوع، ممکن است در عمل مشکلی ایجاد نکند.</p>



<p>علاوه بر این، برخی emitterها ممکن است پشتیبانی از این annotation را از طریق پسوندهای خاص پیاده‌سازی ارائه دهند. به عنوان مثال، افزودن فلگ <code>--emitter agentgateway</code> یا <code>--emitter envoy-gateway</code> یا <code>--emitter kgateway</code> به دستور <code>ingress2gateway print</code> قبلی منجر به پیکربندی خاص پیاده‌سازی اضافی در مانیفست‌های Gateway API تولید شده می‌شد که سعی در ثبت پیکربندی اندازه بدنه (body size) داشت. </p>



<p>همچنین یک هشدار در مورد نرمالایز کردن URL می‌بینیم. پیاده‌سازی‌های Gateway API مانند Agentgateway ،Envoy Gateway ،Kgateway و Istio دارای سطحی از عادی‌سازی URL هستند؛ اما رفتار در پیاده‌سازی‌ها متفاوت است و از طریق Gateway API استاندارد قابل تنظیم نیست. شما باید رفتار عادی‌سازی URL پیاده‌سازی Gateway API خود را بررسی و آزمایش کنید تا مطمئن شوید با مورد استفاده شما سازگار است.</p>



<p>همچنین برای مطابقت با رفتار پیش‌فرض Ingress-NGINX، ابزار  Ingress2Gateway یک شنونده در پورت ۸۰ و یک فیلتر تغییر مسیر درخواست HTTP برای هدایت ترافیک HTTP به HTTPS اضافه کرد. ممکن است اصلا نخواهید به ترافیک HTTP سرویس بدهید و شنونده پورت ۸۰ و HTTPRoute مربوطه را حذف کنید.</p>



<p><strong>هشدار: </strong>همیشه خروجی و لاگ‌های تولید شده را به طور کامل مرور کنید.</p>



<p>پس از اعمال دستی این تغییرات، مانیفست‌های Gateway API ممکن است به شکل زیر باشد:</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>---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: nginx
  namespace: my-ns
spec:
  gatewayClassName: nginx
  listeners:
  - hostname: my-host.example.com
    name: my-host-example-com-https
    port: 443
    protocol: HTTPS
    tls:
      certificateRefs:
      - group: ""
        kind: Secret
        name: my-secret
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
  name: my-ingress-my-host-example-com
  namespace: my-ns
spec:
  hostnames:
  - my-host.example.com
  parentRefs:
  - name: nginx
    port: 443
  rules:
  - backendRefs:
    - name: website-service
      port: 80
    filters:
    - cors:
        allowCredentials: true
        allowHeaders:
        - DNT
        ...
        allowMethods:
        - GET
        ...
        allowOrigins:
        - '*'
        maxAge: 1728000
      type: CORS
    matches:
    - path:
        type: RegularExpression
        value: /users/(\d+)
    name: rule-0
    timeouts:
      request: 3s</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">---</span></span>
<span class="line"><span style="color: #F69D50">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Gateway</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">gatewayClassName:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">listeners:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">hostname:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host-example-com-https</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">443</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">protocol:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPS</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">tls:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">certificateRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">group:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Secret</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-secret</span></span>
<span class="line"><span style="color: #F69D50">---</span></span>
<span class="line"><span style="color: #F69D50">apiVersion:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">gateway.networking.k8s.io/v1</span></span>
<span class="line"><span style="color: #F69D50">kind:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">HTTPRoute</span></span>
<span class="line"><span style="color: #F69D50">metadata:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">annotations:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">gateway.networking.k8s.io/generator:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ingress2gateway-dev</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ingress-my-host-example-com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">namespace:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-ns</span></span>
<span class="line"><span style="color: #F69D50">spec:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">hostnames:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">my-host.example.com</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">parentRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">nginx</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">443</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">rules:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">backendRefs:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">website-service</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">port:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">80</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">filters:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">cors:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowCredentials:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">true</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowHeaders:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">DNT</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">...</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowMethods:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">GET</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">...</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">allowOrigins:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;*&#39;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">maxAge:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1728000</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">CORS</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">matches:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">path:</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">: </span><span style="color: #96D0FF">RegularExpression</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F69D50">value:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">/users/</span><span style="color: #ADBAC7">(</span><span style="color: #F69D50">\d+</span><span style="color: #ADBAC7">)</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">name:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">rule-0</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">timeouts:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">request:</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #96D0FF">s</span></span></code></pre></div>



<h3 class="wp-block-heading" id="h-مرحله-چهارم-بازبینی-verify">مرحله چهارم: بازبینی (Verify)</h3>



<p>اکنون که مانیفست‌های Gateway API را دارید، باید آنها را به طور کامل در یک کلاستر توسعه آزمایش کنید. در این مورد، حداقل باید بررسی کنید که پیش‌فرض‌های حداکثر اندازه بدنه پیاده‌سازی Gateway API برای شما مناسب است و تأیید کنید که زمان انتظار ۳ ثانیه کافی است.</p>



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



<p>در نهایت، پس از انتقال کامل ترافیک به کنترلر Gateway API، ابتدا منابع Ingress را حذف و سپس کنترلر Ingress قدیمی را uninstall کنید.</p>



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



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



<p>گزینه‌های جایگزین شامل Traefik ،Envoy Gateway ،Kong Gateway و NGINX Gateway Fabric هستند و مسیر آینده اکوسیستم، Gateway API است. با برنامه‌ریزی درست، بررسی زیرساخت، اصلاح مانیفست‌ها و تست در محیط توسعه، می‌توانید مهاجرت تدریجی و امن را انجام دهید و بدون اختلال سرویس‌ها، به معماری مدرن کوبرنتیز برسید.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/ingress-nginx-retirement/">بازنشستگی Ingress NGINX؛ ریسک‌ها، جایگزین‌ها و مسیر مهاجرت</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/ingress-nginx-retirement/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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>Jenkins چیست؟ نحوه کار، ویژگی‌ها و کاربردهای جنکینز</title>
		<link>https://hamravesh.com/blog/what-is-jenkins/</link>
					<comments>https://hamravesh.com/blog/what-is-jenkins/#respond</comments>
		
		<dc:creator><![CDATA[علی باقرزاده]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 15:30:00 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2540</guid>

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



<p>در این مطلب بررسی می‌کنیم که جنکینز چگونه کار می‌کند، Jenkins Pipeline چه مفهومی دارد و مهم‌ترین کاربردها و ویژگی‌های Jenkins چیست.</p>



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



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



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



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



<ul class="wp-block-list">
<li>کد را دریافت کند</li>



<li>پروژه را Build کند</li>



<li>تست‌های خودکار را اجرا کند</li>



<li>در صورت موفق بودن مراحل قبلی، نرم‌افزار را در محیط مورد نظر مستقر کند</li>
</ul>



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



<h2 class="wp-block-heading" id="h-jenkins-در-devops-چه-نقشی-دارد">Jenkins در DevOps چه نقشی دارد؟</h2>



<p>جنکینز معمولاً در چارچوب فرایندهای <a href="https://hamravesh.com/blog/what-is-ci-cd" target="_blank" rel="noreferrer noopener">CI/CD</a> استفاده می‌شود. این اصطلاح به مجموعه‌ای از روش‌ها و ابزارها اشاره دارد که هدف آن‌ها خودکارسازی مراحل ادغام کد، تست و انتشار نرم‌افزار است.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="673" src="https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-02-1024x673.webp" alt="نقش CI/CD در جنکینز چیست" class="wp-image-4663" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-02-1024x673.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-02-300x197.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-02-768x505.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-02-120x79.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-02.webp 1201w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



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



<h3 class="wp-block-heading" id="h-continuous-integration-در-جنکینز">Continuous Integration در جنکینز</h3>



<p>در روش <strong>Continuous Integration</strong> یا ادغام مداوم، توسعه‌دهندگان تغییرات کد خود را به صورت مکرر در یک مخزن مشترک ثبت می‌کنند. پس از هر تغییر، سیستم CI به صورت خودکار پروژه را Build می‌کند و تست‌ها را اجرا می‌کند. اگر مشکلی در کد وجود داشته باشد، خطا در همان مراحل اولیه شناسایی می‌شود. Jenkins یکی از ابزارهایی است که می‌تواند این فرایند را خودکار کند.</p>



<p>برای مثال، وقتی یک برنامه‌نویس تغییر جدیدی را در مخزن Git ثبت می‌کند، Jenkins می‌تواند این مراحل را به طور خودکار انجام دهد:</p>



<ul class="wp-block-list">
<li>پروژه را Build کند</li>



<li>تست‌های واحد (Unit Test) را اجرا کند</li>



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



<p>این کار باعث می‌شود مشکلات خیلی زودتر شناسایی شوند.</p>



<h3 class="wp-block-heading" id="h-continuous-delivery-در-جنکینز">Continuous Delivery در جنکینز</h3>



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



<ul class="wp-block-list">
<li>محیط تست</li>



<li>محیط staging</li>



<li>یا محیط پیش‌تولید</li>
</ul>



<p>در این حالت انتشار نهایی در محیط production معمولاً با تأیید انسانی انجام می‌شود.</p>



<h3 class="wp-block-heading" id="h-continuous-deployment-در-جنکینز">Continuous Deployment در جنکینز</h3>



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



<h2 class="wp-block-heading">نحوه کار Jenkins و معماری آن</h2>



<p>Jenkins یک سرور اتوماسیون متن‌باز است که مراحل مختلف توسعه نرم‌افزار را به صورت خودکار اجرا می‌کند. این ابزار بر پایه زبان جاوا نوشته شده و روی سیستم‌عامل‌های مختلفی مانند لینوکس، ویندوز و macOS قابل اجرا است. Jenkins می‌تواند به شکل یک برنامه مستقل، یک servlet در سرورهای جاوا (مثل Tomcat یا Jetty) و یا در قالب کانتینر Docker راه‌اندازی شود.</p>



<h3 class="wp-block-heading">معماری Jenkins</h3>



<p>معماری جنکینز بر اساس مدل Master/Agent طراحی شده است:</p>



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



<li><strong>Agent:</strong><br>Agentها ماشین‌هایی هستند که جنکینز از طریق آن‌ها وظایف Build و تست را اجرا می‌کند. Agent می‌تواند روی سرور محلی یا روی ماشین‌های از راه دور قرار گیرد و به Jenkins Master متصل شود. این معماری اجازه می‌دهد Jenkins در مقیاس بزرگ، پروژه‌های متعدد را به صورت موازی و بهینه اجرا کند.</li>
</ul>



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



<h3 class="wp-block-heading">جریان کار Jenkins</h3>



<p>فرایند اجرای یک Build یا پایپ‌لاین در جنکینز معمولاً شامل مراحل زیر است:</p>



<ol class="wp-block-list">
<li><strong>دریافت کد منبع:</strong> جنکینز تغییرات کد را از مخزن‌های Git ،SVN یا سایر سیستم‌های کنترل نسخه دریافت می‌کند.</li>



<li><strong>Build یا ساخت پروژه:</strong> جنکینز با استفاده از ابزارهای Build مانند Maven ،Gradle یا Ant پروژه را ساخته و بسته‌بندی می‌کند.</li>



<li><strong>اجرای تست‌ها:</strong> جنکینز تست‌های واحد (Unit Test) و تست‌های یکپارچه (Integration Test) را اجرا می‌کند. در صورت بروز خطا، تیم توسعه بلافاصله مطلع می‌شود.</li>



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



<li><strong>گزارش‌دهی و مانیتورینگ:</strong> جنکینز نتایج Build و تست‌ها را به صورت گزارش و نمودار ارائه می‌دهد و هرگونه خطا یا هشدار را ثبت می‌کند.</li>
</ol>



<h3 class="wp-block-heading" id="h-نقش-jenkinsfile-در-نحوه-کار-jenkins-چیست">نقش Jenkinsfile در نحوه کار Jenkins چیست؟</h3>



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



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



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



<h2 class="wp-block-heading" id="h-پایپ-لاین-jenkins-چیست">پایپ‌لاین Jenkins چیست؟</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="668" src="https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-03-1024x668.webp" alt="پایپ‌لاین جنکینز از توسعه تا پروداکشن" class="wp-image-4664" srcset="https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-03-1024x668.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-03-300x196.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-03-768x501.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-03-120x78.webp 120w, https://hamravesh.com/blog/wp-content/uploads/2026/03/hamravesh-what-is-jenkins-03.webp 1201w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



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



<ul class="wp-block-list">
<li>چندین مرحله مختلف به ترتیب مشخص اجرا شوند</li>



<li>وابستگی بین مراحل رعایت شود</li>



<li>خطاها سریع شناسایی و گزارش شوند</li>



<li>تمام مراحل به صورت خودکار و قابل تکرار انجام شوند</li>
</ul>



<h3 class="wp-block-heading">Pipeline as Code</h3>



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



<p><strong>مزایای Pipeline as Code</strong></p>



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



<li>تغییرات پایپ‌لاین با تغییرات کد پروژه همگام می‌شود</li>



<li>امکان اجرای پایپ‌لاین به صورت خودکار در محیط‌های مختلف فراهم است</li>
</ul>



<p>مثال: در یک پروژه وب، Jenkinsfile می‌تواند شامل مراحل زیر باشد:</p>



<ol class="wp-block-list">
<li>ساخت پروژه با Gradle</li>



<li>اجرای تست واحد برای بررسی عملکرد هر بخش کوچک از کد</li>



<li>اجرای تست یکپارچه‌سازی برای بررسی عملکرد بخش‌ها در کنار هم</li>



<li>بسته‌بندی نهایی و آماده‌سازی برای استقرار</li>



<li>استقرار در محیط staging</li>
</ol>



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



<h3 class="wp-block-heading">Multibranch Pipeline</h3>



<p>جنکینز می‌تواند پایپ‌لاین‌ها را برای چندین شاخه (Branch) مختلف پروژه اجرا کند. این قابلیت که به آن <strong>Multibranch Pipeline</strong> می‌گویند، باعث می‌شود:</p>



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



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



<li>تست و Build برای هر شاخه به طور جداگانه انجام شود، بدون آنکه شاخه‌های دیگر تحت تاثیر قرار گیرند</li>
</ul>



<h3 class="wp-block-heading" id="h-سرعت-پایپ-لاین-و-بهینه-سازی-آن">سرعت پایپ‌لاین و بهینه‌سازی آن</h3>



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



<h2 class="wp-block-heading" id="h-کاربردهای-اصلی-جنکینز-چیست">کاربردهای اصلی جنکینز چیست؟</h2>



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



<h3 class="wp-block-heading">خودکارسازی ساخت پروژه</h3>



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



<h3 class="wp-block-heading">اجرای تست‌های خودکار</h3>



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



<h3 class="wp-block-heading">استقرار خودکار نرم‌افزار</h3>



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



<h3 class="wp-block-heading">یکپارچه‌سازی با سیستم‌های کنترل نسخه و ابزارهای DevOps</h3>



<p>جنکینز با مخزن‌های کد مانند Git و ابزارهای دیگر <a href="https://hamravesh.com/blog/what-is-devops" target="_blank" rel="noreferrer noopener">DevOps</a> یکپارچه می‌شود. این قابلیت باعث می‌شود که ادغام مداوم تغییرات کد با محیط‌های تست و تولید بدون دخالت دستی انجام شود.</p>



<h3 class="wp-block-heading">نظارت و گزارش‌دهی</h3>



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



<h2 class="wp-block-heading" id="h-jenkins-چه-زمانی-استفاده-می-شود">Jenkins چه زمانی استفاده می‌شود؟</h2>



<p id="h-jenkins-چه-زمانی-استفاده-می-شود-جنکینز-معمولا-در-پروژه-هایی-استفاده-می-شود-که-تیم-توسعه-می-خواهد-فرایند-ساخت-تست-و-انتشار-نرم-افزار-را-تا-حد-امکان-خودکار-کند-در-چنین-پروژه-هایی-تغییرات-کد-به-طور-مداوم-در-مخزن-پروژه-ثبت-می-شود-و-لازم-است-هر-تغییر-سریع-بررسی-و-آزمایش-شود-تا-از-ایجاد-خطا-در-نسخه-های-جدید-جلوگیری-شود">جنکینز معمولاً در پروژه‌هایی استفاده می‌شود که تیم توسعه می‌خواهد فرایند ساخت، تست و انتشار نرم‌افزار را تا حد امکان خودکار کند. در چنین پروژه‌هایی، تغییرات کد به‌طور مداوم در مخزن پروژه ثبت می‌شود و لازم است هر تغییر سریع بررسی و آزمایش شود تا از ایجاد خطا در نسخه‌های جدید جلوگیری شود.</p>



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



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



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



<p id="h-jenkins-چه-زمانی-استفاده-می-شود">به طور خلاصه، جنکینز بیشتر در پروژه‌هایی استفاده می‌شود که در آن‌ها سرعت انتشار نسخه‌ها، کیفیت نرم‌افزار و خودکارسازی فرایندهای توسعه اهمیت زیادی دارد.</p>



<h2 class="wp-block-heading" id="h-ویژگی-های-کلیدی-جنکینز-چیست">ویژگی‌های کلیدی جنکینز چیست؟</h2>



<p>جنکینز با چند ویژگی اصلی شناخته می‌شود:</p>



<p><strong>متن‌باز و رایگان</strong></p>



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



<p><strong>اکوسیستم پلاگین گسترده</strong></p>



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



<p><strong>قابلیت تعریف پایپ‌لاین به صورت کد</strong></p>



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



<p><strong>مقیاس‌پذیری</strong></p>



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



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



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



<h3 class="wp-block-heading" id="h-مزایای-جنکینز">مزایای جنکینز</h3>



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



<ul class="wp-block-list">
<li>متن‌باز و رایگان</li>



<li>انعطاف‌پذیری بالا و اکوسیستم پلاگین گسترده</li>



<li>پشتیبانی از Pipeline as Code</li>



<li>مقیاس‌پذیر و قابل اجرا در محیط‌های مختلف</li>



<li>قابلیت یکپارچه‌سازی با ابزارهای DevOps</li>
</ul>



<h3 class="wp-block-heading" id="h-معایب-جنکینز">معایب جنکینز</h3>



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



<ul class="wp-block-list">
<li>پیکربندی و نگهداری در محیط‌های بزرگ می‌تواند پیچیده باشد</li>



<li>وابستگی زیاد به پلاگین‌ها ممکن است باعث مشکلات سازگاری شود</li>



<li>رابط کاربری کلاسیک ممکن است برای کاربران جدید کمی گیج‌کننده باشد</li>
</ul>



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



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



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



<p>در عین حال، مانند هر ابزار دیگری، استفاده از جنکینز نیز چالش‌هایی دارد و راه‌اندازی و نگهداری آن در پروژه‌های بزرگ ممکن است نیازمند تجربه و پیکربندی دقیق باشد. با این حال، به دلیل انعطاف‌پذیری بالا و جامعه کاربری گسترده، جنکینز همچنان یکی از پرکاربردترین ابزارها برای خودکارسازی فرایندهای توسعه نرم‌افزار به شمار می‌رود.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-jenkins/">Jenkins چیست؟ نحوه کار، ویژگی‌ها و کاربردهای جنکینز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-jenkins/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>خودکارسازی تست‌ها در چرخه دواپس</title>
		<link>https://hamravesh.com/blog/devops-automation-test/</link>
					<comments>https://hamravesh.com/blog/devops-automation-test/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sat, 23 Nov 2024 08:16:58 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3789</guid>

					<description><![CDATA[<p>در این مقاله از وبلاگ هم‌روش، به بررسی اهمیت خودکارسازی تست‌ها در چرخه دواپس و نحوه پیاده‌سازی آن می‌پردازیم.</p>
<p>The post <a href="https://hamravesh.com/blog/devops-automation-test/">خودکارسازی تست‌ها در چرخه دواپس</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در دنیای فناوری اطلاعات که به سرعت در حال تحول است، سازمان‌ها به دنبال راه‌هایی هستند تا نرم‌افزارهای با کیفیت بالا را در کمترین زمان ممکن ارائه دهند. <strong><a href="https://hamravesh.com/blog/what-is-devops/">دواپس (DevOps)</a></strong> به عنوان رویکردی که توسعه (Development) و عملیات (Operations) را ترکیب می‌کند، به این نیاز پاسخ می‌دهد. یکی از اجزای حیاتی در چرخه دواپس، <strong>خودکارسازی تست‌ها</strong> است. در این مقاله از وبلاگ هم‌روش، به بررسی اهمیت خودکارسازی تست‌ها در چرخه دواپس و نحوه پیاده‌سازی آن می‌پردازیم.</p>



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



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



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



<p>۱. <strong>افزایش سرعت تحویل نرم‌افزار</strong></p>



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



<p>۲. <strong>بهبود کیفیت و اطمینان</strong></p>



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



<p>۳. <strong>کاهش هزینه‌ها</strong></p>



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



<p>۴. <strong>تسهیل <a href="https://hamravesh.com/blog/what-is-ci-cd/">یکپارچه‌سازی مداوم (CI) و تحویل مداوم (CD)</a></strong></p>



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



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="536" src="https://hamravesh.com/blog/wp-content/uploads/2024/10/devops-testing-automation-1024x536.webp" alt="خودکارسازی تست‌ها در دواپس" class="wp-image-3791" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/10/devops-testing-automation-1024x536.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/10/devops-testing-automation-300x157.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/10/devops-testing-automation-768x402.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/10/devops-testing-automation.webp 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="h-مراحل-پیاده-سازی-خودکارسازی-تست-ها-در-چرخه-دواپس"><strong>مراحل پیاده‌سازی خودکارسازی تست‌ها در چرخه دواپس</strong></h2>



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



<h3 class="wp-block-heading" id="h-۱-شناسایی-نیازها-و-تعیین-اهداف"><strong>۱. شناسایی نیازها و تعیین اهداف</strong></h3>



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



<h3 class="wp-block-heading"><strong>۲. انتخاب ابزارها و چارچوب‌های مناسب</strong></h3>



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



<ul class="wp-block-list">
<li><strong><a href="https://www.selenium.dev/">Selenium</a></strong> برای تست‌های رابط کاربری وب</li>



<li><strong>JUnit</strong> یا <strong>TestNG</strong> برای تست‌های جاوا</li>



<li><strong>pytest</strong> برای تست‌های پایتون</li>



<li><strong>Jenkins</strong> ،<strong>GitLab CI/CD</strong> یا <strong>Azure DevOps</strong> برای یکپارچه‌سازی مداوم</li>
</ul>



<h3 class="wp-block-heading"><strong>۳. طراحی استراتژی تست</strong></h3>



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



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



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



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



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



<h3 class="wp-block-heading"><strong>۴. توسعه و نگارش تست‌های خودکار</strong></h3>



<p>تست‌های خودکار را بر اساس استراتژی تدوین‌شده توسعه دهید. در این مرحله:</p>



<ul class="wp-block-list">
<li>از الگوهای طراحی مناسب برای افزایش قابلیت نگهداری استفاده کنید.</li>



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



<li>تست‌ها را به گونه‌ای بنویسید که مستقل و قابل تکرار باشند.</li>
</ul>



<h3 class="wp-block-heading"><strong>۵. ادغام تست‌ها با سیستم‌های یکپارچه‌سازی مداوم (CI)</strong></h3>



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



<ul class="wp-block-list">
<li>پیکربندی ابزارهای CI برای اجرای تست‌ها در زمان‌های مشخص یا بر اساس رویدادها</li>



<li>تنظیم اعلان‌ها و گزارش‌دهی برای نتایج تست‌ها</li>



<li>اطمینان از اینکه شکست در تست‌ها به طور مناسب مدیریت و گزارش می‌شود</li>
</ul>



<h3 class="wp-block-heading"><strong>۶. اجرای تست‌ها در محیط‌های متنوع</strong></h3>



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



<ul class="wp-block-list">
<li>استفاده از شبیه‌سازها یا مجازی‌سازی برای ایجاد محیط‌های تست</li>



<li>اجرای تست‌ها در پلتفرم‌ها و دستگاه‌های مختلف در صورت نیاز</li>
</ul>



<h3 class="wp-block-heading"><strong>۷. نظارت و گزارش‌دهی مستمر</strong></h3>



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



<ul class="wp-block-list">
<li>روندهای عملکردی را شناسایی کنید</li>



<li>مشکلات تکراری را تشخیص دهید</li>



<li>بازخوردهای لازم را به تیم توسعه ارائه دهید</li>
</ul>



<h3 class="wp-block-heading"><strong>۸. بهینه‌سازی و نگهداری تست‌ها</strong></h3>



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



<ul class="wp-block-list">
<li>فرآیندهای نگهداری منظم را تعیین کنید</li>



<li>تست‌های منسوخ یا غیرضروری را حذف کنید</li>



<li>پوشش تست را بر اساس ویژگی‌های جدید افزایش دهید</li>
</ul>



<h3 class="wp-block-heading"><strong>۹. آموزش و ترویج فرهنگ خودکارسازی</strong></h3>



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



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



<li>بهترین شیوه‌ها و تجربیات موفق را به اشتراک بگذارید</li>



<li>فرهنگ همکاری و مسئولیت‌پذیری را تقویت کنید</li>
</ul>



<h3 class="wp-block-heading"><strong>۱۰. بازخورد و بهبود مستمر</strong></h3>



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



<ul class="wp-block-list">
<li>اصلاح استراتژی‌ها و روش‌ها</li>



<li>به‌روزرسانی ابزارها و فناوری‌ها</li>



<li>ارتقاء کیفیت و کارایی فرآیند تست</li>
</ul>



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


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="933" height="467" src="https://hamravesh.com/blog/wp-content/uploads/2024/10/devops-testing-best-practices-edited.webp" alt="خودکارسازی تست در دواپس - بهترین روش‌ها" class="wp-image-3793" style="width:838px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/10/devops-testing-best-practices-edited.webp 933w, https://hamravesh.com/blog/wp-content/uploads/2024/10/devops-testing-best-practices-edited-300x150.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/10/devops-testing-best-practices-edited-768x384.webp 768w" sizes="auto, (max-width: 933px) 100vw, 933px" /></figure>
</div>


<h3 class="wp-block-heading" id="h-شروع-کوچک-و-توسعه-تدریجی"><strong>شروع کوچک و توسعه تدریجی</strong></h3>



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



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



<h3 class="wp-block-heading" id="h-نگهداری-منظم-تست-ها"><strong>نگهداری منظم تست‌ها</strong></h3>



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



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



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



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



<h3 class="wp-block-heading" id="h-استفاده-از-داده-های-واقعی-در-فرایند-تستینگ"><strong>استفاده از داده‌های واقعی</strong> در فرایند تستینگ</h3>



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



<h2 class="wp-block-heading" id="h-چالش-ها-و-مشکلات-خودکارسازی-تست-ها-و-راه-حل-ها">چالش‌ها و مشکلات خودکارسازی تست‌ها و راه‌حل‌ها</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1867" height="1120" src="https://hamravesh.com/blog/wp-content/uploads/2024/10/problems-challenges-edited-1.webp" alt="چالش‌ها و مشکلات پیاده‌سازی تست خودکار دواپس" class="wp-image-3797" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/10/problems-challenges-edited-1.webp 1867w, https://hamravesh.com/blog/wp-content/uploads/2024/10/problems-challenges-edited-1-300x180.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/10/problems-challenges-edited-1-1024x614.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/10/problems-challenges-edited-1-768x461.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/10/problems-challenges-edited-1-1536x921.webp 1536w" sizes="auto, (max-width: 1867px) 100vw, 1867px" /></figure>



<p>خودکارسازی تست‌ها در<a href="https://hamravesh.com/blog/category/devops/"> چرخه دواپس</a> مزایای بسیاری دارد، اما در مسیر پیاده‌سازی آن، سازمان‌ها با چالش‌ها و مشکلات متعددی مواجه می‌شوند. شناخت این چالش‌ها و ارائه راه‌حل‌های مناسب، کلید موفقیت در اجرای مؤثر خودکارسازی تست‌ها است. در ادامه، به برخی از مهم‌ترین چالش‌ها و راه‌حل‌های مرتبط با آن‌ها می‌پردازیم:</p>



<h3 class="wp-block-heading"><strong>۱. هزینه و زمان پیاده‌سازی اولیه</strong></h3>



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



<p><em>راه‌حل:</em></p>



<ul class="wp-block-list">
<li><strong>شروع تدریجی:</strong> با خودکارسازی تست‌های حیاتی و پرکاربرد آغاز کنید تا بتوانید بازگشت سرمایه را سریع‌تر مشاهده کنید.</li>



<li><strong>استفاده از ابزارهای متن‌باز:</strong> از ابزارهای رایگان و متن‌باز که هزینه‌های لایسنس ندارند استفاده کنید.</li>



<li><strong>برنامه‌ریزی دقیق:</strong> با برنامه‌ریزی مناسب و تخصیص منابع بهینه، می‌توانید هزینه‌ها را کنترل کنید.</li>
</ul>



<h3 class="wp-block-heading"><strong>۲. پیچیدگی در تست برخی سناریوها</strong></h3>



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



<p><em>راه‌حل:</em></p>



<ul class="wp-block-list">
<li><strong>تجزیه سناریوها:</strong> سناریوهای پیچیده را به بخش‌های کوچکتر و قابل مدیریت تقسیم کنید.</li>



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



<li><strong>ترکیب تست‌های دستی و خودکار:</strong> در مواردی که خودکارسازی غیرممکن یا غیرمقرون‌به‌صرفه است، از تست‌های دستی استفاده کنید.</li>
</ul>



<h3 class="wp-block-heading"><strong>۳. نگهداری و به‌روزرسانی تست‌ها</strong></h3>



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



<p><em>راه‌حل:</em></p>



<ul class="wp-block-list">
<li><strong>استفاده از الگوهای طراحی مناسب:</strong> کد تست‌ها را به صورت ماژولار و قابل نگهداری بنویسید.</li>



<li><strong>مستندسازی دقیق:</strong> مستندسازی تست‌ها به فهم و به‌روزرسانی آن‌ها کمک می‌کند.</li>



<li><strong>فرآیندهای نگهداری منظم:</strong> برنامه‌ریزی برای بازبینی و به‌روزرسانی منظم تست‌ها ضروری است.</li>
</ul>



<h3 class="wp-block-heading"><strong>۴. مقاومت تیم در برابر تغییر</strong></h3>



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



<p><em>راه‌حل:</em></p>



<ul class="wp-block-list">
<li><strong>آموزش و توانمندسازی:</strong> آموزش‌های لازم را برای تیم‌ها فراهم کنید تا مهارت‌ها و دانش مورد نیاز را کسب کنند.</li>



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



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



<h2 class="wp-block-heading">در پایان</h2>



<p>خودکارسازی تست‌ها در چرخه دواپس نه تنها به بهبود کیفیت نرم‌افزار کمک می‌کند، بلکه سرعت تحویل و رضایت مشتریان را نیز افزایش می‌دهد. با وجود چالش‌هایی که ممکن است در این مسیر وجود داشته باشد، مزایای آن بسیار بیشتر است و سرمایه‌گذاری در آن ارزشمند است.</p>
<p>The post <a href="https://hamravesh.com/blog/devops-automation-test/">خودکارسازی تست‌ها در چرخه دواپس</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/devops-automation-test/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Argo CD چیست‌؟ – تسهیل گیت‌آپس با کوبرنتیز</title>
		<link>https://hamravesh.com/blog/what-is-argocd/</link>
					<comments>https://hamravesh.com/blog/what-is-argocd/#respond</comments>
		
		<dc:creator><![CDATA[بابک خوش‌نویس]]></dc:creator>
		<pubDate>Mon, 11 Nov 2024 11:13:26 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3459</guid>

					<description><![CDATA[<p>argo cd ابزاری برای «استقرار مداوم» (CD) است که به‌طور ویژه برای کوبرنتیز طراحی شده است. در این مقاله با این ابزار بیشتر آشنا خواهیم شد.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-argocd/">Argo CD چیست‌؟ – تسهیل گیت‌آپس با کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Argo CD ابزار قدرتمند استقرار مداوم (<a href="https://hamravesh.com/blog/what-is-ci-cd/">CD</a>) برای <a href="https://hamravesh.com/blog/what-is-kubernetes/">کوبرنتیز</a> است که از رویکرد گیت‌آپس استفاده می‌کند. در این مطلب، ضمن پاسخ به این پرسش که Argo CD چیست توضیح می‌دهیم که چگونه این ابزار فرآیند CI/CD را در محیط‌های کوبرنتیز بهبود می‌بخشد. ما ویژگی‌های کلیدی Argo CD، نحوه عملکرد آن در چارچوب گیت‌آپس و اجزای اصلی این سیستم را مورد بحث قرار خواهیم داد. همچنین، به این موضوع می‌پردازیم که چگونه Argo CD به تسهیل گیت‌آپس در کوبرنتیز کمک می‌کند و مزایای استفاده از آن را در فرآیند توسعه و استقرار نرم‌افزار بررسی خواهیم کرد.</p>



<h2 class="wp-block-heading" id="h-argo-cd-چیست">Argo CD چیست‌؟</h2>



<p>«آرگو سی‌دی» (Argo CD) ابزار «استقرار مداوم» (Continues Integration | CD) محسوب می‌شود که به‌طور ویژه برای کوبرنتیز طراحی شده است. برخلاف ابزارهای استقرار مداوم خارجی که تنها از روش‌های استقرار مبتنی بر فشار (Push-Based) استفاده می‌کنند، Argo CD می‌تواند کدهای به‌روزشده را مستقیماً از مخازن گیت (<a href="https://hamravesh.com/blog/10-git-command/">Git</a>) دریافت کرده و آن‌ها را روی منابع کوبرنتیز مستقر کند. این ویژگی به توسعه‌دهندگان امکان می‌دهد تا هم پیکربندی زیرساخت و هم به‌روزرسانی‌های نرم‌افزار را در یک سیستم واحد مدیریت کنند. Argo CD ویژگی‌ها و قابلیت‌های کلیدی زیر را ارائه می‌دهد:</p>



<ul class="wp-block-list">
<li>استقرار دستی یا خودکار برنامه‌ها روی خوشهٔ کوبرنتیز</li>



<li>همگام‌سازی خودکار وضعیت برنامه با آخرین نسخهٔ پیکربندی اعلامی</li>



<li>رابط کاربری تحت وب و رابط خط فرمان (CLI)</li>



<li>توانایی نمایش مشکلات استقرار، تشخیص و رفع ناهماهنگی‌های پیکربندی</li>



<li>کنترل دسترسی مبتنی بر نقش (RBAC) که امکان مدیریت چند خوشه را فراهم می‌کند.</li>



<li>ورود یکپارچه (SSO) با ارائه‌دهندگانی مانند گیت‌لب، گیت‌هاب، مایکروسافت، OAuth2 ،OIDC، لینکدین، LDAP و SAML 2.0</li>



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



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



<h2 class="wp-block-heading" id="h-گیت-آپس-با-argo-cd-چیست">گیت‌آپس با Argo CD چیست؟</h2>



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



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



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



<ul class="wp-block-list">
<li>یک توسعه‌دهنده تغییراتی در برنامه ایجاد می‌کند و نسخهٔ جدیدی از تعاریف منابع کوبرنتیز را به مخزن گیت ارسال می‌کند.</li>



<li>یکپارچه‌سازی مداوم (Continuous Integration | CI) فعال می‌شود که منجر به ذخیرهٔ تصویر کانتینر جدید در یک مخزن می‌گردد.</li>



<li>توسعه‌دهنده درخواست ادغام (Pull Request) را صادر می‌کند که شامل تغییرات در مانیفست‌های کوبرنتیز است. این مانیفست‌ها می‌توانند به صورت دستی یا خودکار ایجاد شده باشند.</li>



<li>درخواست ادغام بررسی شده و تغییرات با شاخهٔ اصلی ترکیب می‌شوند. این عمل یک وب‌هوک را فعال می‌کند که به Argo CD اطلاع می‌دهد تغییری ایجاد شده است.</li>



<li>آرگو سی‌دی مخزن را کلون و وضعیت برنامه را با وضعیت فعلی خوشهٔ کوبرنتیز مقایسه می‌کند. سپس تغییرات لازم را در پیکربندی خوشه اعمال می‌کند.</li>



<li>کوبرنتیز از کنترلِرهای خود استفاده می‌کند تا تغییرات مورد نیاز در منابع خوشه را اعمال کند، تا زمانی که به پیکربندی مطلوب برسد.</li>



<li>Argo CD پیشرفت کار را نظارت می‌کند و زمانی که خوشهٔ کوبرنتیز آماده شد، گزارش می‌دهد که برنامه همگام شده است.</li>



<li>آرگو سی‌دی همچنین در جهت مخالف نیز کار می‌کند، یعنی تغییرات در خوشهٔ کوبرنتیز را نظارت می‌کند و اگر با پیکربندی فعلی در گیت مطابقت نداشته باشند، آن‌ها را نادیده می‌گیرد.</li>
</ul>



<h3 class="wp-block-heading" id="h-argo-cd-چطور-به-تسهیل-گیت-آپس-با-کوبرنتیز-کمک-می-کند">Argo CD چطور به تسهیل گیت‌آپس با کوبرنتیز کمک می‌کند؟</h3>



<ul class="wp-block-list">
<li><strong>عامل گیت‌آپس</strong> (<strong>GitOps Agent</strong>): Argo CD مسئول دریافت کدهای به‌روزشده از مخازن گیت و استقرار مستقیم آن‌ها روی منابع کوبرنتیز است. این ابزار هم پیکربندی زیرساخت و هم به‌روزرسانی‌های برنامه را در سیستمی واحد مدیریت می‌کند.</li>



<li><strong>تعاریف منابع سفارشی</strong> (<strong>CRD</strong> | <strong>Custom Resource Definitions</strong>): آرگو سی‌دی در فضای نام اختصاصی خود درون خوشهٔ کوبرنتیز فعالیت می‌کند. این ابزار CRDهای خاص خود را ارائه می‌دهد که API کوبرنتیز را گسترش داده و امکان تعریف وضعیت مطلوب برنامه را به شکلی اعلامی (Declarative) فراهم می‌کند. Argo CD بر اساس دستورالعمل‌های موجود در مخزن گیت یا مخزن Helm، از CRDهای خود برای اعمال تغییرات در فضای نام اختصاصی‌اش استفاده می‌کند.</li>



<li><strong>رابط خط فرمان</strong> (<strong>CLI</strong>): آرگو سی‌دی CLI قدرتمندی ارائه می‌دهد که شما را قادر می‌سازد با چند دستور ساده، تعاریف منابع YAML را ایجاد کنید. برای مثال، دستور <code>Argo CD app create</code> به شما اجازه می‌دهد با مشخص کردن چند پرچم، یک شیء Application معتبر ایجاد کنید که برنامهٔ شما را بدون نیاز به نوشتن دستی YAML توصیف می‌کند.</li>



<li><strong>رابط کاربری</strong>: Argo CD در این زمینه منحصر به فرد است که یک رابط کاربری تحت وب راحت ارائه می‌دهد که به شما امکان می‌دهد همان کار را انجام دهید، یعنی برنامه را تعریف کنید و از آرگو سی‌دی بخواهید پیکربندی‌های YAML مربوطه را ایجاد کند. همچنین به شما امکان می‌دهد پیکربندی کوبرنتیز حاصل را از نظر پادها و کانتینرها مشاهده کنید. اگرچه برخی ممکن است فکر کنند استفاده از رابط کاربری «گیت‌اپس واقعی» نیست، این درست نیست، زیرا رابط کاربری برای کنترل مستقیم خوشه استفاده نمی‌شود، بلکه فقط راهی آسان‌تر برای ایجاد پیکربندی اعلامی است.</li>



<li><strong>چند مستأجری</strong> (<strong>Multi-tenancy</strong>): آرگو سی‌دی از همکاری چندین تیم روی پروژه‌های مختلف در یک محیط کوبرنتیز به خوبی پشتیبانی می‌کند. CRDهای Argo CD می‌توانند محدود شوند تا فقط مخازن منبع متعلق به یک پروژهٔ خاص را بخوانند و می‌توانند طوری تنظیم شوند که برنامه‌ها را در خوشه و فضای نام خاصی مستقر کنند. هر نمونه CRD همچنین می‌تواند تنظیمات کنترل دسترسی مبتنی بر نقش (RBAC) خاص خود را داشته باشد.</li>



<li><strong>بهره‌گیری از ابزارهای موجود</strong>: بسیاری از سازمان‌ها قبلاً در پیکربندی‌های اعلامی مبتنی بر YAML، چارت‌های Helm ،Kustomize یا سایر سیستم‌ها سرمایه‌گذاری کرده‌اند. Argo CD هدفش استفاده از این سرمایه‌گذاری‌های موجود است، نه جایگزینی آن‌ها. این ابزار می‌تواند از هر یک از این فرمت‌ها برای ایجاد خودکار تعاریف CRD مربوطه استفاده کند.</li>
</ul>



<h2 class="wp-block-heading" id="h-argo-cd-چطور-کار-می-کند">Argo CD چطور کار می‌کند؟</h2>



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



<ul class="wp-block-list">
<li>مانیفست‌های ساده YAML یا JSON</li>



<li>چارت‌های Helm</li>



<li>Kustomize</li>



<li>برنامه‌های Ksonnet و Jsonnet</li>
</ul>



<p>همچنین امکان استفاده از هر ابزار مدیریت پیکربندی سفارشی به‌عنوان یک افزونه نیز وجود دارد. Argo CD به‌طور خودکار وضعیت مطلوب یک برنامه را در محیط هدفِ مشخص‌شده مستقر می‌کند. به‌روزرسانی‌ها از طریق برچسب‌ها (Tags)، شاخه‌ها (Branches)، یا نسخه‌های خاص ثابت‌شده (Pinned Specific Versions) یک مانیفست در کامیت‌های گیت قابل ردیابی هستند.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="512" height="488" src="https://hamravesh.com/blog/wp-content/uploads/2024/07/image-3.png" alt="نحوه کار Argo CD چیست" class="wp-image-3460" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/07/image-3.png 512w, https://hamravesh.com/blog/wp-content/uploads/2024/07/image-3-300x286.png 300w" sizes="auto, (max-width: 512px) 100vw, 512px" /><figcaption class="wp-element-caption">منبع تصویر [<a href="https://argo-cd.readthedocs.io/en/stable/assets/argocd_architecture.png">+</a>] </figcaption></figure>
</div>


<p>آرگو سی‌دی یک کنترلر کوبرنتیز است که وظیفهٔ نظارت مداوم بر تمام برنامه‌های در حال اجرا را بر عهده دارد. این ابزار، وضعیت فعلی برنامه‌ها را با وضعیت مطلوبی که در مخزن گیت تعریف شده، مقایسه می‌کند. اگر وضعیت فعلی یک برنامهٔ مستقر شده با وضعیت مطلوب آن تفاوت داشته باشد، Argo CD آن را به عنوان «ناهمگام» (OutOfSync) شناسایی می‌کند.</p>



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



<h3 class="wp-block-heading" id="h-اجزای-اساسی-argo-cd-چیست">اجزای اساسی Argo CD چیست؟</h3>



<p>در ادامه هر یک از اجزای اساسی Argo CD را معرفی می‌کنیم و آن‌ها را شرح می‌دهیم.</p>



<h4 class="wp-block-heading" id="h-api-در-argo-cd-چیست">API در Argo CD چیست؟</h4>



<p>این سرویس، یک سرور API از نوع gRPC/REST است که رابط برنامه‌نویسی را برای اجزایی مانند رابط خط فرمان و رابط کاربری وب فراهم می‌کند. وظایف اصلی این سرویس عبارتند از:</p>



<ul class="wp-block-list">
<li>مدیریت برنامه‌ها و گزارش وضعیت آن‌ها</li>



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



<li>مدیریت اعتبارنامه‌های خوشه و مخزن که به صورت اسرار کوبرنتیز ذخیره می‌شوند</li>



<li>احراز هویت و واگذاری مجوز به ارائه‌دهندگان هویت شخص ثالث</li>



<li>اعمال سیاست‌های کنترل دسترسی مبتنی بر نقش (RBAC)</li>



<li>دریافت و ارسال رویدادهای وب‌هوک گیت</li>
</ul>



<h4 class="wp-block-heading" id="h-سرویس-مخزن-در-argo-cd">سرویس مخزن در Argo CD</h4>



<p>این سرویس داخلی، مخزن گیت را به صورت محلی در حافظه پنهان ذخیره می‌کند و مانیفست‌های برنامه را نگهداری می‌کند. سرویس مخزن، مانیفست‌های کوبرنتیز را تولید می‌کند و بر اساس ورودی‌هایی مانند آدرس مخزن، مسیر برنامه، نسخه‌ها (مانند کامیت‌ها، برچسب‌ها، شاخه‌ها) و تنظیمات خاص قالب (مانند مقادیر Helm، محیط‌های Ksonnet، پارامترها) آن‌ها را برمی‌گرداند.</p>



<h4 class="wp-block-heading" id="h-کنترلر-برنامه">کنترلر برنامه</h4>



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



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



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



<p>آرگو سی‌دی با استفاده از اجزای کلیدی خود مانند API، سرویس مخزن و کنترلر برنامه، اطمینان حاصل می‌کند که وضعیت برنامه‌ها همواره با آخرین نسخه پیکربندی در مخزن گیت همگام باشد. این رویکرد نه تنها فرآیند استقرار را ساده‌تر می‌کند، بلکه قابلیت ردیابی، امنیت و ثبات بیشتری را در محیط‌های کوبرنتیز فراهم می‌آورد.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-argocd/">Argo CD چیست‌؟ – تسهیل گیت‌آپس با کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-argocd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ChatOps چیست؟ راهنمای کامل و جامع برای درک مفهوم ChatOps یا چت عملیاتی</title>
		<link>https://hamravesh.com/blog/what-is-chatops/</link>
					<comments>https://hamravesh.com/blog/what-is-chatops/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sun, 27 Oct 2024 08:06:30 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3807</guid>

					<description><![CDATA[<p>ChatOps رویکردی است که با ترکیب ابزارهای چت و اتوماسیون، امکان همکاری و ارتباط بهینه را فراهم می‌کند.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-chatops/">ChatOps چیست؟ راهنمای کامل و جامع برای درک مفهوم ChatOps یا چت عملیاتی</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>با افزایش نیاز به همکاری و اتوماسیون در تیم‌های فناوری اطلاعات، مفهومی به نام ChatOps به میان آمده است. اما ChatOps یا <strong>چت عملیاتی</strong> چیست و چگونه می‌تواند به بهبود فرآیندهای سازمانی کمک کند؟ در این مطلب از وبلاگ هم‌روش به بررسی کامل ChatOps می‌پردازیم.</p>



<p>در دنیای فناوری اطلاعات و توسعه نرم‌افزار، همکاری موثر بین اعضای تیم از اهمیت بالایی برخوردار است. <strong>ChatOps</strong> رویکردی است که با ترکیب ابزارهای چت و اتوماسیون، امکان همکاری و ارتباط بهینه را فراهم می‌کند.</p>



<p>مفهوم <strong>ChatOps</strong> برای اولین بار توسط <strong><a href="https://github.blog/engineering/infrastructure/using-chatops-to-help-actions-on-call-engineers/" target="_blank" rel="noreferrer noopener">GitHub</a></strong> معرفی شد، جایی که تیم‌های توسعه از ربات‌های چت برای اتوماسیون وظایف روزمره استفاده کردند. این رویکرد به سرعت در بین سازمان‌های دیگر محبوب شد و به یکی از روش‌های استاندارد همکاری تبدیل گردید.</p>



<h3 class="wp-block-heading" id="h-chatops-چگونه-کار-می-کند">ChatOps چگونه کار می‌کند؟</h3>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="832" height="467" src="https://hamravesh.com/blog/wp-content/uploads/2024/10/chatops-work.webp" alt="ChatOps چگونه کار می‌کند؟" class="wp-image-3808" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/10/chatops-work.webp 832w, https://hamravesh.com/blog/wp-content/uploads/2024/10/chatops-work-300x168.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/10/chatops-work-768x431.webp 768w" sizes="auto, (max-width: 832px) 100vw, 832px" /></figure>



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



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



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



<p><strong>ربات‌های ChatOps</strong>: در این سیستم، ربات‌ها نقش اصلی را ایفا می‌کنند. این ربات‌ها به پلتفرم چت متصل می‌شوند و به‌گونه‌ای پیکربندی شده‌اند که دستورات یا کوئری‌های کاربران را دریافت کرده و بر اساس آن‌ها اقدام کنند. به عنوان مثال، اگر یک توسعه‌دهنده بخواهد کدی را دیپلوی کند، می‌تواند با ارسال دستور متنی به ربات این کار را انجام دهد. ربات دستور را می‌گیرد و دیپلوی را انجام می‌دهد.</p>



<p><strong>اتصال به ابزارهای مختلف</strong>: ربات ChatOps با استفاده از APIها و پلاگین‌ها به ابزارها و سیستم‌های مختلف متصل می‌شود. این ابزارها می‌توانند شامل ابزارهای مانیتورینگ (مانند Grafana یا <strong><a href="https://hamravesh.com/blog/what-is-prometheus/">Prometheus</a></strong>)، سیستم‌های کنترل ورژن (مانند GitLab یا GitHub)، سرویس‌های ابری (مانند AWS یا Azure)، و حتی دیتابیس‌ها و سیستم‌های CI/CD باشند. با این اتصالات، ربات قادر است اطلاعات و عملیات مختلف را از ابزارها دریافت و به کاربران ارائه دهد.</p>



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



<h2 class="wp-block-heading" id="h-مزایای-استفاده-از-chatops">مزایای استفاده از ChatOps</h2>



<ul class="wp-block-list">
<li><strong>افزایش بهره‌وری</strong>: با اتوماسیون وظایف تکراری، زمان صرف شده برای انجام آن‌ها کاهش می‌یابد.</li>



<li><strong>بهبود همکاری تیمی</strong>: اطلاعات و فعالیت‌ها به صورت شفاف در دسترس همه اعضای تیم قرار می‌گیرد.</li>



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



<li><strong>واکنش سریع به رویدادها</strong>: امکان مانیتورینگ و واکنش سریع به مشکلات و رویدادها فراهم می‌شود.</li>
</ul>



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



<ul class="wp-block-list">
<li><a href="https://docs.hamravesh.com/darkube/create/1click/RocketChat/" target="_blank" rel="noreferrer noopener"><strong>Rocket.Chat</strong>:</a> راکت‌چت پروژه چت گروهی متن‌بازی است که امروزه میان افراد و سازمان‌ها محبوبیت قابل‌توجهی پیدا کرده‌است. هدف پدید‌آورنده‌ آن ایجاد معادل متن‌باز مجانی برای نرم‌افزار محبوب Slack بوده‌ است.</li>



<li><strong>Slack</strong>: یکی از محبوب‌ترین پلتفرم‌های چت که با ربات‌ها و ابزارهای مختلف یکپارچه می‌شود.</li>



<li><strong>Microsoft Teams</strong>: پلتفرمی قدرتمند برای همکاری تیمی با امکان ادغام با ابزارهای اتوماسیون.</li>



<li><strong>Hubot</strong>: ربات چتی که توسط GitHub توسعه یافته و قابل سفارشی‌سازی است.</li>



<li><strong>Mattermost</strong>: پلتفرم متن‌باز برای چت سازمانی با قابلیت‌های ChatOps.</li>
</ul>



<h2 class="wp-block-heading" id="h-پیاده-سازی-chatops-در-سازمان-شما">پیاده‌سازی ChatOps در سازمان شما</h2>



<p>برای شروع با <strong>ChatOps</strong>، مراحل زیر را می‌توانید دنبال کنید:</p>



<ol class="wp-block-list">
<li><strong>انتخاب پلتفرم چت مناسب</strong>: بر اساس نیازهای سازمان، پلتفرمی مانند Slack یا Microsoft Teams را انتخاب کنید.</li>



<li><strong>انتخاب ربات و ابزارهای اتوماسیون</strong>: رباتی مانند Hubot را برای یکپارچه‌سازی با پلتفرم چت انتخاب کنید.</li>



<li><strong>تعریف فرآیندها و وظایف قابل اتوماسیون</strong>: تعیین کنید که کدام وظایف می‌توانند اتوماسیون شوند.</li>



<li><strong>آموزش تیم</strong>: اعضای تیم را با روش‌های استفاده از ChatOps آشنا کنید.</li>



<li><strong>نظارت و بهبود مستمر</strong>: عملکرد سیستم را مانیتور کرده و بهبودهای لازم را اعمال کنید.</li>
</ol>



<h2 class="wp-block-heading" id="h-چالش-ها-و-ملاحظات">چالش‌ها و ملاحظات</h2>



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



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



<li><strong>پیچیدگی فنی</strong>: پیاده‌سازی ChatOps ممکن است نیاز به تخصص فنی داشته باشد.</li>
</ul>



<h2 class="wp-block-heading" id="h-بهترین-روش-ها-برای-پیاده-سازی-chatops">بهترین روش‌ها برای پیاده‌سازی ChatOps</h2>



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



<li><strong>مستندسازی</strong>: تمام فرآیندها و دستورات را به صورت مستند نگه دارید.</li>



<li><strong>بازخورد مستمر</strong>: از اعضای تیم بازخورد بگیرید و سیستم را بهبود دهید.</li>



<li><strong>امنیت را جدی بگیرید</strong>: همیشه به مسائل امنیتی توجه داشته باشید و اقدامات لازم را انجام دهید.</li>
</ul>



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



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



<p>اگر در پیاده‌سازی ابزارهای چت به مشکل برخورده‌اید می‌توانید به‌راحتی با استفاده از کنسول هم‌روش، یک اپلیکیشن <a href="https://docs.hamravesh.com/darkube/create/1click/RocketChat/" target="_blank" rel="noreferrer noopener"><strong>Rocket.Chat</strong></a> را تنها با چند کلیک برای سازمان و یا گروه خود پیاده‌سازی کنید. </p>
<p>The post <a href="https://hamravesh.com/blog/what-is-chatops/">ChatOps چیست؟ راهنمای کامل و جامع برای درک مفهوم ChatOps یا چت عملیاتی</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-chatops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CI/CD چیست؟ راهنمای جامع مفاهیم، کاربردها و مزایا</title>
		<link>https://hamravesh.com/blog/what-is-ci-cd/</link>
					<comments>https://hamravesh.com/blog/what-is-ci-cd/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Mon, 21 Oct 2024 08:16:57 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://blog.hamravesh.com/blog/?p=453</guid>

					<description><![CDATA[<p>یکپارچه‌سازی مداوم و تحویل پیوسته یا CI/CD رویکردی مدرن در فرایند توسعه نرم‌افزار است که مزایای متعددی نسبت به مدل‌های سنتی مانند مدل آبشاری دارد. </p>
<p>The post <a href="https://hamravesh.com/blog/what-is-ci-cd/">CI/CD چیست؟ راهنمای جامع مفاهیم، کاربردها و مزایا</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><span style="font-weight: 400;">یکپارچه‌سازی مداوم و تحویل پیوسته (CI/CD) رویکرد نسبتا تازه‌ای در روش توسعه نرم‌افزار است که هدف اصلی آن بالا بردن سرعت ساخت نرم‌افزار و بهبود کارایی آن به‌صورت هم‌زمان است. بخش‌های اصلی این مدل، شامل یکپارچه‌سازی مداوم کدها، انجام تست‌ها به‌صورت خودکار و در ادامه توسعه مستمر نرم‌افزار در فرآیند ساخت تا لحظه تحویل به مشتری است.</span></p>



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



<p><span style="font-weight: 400;">پیش از ایجاد CI/CD، مدل عام و رایج برای توسعه نرم‌افزارهای مختلف، «<strong><a href="https://hamravesh.com/blog/waterfall-development-methodology/">مدل آبشاری</a></strong>» بود. در مدل آبشاری، هر کدام از توسعه‌دهندگان نرم‌افزار در محیط ایزوله خود، به‌تنهایی کار می‌کردند. در این حالت، هر مرحله از نرم‌افزار به‌صورت مجزا ساخته شده و پس از اتمام، ساخت مرحله بعدی شروع می‌شد. در این روش قدیمی، معمولا توسعه و ساخت نرم‌افزار شامل مراحل مختلفی مثل جمع‌آوری نیازمندی‌ها، طراحی نرم‌افزار، کدنویسی، اجرای تست‌های مختلف و در نهایت اجرا و ساخت نرم‌افزار بود. در مدل آبشاری گاهی چند هفته زمان می‌برد تا یک فیچر توسعه پیدا کند و به دست مشتری برسد.&nbsp;</span></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="482" src="https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfal-model-1024x482.webp" alt="مدل آبشاری در توسعه نرم افزار" class="wp-image-3879" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfal-model-1024x482.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfal-model-300x141.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfal-model-768x362.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfal-model-1536x724.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfal-model-2048x965.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span style="font-weight: 400;"></span><span style="font-weight: 400;">مدل آبشاری معایب مختلفی داشت که چند مورد از مهم‌ترین آن‌ها شامل موارد زیر هستند:</span></p>



<ul class="wp-block-list">
<li><b>اجرای کند مراحل مختلف</b><span style="font-weight: 400;">: از آن‌جا که در این مدل، مراحل باید به‌نوبت و پشت سر هم اجرا می‌شدند، سرعت انتشار مراحل مختلف نرم‌افزار کمتر می‌شد و پاسخ‌گویی به نیاز کاربر و ایجاد تغییرات مختلف بر اساس نیازهای او، بسیار سخت‌تر بود.</span></li>



<li><b>نرخ شکست بالا</b><span style="font-weight: 400;">: در مدل آبشاری، احتمال به‌نتیجه نرسیدن نرم‌افزار و شکست پروژه، به دلیل نبود تست‌های خودکار، بسیار بیشتر بود. در واقع همه توسعه‌دهنده‌ها باید به‌صورت دستی، کدها را تست می‌کردند و این موضوع، احتمال وقوع خطا و ایجاد باگ در نرم‌افزار را افزایش می‌داد.</span></li>



<li><b>همکاری محدود</b><span style="font-weight: 400;">: امکان هماهنگی و همکاری بین بخش‌های مختلف پروژه مثل بخش توسعه‌دهنده‌ها، تست‌کنندگان و سهام‌داران، در مدل آبشاری بسیار کم و محدود بود و به همین دلیل، یافتن خطا و رفع خطاهای موجود به یک کار بسیار پیچیده و سخت تبدیل می‌شد.</span></li>



<li><b>هزینه بالا</b><span style="font-weight: 400;">: حالت سنتی و دستی توسعه نرم‌افزار، هزینه بالایی داشت و بخش عمده بودجه به بخش تست، یافتن باگ‌ها و رفع خطا تعلق می‌گرفت.</span></li>



<li><b>کاهش سرعت و چابکی</b><span style="font-weight: 400;">: روش قبلی توسعه نرم‌افزار کاملا خطی بود و به همین دلیل، امکان ایجاد تغییر سریع در نرم‌افزار و یا پاسخ‌گویی به نیازهای جدید کاربر وجود نداشت.</span></li>
</ul>



<figure class="wp-block-gallery aligncenter has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="482" data-id="3881" src="https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfall-downside-1024x482.webp" alt="معایب مدل آبشاری" class="wp-image-3881" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfall-downside-1024x482.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfall-downside-300x141.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfall-downside-768x362.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfall-downside-1536x724.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/10/waterfall-downside-2048x965.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<h2 class="wp-block-heading" id="h-ci-cd-چیست"><strong>CI/CD چیست؟</strong></h2>



<p><span style="font-weight: 400;">حالا و با این توضیحات اولیه، این سوال مهم ایجاد می‌شود که یکپارچه سازی مداوم یا همان CI و تحویل پیوسته یا همان CD به چه معنا است؟ در توضیح این دو باید بگوییم که به‌صورت کلی CI/CD، روشی از توسعه نرم‌افزار است که با استفاده از آن، ساخت بخش‌های جدید نرم‌افزار و به‌روزرسانی‌های آن در هر زمان از مراحل ساخت و انتشار، به‌صورت کاملا قابل اطمینان و بدون آسیب‌زدن به بخش‌های دیگر، قابل انجام است. وقتی در بخش کدنویسی، تغییرات به‌صورت مستمر اتفاق می‌افتند، چرخه‌های توسعه نرم‌افزار هم به‌صورت مداوم و سریع‌تری منتشر شده و به مرحله اجرا می‌رسند.</span></p>



<p><span style="font-weight: 400;">اصطلاح «CI/CD» ترکیبی از مخفف دو عبارت اصلی این مدل یعنی یکپارچه سازی مداوم یا Continuous Integration (CI) و تحویل پیوسته یا همان Continuous Delivery (CD) است. </span><span style="font-weight: 400;">اصطلاح CI/CD علاوه بر معنای لغوی خود، نشان‌دهنده یک فرهنگ سازمانی و اصول اجرایی است. در زمان استفاده از CI/CD، تمام اعضای تیم توسعه عادت می‌کنند که همه تغییرات انجام‌شده روی </span><span style="font-weight: 400;">کدهای خود را در بازه‌های زمانی کوتاه‌تر و به شکل پایدارتری روی سرور اصلی ثبت کنند.</span></p>



<p><span style="font-weight: 400;">برای انواع تیم‌های اجرایی و عملیاتی (DevOps) و البته متدولوژی چابک، روش CI/CD بهترین رویکرد عملی است. در CI/CD دو فرآیند مهم یکپارچه‌سازی و اجرای نرم‌افزار به‌صورت اتوماتیک انجام می‌شود و تیم‌های توسعه نرم‌افزار با خیال راحت می‌توانند نیازمندی‌های سازمان را در نظر گرفته و نرم‌افزارهایی باکیفیت و امنیت بالا طراحی و تولید کنند.</span></p>



<p>برای استفاده از قابلیت‌های CI/CD در کنسول هم‌روش می‌توانید&nbsp;<strong><a href="https://docs.hamravesh.com/darkube/ci-cd/github-actions/" target="_blank" rel="noreferrer noopener">راهنمای استفاده از Github Actions</a>&nbsp;</strong>در مستندات هم‌روش را مطالعه کنید.</p>



<h2 class="wp-block-heading" id="h-عملکرد-ci-cd-چگونه-است"><strong>عملکرد CI/CD چگونه است؟</strong></h2>



<p><span style="font-weight: 400;">به‌صورت کلی باید بگوییم که CI/CD یک فرآیند خودکار است که سه فعالیت اصلی یعنی یکپارچه‌سازی و هماهنگی کدها را انجام می‌دهد، تست‌ها را به‌صورت خودکار اجرا کرده و تغییرات ادامه‌دار انجام‌شده در فرآیند توسعه نرم‌افزار تا لحظه رسیدن به تحویل نهایی محصول را برعهده می‌گیرد. اجازه دهید که این سه گام را کمی بیشتر توضیح دهیم:</span></p>



<h3 class="wp-block-heading" id="h-یکپارچه-سازی-کدها">یکپارچه‌سازی کدها</h3>



<p><span style="font-weight: 400;">اولین بخش در فرآیند CI/CD، مرحله یکپارچه کردن کدها است. در این گام، هر کدام از توسعه‌دهنده‌های نرم‌افزار، کدهای خود را در یک سرور یا همان ریپازیتوری مثل گیت‌هاب، گیت‌لب یا بیت‌باکت، ثبت (Commit) می‌کنند. در این‌جا، همه کدهای ثبت‌شده توسط کاربران مختلف پروژه، با هم ترکیب شده و در یک پایگاه داده مرکزی، به‌صورت هماهنگ و یکپارچه قرار می‌گیرند.</span></p>



<p><span style="font-weight: 400;">هدف اصلی این کار، تضمین وجود یکپارچگی در بین بخش‌های مختلف کد است. در واقع با این کار، فرآیند به شکل پایداری انجام شده و این اطمینان حاصل می‌شود که کدهای جدید، باعث تخریب بخش‌های قبلی نشده و هماهنگی میان اجزای مختلف را از بین نمی‌برند.</span></p>



<h3 class="wp-block-heading" id="h-تست-خودکار">تست خودکار</h3>



<p><span style="font-weight: 400;">به‌محض اینکه کدها با هم ترکیب و ادغام شدند، مرحله بعدی یعنی انجام خودکار تست‌ها شروع می‌شود. این مرحله شامل اجرای چند مرحله ارزیابی و تست است که از طریق این تست‌ها، این اطمینان ایجاد شود که تغییرات انجام شده در بخش قبلی، کارایی لازم را داشته باشد، کیفیت کدها در حد استاندارد تعریف شده باشد و از همه مهم‌تر اینکه کدها بدون خطا، اجرا شوند. این گام باعث می‌شود که خطاهای موجود در بخش‌های مختلف کدنویسی، قبل از اجرای نهایی و در همین مراحل اولیه توسعه مشخص شوند تا به‌راحتی بتوان آن‌ها را رفع کرد.</span></p>



<h3 class="wp-block-heading" id="h-استقرار-پیوسته">استقرار پیوسته</h3>



<p><span style="font-weight: 400;">بعد از اینکه تغییرات انجام شده بر روی کدها، از مرحله قبلی هم با موفقیت عبور کرد، به مرحله نهایی و به مرحله «استقرار پیوسته» می‌رسد. در این گام، همه تغییرات و کدهای جدید به‌صورت خودکار به محیط اصلی نرم‌افزار افزوده شده و برای تست‌های بیشتر آماده می‌شوند. </span><span style="font-weight: 400;">اجرای این مرحله، این تضمین را ایجاد می‌کند که نرم‌افزار به‌صورت مداوم با آخرین کدهای نوشته شده به‌روز می‌شود و بخش‌های کاربردی هم به‌سرعت و با قابلیت اطمینان بالا به دست کاربران می‌رسند.</span></p>



<h3 class="wp-block-heading" id="h-استقرار-در-production">استقرار در Production</h3>



<p><span style="font-weight: 400;">آخرین مرحله از روش CI/CD، بخش <a href="https://hamravesh.com/blog/production-development-staging/#:~:text=%D9%85%D8%AD%D8%B5%D9%88%D9%84%20%D9%86%D9%87%D8%A7%DB%8C%DB%8C%20%DB%8C%D8%A7-,Production,-%D9%85%D8%AD%DB%8C%D8%B7%20%D9%85%D8%AD%D8%B5%D9%88%D9%84%20%D9%86%D9%87%D8%A7%DB%8C%DB%8C"><strong>Production Deployment</strong></a> است. در این مرحله، همه تغییرات نرم‌افزار به دست کاربر نهایی می‌رسد. این مرحله هم شامل بخش‌های مختلفی مثل نظارت بر محیط اجرای نرم‌افزار، اطمینان یافتن از اجرای راحت و بدون خطای آن و یافتن و رفع خطاهای احتمالی در بخش‌های گوناگون است.</span></p>



<p><span style="font-weight: 400;">چهار گام روش CI/CD در کنار هم فعالیت کرده و تضمین می‌کنند که همه تغییرات نرم‌افزار با هم یکپارچه شده، تست می‌شوند و به‌صورت کاملاً خودکار و بدون دخالت عوامل انسانی، در محیط نهایی نرم‌افزار اجرا شده و ثبت می‌شوند. این فرآیند خودکار باعث کاهش خطا خواهد شد، میزان کارایی را افزایش داده و باعث بهبود کلی کیفیت نرم‌افزار می‌شود.</span></p>



<p><span style="font-weight: 400;">با توجه به همه این مزایا، می‌توان گفت که با استفاده از روش CI/CD، تیم‌های توسعه نرم‌افزار می‌توانند خیلی سریع‌تر مراحل مختلف و چرخه‌های نرم‌افزار را منتشر کنند، احتمال وجود خطاهای داخلی نرم‌افزار را کاهش دهند و تجربه بسیار بهتری در اختیار کاربران نهایی بگذارند.</span></p>



<p><span style="font-weight: 400;">البته توجه کنید که این مراحل در فرآیند CI/CD در پروژه‌های مختلف یا حتی در پروژه‌های مشابه ولی در سازمان‌های مختلف، می‌توانند متفاوت باشند. برای مثال، شاید در بعضی تیم‌ها از تست‌های خودکار استفاده نکنند، در برخی تیم‌ها همه این مراحل چهارگانه را داشته باشند یا اصلا از این مرحله‌بندی‌ها استفاده نکنند. پس این روش توسعه نرم‌افزار، در هر محیط می‌تواند شکل تازه‌ای به خود بگیرد و در همه‌جا، دقیقا به یک شکل اجرا نمی‌شود.</span></p>



<p><span style="font-weight: 400;">با وجود این، دو بخش مهم و کلیدی CI/CD، دو عامل یکپارچه‌سازی و Deployment هستند. بنابراین برای اینکه بگوییم یک تیم یا نرم‌افزار از روشCI/CD استفاده کرده‌اند، باید حتما کدها به‌صورت مستمر و مداوم، در یک ریپازیتوری راه دور ثبت شده و این کدها باید به‌صورت دائم و پس از هر یکپارچه‌سازی، در محیط اصلی اجرا شده باشند. حالا و پس از این توضیحات، یک سوال مهم دیگر هم ایجاد می‌شود:</span></p>



<h2 class="wp-block-heading" id="h-تفاوت-میان-ci-و-cd-چیست"><strong class="global-rtl">تفاوت میان CI</strong><strong> و </strong><strong class="global-rtl">CD چیست؟</strong></h2>



<p><span style="font-weight: 400;">یکپارچه‌سازی مداوم یا همان CI، شامل این بخش بسیار ساده و در عین حال خیلی مهم است که هر توسعه‌دهنده پس از ایجاد هر تغییر خیلی کوچک و جزئی در کدهای خود، تغییرات انجام شده را به کدهای اصلی اضافه کند. با توجه به حجم نیازمندی‌های این کار و تعداد گام‌هایی که در این حالت ایجاد می‌شوند، فرآیند یکپارچه‌سازی مداوم در مدل CI باعث می‌شود که تیم‌ها با خیال راحت کارهای ساخت، تست و جمع‌بندی نرم‌افزارهای خود را به‌صورت مستمر و به شکلی کاملا تضمین شده و اتوماتیک، انجام دهند.</span></p>



<p><span style="font-weight: 400;">CI به ساده‌شدن فرآیند تغییر کدها کمک می‌کند و به همین خاطر، توسعه‌دهنده‌ها با خیال راحت، می‌توانند زمان خود را به بهبود کیفیت نرم‌افزار و ایجاد تغییرات بیشتر، اختصاص دهند.</span></p>



<p><span style="font-weight: 400;">حالا و بعد از این توضیحات، باید بدانیم که تحویل پیوسته یا همان CD دقیقا شامل چه چیزهایی می‌شود. تحویل پیوسته فرآیندی است که از طریق آن، کدهای کامل‌شده به‌صورت کاملا خودکار به محیط‌های مختلف مثل بخش تست یا توسعه، تحویل داده می‌شوند. در واقع CD یک فرآیند مستمر و کاملا خودکار فراهم می‌کند که کدها به هر کدام از محیط‌های تست و توسعه برسند.</span></p>



<p><span style="font-weight: 400;">«استقرار پیوسته»، مرحله بعد از تحویل پیوسته است. هر تغییری که با موفقیت از بخش تست‌های خودکار گذر کند، به‌صورت اتوماتیک در بخش اجرایی نرم‌افزار جای‌گذاری خواهد شد و این فرآیند پیوسته و همیشگی، استقرار پیوسته را به وجود می‌آورد. سازمان‌هایی که تحت نظارت رگولاتوری یا دیگر سازمان‌های کنترل کیفی نیستند، باید تحویل پیوسته را به‌عنوان هدف اصلی و مهم سازمان خود در نظر بگیرند.</span></p>



<p><span style="font-weight: 400;">به‌صورت ساده و خلاصه باید بگوییم که CI مجموعه فعالیت‌هایی است که توسعه دهندگان در زمان نوشتن کدها، آن‌ها را انجام می‌دهند و CD، مجوعه فعالیت‌هایی است که بعد از اینکه کد کامل شد، به‌صورت خودکار اجرا خواهند شد.</span></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="482" src="https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Pipeline-1024x482.webp" alt="پایپ لاین CI/CD" class="wp-image-3882" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Pipeline-1024x482.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Pipeline-300x141.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Pipeline-768x362.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Pipeline-1536x724.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Pipeline-2048x965.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="h-پایپ-لاین-ci-cd-چیست"><strong>پایپ‌لاین CI/CD چیست؟</strong></h2>



<p><span style="font-weight: 400;">یک پایپ‌لاین CI/CD، فرآیند تحویل نرم‌افزارتان را به‌صورت اتوماتیک اجرا می‌کند. پایپ‌لاین کدها را می‌سازد و تست‌ها را اجرا می‌کند (CI)، و به‌صورت کاملا امن یک نسخه جدیدی از اپلیکیشن را منتشر می‌کند (CD).</span></p>



<p><span style="font-weight: 400;">پایپ‌لاین‌های خودکار می‌توانند خطاهای انسانی را از بین ببرند، چرخه‌های بازخورد استانداردشده در اختیار توسعه‌دهندگان بگذارند و فرآیند مداوم بررسی کیفیت محصول را سرعت ببخشند.</span></p>



<h2 class="wp-block-heading" id="h-مزایای-ci-cd-چیست"><strong>مزایای CI/CD چیست؟</strong></h2>



<p><span style="font-weight: 400;">به‌صورت کلی، CI/CD این مزایا را دارد:</span></p>



<ul class="wp-block-list">
<li><span style="font-weight: 400;">تست‌های خودکار، امکان تحویل پیوسته را فراهم می‌کند که با وجود این قابلیت فوق‌العاده، کیفیت بالای نرم‌افزار، امنیت و افزایش سوددهی کدها در مسیر تولید، تضمین می‌شوند.</span></li>



<li><span style="font-weight: 400;">پایپ‌لاین‌های CI/CD باعث معرفی و بازاریابی بسیار سریع‌تر محصولات جدید شده، تجربه بسیار بهتری در اختیار کاربران نهایی می‌گذارد و بخش مهمی از فشار کاری بر دوش توسعه‌دهنده را از بین می‌برد.</span></li>



<li><span style="font-weight: 400;">افزایش فوق‌العاده سرعت ساخت با استفاده از پایپ‌لاین CI/CD، سرعت تحویل محصول به مشتری را افزایش داده و قابلیت‌های رقابتی سازمان‌ها را نیز بهبود می‌بخشد.</span></li>



<li><span style="font-weight: 400;">اتوماتیک‌بودن بخش اعظم کارها باعث می‌شود که اعضای تیم توسعه‌دهنده، زمان بیشتری در اختیار داشته باشند و این زمان را به ساخت قابلیت‌های متنوع و کدنویسی اختصاص دهند.</span></li>



<li><span style="font-weight: 400;">سازمان‌های دارای پایپ‌لاین CI/CD موفق، می‌توانند نیروهای بااستعداد و آماده‌ای را جذب کنند. با دور شدن سازمان‌ها از مدل سنتی آبشاری، مهندس‌ها و توسعه‌دهنده‌ها، دیگر درگیر فعالیت‌های تکراری که غالبا اتمام آن به تمام‌شدن دیگر بخش‌های بستگی دارد، نشده و می‌توانند به‌سرعت پیشرفت کنند.</span></li>
</ul>



<h2 class="wp-block-heading" id="h-ci-cd-و-دواپس"><strong>CI/CD و دواپس</strong></h2>



<p><span style="font-weight: 400;"><a href="https://hamravesh.com/blog/what-is-devops/">DevOps</a> مجموعه‌ای از فعالیت‌ها است که هدف آن این است که به سازمان‌ها کمک کند تا بتوانند سریع‌تر از حالت سنتی، نرم‌افزارها و سرویس‌های مختلف را تولید کنند. سازمان‌ها پس از استفاده از دواپس، می‌توانند خیلی سریع‌تر و بهتر به مشتریان خود سرویس داده و بهتر از همیشه در بازار رقابتی فعالیت کنند. در محیط DevOps، سازمان‌های موفق در همه فازهای فعالیت خود، امنیت را در هر کدام از چرخه‌های حیات توسعه نرم‌افزار در نظر می‌گیرند و به این روش کاری آن‌ها، DevSecOps می‌گویند.</span><span style="font-weight: 400;"></span></p>



<p><span style="font-weight: 400;">نکته کلیدی <strong><a href="https://hamravesh.com/blog/what-is-devsecops/">DevSecOps</a></strong> این است که در همه فازهای ساخت نرم‌افزار، امنیت به‌صورت یکپارچه با سایر بخش‌ها ادغام می‌شود. با اجرای فعالیت‌های امنیتی در همان فازهای اولیه پس از ساخت هر بخش از نرم‌افزار و به‌صورت مستمر، سازمان‌ها می‌توانند با قابلیت اطمینان بالایی بخش‌های آسیب‌پذیر محصول خود را در سریع‌ترین زمان ممکن بیابند. به این شکل می‌توانند به‌سرعت تصمیم‌گیری کرده و میزان خطای نرم‌افزار خود را به شکل قابل توجهی کاهش دهند.</span></p>



<p><span style="font-weight: 400;">بررسی امنیت نرم‌افزار در حالت‌های سنتی، تنها در زمان استقرار محصول نهایی انجام می‌شد. روش قدیمی در حال حاضر، قابلیت رقابت با رویکرد DevOps را ندارد و نمی‌تواند خود را با سرعت و چابکی این روش، مطابقت دهد.</span></p>



<p><span class="global-rtl" style="font-weight: 400;">در حال حاضر ابزارهای امنیتی باید به‌صورت کامل و دقیق در جریان کاری توسعه‌دهنده‌ها و پایپ‌لاین CI/CD ادغام شوند تا بتوانند با دوآپس هماهنگ شده و سرعت توسعه نرم‌افزار را کاهش ندهند.</span></p>



<p><span style="font-weight: 400;">پایپ‌لاین CI/CD یک بخش کوچک از فریم‌ورک DevOps/DevSecOps است. برای اجرای موفق پایپ‌لاین CI/CD، سازمان‌ها به ابزارهای مختلفی نیاز دارند تا با استفاده از آن ابزارها، بتوانند از ایجاد نقاط اصطکاک جلوگیری کرده و موانع مختلف در مسیر یکپارچه‌سازی و تحویل محصول نهایی را از بین ببرند. برای رسیدن به این هدف، تیم‌ها به زنجیره‌ای از ابزارها و تکنولوژی‌های مختلف نیاز دارند تا توسعه مبتنی بر همکاری و بدون موانع مختلف برای آن‌ها تسهیل شود و بتوانند به‌راحتی فرآیند توسعه را دنبال کنند.</span></p>



<h2 class="wp-block-heading" id="h-ابزارهای-ci-cd">ابزارهای CI/CD</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="482" src="https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Tools-1024x482.webp" alt="ابزارهای CI/CD" class="wp-image-3883" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Tools-1024x482.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Tools-300x141.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Tools-768x362.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Tools-1536x724.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/10/CI-CD-Tools-2048x965.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>برای پیاده‌سازی و استفاده بهینه از CI/CD ابزارهای مختلفی ساخته شده است. این ابزارها در خودکارسازی فرایندها، پیاده‌سازی درست پایپ‌لاین CI/CD، ادغام و یکپارچه‌سازی با ابزارهای مختلف و&#8230; به شما کمک می‌کنند. در ادامه ۳ مورد از محبوب‌ترین ابزارهای CI/CD معرفی شده است:</p>



<h3 class="wp-block-heading">۱. <strong>Jenkins</strong></h3>



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



<p><strong>ویژگی‌ها:</strong></p>



<ul class="wp-block-list">
<li>متن‌باز و رایگان</li>



<li>دارای بیش از ۱۰۰۰ پلاگین برای انواع وظایف</li>



<li>قابل یکپارچه‌سازی با ابزارهای متنوع</li>
</ul>



<h3 class="wp-block-heading">۲. <strong>GitLab CI/CD</strong></h3>



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



<p><strong>ویژگی‌ها:</strong></p>



<ul class="wp-block-list">
<li>یکپارچه با GitLab (کنترل نسخه، مدیریت پروژه)</li>



<li>قابلیت پیاده‌سازی در محیط‌های مختلف (ابری، محلی)</li>



<li>پشتیبانی از pipeline‌های سفارشی</li>
</ul>



<h3 class="wp-block-heading">۳. <strong>CircleCI</strong></h3>



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



<p><strong>ویژگی‌ها:</strong></p>



<ul class="wp-block-list">
<li>سرعت بالا در اجرای pipeline‌ها</li>



<li>ادغام آسان با GitHub و Bitbucket</li>



<li>پشتیبانی از انواع زبان‌های برنامه‌نویسی</li>
</ul>



<p>برای آشنایی با ابزارهای بیشتر می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/cicd-tools-for-kubernetes/">آشنایی با ۷ ابزار CI/CD در کوبرنتیز</a></strong>» را مطالعه کنید. </p>



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



<p>CI/CD یکی از رویکردهای مدرن در دنیای توسعه و استقرار نرم افزار بوده و بسیاری از شرکت‌های دنیا از این رویکرد برای ساخت محصولات‌شان استفاده می‌کنند. به همین دلیل در این مطلب از وبلاگ هم‌روش سعی کردیم تا شما را با چیستی CI/CD، عملکرد، مزایا و&#8230; آن آشنا شویم. حتما در آینده کاری خود روی یادگیری کامل CI/CD سرمایه‌گذاری کنید. </p>



<p>برای استفاده از قابلیت‌های CI/CD در کنسول هم‌روش می‌توانید <strong><a href="https://docs.hamravesh.com/darkube/ci-cd/github-actions/" target="_blank" rel="noreferrer noopener">راهنمای استفاده از Github Actions</a> </strong>در مستندات هم‌روش را مطالعه کنید. </p>
<p>The post <a href="https://hamravesh.com/blog/what-is-ci-cd/">CI/CD چیست؟ راهنمای جامع مفاهیم، کاربردها و مزایا</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-ci-cd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>قواعد مانیتورینگ در دنیای میکروسرویس‌ها</title>
		<link>https://hamravesh.com/blog/microservice-monitoring/</link>
					<comments>https://hamravesh.com/blog/microservice-monitoring/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Mon, 14 Oct 2024 07:36:02 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3677</guid>

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



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



<h2 class="wp-block-heading" id="h-۱-کانتینرها-و-محتویات-آن-را-مانیتور-کنید">۱. کانتینرها و محتویات آن را مانیتور کنید</h2>



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



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



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



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



<li><strong>مدیریت منابع بهینه</strong>: کانتینرها منابع محدودی مانند حافظه و پردازنده دارند. مانیتورینگ مداوم استفاده از این منابع در هر کانتینر به مدیران سیستم کمک می‌کند تا از مصرف بهینه منابع اطمینان حاصل کنند و از بروز مشکلاتی مانند OOM (Out Of Memory) یا سربار زیاد جلوگیری کنند.</li>



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



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="888" height="465" src="https://hamravesh.com/blog/wp-content/uploads/2024/10/Container_Performance.webp" alt="پرفورمنس کانتینر و بهینه‌سازی آن" class="wp-image-3813" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/10/Container_Performance.webp 888w, https://hamravesh.com/blog/wp-content/uploads/2024/10/Container_Performance-300x157.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/10/Container_Performance-768x402.webp 768w" sizes="auto, (max-width: 888px) 100vw, 888px" /></figure>



<h2 class="wp-block-heading" id="h-۲-هشدار-روی-پرفورمنس-سرویس-نه-پرفورمنس-کانتینر">۲. هشدار روی پرفورمنس سرویس نه پرفورمنس کانتینر</h2>



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



<h3 class="wp-block-heading" id="h-1-عملکرد-سرویس-service-performance">1. <strong>عملکرد سرویس (Service Performance)</strong></h3>



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



<ul class="wp-block-list">
<li><strong>زمان پاسخ‌دهی (Response Time):</strong> مدت زمانی که طول می‌کشد تا یک سرویس به درخواست کاربر پاسخ دهد.</li>



<li><strong>نرخ درخواست‌های موفق (Success Rate):</strong> درصد درخواست‌هایی که با موفقیت پردازش شده‌اند.</li>



<li><strong>زمان آپ‌تایم (Uptime):</strong> میزان در دسترس بودن سرویس برای کاربران.</li>



<li><strong>SLA و SLO:</strong> تضمین سطح خدماتی که برای سرویس‌ها مشخص شده‌اند.</li>
</ul>



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



<h3 class="wp-block-heading" id="h-۲-عملکرد-کانتینر-container-performance">۲. <strong>عملکرد کانتینر (Container Performance)</strong></h3>



<p>کانتینرها بخش‌های زیرساختی کوچکتری هستند که سرویس‌ها را میزبانی می‌کنند. معیارهایی که در سطح کانتینر نظارت می‌شوند شامل مواردی مثل:</p>



<ul class="wp-block-list">
<li><strong>استفاده از CPU و حافظه:</strong> میزان استفاده کانتینر از منابع سیستم.</li>



<li><strong>وضعیت کانتینر (Container Status):</strong> آیا کانتینر فعال است یا نه.</li>



<li><strong>متریک‌های شبکه و I/O:</strong> عملکرد شبکه و دیسک کانتینر.</li>
</ul>



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



<h2 class="wp-block-heading" id="h-۳-سرویس-هایی-که-elastic-و-multi-location-هستند-را-مانیتور-کنید">۳. سرویس‌هایی که Elastic و Multi-Location هستند را مانیتور کنید</h2>



<p>مانیتورینگ میکروسرویس‌ها به دو ویژگی اصلی سرویس‌ها در معماری‌های مدرن اشاره دارد: <strong>الستیک بودن (Elasticity)</strong> و <strong>چندمکانی بودن (Multi-location)</strong>. هر یک از این ویژگی‌ها نیاز به مانیتورینگ خاص و روش‌های ویژه‌ای برای نظارت دارند. در ادامه به‌صورت جداگانه با هرکدام از این موارد آشنا خواهیم شد:</p>



<h3 class="wp-block-heading" id="h-1-الاستیک-بودن-elasticity">1. <strong>الاستیک بودن (Elasticity)</strong></h3>



<p>الاستیک بودن به توانایی سرویس‌ها برای مقیاس‌پذیری خودکار اشاره دارد. در محیط‌های میکروسرویس و کانتینری، به‌ویژه زمانی که از زیرساخت‌های ابری یا <strong><a href="https://hamravesh.com/managed-kubernetes?utm_source=blog&amp;utm_medium=blog&amp;utm_campaign=managed-kubernetes">کوبرنتیز (Kubernetes)</a></strong> استفاده می‌شود، سرویس‌ها می‌توانند به‌طور خودکار بر اساس تقاضا بزرگ‌تر یا کوچک‌تر شوند. به عنوان مثال:</p>



<ul class="wp-block-list">
<li>اگر تعداد درخواست‌ها افزایش یابد، سرویس می‌تواند به‌طور خودکار چندین نمونه (instance) از خودش را اجرا کند.</li>



<li>در زمان کاهش درخواست‌ها، تعداد این نمونه‌ها کاهش پیدا می‌کند تا منابع بهینه استفاده شوند.</li>
</ul>



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



<h3 class="wp-block-heading" id="h-2-چندمکانی-بودن-multi-location">2. <strong>چندمکانی بودن (Multi-location)</strong></h3>



<p>در معماری‌های مدرن، سرویس‌ها معمولاً در چندین مکان جغرافیایی یا دیتاسنتر مختلف مستقر هستند تا توانایی دسترسی بالاتر و پایداری بیشتری داشته باشند. به این معنا که یک سرویس ممکن است به‌طور همزمان در دیتاسنترهای مختلف یا مناطق مختلف ابری (Cloud Regions) مستقر باشد. هدف از چندمکانی بودن سرویس‌ها:</p>



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



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



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



<h2 class="wp-block-heading" id="h-۴-مانیتورینگ-جامع-end-to-end-monitoring">۴. <strong>مانیتورینگ جامع (End-to-End Monitoring)</strong></h2>



<p>یکی از اصول حیاتی در مانیتورینگ میکروسرویس‌ها، نظارت بر کل زنجیره سرویس‌ها است. باید بتوان عملکرد هر میکروسرویس را از نقطه آغاز تا انتها تحت نظر گرفت. این کار به ویژه زمانی اهمیت پیدا می‌کند که چندین میکروسرویس به صورت متوالی برای اجرای یک فرآیند با هم در تعامل هستند. در اینجا استفاده از ابزارهایی مانند <strong><a href="https://aws.amazon.com/what-is/distributed-tracing">distributed tracing</a></strong> به ما کمک می‌کند تا جریان درخواست‌ها را در طول سرویس‌ها پیگیری کنیم.</p>



<h3 class="wp-block-heading" id="h-ویژگی-های-کلیدی-مانیتورینگ-جامع-در-میکروسرویس-ها">ویژگی‌های کلیدی مانیتورینگ جامع در میکروسرویس‌ها</h3>



<ol class="wp-block-list">
<li><strong>مانیتورینگ سرویس‌های فردی:</strong> هر میکروسرویس به‌صورت جداگانه نظارت می‌شود تا بتوان معیارهایی مانند زمان پاسخ، مصرف منابع (CPU، حافظه)، خطاها و مشکلات احتمالی را بررسی کرد.</li>



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



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



<li><strong>مانیتورینگ سیستم‌های زیرساختی:</strong> پایش عملکرد زیرساخت‌هایی که میکروسرویس‌ها بر روی آن‌ها اجرا می‌شوند، مانند سرورها، کانتینرها، و ابزارهای <strong><a href="https://hamravesh.com/blog/what-is-orchestration/">ارکستریشن</a></strong>.</li>
</ol>



<h2 class="wp-block-heading" id="h-۵-مانیتورینگ-و-ساختار-سازمانی">۵. مانیتورینگ و ساختار سازمانی</h2>



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



<h3 class="wp-block-heading">هدف از این کار چیست؟</h3>



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



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



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



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



<h3 class="wp-block-heading">چگونه این هماهنگی را ایجاد کنیم؟</h3>



<ol class="wp-block-list">
<li><strong>شناسایی بخش‌های کلیدی سازمان:</strong> ابتدا باید ساختار سازمانی خود را مشخص کنید و تعیین کنید که هر بخش یا تیم مسئول کدام سرویس‌ها یا سیستم‌ها است. برای مثال، در یک سازمان مبتنی بر میکروسرویس، ممکن است تیم‌های مختلفی برای توسعه، عملیات، پشتیبانی، و امنیت وجود داشته باشند که هر کدام بخش‌های خاصی از سیستم را مدیریت می‌کنند.</li>



<li><strong>تخصیص مسئولیت‌های مانیتورینگ:</strong> هر تیم باید مسئول مانیتورینگ بخشی از سیستم باشد که با مسئولیت‌های روزمره آن تیم هم‌راستا است. </li>



<li><strong>ایجاد داشبوردهای مرتبط:</strong> هر تیم باید به داشبوردهای مانیتورینگ مرتبط با وظایف خود دسترسی داشته باشد. برای مثال، تیم توسعه ممکن است داشبوردی داشته باشد که فقط وضعیت سرویس‌های خاصی را نمایش می‌دهد، در حالی که تیم امنیت داشبوردی دارد که فعالیت‌های غیرمعمول را رصد می‌کند.</li>



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



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



<p>مانیتورینگ در دنیای میکروسرویس‌ها یک چالش پیچیده است که نیازمند رعایت اصول و قواعد خاصی است. از مانیتورینگ متریک‌ها و لاگ‌ها گرفته تا نظارت بر سلامت و هشدارها، هر کدام از این اقدامات در بهبود کارایی، تشخیص زودهنگام مشکلات و اطمینان از عملکرد صحیح سیستم نقش حیاتی دارند. با بهره‌گیری از ابزارهای مناسب و رویکردهای جامع، می‌توان به طور موثر مانیتورینگ میکروسرویس‌ها را انجام داد و از پایداری و کارایی سیستم اطمینان حاصل کرد.</p>
<p>The post <a href="https://hamravesh.com/blog/microservice-monitoring/">قواعد مانیتورینگ در دنیای میکروسرویس‌ها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/microservice-monitoring/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CaaS یا Container as a Service چیست؟</title>
		<link>https://hamravesh.com/blog/what-is-caas/</link>
					<comments>https://hamravesh.com/blog/what-is-caas/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sat, 12 Oct 2024 10:15:26 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3757</guid>

					<description><![CDATA[<p>CaaS یا Container as a Service یک سرویس ابری است که به توسعه‌دهندگان اجازه توسعه، استقرار و دیپلوی اپلیکیشن‌های کانتینرایز شده را می‌دهد. این سرویس روی قابل حمل بودن و مقیاس‌پذیری راحت نرم‌افزارها تمرکز دارد. اپلیکیشن‌های کانتینرایز شده به برنامه‌ها یا سرویس‌هایی اشاره دارند که در یک محیط ایزوله و مستقل به نام «کانتینر» اجرا [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-caas/">CaaS یا Container as a Service چیست؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>CaaS یا Container as a Service یک سرویس ابری است که به توسعه‌دهندگان اجازه توسعه، استقرار و دیپلوی <strong>اپلیکیشن‌های کانتینرایز شده</strong> را می‌دهد. این سرویس روی قابل حمل بودن و مقیاس‌پذیری راحت نرم‌افزارها تمرکز دارد. </p>



<p>اپلیکیشن‌های کانتینرایز شده به برنامه‌ها یا سرویس‌هایی اشاره دارند که در یک محیط ایزوله و مستقل به نام «<strong><a href="https://hamravesh.com/blog/what-is-container/">کانتینر</a></strong>» اجرا می‌شوند. کانتینر یک بسته‌بندی استاندارد است که شامل تمام ملزومات مورد نیاز اپلیکیشن مانند کدها، کتابخانه‌ها، وابستگی‌ها و تنظیمات می‌شود. هدف اصلی کانتینرایز کردن اپلیکیشن‌ها این است که آن‌ها بتوانند به صورت پایدار و مستقل از محیط میزبانی (مانند سیستم‌عامل) اجرا شوند.</p>



<p>CaaS در ساختار و دنیای پردازش ابری، بین IaaS (Infrastructure as a Service) و PaaS (Platform as a Service) قرار دارد. CaaS به کاربران اجازه می‌دهد تا با استفاده از زیرساخت‌های ابری (مانند IaaS) کانتینرهای نرم‌افزاری را اجرا و مدیریت کنند. در CaaS، برخلاف PaaS که مدیریت سیستم‌عامل و محیط اجرایی اپلیکیشن را به عهده می‌گیرد، کاربر، مسئول تنظیم و کنترل کانتینرها است، اما همچنان زیرساخت فیزیکی و مجازی توسط ارائه‌دهنده ابری مدیریت می‌شود. به این ترتیب، CaaS به توسعه‌دهندگان اجازه می‌دهد تا محیط اجرای برنامه‌های خود را دقیقاً مطابق نیازشان کانتینرایز و مدیریت کنند، بدون نیاز به مدیریت کامل زیرساخت (همانند IaaS) و یا محدودیت‌های یک محیط کاملاً مدیریت‌شده (مانند PaaS).</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="830" height="285" src="https://hamravesh.com/blog/wp-content/uploads/2024/09/cloud-service-models-apps.webp" alt="جایگاه CaaS بین IaaS و PaaS" class="wp-image-3759" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/09/cloud-service-models-apps.webp 830w, https://hamravesh.com/blog/wp-content/uploads/2024/09/cloud-service-models-apps-300x103.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/09/cloud-service-models-apps-768x264.webp 768w" sizes="auto, (max-width: 830px) 100vw, 830px" /></figure>



<h2 class="wp-block-heading" id="h-ویژگی-های-caas">ویژگی‌های CaaS</h2>



<p>Containers as a Service (CaaS) یک پلتفرم ابری ارائه می‌دهد که کاربران می‌توانند با استفاده از آن فرآیندهای مجازی‌سازی مبتنی بر کانتینر و مدیریت کانتینرها را بهینه‌سازی کنند. ارائه‌دهندگان CaaS امکانات گسترده‌ای را فراهم می‌کنند که شامل مواردی مانند محیط‌های اجرایی کانتینر، لایه‌های <strong><a href="https://hamravesh.com/blog/what-is-orchestration/">ارکستریشن</a></strong> و مدیریت ذخیره‌سازی پایدار می‌شود. همچنین، CaaS دارای قابلیت‌های یکپارچه‌سازی منحصر به فردی است که به کسب‌وکارها کمک می‌کند تا زیرساخت‌های IT خود را بهینه کنند.</p>



<p>ویژگی‌های اصلی CaaS شامل موارد زیر است:</p>



<ul class="wp-block-list">
<li>کانتینری‌سازی</li>



<li>ارکستریشن کانتینرها</li>



<li>شبکه‌سازی</li>



<li>پیکربندی پلتفرم</li>



<li>امنیت و کنترل دسترسی</li>



<li>یکپارچگی با سایر سرویس‌ها</li>
</ul>



<h2 class="wp-block-heading" id="h-مزایا-caas-به-نسبت-paas">مزایا CaaS به نسبت PaaS</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="585" src="https://hamravesh.com/blog/wp-content/uploads/2024/09/CaaS-VS-PaaS-1024x585.webp" alt="CaaS در مقابل PaaS" class="wp-image-3760" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/09/CaaS-VS-PaaS-1024x585.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/09/CaaS-VS-PaaS-300x171.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/09/CaaS-VS-PaaS-768x439.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/09/CaaS-VS-PaaS-1536x878.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/09/CaaS-VS-PaaS.webp 1792w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>CaaS (Container as a Service) نسبت به PaaS (Platform as a Service) مزایای متعددی دارد که باعث می‌شود در برخی سناریوها انتخاب بهتری برای توسعه‌دهندگان و کسب‌وکارها باشد. در ادامه، به برخی از مهم‌ترین مزایای CaaS نسبت به PaaS اشاره می‌شود:</p>



<h3 class="wp-block-heading">1. <strong>کنترل بیشتر روی زیرساخت</strong></h3>



<p>در CaaS، کاربران کنترل بیشتری بر محیط کانتینری و زیرساخت دارند. برخلاف PaaS که بسیاری از جزئیات محیط زیرساخت را پنهان می‌کند و تنظیمات پیش‌فرض ارائه می‌دهد، در CaaS کاربران می‌توانند نحوه استقرار، پیکربندی و مدیریت کانتینرها را به دلخواه تنظیم کنند. این سطح از کنترل برای پروژه‌های پیچیده و سفارشی مفید است.</p>



<h3 class="wp-block-heading">2. <strong>انعطاف‌پذیری بالاتر</strong></h3>



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



<h3 class="wp-block-heading">3. <strong>پرتابل بودن کانتینرها</strong></h3>



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



<h3 class="wp-block-heading">4. <strong>مدیریت بهینه منابع</strong></h3>



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



<h3 class="wp-block-heading">5. <strong>پشتیبانی از معماری‌های پیچیده و چندلایه</strong></h3>



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



<h2 class="wp-block-heading" id="h-کاربردهای-caas-در-توسعه-پروژه-ها">کاربردهای CaaS در توسعه پروژه‌ها</h2>



<p>CaaS (Container as a Service) در توسعه پروژه‌ها کاربردهای گسترده‌ای دارد که به دلیل انعطاف‌پذیری، مقیاس‌پذیری و سادگی مدیریت کانتینرها بسیار مورد توجه قرار گرفته است. در ادامه به برخی از مهم‌ترین کاربردهای CaaS در توسعه پروژه‌ها اشاره می‌شود:</p>



<h3 class="wp-block-heading">1. <strong>پشتیبانی از DevOps و CI/CD</strong></h3>



<p>CaaS یکی از مهم‌ترین ابزارها برای تیم‌های DevOps محسوب می‌شود. کانتینرها به توسعه‌دهندگان اجازه می‌دهند تا محیط توسعه و تولید یکسانی داشته باشند، که این امر از بروز مشکلات ناشی از ناسازگاری محیط‌ها جلوگیری می‌کند. همچنین، CaaS به طور کامل از فرآیندهای CI/CD (یکپارچه‌سازی و تحویل مستمر) پشتیبانی می‌کند و به توسعه‌دهندگان امکان می‌دهد تغییرات کد را به سرعت تست و مستقر کنند.</p>



<h3 class="wp-block-heading">2. <strong>مقیاس‌پذیری پویا</strong></h3>



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



<h3 class="wp-block-heading">3. <strong>یکپارچگی با محیط‌های چند ابری و هیبریدی</strong></h3>



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



<h3 class="wp-block-heading">4. <strong>مدیریت ساده‌تر زیرساخت</strong></h3>



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



<h3 class="wp-block-heading">5. <strong>بهبود چرخه توسعه و تست</strong></h3>



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



<h3 class="wp-block-heading">6. <strong>پشتیبانی از میکروسرویس‌ها</strong></h3>



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



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



<p>در ساختار پلتفرم‌ها و سرویس‌های ابری، CaaS یکی از کاربردی‌ترین و مفید‌ترین سرویس‌ها برای توسعه‌دهندگان و تیم‌های برنامه‌نویسی مختلف است. البته این نکته را در نظر داشته باشید که CaaS می‌تواند مشکلاتی نیز داشته باشد. پیچیدگی در مدیریت زیرساخت، کنترل محدود، نیاز به تخصص فنی بیشتر و&#8230; از جمله این مشکلات هستند. اما همه پلتفرم‌ها و سرویس‌ها معایب و مزایایی دارند که با بررسی و مقایسه کامل می‌توانید به این نتیجه برسید که بهترین مورد برای شما کدام است. </p>
<p>The post <a href="https://hamravesh.com/blog/what-is-caas/">CaaS یا Container as a Service چیست؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-caas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آیا کسب‌وکارها به DevOps نیاز دارند؟</title>
		<link>https://hamravesh.com/blog/why-businesses-need-devops/</link>
					<comments>https://hamravesh.com/blog/why-businesses-need-devops/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Thu, 03 Oct 2024 09:04:57 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3297</guid>

					<description><![CDATA[<p>با وجود تمام مزایا و چالش‌هایی که DevOps دارد، آیا کسب‌وکارها به دوآپس نیاز خواهند داشت؟ در این مطلب به بررسی این موارد خواهیم پرداخت.</p>
<p>The post <a href="https://hamravesh.com/blog/why-businesses-need-devops/">آیا کسب‌وکارها به DevOps نیاز دارند؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>DevOps یکی از مفاهیم نوظهور در دنیای فناوری اطلاعات است که اهمیت زیادی در دگرگون‌سازی فرایند توسعه اپلیکیشن‌ها دارد. این رویکرد نه تنها به بهبود فرآیندهای توسعه و عملیات نرم‌افزاری کمک می‌کند، بلکه نقش مهمی در افزایش سرعت و کیفیت ارائه خدمات و محصولات دارد. </p>



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



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



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



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



<p>DevOps یک متدولوژی در توسعه و عملیات نرم‌افزار است که هدف اصلی آن یکپارچه‌سازی تیم‌های توسعه (Development) و عملیات (Operations) به منظور بهبود همکاری، افزایش کارایی و سرعت در ارائه محصولات و خدمات نرم‌افزاری است. این رویکرد با استفاده از ابزارها و فرآیندهای خودکارسازی، تست و مانیتورینگ پیوسته، و فرهنگ همکاری مداوم، سعی در کاهش فاصله میان توسعه‌دهندگان و تیم‌های عملیاتی دارد.</p>



<p>برای اینکه بهتر با چیستی DevOps آشنا شوید پیشنهاد می‌کنیم که مطلب کامل «<strong><a href="https://hamravesh.com/blog/what-is-devops/" target="_blank" rel="noreferrer noopener">دوآپس چیست؟</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-چرا-کسب-وکارها-به-devops-نیاز-دارند">چرا کسب‌وکارها به DevOps نیاز دارند؟</h2>



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


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="909" height="501" src="https://hamravesh.com/blog/wp-content/uploads/2024/07/devops-benefits.webp" alt="فواید دوآپس" class="wp-image-3299" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/07/devops-benefits.webp 909w, https://hamravesh.com/blog/wp-content/uploads/2024/07/devops-benefits-300x165.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/07/devops-benefits-768x423.webp 768w" sizes="auto, (max-width: 909px) 100vw, 909px" /></figure>
</div>


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



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



<li><strong>انعطاف‌پذیری و پاسخگویی به تغییرات</strong>: DevOps به کسب‌وکارها امکان می‌دهد تا به سرعت به تغییرات بازار و نیازهای مشتریان پاسخ دهند. این امر از طریق تکرارهای سریع‌تر و کوتاه‌تر توسعه نرم‌افزار ممکن می‌شود.</li>



<li><strong>همکاری بهتر بین تیم‌ها</strong>: DevOps با ترکیب تیم‌های توسعه (Development) و عملیات (Operations)، همکاری و هماهنگی بین این دو تیم را بهبود می‌بخشد و باعث می‌شود که مسائل و مشکلات به صورت سریع‌تری شناسایی و حل شوند.</li>



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



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



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



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



<h2 class="wp-block-heading" id="h-چالش-ها-devops">چالش‌ها DevOps</h2>



<p>هر رویکرد و هر ابزاری در کنار مزایا و کاربردهایی که ارائه می‌کند، یکسری چالش و شاید عیب داشته باشد. هر چند که در مثال دوآپس این موارد بیشتر چالش بوده نمی‌توان نام عیب روی آن‌ها گذاشت. با در نظر گرفتن این موضوع بیایید با ۵ مورد از اصلی‌ترین چالش‌های DevOps آشنا شویم. </p>



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



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



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



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



<h2 class="wp-block-heading" id="h-مطالعه-موردی-یا-case-study-دوآپس">مطالعه موردی یا Case Study دوآپس</h2>



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



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



<ol class="wp-block-list">
<li><strong>تاخیر در تحویل پروژه‌ها:</strong> فرآیندهای توسعه و استقرار نرم‌افزار بسیار طولانی و پیچیده است.</li>



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



<li><strong>عدم هماهنگی بین تیم‌ها:</strong> تیم‌های توسعه و عملیات به‌صورت جداگانه کار می‌کنند و این باعث افزایش تضادها و مشکلات هماهنگی می‌‌شود.</li>
</ol>



<h3 class="wp-block-heading" id="h-پیاده-سازی-devops">پیاده‌سازی DevOps</h3>



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



<p><strong>مراحل پیاده‌سازی:</strong></p>



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



<li>استفاده از روش‌های توسعه چابک (<strong><a href="https://agilemanifesto.org/" target="_blank" rel="noreferrer noopener">Agile</a></strong>) برای کاهش زمان تحویل پروژه‌ها.</li>



<li>ایجاد یک فرآیند <a href="https://hamravesh.com/blog/what-is-ci-cd/">CI/CD (Continuous Integration/Continuous Deployment)</a> برای خودکارسازی تست و استقرار.</li>
</ul>



<p><strong>ابزارهای مورد نیاز:</strong></p>



<ul class="wp-block-list">
<li><strong>Jenkins:</strong> برای ایجاد و مدیریت فرآیندهای CI/CD.</li>



<li><strong>Docker:</strong> برای ایجاد محیط‌های توسعه و استقرار یکپارچه.</li>



<li><strong><a href="https://hamravesh.com/blog/what-is-kubernetes/">Kubernetes</a>:</strong> برای مدیریت و مقیاس‌پذیری کانتینرها.</li>
</ul>



<h3 class="wp-block-heading" id="h-نتیجه">نتیجه</h3>



<ol class="wp-block-list">
<li><strong>کاهش زمان تحویل پروژه‌ها:</strong> با استفاده از روش‌های توسعه چابک و ابزارهای CI/CD، زمان تحویل پروژه‌ها به‌طور قابل توجهی کاهش می‌یابد.</li>



<li><strong>بهبود کیفیت نرم‌افزار:</strong> تست‌های خودکار و مستمر باعث کاهش باگ‌ها و بهبود کیفیت نرم‌افزار می‌شود.</li>



<li><strong>افزایش همکاری بین تیم‌ها:</strong> جلسات مشترک و فرهنگ همکاری باعث افزایش هماهنگی و کاهش تضادها بین تیم‌های توسعه و عملیات می‌شود.</li>
</ol>



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



<p>استفاده از DevOps برای کسب‌وکارها به ویژه در دنیای رقابتی امروز، می‌تواند مزایای بسیاری به همراه داشته باشد. با وجود چالش‌ها و تغییرات گسترده‌ای که باید اعمال شود، بهره‌گیری از DevOps می‌تواند منجر به بهبود کیفیت نرم‌افزار، کاهش هزینه‌ها و افزایش سرعت و چابکی در فرآیندهای توسعه شود. برای صاحبان کسب‌وکار و مدیران IT، ارزیابی دقیق و برنامه‌ریزی مناسب برای پیاده‌سازی دوآپس می‌تواند بهره‌وری و سودآوری را بهبود بخشد.</p>
<p>The post <a href="https://hamravesh.com/blog/why-businesses-need-devops/">آیا کسب‌وکارها به DevOps نیاز دارند؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/why-businesses-need-devops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>۸ اشتباه مرسوم در پیاده‌سازی DevOps و راهکارها</title>
		<link>https://hamravesh.com/blog/8-devops-mistakes/</link>
					<comments>https://hamravesh.com/blog/8-devops-mistakes/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sat, 21 Sep 2024 07:06:08 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3527</guid>

					<description><![CDATA[<p>در این مطلب به بررسی ۸ اشتباه مرسوم می‌پردازیم که در فرایند پیاده‌سازی DevOps بوجود خواهد آمد. همچنین برای هر کدام از این موارد راهکارهای کاملی نیز ارائه خواهیم کرد.</p>
<p>The post <a href="https://hamravesh.com/blog/8-devops-mistakes/">۸ اشتباه مرسوم در پیاده‌سازی DevOps و راهکارها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>DevOps به عنوان یک فرهنگ و رویکرد جدید در توسعه نرم‌افزار، اهمیت بسیاری در بهبود کارایی و سرعت ارائه نرم‌افزارها دارد. دواپس به تیم‌های توسعه و عملیات اجازه می‌دهد که به صورت یکپارچه و هماهنگ با یکدیگر کار کنند. این موضوع منجر به کاهش چرخه‌های توسعه، بهبود کیفیت نرم‌افزار و افزایش توانایی برای ارائه سریع‌تر ویژگی‌ها و رفع مشکلات می‌شود.</p>



<p>دلیل اصلی مهاجرت شرکت‌ها به <strong><a href="https://hamravesh.com/blog/what-is-devops/">DevOps</a></strong>، نیاز به پاسخگویی سریع‌تر به تغییرات بازار و درخواست‌های کاربران است. در یک دنیای دیجیتال که نیازها و انتظارات کاربران به سرعت تغییر می‌کند، شرکت‌ها باید توانایی ارائه به‌روزرسانی‌ها و ویژگی‌های جدید را در کوتاه‌ترین زمان ممکن داشته باشند. DevOps این امکان را فراهم می‌کند که با خودکارسازی فرآیندها، کاهش خطاهای انسانی، و بهبود همکاری بین تیم‌ها، نرم‌افزارها به صورت مداوم و بدون وقفه بهبود یابند.</p>



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



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



<h2 class="wp-block-heading" id="h-اشتباه-اول-عدم-تغییر-فرهنگ-سازمانی">اشتباه اول: عدم تغییر فرهنگ سازمانی</h2>



<p>عدم تغییر فرهنگ سازمانی یکی از بزرگ‌ترین اشتباهاتی است که سازمان‌ها در هنگام پیاده‌سازی DevOps مرتکب می‌شوند. DevOps تنها مجموعه‌ای از ابزارها یا فناوری‌ها نیست؛ بلکه یک تغییر فرهنگی اساسی است که نیازمند همکاری نزدیک و همگانی بین تیم‌های مختلف، به‌ ویژه تیم‌های <strong>توسعه (Development) و عملیات (Operations)</strong>، است.</p>



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



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



<h3 class="wp-block-heading" id="h-برخی-از-راهکارهای-عملی-برای-ایجاد-تغییر-فرهنگی-شامل">برخی از راهکارهای عملی برای ایجاد تغییر فرهنگی شامل:</h3>



<ol class="wp-block-list">
<li><strong>آموزش و آگاهی‌بخشی:</strong> برگزاری کارگاه‌ها و جلسات آموزشی برای توضیح اهمیت DevOps و فواید همکاری و تعامل بین تیم‌ها.</li>



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



<li><strong>پاداش‌دهی به همکاری:</strong> شناسایی و پاداش‌دهی به تیم‌ها و افرادی که به بهبود همکاری بین تیم‌ها کمک می‌کنند. این کار می‌تواند فرهنگ همکاری و تعامل را تقویت کند.</li>



<li><strong>ایجاد یک فضای باز برای ارتباطات:</strong> فراهم کردن ابزارها و فضاهایی که اعضای تیم‌ها بتوانند به راحتی با هم در ارتباط باشند و اطلاعات و تجربیات خود را به اشتراک بگذارند.</li>
</ol>



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



<h2 class="wp-block-heading" id="h-اشتباه-دوم-تمرکز-بیش-از-حد-بر-خودکارسازی">اشتباه دوم: تمرکز بیش از حد بر خودکارسازی</h2>



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



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



<h3 class="wp-block-heading" id="h-راهکارها-برای-جلوگیری-از-تمرکز-بیش-از-حد-بر-خودکارسازی"><strong>راهکارها برای جلوگیری از تمرکز بیش از حد بر خودکارسازی:</strong></h3>



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



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



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



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



<li><strong>توجه به مقیاس‌پذیری:</strong> خودکارسازی باید به گونه‌ای پیاده‌سازی شود که با رشد سازمان و تغییر نیازها مقیاس‌پذیر باشد. این امر نیازمند برنامه‌ریزی دقیق و تست‌های مستمر است.</li>
</ol>



<h2 class="wp-block-heading" id="h-اشتباه-سوم-نادیده-گرفتن-بحث-امنیت">اشتباه سوم: نادیده گرفتن بحث امنیت</h2>



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



<h3 class="wp-block-heading" id="h-چالش-های-مرتبط-با-نادیده-گرفتن-امنیت-در-devops"><strong>چالش‌های مرتبط با نادیده گرفتن امنیت در DevOps</strong></h3>



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



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



<li><strong>کندی در واکنش به تهدیدات:</strong> عدم ادغام امنیت در چرخه DevOps ممکن است باعث شود تیم‌ها نتوانند به سرعت به تهدیدات امنیتی پاسخ دهند، زیرا فرآیندها و ابزارهای لازم برای این کار در نظر گرفته نشده‌اند.</li>
</ol>



<h3 class="wp-block-heading" id="h-راهکارها-برای-ادغام-امنیت-در-devops"><strong>راهکارها برای ادغام امنیت در DevOps</strong></h3>



<ol class="wp-block-list">
<li><strong>پذیرش <a href="https://hamravesh.com/blog/what-is-devsecops/" target="_blank" rel="noreferrer noopener">DevSecOps</a>:</strong> سازمان‌ها باید به جای رویکرد سنتی DevOps، به سمت DevSecOps حرکت کنند. DevSecOps به معنای ادغام امنیت به عنوان یک جزء اصلی در تمامی مراحل چرخه توسعه نرم‌افزار است. این رویکرد تضمین می‌کند که امنیت به صورت مداوم و از ابتدا تا انتها مورد توجه قرار گیرد.</li>



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



<li><strong>خودکارسازی امنیت:</strong> استفاده از ابزارهای خودکار برای انجام تست‌های امنیتی مانند اسکن‌های امنیتی، تحلیل کد استاتیک، و بررسی‌های امنیتی مداوم می‌تواند به شناسایی و رفع سریع‌تر آسیب‌پذیری‌ها کمک کند. این ابزارها باید به صورت یکپارچه با فرآیندهای CI/CD ادغام شوند.</li>



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



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



<li><strong>مدیریت هویت و دسترسی:</strong> کنترل‌های دقیق برای مدیریت هویت و دسترسی (IAM) باید پیاده‌سازی شود تا اطمینان حاصل شود که فقط افراد مجاز به منابع حساس دسترسی دارند. این کار می‌تواند شامل استفاده از احراز هویت چندمرحله‌ای (MFA)، مدیریت دقیق دسترسی‌ها و نظارت بر دسترسی‌ها باشد.</li>
</ol>



<h2 class="wp-block-heading" id="h-اشتباه-چهارم-نادیده-گرفتن-تیم-های-غیر-فنی">اشتباه چهارم: نادیده گرفتن تیم‌های غیر فنی</h2>



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



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



<h3 class="wp-block-heading" id="h-چالش-های-مرتبط-با-نادیده-گرفتن-تیم-های-غیرفنی"><strong>چالش‌های مرتبط با نادیده گرفتن تیم‌های غیرفنی</strong></h3>



<ol class="wp-block-list">
<li><strong>عدم هماهنگی در اهداف سازمانی:</strong> وقتی تیم‌های غیر فنی در فرآیندهای DevOps در نظر گرفته نمی‌شوند، ممکن است اهداف و استراتژی‌های کلی سازمان با هم هماهنگ نباشند. این امر می‌تواند به ایجاد تفاوت‌های جدی بین انتظارات مشتریان و ویژگی‌های محصول منجر شود.</li>



<li><strong>کاهش نوآوری و خلاقیت:</strong> تیم‌های غیر فنی معمولاً دیدگاه‌ها و ایده‌های متفاوتی دارند که می‌تواند به نوآوری و بهبود محصولات کمک کند. نادیده گرفتن این تیم‌ها می‌تواند باعث کاهش این فرصت‌ها شود.</li>



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



<h3 class="wp-block-heading" id="h-راهکارها-برای-درگیر-کردن-تیم-های-غیرفنی-در-devops"><strong>راهکارها برای درگیر کردن تیم‌های غیرفنی در DevOps</strong></h3>



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



<li><strong>افزایش شفافیت و ارتباطات:</strong> فرآیندهای DevOps باید به گونه‌ای طراحی شوند که تمامی تیم‌ها از جمله تیم‌های غیر فنی به طور مداوم از وضعیت پروژه‌ها، تغییرات، و اهداف مطلع باشند. ابزارهای مدیریت پروژه و ارتباطات داخلی می‌توانند به بهبود شفافیت و ارتباطات کمک کنند.</li>



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



<li><strong>آموزش و آگاهی‌بخشی:</strong> تیم‌های غیر فنی باید درک بهتری از مفاهیم و اهداف DevOps پیدا کنند. ارائه آموزش‌های مناسب و برگزاری جلسات آگاهی‌بخشی می‌تواند به ایجاد این درک کمک کند.</li>
</ol>



<h2 class="wp-block-heading" id="h-اشتباه-پنجم-کار-به-صورت-ریموت">اشتباه پنجم: کار به‌صورت ریموت</h2>



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



<h2 class="wp-block-heading" id="h-چالش-های-کار-به-صورت-دورکاری">چالش‌های کار به‌صورت دورکاری</h2>



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



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



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



<li><strong>کاهش حس هم‌تیمی بودن:</strong> کار از راه دور می‌تواند باعث شود که اعضای تیم حس نزدیکی و هم‌تیمی بودن را از دست بدهند. این کاهش ارتباطات اجتماعی می‌تواند بر روحیه و انگیزه اعضای تیم تاثیر منفی بگذارد و همکاری را کند کند.</li>



<li><strong>مدیریت منابع و وظایف:</strong> هماهنگی و مدیریت وظایف و منابع در محیط کار از راه دور ممکن است پیچیده‌تر باشد. نبود نظارت مستقیم و کاهش شفافیت در فرآیندها می‌تواند به ناهماهنگی و کاهش بهره‌وری منجر شود.</li>
</ol>



<h3 class="wp-block-heading" id="h-راهکارهای-بهبود-همکاری-devops-در-کار-از-راه-دور"><strong>راهکارهای بهبود همکاری DevOps در کار از راه دور</strong></h3>



<ol class="wp-block-list">
<li><strong>استفاده از ابزارهای مناسب:</strong> سازمان‌ها باید از ابزارهای ارتباطی و همکاری مجازی پیشرفته مانند Slack، دیسکورد، Zoom و <a href="https://hamravesh.com/blog/what-is-jira/">Jira</a> استفاده کنند. این ابزارها باید به گونه‌ای انتخاب شوند که نیازهای ارتباطی و همکاری تیم‌های DevOps را به خوبی پوشش دهند.</li>



<li><strong>تشویق به برقراری ارتباطات منظم:</strong> تنظیم جلسات منظم تیمی، مانند جلسات روزانه (Stand-up یا Daily)، برای هماهنگی و تبادل اطلاعات می‌تواند به کاهش فاصله بین اعضای تیم کمک کند. همچنین، اعضای تیم باید تشویق شوند که در صورت نیاز به ارتباطات غیررسمی و فوری از ابزارهای چت استفاده کنند.</li>



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



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



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



<h2 class="wp-block-heading" id="h-اشتباه-ششم-تیم-های-توسعه-dev-و-عملیات-ops-خواسته-های-متفاوتی-دارند">اشتباه ششم: تیم‌های توسعه (Dev) و عملیات (Ops) خواسته‌های متفاوتی دارند</h2>



<p>اگر تیم‌های توسعه (Dev) و عملیات (Ops) خواسته‌های متفاوتی داشته باشند، موانعی در هماهنگی‌ها ایجاد می‌شود. این تضاد در خواسته‌ها و اهداف بین دو تیم می‌تواند به ایجاد مانع در همکاری و کاهش اثربخشی فرآیندهای DevOps نیز منجر شود.</p>



<h3 class="wp-block-heading" id="h-دلایل-تضاد-بین-تیم-های-dev-و-ops"><strong>دلایل تضاد بین تیم‌های Dev و Ops</strong></h3>



<h4 class="wp-block-heading" id="h-اهداف-مختلف"><strong>اهداف مختلف:</strong></h4>



<ul class="wp-block-list">
<li><strong>تیم‌های توسعه (Dev):</strong> هدف اصلی تیم توسعه این است که سریع‌تر ویژگی‌های جدید را ایجاد و به بازار عرضه کند. آنها به دنبال سرعت و نوآوری هستند و تمرکز بیشتری بر ارائه سریع نرم‌افزار دارند.</li>



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



<h4 class="wp-block-heading" id="h-فرآیندهای-متفاوت"><strong>فرآیندهای متفاوت:</strong></h4>



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



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



<h4 class="wp-block-heading" id="h-نگرش-های-متفاوت-به-ریسک"><strong>نگرش‌های متفاوت به ریسک:</strong></h4>



<ul class="wp-block-list">
<li><strong>توسعه:</strong> به طور کلی، تمایل به پذیرش ریسک‌های بیشتری دارند تا بتوانند نوآوری کنند و ویژگی‌های جدید را سریع‌تر عرضه کنند.</li>



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



<h3 class="wp-block-heading" id="h-راهکارهای-رفع-تضاد-بین-تیم-های-dev-و-ops"><strong>راهکارهای رفع تضاد بین تیم‌های Dev و Ops</strong></h3>



<ol class="wp-block-list">
<li><strong>ایجاد اهداف مشترک:</strong> سازمان‌ها باید اهداف مشترکی را تعریف کنند که هر دو تیم توسعه و عملیات در رسیدن به آن‌ها شریک باشند. این اهداف باید بر اساس نیازهای کسب‌وکار تنظیم شده و بر ایجاد تعادل بین سرعت توسعه و پایداری سیستم‌ها تمرکز داشته باشد. برای مثال، اهدافی مانند <strong>کاهش زمان انتشار با حفظ پایداری</strong> یا <strong>بهبود امنیت در حین انتشار ویژگی‌های جدید</strong> می‌توانند به ایجاد انگیزه مشترک کمک کنند.</li>



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



<li><strong>استفاده از روش‌های Agile و DevOps:</strong> ترکیب روش‌های Agile و DevOps می‌تواند به تیم‌ها کمک کند تا فرآیندهای خود را هماهنگ‌تر کنند. برای مثال، استفاده از جیرا برای مدیریت وظایف، به تیم‌ها اجازه می‌دهد که تغییرات را به صورت مداوم و کنترل‌شده پیاده‌سازی و البته پیگیری کنند.</li>



<li><strong>پیاده‌سازی <a href="https://hamravesh.com/blog/what-is-ci-cd/">CI/CD (Continuous Integration/Continuous Deployment)</a>:</strong> پیاده‌سازی فرآیندهای CI/CD به تیم‌ها کمک می‌کند که تغییرات کد را به صورت مداوم و با تست‌های خودکار پیاده‌سازی کنند. این کار باعث می‌شود که تغییرات به سرعت اما با کنترل بیشتر به تولید برسند و از تضاد بین نیازهای سرعت و پایداری کاسته شود.</li>



<li><strong>استفاده از ابزارهای مشترک:</strong> انتخاب و استفاده از ابزارهای مشترک برای <strong><a href="https://hamravesh.com/blog/what-is-monitoring/">مانیتورینگ</a></strong>، تست، و پیاده‌سازی به تیم‌ها کمک می‌کند که بهتر با هم هماهنگ شوند. ابزارهایی که به تیم‌های Dev و Ops اجازه می‌دهد که به داده‌های مشابه دسترسی داشته باشند و از فرآیندهای مشترک استفاده کنند، می‌توانند به کاهش تضادها کمک کنند.</li>
</ol>



<h2 class="wp-block-heading" id="h-اشتباه-هفتم-استفاده-نادرست-از-ابزارها">اشتباه هفتم: استفاده نادرست از ابزارها</h2>



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



<h3 class="wp-block-heading"><strong>مشکلات مرتبط با استفاده نادرست از ابزارها در DevOps:</strong></h3>



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



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



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



<li><strong>عدم هماهنگی بین ابزارها:</strong> اگر ابزارهای مختلف DevOps به درستی با یکدیگر یکپارچه نشوند، ممکن است باعث ایجاد مشکلاتی در هماهنگی بین تیم‌ها و فرآیندها شوند. این عدم هماهنگی می‌تواند به تأخیر در پروژه‌ها و کاهش کیفیت نرم‌افزار منجر شود.</li>



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



<h3 class="wp-block-heading"><strong>راهکارها برای استفاده صحیح از ابزارها در DevOps:</strong></h3>



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



<li><strong>آموزش و توانمندسازی تیم‌ها:</strong> ارائه آموزش‌های لازم به تیم‌ها در مورد استفاده از ابزارهای DevOps ضروری است. این آموزش‌ها باید شامل بهترین شیوه‌ها، نکات کلیدی و راهکارهای عملی برای استفاده بهینه از ابزارها باشد.</li>



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



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



<li><strong>تمرکز بر فرآیندها و فرهنگ:</strong> ابزارها تنها یک بخش از DevOps هستند. سازمان‌ها باید بر بهبود فرآیندها و فرهنگ سازمانی خود نیز تمرکز کنند تا ابزارهای DevOps به درستی در این چارچوب قرار گیرند و به دستیابی به اهداف کمک کنند.</li>



<li><strong>استفاده از رویکرد <a href="https://en.wikipedia.org/wiki/Toolchain#:~:text=In%20software%2C%20a%20toolchain%20is,a%20set%20of%20related%20programs." target="_blank" rel="noreferrer noopener">Toolchain</a> مدرن:</strong> سازمان‌ها باید از یک رویکرد مدرن برای ایجاد زنجیره ابزارهای خود استفاده کنند که در آن ابزارهای مختلف به صورت هماهنگ و با انعطاف‌پذیری بالا به کار گرفته شوند. این رویکرد می‌تواند به بهبود همکاری و کاهش پیچیدگی‌ها کمک کند.</li>
</ol>



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



<h2 class="wp-block-heading" id="h-اشتباه-هشتم-عدم-وجود-اندازه-گیری-های-مؤثر">اشتباه هشتم:‌ عدم وجود اندازه‌گیری‌های مؤثر</h2>



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



<h3 class="wp-block-heading"><strong>مشکلات مرتبط با عدم وجود اندازه‌گیری‌های مؤثر:</strong></h3>



<ol class="wp-block-list">
<li><strong>عدم شفافیت در عملکرد:</strong> بدون اندازه‌گیری‌های دقیق و مؤثر، سازمان‌ها نمی‌توانند به درستی عملکرد تیم‌های DevOps را ارزیابی کنند. این عدم شفافیت باعث می‌شود که نتوانند نقاط ضعف را شناسایی کنند و برنامه‌های بهبود را به درستی اجرا کنند.</li>



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



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



<li><strong>عدم همگامی با اهداف کسب‌وکار:</strong> بدون شاخص‌های کلیدی عملکرد (KPIs)، سازمان‌ها نمی‌توانند اطمینان حاصل کنند که فعالیت‌های DevOps با اهداف کسب‌وکار همگام است. این امر می‌تواند منجر به کاهش هم‌راستایی بین فناوری و اهداف استراتژیک سازمان شود.</li>
</ol>



<h3 class="wp-block-heading"><strong>راهکارها برای ایجاد و استفاده از اندازه‌گیری‌های مؤثر:</strong></h3>



<ol class="wp-block-list">
<li><strong>تعیین شاخص‌های کلیدی عملکرد (KPIs) مناسب:</strong> اولین گام برای ایجاد اندازه‌گیری‌های مؤثر، تعیین KPIs مناسب است. این شاخص‌ها باید به گونه‌ای انتخاب شوند که عملکرد تیم‌ها، کیفیت نرم‌افزار، و تأثیر فرآیندهای DevOps بر اهداف کسب‌وکار را منعکس کنند. مثال‌هایی از KPIs مناسب شامل زمان انتشار (Lead Time)، تعداد خطاها پس از انتشار، میانگین زمان تا بازگرداندن (MTTR)، و میزان موفقیت در انتشارها (Deployment Success Rate) هستند.</li>



<li><strong>مانیتورینگ و گزارش‌دهی منظم:</strong> اندازه‌گیری‌ها باید به صورت منظم مانیتور شده و گزارش‌دهی شوند. این گزارش‌ها باید به صورت قابل فهم و در دسترس تیم‌ها و مدیران قرار گیرند تا بتوانند تصمیمات لازم را اتخاذ کنند. ابزارهای مانیتورینگ و گزارش‌دهی مانند Grafana ،Prometheus و ELK Stack می‌توانند در این زمینه کمک کنند.</li>



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



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



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



<li><strong>انعطاف‌پذیری و به‌روزرسانی مداوم KPIs:</strong> شاخص‌های کلیدی عملکرد نباید ثابت باشند و باید به طور دوره‌ای بازنگری و به‌روزرسانی شوند تا با تغییرات محیطی و نیازهای سازمان هماهنگ باشند.</li>
</ol>



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



<p>پیاده‌سازی فرهنگ دواپس در یک سازمان، چالش‌ها و مشکلات بسیار زیادی دارد. اما با شناسایی هر مشکل، می‌توانید راهکارهای مناسبی برای آن نیز پیدا کرد. در این مطلب از وبلاگ هم‌روش شما را با ۸ مشکل و اشتباهی آشنا کردیم که در خلال مهاجرت به DevOps پیش می‌آید. همچنین برای هر کدام از این اشتباهات، راهکارهای عمومی را ارائه کردیم تا به سرعت بتوانید آن‌ها را حل کنید. </p>
<p>The post <a href="https://hamravesh.com/blog/8-devops-mistakes/">۸ اشتباه مرسوم در پیاده‌سازی DevOps و راهکارها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/8-devops-mistakes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>مزایای دواپس برای استارتاپ‌ها – پیاده‌سازی و بهترین روش‌ها</title>
		<link>https://hamravesh.com/blog/devops-benefits-for-startups/</link>
					<comments>https://hamravesh.com/blog/devops-benefits-for-startups/#respond</comments>
		
		<dc:creator><![CDATA[بابک خوش‌نویس]]></dc:creator>
		<pubDate>Sun, 15 Sep 2024 11:15:59 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2917</guid>

					<description><![CDATA[<p>رویکرد «دواپس» (DevOps) حدود ۱۵ سال است که مورد استفاده قرار می‌گیرد. آنچه که در ابتدا به‌عنوان پاسخی «ساده» به شیوه کاری «چابُک» (Agile) شروع شد و عملیات را همانند توسعه نرم‌افزار مدیریت می‌کرد، به‌تدریج به متدولوژی‌ای تبدیل شده است که سازمان‌ها را به سوی فرایندهای تحویل کارآمدتر، سریع‌تر و مقاوم‌تر هدایت می‌کند. در این [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/devops-benefits-for-startups/">مزایای دواپس برای استارتاپ‌ها – پیاده‌سازی و بهترین روش‌ها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>رویکرد <a href="https://hamravesh.com/blog/what-is-devops/">«دواپس» (DevOps)</a> حدود ۱۵ سال است که مورد استفاده قرار می‌گیرد. آنچه که در ابتدا به‌عنوان پاسخی «ساده» به شیوه کاری «چابُک» (Agile) شروع شد و عملیات را همانند توسعه نرم‌افزار مدیریت می‌کرد، به‌تدریج به متدولوژی‌ای تبدیل شده است که سازمان‌ها را به سوی فرایندهای تحویل کارآمدتر، سریع‌تر و مقاوم‌تر هدایت می‌کند. در این مطلب بررسی خواهیم کرد که چرا رویکرد دواپس بسیار موفق بوده است و اینکه آیا دواپس تنها برای شرکت‌های سازمانی بزرگ مناسب است یا دواپس برای استارتاپ و شرکت‌های کوچک‌تر هم مفید است و چه دلایلی برای این امر وجود دارد؟</p>



<h2 class="wp-block-heading" id="h-دواپس-چیست">دواپس چیست؟</h2>



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


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="726" height="450" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/05/What-is-DevOps-for-Startups.png" alt="دواپس برای استارتاپ چیست" class="wp-image-2921" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/What-is-DevOps-for-Startups.png 726w, https://hamravesh.com/blog/wp-content/uploads/2024/05/What-is-DevOps-for-Startups-300x186.png 300w" sizes="auto, (max-width: 726px) 100vw, 726px" /></figure>
</div>


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



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



<p>همان‌طور که اجایل باعث شد فرایند تحویل نرم‌افزار از روش آبشاری فاصله بگیرد، دواپس نیز چشم‌انداز حوزه «عملیات» (Operation) را تغییر داد. پیش از دواپس، تیم‌های عملیاتی از بخش «توسعه» (Development) جدا بودند. علاوه بر این، این دو حوزه اهداف متفاوتی داشتند. </p>



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



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



<p>امروزه از دو چارچوب یا فریمورک اصلی در چشم‌انداز دواپس استفاده می‌کنیم: «Three Ways» و «CALMS». هیچ‌کدام از این‌ها جدید نیستند، اما متاسفانه تنها در سازمان‌های بیشتر توسعه‌یافته استفاده می‌شوند. حقیقت این است که استفاده از هر یک از این دو می‌تواند به تقویت پذیرش و درک دواپس کمک کند.</p>



<h3 class="wp-block-heading" id="h-فریمورک-three-ways">فریمورک Three Ways</h3>



<p>مفهوم «Three Ways» به تفصیل در کتاب‌های «The DevOps Handbook» و «The Phoenix Project» از انتشارات انقلاب آی‌تی توضیح داده شده است. هر فردی که می‌خواهد متخصص دواپس خوبی باشد، باید حتما این کتاب‌ها را مطالعه کند.</p>



<ul class="wp-block-list">
<li>اولین راه از ۳ راه در چارچوب Three Ways: <strong>تفکر سیستمی</strong> — این اصل بر عملکرد کل سیستم تمرکز دارد، نه بخش‌های خاص جداگانه. هدف افزایش کارآمدی جریان با درک و بهبود جریان‌های ارزش است.</li>
</ul>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="263" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/05/image-1024x263.png" alt="تفکر سیستمی در چارچوب Three Ways در دواپس برای استارتاپ" class="wp-image-2922" style="width:787px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/image-1024x263.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/05/image-300x77.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/05/image-768x197.png 768w, https://hamravesh.com/blog/wp-content/uploads/2024/05/image.png 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li><strong>راه دوم</strong>: <strong>تقویت حلقه‌های بازخورد</strong> — اگر با اصول «shift left» آشنایی دارید، این اصل به نظر شبیه آن می‌آید. این اصل بر اهمیت حلقه‌های بازخورد از راست به چپ تأکید دارد. به بیان دیگر، چگونه مراحل اولیه باید از وضعیتی که در مراحل بعدی رخ می‌دهد، مطلع‌سازی شوند.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="413" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/05/image-1-1024x413.png" alt="روش Three way در دواپس برای استارتاپ" class="wp-image-2925" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/image-1-1024x413.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/05/image-1-300x121.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/05/image-1-768x310.png 768w, https://hamravesh.com/blog/wp-content/uploads/2024/05/image-1.png 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li><strong>راه سوم</strong>: <strong>فرهنگ آزمایش و یادگیری مستمر</strong> — این بحث (آزمایش) در رویکردهای چابک و دواپس مشترک است. ترس از شکست، عامل مهمی به حساب می‌آید که مانع از نوآوری و موفقیت شرکت‌ها در بازار مُدرن می‌شود.</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://spacelift.io/_next/image?url=https%3A%2F%2Fspaceliftio.wpcomstaging.com%2Fwp-content%2Fuploads%2F2024%2F04%2Fstartups-using-devops.png&amp;w=3840&amp;q=75" alt="startups using devops" /></figure>



<h3 class="wp-block-heading" id="h-فریمورک-calms">فریمورک CALMS</h3>



<p>فریمورک دوم دواپس CALMS نام دارد که به اندازه فریمورک Three Ways محبوب است. این چهارچوب ۵ ستون اصلی را شامل می‌شود:</p>



<ul class="wp-block-list">
<li>فرهنگ</li>



<li>خودکارسازی</li>



<li>خلاصه و کوچک (Lean)</li>



<li>اندازه‌گیری</li>



<li>به اشتراک‌گذاری</li>
</ul>



<p>قصد ما این نیست که هر دسته را به طور مفصل توضیح دهیم. به‌طور چکیده، این چهارچوب تأکید دارد که دِواپس تنها درباره ابزارها و خودکارسازی، یا ابر و <a href="https://hamravesh.com/blog/what-is-ci-cd/">CI/CD</a> نیست، بلکه درباره نحوه اداره سازمان است، یعنی چگونه از روش‌های چابک (مانند Lean) برای افزایش بهره‌وری استفاده می‌کنیم، چگونه دانش را به اشتراک می‌گذاریم، چگونه پیشرفت‌مان را اندازه‌گیری می‌کنیم و چگونه فرایندها را خودکار می‌کنیم. همچنین، به فرهنگ سازمانی و نحوه کار شرکت می‌پردازیم.</p>



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



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



<h2 class="wp-block-heading" id="h-آیا-دواپس-برای-استارتاپ-مناسب-است">آیا دواپس برای استارتاپ مناسب است؟</h2>



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



<ul class="wp-block-list">
<li>چرا به دِواپس نیاز داریم؟</li>



<li>چه مشکلی را می‌خواهیم حل کنیم؟ </li>



<li>چه چیزی را می‌خواهیم به دست آوریم؟</li>
</ul>



<h3 class="wp-block-heading" id="h-اشتباه-رایج-در-بکارگیری-دواپس-برای-استارتاپ">اشتباه رایج در بکارگیری دواپس برای استارتاپ</h3>



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



<h2 class="wp-block-heading" id="h-نقش-دواپس-در-استارتاپ">نقش دواپس در استارتاپ</h2>



<p>نقش دِواپس در استارتاپ باید بیشتر بر راه‌اندازی زنجیره تحویل مؤثر و سنجش آن متمرکز شود. مسئولیت کلیدی در پیکربندی و مدیریت منابع ابری جای می‌گیرند (چرا که بیشتر استارتاپ‌ها از فناوری‌های ابری استفاده می‌کنند). همچنین دیگر مسئولیت‌های اساسی شامل فعال‌سازی و اجرای استفاده از زیرساخت به عنوان کد (<a href="https://hamravesh.com/blog/infrastructure-as-code/">IaC</a>) و سیستم‌های CI/CD است. همچنین جایی که قابلیت مشاهده نقش بسیار مهمی دارد، نباید مانیتورینگ را فراموش کرد.</p>



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



<p>برای دویدن سریع، کافی نیست که فقط AWS، <a href="https://hamravesh.com/blog/what-is-kubernetes/">کوبرنتیز</a> و Jenkins را پیاده‌سازی کنیم. این کار مشکلات را فقط به جای دیگری منتقل می‌کند. <strong>ما باید فرهنگ را پیاده‌سازی کنیم</strong>.</p>



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



<p>در جدول زیر، توضیح می‌دهیم که فرایندها و مهندسان دِواپس چگونه می‌توانند کمک کنند و چه چیزی در توانایی‌های آن‌ها نیست.</p>



<figure class="wp-block-table"><table><tbody><tr><td>بایدها</td><td>نبایدها</td></tr><tr><td>مشکلات برنامه‌نویسان را حل کنید.</td><td>ماشین‌های برنامه‌نویسان را پیکربندی و مدیریت کنیم.</td></tr><tr><td>فرایندهای لازم برای ایجاد ادغام مناسب با سیستم کنترل نسخه (VCS) مانند استراتژی‌های Branching و استراتژی‌های درخواست‌های ادغام (Pull Requests) را فراهم کنید.</td><td>به دلیل اضطراری بودن یک مورد، اجازه دهیم برنامه‌نویسان از میان‌بُر استفاده کنند.</td></tr><tr><td>برنامه‌نویسان را در استفاده از ابزارهای دِواپس (مانند CI/CD ،<a href="https://hamravesh.com/blog/infrastructure-as-code/">IaC</a> و غیره) آموزش دهیم.</td><td>تیم‌ها به طور جدا از هم و در siloها فعالیت کنند.</td></tr><tr><td>برنامه‌نویسان را آموزش دهیم و تأثیرگذاری در آن‌ها ایجاد کنیم تا از ابتدا Observability و امنیت را پیاده‌سازی کنند.</td><td>در مواقع بروز خطا به عنوان تنها نقطه تماس در دسترس و گوش‌به‌زنگ باشند.</td></tr></tbody></table><figcaption class="wp-element-caption">این دستورالعمل‌ها به طور خلاصه نقش‌ها و مسئولیت‌هایی را که مهندسان دِواپس باید ایفا کنند و کارهایی که نباید انجام دهند را توضیح می‌دهد، تاکید بر فرهنگ همکاری و استفاده مؤثر از فناوری در فرایندهای توسعه است.</figcaption></figure>



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



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



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



<li><strong>بهبود تحویل</strong> — استفاده از ابزارهای مناسب با فرایندهای تعریف شده، نرخ تحویل را افزایش داده و زمان ورود به بازار را کاهش می‌دهد.</li>



<li><strong>استانداردهای مستقر</strong> — دِواپس اولویت‌بندی استانداردهای مناسب و تکرارپذیری را در بر دارد. قالب‌ها، ماژول‌ها، خودکارسازی، و مستندسازی برای ارتقای استانداردهای توسعه مهم هستند.</li>



<li><strong>اندازه‌گیری‌ها</strong> — دِواپس به ما اجازه می‌دهد که کار را به شیوه‌ای عملی اندازه‌گیری کنیم. معیارهای DORA به ما امکان می‌دهند تا فرایند را درک کرده و بهبودها را پیاده‌سازی کنیم.</li>
</ul>



<h2 class="wp-block-heading" id="h-چگونه-دواپس-را-در-استارتاپ-پیاده-سازی-کنیم">چگونه دواپس را در استارتاپ پیاده‌سازی کنیم؟</h2>



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



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



<li>تمام <strong>دانش لازم</strong> درباره <strong>فرایندها</strong> را به تیم ارائه دهید.</li>



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



<li><strong>فرایندهای تحویل</strong> را، شامل <strong>ابزارها</strong>، <strong>پیکربندی‌ها</strong>، <strong>الگوها</strong>، <strong>مستندات </strong>و <strong>به‌اشتراک‌گذاری دانش</strong>، ایجاد کنید.</li>



<li>بخش مهمی از <strong>تلاش‌های به‌اشتراک‌گذاری دانش</strong> باشید.</li>
</ul>



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



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



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



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



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



<li><strong>نباید فقط نقش «فرد تحویل‌دهنده» را برای توسعه‌دهندگان بازی کرد</strong> — بله، یکی از اهداف رویه‌های به درستی برقرار شده در دواپس، ایجاد و حفظ زنجیره تحویل مناسب است، اما دِواپس برای فعال کردن توسعه وجود دارد، نه برای انجام کار توسعه‌دهندگان. هم‌افزایی و فرایندهای به درستی برقرار شده، توسعه‌دهندگان را به تحویل و تولید نزدیک می‌کند و به آن‌ها کنترل و مالکیت بیشتری می‌دهد.</li>



<li><strong>بارِ شناختی توسعه‌دهندگان را افزایش ندهید</strong> — در دِواپس، باید ابزارها و فرایندها را به گونه‌ای برقرار کنیم که دولوپرها مدیریت تحویل (یا استقرارها) را بر عهده بگیرند، اما با مجموعه‌ای از ابزارها که اجازه می‌دهد آن‌ها این کار را به روشی با کم‌ترین مزاحمت انجام دهند. یعنی باید توسعه‌دهندگان را به‌گونه‌ای توانمند کنیم تا بدون ترک ابزارهای خود، زیرساخت‌ها را تحویل دهند.</li>



<li><strong>روی فرهنگ تمرکز کنید</strong> — این بخش بیش از حد فراموش می‌شود. چارچوب CALMS فرهنگ را در اولویت قرار می‌دهد. ۳ روش در مورد برقراری فرهنگ کاری مناسب است. برقراری رویکرد مناسب در اینجا به سازمان امکان می‌دهد تا تحویل سریع‌تر و راحت‌تر برای تیم‌های فنی برقرار شود.</li>



<li><strong>دانش را به اشتراک بگذارید</strong> — ما همه اصل «تغییر به سمت چپ» (Shift Left) را می‌شناسیم، اما بسیاری از اوقات به اشتباه پیاده‌سازی می‌شود. تغییر مسئولیت‌ها و وظایف به سمت چپ بدون تغییر فرایندها، رویه‌ها و رویکردهای مناسب منجر به افزایش شدید بار شناختی و فرسودگی می‌شود.</li>



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



<li><strong>کار را اندازه‌گیری کنید</strong> — رویکرد دواپس روش‌های متعددی را برای اندازه‌گیری فراهم می‌کند. ما همه از مانیتورینگ و قابلیت مشاهده برای نظارت بر کارایی یک محصول استفاده می‌کنیم، اما در مورد فرایندها چطور؟ معیارهای DORA را برای اندازه‌گیری کارایی فرایندهایی که در سازمان پیاده‌سازی می‌کنید، به کار ببرید.</li>



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



<li><strong>تفکر «بررسی و اقتباس» (Inspect &amp; Adapt) را پیاده‌سازی کنید</strong> — جنبه بهبود مستمر اجایل و دواپس را بپذیرید. فرایندهای خود را به طور مداوم بهبود ببخشید و کارایی آن‌ها را کنترل کنید.</li>
</ul>



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



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



<p>دواپس نه تنها فراتر از ابزارها و فناوری‌ها است، بلکه رویکردی جامع برای هم‌افزایی بین توسعه و عملیات به‌حساب می‌آید که به افزایش کارایی و سرعت تحویل خدمات در سازمان‌ها کمک می‌کند. این رویکرد، با تاکید بر فرهنگ همکاری، اشتراک‌گذاری دانش و بهبود مستمر، می‌تواند برای شرکت‌هایی با هر اندازه‌ای، از استارتاپ‌ها گرفته تا موسسات بزرگ، مفید و کارآمد باشد. دِواپس نیازمند تعهد به یادگیری مستمر و توجه به فرآیندها و فرهنگ سازمانی است تا از این طریق بتوان به بهره‌وری بیشتر و نوآوری مداوم دست یافت.</p>
<p>The post <a href="https://hamravesh.com/blog/devops-benefits-for-startups/">مزایای دواپس برای استارتاپ‌ها – پیاده‌سازی و بهترین روش‌ها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/devops-benefits-for-startups/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>پر تکرارترین سوالات مصاحبه شغلی مهندس DevOps</title>
		<link>https://hamravesh.com/blog/devops-job-interview/</link>
					<comments>https://hamravesh.com/blog/devops-job-interview/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Tue, 30 Jul 2024 09:20:09 +0000</pubDate>
				<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2666</guid>

					<description><![CDATA[<p>DevOps از جمله مهمترین حوزه‌های شغلی در دنیای IT به‌شمار رفته و سالانه بسیاری از افراد فرایند یادگیری آن را شروع می‌کنند. اگرچه می‌توان فرایند یادگیری مستقیم و سرراستی را برای DevOps در نظر گرفت اما همواره نکات و موضوعاتی هستند که تنها با تجربه بدست آمده و ممکن است در مسیر یادگیری‌تان با آن‌ها [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/devops-job-interview/">پر تکرارترین سوالات مصاحبه شغلی مهندس DevOps</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>DevOps از جمله مهمترین حوزه‌های شغلی در دنیای IT به‌شمار رفته و سالانه بسیاری از افراد فرایند یادگیری آن را شروع می‌کنند. اگرچه می‌توان فرایند یادگیری مستقیم و سرراستی را برای DevOps در نظر گرفت اما همواره نکات و موضوعاتی هستند که تنها با تجربه بدست آمده و ممکن است در مسیر یادگیری‌تان با آن‌ها روبرو نشوید. اما عمده سوالاتی که در مصاحبه‌های شغلی مطرح می‌شوند براساس استانداردهای عمومی <strong><a href="https://hamravesh.com/blog/how-to-become-devops-engineer/" target="_blank" rel="noreferrer noopener">آموزش‌های DevOps</a></strong> هستند. </p>



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



<h2 class="wp-block-heading" id="h-سوال-اول-continuous-integration-چیست-و-در-دنیای-devops-چه-اهمیتی-دارد" style="font-size:23px">سوال اول: <strong>Continuous Integration</strong> چیست و در دنیای DevOps چه اهمیتی دارد؟</h2>



<p><strong>CI</strong> یا <strong>Continuous Integration</strong> (ادغام مداوم) رویکردی در دنیای توسعه نرم‌افزار است که در آن توسعه‌دهندگان به‌صورت مداوم تغییرات کدهای خود را روی ریپازیتوری مرکزی قرار داده و بعد از آن فرایندهای خودکار Build و Test شروع می‌شود. این رویکرد به توسعه سریع نرم‌افزار و همچنین اطمینان از نبود مشکلات و باگ‌های نرم‌افزاری منجر می‌شود. </p>



<h2 class="wp-block-heading" id="h-سوال-دوم-منظور-از-continuous-delivery-چیست-و-چه-تفاوتی-با-continuous-deployment-دارد" style="font-size:23px">سوال دوم: منظور از <strong>Continuous Delivery</strong> چیست و چه تفاوتی با <strong>Continuous Deployment</strong> دارد؟</h2>



<p><strong>CD</strong> یا <strong class="global-rtl">Continuous Delivery </strong>(تحویل مداوم) رویکردی دیگر در دنیای نرم‌افزار است که در آن تغییرات، Build و Test شده و برای دیپلوی یا استقرار آماده می‌شوند. از طرفی دیگر <strong>Continuous Deployment</strong> حالتی گسترش یافته از CD است که در آن تغییرات کدها به‌صورت خودکار، بدون دخالت کارهای دستی، دیپلوی می‌شوند. هدف این رویکرد استقرار مداوم نرم‌افزار است. </p>



<h2 class="wp-block-heading" id="h-سوال-سوم-iac-یا-infrastructure-as-code-چیست-و-در-دنیای-devops-چه-نقشی-دارد" style="font-size:23px"> سوال سوم: <strong>IaC</strong> یا Infrastructure as Code چیست و در دنیای DevOps چه نقشی دارد؟</h2>



<p>IaC یکی از رویکردهای مهم در دوآپس است که در آن فرایند مدیریت و تهیه‌کردن زیرساخت‌ها بوسیله کُد صورت می‌گیرد و کارهای دستی در آن حذف می‌شود. اعمال این تکنیک در دنیای دوآپس به خودکارسازی بیشتر، کم کردن خطاها انسانی و مدیریت سریع‌تر منجر می‌شود. (برای آشنایی بیشتر با این موضوع می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/infrastructure-as-code/" target="_blank" rel="noreferrer noopener">IaC چیست؟</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-سوال-چهارم-چگونه-از-امنیت-فرایندها-در-devops-مطمئن-می-شوید" style="font-size:23px">سوال چهارم: چگونه از امنیت فرایندها در DevOps مطمئن می‌شوید؟</h2>



<p>برقراری امنیت در دوآپس یک فرایند تمام نشدنی و مداوم است که شامل استفاده از تکنیک‌ها، ابزارها و تکنولوژی‌های مختلف می‌شود. برخی از بهترین رویکردها برای بهبود امنیت دوآپس شامل بازبینی کدها، خودکارسازی تست‌های امنیتی، مدیریت ایمن پیکربندی‌ها و <strong class="global-rtl"><a class="global-rtl" href="https://www.synopsys.com/glossary/what-is-threat-modeling.html">مدل‌سازی تهدید‌ها</a></strong> می‌شود. </p>



<h2 class="wp-block-heading" id="h-سوال-پنجم-چرا-و-چگونه-از-داکر-استفاده-می-کنید" style="font-size:23px">سوال پنجم: چرا و چگونه از داکر استفاده می‌کنید؟</h2>



<p> زمانی که قصد توسعه اپلیکیشنی را داشته باشم از ساختار کانتینرها در داکر استفاده می‌کنم. کانتینرها به من این اجازه را می‌دهند تا سورس کد اپلیکیشن و نیازمندی‌های آن را به‌صورت یک پکیج مستقل داشته باشم و در فرایندی سریع‌تر و البته ساده‌تر، پروژه مورد نظرم را دیپلوی کنم. با پیکربندی نیازمندی‌های پروژه در سیستم داکر، می‌توانم به این اطمینان نیز برسم که اپلیکیشن من در <strong class="global-rtl"><a class="global-rtl" href="https://hamravesh.com/blog/production-development-staging" target="_blank" rel="noreferrer noopener">محیط‌های استقرار مختلف</a></strong> مانند Development و یا Production به‌صورت یکپارچه عمل می‌کند.  </p>



<h2 class="wp-block-heading" id="h-سوال-ششم-نقش-pod-در-کلاستر-کوبرنتیز-چیست" style="font-size:23px">سوال ششم: نقش Pod در کلاستر کوبرنتیز چیست؟</h2>



<p>پاد کوچکترین و ساده‌ترین واحد اجرایی در ساختار کوبرنتیز است. هر پاد نماینده یک پروسه در حال اجرا روی کلاستر است. از پادها به‌منظور میزبانی از یک یا چند کانتینر استفاده می‌شود. پادها می‌توانند منابع خود را با کانتینرها به اشتراک بگذارند. این منابع می‌تواند فضای ذخیره‌سازی، شبکه و&#8230; باشد. از آنجایی که یکی از اصلی‌ترین اهداف کوبرنتیز ایجاد دسترسی‌پذیری بالا و مقیاس‌پذیری اپلیکیشن است، پادها با <strong><em><a href="https://hamravesh.com/blog/what-is-kubernetes-pod/#:~:text=%D9%BE%D8%A7%D8%AF%E2%80%8C%D9%87%D8%A7%20%D8%A8%DB%8C%E2%80%8C%D8%AF%D9%88%D8%A7%D9%85%20(ephemeral)%20%D9%87%D8%B3%D8%AA%D9%86%D8%AF%20%D8%A8%D9%87%20%D8%A7%DB%8C%D9%86%20%D9%85%D8%B9%D9%86%DB%8C%20%DA%A9%D9%87%20%D8%A7%DA%AF%D8%B1%20%DB%8C%DA%A9%20%D9%BE%D8%A7%D8%AF%20%D8%A8%D8%A7%20%D8%AE%D8%B7%D8%A7%20%DB%8C%D8%A7%20%D9%85%D8%B4%DA%A9%D9%84%20%D8%B1%D9%88%D8%A8%D9%87%E2%80%8C%D8%B1%D9%88%20%D8%B4%D9%88%D8%AF%D8%8C%20%DA%A9%D9%88%D8%A8%D8%B1%D9%86%D8%AA%DB%8C%D8%B2%20%D8%A2%D9%86%20%D8%B1%D8%A7%20%D9%85%D8%AA%D9%88%D9%82%D9%81%20%D9%85%DB%8C%E2%80%8C%DA%A9%D9%86%D8%AF%20%D9%88%20%DB%8C%DA%A9%20%D9%86%D8%B3%D8%AE%D9%87%20%D8%AC%D8%AF%DB%8C%D8%AF%20%D8%A7%D8%B2%20%D8%A2%D9%86%20%D9%BE%D8%A7%D8%AF%20%D8%B1%D8%A7%20%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF%20%D9%85%DB%8C%E2%80%8C%DA%A9%D9%86%D8%AF%20%D8%AA%D8%A7%20%D9%87%D9%85%D9%87%20%DA%86%DB%8C%D8%B2%20%D8%A8%D9%87%E2%80%8C%D8%B5%D9%88%D8%B1%D8%AA%20%D8%B9%D8%A7%D8%AF%DB%8C%20%D8%A8%D9%87%20%DA%A9%D8%A7%D8%B1%20%D8%AE%D9%88%D8%AF%20%D8%A7%D8%AF%D8%A7%D9%85%D9%87%20%D8%AF%D9%87%D8%AF.">Ephemeral</a></em></strong> بودن‌شان به این قضیه کمک می‌کنند. برای آشنایی بیشتر با ساختار پادها می‌توانید مطلب «<strong><a href="https://hamravesh.com/blog/what-is-kubernetes-pod/" target="_blank" rel="noreferrer noopener">Pod چیست؟</a></strong>» را مطالعه کنید. </p>



<h2 class="wp-block-heading" id="h-سوال-هفتم-برای-پیاده-سازی-پایپ-لاین-ci-cd-چگونه-عمل-می-کنید" style="font-size:23px">سوال هفتم: برای پیاده‌سازی پایپ‌لاین CI/CD چگونه عمل می‌کنید؟</h2>



<p>فرایند کلی پیاده‌سازی پایپ‌لاین برای من به این شکل است که ابتدا کدها روی گیت کامیت می‌شوند، سپس تست‌ها به‌صورت خودکار روی آن‌ها اجرا می‌شود، کدها build شده و در نهایت روی محیط Test دیپلوی می‌شود. بعد از اینکه تمام کدها به‌خوبی تست شدند و تاییدیه گرفتند برای دیپلوی شدن روی محیط Production آماده می‌شوند. برای پیاده‌سازی پایپ‌لاین CI/CD از Jenkins و Travis CI استفاده می‌کنم (البته این ابزارها انتخابی شماست و می‌تواند هر ابزاری باشد).</p>



<h2 class="wp-block-heading" id="h-سوال-هشتم-چگونه-امنیت-اپلیکیشن-ها-را-در-محیط-ابری-حفظ-می-کنید" style="font-size:23px">سوال هشتم: چگونه امنیت اپلیکیشن‌ها را در محیط ابری حفظ می‌کنید؟</h2>



<p>در قدم اول، برای برقراری امنیت در محیط ابری از بهترین رویکردها و استانداردها اولیه استفاده می‌کنم: رمزنگاری اطلاعات حساس، آپدیت مداوم کتابخانه‌ها و ابزارهای مختلف، مدیریت دسترسی کاربران و&#8230; . در مرحله بعدی سراغ استفاده از پروتکل‌های امنیتی، بررسی لاگ‌ها، مانیتورینگ و&#8230; خواهم رفت. </p>



<h2 class="wp-block-heading" id="h-سوالات-دیگر" style="font-size:23px">سوالات دیگر</h2>



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



<ul class="wp-block-list">
<li>از تجربیات‌ و دانش‌تان راجع به لینوکس بگویید.</li>



<li>آیا تا به حال کوبرنتیز را برای یک سازمان بزرگ پیاده‌سازی کرده‌اید؟ چه چیزهایی یاد گرفتید؟</li>



<li>از تجربیات قبلی خودتان راجع به پیاده‌سازی فرایندهای DevOps بگویید.</li>



<li>تجربه کار با سرویس‌هایی مانند آمازون و گوگل کلود را دارید؟</li>
</ul>



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



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



<p>در این مطلب چند مورد از پرتکرارترین سوالات مصاحبه‌های شغلی DevOps مطرح شد و همچنین نمونه‌هایی از سوالات تجربی آورده شدند. </p>
<p>The post <a href="https://hamravesh.com/blog/devops-job-interview/">پر تکرارترین سوالات مصاحبه شغلی مهندس DevOps</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/devops-job-interview/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>زبیکس Zabbix چیست و چطور کار می‌کند؟ – مرور کلی + کاربردها</title>
		<link>https://hamravesh.com/blog/what-is-zabbix/</link>
					<comments>https://hamravesh.com/blog/what-is-zabbix/#respond</comments>
		
		<dc:creator><![CDATA[بابک خوش‌نویس]]></dc:creator>
		<pubDate>Sun, 21 Jul 2024 17:48:38 +0000</pubDate>
				<category><![CDATA[شبکه]]></category>
		<category><![CDATA[دواپس]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2563</guid>

					<description><![CDATA[<p>در این نوشته به این پرسش پاسخ داده شده است که Zabbix چیست و نحوه کار زبیکس چیست یا چه کاربردهایی دارد. زبیکس Zabbix چیست؟ «زبیکس» (Zabbix) ابزار مانیتورینگ متن‌بازی است که برای نظارت بر سرورها، شبکه‌ها، اجزای فناوری اطلاعات، سرویس‌های ابری و ماشین‌های مجازی استفاده می‌شود. ابزار مانیتورینگ زبیکس از متریک‌های مختلف برای نظارت [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-zabbix/">زبیکس Zabbix چیست و چطور کار می‌کند؟ – مرور کلی + کاربردها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در این نوشته به این پرسش پاسخ داده شده است که Zabbix چیست و نحوه کار زبیکس چیست یا چه کاربردهایی دارد.</p>



<h2 class="wp-block-heading" id="h-زبیکس-zabbix-چیست">زبیکس Zabbix چیست؟</h2>



<p>«زبیکس» (Zabbix) ابزار مانیتورینگ متن‌بازی است که برای نظارت بر سرورها، شبکه‌ها، اجزای فناوری اطلاعات، سرویس‌های ابری و ماشین‌های مجازی استفاده می‌شود. ابزار مانیتورینگ زبیکس از متریک‌های مختلف برای نظارت بر مصرف پهنای باند شبکه، فضای دیسک و بار پردازشی CPU استفاده می‌کند. </p>



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


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="894" height="450" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/05/Zabbix.png" alt="رابط کاربری زبیکس Zabbix" class="wp-image-2727" style="width:787px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/Zabbix.png 894w, https://hamravesh.com/blog/wp-content/uploads/2024/05/Zabbix-300x151.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/05/Zabbix-768x387.png 768w" sizes="auto, (max-width: 894px) 100vw, 894px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-تاریخچه-و-ریشه-پیدایش-zabbix">تاریخچه و ریشه پیدایش Zabbix</h2>



<p>زبیکس توسط «الکسی ولادیشف» (Alexei Vladyshev) ایجاد شده و در حال حاضر توسط شرکت Zabbix SIA به طور فعال توسعه داده و پشتیبانی می‌شود. زبیکس سازوکاری نظارتی و توزیع شده در سطح سازمانی و اوپن‌سورس است. زبیکس نرم‌افزاری است که به وسیله آن نظارت بر سلامت و یکپارچگی پارامترهای متعدد شبکه و سرورها انجام می‌شود.</p>



<p>زبیکس از مکانیزم انعطاف‌پذیر «اعلانی» (Notification) استفاده می‌کند که به کاربران امکان می‌دهد هشدارهای ایمیلی را برای تقریباً هر رویدادی پیکربندی کنند. این امر پاسخگویی سریع به مشکلات سرور را ممکن می‌سازد. زبیکس ویژگی‌های عالی گزارش‌گیری و مصورسازی داده‌ها را بر اساس داده‌های آرشیو شده ارائه می‌دهد که این امر باعث می‌شود زبیکس برای «برنامه‌ریزی ظرفیت» (Capacity Planning) برنامه مناسبی باشد.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="600" height="400" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/05/Alexei-Vladyshev.png" alt="خالق Zabbix زبیکس Alexei Vladyshev الکسی ولادیشف" class="wp-image-2639" style="width:787px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/Alexei-Vladyshev.png 600w, https://hamravesh.com/blog/wp-content/uploads/2024/05/Alexei-Vladyshev-300x200.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /><figcaption class="wp-element-caption">Alexei Vladishev</figcaption></figure>
</div>


<h2 class="wp-block-heading" id="h-ویژگی-های-زبیکس-چیست">ویژگی‌های زبیکس چیست؟</h2>



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



<ul class="wp-block-list">
<li>امکان «بصری‌سازی» (Visualization)</li>



<li>وجود Zabbix API</li>



<li>اطلاع‌رسانی اعلانی و بازسازی و احیای مجدد</li>



<li>دیپلوی کردن بدون دردسر</li>



<li>امنیت و احراز هویت</li>



<li>جمع‌آوری متریک‌ها (داده‌های مربوط به منابع و سرویس‌های مختلف)</li>



<li>شناسایی انحراف از شرایط عادی و مطلوب</li>



<li>امکان مانیتورینگ توزیع شده</li>
</ul>



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



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



<ul class="wp-block-list">
<li>اون‌سورس بودن زبیکس</li>



<li>راه‌اندازی بسیار آسان</li>



<li>کانفیگ و پیکربندی ساده و راحت</li>



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



<li>فرآیند داخلی نگهداری و مدیریت منابع در Zabbix</li>



<li>agentهای بسیار کارآمدی برای پلتفرم‌های مبتنی بر یونیکس و WIN32</li>



<li>منحنی یادگیری هموار</li>



<li>بازگشت سرمایه (ROI) بالا (به علت هزینه گزاف Downtime)</li>



<li>هزینه پایین نگهداری و استفاده از زبیکس</li>



<li>سیستم مانیتورینگ متمرکز (ذخیره شدن تمام اطلاعات از جمله تنظیمات، داده‌های عملکردی و غیره در یک پایگاه داده رابطه‌ای)</li>



<li>پشتیبانی Zabbix از پروتکل SNMP (ویرایش ۱ و ۲) برای دریافت Trap و همچنین استعلام (Polling) از دستگاه‌ها و سرویس‌های مختلف</li>



<li>قابلیت‌های نمایش و ارائه دیداری اطلاعات در زبیکس</li>
</ul>



<h2 class="wp-block-heading" id="h-مزایای-استفاده-از-zabbix-چیست">مزایای استفاده از Zabbix چیست؟</h2>



<p>حال در این بخش به شرح برخی از مزایای زبیکس پرداخته شده است.</p>



<ul class="wp-block-list">
<li>رابط وب مناسب و شکیل</li>



<li>هم امکان مانیتور کردن سرورها و هم دارای قابلیت نظارت دستگاه‌های شبکه</li>



<li>انعطاف‌پذیری در تفویض اختیارات به کاربران</li>



<li>سهولت دستکاری و پیکربندی: انجام شدن تمام تنظیمات زبیکس از طریق رابط وب</li>



<li>پشتیبانی از لینوکس، سولاریس، FreeBSD و غیره</li>



<li>قابل اطمینان در خصوص احراز هویت کاربران</li>



<li>امکان گزارش مشکلات از طریق ایمیل و پیامک</li>
</ul>



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



<p>از معدود معایب زبیکس می‌توان به ۳ مورد زیر اشاره کرد.</p>



<ul class="wp-block-list">
<li>اجبار در شامل شدن Amazon RDS</li>



<li>رابط کاربری (UI) و تجربه کاربری (UX) باید جذاب‌تر و با جزئیات بیشتری طراحی شود.</li>



<li>زبیکس باید Templatesهای بیشتری برای مانیتورینگ غنی‌تر ارائه دهد.</li>
</ul>



<h2 class="wp-block-heading" id="h-بهترین-جایگزین-ها-برای-zabbix-چیست">بهترین جایگزین‌ها برای Zabbix چیست؟</h2>



<p>فهرستی از جایگزین‌های مناسب برای زبیکس به شرح زیر است:</p>



<ul class="wp-block-list">
<li>Datadog</li>



<li>AppDynamics</li>



<li>Dynatrace</li>



<li>LogicMonitor</li>



<li>PRTG Network Monitor</li>



<li>checkmk</li>



<li>Microsoft System Center</li>
</ul>



<h2 class="wp-block-heading" id="h-بهترین-منابع-یادگیری-زبیکس">بهترین منابع یادگیری زبیکس</h2>



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



<ul class="wp-block-list">
<li><a href="https://www.devopsschool.com/blog/what-is-zabbix-and-use-of-it/">آموزش کوتاه ماهیت زبیکس و کاربرد آن</a></li>



<li><a href="https://www.youtube.com/watch?v=wnObZNfJJSQ">آموزش پایه‌ای زبیکس رایگان برای افراد تازه کار به همراه دمو</a></li>



<li><a href="https://solutionsreview.com/network-monitoring/the-best-zabbix-tutorials-on-youtube/">معرفی بهترین آموزش‌های زبیکس در یوتیوب</a></li>
</ul>



<h2 class="wp-block-heading" id="h-سوالات-مربوط-به-zabbix-در-مصاحبه-شغلی">سوالات مربوط به Zabbix در مصاحبه شغلی</h2>



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



<h3 class="wp-block-heading" id="h-با-زبیکس-بر-چه-چیزهایی-می-توان-نظارت-کرد-و-مانیتورینگ-انجام-داد">با زبیکس بر چه چیزهایی می‌توان نظارت کرد و مانیتورینگ انجام داد؟</h3>



<p>زبیکس شاخص‌های مختلفی را برای مانیتورینگ ارائه می‌دهد؛ مانند میزان مصرف بسته‌های شبکه، بار پردازشی CPU و میزان اشغال فضای دیسک. این نرم‌افزار عملیات مانیتورینگ را برای سیستم‌عامل‌های لینوکس، HP-UX، مک اواس ایکس، سولاریس و دیگر سیستم‌عامل‌ها انجام می‌دهد. اما برای ویندوز باید از Agentها استفاده شود.</p>



<h3 class="wp-block-heading" id="h-آیا-پرومتئوس-از-زبیکس-بهتر-است">آیا پرومتئوس از زبیکس بهتر است؟</h3>



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



<h3 class="wp-block-heading" id="h-زبیکس-بهتر-است-یا-nagios">زبیکس بهتر است یا Nagios؟</h3>



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



<h3 class="wp-block-heading" id="h-آیا-زبیکس-از-netflow-پشتیبانی-می-کند">آیا زبیکس از <strong>Netflow</strong> پشتیبانی می‌کند؟</h3>



<p>بله،‌ زبیکس امکان مانیتورینگ و یکپارچه‌سازی با Netflow (پروتکل رصد ترافیک شبکه) را دارد.</p>



<h3 class="wp-block-heading" id="h-آیا-zabbix-ابزار-دواپس-محسوب-می-شود">آیا Zabbix ابزار دواپس محسوب می‌شود؟</h3>



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



<h3 class="wp-block-heading" id="h-چگونه-می-توان-با-زبیکس-مانیتورینگ-کوبرنتیز-انجام-داد">چگونه می‌توان با زبیکس مانیتورینگ کوبرنتیز انجام داد؟</h3>



<p>برای نصب، فایل <code>k8s-stats.py</code> را در مسیر <code>/etc/zabbix/scripts/</code> و فایل <code>k8s.conf</code> را در <code>/etc/zabbix/zabbix_agentd.d/</code> کپی می‌کنیم. الگوی زبیکس (<code>k8s-Zabbix-template.xml</code>) را در سرور زبیکس وارد می‌کنیم. در کوبرنتیز یک کاربر زبیکس ایجاد می‌کنیم (می‌توانیم از <code>Zabbix-user-example.yml</code> استفاده کنیم) و توکن و آدرس سرور API آن را در <code>k8s-stats.py</code> تنظیم کنیم. همچنین الگو را به هاست اعمال می‌کنیم.</p>



<h3 class="wp-block-heading" id="h-آیا-استفاده-از-zabbix-آسان-است">آیا استفاده از Zabbix آسان است؟</h3>



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



<h3 class="wp-block-heading" id="h-آیا-زبیکس-ابزار-مناسب-و-کارآمدی-به-حساب-می-آید">آیا زبیکس ابزار مناسب و کارآمدی به حساب می‌آید؟</h3>



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



<h3 class="wp-block-heading" id="h-آیا-zabbix-از-جاوا-استفاده-می-کند">آیا Zabbix از جاوا استفاده می‌کند؟</h3>



<p>زبیکس نرم‌افزاری است که پارامترهای متعدد شبکه و وضعیت و یکپارچگی سرورها را مانیتور می‌کند. Gateway جاوای زبیکس یک سرویس پس‌زمینه (Daemon) نوشته شده به زبان جاوا است.</p>



<h3 class="wp-block-heading" id="h-آیا-زبیکس-در-ویندوز-قابل-اجرا-است">آیا زبیکس در ویندوز قابل اجرا است؟</h3>



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



<h3 class="wp-block-heading" id="h-آیا-زبیکس-rrm-است">آیا زبیکس RRM است؟</h3>



<p>زبیکس نرم‌افزار مدیریت و نظارت از راه دور یا «RMM» نیست، بلکه نرم‌افزار نظارت بر شبکه به حساب می‌آید که امکان نظارت و مدیریت عملکرد شبکه را در زمان واقعی فراهم می‌کند. در مقابل اما، SolarWinds RMM نرم‌افزار مدیریت از راه دور محسوب می‌شود که با استفاده از probe‌ها و مانیتورها به کمک مدیریت کارهای عملیاتی شبکه می‌آید. Zabbix نرم‌افزار مانیتورینگ شبکه است که امکان مانیتورینگ و مدیریت لحظه‌ای شبکه را فراهم می‌کند.</p>



<h3 class="wp-block-heading" id="h-پروکسی-زبیکس-یا-zabbix-proxy-چطور-کار-می-کند">پروکسی زبیکس یا Zabbix Proxy چطور کار می‌کند؟</h3>



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



<h3 class="wp-block-heading" id="h-استفاده-از-زبیکس-چقدر-هزینه-دارد">استفاده از زبیکس چقدر هزینه دارد؟</h3>



<p>زبیکس یک سازوکار اوپن‌سورس است و هزینه‌ای متحمل نمی‌شوید. این محصول متن‌باز و برای استفاده رایگان است. از نسخه زبیکس ۷ به بعد، تمام نسخه‌های بعدی تحت مجوز عمومی GNU Affero نسخه ۳ (AGPLv3) منتشر خواهند شد. شما می‌توانید نسخه مربوطه را تغییر دهید و چنین نسخه‌ای تغییر یافته را تحت شرایط AGPLv3 که توسط بنیاد نرم‌افزار آزاد منتشر شده، منتشر کنید. </p>



<p>برای جزئیات بیشتر از جمله پاسخ به سوالات رایج درباره AGPLv3، به <a href="http://www.fsf.org/licenses/gpl-faq.html">پرسش و پاسخ‌های عمومی بنیاد نرم‌افزار آزاد</a> مراجعه کنید. زبیکس نرم‌افزاری متن‌باز است، اما اگر از آن در محیط تجاری استفاده می‌کنید، از شما تقاضا می‌شود با خرید سطحی از پشتیبانی فنی، توسعه زبیکس را حمایت کنید. تمام نسخه‌های قبلی زبیکس تا ۶.۴ تحت مجوز عمومی GNU نسخه ۲ (GPLv2) منتشر شده‌اند. شرایط رسمی GPLv2 و AGPLv3 در لینک [<a href="http://www.fsf.org/licenses/">+</a>] موجود است.</p>



<h3 class="wp-block-heading" id="h-زبیکس-چگونه-با-پرومتئوس-تلفیق-می-شود">زبیکس چگونه با پرومتئوس تلفیق می‌شود؟</h3>



<p>پرومتئوس در آخرین نسخه زبیکس به صورت داخلی تلفیق و ادغام شده است که این امکان را به ما می‌دهد تا به راحتی متریک‌ها را از collectorها جمع‌آوری و پردازش کنیم. برای ایجاد یک آیتم master HTTP، به Configuration &gt; Hosts &gt; Items بروید، روی Create item کلیک و پارامترهای آیتم را در فُرم وارد کنید.</p>



<h3 class="wp-block-heading" id="h-آیا-zabbix-ابزار-مانیتورینگ-مداوم-یا-continuous-monitoring-است">آیا Zabbix ابزار مانیتورینگ مداوم یا Continuous Monitoring است؟</h3>



<p>بله، زبیکس ابزار مانیتورینگ مداوم یا «Continuous Monitoring» محسوب می‌شود. تفاوت عمده بین زبیکس و Nagios هم همین است که Nagios ابزار مانیتورینگ مداوم نیست، در حالی که زبیکس ابزاری برای مانیتورینگ پیوسته و مداوم به‌حساب می‌آید.</p>



<h3 class="wp-block-heading" id="h-آیا-زبیکس-saas-محسوب-می-شود">آیا زبیکس SaaS محسوب می‌شود؟</h3>



<p>خیر، زبیکس سرویس SaaS یا «Software as a Service» نیست. Zabbix Cloud پلتفرم لوکال (On-Premise) است که توسط شرکت زبیکس ارائه می‌شود، اما کاربر باید آن را در محیط خودش نصب و راه‌اندازی کند.</p>



<h3 class="wp-block-heading" id="h-آیا-zabbix-شاخه-و-فورکی-از-nagios-است">آیا Zabbix شاخه و فورکی از Nagios است؟</h3>



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



<h3 class="wp-block-heading" id="h-خالق-زبیکس-کیست">خالق زبیکس کیست؟</h3>



<p>زبیکس توسط «آلکسی ولادیشف» (Alexei Vladishev) ساخته شده است. شرکت زبیکس در سال ۲۰۰۵ زمانی تاسیس شد که مدیرعامل و مالک آن، آلکسی ولادیشف، تصمیم گرفت راه‌حل و سازوکار مانیتورینگی که روی آن کار می‌کرد را بیشتر توسعه دهد.</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-zabbix/">زبیکس Zabbix چیست و چطور کار می‌کند؟ – مرور کلی + کاربردها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-zabbix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
