طرح مساله
قبلا مثلا در دهه 80 و اوایل 90 برنامه نویسی وابسته به اینترنت نبود. یک سری سی دی هایی در فروشگاه های کامپیوتری بود که با آنها می شد ویژوال استودیو یا پاسکال یا متلب یا پایتون یا دیتابیس ها را نصب کرد. این همه ابزار هایی بود که لازم داشتید. برای اینکه بدانید چطور می توانید برنامه نویسی کنید هم کتاب های قطوری بود که معمولا توسط آقایی به نام قُلزم ترجمه شده بود و همه مستندات و راهنما ها را در خود داشت. آخر کار هم فایل های کامپایل شده یا سورس کد را روی فلش یا سی دی می ریختید و به مشتری یا استاد دانشگاهتان می دادید.
اما در این روز ها با این کثرت کتابخانه ها و ابزار ها و تحولات سریع دنیای نرم افزار و توسعه، عدم دسترسی به اینترنت برای یک برنامه نویس عملاً مترادف است با بیکاری، دریدن گریبان و سر گذاشتن به بیابان. من هم تقریبا تا اواخر اسفند در همین حال بودم امّا به مرور دیدم مثل اینکه هنوز می شود کارهایی کرد. در این مدّت یکی از دوستان یک پروژه اتوماسیون جمع آوری و آنالیز داده های یک گلخانه بزرگ را به من پیش نهاد داده بود.
برای نمونه اولیه می خواستم همه چیز کمینه باشد و تا آنجایی که می شود به جز بخش لاجیک اختصاصی پروژه، از ابزار های آماده استفاده کنم. برای این هدف به گیت، NPM، داکر، ریپازیتوری پکیج های اوبونتو و توزیع های خود اوبونتو نیاز داشتم. در این نوشته می خواهم چیزهایی که در باره راه حل های توسعه در نت ملّی فهمیدم را به اشتراک بگذارم.
ابزارهای عمومی
گیتلب چابکان
گیتلب چابکان یک نسخه کامل و داخلی از GitLab است که در دیتاسنتر ایران میزبانی میشود. این سرویس امکان مدیریت کد، CI/CD، Issue Tracking و تمامی قابلیتهای GitLab را برای تیمهای توسعه فراهم میکند، حتی در زمان قطعی یا محدودیت دسترسی به سرویسهای خارجی. همه چیز گیتلب چابکان عالیه و تا الان که کاملا پایدار بوده. تنها مشکلی که داره ایناست:
- نداشتن Runner عمومی و رایگان برای اجرای خط لوله های CI/CD که عملاً استفاده از این خط لوله ها رو خیلی پیچیده می کنه.
- نداشتن بخش Pages که اگر بود می تونست خیلی از مشکلات نبود مستندات و تِک بلاگ ها رو جبران کنه.
آدرسش هست:
| |
مجموعه چابکان امکانات دیگه ای رو هم برای شرایط نت ملّی فراهم کرده که می تونید توی صفحه اختصاصی شون ببینید:
| |
هوش مصنوعی گپ جی پی تی
مشکل مستندات رو می شه به راحتی با مدل های زبانی برطرف کرد. گپ جی پی تی(طبق بررسی مختصر من) بهترین سرویسی بود که می شد از این مدل ها استفاده کرد. هم مدل های پولی داره و هم یک مدل رایگان که به نظرم در اکثر موارد کافی هست. البته قیمت مدهای پولی هم واقعاً در این شرایط منصفانه است:
| |
دسترسی به مستندات
نمی دانم چطور این سایت از فیلترینگ جامانده با اینکه ظاهرا ایرانی هم نیست ولی خب یه سری از کتابخانه ها و زبان ها رو می شه اینجا مستنداتشون رو دید:
| |
محیط توسعه VS Code
خود VS Code رو می تونید از اینجا با ترافیک نیم بها دانلود کنید:
| |
امّا اگر کاربر اوبونتو هستید کار به این آسونی نیست. من نتونستم پکیج نصبی واسه VS Code داخل سایت های دانلود ایرانی پیدا کنم. همگی از هاست پکیج های لینوکس انگار صرف نظر کردن و فقط به سایت های خارجی لینک دادن.
امّا روش جایگزینی که پیدا کردم از سایت https://devneeds.ir بود. برای این کار کافیه ریپوزیتوری VS Code رو به پکیج منیجر اوبونتو اضافه کنید و بعد اون رو از ریپوزیتوری نصب کنید:
- اضافه کردن ریپازیتوری به لیست سورس ها:
| |
- نصب VS Code:
| |
همچنین برای نصب افزونه های می تونید از مخزن افزونه های همین سایت استفاده کنید:
| |
فوق العاده است این سایت :)
فقط یکم سرورشون کنده و بعضی مواقع می خوابه. روش کار اینجوریه که افزونه ای رو که می خواید دانلود می کنید و بعد از توی VS Code کامند پالت رو باز می کنید (Ctrl+Shift+P) و بعد سرچ کنید:
| |
تامام.
راه اندازی NodeJS
نصب NodeJS
کسانی که Nodejs کار می کنند معمولا برای مدیریت نسخه ها از ابزاری به اسم NVM استفاده می کنند. متاسفانه من راهی برای نصب و استفاده از اون در نت ملّی پیدا نکردم. بنابراین مجبوریم به صورت دستی نصب کنیم. توصیه می کنم حتما نسخه LTS رو نصب کنید. نسخه LTS در حال حاضر 24 هست.
برای نصب NodeJS در ویندوز می تونید از اینجا اقدام کنید:
| |
برای نصب در اوبونتو هم می توانید از لینک های زیر بسته فایل نصبی رو دانلود و نصب کنید:
| |
مراحل نصب اینطوری هست که فایل رو از حالت فشرده خارج می کنید و آدرس فایل های باینری رو به آدرس های عمومی ترمینال تون اضافه می کنید:
| |
حالا این دستور رو به فایل ~/.bashrc یا ~/.zshrc اضافه کنید تا همه جای ترمینال بتونید دسترسی داشته باشید:
| |
و اینجوری می تونید تست کنید:
| |
برای توسعه NodeJS حداقل افزونه هایی که لازمه نصب شه روی VS Code به نظرم ایناست که روش اضافه کردن اونها رو بالاتر توضیح دادم:
| |
دسترسی به NPM
راه حلّی که برای دسترسی به پکیج ها در نت ملّی وجود داره اینه که از یکی از مخزن های ایرانی که کپی داخلی از مخزن اصلی هست استفاده کنید. سرویس های ایرانی متعددی مخزنشون رو به اشتراک گذاشتن:
| نام میرور | آدرس |
|---|---|
| رانفلر | https://mirror-npm.runflare.com |
| لیارا | https://package-mirror.liara.ir/repository/npm |
| پردیس | https://mirrors.pardisco.co/npm |
| مگانهاب | https://hub.megan.ir/npm |
| چابکان | https://mirror2.chabokan.net/npm |
| ایرانسرور | https://mirror.iranserver.com/npm |
| وزارت ارتباطات | https://archive.ito.gov.ir/npm |
ران فلر خیلی مخزن پایداری هست ولی متاسفانه کاملا مجانی نیست. بعد از اون به نظرم لیارا شرایط مناسب تری داشت. بعضی پکیج ها مفقودند یا به روز نیستند که در این حالت باید مخزنتون رو عوض کنید.
برای تنظیم یک میرور به صورت سراسری که npm به طور پیشفرض از آن استفاده کند، دستور زیر را اجرا کنید:
| |
برای تست تنظیمات می تونید از دستور زیر استفاده کنید:
| |
راه اندازی Ubuntu
ممکنه برای توسعه مایل باشید از همون ویندوز استفاده کنید امّا برای استقرار نرم افزار و راه انداز سرور حتماً گذارتون به دبِاغ خونه لینوکس می افته. لینوکس پایدارترین محیط استقرار سرویس های تحت شبکه هست و اکثر شرکت ها از اون استفاده می کنند.
توزیع متداول لینوکس چه برای دسکتاپ و چه برای سرور -حداقل از نظر من- اوبونتو (Ubuntu) هست.
نصب Ubuntu
سرویس سرور های شاتل، فایل ISO همه نسخه های اوبونتو رو اینجا قرار داده که می تونید دانلود کنید. توجه کنید که حتما نسخه LTS رو اگر مورد خاصی ندارید نصب کنید نه نسخه آخر رو. نسخه LTS اوبونتو در حال حاضر 24 هست:
| |
بعد از دانلود فایل ISO اگر برای ماشین مجازی هست که در نرم افزار کافیه اون رو انتخاب کنید. اگر هم می خواید روی یه ماشین فیزیکی نصب کنید باید اون رو با نرم افزار هایی مثل Rufus روی فلش بنویسید و منتقل کنید.
تنظیم مخزن
مخازن اصلی اوبونتو در سرورهای خارج از ایران قرار دارند و به دلیل محدودیتهای نت ملّی، دسترسی به اونها در حال حاضر وجود نداره. خوشبختانه راهحل سادهای برای این مشکل وجود دارد و آن استفاده از میرورهای ایرانی است. میرورهای ایرانی کپی کاملی از مخازن اصلی اوبونتو هستند که در سرورهای داخل ایران نگهداری میشوند و سرعت دانلود از آنها بسیار بالاتر از مخازن اصلی است.
مخازن ایرانی متعددی در دسترس هست:
| نام میرور | آدرس اصلی |
|---|---|
| آروانکلاد | mirror.arvancloud.ir |
| ایرانسرور | mirror.iranserver.com |
| رانفلر | mirror-linux.runflare.com |
| رسانگار | mirror.rasanegar.com |
| سینداد | ir.ubuntu.sindad.cloud |
| شاتل | mirror.shatel.ir |
| امینیدیسی | mirror.aminidc.com |
| پارسپک | mirror.parspack.com |
| افرانت | mirror.afranet.ir |
| صبانت | mirror.sabaynet.ir |
در بین این ها به نظر ایران سرور و آروان کلاد شرایط بهتری داشتن. هر کدام از این سرویس ها آموزش نحوه استفاده از مخزنشون رو دارن. مثلا برای آروان و ایران سرور می تونید به اینجاها مراجعه کنید:
| |
راه اندازی Docker
نصب داکر
پکیج های نصبی مرتبط با داکر در مخزن عمومی اوبونتو نیست و برای نصبش باید کلیدهای مخزن داکر نصب بشه که روی سرور اصلی داکر هست و در نت ملّی به اون دسترسی نداریم. امّا هنوز هم راه حلّ های داخلی هست. در ادامه مراحل نصب داکر رو روی نت ملّی با کمک ریپازیتوری وزارت ارتباطات جلو می بریم:
- بروز رسانی لیست بسته ها:
| |
- ابزارهای زیر رو نصب کن:
| |
- کلید مخزن داکر رو اضافه کن:
| |
- مخزن رو اضافه کن:
| |
- داکر رو نصب کن:
| |
- تست کن:
| |
تنظیم رجیستری
در شرایط عادّی دسترسی ایران به رجیستری ایمیج های داکر تحریم شده بود ولی حالا در شرایط نت ملّی فقط باید به این تحریم خندید:)
شرکت های متعددی کپی داخلی رجیستری عمومی داکر رو در اختیار گذاشتن که بشخصه از همه شون متشکرم. به نظرم رجیستری مگان هاب و ابرآروان از همه کامل تر و بروز تر بود. برای آشنایی با نحوه تنظیم داکر بر روی این رجیستری ها می تونید به سایت های خود این سروری ها مراجعه کنید:
| |
تکمله
نت ملّی خوب است یا بد؟ احتمالا فکر می کنیم همه باید بگوییم بد. امّا باید بین دو چیز تفکیک قائل شویم: نت ملّی یک چیز است و قطعی اینترنت یک چیز دیگر. آنچه که احتمالا بد است قطعی اینترنت است. تنها این جنبه شرایط کنونی است که قبیح به نظر می سد.
نت ملّی به نظر من قدرت ماست. مگر چند کشور در دنیا زیر ساخت ابری دارند؟ موتور جستجوی داخلی دارند؟ پیامرسان داخلی دارند؟ آمریکا، چین و روسیه. فکر نمی کنم به جز این سه گزینه قابل اعتنایی به جز ایران باشد. ولی ما هم داریم.
دشمن بزرگ ملّت را بالا می کشد، بزرگ می کند. ملّت را مجبور می کند در ابعاد او ظاهر شود. مگر مدرنیته و چهارصد سال عقب افتادگی شرق از غرب مساله کلان ما نیست؟ چرا نباید به این شرایط به عنوان مجالی برای جبران آن همه درجا زدن نگاه کرد؟
آمریکا بزرگ است؛ قبول! بگذاریم در این فرصت پیش آمده ما هم بزرگ شویم. چرا باید از ملّی شدن و داخلی شدن این همه ترسید؟ مگر همین چند هفته پیش در لحظه صفر حمله به فرودگاه متروک اصفهان، همه تجهیزات شرکتهای سیسکو (Cisco) جونیپر (Juniper) و فورتینت (Fortinet) و دستگاههای مبتنی بر سیستمعامل میکروتیک (MikroTik OS) بهطور هماهنگ و ناگهانی از مدار خارج نشدند و سیستم عامل آنها قفل نشد؟ مگر ماه پیش آمریکا ورود روتر هایی که در آمریکا ساخته نشده اند را ممنوع نکرد؟ آیا لازمه پاسداری از تمدّن و زندگی در این کشور این نیست که پاسدار استقلال فناورانه این مملکت باشیم؟ پس این همه مقاومت برای چیست؟
پرسش حسّاسی است. نمی دانم؛ شاید این مقاومت حاصل رقابت ناعادلانه و ظالمانه پلتفرم های داخلی در بستر نت ملّی با رقبای خارجی در بستر اینترنت است. می توانست تنها محرّک استفاده از آپارات بستن یوتیوب نباشد. می توانست محرّک تخفیف در ترافیک داخلی باشد. می توانست محرّک استفاده از پیام رسان های داخلی فیلتر تلگرام و واتساپ نباشد و قس علی هذا. و به خاطر همین رقابت ناعادلانه است که می بینیم ملّت ایران طبق معمول در طرف مظلوم ایستاده اند و به گزینه های داخلی به عنوان یک متقلّب در بازی نگاه می کنند.
از طرفی اینکه مردم و حتّی رئیس جمهور و وزیر ارتباطات هم اختیاری در این قطع و وصلی ها وقت و بی وقت ندارند، نوعی استیصال و نا امیدی را دامن زده است. و از همه بدتر سیمکارت های سفید خودی ها که از نظر ضعیفان و غیر مرتبطان، رفتاری توهین آمیز و بی عدالتی تلقّی می شود. همه این ها باعث بوجود آمدن نوعی حس تحقیر شدگی در جامعه شده است. عقده حقارتی هر ساعت چرکین تر می شود.
تنها چیزی که می توان گفت این است که باید دلسوزان ایران و نظام، راهی برای جلب اعتماد و حفظ شان و کرامت ملّت در حکمرانی فضای مجازی بیابند. راهی که بتوان با تکیه بر آن، دستاورد عظیم نت ملّی را بگونه ای روایت نمود که مایه افتخار باشد و نه آنچنان که متاسفانه روایت غالب است زنجیری بر تن ایران.
