학교 출석 시스템 설치 패키지 (docker-compose + 원클릭 설치 스크립트)
This commit is contained in:
+93
@@ -0,0 +1,93 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user