Ubuntu20.04平台下使用二进制包部署MongoDB-6.0.4单实例

news2024/11/28 22:39:56

文章目录

    • 1.1 准备服务器的基本信息
    • 1.2 操作系统上创建其用户
    • 1.3 部署MongoDB服务端
    • 1.4 部署MongoDB客户端
    • 1.5 部署MongoDB 27017实例
      • 1.5.1 创建相关目录
      • 1.5.2 准备配置文件
      • 1.5.3 准备启停脚本
      • 1.5.4 进行启停测试
      • 1.5.5 加入开机自启动
    • 1.6 创建超级管理员用户
      • 1.6.1 创建本地的超级用户
      • 1.6.2 创建远端的超级用户
    • 1.7 创建web(业务)帐号
      • 1.7.1 创建某业务库
      • 1.7.2 创建web帐户

1.1 准备服务器的基本信息

在这里插入图片描述

1.2 操作系统上创建其用户

创建超级用户admin

#### 用途:相当于root用户,因为root用户我们会禁止远程登录
01:用来充当root用户的角色。
02:它不会用来运行任何的应用。

#### 用户的基本要求
01:用户要能够远程登录,要有家目录。
02:用户不能过期、密码得复杂化,密码是否过期是另外一回事。
03:用户的主组为admin,用户的辅组为wheel。
04:用户得被visudo授权为:admin ALL=(ALL:ALL) NOPASSWD: ALL

#### 创建用户的命令
chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow
groupadd -g 91 wheel
groupadd -g 1000 admin
useradd admin -u 1000 -g admin -G wheel -m -s /bin/bash
echo "admin:123456\!@#"|chpasswd
echo "admin ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers
visudo -c

创建普通用户app

#### 用途:用来运行1024端口以上的应用
01:用来运行1024端口及以上的应用,即ps -ef | grep "服务名" 结果中的第一
    列的内容得是app。
02:所有服务的启停、开机自启动都用systemctl来管理。
03:这个app用户要能够使用systemctl来启停服务、开机自启动管理。

#### 用户的基本要求
01:用户要能够远程登录,要有家目录。
02:用户不能过期、密码得复杂化,密码是否过期是另外一回事。

#### 创建普通用户app的命令
sudo chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow
sudo groupadd -g 1001 app
sudo useradd app -u 1001 -g app -m -s /bin/bash
echo "app:Chenliang\!@#" | sudo chpasswd

1.3 部署MongoDB服务端

软件下载地址

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.4.tgz

创建相关的目录

sudo mkdir -p /data/soft
sudo ls -ld /data/soft

安装mongodb服务端软件

#### 安装mongodb服务端软件
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.4.tgz
ls -l mongodb-linux-x86_64-ubuntu2004-6.0.4.tgz
sudo tar xf  mongodb-linux-x86_64-ubuntu2004-6.0.4.tgz  -C /data/soft/
sudo ln -svf /data/soft/mongodb-linux-x86_64-ubuntu2004-6.0.4 /data/soft/mongodb
sudo chown -R app:app /data/soft/
ls -l /data/soft/mongodb/bin

  # 里面只有mongod mongos install_compass 这三个命令
  # 没有mongo命令了

#### 配置环境变量
ls -ld /data/soft/mongodb/bin

sudo bash -c "cat >>/etc/profile" <<'EOF'
export PATH=/data/soft/mongodb/bin:$PATH
EOF

source /etc/profile
which mongod mongos

1.4 部署MongoDB客户端

安装mongosh客户端工具,因为6.0版本默认没有mongo命令了,所以这里安装mongosh

#### 软件下载地址,这个得根据自己的操作系统版本,及系统上Openssl的版本
wget https://downloads.mongodb.com/compass/mongodb-mongosh-shared-openssl11_1.8.0_amd64.deb

#### 安装
ls -l mongodb-mongosh-shared-openssl11_1.8.0_amd64.deb
sudo dpkg -i mongodb-mongosh-shared-openssl11_1.8.0_amd64.deb
which mongosh

sudo ln -svf $(which mongosh)  /data/soft/mongodb/bin/mongosh
sudo ls -l  /data/soft/mongodb/bin/mongosh

1.5 部署MongoDB 27017实例

1.5.1 创建相关目录

sudo mkdir -p /data/apps/mongodb/27017/{data,conf,logs,run,keys,scripts}
sudo tree /data/apps/mongodb/27017

1.5.2 准备配置文件

