From 1c45840c70b0edc68784a7b733842a40b979c737 Mon Sep 17 00:00:00 2001 From: AutonetSellCar Deploy Date: Sun, 4 Jan 2026 13:20:23 +0900 Subject: [PATCH] fix: Add Korean fonts to Docker image for PDF capture MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add fonts-noto-cjk and fontconfig to backend Dockerfile - Fixes garbled Korean text in performance check PDFs - Update SERVER_INFRASTRUCTURE_PLAN.md with actual infrastructure πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- SERVER_INFRASTRUCTURE_PLAN.md | 245 +++++++++++++++++++++------------- backend/Dockerfile | 6 +- 2 files changed, 156 insertions(+), 95 deletions(-) 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 .