#!/bin/bash # Deploy tracked web files from repo -> /var/www/html (ไม่ลบ node_modules บนเซิร์ฟเวอร์) # ใช้ทุกครั้งหลังแก้ www/html ใน repo แล้วต้องการให้เว็บจริงตรงกับ repo set -euo pipefail REPO="$(cd "$(dirname "$0")/.." && pwd)" SRC="$REPO/www/html/" DST="/var/www/html/" GAME_SERVER_JS="$DST/Game/server.js" if [[ "$(id -u)" -ne 0 ]]; then echo "Run as root: sudo $0" >&2 exit 1 fi # ถ้า Game/server.js เปลี่ยนหลัง deploy — Node ต้องรีโหลดโค้ด (systemd: game-zep.service) hash_game_server_js() { local f="$1" [[ -f "$f" ]] || { echo ""; return 0; } sha256sum "$f" | awk '{print $1}' } GAME_SRV_HASH_BEFORE="$(hash_game_server_js "$GAME_SERVER_JS")" rsync -a \ --checksum \ --exclude 'node_modules' \ "$SRC" "$DST" chown -R www-data:www-data "$DST" # รูปป้าย quiz_carry — ให้เขียน/ลบได้ชัดเจน (FTP/Node); setgid ให้ไฟล์ใหม่ได้กลุ่ม www-data PLAQUE="$DST/Game/public/img/quiz-carry-plaque-assets" mkdir -p "$PLAQUE" chown www-data:www-data "$PLAQUE" chmod 2775 "$PLAQUE" GA="$DST/Game/public/img/gauntlet-assets" mkdir -p "$GA" chown www-data:www-data "$GA" chmod 2775 "$GA" # Jump Survival (Jumper) — โฟลเดอร์รูป; FTP มัก MKD ไม่ได้ถ้ายังไม่มีบนเซิร์ฟ JUMPER="$DST/Game/public/img/Jumper" mkdir -p "$JUMPER" chown www-data:www-data "$JUMPER" chmod 2775 "$JUMPER" # Space shooter / Violent Crime — ชื่อโฟลเดอร์ไม่มีช่องว่าง (FTP MKD "Violent Crime" มัก 550) VIOLENT_CRIME="$DST/Game/public/img/ViolentCrime" mkdir -p "$VIOLENT_CRIME" chown www-data:www-data "$VIOLENT_CRIME" chmod 2775 "$VIOLENT_CRIME" GAME_SRV_HASH_AFTER="$(hash_game_server_js "$GAME_SERVER_JS")" if [[ -n "$GAME_SRV_HASH_AFTER" && "$GAME_SRV_HASH_BEFORE" != "$GAME_SRV_HASH_AFTER" ]]; then if systemctl cat game-zep.service &>/dev/null; then systemctl restart game-zep.service echo "OK: restarted game-zep.service (Game/server.js changed)" else echo "WARN: Game/server.js changed but no game-zep.service — restart Node manually" >&2 fi fi echo "OK: deployed $SRC -> $DST (node_modules on server untouched)"