Commit Graph

23 Commits

Author SHA1 Message Date
chpark 99fb030720 fix: .dockerignore 추가 (data/postgres 빌드 오류 방지) 2026-03-29 23:09:47 +09:00
chpark a0b12f723b fix: Traefik v3 HostRegexp 문법 수정
Traefik v3에서는 {name:pattern} 문법이 제거됨.
표준 정규식으로 변경: ^[a-z0-9-]+\.startover\.co\.kr$
2026-03-29 23:08:40 +09:00
chpark 81f52afd57 fix: 서브도메인 연결 수정 + SEO 기능 추가
- 도메인 매핑 저장 시 소문자 정규화
- 도메인 조회 시 case-insensitive 비교 (LOWER)
- robots.txt, sitemap.xml 자동 생성
- SEO 메타 태그 (OG, Twitter Card, JSON-LD 구조화 데이터)
2026-03-29 20:53:48 +09:00
chpark 40e3713f99 feat: 서브도메인 와일드카드 라우팅
- Traefik: *.startover.co.kr → crawl-manager (admin 제외)
- startover.co.kr(메인)은 기존 컨테이너 그대로 유지
- admin.startover.co.kr → 관리자
- {서브도메인}.startover.co.kr → DB domain_mappings에서 매핑된 사이트 HTML 서빙
- domainRouter에서 admin 도메인 명시적 제외

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 14:42:17 +09:00
chpark 2343c1903d fix: api/toast/timeAgo 함수를 body 스크립트보다 앞에 배치
스크립트 실행 순서: __INIT__ → 유틸함수 → 페이지 스크립트

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 13:20:53 +09:00
chpark d576cb5255 fix: __INIT__ script를 body 내 다른 스크립트보다 먼저 실행되도록 위치 이동
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 13:12:42 +09:00
chpark 8c8e3ffeaa fix: SSR 데이터 주입 방식 수정 - layout에서 ssrData script 태그 직접 출력
- app.js: initScript() 헬퍼로 <script>var __INIT__=데이터</script> 생성
- layout.ejs: <%- ssrData %> 로 body 뒤에 script 태그 삽입
- 모든 페이지에서 첫 로드 시 즉시 데이터 표시 확인 완료

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:56:59 +09:00
chpark dcae228a24 fix: 전 페이지 서버사이드 렌더링으로 전환 (초기 데이터 fetch 제거)
- 모든 관리자 페이지에서 DB 데이터를 서버에서 직접 HTML에 주입
- __INIT__ 글로벌 변수로 초기 데이터 전달 (fetch 불필요)
- 대시보드/사이트관리/AdSense/도메인/로그/사이트상세 전부 적용
- trust proxy 설정 (Traefik 뒤 동작)
- 저장/삭제/크롤링 등 액션은 여전히 API fetch 사용

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 11:24:57 +09:00
chpark e560a2faa2 fix: 프로덕션 쿠키/세션 문제 해결
- trust proxy 설정 (Traefik 뒤에서 동작)
- 쿠키 secure:false (Traefik이 SSL 처리하므로 내부는 HTTP)
- fetch credentials:'same-origin' 명시
- redirect:manual 제거 (opaqueredirect 문제)
- content-type 체크로 비정상 응답 감지

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 02:25:05 +09:00
chpark 678e00449a fix: API fetch 에러 핸들링 강화
- fetch redirect:manual로 리다이렉트 방지
- 401/리다이렉트 시 로그인 페이지로 이동
- JSON 파싱 실패 시 빈 배열 반환 (빈 목록 방지)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 02:14:47 +09:00
chpark 4df273fa19 fix: API 인증 실패 시 401 반환 (리다이렉트 대신)
페이지 이동 후 사이트 목록 빈 화면 버그 수정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 02:07:23 +09:00
chpark 0e1138df15 fix: data 디렉토리 sudo로 생성 + 권한 부여
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:59:42 +09:00
chpark e1f7f1f2ad feat: 로그인 페이지 추가 (Basic Auth 제거)
- 산뜻한 로그인 페이지 (다크 테마 + 글로우 배경)
- 쿠키 기반 세션 인증 (24시간 유지)
- 로그아웃 버튼 (사이드바 + 상단바)
- 미인증 시 로그인 페이지로 리다이렉트

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:57:38 +09:00
chpark 6257025c8e fix: 루트 경로 /admin 리다이렉트 + git URL 인코딩 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:42:48 +09:00
chpark 99ae8ed79e fix: docker system prune 제거 (DB 데이터 보호)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:29:30 +09:00
chpark 6d6e1b96f0 fix: start-server.sh 실행권한 자동 부여
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:25:38 +09:00
chpark b7453fb273 fix: git 인증정보 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:24:41 +09:00
chpark 0a322bafa3 fix: DB 연결 재시도 + git 인증 + 볼륨 경로 수정
- db.js: waitForDB() 추가 (최대 10회, 3초 간격 재시도)
- app.js: DB 연결 시 waitForDB 사용
- start-server.sh: git 유저명 @를 %40으로 인코딩
- docker-compose.yml: 볼륨 상대경로로 변경 (./data/)
- 디렉토리 권한 문제 해결

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:23:32 +09:00
chpark 71329d72a9 fix: Traefik 외부 네트워크 이름 수정 (repo_default)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:14:54 +09:00
chpark d6f15c81f0 fix: 서버 git 자동 인증 + 최초 설치 스크립트
- start-server.sh: git remote URL에 인증정보 포함 (비밀번호 입력 생략)
- setup-server.sh: 서버 최초 설치용 (clone + 디렉토리 생성)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:09:58 +09:00
chpark 52b1c40132 fix: 사이트 관리 페이지 개선 + 디스커버리 크롤링 + 광고 슬롯 선택화
- 디스커버리 크롤링: 태그/목록 페이지 URL에서 최신 글 링크 자동 탐색
  (parse_rules.discovery.link_selector로 Read more 링크 찾기)
- AdSense 슬롯 ID 선택사항: client_id만 있으면 자동 광고 동작
- 사이트 관리: 저장 후 목록 즉시 갱신 (await loadSites)
- 사이트 관리: 크롤링 스케줄 설정 UI 추가 (크론 프리셋 버튼)
- 사이트 관리: 미리보기 버튼 추가 (렌더링 + 파싱 데이터 확인)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 01:05:21 +09:00
chpark 73cd9d1a2e add: 서버 배포 스크립트 (start-server.sh)
- Ubuntu 서버에서 git fetch + reset으로 최신 소스 적용
- Docker 시스템 정리 후 빌드 & 실행
- 데이터 디렉토리 자동 생성

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 00:45:24 +09:00
chpark c61f10560f init: 크롤링 관리 솔루션 초기 구성
- Express.js 기반 관리자 페이지 (사이트/크롤링/AdSense/도메인 관리)
- PostgreSQL 16 + Docker Compose (Traefik 연동)
- 크롤러: axios + cheerio 기반 HTML 파싱
- 스케줄러: node-cron 기반 자동 크롤링
- 공개 사이트: slug/도메인 기반 DB에서 렌더링 HTML 서빙
- 도메인: admin.startover.co.kr

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 00:44:19 +09:00