sudo bash -c "cat >/data/apps/mongodb/27017/conf/mongod.conf" <<'EOF'
## network
net:
  port: 27017
  ipv6: false
  bindIpAll: false
  bindIp: 0.0.0.0
  maxIncomingConnections: 3000
  wireObjectCheck: true
  unixDomainSocket:
    enabled: true
    pathPrefix: /data/apps/mongodb/27017/run
    filePermissions: 0700

## storage
storage:
  dbPath: /data/apps/mongodb/27017/data
  journal:
    enabled: true
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2

## log
systemLog:
  destination: file
  logAppend: false
  path:  /data/apps/mongodb/27017/logs/mongod.log
  quiet: false

## process
processManagement:
  fork: true
  pidFilePath:  /data/apps/mongodb/27017/run/mongod.pid
  timeZoneInfo: /usr/share/zoneinfo/Asia

## security
security:
  authorization: enabled
  javascriptEnabled: false
EOF

1.5.3 准备启停脚本

准备启停脚本

sudo bash -c 'cat >/data/apps/mongodb/27017/scripts/mongod.sh' <<'EOF'
#!/bin/bash
#
# Explain: MongoDB start、stop scripts 
#
# Define variables
RETVAL=0
MonPort="27017"
MonConf="/data/apps/mongodb/$MonPort/conf/mongod.conf"
MonCommPath="/data/soft/mongodb/bin"

# Define functions
start(){
MonStatusCheck="$(ss -lntup|grep -w "$MonPort"|wc -l)"
if [ "$MonStatusCheck" -eq 0 ];then
           $MonCommPath/mongod -f $MonConf --fork >/dev/null 2>&1
           RETVAL=$?
           if [ $RETVAL -eq 0 ];then
              echo "Start mongodb service[$MonPort] success"
             else
              echo "Start mongodb service[$MonPort] fail"
   fi
          else
           echo "mongodb service[$MonPort] is running"
fi
return $RETVAL
}

stop(){
MonStatusCheck="$(ss -lntup|grep -w "$MonPort"|wc -l)"
if [ "$MonStatusCheck" -ne 0 ];then
           $MonCommPath/mongod --shutdown -f $MonConf  >/dev/null 2>&1
           RETVAL=$?
   if [ $RETVAL -eq 0 ];then
      echo "Start mongodb service[$MonPort] success"
     else
      echo "Start mongodb service[$MonPort] fail"		
   fi
  else
   echo "mongodb service[$MonPort] is not running"
fi
return $RETVAL
}

status(){
MonStatusCheck="$(ss -lntup|grep -w "$MonPort"|wc -l)"
if [ "$MonStatusCheck" -ne 0 ];then
   echo "mongodb service[$MonPort] is running"
  else
   echo "mongodb service[$MonPort] is not running"
fi
return $RETVAL
}

# case call define functiosn
case "$1" in
start)
start
RETVAL=$?
;;
stop)
stop
RETVAL=$?
;;
restart)
stop
sleep 5
start
RETVAL=$?
;;
status)
status
RETVAL=$?
;;
*)
echo "USAGE:$0{start|stop|restart|status}"
exit 1
esac
EOF

给脚本加可执行权限

sudo chmod 700 /data/apps/mongodb/27017/scripts/mongod.sh
ls -l /data/apps/mongodb/27017/scripts/mongod.sh

更改属主/组为app

sudo chown -R app:app /data/apps/mongodb/

将脚本加入systemctl中

#### 编写/etc/systemd/system/mongod27017.service文件
sudo bash -c "cat >/etc/systemd/system/mongod27017.service" <<'EOF'
[Unit]
Description=mongod  instance
After=network.target

[Service]
Type=forking
User=app
Group=app
ExecStart=/bin/bash /data/apps/mongodb/27017/scripts/mongod.sh start
ExecStop=/bin/bash /data/apps/mongodb/27017/scripts/mongod.sh stop
LimitNOFILE=65535
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=1
PrivateTmp=false

[Install]
WantedBy=multi-user.target
EOF

#### 加载
sudo systemctl daemon-reload

#### 授权
sudo chown -R app:app /etc/systemd/system/mongod27017.service

让普通用户app在可执行sudo systemctl stop mongod27017.service这样的命令,但我们这里的app用户是不能远程登录的。你就想想app若是可以登录的呢?

