С чего все началось
Требовалось кешировать используемые в разных проектах 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
Шаг второй
Развертывание проекта на целевом сервере
Далее схематично опишу, весь процесс:
Заливаем наш проект на GitLab
Запускаем сборку образа (Build)
Деплоим наш образ Verdaccio на целевой сервер
В каталоге /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/
К сожалению в вышеуказанных статьях не нашел исчерпывающего ответа на свои вопросы, по этому написана текущая статья.