902118d46e
- nodemailer + pdf-lib로 실제 SMTP 발송. mail_log INSERT(is_send='N') → 발송 → 성공 시 UPDATE(is_send='Y'), 실패 시 UPDATE(error_log). SMTP_SEND_SWITCH='N'면 발송 스킵.
- SMTP 3계정(ERP/SALES/PURCHASE) host/user/pw 환경변수 분리. 견적서는 SALES. dev는 backend-node/.env, 운영은 deploy/onpremise + docker/prod + docker/deploy 3개 compose에 environment 매핑(호스트 .env에서 실값 주입).
- 다이얼로그(EstimateMailDialog): wace estimateMailFormPopup.jsp 1:1. 고객사 담당자 체크박스 + To/CC/제목/내용 자동채움(GET /sales/estimate/mail-info/:id + .../customer/:id/managers). hasBaseEst/hasAddEst 분기로 PDF 첨부 안내. 본문은 다이얼로그 plain text 입력 → <br> 변환.
- PDF 첨부: 메일 다이얼로그가 hidden iframe으로 최신 차수 template1/2 페이지를 렌더 → window.fn_generateAndUploadPdf(cb) 글로벌 → jsPDF.output('datauristring') base64 추출 → 한 요청에 전달. backend가 견적 PDF + estimate02 N건 pdf-lib로 합본 첨부.
- PDF 캡처 수신처 누락 픽스: CustomerSelect의 /sales/customers 옵션 fetch가 iframe에서 dataLoaded=true 뒤에 끝나 셀렉트 라벨이 빈 상태로 캡처되던 현상. fetchCustomers export + template1/2 setLoading(false) 직전 await + onclone에서 [role="combobox"] 라이브 DOM 텍스트 fallback.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
53 lines
2.0 KiB
YAML
53 lines
2.0 KiB
YAML
services:
|
|
# Node.js 백엔드
|
|
plm-backend:
|
|
build:
|
|
context: ../../backend-node
|
|
dockerfile: ../docker/prod/backend.Dockerfile # 운영용 Dockerfile
|
|
container_name: pms-backend-prod
|
|
ports:
|
|
- "8080:8080" # 호스트:컨테이너 포트 매핑
|
|
networks:
|
|
- pms-network
|
|
environment:
|
|
- NODE_ENV=production
|
|
- PORT=8080
|
|
- HOST=0.0.0.0 # 모든 인터페이스에서 바인딩
|
|
- DATABASE_URL=${DATABASE_URL}
|
|
- JWT_SECRET=${JWT_SECRET}
|
|
- JWT_EXPIRES_IN=${JWT_EXPIRES_IN:-24h}
|
|
- CORS_ORIGIN=${CORS_ORIGIN:-http://192.168.0.70:5555,http://39.117.244.52:5555,http://localhost:9771}
|
|
- CORS_CREDENTIALS=true
|
|
- LOG_LEVEL=info
|
|
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
|
|
- KMA_API_KEY=${KMA_API_KEY}
|
|
- ITS_API_KEY=${ITS_API_KEY}
|
|
- EXPRESSWAY_API_KEY=${EXPRESSWAY_API_KEY:-}
|
|
- SMART_FACTORY_API_KEY_COMPANY_7=${SMART_FACTORY_API_KEY_COMPANY_7:-}
|
|
- SMART_FACTORY_API_KEY_COMPANY_8=${SMART_FACTORY_API_KEY_COMPANY_8:-}
|
|
- SMART_FACTORY_API_KEY_COMPANY_9=${SMART_FACTORY_API_KEY_COMPANY_9:-}
|
|
- SMART_FACTORY_API_KEY_COMPANY_10=${SMART_FACTORY_API_KEY_COMPANY_10:-}
|
|
- SMART_FACTORY_API_KEY_COMPANY_16=${SMART_FACTORY_API_KEY_COMPANY_16:-}
|
|
# SMTP (견적서/발주서 등 메일 발송)
|
|
- SMTP_HOST=${SMTP_HOST:-erp.rps-korea.com}
|
|
- SMTP_PORT=${SMTP_PORT:-25}
|
|
- SMTP_TLS=${SMTP_TLS:-false}
|
|
- SMTP_SEND_SWITCH=${SMTP_SEND_SWITCH:-Y}
|
|
- SMTP_USER_ERP=${SMTP_USER_ERP:-}
|
|
- SMTP_PW_ERP=${SMTP_PW_ERP:-}
|
|
- SMTP_USER_SALES=${SMTP_USER_SALES:-}
|
|
- SMTP_PW_SALES=${SMTP_PW_SALES:-}
|
|
- SMTP_USER_PURCHASE=${SMTP_USER_PURCHASE:-}
|
|
- SMTP_PW_PURCHASE=${SMTP_PW_PURCHASE:-}
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 60s
|
|
|
|
networks:
|
|
pms-network:
|
|
external: true # 외부에서 생성된 네트워크 사용
|