<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های کوروش شریفی</title>
        <link>https://virgool.io/feed/@ordidaad</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-07 15:03:39</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/71018/avatar/oMwaYk.png?height=120&amp;width=120</url>
            <title>کوروش شریفی</title>
            <link>https://virgool.io/@ordidaad</link>
        </image>

                    <item>
                <title>سمیه نرو...</title>
                <link>https://virgool.io/@ordidaad/%D8%B3%D9%85%DB%8C%D9%87-%D9%86%D8%B1%D9%88-dhcpgpiusxmq</link>
                <description>سلام,امروز می خوام یه مطلب غیر فنی بنویسم در مورد اینکه چرا یه نیرو ( بیشتر منظورم نیرو های فنی و متخصص هست ) یک شرکت رو ترک می کنه اما قبل از شروع بگم که من متخصص حوزه ی منابع انسانی نیستم و مطلب پیش رو بیشتر تجربه ی شخصی هست.من تقریبا از سال ۹۰ دارم توی حوزه ی IT کار می کنم که بخش عمدش رو به عنوان برنامه نویس مشغول به کار بودم, کار در شرکت های مختلف و می شه گفت زیادی رو تجریه کردم, البته زمانی که من شروع به کار کردم و شاید تا همین ۳-۴ سال پیش اینقدر استارت آپ و شرکت فعال توی حوزه ی فناوری وجود نداشت و انتخاب ها واقعا محدود بودن مخصوصا برای یکی مثل من که ساکن تهران نیست و همیشه باید مسیر رفت و آمد هم جزو فیلتر های اصلیش قرار بده.توی این مدت با آدم های زیادی کار کردم و مدیریت هایی با سبک های مختلف تجربه کردم و همینطور شاهد رفت و آمد های زیادی بودم ( منظورم استخدام و استعفا هست ), خوب این مطلب روی قسمت استعفا تمرکز داره و طبق تجربه ای دارم دلایل زیر می تونه باعث استعفای افراد بشه.تغییر محل شرکت:وقتی به نفر یه شرکت رو برای کار کردن انتخاب می کنه قطعا یکی از فاکتور های انتخابش مسیر و فاصله ی اون شرکت به محل زندگیش هست, مثلا کسی که خونش تهرانپارس ( شرق تهران ) هست هیچ وقت دوست نداره بره آریا شهر( غرب تهران ) سر کار, پس اگر شرکت شما تهران پارس هست و یهو تصمیم می گیرید برای آریا شهر باید انتظار ریزش یه سری از نیروهاتون رو داشته باشید.عدم پرداخت منظم حقوق و مزایا:شما انسان بسیار شریف و خوش قلب... اما شرافت شما اجاره خونه ی نیروی شما رو پرداخت نمی کنه, یکی از شرکت هایی که من کار می کردم مدیر بسیار با شخصیت, خوش قلب  و مهربونی داشت اما شرکت درگیر مشکلات مالی شدید بود و شخص من و خیلی از همکارای دیگه مدتی رو بدون دریافت حقوق (‌برای من ۷ ماه ) کار کردیم چون خیلی مدیرمون رو دوست داشتیم... اما کار به جایی رسید که برای هزینه ی رفت و آمد هم به مشکل خوردیم و اجبارا از شرکت جدا شدیم.قوانین خود خواهانه و غیر منصفانه:قوانینی مثل اینکه ما اینجا اضافه کار پرداخت نمی کنیم اما کسر کار داریم, عصر هر چقدر وایسید وظیفتونه چون ما استارت آپ هستیم و شرکت دولتی نیستیم و کار باید پیش بره هر طور شده اما اگر صبح  ها تاخیر کنید طبق قانون وزارت کار از حقوق شما کسر می شه... یا مثلا شما روز تعطیل یا ساعات غیر کاری هم اگر لازم بشه باید کار کنید یا بیاید شرکت (‌ بدون پرداخت اضافه کار ) اما مرخصی نداریم و اگر برید مرخصی غیبت محسوب می شه و از حقوقتون کم می شه.. مدیر عزیز!  آخر ما نفهمیدیم شما استارت آپی و تفکر دولتی ندارید یا نه متعهد به قوانین وزارت کار هستید !؟یکی از شرکت هایی که من کار می کردم قصد داشت نمایشگاه شرکت کنه و ۲۰ روز مونده به شروع نمایشگاه تصمیم به توسعه ی یه محصول گرفت برای ارائه در اون نمایشگاه, من و یکی از همکار ها به مدت ۱ ماه هر شب تا ۱ الی ۲ شب می موندیم شرکت تا کار برسه و خوب طبیعتا صبح دیر میومدیم چون شب قبلش جنازه شده بودیم... در نهایت اپلیکشن به نمایشگاه رسید و آخر ماه ما نه تنها پاداشی نگرفتیم بلکه بابت تاخیر های صبح  کسر حقوق هم خورده بودیم! ماه بعد من استعفا داد.دخالت های بی مورد در موارد تخصصی :یکی از اعصاب خورد کن ترین جمله هایی که یه مدیر به نیروی فنی می تونه بگه این جمله هست: &quot;اینکه کاری نداره! کار ۱ روزه&quot;. یکی دیگه از کار های اعصاب خورد کن: &quot;این دکمه اینجا جاش خوب نیست, بردار بزار اونجا... رنگش هم عوض کن.&quot;یه مورد اعصاب خورد کن دیگه: &quot;مطمئنی ؟ می خوای زنگ بزنی از فلانی هم بپرسی ؟&quot;مدیر عزیز!  نیرویی رو که استخدام کردی باید بهش اعتماد داشته باشی... اگر اعتماد نداری بهتره وقت دو  طرف رو تلف نکنی و سریع تر قطع همکاری کنی, چون دیر یا زود نیروت این کار رو می کنه, اگر فکر می کنی مخصوصا زمان طولانی می ده که راحت باشه و وقت تلف کنه, اگر فکر می کنی نمی دونه محصول رو چطور طراحی کنه, اگر کلا فکر می کنی بلد نیست یا ضعیفه, با یه خداحافظی همه رو خوشحال کن... در غیر اینصورت دخالت نکن یا حداقل با نیروهای قدیمی که روشون شناخت داری و بهت ثابت شده هستن این کار رو نکن! فرار می کنن.ایجاد جو نا مناسب, خشک, بی روح و مدرسه ایی:افرادی یه شرکت تایم خیلی زیادی از روز رو با هم و داخل شرکت می گذرونن, اگر محیط متشنج, خشک و بی روح باشه تحملش عذاب آور می شه, شرکتی کار می کردم که همکارا بعد از ۱ سال همکار بودن هنوز همدیگه رو به فامیلی صدا می زدن!  کوچکترین اطلاعاتی در مورد همدیگه نداشتن! چون مدیر شرکت اجازه نمی داد بچه ها با هم صحبت کنن شوخی کنن صمیمی بشن و ... هر بار صدای صحبت ۲ نفر با هم میومد و بحث غیر کاری بود داخلی مسئول دفتر زنگ می خورد و ایشون میومدن و تذکر می دادن که صحبت نکنید! حتی تجربه ی تفکیک جنسیتی هم داشتم توی یه شرکت دیگه!!! مدیر محترم!  فکر می کنید چرا شرکت های بزرگ دنیا اینهمه به فکر رفاه و شادابی نیرو هاشون هستن ؟ از دیزاین دفتر های کارشون گرفته تا وسایل بازی و دورهمی و ایونت های مختلف. تا وقتی به این دید نرسیدی که کارمند من برده ی من نیست و موفقیت بیزینس تا حد زیادی به منابع انسانیش وابسه هست کسب و کار راه ننداز.فراهم نبودن شرایط پیشرفت فنی:یکی از علایق مهم صاحبان کسب و کار  اینه که بگن همه ی تسک ها فورسه مگر  اینکه خلافش ثابت بشه! این فورس بودن همیشگی باعث می شه نیروی فنی از هرآنچه بلده و روش مسلطه استفاده کنه که زمان از دست نده, بعد یه مدت می بینه کلی تکنولوژی جدید اومده که فرصت نشده از هیچ کدومش استفاده کنه در نتیجه پسرفت کرده چون از نیاز بازار کار عقب مونده. اینکه اجازه ندید نیروی فنی از لحاظ فنی پیشرفت کنه مثل اینه که یه فوتبالیست رو ۱ فصل روی نیمکت بشونید!البته بیزینس هم نیازهای خودش رو داره و نمی شه فاکتور زمان رو مهم ندونست اما باید یه تعادل مناسبی برقرار بشه چون این مورد به جز دلسرد کردن نیرو به خود کسب و کار هم در بلند مدت ضرر می زنه, چون کسب و کار وابسته به IT باید حدالامکان همگام با تکنولوژی پیش بره وگرنه محکوم به نابودیه چون اگر این همگام بودن پله پله نباشه باید درآینده ای نه چندان دور کل محصول و زیر ساخت کوبیده بشه و از نو بیاد بالا اونم با یه هزینه ی سنگین... به عنوان مثال  الان شرکت حرفه ای وجود داره که برنامه نویس هاش سورس کد رو با فلش بین همدیگه رد و بدل کنن !؟ ولی در مقابل استفاده از همین ابزارهای Version Control مثل Git هم ما مقاوت ها دیده ایم در گذشته.</description>
                <category>کوروش شریفی</category>
                <author>کوروش شریفی</author>
                <pubDate>Sat, 15 Feb 2020 01:12:00 +0330</pubDate>
            </item>
                    <item>
                <title>می شه موقع SSH زدن پسورد نزنم ؟</title>
                <link>https://virgool.io/justforfun/%D9%85%DB%8C-%D8%B4%D9%87-%D9%85%D9%88%D9%82%D8%B9-ssh-%D8%B2%D8%AF%D9%86-%D9%BE%D8%B3%D9%88%D8%B1%D8%AF-%D9%86%D8%B2%D9%86%D9%85-wdc0lripwykb</link>
                <description>بله می شه, به سادگی. برای اینکار شما باید مکانیزم Authentication بین کلاینت و سرور رو عوض کنید. برای اینکه نخواید هر بار پسورد خودتون رو تایپ ـ( یا Copy Past )‌ کنید می تونید از ssh-key استفاده کنید, برای این کار به یک Key نیاز دارید که باید توی مسیر زیر باشه:/home/username/.ssh/id_rsa.pubاگر فایل id_rsa.pub وجود نداره باید یدونه بسازید ( تولید کنید ). با دستور زیر:ssh-keygen -t rsaوقتی enter رو بزنید ۳ تا سوال می پرسه که هر سه تا رو enter بزنید بره (‌ حالت پیشفرض ) ولی خوب سوال اول اینه که کلید تولید شده رو کجا ذخیره کنه ؟ سوال دوم پسورد می خواد و سوال سوم هم تکرار پسورد که من توصیه می کنه برای راحتی کار پسورد رو خالی بزارید و ست نکنید.مرحله ی بعد دستور زیر رو بزنید تا کلید شما  روی کنسول پرینت بشه:cat /home/username/.ssh/id_rsa.pubیه استرینگ توی این مایه ها باید ببینید:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqCxg9nsKH88tXGcZ80iIguqzqsAD5SNYzoqioKLCxIj14G0Ay3Nq4/84q8ezDQPuHXowJSP00iPzHfEcEsMxiYlVzq/gMW1B8nTSYFctljQZJBROLio//63k58jiEYfVHEQI4KRaLhz7EVkmSArJZpdaFydPLTXbK/5fCZZc8ZIl+XXi8JXDhdrzyZ86dYSeLX3IcMmRGh9PK+5vEqpM0fy1KqYOoSYq3xlZeaev/eePv92j4n4A7szQzz8Psfr1C/itUWrd1D20vOe0iNRRnp201OtLA+IsuBWPrTOn360q2ujNBKOT984qS/o1AjB  ordidaad@ordidaadخوب این کلید شماست. در مرحله بعد باید این کلید رو به سروری که می خواید ssh بزنید اضافه کنید.روی سرور فایل زیر رو باز کنید: vim /root/.ssh/authorized_keysحالا کلید خودتون رو اضافه کنید.ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqCxg9nsKH88tXGcZ80iIguqzqsAD5SNYzoqioKLCxIj14G0Ay3Nq4/84q8ezDQPuHXowJSP00iPzHfEcEsMxiYlVzq/gMW1B8nTSYFctljQZJBROLio//63k58jiEYfVHEQI4KRaLhz7EVkmSArJZpdaFydPLTXbK/5fCZZc8ZIl+XXi8JXDhdrzyZ86dYSeLX3IcMmRGh9PK+5vEqpM0fy1KqYOoSYq3xlZeaev/eePv92j4n4A7szQzz8Psfr1C/itUWrd1D20vOe0iNRRnp201OtLA+IsuBWPrTOn360q2ujNBKOT984qS/o1AjB  ordidaad@ordidaad می تونید چند تا کلید هم بزارید... مثلا سیستم توی خونه سیستم توی شرکت, لپتاپتون و ... فقط کافیه enter بزنید و کلید بعدی رو اضافه کنید. مثلا اینجوری :ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqCxg9nsKH88tXGcZ80iIguqzqsAD5SNYzoqioKLCxIj14G0Ay3Nq4/84q8ezDQPuHXowJSP00iPzHfEcEsMxiYlVzq/gMW1B8nTSYFctljQZJBROLio//63k58jiEYfVHEQI4KRaLhz7EVkmSArJZpdaFydPLTXbK/5fCZZc8ZIl+XXi8JXDhdrzyZ86dYSeLX3IcMmRGh9PK+5vEqpM0fy1KqYOoSYq3xlZeaev/eePv92j4n4A7szQzz8Psfr1C/itUWrd1D20vOe0iNRRnp201OtLA+IsuBWPrTOn360q2ujNBKOT984qS/o1AjB  ordidaad@ordidaad

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqCxg9nssdfsdfZ80iIguqzqsAD5SNYzoqioKLCxIj14G0Ay3Nq4/84q8ezDQPuHXowJsdfdsfMxiYlVzq/gMW1B8nTSYFctljQZJBROLio//63k58jiEYfVHEQI4KRaLhz7EVkmSArJZpdaFydPLTXbK/5fCZZc8ZIl+XXi8JXDhdrzyZ86dYSeLX3IcMmRGh9PK+5vEqpM0fy1KqYOoSYq3xlZeaev/eePv92j4n4A7szQzz8Psfr1C/itUWrd1D20vOe0iNRRnp201OtLA+IsuBWPrTOn360q2ujNBKOT984qS/o1AjB  ordidaad@companyخووووب... حالا وقتی  ssh بزنید می بیند که فرت می ره تو و دیگه پسورد نمی خواد.ssh root@192.168.1.10حالا اگه تنبلیتون میاد ip رو تایپ کنید یا ip ها زیاده و یادتون می ره می تونید بهش اسم بدید, برای این کار فایل زیر رو باز کنید: vim /etc/hostsبا بقیه خرت و پرت های توی این فایل کاری نداشته باشید بیاد آخرش و خط زیر رو اضافه کنید:api-server     192.168.1.10اینجا api-server یه اسم دلخواهه. حالا می تونید به شکل زیر ssh بزنید:ssh root@api-serverتمام!</description>
                <category>کوروش شریفی</category>
                <author>کوروش شریفی</author>
                <pubDate>Thu, 28 Nov 2019 00:20:22 +0330</pubDate>
            </item>
                    <item>
                <title>این Ansible که می گن چیه ؟</title>
                <link>https://virgool.io/@ordidaad/%D8%A7%DB%8C%D9%86-ansible-%DA%A9%D9%87-%D9%85%DB%8C-%DA%AF%D9%86-%DA%86%DB%8C%D9%87-orvwdetlgkmb</link>
                <description>سلام, توی این پست می خوام به ساده ترین روش ممکن توضیح بدم Ansible چیه و چه کاربردی داره. مثل همیشه از مثال های ساده و ابتدایی استفاده می کنم که کانسپت اصلی درکش راحت باشه.خوب قبل اینکه بخوام توضیح بدم انسیبل چی هست و چجوری استفاده می شه باید یه مقدمه ی کوچیک بگم.مفهومی به نام Automationاین روز ها واژه ی Automation یا IT Automation رو زیاد می شنوید, automation به زبان ساده یعنی تبدیل کردن یه سری فرایند های تکراری از حالت دستی به حالت اتومات, حالا توی صنعت IT هم همینه, یه سری کار ها هست که معمولا زیاد انجام می دیم... مثلا اگر SysAdmin باشید نصب خرت و پرت روی سرور ها رو احتمالا هر روز انجام می دید, خوب اگر بحث 4 تا 5 تا سرور باشه انجام این کار به صورت دستی قابل تحمله, اما اگر 5 تا سرور بشه 50 تا چی ؟ خوب اینجاست که مفهوم Automation خودش رو نشون می ده. حالا این Automation چجوری باید انجام بشه ؟ به وسیله ابزار های مختلف که این روز ها به وفور در دسترس هستند.معرفی چند تا ابزار برای Automationخوب, همونطور که Nginx ,Apache,Tomcat و ... به عنوان وب سرور در دسترس هستند یا مثلا Git و SVN و  ... به عنوان سورس کنترل یا PHP, Python و Nodejs به عنوان زبان برنامه نویسی, برای پیاده سازی فرایند  Automation هم ابزار های مختلفی داره که معروف ترین هاش Puppet, Chef و Ansible هستن.احتمالا یه سوال تکراری براتون به وجود میاد که کدومش بهتره ؟ این سوال که کدوم بهتره همیشه جوابش اینه: بستگی داره!بستگی داره که با سینتکس کدوم بهتر ارتباط برقرار می کنید, یاد گیری کدوم براتون راحت تر, کدوم به زیرساخت شما نزدیک تره و ... انتخاب من Ansible بود به دلایل زیر:یادگیری آسون: سینتکس خیلی ساده و روان برپایه Yaml به همراه داکیونت خوب.کار کردن به صورت Agent Less و بر پایه ی SSH: یعنی نیاز نیست روی همه ی سرور ها چیزی مربوط به Ansible نصب کنید, Ansible رو یک جا ( حتی روی لپ تاپ خودتون ) نصب می کنید و از همونجا بقیه سرور ها رو کنترل می کنید.برای من همین 2 تا دلیل کافی بود تا Ansible رو انتخاب کنم.شروع کار با Ansibleخوب مثل همیشه نصب انسیبل رو توضیح نمی دوم چون خیلی ساده هست. انسیبل کلا با دو تا فایل کار می کنه, یکی فایلی که لیست سرور ها رو توی می نویسید که بهش می گن inventory یکی هم فایلی که تسک هایی که قراره روی اون سرور ها انجا بشه رو توش می نویسید که بهش می گن playbook.اول فایل inventory رو توضیح می دم, یه نمونه ی ساده از فایل inventory رو می تونید اینجا ببینید:#inventory.cnf
