fix: Add Korean fonts to Docker image for PDF capture
- 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 <noreply@anthropic.com>
This commit is contained in:
@@ -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 실제 설정 반영*
|
||||
|
||||
@@ -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 .
|
||||
|
||||
Reference in New Issue
Block a user