# W·Dot CMS v1.0.2 — 설치 가이드

> 그누보드 스타일 ZIP 배포. 5 분 설치, 0 코드 운영.

## 시스템 요구사항

| 항목 | 최소 | 권장 |
|---|---|---|
| PHP | 8.3 | 8.3.30+ |
| MySQL / MariaDB | 8.0 / 10.6 | MariaDB 10.11+ |
| Redis | 6.0 | 7.0+ |
| Composer | 2.5 | 2.9+ (의존성 갱신 시) |
| Node | 20 | 20.20+ (테마 커스터마이징 시) |
| 디스크 | 500 MB | 2 GB |
| 메모리 | 512 MB | 2 GB |

**필수 PHP 확장**: mbstring, openssl, pdo_mysql, ctype, json, bcmath, fileinfo, exif, gd, xml, intl, sodium, zip, tokenizer, curl

## 설치 절차

### 1) 호스팅사 패널에서 DB 생성

호스팅사 패널 (cPanel / aaPanel / Plesk 등) 에서:
- 데이터베이스 생성 (예: `wdot_db`)
- DB 사용자 생성 + 비밀번호 (예: `wdot_user` / `랜덤비번`)
- 사용자에게 DB 모든 권한 부여

### 2) 압축 해제 + 업로드
```bash
unzip wdot-cms-v1.0.2.zip
# FTP / SSH 로 서버에 업로드
```

### 3) 권한 설정
```bash
chown -R www-data:www-data /path/to/wdot-cms-v1.0.2
chmod -R 775 wdot-cms-v1.0.2/backend/storage
chmod -R 775 wdot-cms-v1.0.2/backend/bootstrap/cache
```

### 4) Nginx vhost 설정

`nginx-vhost.conf.example` 참조하여 도메인 + SSL 등록.

### 5) 웹 브라우저로 인스톨러 진입
```
https://your-domain.com/
```

환영 페이지 → **[▶ 설치 시작하기]** 클릭

5-stage 마법사:
1. **환경 점검** — PHP 확장 / 디렉토리 권한 / MySQL 자동
2. **DB 연결** — 1단계의 DB 자격증명 입력 (root 자격 불필요!)
3. **관리자 생성** — Email + 강한 비번 (zxcvbn 점수 3 이상 권장)
4. **마이그레이션 + 시드** — 자동 (basic / demo / full 선택)
5. **완료** — install.lock 자동 생성 + 다음 단계 안내

### 6) 설치 완료 후
- 마케팅 홈: `https://your-domain.com/`
- 관리자: `https://your-domain.com/admin/` (3단계 admin 자격)
- 커뮤니티: `https://your-domain.com/community/`
- 매뉴얼: `https://your-domain.com/site/manual/`

## v1.0.0/v1.0.1 → v1.0.2 변경

### 🔥 Critical 9 P0 fix
1. **APP_KEY 매 Stage 4 회전** → 기존 키 보존 (existingAppKey)
2. **Sanctum tokenable_id BIGINT vs UUID** → CHAR(36) ALTER 마이그
3. **DbValidator SELECT-via-exec** → query()->fetchAll()->closeCursor()
4. **AdminProvisioner** → tenant_id 명시 / two_factor_recovery_codes 별도 테이블 / super_admin role
5. **users.two_factor_secret VARCHAR(255)** → TEXT
6. **WdotInstallCommand Migrator signature** → 3-arg 호출
7. **ext-bcmath** EnvChecker REQUIRED 분류
8. **TENANT-ESC** RegisterController/OAuthController 조건부 role
9. **CSRF 419** install/* validateCsrfTokens exempt

### ✨ 신규 기능
- 데모 모드 (IP-isolated sandbox + 24h 자동 리셋)
- 마켓플레이스 본사 분리 + 라이선스
- 환경 자동 패치 (SystemDetector + EnvPatcher)
- Stage 5 409/403 fix (cache file token stage gate)
- Stage 2 root 자격 UI 제거 (그누보드 패리티)
- table_prefix 옵션 (한 DB 다중 인스턴스)
- 53 → 59 풀세트 블록 + Customizer 23 + AI Studio 9
- 5 테마 (Aqua/Mint/Olive/Coral/Slate) + 12 스킨
- Hook 시스템 (Action/Filter) + Permission Scope
- audit_logs SHA-256 hash chain + PIPA 5 endpoint
- OpenAPI 36 swagger paths
- 인터랙티브 메인 (115KB + 113 SVG + 13 keyframes + 14 인터랙션)

## 트러블슈팅

**Q. 환영 페이지가 안 보입니다 (404 또는 404 nginx)**
A. nginx vhost 의 `location = /` 가 `apps/marketing-installer/dist` 를 가리키는지 확인.

**Q. /install/ 진입 시 화면 깨짐**
A. `apps/installer` 빌드 산출물이 `backend/public/install/` 에 복사됐는지 확인.

**Q. Stage 1 에서 ext-bcmath / fileinfo 누락**
A. 환경 자동 패치 UI 의 [📋 설치 명령 보기] 또는 [⚡ 자동 설치] 사용.

**Q. Stage 5 에서 419 또는 403**
A. v1.0.2 에서 이미 fix 됨. 그래도 발생 시: `php artisan config:clear`.

**Q. 다시 설치하고 싶습니다**
A. `php artisan wdot:reset --force --drop-db` 후 `/install/` 재진입.

## 라이선스
LICENSE 파일 참조.

## 문의
- 매뉴얼: 사이트 내 /site/manual/
- 이슈: https://github.com/w-websoft/wdot-cms/issues
- 이메일: contact@w-websoft.com
