Pull to refresh

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

Level of difficultyMedium
Reading time3 min
Views4.5K

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

Требовалось кешировать используемые в разных проектах 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/

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

Tags:
Hubs:
Total votes 4: ↑3 and ↓1+4
Comments8

Articles