如何在 Debian 8 上安装 MongoDB

介绍

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 安装和配置的更深入的说明,请确保 备份您的数据并探索如何 在传输中加密数据

Published At
Categories with 技术
comments powered by Disqus