diff --git a/DOCKER_RUN.md b/DOCKER_RUN.md new file mode 100644 index 0000000..3bbd62c --- /dev/null +++ b/DOCKER_RUN.md @@ -0,0 +1,173 @@ +# Docker로 TaxBaik 로컬 실행하기 + +## 1. 사전 요구사항 + +- Docker Desktop 설치 +- Docker Compose 설치 +- 4GB+ 메모리 여유 + +## 2. 빌드 및 실행 + +```bash +# 1단계: 빌드 (이미 완료됨) +cd C:\Temp\taxbaik +dotnet publish TaxBaik.Web -c Release -o ./publish/web +dotnet publish TaxBaik.Admin -c Release -o ./publish/admin + +# 2단계: Docker Compose 실행 +docker-compose up -d + +# 3단계: 상태 확인 +docker-compose ps +``` + +## 3. 접근 방법 + +### 공개 사이트 (Razor Pages) +- **URL**: http://localhost:5001/taxbaik +- **기능**: + - 홈페이지 보기 + - 블로그 검색 + - 상담 신청 폼 + +### 관리자 백오피스 (Blazor Server) +- **URL**: http://localhost:5002/taxbaik/admin/login +- **초기 계정**: + - username: `admin` + - password: `admin123` +- **기능**: + - 대시보드 확인 + - 블로그 관리 + - 문의 조회 + +## 4. 데이터베이스 접근 + +### PostgreSQL CLI 접속 +```bash +docker-compose exec postgres psql -U taxbaik -d taxbaikdb +``` + +### 쿼리 예시 +```sql +-- 테이블 확인 +\dt + +-- 마이그레이션 확인 +SELECT * FROM schema_migrations; + +-- 블로그 포스트 확인 +SELECT id, title, is_published FROM blog_posts; + +-- 문의 확인 +SELECT id, name, phone, status FROM inquiries; + +-- 관리자 확인 +SELECT username FROM admin_users; +``` + +## 5. 로그 확인 + +```bash +# Web 앱 로그 +docker-compose logs -f taxbaik-web + +# Admin 앱 로그 +docker-compose logs -f taxbaik-admin + +# 데이터베이스 로그 +docker-compose logs -f postgres +``` + +## 6. E2E 테스트 + +### 6.1 공개 사이트 테스트 +```bash +# 홈페이지 접근 +curl -I http://localhost:5001/taxbaik/ +# 예상: 200 OK + +# 블로그 목록 +curl http://localhost:5001/taxbaik/blog | grep -o "title>[^<]*" | head -5 + +# 블로그 상세 (accountant-mistakes-5) +curl http://localhost:5001/taxbaik/blog/accountant-mistakes-5 | grep -o "og:title[^>]*" +``` + +### 6.2 문의 폼 제출 테스트 +```bash +curl -X POST http://localhost:5001/taxbaik/contact \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "name=테스트&phone=010-1234-5678&service_type=사업자세무&message=테스트 문의&__RequestVerificationToken=" +``` + +### 6.3 관리자 테스트 +```bash +# 로그인 페이지 +curl -I http://localhost:5002/taxbaik/admin/login +# 예상: 200 OK + +# 로그인 (쿠키 저장) +curl -c cookies.txt -X POST http://localhost:5002/taxbaik/admin/login \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "username=admin&password=admin123" + +# 대시보드 접근 (쿠키 사용) +curl -b cookies.txt http://localhost:5002/taxbaik/admin/dashboard +``` + +## 7. 종료 및 정리 + +```bash +# 컨테이너 중지 +docker-compose down + +# 볼륨 포함 삭제 (데이터베이스 초기화) +docker-compose down -v + +# 이미지 삭제 +docker rmi taxbaik-web taxbaik-admin +``` + +## 8. 트러블슈팅 + +| 문제 | 해결 방법 | +|------|----------| +| 포트 5001/5002 사용 중 | `netstat -ano \| findstr :5001` 후 프로세스 종료 | +| 데이터베이스 연결 실패 | `docker-compose logs postgres` 로그 확인 | +| 마이그레이션 오류 | `docker-compose down -v` 후 재시작 | +| 메모리 부족 | Docker Desktop 설정에서 메모리 증가 | + +## 9. 성능 모니터링 + +```bash +# 컨테이너 리소스 사용량 +docker stats + +# 네트워크 확인 +docker network ls +docker network inspect taxbaik_default +``` + +## 10. 데이터 검증 + +### 초기 데이터 확인 +```bash +# 카테고리 +docker-compose exec postgres psql -U taxbaik -d taxbaikdb \ + -c "SELECT * FROM categories;" + +# 블로그 포스트 +docker-compose exec postgres psql -U taxbaik -d taxbaikdb \ + -c "SELECT title, is_published FROM blog_posts;" + +# 관리자 +docker-compose exec postgres psql -U taxbaik -d taxbaikdb \ + -c "SELECT username FROM admin_users;" +``` + +--- + +**상태 확인 URL**: +- 공개 사이트: http://localhost:5001/taxbaik +- 관리자: http://localhost:5002/taxbaik/admin/login +- 데이터베이스: localhost:5432 diff --git a/Dockerfile.admin b/Dockerfile.admin new file mode 100644 index 0000000..626a5e5 --- /dev/null +++ b/Dockerfile.admin @@ -0,0 +1,9 @@ +FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine + +WORKDIR /app + +COPY ./publish/admin/ . + +EXPOSE 5002 + +ENTRYPOINT ["dotnet", "TaxBaik.Admin.dll"] diff --git a/Dockerfile.web b/Dockerfile.web new file mode 100644 index 0000000..8b8df8d --- /dev/null +++ b/Dockerfile.web @@ -0,0 +1,9 @@ +FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine + +WORKDIR /app + +COPY ./publish/web/ . + +EXPOSE 5001 + +ENTRYPOINT ["dotnet", "TaxBaik.Web.dll"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e5db314 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,56 @@ +version: '3.8' + +services: + postgres: + image: postgres:18-alpine + container_name: taxbaik-db + environment: + POSTGRES_DB: taxbaikdb + POSTGRES_USER: taxbaik + POSTGRES_PASSWORD: taxbaik123 + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U taxbaik -d taxbaikdb"] + interval: 10s + timeout: 5s + retries: 5 + + taxbaik-web: + build: + context: . + dockerfile: Dockerfile.web + container_name: taxbaik-web + environment: + ASPNETCORE_ENVIRONMENT: Development + ASPNETCORE_URLS: http://0.0.0.0:5001 + ConnectionStrings__Default: "Host=postgres;Database=taxbaikdb;Username=taxbaik;Password=taxbaik123" + ports: + - "5001:5001" + depends_on: + postgres: + condition: service_healthy + volumes: + - ./publish/web:/app + + taxbaik-admin: + build: + context: . + dockerfile: Dockerfile.admin + container_name: taxbaik-admin + environment: + ASPNETCORE_ENVIRONMENT: Development + ASPNETCORE_URLS: http://0.0.0.0:5002 + ConnectionStrings__Default: "Host=postgres;Database=taxbaikdb;Username=taxbaik;Password=taxbaik123" + ports: + - "5002:5002" + depends_on: + postgres: + condition: service_healthy + volumes: + - ./publish/admin:/app + +volumes: + postgres_data: