Свой NPM репозитарий Verdaccio + GitLab + Docker

от автора

С чего все началось

Требовалось кешировать используемые в разных проектах NPM пакеты (+ хранить свои) на отдельном сервере.

Было решено делать это с помощью репозитария Verdaccio (по нему есть достаточно хорошая офф. дока), крутиться это все должно в Docker, а разворачиваться GitLab CI/CD.

Т.к. реализация данной схемы заняла у меня некоторое время (Хотелось бы и по меньше), решил написать короткий туториал по этой теме, с описание нюансов, которые для меня казались не очевидными.

Цель

  • Бесперебойная работа разработчиков над приложениями. Вне зависимости от внешних обстоятельств.

  • Сборка проектов по CI/CD должна происходить с использование локального NPM репозитария

И так приступим.

Что нам понадобится

  • Сервер на котором будет крутиться наш Verdaccio (Ubuntu, Docker, Docker-compose), он же целевой сервер

  • Сервер с GitLab (В нашем случае отдельный, там хранится собранный образ Verdaccio с нашими Конфигами)

Описание Установки Docker + Docker-compose опущу намеренно, ибо описание данного процесса великое множество, в том числе и на Хабре.

Далее пошагово

Шаг первый

Создаем проект Verdaccio, создаем структуру и файлы.

Структура проект

Структура проект

.gitlab-ci.yml — конфигурация pipeline для Build и Deploy нашего образа Docker Verdaccio на целевой сервер.

Verdaccio/config.yaml — свой конфиг файл, со следующим содержанием

storage: /verdaccio/storage/data # Где хранинится КЕШ пакетов и собственные пакеты plugins: /verdaccio/plugins # Где хранинятся Плагины к Verdaccio, у нас не используются web:   title: Verdaccio auth:   htpasswd:     file: /verdaccio/storage/htpasswd # Тут хранятся логины и пароли(в кодировке) все пользователей     max_users: 100 uplinks:   npmjs:     url: https://registry.npmjs.org/     cache: true packages:   "@*/*":     access: $all     publish: $authenticated     unpublish: $authenticated     proxy: npmjs   "**":     access: $all     publish: $authenticated     unpublish: $authenticated     proxy: npmjs server:   keepAliveTimeout: 60 middlewares:   audit:     enabled: true log: { type: stdout, format: pretty, level: http } 

Verdaccio/docker-compose.yml — файл для развертывания в docker через docker-compose

version: "3.7" services:   verdaccio:     container_name: 'verdaccio'     image: yourGitLabServer.com:5050/verdaccio:vedaccio # подготовленный Image     restart: unless-stopped     networks:       - node-network     environment:       - VERDACCIO_PORT=4873 #порт на котором работает Verdaccio можно менять     ports:       - 4873:4873 #порт Verdaccio внутренний : порт по которому он будет доступен из вне     volumes:       - /var/verdaccio/storage:/verdaccio/storage  networks:   node-network:     driver: bridge 

Тут /var/verdaccio/storage — Нужно предварительно создать каталог на целевом сервере и назначить на него владельца и группу, в противном случае будет ошибка прав.

chown -R 10001:65533 /var/verdaccio/storage

Verdaccio/Dockerfile — Докер файл по которому Билдим свой образ Verdaccio

Тут все просто, офф образ Verdaccio + копируем свой конфиг

FROM verdaccio/verdaccio:5.6.0 ADD config.yaml /verdaccio/conf/config.yaml

Шаг второй

Развертывание проекта на целевом сервере

Далее схематично опишу, весь процесс:

  1. Заливаем наш проект на GitLab

  2. Запускаем сборку образа (Build)

  3. Деплоим наш образ Verdaccio на целевой сервер

  4. В каталоге /var/verdaccio/ выполняем команду

docker-compose up -d

Переходим в браузере по пути http://IP Вашего целевого сервера:4873/

И наблюдаем интерфейс

Шаг третий

Настраиваем наш проект, что бы он работал через наш Verdaccio, для этого в проекте в терминале выполняем команду:

npm set registry http://10.0.1.149:7777/ --location project

Или

Создать/редактировать в проекте файл .npmrc (Расположение рядом с файлом package.json и где формируется папка node_modules)в нем должна быть строка: registry=http://IP Вашего целевого сервера:4873/

Далее чистим Кеш NPM на локальном компе, что бы пакеты подгрузились в Verdaccio, для этого выполняем команду

npm cache clean --force

Удаляем папку node_modules если она имеется, и выполняем npm install

После загрузки пакетов, они так же будут загружены в кеш Verdaccio по пути: целевой сервер — var/verdaccio/storage/data

Выводы

При такой организации, все проекты которые разрабатываются на локальных компах разработчиков, собираются и деплоятсяпо CI/CD будут работать через наш Verdaccio, что поможет нам избежать проблем с возможной временной недоступностью пакетов.

П.С.

Для развертывания всего выше описанного использовались материалы:

Официальной документации Verdaccio

Так же статей с Хабры, за что огромное им спасибо:

https://habr.com/ru/articles/427069/

https://habr.com/ru/articles/453614/

https://habr.com/ru/articles/657881/

К сожалению в вышеуказанных статьях не нашел исчерпывающего ответа на свои вопросы, по этому написана текущая статья.


ссылка на оригинал статьи https://habr.com/ru/articles/739298/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *