在 Linux 中使用 Vagrant 安装 MongoDB

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

内容

  1. 什么是MongoDB?
  2. 先决条件
  3. 初始化 Vagrant 环境
  4. 创建引导 shell 脚本
  5. 启动 mongoDB Vagrant 机器
  6. 访问 mongoDB shell
  7. 从命令行管理 mongoDB vagrant box
  8. 结论

什么是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

每个 vagrant VM 都分配有 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种颜色. 您可以通过修改 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 安装和配置部分由 bootstrap 脚本处理。 这将需要几分钟。

要登录到 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 shell

蒙戈壳 是一个连接到 mongoDB 的 cli 客户端。 现在它被一个新的 cli 客户端取代 mongosh 来自 mongoDB V5。

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

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

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

在这里,我正在与一个新创建的流浪用户建立联系。

$ 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。

数据库安装MongoDBLinuxMongoDBMongoDB社区版NosqlUbuntuVagrantVirtualBoxVirtualization