در این مجموعه یک سرور Mirror محلی میسازیم: یک نسخهی محلی از مخازن package که داخل شبکهی خودتان قرار میگیرد. وقتی اینترنت در دسترس است، این سرور packageها را از بالادست میگیرد و بهروز نگه میدارد؛ و وقتی دسترسی به اینترنت قطع میشود، همهی سیستمهای داخلی همچنان میتوانند وصلههای امنیتی و packageها را از همین Mirror دریافت کنند. این یعنی حتی هنگام قطعی اینترنت، بهروزرسانیهای امنیتی متوقف نمیشوند.
محدودهی این مجموعه
این مجموعه دربارهی دورزدن فیلترینگ یا دسترسی به محتوای مسدودشده نیست. تنها هدف آن این است که سرورها و سیستمها بتوانند وصلههای امنیتی و packageهای نرمافزاری موردنیازشان را، بهویژه در زمان قطعی اینترنت، از یک منبع محلی و قابلاعتماد دریافت کنند.
چرا یک Mirror محلی؟
- تابآوری در قطعی اینترنت: وصلههای امنیتی و packageها حتی هنگام قطع بودن اینترنت بینالملل در دسترس میمانند.
- دسترسی پایدار به packageها: گاهی مخازن رسمی کند یا در دسترس نیستند؛ Mirror یکبار packageها را میگیرد و بقیهی سیستمها از همان نسخهی محلی استفاده میکنند.
- سرعت و صرفهی پهنایباند: دهها سرور بهجای دانلود جداگانه، از یک منبع محلی و سریع میگیرند.
- کنترل و یکدستی: همه از یک نسخهی مشخص و بازبینیشده استفاده میکنند.
معماری
ایدهی اصلی، جداکردن «جمعآوری» از «تحویل» است. یک ناحیه packageها را از اینترنت میگیرد (هر وقت که اینترنت در دسترس باشد)، و ناحیهی محلی همیشه و مستقل از اینترنت، آنها را به کلاینتها میدهد:
پیشنیازها
یک ماشین لینوکسی (فیزیکی یا مجازی) با فضای دیسک کافی برای نگهداری packageها. توصیه میشود از یک ماشین مجازی استفاده کنید تا در صورت نیاز بتوانید آن را پاک کرده و از نو بسازید. در این بخش از Ubuntu استفاده میکنیم، ولی همین روش روی هر توزیع لینوکسی کار میکند.
راهاندازی میزبان Mirror
پایهی هر Mirror یک وبسرور ساده است که یک پوشه را روی HTTP در اختیار میگذارد؛ بعداً بخشهای مختلف (packageهای سیستمعامل، رجیستری، PyPI و ...) همین پوشه را پر میکنند. nginx را نصب میکنیم و پوشهی /srv/mirror را با فهرست خودکار (autoindex) سرو میکنیم:
/srv/mirror با autoindex. تست پیکربندی موفق است و سرویس بارگذاری میشود.تحویل به کلاینتها
حالا هر کلاینتی روی شبکه میتواند فایلها را با HTTP ساده از Mirror بگیرد. نکتهی مهم این است که این مسیر تحویل کاملاً محلی است و به اینترنت بینالملل کاری ندارد؛ پس چه اینترنت وصل باشد چه قطع، یکسان کار میکند:
curl و wget از Mirror میگیرد. همین مسیر ساده، پایهی تحویل packageها در بخشهای بعد است.آزمایش از یک کلاینت روی شبکهی داخلی
برای اطمینان از اینکه این طرح واقعاً هنگام قطعی اینترنت کار میکند، یک ماشین دوم را روی یک شبکهی کاملاً داخلی و بدون دسترسی به اینترنت راه میاندازیم و از روی آن Mirror را میآزماییم. نتیجه دقیقاً همان چیزی است که میخواهیم: دسترسی به اینترنت مسدود است، اما همین کلاینت بدون هیچ مشکلی از Mirror روی شبکهی محلی فایل میگیرد.
10.10.0.1 فایلها را میگیرد. این همان رفتاری است که در زمان قطعی اینترنت به آن نیاز داریم.جمعبندی و بخش بعد
در این بخش دیدیم چرا یک Mirror محلی برای تابآوری در قطعی اینترنت حیاتی است، معماری دو بخشی آن را مرور کردیم و میزبان Mirror را با nginx راه انداختیم. تا اینجا Mirror یک پوشهی خالی را سرو میکند؛ از بخش بعد آن را پر میکنیم.
در بخش بعد مهمترین قطعه را میسازیم: Mirror packageهای سیستمعامل (apt و dnf) تا وصلههای امنیتی حتی در قطعی اینترنت در دسترس بمانند.
بخشهای این مجموعه
- بخش ۱: مفاهیم، معماری و راهاندازی میزبان Mirror (همین بخش)
- بخش ۲: Mirror packageهای سیستمعامل (apt و dnf)
- بخش ۳: رجیستری کانتینر محلی
- بخش ۴: packageهای زبانها؛ PyPI و npm
- بخش ۵: چارتهای Helm و ایمیجهای سیستم
- بخش ۶: اتوماسیون همگامسازی و بهروزرسانی خودکار