#!/usr/bin/env bash # ๐Ÿซ ํ•™๊ต ์ถœ์„ ์‹œ์Šคํ…œ ์›ํด๋ฆญ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ # ์‚ฌ์šฉ๋ฒ•: curl -fsSL <์ด ํŒŒ์ผ์˜ raw ์ฃผ์†Œ> | bash set -euo pipefail REPO_URL="https://hootongerungit.mcv.kr/sihoo/school-attendance-deploy.git" INSTALL_DIR="school-attendance" echo "๐Ÿซ ํ•™๊ต ์ถœ์„ ์‹œ์Šคํ…œ ์„ค์น˜๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค." echo "" # โ”€โ”€ 1. Docker ํ™•์ธ/์„ค์น˜ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ if ! command -v docker &> /dev/null; then echo "๐Ÿณ Docker๊ฐ€ ์—†์–ด์„œ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค..." curl -fsSL https://get.docker.com | sh else echo "โœ… Docker ํ™•์ธ๋จ" fi if ! docker compose version &> /dev/null; then echo "โŒ 'docker compose' ๋ช…๋ น์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Docker Compose ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•œ ๋’ค ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”." exit 1 fi if ! command -v git &> /dev/null; then echo "โŒ git์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์„ค์น˜ํ•ด์ฃผ์„ธ์š” (์˜ˆ: sudo apt install git)." exit 1 fi # โ”€โ”€ 2. ์ €์žฅ์†Œ ๋ฐ›๊ธฐ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ if [ -d "$INSTALL_DIR/.git" ]; then echo "๐Ÿ“ฆ ์ด๋ฏธ ๋ฐ›์•„์ ธ ์žˆ์–ด์„œ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค." git -C "$INSTALL_DIR" pull else echo "๐Ÿ“ฆ ์ €์žฅ์†Œ๋ฅผ ๋‚ด๋ ค๋ฐ›๋Š” ์ค‘..." git clone "$REPO_URL" "$INSTALL_DIR" fi cd "$INSTALL_DIR" # โ”€โ”€ 3. ์„ค์ •๊ฐ’ ์ž…๋ ฅ๋ฐ›๊ธฐ (curl | bash๋กœ ์‹คํ–‰๋ผ๋„ ํ„ฐ๋ฏธ๋„์—์„œ ์ง์ ‘ ์ž…๋ ฅ๋ฐ›๋„๋ก /dev/tty ์‚ฌ์šฉ) โ”€โ”€ if [ -f .env ]; then echo "โš ๏ธ .env๊ฐ€ ์ด๋ฏธ ์žˆ์–ด์„œ ๊ธฐ์กด ์„ค์ •์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (๋‹ค์‹œ ์„ค์ •ํ•˜๋ ค๋ฉด .env๋ฅผ ์ง€์šฐ๊ณ  ์žฌ์‹คํ–‰)" else echo "" read -rp "๐ŸŒ ์ด ์„œ๋ฒ„์—์„œ ์“ธ ๋„๋ฉ”์ธ (์˜ˆ: attendance.myschool.ac.kr): " SCHOOL_DOMAIN < /dev/tty read -rp "๐Ÿ”‘ ๊ต์‚ฌ ํšŒ์›๊ฐ€์ž…์šฉ ์ธ์ฆ ์ฝ”๋“œ (์„ ์ƒ๋‹˜๋“ค๊ป˜ ์•Œ๋ ค์ค„ ์ฝ”๋“œ): " TEACHER_CODE < /dev/tty if command -v openssl &> /dev/null; then DB_PW=$(openssl rand -hex 16) ADMIN_PW=$(openssl rand -hex 8) else DB_PW=$(head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \n') ADMIN_PW=$(head -c 16 /dev/urandom | od -An -tx1 | tr -d ' \n') fi cat > .env < firebase-key.json fi # โ”€โ”€ 5. ์‹คํ–‰ (์ด๋ฏธ์ง€๋Š” ์ƒˆ๋กœ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” ์ด๋ฏธ์ง€๋ฅผ ๋‚ด๋ ค๋ฐ›์•„ ์‚ฌ์šฉ) โ”€โ”€ echo "" echo "๐Ÿš€ ์ด๋ฏธ์ง€๋ฅผ ๋‚ด๋ ค๋ฐ›๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค..." docker compose pull docker compose up -d # shellcheck disable=SC1091 source .env echo "" echo "๐ŸŽ‰ ์„ค์น˜ ์™„๋ฃŒ!" echo "โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€" echo " ๋„๋ฉ”์ธ: $DOMAIN" echo " ๊ต์‚ฌ ์ธ์ฆ์ฝ”๋“œ: $TEACHER_SECRET_CODE" echo " DB ๋น„๋ฐ€๋ฒˆํ˜ธ: $DB_PASSWORD (๊ผญ ๊ธฐ๋กํ•ด๋‘์„ธ์š”)" echo " ๊ด€๋ฆฌ์ž ์ดˆ๊ธฐํ™” ๋น„๋ฐ€๋ฒˆํ˜ธ: $ADMIN_RESET_PASSWORD" echo "โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€" echo "DNS A๋ ˆ์ฝ”๋“œ๋ฅผ ์ด ์„œ๋ฒ„์˜ ๊ณต์ธ IP๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด ๋ช‡ ๋ถ„ ์•ˆ์— https://$DOMAIN ์œผ๋กœ ์ ‘์†๋ฉ๋‹ˆ๋‹ค." echo "์ƒํƒœ ํ™•์ธ: cd $INSTALL_DIR && docker compose logs -f backend"