posimai-root/scripts/deploy-server.sh

73 lines
2.5 KiB
Bash

#!/usr/bin/env bash
# deploy-server.sh
# server-updated.js を Synology の posimai_api コンテナに自動デプロイする
#
# 使い方:
# bash scripts/deploy-server.sh
#
# === 初回セットアップ(一度だけ)=== 完全自動化のための NOPASSWD 設定
# ssh mai@100.76.7.3
# echo 'mai ALL=(ALL) NOPASSWD: /usr/local/bin/docker' | sudo tee /etc/sudoers.d/mai-docker
# chmod 440 /etc/sudoers.d/mai-docker
# exit
# # 以後 sudo docker コマンドがパスワードなしで実行可能になる
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SERVER_FILE="$SCRIPT_DIR/../server.js"
SSH_HOST="mai@100.76.7.3"
DOCKER="/usr/local/bin/docker"
CONTAINER="posimai_api"
REMOTE_TMP="/tmp/posimai-server-deploy.js"
if [ ! -f "$SERVER_FILE" ]; then
echo "ERROR: $SERVER_FILE が見つかりません"
exit 1
fi
echo "==> [1/3] Synology にファイル転送中 (stdin 経由、SFTP不要)..."
cat "$SERVER_FILE" | ssh "$SSH_HOST" "cat > $REMOTE_TMP"
echo " 転送完了"
echo "==> [2/3] コンテナへコピー & 再起動..."
# NOPASSWD 設定済みの場合: -t なしで動作
# 未設定の場合: ターミナルから手動実行が必要
if ssh "$SSH_HOST" "sudo -n $DOCKER inspect $CONTAINER > /dev/null 2>&1"; then
# NOPASSWD 有効 — 完全自動
ssh "$SSH_HOST" "
sudo $DOCKER cp $REMOTE_TMP $CONTAINER:/app/server.js && \
sudo $DOCKER restart $CONTAINER && \
rm -f $REMOTE_TMP
"
echo " コンテナ再起動完了"
else
# NOPASSWD 未設定 — ファイルは転送済み、docker コマンドは手動実行
echo ""
echo "ファイル転送完了。以下を Synology SSH で実行してください:"
echo ""
echo " ssh -t $SSH_HOST \\"
echo " \"sudo $DOCKER cp $REMOTE_TMP $CONTAINER:/app/server.js && \\"
echo " sudo $DOCKER restart $CONTAINER && \\"
echo " rm -f $REMOTE_TMP\""
echo ""
echo "完全自動化するには初回セットアップ(スクリプト冒頭のコメント参照)を行ってください。"
exit 0
fi
echo "==> [3/3] ヘルスチェック..."
sleep 3
STATUS=$(ssh "$SSH_HOST" "sudo $DOCKER inspect --format='{{.State.Status}}' $CONTAINER 2>/dev/null || echo unknown")
echo " コンテナ状態: $STATUS"
if [ "$STATUS" = "running" ]; then
echo ""
echo "デプロイ成功!"
echo "API: https://posimai-lab.tail72e846.ts.net/brain/api"
else
echo ""
echo "WARNING: コンテナの状態を確認してください (status: $STATUS)"
echo " ssh mai@100.76.7.3"
echo " sudo /usr/local/bin/docker logs $CONTAINER --tail 50"
fi