LoginSignup
0
0

More than 3 years have passed since last update.

Verdaccio+Docker+EC2 その1

Posted at

今回仕事で任されたタスクをもう一度最初から作っていきます。

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
1. チームの誰かがパッケージをパブリッシュする。
2. このパッケージはS3 bucketへ。
3. BitBucket Pipelineを通してプロダクションにデプロイ。

B. Add a new user
1. 新規ユーザーを追加>conf/htpasswdに追加される。
2. 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

1) これはちゃんとReferencesのリンクでドキュメントされてます。
sudo chown -R 100:101 verdaccio/

2) 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

3) これは見つけるのになかなか時間がかかった。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'

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0