はじめに
2017年1月くらいの時は、verdaccioに関する記事も少なくて、導入にとても苦労したんですよ。
でも、今となってはdockerもあるし、便利になりましたね。
でも苦労したんだけどね!
やりたいこと
- dockerでverdaccioを立ち上げる
- nginxのリバースプロキシでアクセスする
- たとえば「
http://your-ip-addr:4873/
ではなく、http://your-ip-addr/verdaccio
でアクセスする」ということ。
- たとえば「
環境
CentOS Linux release 7.5.1804
verdaccio dockerのimageでverdaccio/verdaccio:latest
を指定(2018/6の執筆時点では3.2.0)
Nginx dockerのimageでnginx
を指定(2018/6の執筆時点では1.15.0)
dockerとverdaccioの組み合わせについて
本家のexampleに例が準備されています。
これを参考にします。
本家の例をそのまま起動してみる
まずは何も考えずに起動してみます。
git clone
とかしてローカルに持ってきた本家のexampleのディレクトリに移動して、docker-compose up -d
をします。
そして、ブラウザからlocalhost:4873/
にアクセスすると、verdaccioが起動しています。
※必要に応じて、localhostはipとかurlとかに書き換えてください。
この時、後々のためにverdaccioコンテナのファイルをコピーしてきます。
$ docker cp <ImageId>:/verdaccio/ ./verdaccio
終わったら落とします。
$ docker-compose down
本家の例を書き換える
docker-compose.yamlファイルを書き換える
exampleに入っていたyamlファイルを書き換えます。
version: '2'
services:
verdaccio:
image: verdaccio/verdaccio:latest
container_name: verdaccio
ports:
- "4873:4873"
volumes:
- ./volumes:/verdaccio
nginx:
restart: always
image: nginx
ports:
- "80:80"
volumes:
- ./data/conf.d:/etc/nginx/conf.d
変更点は以下の通り。
- verdaccioのvolumesを、docker-composeと同改装のディレクトリにマウント。
- このために先ほどコンテナからデータをコピーしてきました。
- nginxのimageは
tutum/nginx
ではなくnginx
を利用する。- 後々nginxはリバースプロキシ用に別docker-composeにする構想があったので、どうせなら更新されている新しいものを使おうという理由です。(tutum/nginxは最後にpushされたのが2年前)
- nginxのvolumesもdocker-composeのディレクトリにマウント。
verdaccioのconfig.yamlに追記する
先ほどコピーしたvolumesフォルダの中の、conf/config.yaml
に一文を追加します。
url_prefix: http://your-ip-addr/verdaccio/
この一文の意味は、verdaccioのgitのfull.yamlというファイルの中に説明が載っています。
# if you use nginx with custom path, use this to override links
#url_prefix: https://dev.company.local/verdaccio/
nginxのconf.dに追記する
docker-compose.yamlがあるディレクトリの中に以下のファイルを追加します。
server {
listen 80 default_server;
access_log /var/log/nginx/verdaccio.log;
charset utf-8;
location /verdaccio {
rewrite ^/verdaccio/(.+) $1 break;
proxy_pass http://your-ip-addr:4873/$1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_redirect off;
}
}
必要だったらserver_name
を指定するのもお忘れなく。
起動!
以上の変更を行った後は以下のコマンドで起動。
$ docker-compose up -d
そして、http://your-ip-addr/verdaccio
でアクセスできることを確認する。
備忘録
ファイアウォールの設定
http://your-ip-addr:4873
でやった時はつながったのに、
http://your-ip-addr/verdaccio
ではつながらなくて以下のログが出ている。
※ipとか、適宜変えてます。
$ docker-compose logs
proxy | 2018/06/21 06:37:56 [error] 7#7: *3 connect() failed (113: No route to host) while connecting to upstream, client: from-ip-addr, server: hoge.jp, request: "GET /verdaccio/ HTTP/1.1", upstream: "http://your-ip-addr:4873/", host: "your-ip-addr"
proxy | from-ip-addr - - [21/Jun/2018:06:37:56 +0000] "GET /verdaccio/ HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" "-"
色々調べたらファイアウォールの設定を見直した方が良いらしい。
そこで見直してみる。
firewalldを解除して、iptablesを使う。
色々やるが、つながらない。
iptables -nL
コマンドとかを打って、よくよく確認してみたら、INPUTに4873へのACCEPTが存在しなかったので、以下のコマンドで追加する。
でも、そもそもこのコマンドを打たないといけない事態っていったい…
dockerさんが勝手に追加してくれると思っていたのに…
iptables -I INPUT 5 -p tcp --dport 4873 -j ACCEPT