#### 进行visudo授权
sudo bash -c "cat >/etc/sudoers.d/mongod27017_systemctl" <<'EOF'
## Cmnd Alias
Cmnd_Alias MONGOD27017_SYSTEMCTL =  /usr/bin/systemctl daemon-reload, \
                                   /usr/bin/systemctl start mongod27017.service, \
                                   /usr/bin/systemctl stop mongod27017.service, \
                                   /usr/bin/systemctl restart mongod27017.service, \
                                   /usr/bin/systemctl status mongod27017.service, \
                                   /usr/bin/systemctl enable mongod27017.service, \
                                   /usr/bin/systemctl disable mongod27017.service, \
                                   /usr/bin/systemctl is-enabled mongod27017.service 

## auth
app ALL=(ALL:ALL) NOPASSWD:  MONGOD27017_SYSTEMCTL
EOF

#### 更改visudo授权时文件的权限,并visudo -c
sudo chmod 0440 /etc/sudoers.d/mongod27017_systemctl
sudo visudo -c

1.5.4 进行启停测试

#### 先看一看
sudo -u app   sudo -l

#### 启动mongodb27017实例
sudo -u app   sudo systemctl start mongod27017.service
sudo ps -aux | grep mongod
ss -lntup | grep 27017

#### 停止mongodb27017实例
sudo -u app   sudo systemctl stop mongod27017.service
sudo ps -aux | grep mongod
ss -lntup | grep 27017

#### 再次启动
sudo -u app   sudo systemctl start mongod27017.service
sudo ps -aux | grep mongod
ss -lntup | grep 27017

1.5.5 加入开机自启动

sudo systemctl enable mongod27017.service
sudo systemctl is-enabled mongod27017.service

1.6 创建超级管理员用户

1.6.1 创建本地的超级用户

我这里创建一个root用户,角色为root,因为角色为root,其库必须得为admin库。且我会开启root用户的身份验证(只允许client地址为127.0.0.1的登录,这样一来这个root用户就是个本地用户,只能在mongodb实例所在服务器上用mongosh 127.0.0.1:27017这样的方式去登录,然后到admin库下去认证。)

// 连接mongodb实例,进入到admin库,我mongodb实例才部署好,哪来的认证
// 连接的时候只能是127.0.0.1,因为我的配置文件中有开启安全认证
mongosh 127.0.0.1:27017
use admin; 

// 这里创建用户并且同时(这里是必须)授于角色为root,db只能是admin
db.createUser(
    {
        user:"root",
        pwd:"root123456",
        roles: [ 
            { role:"root",db:"admin" }
        ]
     }
);

// 进行认证
db.auth("root","root123456")


// 开启其身份验证,其实在创建用户时就可以,但我们这里是才部署好,都没有
// 超级用户。
db.updateUser(
    "root",
    {
        authenticationRestrictions:[
            { 
                clientSource: ["127.0.0.1"] 
            }
        ]
    }
);

// 查看root用户
db.getUser("root");                      // 看不到身份验证的相关信息
db.system.users.find( {user:"root"} );   // 就可看到身份验证


// 退出连接
exit;


// 连接,这里使用mongosh 172.31.7.111:27017 来进行连接
// 认证时使用root用户,会报错,因为root用户开启了身份验证的

在这里插入图片描述

// 再用mongosh 127.0.0.1:27017去连接,然后认证时使用root用户
// 是可以成功的

在这里插入图片描述

1.6.2 创建远端的超级用户

这里创建一个远端的超级用户,这个超级用户的名称可以以你公司的名称来命名,所以它并不是一个人类用户。就不对该用户开启身份验证了,这个用户我们就可以结navicat这样的工具来连接mongodb实例了。

// 本地以root用户登录并认证
mongosh 127.0.0.1:27017
use admin;
db.auth("root","root123456");

// 创建aliang用户,角色为root,认证库必须为admin(得在admin库下创建用
// 户),库也得为admin。
use admin;
db.createUser(
    {
        user: "aliang",
        pwd: "aliang123456",
        roles: [
                { role:"root",db:"admin" }
         ]
    }
);

// 查看用户
use admin;
db.system.users.find( {user:"aliang"} );
db.getUser("aliang");

// 进行认证
db.auth("aliang","aliang123456");

// 退出登录
exit;

1.7 创建web(业务)帐号

1.7.1 创建某业务库

 以本地管理员用户登录

mongosh 127.0.0.1
use admin;
db.auth("root","root123456");

 创建wyc业务库

// 进入并创建wyc库,并创建test集群
use wyc;       

