专栏首页云计算教程系列如何在Debian上安装MongoDB
原创

如何在Debian上安装MongoDB

介绍

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

准备

要学习本教程,您需要:

第一步 - 安装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已经安装成功了,那么让我们用软件防火墙保护它。

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

在多数情况下,我们只能从某些受信任的位置访问MongoDB,例如托管应用程序的另一台服务器。要完成此任务,您可以在指定另一台服务器的IP地址的情况下允许访问MongoDB的默认端口。我们将使用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

您应该看到类似的输出:

-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

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

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

编辑MongoDB配置文件:

sudo nano /etc/mongod.conf

找到此部分:

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

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

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1, your_server_ip

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

sudo systemctl restart mongod

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

结论

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


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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在FreeBSD 10.1上安装MongoDB

    MongoDB是一个免费的开源NoSQL数据库。它是当今Web应用程序中最常用的数据库之一,因为它在数据库模式设计中提供了高性能,可伸缩性和大量灵活性。在本教程...

    爆栈工程师
  • 什么是不可变的基础设施?

    在传统的可变服务器基础架构中,服务器会不断更新和修改。使用此类基础架构的工程师和管理员可以通过SSH连接到他们的服务器,手动升级或降级软件包,逐个服务器地调整配...

    爆栈工程师
  • 如何在CVM上同步自建数据库的数据?

    Transporter是一种用于在不同数据存储之间移动数据的开源工具。开发人员经常为诸如跨数据库移动数据,将数据从文件移动到数据库或反之亦然等任务编写一次性脚本...

    爆栈工程师
  • selenum参考手册中文翻译

    Added by SpringSideTeam, last edited by SpringSideTeam on 2006-11-23  (view chan...

    阿新
  • URI格式

    格式: http://user:pass@www.example.com:80/home/index.html?age=11#mask ...

    心跳包
  • 如何在CentOS 7上使用Fail2Ban保护SSH

    虽然通过SSH连接到服务器可能非常安全,但SSH守护程序本身是一种必须暴露给Internet才能正常运行的服务。这带来了一些固有的风险,并为潜在攻击者提供了一个...

    编程男孩
  • HTTP/2 探索第一篇:概念

    现在网络优化的瓶颈是什么?你可能会说,带宽。也许在2014年前,决定性能的关键是带宽,但是在今天以及以后,瓶颈都不会是带宽,而是延迟。

    小时光
  • 数据结构(四):栈

    栈是只能在一端进行插入和删除操作的线性表。表中允许进行插入、删除操作的一端称为栈顶。栈顶的位置是动态的,由一个称为栈顶指针的位置指示器指示。表的另一端称为栈底。

    渔父歌
  • 让真人照片说话算什么?Adobe新研究让插座都能开口说话

    此前,机器之心报道过三星人工智能研究中心和伦敦帝国理工学院提出的新型端到端系统,仅凭一张人脸照片和一段音频,就可以生成新的讲话或唱歌视频。

    机器之心
  • PBTK:一款针对Protobuf App的逆向工程与模糊测试套件

    Protobuf是Google设计的一种序列化格式,目前已被广泛应用在各种Android端、Web端和桌面端应用程序之中。它由一种用于声明数据结构的语言组成,并...

    FB客服

扫码关注云+社区

领取腾讯云代金券