Mongodb 腾讯云部署

原来一直使用的团队部署的mongodb或者云服务商的,今天尝试部署学习一下。

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

本文在腾讯云上尝试部署mongodb。
环境:Linux(ubuntu 16.04)

mongodb下载地址:
https://www.mongodb.com/download-center

1 解压进入mongodb目录下

tar -vxf mongodb-linux-x86_64-ubuntu1604-3.6.5.tgz
cd mongodb-linux-x86_64-ubuntu1604-3.6.5

2建立文件夹存放数据和log

mkdir -p data/db
touch mongodb.log

3 运行mongodb

3.1 直接运行

cd bin
./mongod -dbpath=./../data/db -logpath=./../mongodb.log -logappend -port=27017 -fork
  • –dbpath:指定存储数据的文件夹
  • –logpath:指定日志存储文件(将不会输出到控制台)
  • –port指定端口,如果不写的话,默认是27017
  • –fork代表后台运行

出现这个log 说明启动成功了。

2018-05-24T09:31:40.549+0800 I NETWORK  [initandlisten] waiting for connections on port 27017

3.2 通过配置文件启动

./mongod -f mongodb.conf 

mongodb.conf:

port = 27017 
dbpath = ./../data/db 
logpath = log/mongod.log
logappend=true

4 连接

4.1 本地访问

在bin文件夹下执行

./mongo localhost:27000

即可连接到mongodb
Mongod 控制台出现这个log 说明链接成功

2018-05-24T09:35:09.415+0800 I NETWORK  [listener] connection accepted from 127.0.0.1:36834 #1 (1 connection now open)
2018-05-24T09:35:09.416+0800 I NETWORK  [conn1] received client metadata from 127.0.0.1:36834 conn1: { application: { name: "MongoDB Shell" }, driver: { name: "MongoDB Internal Client", version: "3.6.5" }, os: { type: "Linux", name: "Ubuntu", architecture: "x86_64", version: "16.04" } }

敲击回车进入到mongodb shell模式

4.2 公网访问

默认情况下mongodb 是无法通过外网链接访问。
我们可以通过在mongodb.conf 配置bind_ip 支持外网访问。当值得注意的是我们开启外网访问后,很容易受到攻击。
1 修改mongodb默认端口
2 设置 mongodb访问权限
mongodb.conf

port = 27017 
dbpath = ./../data/db
logpath = ./../mongodb.log
logappend=true
bind_ip = 云主机内网ip

在腾讯云上不能直接绑定到公网ip,我们绑定到内网ip,即可实现公网的访问。个人猜测公网ip是映射过来的,所以对于云主机而言公网ip是不可见的。

./mongo xxx.xx.xx.xxx:27017
在本地linux开发机上即可连接到云服务器上的mongodb

5 修改mongodb默认配置

5.1 修改mongodb默认端口

我们可以修改 -port= 参数 或更改conf中port 配置mongodb默认端口

5.2 绑定mongodb实例

bind_ip = 127.0.0.1 将mongodb实例绑定到本地server
bind_ip = 127.0.0.1, 172.28.31.255 将本地server绑定的内网ip

PS: 可以使用该命令查看linux 外网ip :curl icanhazip.com

5.3 开启认证

因为mongodb 默认运行环境为安全,即运行在内网环境中外网无法访问,所以安全模式是默认没有开启的。

在mongodb中,mongodb下可以有多个数据库,我们可以为每个数据库添加相应的账户。只有该账户有操作该数据库的权限。服务器端使用安全模式运行后,客户端如果不指定数据库,用户名和密码进行认证,则客户端可以连接到服务器上,但是进行其他操作时会出错。
https://docs.mongodb.com/manual/reference/method/db.createUser/#create-administrative-user-with-roles

5.3.1 添加管理员账户

这里我们为数据库添加管理员账户

use admin
db.createUser(
   {
     user: "appAdmin",
     pwd: "password",
     roles:
       [
         { role: "readWriteAnyDatabase", db: "admin" },
       ]
   }
)

这里我们就创建了一个管理员账户,现在尝试开启验证
PS:role 这里是用户身份,mongodb提供了非常丰富的用户身份,readWriteAnyDatabase我们在admin创建了一个具有所有数据库读写权限的账户,具体可参阅第8.1节

5.3.2重启server

在命令启动添加–auth 参数 或在配置中添加auth=true
重新启动服务器。

5.3.3 普通方式连接

./mongo xxx.xx.xx.xxx:27017 

连接接mongodb
测试权限是否启动:

 use test
switched to db test
>  show collections 
2018-05-29T10:11:38.833+0800 E QUERY    [thread1] Error: listCollections failed: {
    "ok" : 0,
    "errmsg" : "not authorized on test to execute command { listCollections: 1.0, filter: {}, $db: \"test\" }",
    "code" : 13,
    "codeName" : "Unauthorized"
} :

报错说明安全模式已经启用了

5.3.4 以账户密码方式连接

用户只能在用户所在数据库登录,包括管理员账号。

./mongo  xxx.xx.xx.xxx:27017 
use admin
db.auth("admin","helloworld")//管理账户必须要在admin中才能验证
>1 出现1说明验证成功
use test
show collections 

没有报错说明验证通过

6 测试

use admin
db.auth("admin","helloworld")
use test2 //创建一个数据库
db.test2.insert({"hello":"world"})//插入一条数据
db.createUser(
   {
     user: "test2user",
     pwd: "password",
     roles:
       [
         { role: "readWrite", db: "test2" },
       ]
   }
)
//创建新数据库普通账户(如果没有创建用户管理员权限,需要将auth关掉创建)
use test2
db.auth("test2user", "password")
show collections

7 运行

Mongodb 可在linux 配置后台运行。
此测试采用supervisor 软件后台运行
配置:

[program:mongodb]
directory=/home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5
command= /home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/bin/mongod  -f /home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/bin/mongodb.conf
autostart=true
startsecs=3
autorestart=true
startretries=3
user=root
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20
stdout_logfile =/home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/logs/mongodb.log

8 参考资料

8.1 role 身份

roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root

8.2 mongodb 常用命令

1 创建数据库 use yourDB
2 查询所有数据库 show dbs
3 创建用户 createUser
4 删除用户 show collections
5 插入数据 db.test2.insert

8.3 参考链接

https://blog.csdn.net/langzi7758521/article/details/70936024
https://www.jianshu.com/p/fc9cda52f49d
https://blog.csdn.net/huwei2003/article/details/40507611
https://www.cnblogs.com/wpjzh/p/5999363.html

./mongo 118.24.21.130:27017 连接到云服务器上mongodb
use admin 切换到admin数据库

mongo 192.168.1.200:27017/database -u user -p password
mongo 118.24.21.130:27017
/database -u user -p password
mongodb://118.24.21.130[:27017]

./mongod -f mongodb.conf

/home/ubuntu/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/bin/mongod -f /home/ubuntu/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/bin/mongodb.conf

mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
mongodb:// 这是固定的格式,必须要指定。
username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
portX 可选的指定端口,如果不填,默认为27017
/database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。
?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

mongodb://118.24.21.130[:27017]

https://blog.csdn.net/langzi7758521/article/details/70936024
https://www.jianshu.com/p/fc9cda52f49d
https://blog.csdn.net/huwei2003/article/details/40507611

5 为mongodb 添加用户及密码
使用

猜你喜欢

转载自blog.csdn.net/m0_37263637/article/details/80495089