如何在Debian上安装MongoDB

2018-08-02 11:46:09 浏览数 (1)

介绍

MongoDB是一个免费的开源NoSQL文档数据库,在现代Web应用程序中常用。本教程将帮助您在服务器上安装MongoDB,以便在生产应用环境中使用。您将安装MongoDB并配置防火墙规则以限制对MongoDB的访问。对于生产环境的服务器,我们建议您使用腾讯云云关系型数据库,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。

准备

要学习本教程,您需要:

  • 一个带有sudo非root用户的Debian 8服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。

第一步 - 安装MongoDB

MongoDB已包含在Debian的软件包存储库中,但官方的MongoDB存储库提供了最新版本,在此步骤中,我们使用官方存储库添加到我们的服务器。

Debian通过验证软件包是否使用GPG密钥签名来确保软件包的真实性,因此我们首先必须将它们的密钥导入官方MongoDB存储库。

代码语言:javascript复制
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

成功导入密钥后,您将看到:

代码语言:javascript复制
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

接下来,我们必须添加MongoDB存储库详细信息,以便apt知道从哪里下载软件包。

以下命令为MongoDB创建列表文件。

代码语言:javascript复制
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

添加存储库详细信息后,更新包列表:

代码语言:javascript复制
sudo apt-get update

现在使用以下命令安装MongoDB软件包:

代码语言:javascript复制
sudo apt-get install -y mongodb-org

这将安装最新的稳定版MongoDB和MongoDB服务器的一些有用的管理工具。安装MongoDB后,启动该服务,并确保在服务器重新启动时启动该服务:

代码语言:javascript复制
sudo systemctl enable mongod.service
sudo systemctl start mongod

然后使用systemctl检查服务是否已正确启动:

代码语言:javascript复制
sudo systemctl status mongod

您应该看到以下输出,表明该服务正在运行:

输出

代码语言:javascript复制
● 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已经安装成功了,那么让我们用软件防火墙保护它。

第二步 - 使用防火墙保护MongoDB

在多数情况下,我们只能从某些受信任的位置访问MongoDB,例如托管应用程序的另一台服务器。要完成此任务,您可以在指定另一台服务器的IP地址的情况下允许访问MongoDB的默认端口。我们将使用iptables防火墙来设置此规则,连同一些其他规则来保护系统。

在我们编写规则之前,请安装iptables-persistent包,以便保存您创建的规则。这样,每次重新启动服务器时都会应用这些规则。执行以下命令:

代码语言:javascript复制
sudo apt-get install iptables-persistent

注意:在安装过程中,系统可能会询问您是否要保留现有规则。您可以放弃现有规则。

接下来,删除可能存在的任何现有规则,以防万一:

代码语言:javascript复制
sudo iptables -F

然后添加一个规则,允许已建立的连接。这样我们现有的SSH连接就不会中断:

代码语言:javascript复制
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

接下来,确保允许SSH访问:

代码语言:javascript复制
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

如果您计划从远程服务器连接到MongoDB,请添加这些规则,以允许从应用程序服务器访问MongoDB的默认端口:

代码语言:javascript复制
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

接下来,添加这些规则,以允许本地设备上的流量:

代码语言:javascript复制
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

最后,更改防火墙策略以删除所有其他流量:

代码语言:javascript复制
sudo iptables -P INPUT DROP

警告:更改默认策略以删除未在规则中明确定义的流量将意味着所有内容都已锁定。如果您希望将来允许其他流量,则需要添加新规则。 此外,如果您不小心刷新了规则,您将被锁定在服务器之外。如果您将来需要调整规则,最好使用sudo iptables -P INPUT ACCEPT允许流量通过。一旦您确定再次正确配置了某些内容,就可以使用sudo iptables -P INPUT DROP来锁定内容。

验证规则是否正确:

代码语言:javascript复制
sudo iptables -S

您应该看到类似的输出:

代码语言:javascript复制
-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

最后,保存规则:

代码语言:javascript复制
netfilter-persistent save

第三步 - 启用对外部服务器的访问(可选)

默认情况下,当前版本的MongoDB不接受外部连接。如果您已使用防火墙限制对特定IP地址的访问,则可通过修改MongoDB的配置以接受远程连接。

编辑MongoDB配置文件:

代码语言:javascript复制
sudo nano /etc/mongod.conf

找到此部分:

代码语言:javascript复制
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

Mongo正在监听本地地址,所以它只接受本地连接。更改bindIp值,使其包含MongoDB服务器的IP地址:

代码语言:javascript复制
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1, your_server_ip

保存文件并退出编辑器。然后重启MongoDB以应用以上更改:

代码语言:javascript复制
sudo systemctl restart mongod

您的远程计算机现在应该能够连接上了。但是,您可能还希望启用身份验证以进一步保护数据库。

结论

还是那句话,对于生产环境的服务器,我们建议您使用腾讯云云关系型数据库,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。 更多Linux教程请前往腾讯云 社区学习更多知识。


参考文献:《How to Install MongoDB on Debian 8》

0 人点赞