[web]
192.168.1.10
192.168.1.11
192.168.1.12

[cache]
192.168.1.13

[blog]
192.168.1.14

[database]
192.168.1.15
خوب فکر کنم خیلی ساده هست... یه سری سرور داریم که هرکدوم یه ip دارن و اومدیم توی یه فایل inventory.cnf همشون رو تعریف کردیم و به هرکدوم به اسم دادیم. از این اسم ها بعدا توی فایل تسک ها استفاده می کنیم, تنها نکته ی گنگ این نمونه فایل اون قسمت اول یعنی [web] هست که 3 تا ip داخلشه... این به این معنی هست که ما سه تا سرور داریم که گذاشتیمشون توی یک گروه به اسم web این کار رو معمولا وقتی انجام می دیم که این سرور ها دقیقا باید مثل هم باشن, مثلا سرور هایی که Load Balance کردیم, اینطوری وقتی یه تسک رو روی گروه web اجرا کنیم هر 3 تا سرور ما آپدیت می شن.اما یک نمونه فایل playbook به شکل زیر هست:( اگر با سینتکس YAML آشنا نیستید به سرچ بکنید تا آشنا بشید, کل playbook های ansible با سینتکس YAML نوشته می شه )کار این playbook این هست که بره وضعیت Nginx رو روی سرور های web و blog ما چک کنه ببینه فعال هست یا نه... اگر نه اون رو start  کنه.#my_playook.yml
- hosts: 
  - web
  - blog
  tasks:
      - name: Check nginx status
        service:
            name: nginx
            state: startedخوب اجازه بدید قسمت های مختلف این فایل رو توضیح بدم:قسمت hosts:همونطور که مشخصه توی این قسمت مشخص می کنید که این playbook و تسک هایی که توی اون تعریف کردید رو کدوم سرور ها اجرا بشه که اینجا ما سرور های web و blog رو گذاشتیم که در مجموع می شه 4 تا سرور چون اگر یادتون باشه 3 تا سرور web داشتیم و یدونه blog.قسمت Tasks:در این قسمت تسک ها یا کارهایی که قراره روی سرور ها انجام بشه رو می نویسید. هر تسک یک نام داره که با - name مشخص می شه و چیز خیلی مهمی نیست فقط موقع اجرای playbook توی کنسول نمایش داده می شه تا بدونید کدوم تسک در حال اجرا هست.خوب در اینجا باید توضیح بدم که ansible یه سری ماژول داره که اجرای دستورات رو راحت تر می کنه و برنامه نویس های دنیا این ماژول ها رو توسعه می دن ( با تشکر ویژه از دنیای open source ). البته خیلی از این ماژول ها توسط خود انسیبل توسعه داده شده. به عنوان مثال انسیبل برای git برای  apt برای pip و برای خیلی از چیزای دیگه ماژول داره... مثلا با استفاده از ماژول git می تونید خیلی ساده روی سرور ها بدون اینکه بهشون ssh بزنید pull بگیرید!حالا ما اینجا ما از ماژول service استفاده کردیم که 2 تا پارامتر می گیره:name: اسم سرویسstate: وضعیتی که تمایل داریم سرویس ما داشته باشه... در اینجا startedاتفاقی که میفته اینه که انسیبل میاد از طریق ssh وصل می شه به سرور ما و می ره سراغ تسک ها که در اینجا ما یه تسک بیشتر نداریم, یعنی اطمینان از اینکه nginx در وضعیت start هست, اگر در این مرحله سرویس nginx از قبل  در وضعیت start باشه انسیبل کاری انجام نمی ده اما اگر start نباشه سرویس nginx رو start می کنه.خوب حالا وقتشه که playbook خودمون رو اجرا کنیم, با دستور زیر این کار رو انجام می دیم:ansible-playbook my_playbook.yml -i inventory.conf -u root -k همونطور که مشخصه گفتیم کدوم playbook رو اجرا کن و آدرس فایل inventory هم با فلگ -i مشخص کردیم... تنها نکتش اینه که گفتیم با یوزر root تسک ها رو اجرا کن و اون -k آخر هم واسه اینه که پسورد root  رو از ورودی بگیره ( به صورت prompt ).این دستور رو که اجرا کنید اول بهتون می گه پسورد روت رو وارد کنید بعد هم می ره playbook رو اجرا می کنه. بعد از اتمام اجرا اگر مشکل ارتباطی و خطای سنتکس و اینا نداشته باشید نتیجه به صورت زیر نمایش داده می شه بهتون:ok تعدا تسک های موفقchanged تعداد تغییرات انجام شده روی سرورfailed تعداد تسک های ناموفقignore تعداد تسک هایی که کلا اجرا نشدنتمام! انسیبل خیلی گسترده هست و این پست فقط جهت آشنایی اولیه با نحوه ی کار بود.من 2 تا playbook نوشتم و روی Github گذاشتم که یکیش Nginx و PHP رو نصب و کانفیگ می کنه و اونیکی برای نصب و کانفیگ Redis هست. می تونید هم استفاده کنید به صورت عملی و هم نگاه کنید برای آشنایی بیشتر.آدرس گیت هاب من: https://github.com/ordidaad</description>
                <category>کوروش شریفی</category>
                <author>کوروش شریفی</author>
                <pubDate>Mon, 25 Nov 2019 23:50:02 +0330</pubDate>
            </item>
                    <item>
                <title>یکم HAProxy یاد بگیریم</title>
                <link>https://virgool.io/@ordidaad/%DB%8C%DA%A9%D9%85-haproxy-%DB%8C%D8%A7%D8%AF-%D8%A8%DA%AF%DB%8C%D8%B1%DB%8C%D9%85-c64brbnbbg7c</link>
                <description>سلام, امروز می خوام یادتون بدم چجوری از HAProxy به عنوان یه Load Balancer استفاده کنید.البته مثل همیشه سعی می کنم خیلی ساده و مبانی اصلی رو توضیح بدم که ساده باشه و گیج کننده نشه. اما HAProxy چی هست کلا ؟ جواب خیلی ساده هست, HAProxy درخواست های ورودی رو می گیره و می فرسته اونجا که باید. در واقع یه واسط یا همون Proxy Server هست.خوب, HAProxy دو قسمت اصلی داره Backend و Frontend.فرانت اند: این بخش درخواست های ورودی رو دریافت می کنه.بک اند: این قسمت درخواست هایی که از فرانت اند دریافت می کنه رو می فرسته به سرویس مربوطه.برای درک بهتر مثال زیر رو نگاه کنید:frontend local_http # نام دلخواه برای این فرانت اند
    mode http # نوع درخواست
    bind *:80 # به کدوم پورت گوش داده بشه ؟
    acl api_domain hdr(host) -i api.site.com # کدوم دامین یا ساب دامین ؟
    use_backend api_stack if api_domain # به کدوم بک اند منتقل بشه درخواست ؟خوب! چه اتفاقی داره میفته ؟ خیلی ساده... ما یه قسمت فرانت اند تعریف کردیم به اسم local_http که این اسم کاملا دلخواهه... نوع درخواست رو HTTP تعریف کردیم و به HAProxy گفتیم تمام درخواست هایی که به پورت ۸۰ میاد رو باید هندل کنی. بعد اومدیم یه ACL تعریف کردیم به اسم api_domain ( نام دلخواه ) که در واقع چیزی نیست به جز یه شرط ساده که در صورتی برقرار هست که دامین درخواستی api.site.com باشه . در واقع وظیفه ACL این هست که با توجه به درخواست, تشخیص بده از کدوم بک اند باید استفاده کنه. در ادامه با استفاده از کلمه کلیدی use_backend مشخص کردیم که باید از بک اند api_stack استفاده بشه و درخواست به این بک اند ارجاع داده بشه. (‌ به قسمت if دقت کنید,  اینجا چک کردیم شرط ACL بقرار هست یا نه ).حالا قسمت بک اند:backend api_stack # اسم بک اند
    balance roundrobin # نوع لود بالانس
    server api1 127.0.0.1:6560 check # سرویس یا سرور ۱
    server api2 127.0.0.1:6561 check # سرویس یا سرور ۲
    server api3 127.0.0.1:6562 check # سرویس یا سرور ۳خوب این قسمت هم مشخصه... این قسمت بک اند ماست که  یه Load Balancer ساده داخل خودش دارهدرخواست رو از فرانت اند می گیره و بین این ۳ تا سرویسی که ما تعریف کردیم به صورت راند رابین پخش می کنه.به همین سادگی! تمام...</description>
                <category>کوروش شریفی</category>
                <author>کوروش شریفی</author>
                <pubDate>Wed, 20 Nov 2019 12:40:51 +0330</pubDate>
            </item>
                    <item>
                <title>مانیتورینگ Nginx با استفاده از Grafana</title>
                <link>https://virgool.io/justforfun/%D9%85%D8%A7%D9%86%DB%8C%D8%AA%D9%88%D8%B1%DB%8C%D9%86%DA%AF-nginx-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-grafana-vzrhugbosbie</link>
                <description>سلام, به این تصویر نگاه کنیدهیچ چیز برای یه SysAdmin یا Developer مهم تر از این نیست که بدونه وضعیت سرویسی که راه اندازی کرده و یا داره ازش نگهداری می کنه چطوریه ؟ دیدن این صفحه برای خود من که یه حس رضایت ( اصطلاح معروفش Satisfaction ) خیلی زیادی داره.اما به اینطور صفحه ها چی می گن ؟ بله درسته, مانیتورینگ. مانیتورینگ یکی از حیاطی ترین اجزا یه سرویس زنده و در حال اجراس.انتخاب ابزار مناسب برای مانیتورینگ:اجازه بدید کلام رو کوتاه کنم و از مزایای مانیتورینگ زیاد ننویسم چون خودتون بیشترش رو می دونید. اما برای راه انداختن مانیتورینگ چیکار باید بکنیم ؟ مانیتورینگ هم مثل خیلی از سرویس های دیگه ابزار زیاد داره.. یه سری هاشون  Stand Alone هستن مثل Zabbix یا Nagios و یه سری هاشون هم یه صورت یه استک هستند مثل  ELK که مخفف Elasticseach, Logstash و Kibana هست یا استک Grafana, Telegraf و Influxdb.اما منظور از استک چیه ؟ اجازه بدید خیلی ساده بگم, معمولا مانیتورینگ ۳ قسمت اصلی داره:جمع آوری داده ها ذخیره ی داده های جمع آوری شده نمایش داده های ذخیره شده به شکل مناسب ( گراف و نمودار و ... )جمع آوری داده ها:خوب قاعدتا شما باید مشخص کنید که چه چیزی رو می خواید مانیتور کنید... وب سرور ؟ دیتابیس ؟ میزان مصرف منابع ؟ خوب بعد اینکه مشخص کردید باید یه ابزار مناسب ( Data Collector ) برای جمع آوری دیتای مورد نظرتون داشته باشید... اصطلاحا به این دیتا می گن metrics. مثلا nginx واسه خودش یه جور metrics داره و MySQL یه جور دیگه... خوشبختانه از اونجایی که در عصر تکنولوژی به سر می بریم ۱۰۰۰ جور Data Collector وجود داره مثل CollectD یا telegraf یا filebeat یا ... به این کالکتور ها Agent هم میگن. این کالکتور ها اکثرا برای سرویس های معروف و عامه مثل Nginx, Apache, MySQL و ماژول های آماده دارن و شما باید فقط یه کانفیگ ساده انجام بدید (‌مثلا آدرس فایل لاگ Nginx رو مشخص کنید) و بقیه کار ها رو خودشون انجام میدن.خوب, پس متوجه شدیم که باید یه ابزاری داشته باشیم که سورس رو بهش معرفی کنیم ( مثلا Log های Nginx )‌ و بهش بگیم دیتا رو از توی سورس برای ما بکش بیرون ( ادبی ترش می شه استخراج کن ).خوب حالا که دیتا رو استخراج کردیم چه کنیم ؟ قسمت بعد رو بخونید...ذخیره ی داده های جمع آوری شده:بعد از اینکه Agent ما یه سری دیتا برای ما جمع کرد باید این دیتا رو یه جایی ذخیره کنیم. تا بتونیم بعدا گزارش بگیریم, مثلا در کل ۱ ماه گذشته چه تعداد درخواست رو هندل کردیم ؟ برای این کار هم Data Store ها یا Database های مختلفی وجود داره... مثل elasticsearch یا Influxdb. فقط کافیه به Agent بگیم دیتایی که جمع کردی رو بفرست سمت Database جهت ذخیره سازی.نمایش داده های ذخیره شده (Visualization):خوب, تا اینجا دیتا (‌metrics) رو استخراج و دخیره کردیم... حالا باید اون ها رو به صورت آدمیزاد پسند و رئیس پسند نمایش بدیم, برای این کار هم ابزار های مختلفی هست که در حال حاضر معروف ترین هاشون kibana و grafana هستن که داده ها رو از database بر می دارن و به صورت چارت و گراف و نمودار و ... نشون می دن.مانیتور کردن Nginx با استفاده از Grafana, Influxdb, Telegraf:خوب اجازه بدید مباحث تئوری رو کم کنیم و یکم عملی کار کنیم. خوب من خودم این استک رو ترجیح می دم به خاطر اینکه خیلی شسته رفته تر و بی دردسر تره و تقریبا هر انتظاری که دارید رو برآورده می کنه. همونطور که قبلا گفتم ما به ۳ تا ابزار احتیاج داریم, Grafana برای نمایش, Influxdb برای ذخیر سازی داده ها و Telegraf برای جمع آوری داده ها.اجازه بدید از مراحل نصب و راه اندازی بگذریم چون خود سایت مرجع خیلی خوب توضیح داده و چیز ساده ای هست.اولین قدم کانفیگ تلگراف:خوب, از اونجایی که قراره Nginx رو مانیتور کنیم شما در مرحله ی اول باید telegraf رو روی سروری که Nginx شما اونجا هست نصب کنید. بعد از اینکه نصب کردید فایل زیر رو با یه Text Editor باز کنید: sudo vim /etc/telegraf/telegraf.confخوب حالا دنبال کانفیگ بلاک [[inputs.logparser]]  بگیردید, این ماژول به صورت پیش فرض توی تلگراف کامنت هست و شما باید این ماژول رو از کامنت خارج کنید و به شکل زیر تنظیم کنید:[[inputs.logparser]]
    files = [&amp;quot/var/log/nginx/access.log&amp;quot] // اینجا آدرس فایل لاگ رو مشخص کنید
    from_beginning = false
    [inputs.logparser.grok]
        patterns = [&amp;quot%{COMBINED_LOG_FORMAT}&amp;quot]
        measurement = &amp;quotnginx_access_log&amp;quot // کلیدی که دیتای مورد نظر قراره باهاش ذخیر بشه, دلخواه
        custom_pattern_files = []       خوب تا اینجا به تلگراف گفتیم دیتا رو از کجا بخون, حالا باید بهش بگیم دیتایی که استخراج کردی رو کجا بفرست برای ذخیره سازی.توی همون فایل telegraf.conf دنبال  بلاک  [[outputs.influxdb]]  بگردید, این ماژول هم کامنت شده هست, از کامنت خارجش کنید و کافیه فقط چند تا پارمتر ساده براش ست کنید, ip ماشین یا سروری که influxdb رو روش نصب کردید +‌ پورتی که influxdb روش جواب می ده که پیش فرض 8086 هست اگر خودتون عوضش نکرده باشید به همراه یوزر و پسورد و اسم دیتابیس.
