今回仕事で任されたタスクをもう一度最初から作っていきます。
##Project
同僚がFrontendチームで使うというVerdaccioを何の前知識もなくDockerizeして使えるようにしていく。元々同僚の頭の中では形があったようだが詳細は全く説明されず、最後あたりで説明された。。。
最終的に設定するもの
- docker-compose (Verdaccio, Verdaccio s3 plugin, https-portal)
- Bitbucket pipeline
- git hooks - post-receive
Usage
Verdaccioアクセスはhttps://<サイト>
A. Publish a package
- チームの誰かがパッケージをパブリッシュする。
- このパッケージはS3 bucketへ。
- BitBucket Pipelineを通してプロダクションにデプロイ。
B. Add a new user
- 新規ユーザーを追加>conf/htpasswdに追加される。
- BitBucket Pipelineを通してプロダクションにデプロイ。
今回はその1の設定
- Verdaccio (Dockerfile, config.yaml)
- EC2 (docker, docker-compose, npm)
###Spec and Software
- Amazon Ubuntu Server 18.04
- Verdaccio
- Docker
###Path
/home/ubuntu
└── verdaccio
├── Dockerfile
├── conf
│ ├── config.yaml
│ └── htpasswd <- adduserで作られる
├── docker-compose.yaml
├── package.json <- publishで必要
├── plugins
└── storage
└── @mypackage <- publishで追加される
###verdaccio/conf/config.yaml
storage: /verdaccio/storage
auth:
htpasswd:
file: /verdaccio/conf/htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@mypackage/*': <- ポイント
access: $all
publish: $authenticated
'@*/*':
access: $authenticated
publish: $authenticated
proxy: npmjs
'**':
proxy: npmjs
logs:
- {type: stdout, format: pretty, level: http}
###verdaccio/package.json
適当に作る。
npm init
名前は上のポイントに合わせる
"name": "@mypackage/verdaccio",
###References
###Tips for EC2
-
これはちゃんとReferencesのリンクでドキュメントされてます。
sudo chown -R 100:101 verdaccio/
-
777でないとconf/htpasswdやstorage/@mypackageに書き込めない。他に方法があれば教えてください。
sudo chmod -R 777 verdaccio/conf/
sudo chmod -R 777 verdaccio/storage/
docker内ではこうなってる必要があります。
/ # ls -ltr /verdaccio/
drwxr-xr-x 2 100 101 4096 Jul 27 16:59 plugins
drwxrwxrwx 2 100 101 4096 Jul 27 21:10 conf
drwxrwxrwx 3 100 101 4096 Jul 27 21:11 storage
/ # ls -ltr /verdaccio/conf/
-rwxrwxrwx 1 100 101 372 Jul 27 21:03 config.yaml
-rw-r--r-- 1 verdacci nogroup 55 Jul 27 21:10 htpasswd
/ # ls -ltr /verdaccio/storage/@mypackage/
drwxr-xr-x 2 verdacci nogroup 4096 Jul 27 21:28 verdaccio
- これは見つけるのになかなか時間がかかった。conf/config.yamlのパスをAbsolute Pathにする必要あり。
From
storage: ./storage
TO
storage: /verdaccio/storage
###Error Messages
上1&2を設定しないと出るエラー。issues/1136とかで質問されてます。
EACCES: permission denied, open '/verdaccio/conf/htpasswd'
qqq is not allowed to publish package verdaccio : verdaccio
###Useful commands
docker-compose up --force-recreate
docker exec -it --user=root verdaccio /bin/sh
###Testing
1. docker起動
docker-compose up
expected logging
verdaccio | warn --- config file - /verdaccio/conf/config.yaml
verdaccio | warn --- Plugin successfully loaded: verdaccio-htpasswd
verdaccio | warn --- http address - http://0.0.0.0:4873/ - verdaccio/4.0.4
2. URLにアクセス
3. Add a user 'qqq'
npm adduser --registry http://<IP>:4873
expected logging
req: 'PUT /-/user/org.couchdb.user:qqq'
4. Login on URL as 'qqq'
expected logging
req: 'POST /-/verdaccio/login'
req: 'GET /-/verdaccio/packages'
5. Publish
npm publish --registry http://<IP>:4873
expected logging
req: 'PUT /@mypackage%2fverdaccio'
6. Refresh URL
expected logging
req: 'GET /-/verdaccio/packages'