73 lines
2.5 KiB
Bash
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
|