乐趣区

关于程序员:阿里云服务器上部署node和mongodb教程

阿里云服务器上部署 node 和 mongodb 教程


前言:从阿里云购买域名、ECS 云服务器到实名认证、域名解析、网站备案再到部署 node 和 mongodb 数据到阿里云服务器,查了很多相干的材料,踩过有数的坑,终于实现了。作为一个没怎么接触过后端以及运维常识的前端 er 来说,真心不容易啊,所以特意写一篇博客记录一下本人踩过的坑,防止本人当前再踩同样的坑,同时,也能让一些想在阿里云服务器上部署本人的博客或者网站的老手少走弯路、少踩坑。

第一步,在阿里云购买域名和云服务器 ECS

域名购买,点链接
购买阿里云服务器 ECS,点链接
新注册的阿里云的用户或者淘宝账号实名认证的学生,首次购买有优惠,笔者购买的 ECS 配置:
CPU:1 核
内存:1 GB
操作系统:CentOS 7.4 64 位
留神:购买时会设置云服务登录明码,创立实例会有近程连贯明码,两个不是同一个明码
留神:不同操作系统的包装置治理命令不一样,比方:CentOS|Redhat linux 应用的是 yum、Ubuntu 应用的是 apt-get、Mac OS 是 brew

购买完服务器当前能够进入控制台

在控制台点击 云服务器 ECS,再点击 云服务器,能够进入云服务器实例列表界面,如图:

进入实例列表页面,点击 治理 可进入实例列表详情页面
在实例详情页面,能够操作治理实例,常常操作的次要有:进行、重启云服务器;配置实例平安组

点击 平安组 , 可进入平安组列表页面,进入该页面,点击 配置规定 ,进行配置平安组
留神:必须给云服务器 ECS 实例配置平安组,否则,部署的网站不能失常拜访,比方:http 协定默认端口号拜访网站的必须配置 80 端口号平安组,https 和 mongodb 也一样

点击 近程连贯 命令行输出界面(需输出近程连贯明码)
输出 6 位数字近程连贯明码,进入 linux 命令行操作界面
输出用户名:root
明码:云服务器登录明码
登录云服务器
输出 linux 命令行 cd / 进入云服务器根目录,如图:

  • Mac 电脑:

可关上终端命令窗口进行操作

ssh root@公网 IP 地址
// 输出云服务器登录明码

如图:

不喜爱命令行操作的同学能够下载图形化操作软件————FileZilla,来进行文件操作,如图:

  • Windows 电脑:

图形化操作软件 xshell 或者 winscp 软件

命令行操作界面软件 putty

留神:应用 ssh root@公网 IP 地址 登录明码 进入的默认目录是 root 目录,该目录下是没有货色的,必须应用 cd / 回到根目录,而后输出 cd ls 查看根目录下所有的文件

第二步,在阿里云服务器上安装 node 和 mongodb

依据第一步的操作,咱们相熟了

  • 阿里云服务器控制台相干的基本操作
  • 应用ssh root@0.0.0.0(0.0.0.0 替换成本人云服务器 ecs 实例的公网 IP 地址) 加登录明码 登录到云服务器
  • 给实例增加平安组

装置 node 和 mongodb

node – 编译后二进制文件在 /usr/local/bin/node
mongodb – 装置在 usr/local/mongodb

装置 node

1、先降级 CentOS,在命令窗口输出

yum -y update

2、降级实现当前,进入到 /usr/local/src 文件夹下,该文件夹通常用来寄存软件源代码

cd /usr/local/src

3、下载 node 代码压缩包并解压,通过命令行下载 node 源码压缩包可能比较慢,能够下载到本地电脑当前再通过 FileZillas 上传到云服务器站点指导目录,再进行解压
source code 下载地址

应用命令行下载

wget https://nodejs.org/dist/v10.13.0/node-v10.13.0.tar.gz

4、解压 node 源码压缩包

tar -xzvf node-v10.13.0.tar.gz

5、进入解压后的文件夹

cd node-v10.13.0

6、执行配置脚本进行编译预处理

./configure

这个步骤可能会呈现 WARNING: failed to autodetect C++ compiler version (CXX=g++) 之类的谬误,能够参考文章

7、编译源代码

make

这个步骤可能会很久,能够先来一杯 coffee 再说

8、装置

当编译实现后,须要使之在零碎范畴内可用, 编译后的二进制文件将被搁置到零碎门路,默认状况下,Node 二进制文件应该放在 /user/local/bin/node 文件夹下

make install

9、测试 node 装置是否胜利

node -v

显示版本号阐明装置胜利啦

10、编写一个 app.js 入口文件,测试一哈

把 nodeapp 代码放到 /home 文件夹下

