在 Linux 中使用 Vagrant 安装 MongoDB

流浪汉 是一个开源软件,它提供了一个干净、易于配置、可重现和可移植的开发环境。 使用 Vagrant,我们可以轻松快速地构建和维护不同的虚拟软件开发环境。 在本指南中,我们将了解如何在 Linux 操作系统中使用 Vagrant 安装 mongoDB。

什么是MongoDB?

MongoDB 是一个 NoSQL 面向文档的数据库,用于处理大量数据。 MongoDB 使用集合和文档来存储数据。 文档是存储在集合中的一组键值对 (JSON)。

下面是一个示例文档 JSON 格式供您参考。

{
   title: 'Install MongoDB-5 In Linux Using Vagrant',
   url: 'https://ostechnix.com/',
   Site: 'ostechnix',
   owner: 'sk',
   author: 'Karthick',
   tags: ['community Edition', 'Linux', 'NoSQL', 'MongoDB5'],
   mongo_version: 5
}

最新版本的 mongoDB 是 5. MongoDB 有两种变体——社区版和企业版。 在本文中,我们将在 Linux 中使用 Vagrant 安装 mongoDB 5 社区版。

先决条件

在继续下一步之前,请确保您已安装 Oracle VirtualBox 和 Vagrant 在你的 Linux 机器上。 甲骨文 VirtualBox 在流行的 Linux 发行版的官方存储库中可用,因此您可以使用发行版的默认包管理器安装它。

然后,按照以下链接中的说明在您的 Linux 系统上安装 Vagrant。

  • 如何在 Linux 上安装 Vagrant

初始化 Vagrant 环境

出于本指南的目的,我将使用 Oracle Virtualbox 作为管理程序,它是 Vagrant 的默认提供程序。 我正在使用 Ubuntu 20.04 Vagrant box 在其中部署 mongoDB。

为 MongoB 创建一个新的项目目录。

$ mkdir mongodb_vagrant

切换到项目目录,运行以下命令初始化 vagrant 环境:

$ cd mongodb_vagrant
$ vagrant init -m "ubuntufocal64"

这将在项目目录中创建一个新的 Vagrantfile。 在您喜欢的编辑器中打开 Vagrantfile 并在其中复制/粘贴以下行:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.box_check_update = false
  config.vm.define "MongoDB5"
  config.vm.network "public_network"
  config.vm.provision "shell", path: "mongo-bootstrap.sh"
  config.vm.provider "virtualbox" do |v|
    v.memory = 2048
    v.cpus = 2
    v.name = "MongoDB-5"
  end
end

请允许我解释一下上面代码中的重要参数。

参数 vm.box 指向我们用来安装 MongoDB 的底层 Linux 发行版。 在我们的例子中,它是 Ubuntu 20.04 LTS。

config.vm.box = "ubuntu/focal64"

每次启动 VM 时,Vagrant 都会检查所使用的盒子是否有任何更新。 设置参数 box_check_update = false 将禁用更新检查。 这是可选的! 您更喜欢更新 Vagrant 框,您可以删除此行:

config.vm.box_check_update = false

每个流浪虚拟机都分配有 default 作为名字。 参数 vm.define 可用于为您的 VM 设置自定义名称。 在这种情况下,我已将名称设置为 MongoDB5.

config.vm.define "MongoDB5"

你可以运行 global-status 检查分配给 VM 的名称的命令:

$ vagrant global-status --prune

id       name        provider   state    directory
--------------------------------------------------------------------------------------------

76c3e81  MongoDB5    virtualbox running  /home/karthick/Work/Lab/vagrant/mongodb_vagrant

以下参数决定了如何为您的 VM 设置网络。

config.vm.network "public_network"

我已经设置 Public_network. 我也没有提供接口名称,因为它可能会有所不同,并且在连接过程中会提示要连接的接口 vagrant up 如下面的日志输出所示。

==> MongoDB5: Available bridged network interfaces:
1) wlo1
2) eno1
3) docker0
==> MongoDB5: When choosing an interface, it is usually the one that is
==> MongoDB5: being used to connect to the internet.
==> MongoDB5: 
    MongoDB5: Which interface should the network bridge to? 1
==> MongoDB5: Preparing network interfaces based on configuration...
    MongoDB5: Adapter 1: nat
    MongoDB5: Adapter 2: bridged
==> MongoDB5: Forwarding ports...
    MongoDB5: 22 (guest) => 2222 (host) (adapter 1)

我使用 shell 配置器来安装和设置 MongoDB。 脚本名称是 mongo-bootstrap.sh. 您可以根据需要命名脚本。

config.vm.provision "shell", path: "mongo-bootstrap.sh"

以下参数将为您的虚拟机配置内存和 CPU。 我已将内存设置为 2演出2 个 Vcor​​e. 您可以通过修改 v.memoryv.cpus 参数。

config.vm.provider "virtualbox" do |v|
    v.memory = 2048
    v.cpus = 2
    v.name = "MongoDB-5"
  end

分配给参数的名称 v.name 是您的 Virtualbox GUI 中将显示的内容。

虚拟框名称

创建引导 shell 脚本

