Files
school-attendance-deploy/install.sh
T

94 lines
4.0 KiB
Bash

#!/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 <<EOF
DOMAIN=${SCHOOL_DOMAIN}
DB_PASSWORD=${DB_PW}
TEACHER_SECRET_CODE=${TEACHER_CODE}
ADMIN_RESET_PASSWORD=${ADMIN_PW}
EOF
echo "✅ .env 생성 완료 (DB/관리자 비밀번호는 자동 생성 — 설치 끝나면 화면에 다시 보여드려요)"
fi
# ── 4. firebase-key.json 확인 ─────────────────────────────────
if [ ! -f firebase-key.json ]; then
echo ""
echo "⚠️ firebase-key.json이 없어서 빈 파일로 우선 설치를 진행합니다 (알림 기능은 꺼진 상태로 시작)."
echo " Firebase 콘솔에서 키를 받아 $(pwd)/firebase-key.json으로 덮어쓴 뒤"
echo " 'docker compose restart backend' 하면 알림 기능이 켜집니다."
echo "{}" > 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"