cd /home // 进入 home 目录
touch app.js // 创立 app.js 文件
vim app.js // 编辑 app.js 文件
// app.js
const http = require('http');
const hostname = '0.0.0.0'; // 改成 阿里云实例公网 IP 地址
const port = 3000; // 留神:没有指定端口号 默认是 80 端口 改成 80 监听默认 80 端口
const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World\n');
});
server.listen(port, hostname, () => {console.log(`Server running at http://${hostname}:${port}/`);
});

11、启动 nodeapp

node app.js

如果只是应用 node app.js 的形式启动 nodeapp 利用 在本地并没有什么问题 咱们不敞开过程窗口就能够了 然而在云服务不太事实
所以咱们须要在云服务上全局装置 pm2,应用 pm2 就能够保障咱们的 nodeapp 始终处于启动状态,除非你手动敞开

12、应用 node 自带的包装置管理器 npm,装置 express 和 pm2,这两个模块举荐全局装置
express – node web 利用框架(可自行依据须要装置),具体用法
pm2 – 是一个带有负载平衡性能的 Node 利用的过程管理器. 当你要把你的独立代码利用全副的服务器上的所有 CPU, 并保障过程永远都活着,具体用法
装置了 pm2 后,咱们一起来试试吧

pm2 start app.js --name '名称' // 启动命令 start 重启 restart 进行 stop 

留神:1、端口号必须增加平安组 2、node 启动的文件入口(如 app.js)批改须要重启我的项目才会失效

13、在云服务器装置 git

在云服务器上安装 git 当前,咱们就能够间接应用 git 命令操作来克隆或拉取 git 仓库中的我的项目了,每次我的项目更新间接应用 git pull 拉取就好了,简略不便又快捷

应用 CentOS 零碎安装包命令 yum

yum install git

检测 git 装置是否胜利

git --version

显示 git version x.x.x.x 示意装置胜利

在装置完 git 当前,咱们就能够和平时在本地一样用 git 命令来操作 git 仓库中的我的项目啦

cd /home // 进入 home 目录
git clone https://github.com/liaolongdong/react-next-project.git // 把 react-next-project 我的项目克隆到 home 目录下

14、域名解析

域名解析是把域名指向网站空间 IP,让人们通过注册的域名能够不便地拜访到网站的一种服务。简略来说,就是把域名指向服务器 IP 地址。

点击控制台 域名 菜单,进入 域名服务 -> 域名列表,如图:

而后点击 域名 解析 按钮,进入域名解析设置页面,点击 老手疏导,就能够把域名指向指定的云服务器的 IP 地址了,如图:

最初,通过域名拜访就能够拜访到你指定的服务器了,如图:

留神:设置的域名解析有可能不能立刻失效,依据 TTL 设置的工夫

在装置完 node 和 git 后,接下来装置 mongodb

软件装置地位:/usr/local/mongodb
数据寄存地位:/usr/local/mongodb/data/db
日志寄存地位:/usr/local/mongodb/data/logs

数据和日志文件地位也能够放在 /var/mongodb/data/var/mongodb/logs, 只有--dbpath 指定正确即可

留神:/data/db 是 MongoDB 默认的启动的数据库门路 (–dbpath)
如果你的数据库目录不是 /data/db,能够通过 –dbpath 来指定

1、进入装置 mongodb 的目录,下载 mongodb 源代码压缩包,和后面 node 一样也能够把压缩包下载到本地,再通过图形化工具 FileZilla 软件上传到云服务器指导目录

cd /usr/local
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.4.tgz

2、解压安装包,并重命名文件夹为 mongodb

tar zxvf mongodb-linux-x86_64-4.0.4.tgz
mv mongodb-linux-x86_64-4.0.4 mongodb

3、创立数据和日志寄存目录

mkdir /usr/local/mongodb/data/db
mkdir /usr/local/mongodb/data/logs

4、创立 mongodb.conf 配置文件, 放在 usr/local/mongodb 目录下

cd /usr/local/mongodb
touch mongodb.conf
vim mongodb.conf

mongodb.conf 文件配置内容

# 端口号(默认的端口号是 27017,这里批改也是为了安全性)
port=27017

#数据目录(指向方才创立的数据文件目录)dbpath=/usr/local/mongodb/data/db

#日志目录(指向方才创立的日志目录,并指定 mongodb.log 文件名,零碎会主动创立)logpath=/usr/local/mongodb/data/logs/mongodb.log
 
#设置后盾运行
fork=true
 
#日志输入形式(写日志的模式:设置为 true 为追加。默认是笼罩。如果未指定此设置,启动时 MongoDB 的将笼罩现有的日志文件。)logappend=true
 
#开启认证(默认是 flase, 不须要认证的,这里开启认证是为了安全性)auth=true

#对外开放端口(默认是 127.0.0.1)bind_ip=0.0.0.0

linux 下装置 mongodb 详情可查看

5、启动和终止 mongodb

