介绍
MongoDB是一个免费和开源的NoSQL文档数据库,通常用于现代Web应用程序。本教程将帮助您在服务器上设置MongoDB用于生产应用环境。
前提条件
要遵循本教程,您将需要:
- 一个 Debian 8 服务器和一个 sudo 非 root 用户. 您可以在我们的 Debian 8 初始服务器设置指南中设置具有这些权限的用户。
步骤1:安装 MongoDB
MongoDB 已经包含在 Debian 的包存库中,但官方的 MongoDB 存储库提供了最新的版本,是安装软件的推荐方式。
Debian 通过验证它们是用 GPG 密钥签名的来确保软件包的真实性,所以我们必须先将它们导入官方 MongoDB 存储库。
1sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
成功导入密钥后,您将看到:
1[label Output]
2gpg: Total number processed: 1
3gpg: imported: 1 (RSA: 1)
接下来,我们必须添加MongoDB存储详细信息,以便apt
知道从哪里下载包。
发出以下命令来创建 MongoDB 的列表文件。
1echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
添加库详细信息后,更新包列表:
1sudo apt-get update
现在用以下命令安装MongoDB包本身:
1sudo apt-get install -y mongodb-org
它安装了 MongoDB 的最新稳定版本,以及 MongoDB 服务器的一些有用的管理工具。
一旦 MongoDB 安装,请启动服务,并确保在服务器重新启动时启动:
1sudo systemctl enable mongod.service
2sudo systemctl start mongod
然后使用systemctl
来检查服务是否正确启动:
1sudo systemctl status mongod
您应该看到以下输出,表示服务正在运行:
1[label Output]
2● mongod.service - High-performance, schema-free document-oriented database
3 Loaded: loaded (/lib/systemd/system/mongod.service; enabled)
4 Active: active (running) since Tue 2017-02-28 19:51:51 UTC; 7s ago
5 Docs: https://docs.mongodb.org/manual
6 Main PID: 8958 (mongod)
7 CGroup: /system.slice/mongod.service
8 └─8958 /usr/bin/mongod --quiet --config /etc/mongod.conf
9
10Feb 28 19:51:51 cart-61037 systemd[1]: Started High-performance, schema-free document-oriented database.
现在MongoDB已成功安装,让我们用软件防火墙保护它。
步骤 2 – 使用防火墙保护 MongoDB
在大多数情况下,MongoDB 只能从某些受信任的位置访问,例如另一个服务器托管应用程序. 为了完成这个任务,您可以允许访问 MongoDB 的默认端口,同时指定另一个服务器的 IP 地址,将被明确允许连接。
在我们编写任何规则之前,请安装iptables-persistent
包,以便您可以保存您创建的规则。
1sudo apt-get install iptables-persistent
<$>[注] 注 :在安装过程中,您可能会被问及是否想保留任何现有规则。
接下来,删除可能存在的任何现有规则,仅在以下情况下:
1sudo iptables -F
然后添加一个允许已建立的连接继续交谈的规则,这样我们的现有SSH连接不会被中断:
1sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
接下来,确保允许 SSH 访问:
1sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果您计划从远程服务器连接到 MongoDB,请添加以下规则,这些规则将允许您从应用程序服务器访问 MongoDB 的默认端口:
1sudo iptables -A INPUT -s your_other_server_ip -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
2sudo iptables -A OUTPUT -d your_other_server_ip -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
接下来,添加这些规则,允许在本地路由器上的流量:
1sudo iptables -A INPUT -i lo -j ACCEPT
2sudo iptables -A OUTPUT -o lo -j ACCEPT
最后,更改防火墙策略以减少所有其他流量:
1sudo iptables -P INPUT DROP
<$>[警告] 警告 :改变默认策略以减少规则中未明确定义的流量意味着一切都被锁定。
此外,如果您意外扫除规则,您将被锁定出您的服务器. 使用sudo iptables -P INPUT ACCEPT
来允许流量通过,如果您需要在未来调整您的规则,那么您可以使用sudo iptables -P INPUT DROP
来锁定事物,一旦您确定事物已重新配置正确。
检查规则是否正确:
1sudo iptables -S
你应该看到类似于此的输出:
1[secondary_label Output]
2-P INPUT DROP
3-P FORWARD ACCEPT
4-P OUTPUT ACCEPT
5-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
6-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
7-A INPUT -s your_other_server_ip/32 -p tcp -m tcp --dport 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
8-A INPUT -i lo -j ACCEPT
9-A OUTPUT -d your_other_server_ip/32 -p tcp -m tcp --sport 27017 -m state --state ESTABLISHED -j ACCEPT
10-A OUTPUT -o lo -j ACCEPT
最后,保存规则:
1netfilter-persistent save
有关这些防火墙规则的更多信息,请参阅 [如何在Ubuntu 14.04上使用Iptables设置防火墙(LINK0))。
步骤 3 — 允许访问外部服务器(可选)
默认情况下,当前版本的 MongoDB 不接受外部连接. 如果您已通过防火墙限制访问特定 IP 地址,您可以更改 MongoDB 的配置以接受远程连接。
编辑MongoDB配置文件:
1sudo nano /etc/mongod.conf
查找此部分:
1[label mongod.conf]
2# network interfaces
3net:
4 port: 27017
5 bindIp: 127.0.0.1
Mongo 正在听取本地回路地址,所以它只会接受本地连接. 更改 bindIp
值,以便包含您的 MongoDB 服务器的 IP 地址:
1[label mongod.conf]
2# network interfaces
3net:
4 port: 27017
5 bindIp: 127.0.0.1, your_server_ip
保存文件并离开编辑器。
然后重新启动 MongoDB 以应用更改:
1sudo systemctl restart mongod
您的远程计算机现在应该能够连接,但是,您可能还需要 启用身份验证来进一步保护您的数据库。
结论
您可以在 这些 DigitalOcean 社区文章中找到有关 MongoDB 安装和配置的更深入的说明,请确保 备份您的数据并探索如何 在传输中加密数据 。