학교 출석 시스템 설치 패키지 (docker-compose + 원클릭 설치 스크립트)
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
# 다른 학교에 설치하기
|
||||
|
||||
이 시스템을 새 학교 서버에 설치하는 절차입니다. 백엔드는 도커로 뜨고, 도메인만 지정하면 HTTPS 인증서는 자동으로 발급됩니다.
|
||||
|
||||
## 1. Firebase 프로젝트 만들기 (학교마다 1개씩)
|
||||
|
||||
푸시 알림(FCM)과 웹 대시보드 호스팅에 필요합니다.
|
||||
|
||||
1. https://console.firebase.google.com 에서 새 프로젝트 생성
|
||||
2. Flutter 앱 폴더에서 `flutterfire configure` 실행 → 방금 만든 프로젝트 선택
|
||||
- `lib/firebase_options.dart`, `android/app/google-services.json`이 새 프로젝트 값으로 교체됩니다
|
||||
3. Firebase 콘솔 → 프로젝트 설정 → Cloud Messaging → **웹 푸시 인증서**에서 VAPID 키 발급 (아래 3번에서 사용)
|
||||
4. Firebase 콘솔 → 프로젝트 설정 → 서비스 계정 → **새 비공개 키 생성** → `firebase-key.json`으로 저장 (서버에 올릴 파일, 4번에서 사용)
|
||||
|
||||
## 2. 안드로이드 앱 ID 변경 (학교마다 다르게)
|
||||
|
||||
- `android/app/build.gradle.kts`의 `applicationId`를 학교별 고유 값으로 변경 (예: `com.myschool.attendance`)
|
||||
- 릴리즈 키스토어 새로 생성하고 `android/key.properties`에 경로/비밀번호 등록 (기존 백산고 릴리즈와 절대 같은 키스토어 쓰지 않기)
|
||||
|
||||
## 3. 서버에 백엔드 배포
|
||||
|
||||
가장 쉬운 방법 — 설치 스크립트 한 줄:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://hootongerungit.mcv.kr/sihoo/school-attendance-deploy/raw/branch/main/install.sh | bash
|
||||
```
|
||||
|
||||
Docker가 없으면 자동으로 설치하고, 도메인/교사 인증코드를 물어본 뒤 미리 빌드해둔 이미지(`hootongerungit.mcv.kr/sihoo/school-backend`)를 내려받아 바로 실행합니다. (소스코드는 비공개 레포에 있고, 이 이미지는 그 코드로 미리 빌드해서 공개로 올려둔 것 — 설치할 땐 소스코드 접근이 필요 없습니다.)
|
||||
|
||||
수동으로 하고 싶다면:
|
||||
|
||||
```bash
|
||||
git clone https://hootongerungit.mcv.kr/sihoo/school-attendance-deploy.git
|
||||
cd school-attendance-deploy
|
||||
cp .env.example .env
|
||||
vi .env # DOMAIN, DB_PASSWORD, TEACHER_SECRET_CODE, ADMIN_RESET_PASSWORD 채우기
|
||||
# 1-4번에서 만든 firebase-key.json을 이 폴더에 복사
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
- `DOMAIN`으로 지정한 주소의 DNS A레코드를 이 서버의 공인 IP로 미리 연결해두세요 (포트 80/443 오픈 필요). Caddy가 첫 요청부터 자동으로 Let's Encrypt 인증서를 발급합니다.
|
||||
- `docker compose logs -f backend`로 정상 기동(DB 연결 완료 로그) 확인.
|
||||
- 백엔드 코드가 업데이트되면 `docker compose pull && docker compose up -d`로 최신 이미지로 갱신하면 됩니다.
|
||||
|
||||
## 4. Flutter 앱 빌드 (학교별 서버 주소로)
|
||||
|
||||
```bash
|
||||
flutter build web --release -t lib/main_client_app.dart \
|
||||
--dart-define=BASE_URL=https://<2번에서 지정한 DOMAIN> \
|
||||
--dart-define=WEB_VAPID_KEY=<1-3번에서 발급받은 VAPID 키> \
|
||||
--dart-define=SCHOOL_NAME=<학교 이름>
|
||||
|
||||
flutter build apk --release --split-per-abi -t lib/main_client_app.dart \
|
||||
--dart-define=BASE_URL=https://<DOMAIN> \
|
||||
--dart-define=WEB_VAPID_KEY=<VAPID 키> \
|
||||
--dart-define=SCHOOL_NAME=<학교 이름>
|
||||
```
|
||||
|
||||
인자를 안 주면 기존 백산고 서버(backsanhi.mcv.kr) 기본값으로 빌드되니, 새 학교용 빌드에는 반드시 세 값을 다 넘겨야 합니다.
|
||||
Reference in New Issue
Block a user