로컬 데이터베이스를 원격 데이터베이스로 확장하기
서론
- 기존의 라즈베리파이에서 사용하는 MongoDB를 외부에서도 접속 가능하도록 설정하고 싶었다.
- AWS 비용을 아껴야하기 때문... ㅎㅎ
- 데이터베이스는 Docker로 만들어둔 상태
개발환경
- OS: Ubuntu Linux 22.04.5 LTS Server
- HW: RasberryPi 4B 8GB
- DB: MongoDB(Docker)
1. Docker 컨테이너 외부 접속 허용하기
sudo docker exec -it {컨테이너 이름} bash
ps aux | grep mongod
- 출력에서 --bind_ip = 127.0.0.1이 되어있다면 허용되지 않은 것
- bindIp를 모든 아이피 접속 허용인 0.0.0.0으로 해야 함
sudo docker run -d \
--name {컨테이너 이름} \
-p {내부 포트}:27017 \
-v ~/mongo-data-dev:/data/db \ # db 위치
mongo:4.4.18 --bind_ip_all # -bindIp 옵션 추가
- 만약 설정이 되어있지 않다면 도커 컨테이너를 재 실행하면서 --bind_ip_all 옵션을 주어야 한다.
2. 공인 아이피 알아내기
curl ifconfig.me
- 이 명령어를 통해 공인 아이피를 알 수 있고, {공인 아이피}:{내부 포트}를 통해 접속 가능해진다.
3. 방화벽 설정
sudo ufw allow {내부 포트}/tcp
sudo ufw status
- 방화벽은 들어오고 나가는 패킷을 확인해 사용자가 허용 여부를 결정할 수 있어 보안에 필수적이다.
- 설정한 내부 포트의 방화벽만 해제하도록 한다.
4. 포트포워딩 설정
{데이터베이스 서버의 내부 아이피}, {내부 포트}
- 대부분 와이파이에 연결해서 사용하거나 랜선을 사용할 텐데, 데이터를 내/외부로 주고 받기 위해 포트포워딩을 설정해야 한다.
- 각 와이파이에 맞는 포트포워딩 설정은 따로 찾아보아야 한다.
5. 외부에서 접속 시도
mongodb://{공인 아이피}:{내부 포트}/
- MongoDBCompass가 있다면 이것으로 시도하는 것이 제일 좋다.
- 그 이유는 PC에 MongoDB를 설치할 필요가 없기 때문이다.
- 위의 url를 입력 후 실행했을 때, 데이터베이스가 인식되면 성공한 것이다.
- 같은 와이파이 내에서 실행할 때는 공인 아이피 대신 내부 아이피도 사용 가능하다.
마치며
AWS 비용을 아끼기 위해 이것저것 시도해보는데, 라즈베리파이는 MongoDB ARMv8 문제도 있어 이미지 버전 찾는게 조금 까다로웠고, 하루에 한번은 DB 컨테이너가 죽는다...(너무 슬퍼서 로그 확인도 못했다..) 아무튼 가능하다면 그냥 물리서버를 두거나 AWS 쓰는게 속편할 것 같다.
'개발 노트 > 세미나식 글쓰기' 카테고리의 다른 글
| 라즈베리파이 Ubuntu 환경에서 MongoDB 도커 컨테이너 실행하기 (0) | 2025.05.25 |
|---|