- vừa được xem lúc

Hướng dẫn build service tự quản lý node packages với Verdaccio + Docker

0 0 23

Người đăng: Kha Leo

Theo Viblo Asia

Hôm nay mình sẽ hướng dẫn các bạn xây dựng một server lưu trữ private các node package sử dụng Verdaccio

Ở các dự án thực tế, chúng ta hay gặp trường hợp phải tách code thành những module riêng để có thể tái sử dụng chúng ở nhiều nơi. Khi "micro hoá" sẽ xảy ra nhiều vấn đề phải quan tâm như versions của packages, phân quyền truy cập packages, hay vừa sử dụng chung được với các packages của npmjs...Với Verdaccio, lập trình viên sẽ tiết kiệm được nhiều thời gian để làm những công việc trên.

I. Verdaccio là gì?

Verdaccio is a lightweight private npm proxy registry built in Node.js

  • Được xây dựng trên NodeJs, Verdaccio là một open source có khả năng lưu trữ những packages + packages versions với database của riêng nó và cũng có thể đóng vai trò như một proxy tới những registry khác (như https://registry.npmjs.org/).

II. Prerequisites

  • Node v12 hoặc cao hơn
  • Node package manager của bạn: npm, pnpm hay yarn (lưu ý không support _@.com)
  • Version hiện tại của Verdacccio: v5.8.0

III. Cài đặt Verdaccio

  • Chạy câu lệnh sau để install (chạy 1 trong 3 tuỳ theo npm của bạn):
    • Với npm: npm install -g verdaccio
    • Với pnpm: pnpm install -g verdaccio
    • Với yarn: yarn global add verdaccio
  • Mở terminal/cmd, kiểm tra cài đặt thành công bằng câu lệnh: verdaccio
    • Kết quả: image.png
  • Mặc định verdaccio sẽ chạy trên port: 4873, vào http://localhost:4873, giao diện của Verdaccio sẽ trông như thế này: image.png
4fun: Bạn có thể donate ủng hộ Ukraine ở header nhé =))
  • Bây giờ chúng ta đã có thể push những package được rồi

IV. Tạo 1 package sample

  • Tạo folder và đặt tên là tên package: package-sample
  • Chạy câu lệnh npm init -y
  • Sửa package.json như bên dưới: image.png
lưu ý @your-company sẽ là scope của package, mình sẽ nói trong phần sau
  • Tạo file index.js ở root folder

  • Ở đây mình thêm 1 log ở index.js thôi nhé: image.png

  • Tiếp theo chúng ta sẽ publish lên Verdaccio, trước tiên cần config registry cho package, có những cách sau:

    • Set default registry bằng command:
      - Với npm: npm set registry http://localhost:4873/
      - Với yarn hay pnpm bạn search google cú pháp nhé

    • Thêm registry chỉ khi cần, npm install --registry http://localhost:4873

    • Define trong file .npmrc (mình dùng cách này trong bài): image.png

    • Hoặc define ở field publishConfig trong package.json: image.png

  • Ở root sample-package project, chạy npm login, sau đó điền thông tin username, pass, email. Ở đây nếu chưa có username này thì Verdaccio sẽ tạo mới cho bạn: image.png

  • Chạy câu lệnh npm publish, khi deploy thành công terminal sẽ log ra cho bạn biết những thông tin về package như sau: image.png

  • Mở lại host UI của Verdaccio và kiểm tra, chúng ta thấy package đã được upload thành công: image.png

Màn hình trang chủ

image.png

Màn hình chi tiết package


V. Cài đặt package-sample từ một project khác

  • Ở một project bất kì nào đó của bạn, chạy câu lệnh: npm install @your-company/package-sample --registry http://localhost:4873
  • Package đã được cài đặt thành công: image.png
  • Import vào project hiện tại và kiểm tra log: image.png

VI. Sử dụng Verdaccio với Docker

  • Prerequisites: Đã cài đặt docker/docker-compose

  • Tạo folder service và thêm file docker-compose.yml ở root: image.png

  • Ở root project, tạo folder conf và thêm file config.yaml và file htpasswd

  • Run câu lệnh docker-compose up, docker sẽ run project trên port 4873 tạo ra folder storage ở root project. Chúng ta đã có thể publish các package lên registry. Các package được publish sẽ được lưu vào folder storage.

VII. Thêm nữa về Verdaccio

  • Config.yaml
    • Verdaccio có thể là một proxy tới registry khác: image.png
    • Authenticate và Authorization, chúng ta có thể config những user nào được access/publish package. Ví dụ bên dưới, những user login bằng teamA hoặc teamB mới có quyền publish package version mới lên Verdaccio. Access $all có nghĩa là tất cả đều có thể truy cập/download package. Lưu ý thứ tự của các packages trong config, vì các package sẽ được match từ top to bottom

image.png

  • Nếu bạn install một package không có trong storage mà ở npmjs.org chẳng hạn, server sẽ cố gắng fetch package về từ registry khác bạn đã thêm trong config (e.g. npmjs.org). Nếu npmjs.org không hoạt động, server sẽ tìm kiếm chúng trong cache. Một khi một package được install thành công, chúng sẽ được cache lại ở server cho những lần tiếp theo mà không cần fetch từ npmjs.org nữa.

Trên đây mình đã hướng dẫn các bạn xây dựng một server lưu trữ package với Verdaccio + Docker. Sẽ có bài viết deploy Verdaccio bằng kubernetes, mình sẽ bổ sung sau nhé ^^

Mục tìm kiếm đồng đội

Hiện tại thì bên công ty mình, là Hoàng Phúc International, với hơn 30 năm kinh nghiệm trong lĩnh vực thời trang. Và là trang thương mại điện tử về thời trang lớn nhất Việt Nam. Team công nghệ của HPI đang tìm kiếm đồng đội cho các vị trí như:


Với mục tiêu trong vòng 5 năm tới về mảng công nghệ là:
  • Sẽ có trang web nằm trong top 10 trang web nhanh nhất VN với 20 triệu lượt truy cập mỗi tháng.
  • 5 triệu loyal customers và có hơn 10 triệu transactions mỗi năm.

Team đang xây dựng một hệ thống rất lớn với rất nhiều vấn để cần giải quyết, và sẽ có rất nhiều bài toàn thú vị cho các bạn. Nếu các bạn có hứng thú trong việc xây dựng một hệ thống lớn, linh hoạt, dễ dàng mở rộng, và performance cao với kiến trúc microservices thì hãy tham gia với tụi mình.

Nếu các bạn quan tâm hãy gửi CV ở trong trang tuyển dụng của Hoàng Phúc International hoặc qua email [email protected] của mình nha .

Cảm ơn các bạn đã đọc.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 100

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 104

- vừa được xem lúc

Docker - những kiến thức cơ bản phần 1

Giới thiệu. Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker.

0 0 78

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 67

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 121