db.createCollection("test");    

// 往test集合中插入两条数据
db.test.insertMany( 
	[ 
		{name:"chenliang01",age:"11"},
		{name:"chenliang02",age:"12"} 
  ] 
);
                        
// 查看test集合中的前10条文档(记录)
db.test.find().limit(10);  

1.7.2 创建web帐户

 创建一个名为wyc的用户并进行授于相关角色

// 我是进入到admin库的哈
use admin;                      

// 创建用户,设置密码,没有授于角色(后面会授予的)
db.createUser(
	{
		user:"wyc",
		pwd:"wyc123456",
		roles: [] 
	}
); 

// 查看wyc用户
db.getUser("wyc"); 

// 对wyc用户授于readWrite角色
db.grantRolesToUser(
	"wyc",
		[ 
			{role:"readWrite",db:"wyc"} 
		]
);  

// 查看wyc用户
db.getUser("wyc");  

 对wyc这个web帐户进行认证

// 进入到admin库后,认证wyc用户
use admin;                    
db.auth("wyc","wyc123456"); 

// 查看有哪些库,只能看到wyc库,进入wyc库,查看test集群
show dbs; 
use wyc; 
show tables;
db.test.find().limit(10);

// 退出连接
exit;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/626536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

do..while、while、for循环反汇编剖析

1、循环语句重要特征提取 循环语句最重要的特点就是执行的过程中会往上跳&#xff01;&#xff01;&#xff01; 箭头往上跳的一般都是循环语句&#xff0c;比如下面的for循环&#xff1a; 2、do..while语句反汇编 #include<iostream> using namespace std; #pragma …

【SpinalHDL快速入门】2、新建SpinalHDL工程,通过计数器Demo快速上手

文章目录 新建工程各个工具版本build.sbt 示例build.properties 示例如何在IEDA中更新 SpinalVersion 并 Reload sbt Project SpinalHDL入门例子&#xff1a;计数器demo1demo2&#xff08;支持reset信号异步复位&#xff0c;低电平有效&#xff09;demo3&#xff08;一个文件&a…

Flume学习--1、Flume概述、Flume入门、

1、Flume概述 1.1 Flume定义 Flume是Cloudera提供的一个高可用&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统。Flume基于流式结构&#xff0c;灵活简单。 Flume最主要的作用就是实时读取服务器本地磁盘的数据&#xff0c;将数据写入到HDFS。 1.2…

C#winform多国语言应用实例

我们在开发项目中,一般需要软件支持多种语言,供不同客户使用。本文实例讲解实现办法。 1 窗体项目创建 添加控件MenuStrip、comboBox及Button,并修改对应显示文本,combobox编辑项输入英语 确定窗体的Localizable属性为true,自动创建Form1.resx,为False时,没有Form1.r…

基站机房:保障通信网络稳定,如何解决安全隐患?

基站机房作为无线通信网络的关键组成部分&#xff0c;承载着大量的网络设备和通信设施&#xff0c;对于运营商和通信服务提供商来说具有重要意义。 无论是大型运营商还是通信服务提供商&#xff0c;动环监控系统都将成为他们成功运营和管理通信网络的关键工具。 客户案例 案例…

vue使用高德地图--附带移动获取当前城市信息

高德地图 1.使用准备申请密钥vue使用 2.移动地图获取城市案例(注意事项)3.总结 1.使用准备 申请密钥 登录注册高德开放平台进入控制台 创建应用 申请key–生成key和安全密钥(2021之后key需要配合安全密钥使用) 注意&#xff1a;安全密钥需要在key之前 vue使用 首先在pubil…

一款功能强大的报表引擎-VeryReport报表引擎

在企业管理中&#xff0c;数据分析和决策制定是非常重要的环节。而报表则是这个过程中最常用的工具之一。但是&#xff0c;传统的报表设计与展现方式已经无法满足企业对于数据分析和报表展示的需求。为了解决这些问题&#xff0c;我们向大家推荐一款新一代Web报表软件——VeryR…

越是大型企业越需要企业内部知识库?

随着信息时代的到来&#xff0c;越来越多的企业开始注重知识管理。知识管理是一种通过有效地捕捉、共享和利用企业内部的知识资源&#xff0c;促进企业创新和发展的方法。而企业内部知识库作为知识管理的一种重要方式&#xff0c;对于大型企业来说尤为重要。 一、大型企业内部…

苹果相关网站和服务器状态

https://www.apple.com.cn/cn/support/systemstatus/

