はじめに
Symbol ノードを運営していて、https-portal で HTTPS化している運営者の方は多いと思います。筆者もその1人です。
https-portal の導入方法はうにやさんの記事を参考にしました。
この方法でHTTPS化していると、そのままではあひきさんのSymbol Node Listに情報掲載してもらうための80番ポートを掴んでいるので、そのままの設定以下の要求に対応できないのです。
各ノードのHTTP(80番ポート)のルートURLに「nodeSetting.json」を配置してください。
この記事では https-portal を起動しつつ、80番ポートの /nodeSetting.json へのリクエストを受け付ける設定を紹介します。
試行錯誤しながらたどり着いた方法ですが、当ノード3機ともにこの設定で動作しております。
この記事では「symbol-node.harvest-xym.com」の設定をサンプルとして記載しております。FQDNは適宜ご自身のものに変更してください。
nodeSetting.json 配置
以下のように https-portal 配下に nodeSettings.json を作成します。
~/https-portal$ ls
docker-compose.yml nginx-conf nodeSetting.json
nodeSetting.json の中身はこんな感じです。仕様については前述のあひきさんのサイトで確認してください。
~/https-portal$ cat nodeSetting.json
{
"limitHarvesterCount": "30",
"twitterAccount": "broccoin",
"comment": "★ノード#1★10%還元!https://harvest-xym.com/"
}
nginx用config作成
https-portal 配下に nginx-conf ディレクトリを作成します。この中にhttps-portalが使用する nginx の config を上書きする設定ファイル <FQDN>.conf.erb を配置するためです。
~/https-portal$ mkdir nginx-conf
~/https-portal$ cd nginx-conf
~/https-portal$ vi symbol-node.harvest-xym.com.conf.erb
<FQDN>.conf.erb の中身はこんな感じです。https-portal が使用するデフォルトの設定にnodeSetting.json のリクエストのalias設定を追加しています。(12~14行目)
また、nginxがファイルの更新を検知できずにキャッシュをレスポンスしてしまうため、sendfile off を追加します。(16行目)
これにより、nodeSetting.json を変更するだけですぐに反映されるようになります。
server {
listen 80;
<% if ENV['LISTEN_IPV6'] && ENV['LISTEN_IPV6'].downcase == 'true' %>
listen [::]:80;
<% end %>
server_name <%= domain.name %>;
location / {
return 301 https://$server_name$request_uri;
}
location /nodeSetting.json {
alias /var/www/vhosts/symbol-node.harvest-xym.com/nodeSetting.json;
}
sendfile off;
<%= acme_challenge_location %>
}
docker-compose.yml 設定変更
https-portal の docker-compose.yml を開き、先程作成した <FQDN>.conf.erb と nodeSetting.json のマウント設定を追加します。(3行目以降)
volumes:
- 'https-portal-data:/var/lib/https-portal'
- './nginx-conf/symbol-node.harvest-xym.com.conf.erb:/var/lib/nginx-conf/symbol-node.harvest-xym.com.conf.erb:ro'
- './nodeSetting.json:/var/www/vhosts/symbol-node.harvest-xym.com/nodeSetting.json'
ここまでできたら、https-portal を再起動してください。
起動できない場合は 80番ポートを他のプロセスが使用していないか確認してください。
sudo lsof -i :80
私の場合、試行錯誤した残骸のapacheやnginxがポートを掴んでいたために起動失敗しておりました。
確認
一通りの設定が完了したら nodeSetting.json に外部からアクセスすることを確認してください。
http://<FQDN>/nodeSetting.json
HTTPでノードに接続できることを確認してください。
http://<FQDN>:3000/node/health
HTTPSでノードに接続できることを確認してください。
https://<FQDN>:<https-port>/node/health
おまけ
想定どおり動作しない場合、environment に以下の設定を追加し、フォアグラウンドで実効することでリクエストが着弾しているか、などを確認することができます。
https-portal:
# ...
environment:
ERROR_LOG: stdout
ACCESS_LOG: stderr