شما چه به عنوان یک مهندس دواپس و چه به عنوان SRE یا Site Reliability Engineering یک سری وظایف مشترک دارید که شامل مانیتورینگ سرویس ها و سرور ها ، چک کردن لاگ ها ، خودکار سازی تسک ها ، تسک های مربوط به دیتا بیس ، بک آپ گیری و راه اندازی سرویس ها هست و مهم ترین وظیفه شما بالا نگه داشتن سرویس هست sre و devops تفاوت های دارن که اگر به طور خلاصه بخوایم بگیم sre بیشتر سمت نگه داری زیرساخت هست و DevOps نگه داری کد و سرویس های که تیم برنامه نویسی مارکتین یا تیم های دیگه نیاز دارن و بیشتر با تیم هایی دیگه در ازطبات هست و به طور مدارم این 2 تیم با هم در ارتباط هستن تا بتونن سرویس پایدار و مطمئن داشته باشن می تونید این دو مقاله از IBM رو مطالعه کنید برای درک بیشتری از وظیایف شما در این شغل
پیشنیاز ها:
- آشنایی با سیستم عامل لینوکس و مفاهیم شبکه
- آشنایی با مفاهیم پایه برنامه نویسی وب
- آشنایی با یک زبان برنامه نویسی (ترجیحا python,bash )
- من وقتی این درو شروع کردم چند سالی فقط تجربه کار تو زمینه وب (django - flask ,react) و کمی هم تجربه مار با رزبری پای داشتم و دانش کافی در لینوکس و شبکه نداشتم و فقط بلد بودم باهاشون کار کنم
قدم اول : سعی کنید یک ماشین مجازی داشته باشید و چند مدل لینوکس روش تست کنید و فایل های ماشین مجازیتون کپی بگیرید اول کار ممکنه چند بار کل سیستم عامل نابود کنید و وقتی کپی از ماشین مجازیتون داشته باشید برگرداندن زمان کمتری می گیره تا نصب از اول من خیلی با سیستم عامل ubuntu راحت بودم و برای اول کار به نظر گزینه خوبیه چون هم راحته هم مشکلاتتون به خاطر جامعه بزرگش راحت تر می تونید حل کنید
آشنایی بیشتر با لینوکس : شناخت پایه های لینوکس مثل فایل سیستم ، systemd , دسترسی ها و … که برای این کار خودم با کتاب Linux Bible خواندم خیلی جامع هست و سرنخ هایی میده بهتون ه باهاش میتونید کلی چیز دیگه یاد بگیرید و خیلی موضوع های دیگه مثل امنیت و یک سری تسک های که تو دنیایی واقعی باهاش بر می خورید مثل ران کردن ftp سرور و کنار اون با مفاهیم مثل مانیتورینگ و اتوماسیون هم آشنا می شوید همچنین با اسکریپت نویسی و یکمم شبکه و بخشی از ابزاری که تو شبکه به کارتون میاد ابزاری که باهاش آشنا میشد دست کم نگیرید تو دنیا واقعی خیلی به کارتون میاد مثل vim , telnet ,systemctl کار کردن با این ابزار و چیز های دیگه مثل regex و awk رو هم تمرین کنید باعث میشه خیلی سریع کارتون بره بالا و کیفیت کارتون خیلی زیاد میکنه هر چیزی که تو ادامه این مطلب راجبش می خواهیم صحبت کنیم داخل این کتاب یا به طور مفصل یا خلاصه راجبش صحبت شده
- هدف : تواینایی دیباگ ، مانیتورینگ ،ساخت و استقرار سرویس ها در سطح سیستم عامل بدون استفاده از ابزار ثانویه
- منبع: Linux Bible و linux + کتاب
- تمرین: استقرار یک وب اپلیکیشن به صورت سرویسی و با استفاده از systemd و ابزار دیگه و مانیتور کردن منابع سیستم با استفاده از دستورات سیتمی
آشنایی بیشتر با شبکه :
توی کتابی که اول معرفی کردم(Linux Bible ) ایکم راجب شبکه صحبت کرده ولی می گوید برای عمق بیشتر برید سراغ network + شاید به چشمتون نمیاد ولی دانش شبکه تو دیباگ کردن خیلی چیزه و ساختن زیرساخت ها خیلی به کارتون میاد جوری که اصلا به فکرشم نمیکنید من برای یاد گیری سعی میکردم هر چیزی با مثال یاد بگیرم برای شبکه به کمک متورم سعی کردم یک ip tunnel بیارم بالا بین چند تا ماشین و سعی کنم مانیتور کنم پکت های که بین این ماشین ها رد بدل میشه ان کارو اول با iftop کردم بعد سعی کردم با وایرشارک این کارو کنم چون اون ابزار بیشتری در اختیارمون میزاره
- هدف : توانایی درک و دیباگ ترافیک بین سرویس ها و سرور ها و دیباگ کردن آم
- منبع: کتاب network+
- تمرین: راه اندازی یک vpn با بدون استفاده از سرویس های آماده مانند وایرگارد و مانیتور کردن آن با استفاده از iftop و در مرحله بعد از نرم افزاری مانند wireshark
آشنایی با وب سرور و مفاهیمش :
برای این کار من خودم nginx پیشنهاد میدم باری یاد گیریم یک منبع خیلی خوب خود سایت nginx داره و یک کتاب رایگان هست the complete nginx cookbook پروژه ای که برای این کار انجام دادم خیلی ساده بود یک وب اپ پایتونی سعی کردم باهاش بیارم بالا و چیزهایی مثل ریورس پروکسی ، یا سرور کردن فایل های استاتیک انجام دادم و یم پروژه دیگه که خیلی خیلی بهم حال داد این بود که با استفاده از زبان lua یک اسکریپتی نوشتم که بیاد از دیتابیس redis چک کنه ببینه ip که ریکوئست زده اجازه عبور کردن از nginx داره یا نه برای این کار من از open resty استفاده کردم
- هدف : آشنا شدن با مفهوم وب سرور چگونیگی استقرار و تنظیم آن امکانات که در اختیار ما می گذاره ( پیشنهاد من برای شروع استفاده از nginx هست )
- منبع: the complete nginx cookbook
- تمرین: ریورس پروکسی کردن یک وب اپپ و ست کردن هدر و یک بلک لیست آی پی با استفاده از یک دیتابیس و nginx
آشنایی و کار با دیتابیس :
داخل کتابی که معرفی کردم کمی راجب دیتا بیشس و یکمی راجب دستوراتش بهتون توضیح داده معمولا از شما توقع میره دیتا بیس هارو بتونید هندل کنید خودم فکر می کردم کار با دیتابیس بلدم اما وقتی توقع هایی که ازم می رفت دیدم فهمیدم خیلی موضوع عمیق تر از این حرف ها و بعضی وقت ها با دیتابیس کار کردن استرس زا و پر مسئولیت برخورد اول تو محیط کارم این بود که ساعت 1 شب باید دیتابیس مستر رو dump می کردم رو slave اگر با این اصطلاحات آشنا ندارید نگران نباشید خودمم خیلی هنوزم باهاشون آشنا نیستم برای شروع من دوره youtube پیشنهاد میدم هر چند زمان کار آموزیم این ویدیو رو ندیده بودم ولی به نظرم برای شروع دوره خوبی است برای mysql بهتره با redis هم کمی تجربه کار داشته باشید
- هدف : یادگیری کار با دیتا بیس شیوه بک آپ گیری ، میگریت کردن استفاد از دستورات
- منبع: ابتدا کتاب Linux Bible و سپس MySQL introduction
- تمرین: اتصال یک دیتا بیس به وب اپپ جدا سازی رید و رایت دیتا بیس ساخت یوزر با دسترسی های مخطلف بک آپ گیری و برگرداندن بک آپ ها
آشنایی با اسکریپت و برنامه نویسی :
من به شخصا چون بک گراند برنامه نویسی داشتم برای زیاد سخت نبود داخل این زمینه زبان هایی که خیلی کاربرد دارد پایتون هست و bash ولی زبانی مثل گو و سی / سی ++ هم پر طرفدار است برنامه نویسی بهتری عمیق تر یاد بگیرید برای شروع من پایتون پیشنهاد میدم چون ساده است و یک جامعه بزرگ پشتش هست تا ایرادات نو قبل شما بهش برخورده باشه حل کرده و منتشر کرده راه حلشو قدرت حل مسئله ، شناخت ابزار مهم ترین بخش تو این زمینه به نظر من می توانید برای python از سایت هایی مثل hackerrank استفاده کنید اگر هم تجربه ندارید برای بش هم من این فیلم از youtube استفاده کنید و فیلم هایی آموزش پایتون هم داخل این کانال است سعی کنید بیشتر مسائلی حل کنید که روی متن یک پردازشی انجام میده چون داخل دنیایی واقعی از این مسایل زیاد بر می خورید
- هدف : یادگیری برنامه نویسی و اسکریپت نویسی برای اتوماتیک کردن کار ها
- منبع: ویدیو bash و pyton کانال یوتیوب Geek's Lesson
- تمرین: نوشتم یک برنامه برای نصب و کانفیگ یا apache یا nginx انتخاب کاربر به صورت خود کار
آشنای با docker :
جای راحت کار من اینجا بود چون کلی منابع بود و خیلی هم پیچیدگی نداشت اولش هرچند خیلی مفهوم پیچیده ای نداره ولی کلی امکانت ابزار داره سعی کنید این مورد رو حتما پروژه ای برید جلو مثل اینکه ما یک سایتی می خواهید داشته باشید که یک دیتابیس داره یک بک اند و یک فرانت حالا اینو با داکر بیاردی بالا تا با مفهوم هایی مثل اینوایرمنت ها بیس ایمیج ها مولتی استیجینگ والیوم و کلی چیز دیگه آشنا شی من خودم با 3 تا کتاب تقریبا حجیم ایم موضوع رفتم جلو ولی فقط با یک دونش خیلی ارتباط برقرار کردم و فقط همونو تموم کردم که کتاب docker in practice بود کنار اون بعضی جاها که گیر می کردم سراغ کتاب docker in action و Docker Deep Dive بود برای این کار هم یک پروژه داشتم که قرار بود یک وردپرس رو روی docker swarm بیارم بالا در حالتی که وردپرس روی یک node و mysql روی یک نود دیگه روی 2 تا ماشین جدا باشن شما باید کار با داکر و داکر کامپوز خوب یاد بگیرید ولی داکر سورم لزومی نداره ولی سعی کنید یک آشنایی داشته باشید
- هدف : آشنایی با مفهوم کانتینر و توانایی باسی تبدیل اپپ های سرویسی به کانتینر ای
- منبع: داکیومنت سایت خود داکر و کتاب docker up and running
- تمرین: استقرار چند .رد پرس و اتصال آن به یک mysql در چند ماشین مخطلف
آشنایی با مانیتورینگ :
برای مانیتورینگ داخل کتاب Linux Bible از ابزاری به اسم cockpit استفاده کرده من خودم خیلی باهاش آشنایی ندارم و تو ایم مدت کوتاهی هم که دارم داخل این زمینه کار کردم جایی نشنیدم و ندیدم که با این ابزار کار کنه و ممکنه بخشی از نیاز هارو تو این زمینه کاری برطرف کنه بیشتر از ابزاری prometheus و مکمل اون grafana استفاده میشه معمولا حالا اصلا چرا باید همچین ابزاری استفاده کنیم خوب راستش شما از خیلی از اتفاقات وقتی از ابزار مانیتورینگ و آلرت منیجر ها استفاده می کنید جلوگیری می کنید یک تجربه شخصی بخوام بهتون بگم اینه شما خیلی واضح می تونید پر شدن هارد سرور هارو ببینی و از کرش کردن سرور ها جلوگیری کنید داکیومنت رسمی prometheus تقریبا نیوتون بر طرف می کنه و با گوگل کردن خیلی راحت می تونید نیاز هاتونو رفع کنید برای شروه ویدیو های کانال یوتیوب TechWorld with Nana پیشنهاد میدم برای مانیتور کردن از دستورات لینوکسی هم مثل htop می توانید استفاده کنید وقتی رو یک سرور کار می کنید و نشانه های خوبی از خرابی های احتمالی و یا سلامت سرور میده بهتون
- هدف : تواینایی نقاط و پارامتر های مهم با استفاده از ابزار مانیتورینگ و ست کردن آلرت برای آنها
- منبع: داکیومنت رسمی پرومتیوس و کانال یوتیوب edureka!
- تمرین: ساخت یک سرویس مانیتورینگ برای تمرین داکر
آشنایی با لاگینگ (ابزاری برای خواندن لاگ ها ) :
مهمترین ابزار اینجا elasticsearch هست دنیایی خیلی خیلی گسترده ای است و یکی ار کاربردش فقط لاگینگ هست ولی باید یکم عمیق تر این بحث یاد بگیرید چون مهمترین بخش برای دیباگ کردن دیباگ کردن داکر یا سرویس ها یا هرچیز دیگه ای اولین قدمش خواندن لاگ هاشه برای لاگینگ من اولین کاری که کردم داخل دوره کارآموزی این بود که یک اپ پایتونی نوشتم که لاگ های nginx بخوانه و بفرسته به یک اند پونتی تا بتونم راحت با یک ریکوست لاگ هارو دریافت کنم برای ابزاری که الان خیلی استفاده میشه برای این کار معمولا elk یا Elasticsearch, Logstash, Kibana و efk یا Elasticsearch, fluentd, Kibana هست شما به الستیک سرچ به چشم یک دیتابیس نگاه کنید قراره لاگ هارو داخل اون بریزیم به روش های مختلف که از خواندن روی سرور خودش باشه تا فرستادن به وسیله ابزاری مثل filebet باشه اما خیلی عمیق تره و کلی کاربرد دیگه داره و خود من رو یک جایی گیر انداخت به خاطر ندانستن مبانی و اصول بخش بعدی که باهاش کار داریم یک ابزاری هست که بتونیم لاگ هارو مرتب کنیم که fluentd یا logstash استفاده می کنیم این ابزار شما خیلی ساده می تواند بهشون بگید که هر لاگ تو چه دسته بندی بزاره یا کجا لاگ رو نیاز داریم ولی سعی کنید قبل استفاده از این ابزار خودتون یک ابزار شبیه اینا تولید کنید تا خودتونو محک بزنید
- هدف : ساخت یک سرویس لاگگینگ برای راحت کردن مسیر پیدا کردن مشکل و رفع آن
- منبع: داکیومنت رسمی سایت الستیک و همچنین کانال یوتیوب edureka!
- تمرین: مانند مانیتورینگ ساخت یک استک elk برای ورد پرسی که روی داکر سوارم بالا آورده اید
آشنایی با kubernetes :
کوبرنیتیست خیل خیلی دنیا بزرگی که واقعا باید برای زمان بزارید و بخش خیلی خیلی بزرگیش تو کار یاد می گیرید و داخل هر ورژنش کلی فیچر جدید اضافه می کنه و واقعا جذاب و سخته من برای شروع با ویدیو ها کانال TechWorld with Nana شروع کردم و بعد کتاب The Complete Kubernetes Guide سایت و کانال های یوتیوب ردهت و ibm و گوگل خیلی خیلی مفیدن و کتاب Kubernetes Up & Running خیلی کمکتون میکنه دریایی خیلی بزرگی ازش نترسید اگر خیلی زمان میبره یادگیرینش
- هدف : ایجاد یک زیرساخت کوبر نیتیست و قابل اطمینان کردن آن و استفاده از ابزار های جانبی کوبرنیتیست
- منبع: کتاب kubernetes up and running کانال یوتیوب google cloud tech
- تمرین: تبدیل کل اپپ داکر سوارمی به کوبر نیتیست و ست کردن کران جاب ها برای بک آپ گیری از ورد پرس و دیتا بیس
خورده ریز هایی که بهتره باهاشون کمی :
کار کردن و آشنایی با ابزاری مثل rabbit Mq , apache kafka , MinIO , ceph بهتره داشته باشید
این اولین پروژه بزرگی که تو دوره انجام دادم
تو این پروژه برای اینکه من توی جنگو عمق تر بودم با جنگو یا هر ابزار دیگه یک وب اپ نوشتم و فرانشو وصل کردم به یک vue و بعد فقط آدرس ادمین جنگو از بیرون قابل دیدن بود غیر این صورت 403 می داد و همه آدرس های ویو اما از بیرون میشد دید همه اینها داکرایز شدن و روی کوبرنیتیست اومدن بالا دیتابیس پوستگرس ، گیت لب و پرومتئوس و گرافانه با داکر کامپوز اومدن بالا و از همه جا دیده می شدن بخش کانفیگ های و ابزار مورد نیاز با یک فایل انسیبل انجام شد و با گرافنا یک آلرت برای استورج ست شده بود برای انجین ایکس هم مثل پروژه بالا ip لیست انگلیس رو ( چو می تونستم تست کنم شما هر رنج آی پی که می تونید تست کنید این کارو کنید ) بستم و 403 بر می گردوند یک اسکریپت پایتونی هم نوشتم که به صورت رندوم به اندپوینت ها ریکوئست بزنه برای کدام یک ic با گیت لب راه انداختم توی این پروژه گیت لب و انسیبل برام جدید بود که این سری ویدیو های آموزشی من براش پیشنهاد می دم gitlab , ansibleپروژه نهایی:
پروژه نهایی که من همراه با یکی از دوستام انجام دادم چند بخش بود اولیش و پر چالش ترینش نوشتن یک اپراتور برای کوبر نیتیست بود که برای نصب یک دیتابیس بود که شما نوع دیتابیس رو بهش می دادید که مانگو باشه یا mysql و بعد اون همه کار ها مثل ساخت پاد و سرویس و پی وی سی انجام میداد علاوه بر اون یک cli برای دیتابیس هم می آورد بالا این کار رو با استفاده از لایبری پایتونی kopf
پروژه بعدی ما بک آپ گرفتن از etcd که یک جور دیتابیس شما در نظر بگیرید که کانفیگ های کوبر نیست و همه اطلاعات رو نگه میداره به صورت منظم بود که ما این کارو با پایتون کردیم و یک کران جاب براش نوشتیم تا منظم این کار انجام شه
یک کار عملیاتی دیگه هم داشتیم که بالا آوردن یم efk بود و فیلتر کردن یک سری از لاگ ها یک پروژه تحقیقاتی هم داشتیم راجب ceph بهترین روش استفاده از آون داخل سناریو های مولتی زون برای اینکه بدونید این سناریو چه جوری هندل می کند ویدیوهای این کانال ببینید تا هم با این سناریو و هم با ceph بیشتر آشنا شید
کلام آخر :
تو این زمینه کنار دانستن تکنولوژی ها دانستن رفتار کاری و آشنایی بیشتر با اینکه قراره زندگیتون چه جوری پیش بره تو این شغل خیلی مهمه و ممکنه اولش کمی شکه شید سعی کنید بیشتر تمرین کنید ممکنه تکنولوژی ها به سرعت تغییر کند و باگ های امنیتی توشون به وجوب بیاد برای همین موضوع سعی کنید حتما از اخبار روز این دنیا دور نمونید باید حتما حتما مهارت زبان انگلیسیمون قوی کنید به خصوص در زمینه خواندن و نوشتن و بهتره این 3 کتاب رو شروع کنید خوندن که برای گوگل هست و توش کلی سناریو یاد می گیرید و چیز هایی رو که تو دنیا واقعی بهش بر می خورید حتی اینکه با تیمتون چه جوری رفتار کنید قبل ورود تو این زمینه باید با خودتون کنار بیاید که تو این زمینه آن کال بودن و وظیفه و مسئولیت تون معمولا از بقیه تیم ها بیشتره و همچنین وسعت دانشتونم بیشتره کد نویستونو سعی کنید قوی کنید و کد تمیز بنویسید ولی وسواس نداشته باشید می توانید از کتاب های The Clean Coder , Clean Code,Clean Architecture از Robert Cecil Martin استفاده کنید ولی یادتون باشه همیشه این قوانین درست کار نمیکنه ممکنه اگر بخواید روی کد های قدیمی تغییراتی بدید که از این قوانین استفاده کنه تبدیل شه به یک مشکل خیلی خیلی بزرگ وقتی وارد این زمینه میشید ممکنه یک خراب کاری هایی خیلی بزرگ کنید سعی کنید این خراب کاری ها چه بزرگ چه کوچیک از تیمتون پنهان کنید و نترسید
edureka!
Geek's Lesson
Google Cloud Tech
IBM Cloud
LearnLinuxTV