Last active
December 24, 2020 02:44
-
-
Save 44uk/ff9e8125a3c5ce5aa4f577130df12460 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-062f7200baf2fa504 (64 ビット x86) で動作確認済み | |
# AWS EC2 の ステップ3: インスタンスの詳細の設定 高度な詳細 > ユーザーデータ に貼り付けることで、 | |
# インスタンス起動時にcatapult-testnet-bootstrapのpeerノードのセットアップを行います。 | |
# また、動作の確認用に最新ブロック高を外部へ公開するサービスも動作させます。 | |
# http://__ip_addr__:50080/height.txt でブロック高を確認できます。 | |
# | |
# 次の作業を行います。 | |
# * ssh接続ポートの変更 | |
# * docker,docker-composeのインストール | |
# * catapult-testnet-bootstrapのpeer-assemblyのdocker-composeをサービス化 | |
# * 任意のfriendly_nameを設定(変数に値を入れてください) | |
# * 任意のhostを設定(変数に値を入れてください) | |
# * (既存ノードを接続先として取得して設定) | |
# * 最新のブロック高を外部に公開するサービスのセットアップ | |
# | |
# セキュリティグループでは次のポートを公開してください。 | |
# * 7900 peerノード間の通信用 | |
# * 50022 sshd (変数で任意に変更可) | |
# * 50080 ブロック高公開用 (変数で任意に変更可) | |
SSHD_PORT=50022 | |
HTTPD_PORT=50080 | |
DOCKER_COMPOSE_VER=1.25.1 | |
BOOTSTRAP_TAG=0.1-beta | |
CAT_GATEWAY=http://cat-testnet.44uk.net:3000 | |
FRIENDLY_NAME= | |
NODE_HOST= | |
# パッケージを最新へアップデート | |
yum upgrade -y | |
# sshdの接続ポート変更 | |
/bin/sed -i -e "s/^#Port 22$/Port $SSHD_PORT/" /etc/ssh/sshd_config | |
systemctl restart sshd | |
# dockerのインストールとサービス開始 | |
yum install -y docker | |
usermod -a -G docker ec2-user | |
systemctl enable docker | |
systemctl start docker | |
# docker-composeのインストール | |
curl -L https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VER/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose | |
chmod +x /usr/local/bin/docker-compose | |
# docker info | |
# docker-compose --version | |
# catapultノードを常時起動させる設定 | |
# User=rootなのはDockerのマウントしたボリュームのオーナー問題を手抜き解決するため | |
cat << __EOD__ > /etc/systemd/system/catapult.service | |
[Unit] | |
Description=Catapult Node Daemon | |
After=docker.service | |
[Service] | |
Type=simple | |
User=root | |
WorkingDirectory=/home/ec2-user/catapult-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly | |
Environment=COMPOSE_FILE=/home/ec2-user/catapult-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly/docker-compose.yaml | |
ExecStartPre=/usr/local/bin/docker-compose -f \$COMPOSE_FILE down | |
ExecStartPre=/usr/local/bin/docker-compose -f \$COMPOSE_FILE rm -f | |
ExecStart=/usr/local/bin/docker-compose -f \$COMPOSE_FILE up --build | |
ExecStop=/usr/local/bin/docker-compose -f \$COMPOSE_FILE stop | |
ExecStopPost=/usr/local/bin/docker-compose -f \$COMPOSE_FILE down | |
ExecStopPost=/usr/local/bin/docker-compose -f \$COMPOSE_FILE rm -f | |
ExecReload=/usr/local/bin/docker-compose -f \$COMPOSE_FILE restart | |
Restart=always | |
RestartSec=60s | |
[Install] | |
WantedBy=multi-user.target | |
__EOD__ | |
# ホームディレクトリへ移動 | |
cd /home/ec2-user | |
# catapultノードブートストラップを取得 | |
curl -L https://github.com/nemfoundation/catapult-testnet-bootstrap/archive/v$BOOTSTRAP_TAG.tar.gz | tar zx | |
chown -R ec2-user: catapult-testnet-bootstrap-$BOOTSTRAP_TAG | |
cd catapult-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly | |
# knownPeersを取得して設定ファイルを生成 | |
# リポジトリに入っている設定では都合が悪い場合に有効にしてください。 | |
# https://github.com/nemfoundation/catapult-testnet-bootstrap/blob/master/peer-assembly/peer-node/userconfig/resources/peers-p2p.json | |
# curl -o /usr/bin/jq http://stedolan.github.io/jq/download/linux64/jq | |
# chmod +x /usr/bin/jq | |
# curl -s $CAT_GATEWAY/node/peers \ | |
# | jq '.[] | {publicKey:.publicKey,endpoint:{host:.host,port:7900},metadata:{name:.friendlyName,roles:"Peer"}}' \ | |
# | jq -s '{knownPeers:.}' \ | |
# > peer-node/userconfig/resources/peers-p2p.json | |
# chown ec2-user: peer-node/userconfig/resources/peers-p2p.json | |
# 設定ファイルの書き換えと更新 | |
# 設定ファイル生成だけ先に済ませる | |
docker-compose -f docker-compose.yaml up --build generate-raw-addresses store-addresses update_vars | |
if [ -n "$FRIENDLY_NAME" ]; then | |
sed -i.bak "/friendly_name/ s/[0-9A-Z]\{8\}/$FRIENDLY_NAME/" peer-node/config-input.yaml | |
# 設定ファイルの適用 | |
docker-compose -f docker-compose.yaml up --build update_vars | |
fi | |
if [ -n "$NODE_HOST" ]; then | |
mv peer-node/userconfig/resources/config-node.properties.template{,.bk} | |
tr -d \\r < peer-node/userconfig/resources/config-node.properties.template.bk | sed "/^host/ s/$/$NODE_HOST/" > peer-node/userconfig/resources/config-node.properties.template | |
fi | |
# 生成されたファイルの所有者がrootになるのでec2-userに補正 | |
chown -R ec2-user: peer-node/userconfig | |
# catapultサービスログ確認用 | |
# journalctl -fu catapult | |
# catapultノードのブロック高情報をファイルから取り出してheight.txtとして書き込むスクリプト | |
cat << \__EOD__ > health-check.sh | |
#!/bin/bash | |
cd `dirname $0` | |
while true; do | |
echo "ibase=16;$(cat data/index.dat | xxd -p | fold -w2 | tac | tr -d '\n' | tr '[:lower:]' '[:upper:]')" \ | |
| bc \ | |
> tmp/height.txt | |
cat tmp/height.txt | |
sleep 20 | |
done | |
__EOD__ | |
chmod +x health-check.sh && chown ec2-user: health-check.sh | |
# web公開用ディレクトリをdockerコンテナに作らせるとオーナーがrootになってしまうので | |
# マウントするディレクトリを先に作っておく | |
mkdir -p tmp && chown ec2-user: tmp | |
# catapultノードのブロック高情報を公開するためのサービス | |
cat << __EOD__ > /etc/systemd/system/cat-health-check.service | |
[Unit] | |
Description=Catapult Node simple health check | |
After=catapult.service | |
[Service] | |
Type=simple | |
User=ec2-user | |
Group=ec2-user | |
WorkingDirectory=/home/ec2-user/catapult-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly | |
ExecStartPre=/usr/bin/docker run --rm --name cat-health-check -t -v /home/ec2-user/catapult-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly/tmp:/var/www/localhost/htdocs:ro -p $HTTPD_PORT:80 -d sebp/lighttpd | |
ExecStart=/home/ec2-user/catapult-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly/health-check.sh | |
ExecStopPost=/usr/bin/docker stop cat-health-check | |
Restart=always | |
RestartSec=60s | |
[Install] | |
WantedBy=multi-user.target | |
__EOD__ | |
# ブートストラップとヘルスチェックの常時起動設定とサービスの開始 | |
systemctl daemon-reload | |
systemctl enable catapult && systemctl start catapult | |
systemctl enable cat-health-check && systemctl start cat-health-check | |
# パッケージマネージャキャッシュ削除 | |
yum clean all | |
# 古いカーネルを削除 | |
package-cleanup --oldkernels --count=1 -y |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment