포트폴리오 서버에 FastAPI 블로그를 얹은 과정
이미 있는 다크 포폴 옆에 /blog 서브패스로 같이 살리기.
목차
왜
포트폴리오는 정적 1-page (Caddy + 다크 테마) 로 띄워뒀는데, 글 쓸 공간이 따로 없어서 같은 박스에 블로그를 얹기로 했다. 새 서버 띄우기는 과하고, 메모리 968Mi 안에서 MariaDB / Redis / Caddy 가 이미 살아있으니 정적 + 동적 같이 굴리면 끝.
스택
- 백엔드: FastAPI (단일 파일, ~50MB)
- DB: 기존 MariaDB 11.4 안에 새 DB
blog1개 + 전용 user - 세션: Starlette
SessionMiddleware(itsdangerous, 7일) - 마크다운:
markdown+ Pygments +python-slugify - 프록시: Caddy
handle @blog { reverse_proxy 127.0.0.1:8001 } - 데몬: systemd
blog.service,KeepAlive=true
핵심 한 줄
Caddy 한 사이트 블록 안에 named matcher 만 추가하면 끝.
내부 호스트 {
@blog path /blog /blog/*
handle @blog {
reverse_proxy 127.0.0.1:8001
}
# 이하 기존 portfolio 정적 서빙 그대로
root * /var/www/portfolio
file_server
}
/ 는 그대로 정적 포폴, /blog/* 만 FastAPI 로 흘러간다. 보안 헤더(CSP/HSTS/COOP) 도 outer scope 라 두 사이트 모두에 적용.
스키마
처음엔 9개 테이블로 잡았다가 1인 운영이라 댓글/조회로그를 빼고 7개로 슬림.
| 테이블 | 역할 |
|---|---|
tb_blog_admin |
작성자 (bcrypt) |
tb_blog_post |
본문 (md + html 둘 다 저장, FULLTEXT 검색) |
tb_blog_category |
계층형 카테고리 |
tb_blog_tag + tb_blog_post_tag |
태그 N:M |
tb_blog_attach |
본문 이미지 업로드 |
tb_blog_setting |
사이트 전역 설정 (key-value) |
한 시간 안에 있던 일
- 스키마 SQL 짜고 cafe24 MariaDB 에 적용
- FastAPI 단일 파일 + Jinja2 템플릿 6개 + 미니 CSS
- rsync 로 코드 업로드 → venv 만들어서 deps 설치
- systemd unit 등록, 8001 포트 LISTEN 확인
- Caddyfile 에 5줄 추가,
caddy validate→ reload - 외부 https 접속 200 확인
이 글 자체가 그 결과물의 첫 글.
다음
- 포폴 톤(다크 + Pretendard + #ff5b1f 오렌지)에 맞춰 디자인 통일 (← 다음 커밋에서)
- 마크다운 안 코드 하이라이트 더 다듬기
- 일기 톤 빠른 글쓰기 폼 별도로
댓글 0
첫 댓글 달아줘.