从购买服务器到服务器部署mongodb

阿里云服务器部署mongodb

需求背景:笔者最近在准备开始着手开发毕业设计,是跟另一个腾讯校招的同学一起合作开发一个 电商运营的数据分析全栈系统。所以涉及到一个合作共享数据库的这个需求,故使用远程mongodb数据库。

这篇文章主要会从下面点开始介绍

  • 购买阿里云服务器
  • 服务器配置node、mongodb等
  • mongodb数据库权限管理控制
  • koa+typescript连接mongodb数据库

其中最后一点Koa+Typescript搭建后台开发环境这个以后会再出一个博文进行详细讲解。

一、购买阿里云服务器

这里我购买的就是学生服务器然后Centos操作系统
购买学生服务器

(一)进入控制台

进入控制台

(1)重置实例密码

这一步是为了远程连接服务器的时候进行的一个校验,点击右侧更多-密码/密钥-重置实例密码即可
重置实例密码

(2)远程连接

先说复杂的方法

  • Windows系统可以下载像PuttyXShell远程连接的工具

  • Mac玩家就可以直接通过终端 输入

    1
    2
    // 公网ip
    ssh root@ip

    现在阿里云已经很强大了!强大到可以直接通过阿里云进行远程连接,点击右侧远程连接按钮,就会进入到一个模拟的终端环境。
    输入用户名、密码点击确认,就进入到你的远程服务器环境啦!
    进入远程连接

二、服务器配置node、mongodb等

(一) 安装node

  1. 首先检测有没有node,输入下面命令。一般来说第一次连接服务器。都是没有的…
    1
    2
    node -v
    npm -v
  • 既然没有~那我们就上手安装好啦!这里你可能要懂一些linux的常见命令~不懂也没关系,临时查一查也是可以的。

输入下面命令来安装node与npm。通过yum安装即可

1
yum install -y nodejs

这里的话yum是服务器自带的一个前端软件包管理器。虽然通过它安装的node版本较低,但在服务器上够用就好啦。

这个时候再输入

1
2
3
4
5
node -v
// v6.17.1

npm -v
// 3.10.10

因为本人还比较喜欢使用yarn所以再多一步安装

1
npm install -g yarn

(二)正式开始! 部署mongodb

  • 安装mongodb
  1. 创建yum源文件
    1
    2
    // vim是linux或centos系统下常见命令,这里不做赘述。
    vim /etc/yum.repos.d/mongodb-org-3.4.repo
  2. 并且添加以下内容(按i进入编辑模式)
    1
    2
    3
    4
    5
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
    gpgcheck=0
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
  3. esc退出编辑模式。wq保存这里的yum源文件

当然:这里涉及到文件的读与写出甚至文件夹的读与写。强大的阿里云又给我们提供了可视化编辑的功能

点击上方视图-文件树就可以查看当前系统下的所有文件

  • 然后找到yum.repos.d文件夹,
  • 创建mongodb-org-3.4.repo文件
  • 添加上面同样内容
  • 保存~ 就可以起到跟上面两部一样的作用

阿里云真的是太懂小白的心~,表白一波阿里云的产品大神们!!!

  1. 安装mongodb
    1
    2
    // 这里就是读取上面配置的源文件。
    yum -y install mongodb-org
  2. 设置开机启动
    1
    systemctl enable mongod.service
  3. 配置mongodb远程访问
  • 编辑mongod.conf
    1
    vim /etc/mongod.conf
  • 更改以下内容
    1
    2
    3
    4
    5
    6
    7
    8
    # network interfaces
    net:
    port: 27017
    # bindIp: 172.0.0.0 # 这里注视掉或者改为0.0.0.0就是允许所有ip访问

    # 添加这两行代码是为了访问控制。即后面会讲到的数据库权限问题。
    security:
    authorization: enabled # 权限认证

注意:这里还是可以用强大的可视化编辑方法~新建、编辑、保存、退出!

重启mongodb

1
systemctl restart mongod.service
  1. 现在就来试一下mongodb能不能用了吧
    1
    2
    // 启动mongo shell
    mongo
    学习过mongodb的人就知道呐~出现下面这样的>就算安装成功啦

