SK-Intellix Wiki Domain Deployment
이 문서는 현재 로컬에서만 보던 llmwiki를 실제 도메인으로 배포하기 위한 운영 설계와 실행 절차를 정리한다.
권장 목표는 공개 웹사이트가 아니라, 인증이 걸린 내부 지식 허브다.
권장 URL 예시:
https://wiki.<your-domain>
권장 접근제어:
Cloudflare Access 또는 Caddy Basic Auth
1. 권장 구조
Local Codex / llmwiki source
-> llmwiki build
-> curated docs-only staging
-> sensitive scan
-> rsync or git-based deploy
-> VPS /var/www/sk-intellix-wiki
-> Caddy HTTPS
-> Cloudflare Access or Basic Auth
-> https://wiki.<domain>
이 구조를 추천하는 이유:
| 이유 | 설명 |
|---|---|
| 정적 사이트와 잘 맞음 | llmwiki build 결과는 HTML/CSS/JS/SVG 정적 파일이다 |
| 운영이 단순함 | DB, app server, background worker가 필요 없다 |
| 인증을 앞단에 둘 수 있음 | Cloudflare Access 또는 Basic Auth로 문서 접근을 막을 수 있다 |
| 롤백이 쉬움 | site/ 산출물 단위로 이전 배포본을 보관하면 된다 |
| 업체 공유가 쉬움 | 계정 또는 이메일 domain 단위로 접근권한을 줄 수 있다 |
중요:
팀원/업체 공유용 배포는 전체 site/를 그대로 올리지 않는다.
raw sessions, sources, generated session pages에는 과거 대화 로그와 오탐/민감정보 후보가 많다.
기본 배포 단위는 curated docs-only staging이어야 한다.
2. 보안 기준
이 wiki에는 A2A, DeviceAgent, SoC TaskManager, vendor handoff 내용이 들어간다. 따라서 아래 기준을 기본값으로 둔다.
| 항목 | 기준 |
|---|---|
| 검색 노출 | X-Robots-Tag: noindex, nofollow와 robots.txt 유지 |
| 접근제어 | 인증 없는 공개 배포 금지 |
| HTTPS | Caddy 자동 TLS 또는 Cloudflare TLS 사용 |
| 민감정보 | API key, token, private key, password, 계정 정보 배포 전 스캔 |
| 로그 | access log는 필요 최소화. 외부 공유 시 업체 IP/계정 추적 가능하게 설정 |
| 백업 | 배포 산출물과 source docs를 별도로 보관 |
3. 선택지 비교
| 방식 | 장점 | 단점 | 판단 |
|---|---|---|---|
| Cloudflare Pages + Cloudflare Access | 서버 없이 정적 사이트 배포, 팀원 이메일 접근제어 가능 | Cloudflare 계정/로그인 필요 | 1차 최우선 권장 |
| VPS + Caddy + Cloudflare Access | 빠르고 단순, 인증/HTTPS 쉬움 | VPS 1대 관리 필요 | 1차 권장 |
| GitHub Pages private + Cloudflare Access | Git 기반 배포 쉬움 | private Pages/Access 구성 제약 가능 | 조직 계정 있으면 가능 |
| S3/CloudFront + Cognito/Access | 안정적, 확장성 높음 | 설정이 과함 | 장기 운영 시 고려 |
| Tailscale Serve/Funnel | 사내/개인 접근 쉬움 | 업체 외부 공유 제약 | 내부 검토용 |
| 단순 Nginx Basic Auth | 익숙함 | TLS/계정 관리 직접 해야 함 | Caddy가 더 단순 |
서버를 직접 관리하고 싶지 않으면 Cloudflare Pages가 가장 간단하다. Cloudflare 공식 문서 기준으로 Pages Direct Upload는 미리 빌드된 정적 asset 폴더를 Wrangler 또는 dashboard drag-and-drop으로 올릴 수 있다.
참고: <https://developers.cloudflare.com/pages/get-started/direct-upload/>
팀원 인증은 Cloudflare Access의 self-hosted/public app 보호 정책으로 잡는다.
참고: <https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/self-hosted-public-app/>
4. 1차 배포 절차
4.1 로컬에서 build
cd /home/silogood/.local/share/llm-wiki-pratiyush
/home/silogood/.local/bin/llmwiki build
/home/silogood/.local/bin/llmwiki lint
4.2 민감정보 스캔
템플릿:
/home/silogood/.local/share/llm-wiki-pratiyush/ops/wiki-deployment/scan-sensitive.sh
사용:
bash ops/wiki-deployment/stage-curated-site.sh
bash ops/wiki-deployment/scan-sensitive.sh /tmp/sk-intellix-wiki-stage
이 스크립트는 완전한 보안 도구가 아니라 배포 전 1차 방어선이다. 실제 운영에서는 gitleaks 같은 전용 도구를 추가하는 것이 좋다.
4.3 서버 준비
서버 예시:
Ubuntu 22.04 or 24.04
Caddy
도메인 DNS A record: wiki.<domain> -> VPS public IP
Cloudflare proxy 또는 DNS-only 중 선택
서버 디렉터리:
/var/www/sk-intellix-wiki
/var/backups/sk-intellix-wiki
/etc/caddy/Caddyfile
4.4 Caddy 설정
템플릿:
/home/silogood/.local/share/llm-wiki-pratiyush/ops/wiki-deployment/Caddyfile.example
서버에 복사 후 도메인과 인증 방식을 수정한다.
4.5 배포
템플릿:
/home/silogood/.local/share/llm-wiki-pratiyush/ops/wiki-deployment/deploy-wiki-rsync.sh
사용 예시:
WIKI_DEPLOY_HOST=wiki-server \
WIKI_DEPLOY_USER=deploy \
WIKI_DEPLOY_PATH=/var/www/sk-intellix-wiki \
bash ops/wiki-deployment/deploy-wiki-rsync.sh
서버 없이 Cloudflare Pages로 배포하려면 아래 템플릿을 사용한다.
/home/silogood/.local/share/llm-wiki-pratiyush/ops/wiki-deployment/deploy-cloudflare-pages.sh
최초 1회:
npx wrangler login
배포:
CF_PAGES_PROJECT=sk-intellix-wiki \
bash ops/wiki-deployment/deploy-cloudflare-pages.sh
배포 후 Cloudflare dashboard에서 sk-intellix-wiki.pages.dev 또는 연결한 custom domain에 Cloudflare Access policy를 붙인다.
5. Cloudflare Access 권장 정책
Cloudflare를 쓴다면 Caddy Basic Auth보다 Cloudflare Access를 우선 권장한다.
권장 정책:
| 항목 | 값 |
|---|---|
| Application type | Self-hosted |
| Domain | wiki.<domain> |
| Policy | Allow only selected email/domain |
| Session duration | 8h 또는 24h |
| MFA | 가능하면 enabled |
| Service token | CI/CD 자동 배포에는 불필요. 사용자 접근에는 email auth 사용 |
주의:
Cloudflare Access를 켜더라도 origin 서버가 public으로 열려 있으면 우회 가능성이 있다.
가능하면 origin firewall에서 Cloudflare IP만 허용하거나, 최소 Basic Auth를 origin에도 둔다.
6. 운영 체크리스트
배포 전:
| 체크 | 기준 |
|---|---|
| build | llmwiki build exit 0 |
| lint | llmwiki lint 0 errors |
| staging | stage-curated-site.sh exit 0 |
| sensitive scan | high-risk hit 없음 |
| local smoke | curl -I http://127.0.0.1:8767/docs/sk-intellix/ |
| Caddy config | caddy validate |
| remote smoke | curl -I https://wiki.<domain>/docs/sk-intellix/ |
배포 후:
| 체크 | 기준 |
|---|---|
| 인증 | 비로그인 브라우저에서 접근 차단 |
| HTTPS | 유효 인증서 |
| noindex | response header 또는 robots 확인 |
| 주요 링크 | Engineering Hub, SoC TaskManager Framework, DeviceAgent/SoC Category |
| 백업 | 이전 배포본 보관 |
6.1 현재 Cloudflare Pages 운영값
현재 이 위키의 팀 공유용 배포는 아래 값을 기준으로 한다.
| 항목 | 값 |
|---|---|
| Cloudflare Pages project | sk-intellix-wiki |
| 팀 공유 진입점 | https://sk-intellix-wiki.pages.dev/docs/sk-intellix/ |
| A2A 상세 진입점 | https://sk-intellix-wiki.pages.dev/docs/a2a/ |
| Curated stage | /tmp/sk-intellix-wiki-stage |
| 배포 hash 파일 | /home/silogood/.local/share/llm-wiki-pratiyush/.deploy-state/cloudflare-pages-stage.sha256 |
| 자동/수동 공용 스크립트 | ops/wiki-deployment/deploy-cloudflare-pages-if-changed.sh |
즉시 배포:
cd /home/silogood/.local/share/llm-wiki-pratiyush
CF_PAGES_PROJECT=sk-intellix-wiki bash ops/wiki-deployment/deploy-cloudflare-pages-if-changed.sh
최근 배포 검증:
llmwiki build: 성공
llmwiki lint: 0 errors, 0 warnings
curated stage: 124 files
sensitive scan: passed
Cloudflare Pages deploy: complete
preview: https://9195e606.sk-intellix-wiki.pages.dev
7. 현재 준비된 파일
ops/wiki-deployment/README.md
ops/wiki-deployment/Caddyfile.example
ops/wiki-deployment/deploy-cloudflare-pages.sh
ops/wiki-deployment/deploy-wiki-rsync.sh
ops/wiki-deployment/scan-sensitive.sh
ops/wiki-deployment/stage-curated-site.sh
ops/wiki-deployment/team-access-policy.md
8. 다음 결정 필요 사항
실제 배포 전에 아래 값만 정하면 된다.
| 항목 | 필요 결정 |
|---|---|
| 도메인 | wiki.<domain> |
| 서버 | VPS 또는 사내 서버 |
| 인증 | Cloudflare Access 또는 Basic Auth |
| 배포 방식 | rsync 수동 배포 또는 git/CI 자동 배포 |
| 접근 대상 | 본인만, 내부팀, 업체 포함 여부 |