2026-08-06 ServiceOn Blog 작업일지입니다. 오늘은 2건의 작업을 진행했습니다.
배포 도메인
현상/기능
- `https://blog.serviceon.kr/` 관리자 버튼이 localhost 로 이동 → 개발/운영 URL 분리
현상/기능
- 관리자 URL을 `https://admin.blog.serviceon.kr` 로 사용 (DNS는 사용자 추가)
- nginx conf 검토·수정 (기존 blog conf가 n8n/workflow 인증서로 잘못됨)
- PM2 등록 방법
작업
- `NEXT_PUBLIC_ADMIN_URL` 제거 → 런타임 `ADMIN_LOGIN_URL` ( 개발 / 운영)
- 신규 → `getAdminLoginUrl`
- → Header에 `adminUrl` props 주입 (운영 기본값 admin.blog.serviceon.kr)
- `서버 설정=https://admin.blog.serviceon.kr`
- `NEXT_PUBLIC_ADMIN_URL=https://admin.blog.serviceon.kr/login`
- README 운영 도메인 안내 반영
- `ops/nginx/blog.serviceon.kr.conf`: HTTP(80)만 → certbot으로 SSL (인증서 없는 443 제거, http2 경고 해소)
- `scripts/ecosystem.config.cjs`: blog-web(**3001**) / blog-admin(**3002**) — 3000 충돌 회피
- nginx proxy_pass / pack 기본 포트도 3001·3002로 변경
- pack이 `deploy/ecosystem.config.cjs` 를 확실히 쓰도록 수정 (`pnpm build`만으로는 없음 → `pnpm build:deploy` 또는 `pnpm pack:deploy`)
- pack `tar -h`: symlink dereference — 서버 `Cannot find module 'next'` 대응
- pack: pnpm peer(`@swc/helpers` 등)을 app `node_modules`로 호이스트 + cwd를 server.js 위치로
- pack Windows symlink 수정: `realpathSync`/`existsSync` EPERM → `readlink`+`lstat`로 peer(`react`, `@swc/helpers` 등) 실파일 복사 (로컬 `node ` HTTP 200 확인)
n8n 워크플로우 (t2)
현상/기능
- AI Agent Structured Output Parser에 `message` 필드 추가
작업
- Structured Output Parser JSON 예시에 `message`(메일용 plain text) 추가
- AI Agent 프롬프트에 message 출력 지시 반영
- Gmail `Send a message` 본문을 `{{ $json.output.message }}` 로 연결