تا اینجا packageهای سیستمعامل و ایمیجهای کانتینر را آفلاین کردیم. اما توسعهدهندهها به چیز دیگری هم نیاز دارند: کتابخانههای زبانها. در این بخش دو Mirror محلی میسازیم، یکی برای PyPI (پایتون) و یکی برای npm (Node)، تا نصب وابستگیها هم بدون اینترنت کار کند.
نکتهی خوب
خود ابزارها هم آفلاین میآیند: در این بخش pip و node/npm را روی کلاینت از همان Mirror اپت بخش دوم نصب میکنیم. یعنی حتی برای راهاندازی محیط توسعه هم به اینترنت نیاز نیست.
Mirror برای PyPI
سادهترین و کنترلشدهترین راه این است که در حالت آنلاین، package موردنیاز و همهی وابستگیهایش را بهشکل wheel دانلود کنیم و در Mirror نگه داریم. دستور pip download خودش وابستگیها را هم میآورد:
pip3 download requests cowsay tqdm -d /srv/mirror/pypi/packages
در سمت کلاینت، pip را طوری اجرا میکنیم که بهجای اینترنت، از همین پوشهی محلی نصب کند:
pip3 install --no-index \
--find-links http://10.10.0.1/pypi/packages/ \
--trusted-host 10.10.0.1 cowsay
برای Mirror کامل PyPI
برای Mirror کامل یا انتخابی PyPI، ابزارهایی مانند bandersnatch یا devpi یک ایندکس استاندارد (PEP 503) میسازند و کلاینتها با --index-url از آن استفاده میکنند. اینجا برای سادگی از --find-links استفاده کردیم.
Mirror برای npm
برای npm از verdaccio استفاده میکنیم؛ یک رجیستری سبک npm که هم نقش Mirror و هم نقش کش را دارد. آن را با یک کانتینر اجرا میکنیم و در حالت آنلاین، packageهای موردنیاز را از طریق آن نصب میکنیم تا در کش verdaccio ذخیره شوند:
sudo docker run -d --restart=always --name verdaccio \
-p 4873:4873 verdaccio/verdaccio
npm install --registry http://localhost:4873 lodash
در سمت کلاینت، کافی است npm را به رجیستری محلی وصل کنیم. package از verdaccio میآید، بدون هیچ ارتباطی با اینترنت:
npm install --registry http://10.10.0.1:4873 lodash
جمعبندی و بخش بعد
در این بخش وابستگیهای زبانها را هم آفلاین کردیم: PyPI با wheelهای محلی و npm با verdaccio. حالا توسعهدهندهها میتوانند بدون اینترنت هم محیط را بسازند و هم کتابخانهها را نصب کنند.
در بخش بعد سراغ Kubernetes میرویم: چارتهای Helm و ایمیجهای سیستم را هم در Mirror محلی نگه میداریم تا استقرارهای کامل بدون اینترنت ممکن شوند.
بخشهای این مجموعه
- بخش ۱: مفاهیم، معماری و راهاندازی میزبان Mirror
- بخش ۲: Mirror packageهای سیستمعامل (apt و dnf)
- بخش ۳: رجیستری کانتینر محلی
- بخش ۴: packageهای زبانها؛ PyPI و npm (همین بخش)
- بخش ۵: چارتهای Helm و ایمیجهای سیستم
- بخش ۶: اتوماسیون همگامسازی و بهروزرسانی خودکار