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