남는 PC 한 대로 개인 서비스 여러 개를 운영하고 있다. 공유기 포트 포워딩도, 고정 IP 도 없이 돌아간다. 따라 해 보고 싶다는 사람이 있어서 구성을 몇 편으로 나눠 적는다. 이 글은 전체 그림이고, 각 편은 홈서버-따라하기 라벨에 모여 있다.
전제
- 서버는 회사나 집의 공유기·방화벽 뒤에 있다. 바깥에서 들어오는 포트는 하나도 열 수 없다고 가정한다.
- 도메인 하나를 갖고 있고, DNS 는 Cloudflare 에 맡겼다.
- 서버는 Ubuntu, 서비스는 전부 Docker 컨테이너다.
전체 구성
방문자 ──HTTPS──▶ Cloudflare 엣지 ◀──(바깥으로 나가는 연결)── cloudflared (서버)
│ │
Access (로그인) 127.0.0.1:포트 로 전달
│
Docker 컨테이너들 (루프백에만 바인딩)
핵심은 방향이다. 서버가 Cloudflare 로 먼저 연결을 걸고, 방문자의 요청은 그 연결을 타고 들어온다. 그래서 인바운드 포트가 필요 없다.
편별 내용
- Cloudflare Tunnel 로 도메인 연결하기 — 터널 만들기, 서브도메인마다 서비스 연결, 다른 도메인을 붙일 때 주의할 점
- git push 로 배포하기 — Portainer git 스택, 이미지 빌드, 시크릿 파일 다루기
- 관리 화면 잠그기 — Cloudflare Access 이메일 코드 로그인, 오리진을 루프백에만 여는 이유
- 백업과 정기 정비 — 암호화 원격 백업, 업그레이드 전후 점검
이 구성의 장단점
- 장점: 공인 IP·포트 포워딩이 필요 없다. 서버 IP 가 바뀌어도 상관없다. HTTPS 인증서를 직접 관리하지 않는다.
- 단점: 모든 트래픽이 Cloudflare 를 지난다. HTTP(S) 가 아닌 프로토콜은 따로 손이 간다. 서버로 SSH 접속할 길은 별도로 마련해야 한다(나는 메시 VPN 을 쓴다).
겪은 문제들
운영하면서 밟은 함정은 따로 글로 적고 있다. 배포 쪽은 Portainer, 컨테이너 쪽은 Docker, 인증 쪽은 Cloudflare 라벨에서 볼 수 있다.
댓글 없음:
댓글 쓰기