如前所述,shell 配置器用于在 vagrant 框中安装和配置 mongoDB。

创建一个名为 mongo-bootstrap.sh

$ vi mongo-bootstrap.sh

并在其中添加以下代码:

#!/usr/bin/env bash

# Adding Repo
echo "-------------------------- ADDING REPO -------------------------------------"
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

# Updating Package Index and Installing MongoDB-5
echo "-------------------------- UPDATING PACKAGE INDEX -------------------------------------"
sudo apt update

echo "-------------------------- INSTALL PACKAGES --------------------------"
sudo apt install -y mongodb-org net-tools

# Start and Enable Mongod 
echo "-------------------------- START & ENABLE MONGOD --------------------------"
sudo systemctl enable --now mongod

sleep 20

# Create user
echo "-------------------------- CREATE VAGRANT USER --------------------------"
mongosh << BLK
use admin
db.createUser(
{
    user: "vagrant",
    pwd: "vagrant",
    roles: [
              { role: "userAdminAnyDatabase", db: "admin" },
              { role: "readWriteAnyDatabase", db: "admin" },
              { role: "dbAdminAnyDatabase", db: "admin" },
              { role: "clusterAdmin", db: "admin" }
           ]
})
exit
BLK


## Enable Authorization

sudo cat << EOB >> /etc/mongod.conf
#security:
security:
    authorization: "enabled"
EOB

echo "-------------------------- RESTARTED MONGOD --------------------------"
sudo systemctl restart mongod

ESC 并输入 :wq 保存文件并 close 它。

让我对上面代码中的每个部分进行简要说明。

默认情况下,Ubuntu 附带了一个旧版本的 mongoDB。 如果你想要 mongodDB 最新版本,你必须在 mongo-bootstrap.sh 文件。

以下代码部分将负责添加存储库、更新包索引、安装 mongoDB 并启动 mongod 守护进程。

添加 mongodb 官方仓库

以下代码块将创建一个流浪用户 admin 特权。 用户名将是 vagrant 并且密码也设置为 vagrant. 如果您愿意,您可以设置不同的用户名和密码。

创建流浪用户创建流浪用户

默认情况下,没有强制执行安全策略。 任何用户都可以调用 mongosh shell 并开始使用数据库。 要强制执行基于角色的访问控制,应将以下参数添加到 /etc/mongod.conf 文件。

这段代码将负责添加参数并重新启动 mongod 使更改生效的守护程序。

启用授权启用授权

小心: 在启用 RBAC(基于角色的访问控制)之前, admin 应该创建用户,以便他/她可以授予任何数据库中其他用户的访问权限。

启动 mongoDB Vagrant 机器

创建 Vagrant 文件和引导脚本后,您可以通过运行以下命令来启动 VM:

$ vagrant up

现在,等到机器启动并且 mongoDB 安装和配置部分由引导脚本处理。 这将需要几分钟。

要登录到 VM,请运行以下命令:

$ vagrant ssh

MongoDB 监听端口 27017. 您可以使用 netstat 命令检查端口是否处于侦听状态。

$ sudo netstat -tlnup

样本输出:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      3306/mongod

运行以下命令检查状态 mongod 服务:

$ systemctl status mongod

样本输出:

● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-08-17 10:24:36 UTC; 2h 21min ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 3306 (mongod)
     Memory: 162.3M
     CGroup: /system.slice/mongod.service
             └─3306 /usr/bin/mongod --config /etc/mongod.conf

访问 mongoDB 外壳

蒙哥壳 是一个连接mongoDB的cli客户端。 现在它被一个新的 cli 客户端取代 mongosh 从 mongoDB V5.

mongosh 在终端中开始使用 shell。 由于启用了 RBAC,您必须提供凭据。

您可以使用连接到 MongoDB 数据库 monosh 使用以下连接字符串。

$ mongosh mongodb://<username>:<password>@localhost:<port>/<database>

在这里,我正在连接一个新创建的 vagrant 用户。

$ mongosh mongodb://vagrant:[email protected]:27017/admin

或者,您可以启动 shell 并运行以下命令进行连接:

$ monosh
$ use admin
$ db.auth("username","password")
$ db.auth("vagrant","vagrant")
以 Vagrant 用户身份连接到 MongoDB 数据库以 Vagrant 用户身份连接到 MongoDB 数据库

从命令行管理 mongoDB vagrant box

以下 vagrant 命令将帮助您通过 CLI 管理 mongoDB VM:

$ vagrant --global-status --prune      # check the status of the machine 
$ vagrant halt                         # Stop the VM
$ vagrant destroy                      # Destroy the VM and associated VM disk.
$ vagrant ssh                          # Login to Remote Host

有关更详细的 Vagrant 命令用法,请参阅我们的 Vagrant 教程:

  • Vagrant 教程 – 在 Linux 中开始使用 Vagrant

结论

在这个分步指南中,我们已经了解了如何在 Ubuntu 20.04 Vagrant box 中轻松设置 mongoDB。 如果你正在测试一个 mongoDB 项目或学习 mongoDB,你可以快速启动一个 Vagrant 盒子并在 Vagrant 盒子中安装 mongodDB,如此处所述。