在 AWS EC2 上建置 Verdaccio 排雷記
環境以及使用版本
- AWS EC2, Kubernetes Version: 1.21
- Verdaccio, Version: v5.8.0
為什麼選擇 Verdaccio
Verdaccio
是義大利文的棕綠、橄欖綠的意思,唸法: ver搭起偶,念起來潮度百分百,而且同事聽不懂你在說什麼。
這個工具是一套開源的 NPM 的套件包管理工具 (Registry),假設企業內部有些自有的 JavaScript 套件只能放在內部做管理,就可以自建這個 NPM Registry。假設企業內部有用 GitHub
或 GitHub Enterprise
,也可以使用 GitHub NPM Registry
,比較詳細的介紹以及使用方式可以參考這篇 - GitHub - Working with the NPM Registry,要注意的是如果你的專案設定是 private
就無法使用這個功能。本次安裝 Verdaccio
純粹是因為帳號可以獨立出來,不需要跟 GitHub
綁定。
關於 Verdaccio
的介紹,網路上有非常多的文章,本機安裝和基本的操作可以看一下這一篇 - 神Q超人 - 用 Verdaccio 快速建立專屬的 private npm proxy 並部署到 Heroku 上! 本篇是紀錄安裝在企業內部環境時可能會踩到的雷,還有一些建置時會需要考量的點。
如果是用 EC2
安裝的話,架構大概會長這樣:
ALB
可以自行替換成Nginx
等他牌Load Balancer
EFS
可以替換成EBS
或其他NAS
服務 (需要注意的是,EBS
一次只能給一台EC2
掛載,若要建構多個EC2
instances 做負載均衡的話,請使用EFS
)
建置過程
除去建置 Nginx
以及添加域名等工作,純安裝大概可以分為四個步驟:
- 建置 ec2
- 安裝 NodeJS
- 安裝 Verdaccio, pm2(Optional)
- 修改設定檔,以 daemon 的形式運行 Verdaccio
首先我是參考 Medium - Free Private NPM with Verdaccio and AWS 這篇文章作為安裝的步驟依據,中間根據自己環境加以修改:
1 | 安裝 NodeJS, Verdaccio 以及 pm2 |
安裝完畢,照著說明加入使用者就可以開始上傳 NPM 套件了,非常方便喔!
需要注意的一些設定
雖然安裝看起來很簡單,但實際上還是花了我不少時間,主要是在排除靜態資源顯示不出來的問題…,結果發現是域名要寫在環境變數裡,只能說文件要好好看XD
這是 Verdaccio
的服務單位 (Service Unit)
設定檔,假設 Daemon 跑不起來時,可以試著依照錯誤調整 Restart 的參數看看,也可以調整設定檔位置:
1 | [Unit] |
這個是環境變數的設定檔:
1 | [Service] |
記得要在設定檔中開放所有連線,把 localhost
改成 0.0.0.0
:
1 | listen: |
如果有覆寫路徑的需求的話,可以在設定檔裡的 url_prefix
加入覆寫的路徑 (subpath)
:
1 | # if you use nginx with custom path, use this to override links |
歡迎一起加入 Verdaccio 的翻譯行列
我覺得 Verdaccio
蠻好用的,在 GitHub
上面星星數有一萬三千多顆,如果能夠貢獻到的話,老年也可以跟孫子女們話當年(?)。如果想要對開源專案有所貢獻 (contribution) 的話,翻譯文件或是使用者介面算是最平易近人的貢獻方式了,而且這個專案使用的翻譯協作工具也提供蠻好的使用者體驗,所以如果有人想一起加入翻譯這個專案的話,歡迎加入翻譯行列喔!
Reference
🍀 神Q超人 - 用 Verdaccio 快速建立專屬的 private npm proxy 並部署到 Heroku 上!
🍀 StackOverFlow - How to yum install NodeJS on Amazon Linux
🍀 GitHub - Working with the NPM Registry
🍀 Medium - Free Private NPM with Verdaccio and AWS
🍀 Verdaccio 官方文件 - Overriding the Public URL
🍀 Verdaccio 翻譯專案
🍀 [Tsung’s Blog - Linux systemd 寫 可自動啟動的 Daemon Service](https://blog.longwin.com.tw/2018/02Linux systemd 寫 可自動啟動的 Daemon Service/linux-systemd-auto-start-daemon-service-2018/)
🍀 How to resolve start limit hit
🍀 使用verdaccio 搭建 私有npm库,使用nginx 代理https域名遇到的一些问题总结
🍀 環境變數使用方式大全
🍀 Verdaccio 官方文件 - Reverse Proxy
🍀 How to set environment variable in systemd service