Last active
January 29, 2020 09:28
-
-
Save 44uk/a1777ee9ddcf0cf28e76a529c646d2f3 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: インスタンスの詳細の設定 高度な詳細 > ユーザーデータ に貼り付けることで、 | |
# インスタンス起動時にsymbol-testnet-bootstrapのpeerノードのセットアップを行います。 | |
# また、動作の確認用に最新ブロック高を外部へ公開するサービスも動作させます。 | |
# http://__ip_addr__:50080/height.txt でブロック高を確認できます。 | |
# | |
# 次の作業を行います。 | |
# * ssh接続ポートの変更 | |
# * docker,docker-composeのインストール | |
# * symbol-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.9.2.1-beta2 | |
GATEWAY=http://api-xym-harvest-20.ap-northeast-1.nemtech.network | |
FRIENDLY_NAME= | |
NODE_HOST= | |
# パッケージを最新へアップデート | |
yum upgrade -y | |
# apt-get update -y && apt-get 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 | |
systemctl enable docker && systemctl start docker | |
usermod -a -G docker ec2-user | |
# apt-get install -y apt-transport-https ca-certificates curl software-properties-common | |
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - | |
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | |
# apt-get update -y && apt-get install -y docker-ce | |
# 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 | |
# symbolノードを常時起動させる設定 | |
# User=rootなのはDockerのマウントしたボリュームのオーナー問題を手抜き解決するため | |
cat << __EOD__ > /etc/systemd/system/symbol.service | |
[Unit] | |
Description=Symbol Node Daemon | |
After=docker.service | |
[Service] | |
Type=simple | |
User=root | |
WorkingDirectory=/home/ec2-user/symbol-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly | |
Environment=COMPOSE_FILE=/home/ec2-user/symbol-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 | |
# symbolノードブートストラップを取得 | |
curl -L https://github.com/nemfoundation/symbol-testnet-bootstrap/archive/$BOOTSTRAP_TAG.tar.gz | tar zx | |
chown -R ec2-user: symbol-testnet-bootstrap-$BOOTSTRAP_TAG | |
cd symbol-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly | |
# knownPeersを取得して設定ファイルを生成 | |
# リポジトリに入っている設定では都合が悪い場合に有効にしてください。 | |
# https://github.com/nemfoundation/symbol-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 $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 | |
# symbolサービスログ確認用 | |
# journalctl -fu symbol | |
# symbolノードのブロック高情報をファイルから取り出して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 | |
# symbolノードのブロック高情報を公開するためのサービス | |
cat << __EOD__ > /etc/systemd/system/sym-health-check.service | |
[Unit] | |
Description=Catapult Node simple health check | |
After=symbol.service | |
[Service] | |
Type=simple | |
User=ec2-user | |
Group=ec2-user | |
WorkingDirectory=/home/ec2-user/symbol-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly | |
ExecStartPre=/usr/bin/docker run --rm --name sym-health-check -t -v /home/ec2-user/symbol-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly/tmp:/var/www/localhost/htdocs:ro -p $HTTPD_PORT:80 -d sebp/lighttpd | |
ExecStart=/home/ec2-user/symbol-testnet-bootstrap-$BOOTSTRAP_TAG/peer-assembly/health-check.sh | |
ExecStopPost=/usr/bin/docker stop sym-health-check | |
Restart=always | |
RestartSec=60s | |
[Install] | |
WantedBy=multi-user.target | |
__EOD__ | |
# ブートストラップの常時起動設定とサービスの開始 | |
systemctl daemon-reload | |
systemctl enable symbol && systemctl start symbol | |
systemctl enable sym-health-check && systemctl start sym-health-check | |
# パッケージマネージャキャッシュ削除 | |
yum clean all | |
# 古いカーネルを削除 | |
package-cleanup --oldkernels --count=1 -y | |
# Ubuntu向け | |
# apt-get clean -y && apt-get autoremove -y | |
# dpkg -l 'linux-image-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge | |
# update-grub |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment