カテゴリー
プライベートなNPMパッケージ管理で便利なVerdaccioレジストリをConoHa VPSへお引越しする
※ 当ページには【広告/PR】を含む場合があります。
2022/12/03
☆一月277円から使用できる格安VPS☆ ConoHa VPS
準備 〜 ConoHa VPSインスタンス(Debian)にDockerを導入する
docker
docker-compose
$ curl -sSL https://get.docker.com | sh
pip3
$ sudo apt install python3-pip
$ sudo pip3 install docker-compose
sudo
$ docker ...
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=alpine&tag=edge: dial unix /var/run/docker.sock: connect: permission denied
sudo
$ whoami
hoge
#👇権限を与えたいユーザーに"hoge"の箇所を置換える
$ sudo usermod -g docker hoge
$ sudo systemctl restart docker.service
$ id hoge
#👇ユーザーにdockerの実行権限が付与されている
uid=1000(hoge) gid=995(docker) groups=995(docker),...
Ctrl + D
Verdaccioの起動テスト
docker-compose.yml
version: '3'
services:
verdaccio:
image: verdaccio/verdaccio:5
container_name: verdaccio-vps
environment:
NODE_ENV: development
ports:
- "54321:4873"
volumes:
- "./storage:/verdaccio/storage"
- "./conf:/verdaccio/conf"
volumes:
verdaccio:
driver: local
conf
config.yaml
$ mkdir conf
$ touch conf/config.yaml
config.yaml
storage: /verdaccio/storage
auth:
htpasswd:
file: /verdaccio/conf/htpasswd
algorithm: bcrypt
security:
api:
jwt:
sign:
expiresIn: 60d
notBefore: 1
web:
sign:
expiresIn: 7d
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@*/*':
access: $authenticated
publish: $authenticated
'**':
access: $all
publish: $authenticated
proxy: npmjs
middlewares:
audit:
enabled: true
logs: { type: stdout, format: pretty, level: http }
config.yaml
$ tree
.
├── conf
│ └── config.yaml
└── docker-compose.yml
$ docker-compose up
Recreating verdaccio-vps ... done
Attaching to verdaccio-vps
verdaccio-vps | warn --- config file - /verdaccio/conf/config.yaml
verdaccio-vps | info --- plugin successfully loaded: verdaccio-htpasswd
verdaccio-vps | info --- plugin successfully loaded: verdaccio-audit
verdaccio-vps | warn --- http address - http://0.0.0.0:4873/ - verdaccio/5.18.0
http://<VPSのIPアドレス>:54321
Ctrl+C
$ docker-compose down
VerdaccioのSSL対応
http
https
localhost
opensslでオレオレ認証を発行してつかう(ローカル環境のみ)
#👇confフォルダ内に認証キーを生成
$ openssl genrsa -out conf/verdaccio-key.pem 2048
#👇認証キーから秘密キーを生成
$ openssl req -new -sha256 -key conf/verdaccio-key.pem -out conf/verdaccio-csr.pem
#👇SSL認証キーを作成
$ openssl x509 -req -in conf/verdaccio-csr.pem -signkey conf/verdaccio-key.pem -out conf/verdaccio-cert.pem
config.yaml
#...
https:
key: /verdaccio/conf/verdaccio-key.pem
cert: /verdaccio/conf/verdaccio-cert.pem
ca: /verdaccio/conf/verdaccio-csr.pem
#...
$ ls -la conf/
-rw-r--r-- 1 hoge docker 1918 Nov 29 13:48 config.yaml
-rw-r--r-- 1 hoge docker 1289 Nov 29 13:41 verdaccio-cert.pem
-rw-r--r-- 1 hoge docker 1082 Nov 29 13:38 verdaccio-csr.pem
-rw------- 1 hoge docker 1675 Nov 29 13:29 verdaccio-key.pem
verdaccio-key.pem
$ sudo chmod 644 conf/verdaccio-key.pem
$ ls -la conf/
#...
-rw-r--r-- 1 hoge docker 1675 Nov 29 13:29 verdaccio-key.pem
VERDACCIO_PROTOCOL=https
version: '3'
services:
#...
environment:
NODE_ENV: development
#👇追加
VERDACCIO_PROTOCOL: https
#...
docker-compose up
npm
$ npm --version
8.19.2
$ npm adduser --registry https://xxx.xxx.xxx.xxx:54321
npm WARN adduser `adduser` will be split into `login` and `register` in a future version. `adduser` will become an alias of `register`. `login` (currently an alias) will become its own command.
npm notice Log in on https://xxx.xxx.xxx.xxx:54321/
npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT
npm ERR! errno DEPTH_ZERO_SELF_SIGNED_CERT
npm ERR! request to https://xxx.xxx.xxx.xxx:54321/-/v1/login failed, reason: self-signed certificate
npm ERR! A complete log of this run can be found in:
npm ERR! /home/node/.npm/_logs/2022-11-29T08_00_46_660Z-debug-0.log
DEPTH_ZERO_SELF_SIGNED_CERT
mkcertによるSSL認証の置き換えで試す(ローカル環境のみ)
$ sudo apt install libnss3-tools
$ curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
$ ls
#👇最新のバイナリバージョンの確認
mkcert-v1.4.4-linux-amd64
$ chmod +x mkcert-v1.4.4-linux-amd64
$ sudo cp mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
$ mkcert --version
v1.4.4
#👇インストール後の後片付け
$ rm -rf mkcert-v1.4.4-linux-amd64
$ mkcert -install
Created a new local CA 💥
The local CA is now installed in the system trust store! ⚡️
$ mkcert localhost 127.0.0.1 <ConoHa VPSのIPアドレス> ...
Created a new certificate valid for the following names 📜
- "localhost"
- "127.0.0.1"
- "xxx.xxx.xxx.xxx"
The certificate is at "./localhost+2.pem" and the key at "./localhost+2-key.pem" ✅
It will expire on 1 March 2025 🗓
localhost+2.pem
localhost+2-key.pem
conf
$ sudo chmod 644 localhost+2-key.pem
$ mv localhost+2.pem localhost+2-key.pem conf/
config.yaml
https
#...
https:
key: /verdaccio/conf/localhost+2-key.pem
cert: /verdaccio/conf/localhost+2.pem
#...
https://...
1. 独自ドメインを取得&信頼のある第三者認証局を利用したSSL対応
2. JWT(JSON Web Token)などを利用したHTTPリクエストヘッダーでのユーザー認証
3. iptableなどを利用したファイヤーウォールでのアクセス制限
http
ConoHa VPSのVerdaccioレジストリでパッケージを操作する
Verdaccioのパッケージ管理について
[config.yaml] > [packages]
packages:
#👇スコープ付きのパッケージ①
#誰でも読み込みOK&パブリッシュは登録ユーザーのみ
'@hoge/*':
access: $all
publish: $authenticated
#👇スコープ付きのパッケージ②
#誰でも読み込みOK&パブリッシュは登録ユーザーのみ
#パッケージがない場合、通常のnpmレポジトリへ探しに行く
'@piyo/*':
access: $all
publish: $authenticated
proxy: npmjs
#👇ユーザー指定のパッケージ①
#fugaの専用パッケージ...登録ユーザーのみ読み込み&fugaのみパブリッシュOK
'fuga-*':
access: $authenticated
publish: fuga
#👇ユーザー指定のパッケージ②
#mogeの専用パッケージ...moge/fugaのみ読み込み&mogeのみパブリッシュOK
'moge-*':
access: moge fuga
publish: moge
#👇上記以外のその他のパッケージ
#ログイン不要で誰でも取得&パブリッシュ可
'**':
access: $all
publish: $all
proxy: npmjs
「**」
access
publish
$anonymous
$all
$authenticated
<ユーザー名>
$anonymous
$all
$authenticated
<ユーザー名>
$anonymous
$all
$anonymous
$all
$authenticated
<ユーザー名>
proxy
npmjs
proxy
npmjs
proxy
クライアント側からユーザーの登録
$ docker-compose up
「npm-adduser」
$ npm adduser --registry http://<ConoHa VPSのIPアドレス>:54321
「npm-adduser」
adduser
login
NPMパッケージをVerdaccioサーバーへアップロードする
[config.yaml] > [packages]
package.json
$ npm publish --registry http://<ConoHa VPSのIPアドレス>:54321
まとめ
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー