diff --git a/SERVER_INFRASTRUCTURE_PLAN.md b/SERVER_INFRASTRUCTURE_PLAN.md index 995bd2f..c0cc98d 100644 --- a/SERVER_INFRASTRUCTURE_PLAN.md +++ b/SERVER_INFRASTRUCTURE_PLAN.md @@ -212,123 +212,174 @@ networks: name: master-network ``` -### 5.2 Server2 (MongolCar) - docker-compose.yml +### 5.2 Server2 (AutonetSellCar) - 실제 구성 (2025-01-04 적용) +**위치**: `/opt/autonet/production/` 및 `/opt/autonet/staging/` + +**Production** (`docker-compose.production.yml`): ```yaml -version: '3.8' - services: - # MongolCar Frontend - mongolcar-frontend: - build: ./mongolcar/frontend - container_name: mongolcar-frontend - restart: unless-stopped + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + args: + - NEXT_PUBLIC_API_URL=https://autonetsellcar.com + container_name: autonet-frontend ports: - - '3000:3000' + - "3000:3000" environment: - - NEXT_PUBLIC_API_URL=http://192.168.0.202:8000 + - NODE_ENV=production depends_on: - - mongolcar-backend - - # MongolCar Backend - mongolcar-backend: - build: ./mongolcar/backend - container_name: mongolcar-backend + - backend restart: unless-stopped + networks: + - mongolcar-network + + backend: + build: + context: ./backend + dockerfile: Dockerfile + container_name: autonet-backend ports: - - '8000:8000' - environment: - - DATABASE_URL=postgresql://admin:${DB_PASSWORD}@192.168.0.201:5432/mongolcar - - REDIS_URL=redis://:${REDIS_PASSWORD}@192.168.0.201:6379/0 - - SECRET_KEY=${SECRET_KEY} + - "8000:8000" + env_file: + - ./backend/.env volumes: - - ./data/uploads:/app/uploads - - # Carmodoo Agent (차량 데이터 수집) - carmodoo-agent: - build: ./carmodoo-agent - container_name: carmodoo-agent + - /opt/autonet/production/backend/uploads:/app/uploads restart: unless-stopped - environment: - - CARMODOO_USER_ID=${CARMODOO_USER_ID} - - CARMODOO_PASSWORD=${CARMODOO_PASSWORD} - - API_SERVER_URL=http://mongolcar-backend:8000/api - - AGENT_API_KEY=${AGENT_API_KEY} - volumes: - - ./data/agent:/app/data - - ./logs/agent:/app/logs - depends_on: - - mongolcar-backend + networks: + - mongolcar-network networks: - default: - name: mongolcar-network + mongolcar-network: + external: true ``` -### 5.3 Server3 (Grantech & Cylinx) - docker-compose.yml +**Staging** (`docker-compose.staging.yml`): +```yaml +services: + frontend-staging: + build: + context: ./frontend + dockerfile: Dockerfile + args: + - NEXT_PUBLIC_API_URL=https://staging.autonetsellcar.com + container_name: autonet-frontend-staging + ports: + - "3001:3000" + depends_on: + - backend-staging + restart: unless-stopped + networks: + - mongolcar-network + + backend-staging: + build: + context: ./backend + dockerfile: Dockerfile + container_name: autonet-backend-staging + ports: + - "8001:8000" + env_file: + - ./backend/.env # DB_NAME=autonet_staging + volumes: + - /opt/autonet/production/backend/uploads:/app/uploads + restart: unless-stopped + networks: + - mongolcar-network + +networks: + mongolcar-network: + external: true +``` + +**Server2 컨테이너 현황**: +| 컨테이너 | 포트 | 도메인 | DB | 상태 | +|----------|------|--------|-----|------| +| autonet-frontend | 3000 | autonetsellcar.com | - | ✅ 운영중 | +| autonet-backend | 8000 | (내부) | autonet | ✅ 운영중 | +| autonet-frontend-staging | 3001 | staging.autonetsellcar.com | - | ✅ 운영중 | +| autonet-backend-staging | 8001 | (내부) | autonet_staging | ✅ 운영중 | + +### 5.3 Server3 (Grantech & Nextcloud) - 실제 구성 (2025-01-04 적용) + +**위치**: `/home/damon/sites/grantech/docker-compose.yml` ```yaml -version: '3.8' - services: - # Grantech Frontend - grantech-frontend: - build: ./grantech/frontend + frontend: + build: + context: ./frontend + dockerfile: Dockerfile container_name: grantech-frontend - restart: unless-stopped ports: - - '3001:3000' + - "3001:3001" environment: - - NEXT_PUBLIC_API_URL=http://192.168.0.203:8001 + - NODE_ENV=production + depends_on: + - backend + restart: unless-stopped + networks: + - grantech-network - # Grantech Backend - grantech-backend: - build: ./grantech/backend + backend: + build: + context: ./backend + dockerfile: Dockerfile container_name: grantech-backend - restart: unless-stopped ports: - - '8001:8000' - environment: - - DATABASE_URL=postgresql://admin:${DB_PASSWORD}@192.168.0.201:5432/grantech - - REDIS_URL=redis://:${REDIS_PASSWORD}@192.168.0.201:6379/1 - - # Cylinx Frontend - cylinx-frontend: - build: ./cylinx/frontend - container_name: cylinx-frontend + - "8001:8001" + env_file: + - ./backend/.env + volumes: + - ./backend/uploads:/app/uploads restart: unless-stopped - ports: - - '3002:3000' - environment: - - NEXT_PUBLIC_API_URL=http://192.168.0.203:8002 - - # Cylinx Backend - cylinx-backend: - build: ./cylinx/backend - container_name: cylinx-backend - restart: unless-stopped - ports: - - '8002:8000' - environment: - - DATABASE_URL=postgresql://admin:${DB_PASSWORD}@192.168.0.201:5432/cylinx - - REDIS_URL=redis://:${REDIS_PASSWORD}@192.168.0.201:6379/2 + networks: + - grantech-network networks: - default: - name: sites-network + grantech-network: + driver: bridge ``` +**Nextcloud** (별도 docker-compose): +```yaml +# Nextcloud - cloud.grantech.kr +services: + nextcloud: + image: nextcloud:latest + container_name: nextcloud + ports: + - "8080:80" + restart: unless-stopped + + nextcloud-db: + image: mariadb:10.6 + container_name: nextcloud-db + restart: unless-stopped +``` + +**Server3 컨테이너 현황**: +| 컨테이너 | 포트 | 도메인 | 상태 | +|----------|------|--------|------| +| grantech-frontend | 3001 | grantech.kr | ✅ 운영중 | +| grantech-backend | 8001 | api.grantech.kr | ✅ 운영중 | +| nextcloud | 8080 | cloud.grantech.kr | ✅ 운영중 | +| nextcloud-db | 3306 | (내부) | ✅ 운영중 | + --- ## 6. 데이터베이스 설계 ### 6.1 PostgreSQL 데이터베이스 분리 -| 데이터베이스 | 용도 | Redis DB | -|-------------|------|----------| -| mongolcar | MongolCar 서비스 | 0 | -| grantech | Grantech 서비스 | 1 | -| cylinx | Cylinx 서비스 | 2 | +| 데이터베이스 | 용도 | Redis DB | 상태 | +|-------------|------|----------|------| +| `autonet` | AutonetSellCar Production | 0 | ✅ 운영중 | +| `autonet_staging` | AutonetSellCar Staging | 0 | ✅ 운영중 | +| `grantech` | Grantech 서비스 | 1 | ✅ 운영중 | +| `cylinx` | Cylinx 서비스 (예정) | 2 | ⏳ 미구축 | ### 6.2 MongolCar 주요 테이블 @@ -435,18 +486,23 @@ CREATE INDEX idx_cars_status ON cars(status); ## 7. Nginx Proxy Manager 설정 -### 7.1 Proxy Hosts 설정 +**관리 UI**: http://192.168.0.201:81 -| Domain | Scheme | Forward Host | Forward Port | SSL | -|--------|--------|--------------|--------------|-----| -| autonetsellcar.com | http | 192.168.0.202 | 3000 | Let's Encrypt | -| api.autonetsellcar.com | http | 192.168.0.202 | 8000 | Let's Encrypt | -| grantech.kr | http | 192.168.0.203 | 3001 | Let's Encrypt | -| api.grantech.kr | http | 192.168.0.203 | 8001 | Let's Encrypt | -| cylinx.kr | http | 192.168.0.203 | 3002 | Let's Encrypt | -| api.cylinx.kr | http | 192.168.0.203 | 8002 | Let's Encrypt | -| portainer.local | http | 192.168.0.201 | 9000 | - | -| grafana.local | http | 192.168.0.201 | 3100 | - | +### 7.1 Proxy Hosts 설정 (실제 운영중 - 2025-01-04) + +| Domain | Scheme | Forward Host | Forward Port | SSL | 상태 | +|--------|--------|--------------|--------------|-----|------| +| autonetsellcar.com | http | 192.168.0.202 | 3000 | Let's Encrypt | ✅ 운영중 | +| staging.autonetsellcar.com | http | 192.168.0.202 | 3001 | Let's Encrypt | ✅ 운영중 | +| grantech.kr | http | 192.168.0.203 | 3001 | Let's Encrypt | ✅ 운영중 | +| api.grantech.kr | http | 192.168.0.203 | 8001 | Let's Encrypt | ✅ 운영중 | +| cloud.grantech.kr | http | 192.168.0.203 | 8080 | Let's Encrypt | ✅ 운영중 | +| cylinx.kr | http | 192.168.0.203 | 3002 | Let's Encrypt | ⏳ 예정 | +| api.cylinx.kr | http | 192.168.0.203 | 8002 | Let's Encrypt | ⏳ 예정 | +| portainer.local | http | 192.168.0.201 | 9000 | - | ✅ 내부용 | +| grafana.local | http | 192.168.0.201 | 3100 | - | ✅ 내부용 | + +> **참고**: AutonetSellCar Backend API는 별도 프록시 없이 Frontend에서 직접 호출 (같은 도메인, Next.js rewrites 사용) --- @@ -609,3 +665,4 @@ find /backup -type d -mtime +7 -exec rm -rf {} \; --- *Generated by Claude Code - 2025-11-28* +*Updated: 2025-01-04 - Grantech Docker 전환, AutonetSellCar Staging 추가, Nginx Proxy Manager 실제 설정 반영* diff --git a/backend/Dockerfile b/backend/Dockerfile index 5c6bd6a..46c83bc 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -24,7 +24,11 @@ RUN apt-get update && apt-get install -y \ libasound2 \ libpango-1.0-0 \ libcairo2 \ - && rm -rf /var/lib/apt/lists/* + # Korean fonts for PDF capture + fonts-noto-cjk \ + fontconfig \ + && rm -rf /var/lib/apt/lists/* \ + && fc-cache -fv # Install Python dependencies COPY requirements.txt .