これはなに
IBTのオープンソース TAO を ubuntu へインストールしたときのメモ。
- tao:
https://www.taotesting.com/ - taoインストールガイド:
https://www.taotesting.com/ja/community/installation-guide/
1. 概要
- インスタンスリソース
- docker インストール
- tao インストール
- hostsで名前解決
ここから性能改善.
まず、chunk-vendor.js のロードに1分ほどかかるので、これを改善する。
- docker内networkのMTUを調整
- 送信データを圧縮
- 自己証明書をローカルPCに登録
2. インスタンスリソース
当初、smallサイズ(2vcpu, 2GB)で構築したが、メモリ不足で動作できなかった。
推奨にはメモリ4GB以上とある。ローカル環境で起動したcontainerをみると、メモリ使用量: 5.02GBとなっていた。おそらく、7GB程度はあった方がよい。
t4g.large(2vpu, 8GB)で、disk: 50GB を使用、swapを4GB追加する。
2-1. swap
fileを作成する。
sudo fallocate -l 4G /swapfile
パーミッションを変更する。
sudo chmod 600 /swapfile
mkswapを実行する。
sudo mkswap /swapfile
swapon を実行する。
sudo swapon /swapfile
$ free
total used free shared buff/cache available
Mem: 3918156 358108 3346236 920 364444 3560048
Swap: 4194300 0 4194300
↑ Swap: 4GB でOK。
起動時に swapを mount する。
/etc/fstab に /swapfile none swap sw 0 0 を追加する。
3. docker インストール
公式 reference に沿って行う。
https://docs.docker.com/engine/install/ubuntu/
3-1. apt をセットアップ
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
3-2. docker インストール
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3-3. ユーザーを docker グループに追加
sudo usermod -aG docker $USER
再度ログインして、docker ps が動くことを確認する。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4. tao インストール
まず、公式webサイトの community-edition-install の form から deployment guide を取得する。
https://www.accelerate.taotesting.com/community-edition-install
入力したメールアドレスに deployment guide が送られる。
4-1. docker-compose.tao-ce.yaml を取得
任意のdirにて、指定されたzipを取得する。
wget https://gist.github.com/tao-community-edition/5ac924d5021aa2d7d3635064edc0e752/archive/eb21e720043a3278655516ae1e5993ef6ca2e3f4.zip
unzip をインストールする。
sudo apt install unzip
zipを解凍する。
unzip eb21e720043a3278655516ae1e5993ef6ca2e3f4.zip
yamlを移動しておく。
mv 5ac*/docker-compose.tao-ce.yaml ./docker-compose.yaml
4-2. container 起動
docker compose up -d
4-3. 自動再起動を設定
EC2インスタンス起動時にTAOを自動起動するため、 restart: always を付与する。
対象は、es, firestore, pubsub, tao
※ pgsql, redis は、付与されている。
5. hosts で名前解決
この ta-ce は、ホスト名 community.tao.internal でアクセスする必要がある模様。
自PCの /etc/hosts に以下の名前解決を追加する。
(windows: C:\Windows\System32\drivers\etc\hosts )
<IPaddress> community.tao.internal # for tao-ce
(IPaddress は ec2 の ip アドレス)
これで、https://community.tao.internal へアクセスできるようになる。
6. docker内networkのMTUを調整
TCP パケットがネットワークのどこかで「分割が必要なのに分割できない」ためにドロップし、再送(Retransmission)が発生している典型例とのこと。
原因: aws EC2 (MTU 9001) と Docker ブリッジ (MTU 1500)、そしてあなたのインターネット環境の境界でパケットが詰まっています。
対策: docker-compose.yml でネットワークの MTU を明示的に下げてください。
networks:
default:
name: tao-ce_default
driver: bridge
driver_opts:
com.docker.network.driver.mtu: "1400"
7. 送信データを圧縮
curl -I -H "Accept-Encoding: gzip" -k https://community.tao.internal/portal-static/chunks/chunk-vendor.js
上述のcliでヘッダを見ると、content-encoding: gzip が付与されていなかった。
まず、Caddyfile を取得する。
docker cp tao-ce-tao-1:/etc/tao-ce/config/Caddyfile ./Caddyfile
そして、encode gzip zstd 行を追加。
{$TAO_CE_PUBLIC_DOMAIN}:443 {
encode gzip zstd # 圧縮を有効にする
@deliver-static path /deliver/sw.js /sw.js /deliver-fe-static/*
docker-compose.yaml で、これをマウントする。
services:
tao:
volumes:
- ./Caddyfile:/etc/tao-ce/config/Caddyfile:ro # <- この行を追加
8. 自己証明書をローカルPCに登録
自己証明書を使用している環境では、ブラウザの仕様によるが、キャッシュが有効にならない場合が多い。
キャッシュを活用するため、自己証明書をローカルPCに登録する。
8-1. 自己証明書をインポート
ブラウザからDLしてPCにインポートする。
- 保護されていない通信 > 証明書の詳細 > 詳細 を開く
- 「証明書の階層」で、
Intermediateを選択する - 右下のエクスポートボタンを押下、保存する
この pem ファイルをダブルクリックし、ローカルPCに証明書をインストールする。
★ このとき、証明書を信頼するように指定する。
macの場合: 常に信頼
windowsの場合: 信頼されたルート証明機関
8-2. 自己証明書を固定
caddy が再起動しても同じ証明書を用いるようにマウントして永続化する。
docker-compose.yaml に以下を追記する。
services:
tao:
volumes:
- ./root_local_share_caddy:/root/.local/share/caddy
/root/.local/share/caddy/certificates/local/community.tao.internal/ に community.tao.internal.crt が生成される。