googlecloud谷歌云的初学体会(1)

googlecloud谷歌云入门&#xff08;1&#xff09; 一、纯小白自述二、云是个什么云三、装一个软件&#xff08;资源、服务&#xff09;四、服务器&#xff08;爷爷提供服务的电脑&#xff09;五、PGSQL的安装六、总结 一、纯小白自述 自己是个小白&#xff0c;仅仅懂得几句sql…

华为OD机试真题 Java 实现【寻找密码】【2023Q1 100分】,附详细解题思路

一、题目描述 小王在进行游戏大闯关,有一个关卡需要输入一个密码才能通过,密码获得的条件如下: 在一个密码本中,每一页都有一个由 26 个小写字母组成的若干位密码,从它的末尾开始依次去掉一位得到的新密码也在密码本中存在。 请输出符合要求的密码,如果由多个符合要求…

爬虫如何选择工具和编程语言

爬虫选择工具和编程语言需要根据具体的需求和技术水平来决定。以下是一些常用的工具和编程语言&#xff1a; 工具&#xff1a; Scrapy&#xff1a;一个基于Python的高级爬虫框架&#xff0c;可用于快速开发和部署爬虫。Beautiful Soup&#xff1a;一个Python库&#xff0c;用…

基于“三维六类”干扰分析模型进行FDD900干扰规避优化指导

1.概述 随着网络发展&#xff0c;鉴于900M覆盖上的优势&#xff0c;为增强深度覆盖及竞对提升&#xff0c;当前FDD 900M已在加快部署&#xff0c;但随之也带来了干扰问题。当前&#xff0c;干扰排查成为FDD 900M部署过程中大量存在的难题。由于干扰排查难度大&#xff0c;且排…

线程池和使用

tip: 作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; 文章目录 线程池的目的线程池的参…

360,可真小看你了:耍流氓耍到日本人身上,凌晨2点笑得我胃疼

天下苦流氓软件久矣 大厂的软件&#xff0c;都有点牛皮癣特性&#xff1a;捆绑安装广告推广&#xff0c;简直无所不用其极&#xff0c;身为用户着实无可奈何。 此处点名四大全家桶家族——360、鲁大师、金山毒霸、2345。 说来好笑&#xff0c;之前发的文章不是有关于金山的嘛…

Cefsharp-Winform-113.3.50(chromium5672)最新版体验兼容性测试

一、下载nupkg包(4个)提示:(不支持H264,支持MP3,WEBGL,WEBGL2等)支持H264最新版本109.*自行搜索 winform包地址(依赖包下载地址如下):NuGet Gallery | CefSharp.WinForms 113.3.50 https://globalcdn.nuget.org/packages/cefsharp.winforms.113.3.50.nupkg https://…

仓库拣货标签10代—电子料架

CK_Label_v10 无线电子标签拣货系统特点与效益 无线通信&#xff0c;极简快速部署 超低功耗&#xff0c;墨水屏显示 多彩指示灯&#xff0c;支持24V外接供电 按键及三色高亮LED指示灯指示 3位0.8寸高亮LED数码管显示 提升作业速度与品质 实现无纸化标准化作业 缩短操…

怎么快速掌握Python爬虫技术?

Python总的来说是一门比较容易入门的编程语言&#xff0c;因为它的语法简洁易懂&#xff0c;而且有很多优秀的教程和资源可供学习。相比其他编程语言&#xff0c;Python 的学习曲线较为平缓&#xff0c;初学者可以很快上手&#xff0c;但要想深入掌握 Python&#xff0c;还需要…

chatgpt赋能python:用Python实现ping命令:掌握网络连接的艺术

用Python实现ping命令&#xff1a;掌握网络连接的艺术 当我们需要测试网络连接的时候&#xff0c;ping命令是最经典的选择之一。然而&#xff0c;在一些情况下&#xff0c;使用命令行并不是很方便。那么&#xff0c;有没有可能用Python编写一个类似ping的功能呢&#xff1f; …

ISO21434 概念阶段网络安全(六)

目录 一、概述 二、目标 三、项目定义 3.1 输入 3.1.1 先决条件 3.1.2 进一步支持信息 3.2 要求和建议 3.3 输出 四、网络安全目标 4.1 输入 4.1.1 先决条件 4.1.2 进一步支持信息 4.2 要求和建议 4.3 输出 五、网络安全概念 5.1 输入 5.1.1 先决条件 5.1.2 …