ls1.rellc.jp というSymbolノードを個人で(個人の会社で)動かしています。
(httpsにも対応していますので、xembookでは委任先として登録可能です)
ノードのインストールや設定について、参考にしたサイトとメモを残しておきます。
ノードの動作環境
AWS Lightsail のVPSを利用 / 16GBメモリ 4vCPU のプランを利用
OS は Ubuntu 20.04 LTS (Focal Fossa)
ノードタイプはdual (API + Peer)
構築に参考にした記事
公式ドキュメントのノード解説
公式ドキュメントのSymbol-bootstrapガイド
公式ドキュメントは一通り読むべきですが、とりあえず上記2つは必読ということで。
curupoさんのさくらのVPSでNEM Symbol のテストネットノード構築
Ubuntu20.04LTSの初期化状態からnodejs/npmのインストール手順から書いてるので、もうこれでほぼいけるかと思います。記事タイトルはテストネット時期にかかれたものなのでテストネットとなっていますが、メインネット対応に内容はアップデートされています。
うにやさんのSymbol メインネット HTTPS対応 https-portal
Let’s Encryptを利用して「無料で!」TLS Certificateを得てnginxで設定までしてくれるdockerコンポーネントを使ったhttps化の設定について書かれています。
おそらく今から構築しようかな?と思った人は上記のリンク眺めればだいたいわかると思います。逆にこれでわからなければ、自分にはインターネット上でサーバーを運用するための基礎知識が、少し足りないと思ったほうが良いと思います。
追記
(追記と書いてますが、個人的にはここが本題です)
unixユーザー/グループに注意
curupoさんの記事中に出てくる”docker を root ユーザーではなく一般ユーザーで操作できるように”するための “usermod -g docker ubuntu” ですが、オススメしません!
これだとubuntuユーザーのグループをdockerに変更してしまいます。
ubuntuユーザーをdockerグループに加えるのであれば “gpasswd -a ubuntu docker” すべきです。
僕は “vigr” (vipwのgroup版)して書き変えてしまいます。
https-portalが使用するポートに注意
Symbolノードの運営のためにあけるポートは 3000 および 7900 ですが、https-portalの設定時には80番と443番のポートをあけておく必要があります。これはLet’s Encryptにドメインの所持者であることを証明するためにいったんhttp通信を行う必要があるためです。
また、Symbolノードのhttps化に伴い、3001番も開放する必要があります。
したがって、httpノードのままであれば 3000 と 7900 番のみの開放でOK。DNSつけてhttps化するのであれば 80 443 3000 3001 7900 の5つのポートを空けておきましょう。
(僕は80と443を開放するのを忘れてて、Let’sEncriptに「リクエスト多すぎ!」でBANされて、気が付かずに同じ過ちを繰り返し、結局2日かかりました!)
https-portal再起動時のトラブルシューティング
symbol側の設定変更やアップデート時には
https-portal停止=>symbol-bootstrap停止&変更&起動=>https-portal起動
とする必要がありますが、https-portalの起動時(再開時)に
ryo@ls1:~/https-portal$ docker-compose up -d Starting https-portal … error ERROR: for https-portal Cannot start service https-portal: network dbd...2f6 not found ERROR: for https-portal Cannot start service https-portal: network dbd...2f6 not found ERROR: Encountered errors while bringing up the project.
と、エラーが発生し、起動できなくなりました。
この dbd…2f6 のネットワークについて、”docker network list” したり “docker network inspect docker_default” しても見当たりませんし、https-portalが以前のネットワークIDを覚えてしまっていてちゃんと動かなくなっている様子で、直し方がわかりませんでしたが、
ryo@ls1:~/https-portal$ docker-compose up --force-recreate Recreating https-portal … done Attaching to https-portal https-portal | [s6-init] making user provided files available at /var/run/s6/etc…exited 0. https-portal | [s6-init] ensuring user provided files have correct perms…exited 0. https-portal | [fix-attrs.d] applying ownership & permissions fixes… https-portal | [fix-attrs.d] done. https-portal | [cont-init.d] executing container initialization scripts… https-portal | [cont-init.d] 00-welcome: executing… https-portal | https-portal | ======================================== https-portal | HTTPS-PORTAL v1.18.0 https-portal | ======================================== https-portal | https-portal | [cont-init.d] 00-welcome: exited 0. https-portal | [cont-init.d] 20-setup: executing… https-portal | DH parameters appear to be ok. https-portal | -----BEGIN DH PARAMETERS----- https-portal | MIIB....C/a https-portal | TeWz...XHH https-portal | C+vf...4LB https-portal | 3+0p...b9Z https-portal | 7uZ3...Nti https-portal | IfZq...BAg== https-portal | -----END DH PARAMETERS----- https-portal | RSA key ok https-portal | Signing skipped for ls1.rellc.jp, it expires at 58 days from now. https-portal | [cont-init.d] 20-setup: exited 0. https-portal | [cont-init.d] 30-set-docker-gen-status: executing… https-portal | [cont-init.d] 30-set-docker-gen-status: exited 0. https-portal | [cont-init.d] done. https-portal | [services.d] starting services https-portal | [services.d] done.
と、”–force-recreate” オプションをつけてやり直すことにより無事起動できました。