启动 mongodb
进入 /usr/local/mongodb/bin 目录

cd /usr/local/mongodb/bin
./mongod --config ../mongodb.conf

启动胜利会看到

about to fork child process, waiting until server is ready for connections.
forked process: 18999
child process started successfully, parent exiting

咱们能够通过应用 ps aux |grep mongodb 命令查看 mongodb 过程是否开启

root      2216  0.4  7.1 389076 72692 ?        Rl   10 月 24  98:36 ./mongod --config ../mongodb.conf
root     19711  0.0  0.0 112720   980 pts/0    R+   14:47   0:00 grep --color=auto mongodb

第一个就是刚刚启动的过程,过程 ID 是 2216,如果你想要终止过程,能够应用 kill -9 2216 来完结过程

如果咱们在本地的 windows 环境装置了 mongodb,通常咱们测试是否开启 mongodb 的方法是间接在浏览器输出 http://127.0.0.1:27017 去查看,如果是检测云服务器是否开启 mongodb,咱们能够在浏览器地址栏输出 http:{云服务器公网 IP 地址}:{mongodb 设置的端口号},比方:http://47.107.60.51:27017/ 进行查看,如果启动胜利会看到如下信息:

It looks like you are trying to access MongoDB over HTTP on the native driver port.

在 linux 零碎上还能够应用命令去查看是否开启:

netstat -anpt|grep 27017    27017 是 mongodb 的端口号

能够看到第一条数据

tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      2216/./mongod 

笔者在浏览器输出地址栏查看云服务器是否开启 mongodb 时,遇到回绝拜访的问题,起因是因为没有在云服务器 ECS 设置该端口号(27017)的平安组,就是第一步特意强调的给实例配置对应端口号平安组规定

进入终端操作数据库

cd /usr/local/mongodb/bin
./mongo

留神:这里如果不是 mongodb 默认端口号 27017,则必须指定端口号,比方:./mongo --port=27018
执行完下面步骤后会看到

MongoDB shell version: 3.2.9
connecting to: test
>

MongoDB Shell 是 MongoDB 自带的交互式 Javascript shell, 用来对 MongoDB 进行操作和治理的交互式环境。
当你进入 mongoDB 后盾后,它默认会链接到 test 文档(数据库)
接下来就能够操作数据库啦

> show dbs

在 mongodb 数据库操作终端输出 show dbs 时,呈现如下谬误:

MongoDB shell version: 3.2.9
connecting to: test
> show dbs // 显示数据库
admin   0.000GB
config  0.000GB
local   0.000GB
> 

mongodb 默认是没有开启平安认证的,对于部署在云上就显得及其不平安,上面咱们为 mongodb 的 admin 数据库创立用户。
mongodb 数据库有以下特点:
1,没有默认管理员账号,所以要先增加管理员账号,在开启权限认证。
2,切换到 admin 数据库,增加的账号才是管理员账号。
3,用户只能在用户所在数据库登录,包含管理员账号。
4,管理员能够治理所有数据库,然而不能间接治理其余数据库,要先在 admin 数据库认证后才能够。

晓得以上几点当前,咱们把数据库切换到admin

> db // 查看以后处在数据库
test
> use admin // 切换到 admin 数据库
switched to db admin
> db.createUser({user:"appAdmin",pwd:"password",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) // 创立用户
Successfully added user: {
    "user" : "appAdmin",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}
> db.auth('appAdmin', 'password') // 应用 db.auth()验证 User 是否有权限拜访以后数据库
1 // 示意有权限
> db.createCollection('user') // 创立文档(表){"ok" : 1}
> show collections // 显示以后数据库下的文档(表)user
> db.user.insert({name: 'better', age: 18}) // 往 user 文档中增加一条数据
WriteResult({"nInserted" : 1})

留神:如果呈现相似的谬误 "errmsg" : "not authorized on admin to execute ,则阐明没有权限
解决方案:给用户授予相应的操作权限

> db.grantRolesToUser('appAdmin', [{role: 'dbOwner', db:'admin'}])

mongodb 数据库角色权限,能够参考这篇文章

能够应用 mongodb 图形化软件(Robo 3T),下载链接

mongodb 数据库 连贯 \ 增 \ 删 \ 改 \ 查 操作就不再做具体介绍了,内容太多了,更多内容详见 mongodb

参考文章:

部署 Node.js 我的项目(CentOS)
Nodejs 部署到阿里云全过程
手把手教你在阿里云 CentOS7 上部署基于 MongoDB+Node.js 的博客
如何将网站部署到阿里云服务器
linux 下装置 mongodb 详情可查看
在 Linux 服务器中配置 mongodb 环境
阿里云 centos 下部署 mongodb
Mongoose 根底入门
SSH 放弃连贯(解决 Broken pipe)

本文由 mdnice 多平台公布

退出移动版