启动mongodb

三、mongodb数据库权限管理控制

其实有了上面两步,就已经实现了数据库共享这个需求。但~共享就有一个很严重的问题。就是安全!安全!安全!

上一步的配置mongod.confsecurity-authorization开启后就是开启连接权限认证!

这里就涉及到一个mongodb权限控制的问题。下面我就一一讲解吧~。
按下面顺序输入命令

1
2
3
4
mongo  // 进入 mongo shell
show dbs // 查看所有数据库
use admin // 进入admin数据库
show collections // 查看所有数据表(集合)

下面就是很关键的一步!!! 创建用户角色(即创建权限)

1
2
3
4
5
6
7
8
9
db.createUser( {
user: "admin", // 用户名
pwd: "password", // 密码
customData: "管理员角色!" // 为任意内容,例如可以为用户全名介绍
roles: [ { // 指定用户的角色,可以用一个空数组给新用户设定空角色;
role: "userAdminAnyDatabase", // 权限
db: "admin", // 权限作用于哪个数据库
} ]
})

mongodb常见的几种权限(内置角色

  1. 数据库用户角色: readreadWrite;
  2. 数据库管理角色:dbAdmindbOwneruserAdmin
  3. 集群管理角色:clusterAdminclusterManagerclusterMonitorhostManager
  4. 备份恢复角色:backuprestore
  5. 所有数据库角色:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase(只在admin数据库可用)
  6. 超级用户角色:root

一个栗子~

这回做毕业设计。所以应该有一个数据库!

  1. 创建一个数据库

    1
    2
    3
    4
    5
    // 创建GRADUATE数据库
    use GRADUATE

    show dbs
    // 这时虽然创建了但由于GRADUATE里没有数据。所以不会显示
  2. 创建集合(即一个数据表)

    1
    2
    use GRADUATE
    db.createCollection("tests");
  3. 插入数据

    1
    db.tests.insert({"name" : "测试一下"})

    上面三步~就创建了一个有数据的数据库

  4. 权限控制

    1
    2
    3
    4
    5
    6
    7
    8
    9
    db.createUser( {
    user: "graduate",
    pwd: "graduate_password",
    customData: "graduate读写角色"
    roles: [ {
    role: "readWrite",
    db: "GRADUATE",
    } ]
    })
  5. 授权

    1
    2
    use GRADUATE
    db.auth("graduate","graduate_password");

    经过5、6两步。就可以完成一次权限控制啦~

验证一下

  1. command+C 退出mongo shell
  2. 输入命令
    1
    2
    3
    4
    5
    6
    show dbs  // 这个时候很可能会报错, 因为没有权限
    // 授权!
    use admin
    db.auth("admin","password"); // 管理员角色的权限

    show dbs // 成功!

四 koa+typescript连接mongodb数据库

(一) 安全组配置。

为了让你可以访问到远程数据库~需要在控制台新增安全组配置。

  1. 打开安全组配置
    安全组配置

  2. 配置规则
    配置规则

  3. 配置详情
    配置详情

(二)下面就是关键代码

远程连接地址是下面拼接的~基本公式是

mongodb://${数据库用户名}:${数据库密码}:${数据库远程地址(公网ip:27017)}/${数据库名}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import * as mongoose from 'mongoose';

// 数据库用户名
const username = 'graduate';
// 数据库密码
const password = 'graduate_password';
// 远程mongodb地址
const dbport = 你买的服务器公网ip;
// 数据库名称
const dbcol = 'GRADUATE'
// 远程连接地址
const DB_URL = `mongodb://${username}:${password}@${dbport}/${dbcol}`;

// mongodb数据库
mongoose.connect(DB_URL, { useNewUrlParser: true, useUnifiedTopology: true });

这里先贴上代码。等笔者有时间整理一套完成的KOA + MongoDB + TypeScript的基本框架出来。

(三)Rabo 3T

推荐一个本地开发的可视化mongodb数据库连接工具

Rabo 3T

  1. 创建远程连接
    创建远程连接
  2. 视图
    远程连接视图

五、更多

-------------本文结束感谢您的阅读-------------