#!/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