YWS 문서
YWS 콘솔로 이동
앱 연동/Pages (정적 사이트)

Pages (정적 사이트)

HTML/CSS/JS/이미지/Markdown 파일을 올리면 {이름}.jimmy-home.page 주소로 공개되는 정적 사이트 호스팅입니다 (GitHub Pages와 비슷). 지금 보고 있는 이 문서 사이트도 Pages 사이트 중 하나입니다 — 도메인 루트(jimmy-home.page)에 걸린 플랫폼 전용 사이트.

사용 방법

  1. 상단 Pages 탭 → "+ 사이트 생성" → 주소 이름, 제목, 공개 범위 선택
  2. 사이트 관리 화면에서 파일 올리기 (여러 개 선택 가능, zip은 자동으로 압축 해제)
  3. 또는 "+ 새 문서 작성"으로 웹 에디터에서 Markdown을 직접 쓰거나 원문을 붙여넣기 (오른쪽에 실시간 미리보기)
요청 경로 응답
/ index.html, 없으면 index.md
/guide/start guide/start 파일 → guide/start.html → guide/start.md 순서로 찾음
/style.css, /img/a.png 등 파일 그대로
없는 경로 사이트에 404.html/404.md가 있으면 그것, 없으면 기본 404

Markdown 문서 틀

.md 파일은 서버에서 HTML로 바꿔서 플랫폼의 문서 틀에 넣어 보여줍니다 — 왼쪽에 사이트 안의 모든 페이지 목록, 가운데 본문, 오른쪽에 "이 페이지에서" 목차(스크롤 위치 표시), 다크모드 토글.

파일 맨 위에 front matter를 쓰면 왼쪽 메뉴를 정리할 수 있습니다:

---
title: 시작하기
group: 가이드
order: 10
---
# 시작하기
  • title: 메뉴에 보일 제목 (없으면 첫 # 제목)
  • group: 메뉴에서 묶일 이름 (같은 group끼리 모임)
  • order: 작을수록 위 (같으면 파일 경로 순)
  • 본문의 ##/### 제목이 오른쪽 목차가 됩니다. 표, 코드 블록(언어 지정 시 하이라이트), 취소선 지원

Markdown 안의 HTML 태그는 글자 그대로 표시됩니다 (<script>가 실행되지 않음). Markdown은 "안전한 텍스트"로 취급하고, 스크립트가 필요한 페이지는 .html 파일로 올리면 됩니다.

공개 범위 (YWS 로그인)

사이트마다 "YWS 로그인한 사용자만 볼 수 있게"를 켤 수 있습니다 (생성 시 선택, 나중에 설정에서 변경).

  • 켜면 방문자는 YWS 로그인(우리가 만든 OAuth)을 거쳐야 볼 수 있고, 승인된 YWS 사용자 누구나 볼 수 있습니다
  • 콘솔에 이미 로그인한 상태면 추가 로그인 없이 바로 열립니다
  • 로그인 흐름: 사이트 → jimmy-home.page/_yws/start → jimmy-home.com/oauth/authorize (플랫폼 내장 클라이언트 yws-pages) → jimmy-home.page/_yws/callback → 사이트 /_yws/finish
  • 로그인 쿠키는 그 사이트 호스트 전용(HttpOnly, Secure, 12시간)이라 다른 사용자 사이트로 넘어가지 않고, 다른 사이트에 가져가서 써도 거부됩니다
  • 로그아웃(사이트 오른쪽 위)은 YWS 콘솔 로그인까지 함께 끝냅니다 — 사이트 쿠키만 지우면 다음 페이지에서 콘솔 로그인이 살아 있어 곧바로 다시 로그인되기 때문. 흐름: 사이트 /_yws/logout → jimmy-home.com/logout?next=… (콘솔 세션 종료, next는 Pages 호스트의 /_yws/logged-out만 허용) → 사이트 /_yws/logged-out ("다시 로그인" 링크)

왜 별도 도메인 + 서브도메인인가

  • 포털과 다른 등록 도메인(jimmy-home.page vs jimmy-home.com): 사용자가 올린 JS가 포털과 same-site가 아니라서, 방문자의 브라우저를 이용해 포털에 요청을 보내거나(CSRF) 쿠키를 심을 수 없음
  • 사이트마다 서브도메인: 사이트끼리 오리진이 달라서 서로의 localStorage/쿠키에 접근 불가. 경로 방식(/{이름})이었다면 모든 사이트가 한 오리진을 공유해서 이 격리가 없음
  • .page는 HTTPS가 강제되는(HSTS preload) 도메인이고, Cloudflare 무료 인증서가 *.jimmy-home.page 한 단계 와일드카드를 커버

인프라

  • Cloudflare: jimmy-home.page/*.jimmy-home.page → 기존 Cloudflare Tunnel → Traefik → 포털 파드. 포털 앱이 Host 헤더로 Pages 요청을 먼저 가로채서 처리 (app/pages_server.py)
  • 포털과 같은 프로세스에서 돌아가므로 jimmy-master에서 실행됨 — 정적 파일 서빙과 캐시된 Markdown 렌더링이라 부하는 작음
  • 파일은 포털 DB 볼륨과 분리된 전용 볼륨(yws-pages, 5Gi)에 /pages/{사이트 id}/로 저장 — 사이트 파일이 용량을 채워도 포털 DB는 영향 없음
  • 한도: 사용자당 200MiB, 파일 하나 20MiB, zip 안의 파일 2000개. .으로 시작하는 파일/폴더(.git 등)는 올라가지 않고 서빙되지도 않음

관련 코드

  • app/pages.py — 파일 저장/경로 검사/zip 해제/Markdown 렌더링/메뉴 구성
  • app/pages_server.py — *.jimmy-home.page 서빙과 로그인 흐름
  • app/routers/pages.py — 콘솔의 Pages 관리 화면
  • app/pages_seed/yws/ — 이 문서 사이트의 원본 (사이트가 처음 만들어질 때만 복사, 이후 수정은 Pages 탭에서)