개발 서버로 AWS Ec2 를 운영하고 있었는데 너무 비싸서 Raspberry Pi 로 내가 사용하는 LAN 내에서 서버를 구축을 해봤다. AWS EC2 로 프리티어를 사용해봤는데 앱 하나랑 DB 만 띄우고 좀만 운영해도 다운되길래, 하나 살짝 더 높은걸로 했는데 그거 마저도 너무 비쌌다 ㅠㅠ (개발 안하는 시간에 껐는데도 달에 3,4만원..)
1) 스펙
Raspberry Pi 4B 로 준비
- 4 CPU
- 4GB 메모리
- 16GB SD 카드
- 이정도만 해도 아주 기본적인 운영에는 충분한 것으로 판단된다.
2) Ubuntu 20.04 OS SU
- 하단 영상을 참고해서 SU 을 진행했다
- https://www.youtube.com/watch?v=zasvSKaobVI
- 참고로 내 컴퓨터에서 SSH 는 같은 LAN 내이므로 쉽게 가능했다
4) 설계
- 방화벽으로 막혀있는 외부 요청에 Raspberry Pi 가 통신을 수신할 수 있는 포트를 열어야겠다고 생각
- Router 를 통해 포트포워딩을 해야 할텐데, 사용하고 있는 Domain 을 사용해 외부에 프록시 업체를 하나 두는게 좋을 것 같다고 생각
- 처음엔 AWS ALB 를 생각했으나, 과금이 좀 심해서.. 무료 티어가 있는 업체를 찾다가 Cloudflare 를 알게됨
- DNS 쿼리를 수행해줄 때 프록시 모드를 설정하면 기본적인 보안을 제공해준다고 해서 선택
5) Rasp Node 에 Docker 설치 및 사용하던 Hub 에서 이미지 다운로드 및 DB 이전
- https://docs.docker.com/engine/install/ubuntu/ 를 참조해서 docker 를 모두 설치
- 설계한 포트대로 매핑해서 App 과 DB 를 모두 컨테이너로 기동시켰다 (DB 는 개발 DB 라 컨테이너로 그냥 띄움)
- Router 가 포트포워딩을 App Container 로 해준다
6) 포트포워딩 설정
- 이거 들어가느라 라우터 초기화했다 ㅎㅎ
- 아무튼 들어가서 [관리 도구 > 고급 설정 > NAT/라우터 관리 > 포트포워드 설정] 으로 이동한다
- 규칙을 지정하고 외부에서 IP 를 직접 치고 접근시 접근이 되는 것을 확인할 수 있다
7) Cloudflare 사용
- Domain 을 구입했다면 Domain Registrar 에서 네임서버를 Cloudflare 쪽으로 바꿔야 한다. 그래야 Cloudflare 의 DNS 기능을 사용할 수 있다
- 참고로 프록싱 상태에는 두가지가 있는데, 프록시 모드랑 only DNS 모드가 있다
- only DNS 모드는 Domain Registrar 에서 하는 것과 똑같은 것으로, 단순히 DNS 쿼리만 실행해주는 역할만 하므로, 굳이 Cloudflare 를 사용할 필요 없다
- 프록시 모드는 SSL/TLS 섹션에서 다음과 같은 사진을 볼 수 있는데, 전체 암호화 모드를 설정해야 가능하다 (적어도 내가 알아본 바로는 그랬다)
- 따라서 결국 Cloudflare 측에서 원본 서버측으로의 요청도 암호화를 해줘야 하는데, Cloudflare 에서 인증서 생성 역시 도와준다. 해당 인증서를 활용해 .pem 을 만들어 Raspberry Pi 에 복사해주었다 (단, 가장 Basic 한 인증서로, 사실 open ssl 을 통해서도 할 수 있음)
- Spring 단에서는 SSL Terminate 된 채로 수신되게 해주기 위해 Nginx Proxy 컨테이너를 하나 더 기동하였다.
- 다음과 같이 설정을 conf.d 폴더에 마운트 하여 nginx 컨테이너에 물렸고, 다음 그림과 같이 설계를 변경하였다
# 같은 docker network 안에서는 container 이름으로 통신한다
server {
listen {ROUTER_FORWARDED_PORT} ssl;
ssl_certificate /etc/ssl/cf-ssl/{CERTI_NAME}.pem;
ssl_certificate_key /etc/ssl/cf-ssl/{CERTI_KEY_NAME}.pem;
location / {
proxy_pass http://{APP_CONTAINER_NAME}:{CONTAINER_PORT};
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- 이와 같이 설정해주니 Client 측에서 https 통신으로 도메인 접속시 Raspberry Pi 가 정상적으로 응답해주는 모습을 확인하였다
- Cloudflare 에서 Overview 로 전체적인 현황까지 확인해주고, 일부 쿼리에 대해서 캐싱까지 지원해준다
- Cloudflare 는 프리티어만 사용했는데도 보안까지 어느정도 신경써주고.. 정말 좋은 서비스 같다... 감사합니다
- 계산해보니까 Raspberry Pi 4 의 한달 24/7 운영해도... 전기료가 1000원도 채 안나온다고 한다 ㅋㅋㅋㅋㅋ
- 진작에 할걸~!~!~!~! 온프레미스가 짱이구나~!~!~!~!
'웹 운영 > 운영 구축' 카테고리의 다른 글
[PV, VG, LV] LV 분할하여 Ubuntu /var 용량 확장하기 (1) | 2024.11.25 |
---|---|
[Jenkins] 강의 (0) | 2023.02.20 |