MongoDB 也不是很难 装置 试一下用 云数据库太贵了 Docker

  • 电脑网络维修
  • 2024-11-15

我想既然接口跑在 Serverless 上,索性数据库也买一个 MongoDB 云数据库吧,这样大家齐全不须要买主机自己部署,对前端来说门槛更低。

而后我找到了云数据库,看到多少钱傻眼了:

确实买不起啊,还是我自己搭建吧。还好我有好基友 Docker,搭建一个 MongoDB 不麻烦。

目前 MongoDB 最新版本是 7.x,咱们用上一个版本 6.x。

运转容器启动 MongoDB

(1)拉取 MongoDB 的官方镜像:

$ docker pull mongo:6

(2)在宿主环境中创立两个目录,作为容器数据卷:

/docker/mongodb/data/#数据库数据目录/docker/mongodb/dump/#备份数据目录

(3)口头命令,把 MongoDB 容器运转起来:

$ docker run --name mongodb \--restart=always \-p 27017:27017 \-v /docker/mongodb/data:/data/db \-v /docker/mongodb/dump:/var/dump \-d mongo:6 --auth

上方的几个关键参数说明一下:

运转成功后,经常使用docker ps命令检查容器列表:

图中圈住的中央就是容器ID,接着进入这个容器,并衔接数据库:

$ docker exec -it <container_id>/bin/bash$ mongosh# 进入数据库,不须要用户名

mongosh是从 MongoDB 4.2 开局推出的 shell 工具,取代了之前的mongo命令,用于口头数据库的操作,这里要当心一下。

上图可以看到,自动衔接到了 test 数据库。

如今切换到 admin 数据库(身份验证数据库),创立一个超级用户:

$ use admin # 切换数据库$ db.createUser({user:'root',pwd:'mongo_root_pass',roles:[{role:'root',db:'admin'}]})

接上去经常使用这个用户登录 MongoDB,就可以口头“创立数据库、创立用户”等操作了。

启动容器并创立用户

上一步咱们先启动容器,而后再创立超级用户,实践上这两个步骤可以一次性成功。

在运转容器时,假设传入上方的两个环境变量:

MongoDB 会智能在 admin 数据库中创立该用户,指定角色为 root,并智能启用身份验证(--auth)。

所以上方的运转容器命令可以提升为这样:

$ docker run --name mongodb \--restart=always \-p 27017:27017 \-v /docker/mongodb/data:/data/db \-v /docker/mongodb/dump:/var/dump \-e MONGO_INITDB_ROOT_USERNAME=root \-e MONGO_INITDB_ROOT_PASSWORD=mongo_root_pass \-d mongo:6

这样 MongoDB 启动之后,便智能创立了超级用户。

启动时智能口头脚本

自动的 admin 数据库用于身份验证。当真正存储数据时,须要创立一个新的数据库。

创立数据库和用户须要权限,普通咱们会用超级用户登录到 admin 数据库,而后再创立其余数据库和用户,如下:

$ docker exec -it <container_id>/bin/bash # 进入容器$ mongosh admin --username root --password mongo_root_pass # 登录 admin 数据库$ use test_db# 创立/切换数据库

但是假设是在 CI(智能化部署)环境中,咱们宿愿 MongoDB 启动后智能创立须要的数据库和用户,而不是每次都要手动创立,这时应该怎样办呢?

这时刻要借助一个 Docker 下的不凡目录:docker-entrypoint-init.d。

该目录下可以自定义脚本文件,在容器第一次性启动时智能口头。mongo镜像可以识别该目录下的.sh和.js文件,并依照顺序口头。

那么咱们就在 /docker/mongodb 目录下创立一个mongo-init.js文件,并在运转容器时挂载:

-v /docker/mongodb/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js

如今在该文件中编写初始化逻辑,比如创立一个用户:

// mongo-init.jsdb.createUser({user: 'test_user',pwd: 'test_pass',roles: [{role: 'dbOwner',db: 'test_db',},],});

上方的 JS 文件中可以访问db对象,由于它在mongosh环境下口头。自动状况下,db 代表 “test” 数据库。

假设咱们要切换数据库,命令是use <db_name>。但是在 JS 文件中,显然这种语法是不允许的。

关于如何在 JS 文件中切换数据库,我找了很多方法,翻了一终日的文档,终于找到了。

就是它:db.getSiblingDB(),同等于 use 命令。

因此,在 test_db 数据库中创立/切换用户,可以修正如下:

db = db.getSiblingDB('test_db');db.createUser({user: 'test_user',pwd: 'test_pass',roles: [{role: 'dbOwner',db: 'test_db',},],});

经过db.getSiblingDB()方法,咱们可以在 JS 脚本中创立多个数据库和用户。

假设你不想在 JS 代码中创立/切换数据库,更繁难的方法是,用环境变量MONGO_INITDB_DATABASE指定脚本在某个数据库下口头。

Docker Compose 运转

假设你感觉运转容器的命令太长,那么经常使用 Docker Compose 也是一个不错的选用。

首先创立compose.yml性能文件如下:

version: '3.1'services:mongodb:image: mongo:6restart: alwaysenvironment:MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: mongo_root_passMONGO_INITDB_DATABASE: test_dbvolumes:- '/docker/mongodb/data:/data/db'- '/docker/mongodb/dump:/var/dump'- '/docker/mongodb/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js'

而后运转启动命令:

$ docker compose up -d

客户端衔接到 MongoDB

在启动 MongoDB 时,传入--auth参数示意开启授权验证,不传则不开启。

假设未开启授权验证,衔接 MongoDB 不须要账号明码,衔接 URL 如下:

mongodb://127.0.0.1:27017

假设开启授权验证,则衔接 URL 中必定指定数据库、账号、明码,如下:

mongodb://user:pass@127.0.0.1:27017/dbname

在《前端开发实战派》的名目中经常使用mongoose衔接数据库,有了上方的 url 和用户名明码,衔接方法如下:

const mongoose = require('mongoose')mongoose.connect('mongodb://127.0.0.1:27017/dbname', {user: 'username',pass: 'password',}).then(() => {console.log('数据库衔接成功:')}).catch(err => {console.log('数据库衔接失败:', err)})

如今,你可以在我的开源名目 仿掘金博客系统 中减少自己的数据库性能,名目就可以运转起来了。

总结

前面咱们从 MongoDB 的装置、运转性能、授权验证等方面,片面引见了如何用 Docker 将 MongoDB 运转起来,并在名目中衔接经常使用。

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/8895.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号