라즈베리파이 서버 구축기: Cloudflare Tunnel + Zero Trust + ttyd 완성까지 요약본...
📅 프로젝트 개요
오늘의 목표는 라즈베리파이를 기반으로 24시간 돌아가는 원격 개발 환경을 구축하는 것이었다. 보안, 접근성, 자동화를 모두 만족하는 서버 구조를 직접 설계하고 구현했다. 결과적으로 Cloudflare Tunnel + Zero Trust + ttyd(Web Terminal) 조합으로 완성된 환경을 만들었다.
🔧 서버 및 환경 세팅
- Raspberry Pi OS (Lite) 기반의 서버 환경
ttyd (Web Terminal) 설치 및 systemd 서비스 등록 시도
실행 명령:
1
ExecStart=/home/<REDACTED_USER>/ttyd -p 3000 --check-origin --writable --credential <REDACTED_USER>:<REDACTED_PASS> /usr/bin/bash
Restart=always옵션으로 재시작 자동화- 초기 오류 (
status=203/EXEC) 발생 → 실행 경로 및 권한 문제 확인 중
🌐 네트워크 및 보안 설정
Cloudflare Tunnel을 통해 외부 접근 가능하도록 구성
- 로컬
ttyd를 HTTPS로 터널링 - Zero Trust 인증 + GitHub 로그인 연동
.dev도메인 구입 후 HTTPS 활성화- Zero Trust Access 정책 적용, 외부 접근 완벽 차단
- 로컬
🧱 보안 강화 전략
--credential옵션으로 기본 계정/비밀번호 인증--check-origin활성화로 CSRF 방어- Cloudflare Zero Trust + GitHub OAuth로 다중 인증 체계 구축
- root 권한 최소화, 일반 사용자 계정 중심 운영
⚙️ 시스템 유지보수
systemctl daemon-reload오류 처리 및 서비스 재시작 테스트- sudo 권한 및 실행 경로 점검
- 재부팅 후
ttyd자동 실행 확인 예정
🧩 실험 및 테스트
tmux세션 분리 / 중첩 테스트- Cloudflare 무료 플랜의 접속 제한, 도메인 의존성 확인
- LAN IP 구조 (
<REDACTED_LOCAL_NET>) 재학습 — 서브넷, 게이트웨이 이해도 향상
📜 하루 요약
오늘은 Pi 서버의 보안형 원격 개발 환경이 완성된 날이었다. Cloudflare Tunnel과 Zero Trust 인증을 엮어서 외부 접근을 통제했고, ttyd를 systemd 서비스로 등록해 자동화되고 지속적인 CLI 환경을 구축했다. 다음 목표는 203/EXEC 실행 오류 해결과 재부팅 후 자동 복구 안정화다.
🧠 현장 일지
1️⃣ 라즈베리파이 OS 굽기
SSH가 기본적으로 꺼져 있어서
/boot/ssh파일을 수동으로 만들어 부팅 시 자동으로 SSH가 켜지게 수정함.
2️⃣ ttyd로 내 bash를 띄우기
Node.js 기반 웹터미널을 시도했지만 렌더링이 엉망이라 포기하고, 가볍고 단순한 ttyd로 전환. 보안상 취약점을 우려했지만 추후 Cloudflare로 보강하기로 결정.
3️⃣ Cloudflare Tunnel 구성
임시 서버로 터널링 테스트 중 도메인 고정 불가 및 Zero Trust 설정 미적용 문제 발견. 해결책: 도메인을 직접 구매하고 Tunnel을 정식 등록.
4️⃣ Squarespace + Cloudflare 연동
.dev도메인을 Squarespace에서 구입하고 Cloudflare DNS로 넘기는 과정에서 연결 지연 발생.config.json직접 수정으로 해결.
5️⃣ systemd 서비스 구성
부팅 시 자동 실행을 위해
ttyd.service작성. 처음엔bashrc에서 실행하려 했으나, 로그인 세션 한정이라 실패.systemd+Restart=always로 안정화.
6️⃣ 보안 인증 완성
ttyd에 비밀번호 인증 추가 후 Cloudflare Zero Trust에서 GitHub OAuth 인증 연동.
tunnel.<REDACTED_DOMAIN>에 접근 시 GitHub 로그인 필요하도록 설정 완료.
7️⃣ 복구 테스트
라즈베리파이를 완전히 종료 후 재부팅. 터널, 인증, ttyd 모두 정상 복구되는지 확인 완료.
🧩 회고
32시간 걸렸다… “군대에서도 결국 환경은 만든다.” 제한된 환경에서도 도메인 구입부터 Zero Trust 인증까지 직접 구축하며, 단순한 개인 서버가 아닌 보안형 개발 인프라를 완성했다.
다음 목표:
- Docker로 환경 분리
- Zero Trust 로그 분석 자동화
- ttyd와 Python 환경 통합