Thông thường, chúng ta thường thiết lập để Code và phần Database chung 1 server. Với những ứng dụng lớn để quản lý, chúng ta phải tách riêng biệt chúng trên nhiều server khác nhau. Bởi vì mặc định MongoDb không cho phép remote connections mà chỉ cho phép kết nối nội bộ. Mình sẽ hướng dẫn cách thiết lập sao cho từ App Server (server chứa code) kết nối được tới MongoDb Server (hoặc cụm MongoDb Server)
Thông tin cấu hình của môi trường test:
- MongoDB Server
- Private IP – 192.168.161.100
- Public IP – 45.56.65.100
- MongoDB 2.6.3, port 27017
- IpTables Firewall
- Application Server (Same LAN network)
- Private IP – 192.168.161.200
- Public IP – irrelevant
- Developers at home (Different LAN network, WAN)
- Public IP – 10.0.0.1
1. Bind IP
Mở /etc/mongod.conf
tìm đến dòng bind_ip
$ vim /etc/mongod.conf
# /etc/mongod.conf
# Listen to local interface only. Comment out to listen on all interfaces.
bind_ip = 127.0.0.1
Mặc định MongoDb chỉ cho phép kết nối từ nội bộ (127.0.0.1), nên nhiệm vụ của bạn là sửa đổi thông tin này, 1 số trường hợp như sau:
1. listen on all interfaces
Nếu bạn chẳng cần quan tâm cái quái gì là bảo mật, thì xóa dòng bind_ip = 127.0.0.1
đi, hoặc sửa thành bind_ip = 0.0.0.0
# Listen to local interface only. Comment out to listen on all interfaces.
# bind_ip = 127.0.0.1
2. Chỉ cho phép kết nối từ mạng nội bộ (LAN)
$ vim /etc/mongod.conf
# /etc/mongod.conf
# Listen to local and LAN interfaces.
bind_ip = 127.0.0.1,192.168.161.100
Nhớ là đặt IP Private, không phải IP Public của App Server nha
3. Cho phép kết nối từ bất cứ IP nào
Trường hợp server đặt tại công ty, bạn muốn máy ở nhà kết nối đến để sử dụng. Bạn có thể kết nối đến MongoDb thông qua địa chỉ Public IP 45.56.65.100
$ vim /etc/mongod.conf
# /etc/mongod.conf
# Listen to local, LAN and Public interfaces.
bind_ip = 127.0.0.1,192.168.161.100,45.56.65.100
Mình khuyên là nên sử dụng một mạng riêng ảo VPN để đảm bảo tính bảo mật hơn cách này.
Khởi động lại MongoDb để thay đổi có tác dụng:
$ sudo service mongod restart
[ ok ] Restarting database: mongod.
2. IpTables Firewall
Nếu bạn có đặt tường lửa, hãy thiết lập lại sao cho tường lửa cho phép kết nối thông qua Port của của MongoDb (mặc định là 27017)
Ở đây mình sử dụng iptables để thiết lập kết nối đến trên Ubuntu
Cho phép mọi kết nối thông qua cổng 27017
iptables -A INPUT -p tcp --dport 27017 -j ACCEPT
Hoặc, chỉ cho phép kết nối từ 1 IP cụ thể (ở đây là IP của App Server)
iptables -A INPUT -s IP_HERE -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d IP_HERE -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.161.200 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 192.168.161.200 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
Xong rồi đấy, chúc thành công :))
Xem thêm tại đây MongoDB firewall documentation