[[outputs.influxdb]]
    urls = [&amp;quothttp://192.168.1.100:8086&amp;quot] 
    database = &amp;quottelegraf&amp;quot 
    username = &amp;quotfunnyusername&amp;quot 
    password = &amp;quotverykoloftpassword&amp;quotخبر خوب اینه که اگه database رو از قبل نساخته باشید خود به خود ساخته می شه و به خطا نمی خوره.خوب حالا سرویس تلگراف رو restart کنید:sudo service telegraf restartبعد از اینکه سرویس تلگراف رو restart کردید می تونید با دستور زیر تست کنید ببینید همه چی درسته یا نهsudo telegraf --testاگر خطایی دریافت نکردید یعنی همه چیز درسته. ( چه  جمله ی مسخره ای )خوب, تا اینجا گرافانا, اینفلاکس و تلگراف رو نصب کردیم, بعد تلگراف رو تنطیم کردیم تا لاگ های Nginx رو بخونه و در آخر بهش گفتیم دیتای رو بفرست سمت انفلاکس برای ذخیره سازی, حالا توی مرحله ی بعد که مرحله ی آخر هست می خوایم دیتای ذخیره شده رو نشون بدیم.تنظیمات Grafana برای مانیتور کردن Nginx:خوب اینجا دو تا راه داریم, اول اینکه خودمون یه دشبورد جدید بسازیم و به اینفلاکس کوئری بزنیم و دیتا رو بخونیم وصلش کنیم به ویجت ها و گراف های مختلف و نمایش بدیم, راه دوم اینه که از دشبورد های از پیش آماده که دیگران زحمت طراحی و ساختش رو کشیدن استفاده کنیم. بدون هیچ صحبت اضافه ای بریم برای توضیح راه دوم :D.خوب در قدم اول پنل وب گرافانا رو توی مرورگر باز کنید و لاگین کنید. اگر نمی دونید گرافانا به صورت پیش فرض روی پورت 3000 میاد بالا و یوزر پس پیش فرضش admin / admin هست.در قدم اول باید گرافانا رو به اینفلاکس وصل کنیم, برای اینکار بعد از اینکه لاگین کردید سمت چپ صفحه یه منوی عمودی می بینید یه یکیش عکس چرخدنده هست به اسم configuration که یه زیر منو داره به اسم data source, روش کلیک کنید. حالا روی دکمه add data source کلیک کنید. یه سری انتخاب بهتون می ده که یکیش influxdb هست.روش کلیک کنید یه فرم باز می شه, همه چی مشخصه طبق معمول یه اسم دلخواه برای کانکشن,  ip:port سرویس اینفلاکس, یوزر و پسورد و اسم دیتابیس رو انتخاب کنید بقیه تنظیمات هم لازم نیست تغییر بدید, تنها نکنه این بخش اینه که اسم دیتابیسی که وارد می کنید با اسم دیتابیسی که توی تلگراف وارد کردید باید یکی باشه.روی save and test کلیک کنید اگر مشکلی نباشه data source شما ایجاد می شه.خوب قسمت های سخت ماجرا تموم شد و فقط مونده ساختن یه دشبورد برای نمایش دیتا, شما می تونید برید توی وب سایت گرافانا و از این قسمت دشبورد های مخصوص nginx رو سرچ کنید و یکیش رو دانلود کنید, دشبورد مورد علاقه ی خود من این دشبورد هست. روی Download JSON کلیک کنید تا یه فایل json دانلود بشه.حالا وقتشه که داشبوردی که دانلود کردید رو به گرافانا اضافه کنید, از این منو روی زیر منوی import کلیک کنید:حالا روی دکمه ی سبز رنگ Upload .json File کلیک کنید و فایلی که دانلود کرده بودید رو آپلود کنید, یه فرم باز می شه که می تونید برای دشبورد اسم انتخاب کنید, در قسمت influxdb هم اون data source که قبلا ساختید رو انتخاب کنید و روی دکمه import کلیک کنید.خوب حالا اگه همه چی خوب پیش رفت باشه باید یه همچین تصویر زیبایی رو ببینید:خوب حالا اگه همه چی خوب پیش رفت باشه باید ه تصویر زیبا رو ببینید: تمام! بقیش رو خودتون با یکم وقت گذاشتن می تونید کشف کنید چون Grafana یه UX خیلی خوب داره, مثلا گوشه ی بالا سمت راست می تونید بازه زمانی نمایش اطلاعات رو انتخاب کنید یا انتخاب کنید هر چند وقت یک بار دشبورد ریفرش بشه.خسته نباشید.</description>
                <category>کوروش شریفی</category>
                <author>کوروش شریفی</author>
                <pubDate>Sat, 14 Sep 2019 22:51:04 +0430</pubDate>
            </item>
                    <item>
                <title>یه راه ساده برای دور زدن تحریم های نرم افزاری</title>
                <link>https://virgool.io/@ordidaad/%DB%8C%D9%87-%D8%B1%D8%A7%D9%87-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AF%D9%88%D8%B1-%D8%B2%D8%AF%D9%86-%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-%D9%87%D8%A7%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1%DB%8C-snfxx0nxis7t</link>
                <description>سلام, اگر شما هم مثل من یک شخص فعال در حوزه ی  وب هستید احتمالا زیاد براتون پیش اومده که خواستید از یه سرویس یا نرم افزاری استفاده کنید که ایران رو تحریم کرده... از سروریس های Google بگیر تا Docker و Gitlab و ... خیلی حس مضخرفیه نه ؟راه حل قضیهخوب امروز می خوام یه راهی رو بهتون نشون بدم که تا حد زیادی این مشکل رو برطرف می کنه از نصب veepee&#x27;n (‌به چه کارایی مجبوریم )  و این حرفا هم خیلی راحت تر و کم دردسر تره...شکن یه سرویس ایرانی هست که با استفاده از اون و تغییر DNS های سیستمون به ip های شکن می تونید از شر تحریم ها راحت بشد.نحوه تغییر DNS ها در Ubuntu به صورت زیر هست:در مرحله ی اول با یه Text Editor فایل زیر رو باز کنیدsudo vim /etc/resolv.confدر مرحله ی بعد nameserver (ها) رو به شکل زیر تغییر بدید:nameserver 178.22.122.100
nameserver 185.51.200.2خوب حالا تغییرات رو ذخیره کنید و تمام! احتیاجی به ریستارت کردن هیچی هم نیست.</description>
                <category>کوروش شریفی</category>
                <author>کوروش شریفی</author>
                <pubDate>Fri, 13 Sep 2019 17:16:29 +0430</pubDate>
            </item>
                    <item>
                <title>استفاده از Nginx به عنوان Load Balancer</title>
                <link>https://virgool.io/justforfun/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-nginx-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-load-balancer-hg3rzsqib1dk</link>
                <description>سلام, اگر شما یه SysAdmin یا Developer هستید حتما با وب سرور Nginx آشنایی دارید. امروز توی این پست می خوام راهنماییتون کنم که چطور با Nginx یه Load Balancer ساده راه اندازی کنید.آشنایی با مفهوم Load Balancingخوب اجازه بدید خیلی ساده بگم چون احتمالا خودتون می دونید, Load Balancing یعنی تقسیم بار بین چند تا سرور, یعنی وظیفه ی پاسخ دادن به درخواست هایی که از سمت کلاینت میاد فقط به عهده ی یه سرویس دهنده نباشه و بین چند تا سرویس دهنده با الگوریتم های مختلف پخش بشه.مزیت این کار چیه ؟ خوب اول اینکه سرویس شما همیشه در دسترس هست, چون اگر یکی از سرویس دهنده ها مشکل براش پیش بیاد بقیه سرویس دهنده ها  جاش رو می گیرن, ولی اگه شما فقط ۱ سرویس دهنده داشته باشید و از دسترس خارج بشه کل سرویس شما ( مثلا وب سایت ) از کار میفته.مزیت دومش اینه که می تونید منابعتون رو مدیریت شده مصرف کنید! یعنی نسبت به حجم باری که روی وب سایتتون هست تعداد سرویس دهنده ها رو کم یا زیاد کنید.تا اینجا چند بار از مفهوم سرویس دهنده استفاده کردم, دلیل اینکه نگفتم سرور و گفتم سرویس دهنده پارسی رو پاس داشتن نبود... دلیلش این هست که وقتی می گیم سرور خود به خود یاد یه سرور HP G8 میفتیم با شونصد گیگ رم و ۸۰۰ تا CPU... اینطوری توی ذهنمون جا افتاده... در حالی که سرویس دهنده ( سرور ) ما می تونه یه VPS باشه, می تونه یه VM باشه یا حتی یه Docker Container.پیاده سازی Load Balancing با استفاده از Nginx:برای پیاده سازی Load Balancing ابزار های دیگه ای هم هست مثل HA Proxy, اما خوب راه انداختن Load Balancing با  Nginx خیلی ساده هست.بریم سر اصل مطلب, فرض کنید ما یه Rest API داریم که روی پورت 80 پاسخ می ده و می خوایم روی این سرویس API خودمون  ‌Load Balancing پیاده کنیم.به مثال زیر نگاه کنید:    upstream api {
        server 192.168.1.10;
        server 192.168.1.11;
        server 192.168.1.12;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://api;
        }
    }خوب چه اتفاقی داره اینجا میفته ؟ ما اینجا با استفاده از کلمه ی کلیدی server یه بلاک تعریف کردیم و توش مشخص کردیم که هر درخواستی روی پورت 80 رسید رو از طریق HTTP بفرست روی یه سرویسی به اسم api. اما این api چی هست ؟ api یه بلاک دیگه توی Nginx هست که ما با استفاده از کلمه ی کلیدی upstream تعریفش کردیم, در واقع مرکز اصلی Load Balancing توی Nginx همین بلاک upstream هست. اون api هم که جلوی upstream نوشتیم یه اسم دلخواه هست و هر چیزی می تونه باشه.خوب پس تا اینجا ما به پورت ۸۰ گوش کردیم و هر درخواستی که اومد سمت این پورت رو فرستادیم سمت یه upstream به اسم api. اما این چیزایی که توی upstream نوشتیم چی هست ؟ خوب همونطور که مشخصه و شما هم انسان باهوشی هستید احتمالا متوجه شدید که ما توی این upstream سه تا سرور ( سرویس دهنده ) تعریف کردیم, فرض کنید این سه تا ip در واقع ip سه تا VM هست و سرویس api ما روی هر سه تا ماشین بالاس.همونطور که قبلا گفتم شما می تونید حتی از یه Docker Container هم یه عنوان سرویس دهنده استفاده کنید... خوب چجوری ؟ اجازه بدید یه دونه Container فرضی به استک سرویس دهنده هامون اضافه کنیم.    upstream api {
       server 192.168.1.10;         
       server 192.168.1.11;         
       server 192.168.1.12;
       server 192.168.1.13:34800  // یه کانتینر که روی پورت 34800 جواب می ده
    }به همین راحتی!حتی ما می تونیم پامون رو فراتر بزاریم و درخواستمون رو بفرستیم روی یه دامین دیگه!upstream api {
    server 192.168.1.10;                 
    server 192.168.1.11;                 
    server 192.168.1.12;        
    server 192.168.1.13:34800  // یه کانتینر که روی پورت 34800 جواب می ده
    server srv5.example.com; // اینجا
}خوب اصل قضیه تموم شد! به همین راحتی شما یه Load Balancer دارید.اما همونطور که گفتم Load Balancing الگوریتم های مختلفی داره, اینی که ما استفاده کردیم بهش می گن round-robin که در واقع درخواست ها رو نوبتی و به ترتیب می فرسته روی سرویس دهنده ها.الگوریتم های دیگه ای هم هست مثل ip_hash که به اینصورت کار می کنه که هر یک کلاینت رو فقط به یه سرور وصل می کنه. یکی از کاربرد های مهم این الگوریتم این هست که شما می تونید session کاربر رو حفظ کنید ( مثلا لاگین بودن کاربر ).مثال:upstream api {
    ip_hash; // مشخص کردن الگوریتم
    server 192.168.1.10;                      
    server 192.168.1.11;                      
    server 192.168.1.12;
}


خوب توضیحات من تموم شد, امیدوارم مفید بوده باشه! برای اطلاعات بیشتر می تونید این صفحه رو بخونید.</description>
                <category>کوروش شریفی</category>
                <author>کوروش شریفی</author>
                <pubDate>Fri, 13 Sep 2019 13:46:39 +0430</pubDate>
            </item>
            </channel>
</rss>