هفته پیش برای جلسه دوم کارگاه داکر (همایش آزاد رایانش ابری) یک نمونه پروژه باحال درست کردم، سمت کاربر با Reacjs نوشته شده بود، بعد موقعی که می‌خواستم ایمیج داکر ازش بسازم، یه عالمه پکیج npm در آن استفاده شده بود که باید دوباره دانلود می‌کرد، برای دور زدن این مشکل ( با go-bind-data ) از فایل باینری پروژه یک داکر ایمیج ساختم، خوب این راه‌حل خوبی به نظر می‌رسد چرا چون حجم ایمیج خیلی کم شد (چیزی حدود ۱۱ مگ) ! ولی مشکلی که هست در بحث Continuous integration باید کل پروژه به صورت اتوماتیک ساخته شده، تست و اجرا شود و در صورت اوکی بودن، باینری آن تولید و بعد ایمیج آن ساخته و به رجیستری منتقل و اجرا شود.

از این بحث‌ها که بگذریم، مشکل گرفتن ماژول‌های npm چه در CI و چه به صورت local در ایران عزیزمون به خاطر بحث فیلتر‌نت همیشگی بوده، بهترین راه‌حل موجود این است که شما یک NPM cach server ایجاد کنید، خوشبختانه راه اندازی چنین سرویسی برای خودتان خیلی ساده‌ست، مخصوصاً‌ با داکر 👊

اول باید تصمیم بگیرید می‌خواهید این کش سرور کجا باشد، هر جایی که باشد مزایای خودش رو دارد، مثلاً برای شرکت‌هایی که چندین توسعه‌دهنده دارند بهترین راه این است که یک کش سرور روی سرور داخلی شرکت بیارند بالا، و بعد روی یکی از سرورهای خارج ایران هم یک کش سرور دیگه‌ای بیاورند بالا تا کش سرور داخلی به آن وصل بشود، این جوری دیگه به کل مشکل دریافت ماژول‌های npm در شرکت حل خواهد شد، برای مصارف شخصی نیز اگه یه سرور شخصی دارید سه سوت با داکر کش سرور رو بیارید بالا و ازش استفاده کنید 😎

آقای کیوان فاتحی داکر ایمیج sinopia رو آماده کرده‌اند، پس در سه سوت می‌شه با داکر روی سرور آورد بالا 😊

docker run --name sinopia -d -p 4873:4873 keyvanfatehi/sinopia:latest

بعد در ترمینال کلاینت برای ست کردن رجیستری

npm set registry http://SERVER_IP_ADDRESS:4873

حالا هنگام دریافت ماژول‌های npm اگر قبلاً ماژول مورد نظر داخل سرور بود، از آنجا دریافت می‌کنید اگه هم نبود اول خودش سریع می‌گیره و بعد به سیستم شما انتقال می‌دهد ! چی از این راحت‌تر و بهتر 😬

راستی با استفاده از این روش می‌توانید ماژول‌های خصوصی npm نیز داشته باشید، برای اطلاعات بیشتر می‌توانید به مخزن آن مراجعه کنید.