이 글은 현재 muabow.com을 운영하는 라즈베리파이 환경을 정리한 문서다.
지금 사이트는 다음 구조를 기준으로 동작한다.
- 공개 웹은 메인 도메인과 보조 도메인으로 운영한다.
- 공개 기능 페이지는
/info같은 경로 아래에 둔다. - SSH는 별도 호스트로 분리해 둔다.
- 웹 서버는
nginx - 외부 연결은
Cloudflare Tunnel - 정적 사이트 원본은
Markdown
중요 경로는 아래와 같다.
- 웹 루트: 정적 빌드 결과물 디렉터리
- 터널 설정:
cloudflared설정 파일 - 인증 정보: Cloudflare Tunnel이 읽는 로컬 인증 파일
트래픽 흐름도 단순하다.
- 사용자가 도메인으로 접속한다.
- Cloudflare가 요청을 받는다.
- Tunnel이 요청을 라즈베리파이로 전달한다.
cloudflared가 요청을 내부 웹 서비스와 관리용 서비스로 분기한다.
운영하면서 자주 보는 명령은 이 정도다.
sudo systemctl status nginx
sudo systemctl status cloudflared
sudo journalctl -u cloudflared --no-pager -n 100
curl -I http://127.0.0.1
dig +short <public-domain>
배포 흐름도 가볍게 유지하고 있다.
- 글 원본은 Markdown으로 작성한다.
node scripts/build.js로 HTML을 생성한다.- 결과물은
public디렉터리에 모인다. publish.sh가 라즈베리파이로 동기화한다.
정적 페이지 외에 작은 동적 기능도 함께 운영 중이다.
/info는 Go + NATS 기반의 실시간 장치 정보 대시보드/api/visits는 footer 방문자 수를 위한 작은 API- 관리 기능은 별도 앱으로 분리해 운영한다
복잡한 앱보다 오래 굴러가는 단순한 구조를 우선으로 두고 운영 중이다.