当我们的项目开发完毕后,我们需要将项目打包、部署到服务器上,供用户来使用。
目前,常见的部署方式有两种:
这是最古老的部署方式,也是最常见的一种部署方式。
我们前端只需要将我们的项目打包好,交给后端开发人员即可。后端开发人员会把我们打包好的项目放到后端的静态资源目录里面。

随着前后端分离开发模式的流行,现在可以采用前后端分离部署的形式。后端部署后端服务器的代码,前端将打包好的资源,部署到前端的服务器上面,用户在做请求的时候,从前端服务器请求静态资源,然后从后端服务器获取数据。

目前前端部署静态资源时,大多采用 Node.js 或者 Nginx 来做静态资源部署,我们这里选择 Nginx。
首先,我们需要一台服务器,现在流行的云服务器极大的节约了我们部署成本,我们能够很轻松的快速拥有一台服务器。
(1)注册账号
(2)选择“云服务器 ECS”,点击查看详情

(3)立即购买

(4)选择“一键购买”

镜像选择 CentOS。
进入到 Linux 系统后,使用命令来进行操作,先介绍几个命令:
ls:查看当前目录下的文件有哪些
exit:退出系统
clear:清屏
touch:创建文件,例如 touch 文件名
mkdir:创建目录,例如 mkdir 目录名称
mv:移动目录或者文件,例如 mv 要移动的文件或者目录 要移动到哪儿
rm -rf 要删除的目录或者文件名:删除目录或者文件
本地连接云服务器:ssh -p 22 root@xxx.xxx.xxx.xxx
具体的操作流程见视频。
安装 Node.js:https://help.aliyun.com/document_detail/50775.html
安装依赖库:
yum -y install pcre*
yum -y install openssl*
安装 MongoDB:
下载:curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.2.1.tgz
解压:tar zxvf mongodb-linux-x86_64-4.2.1.tgz
移动:mv mongodb-linux-x86_64-4.2.1/ /usr/local/mongodb
创建数据文件夹、日志文件和mongo配置文件:
mkdir -p /usr/local/mongodb/data/db
touch /usr/local/mongodb/mongod.log
touch /usr/local/mongodb/mongodb.conf
在配置文件中加入如下代码:
dbpath=/usr/local/mongodb/data/db
logpath=/usr/local/mongodb/log/mongod.log
logappend = true
port = 27017
fork = true
auth = true
切换到 mongodb 的 bin 下:

启动:./mongod --dbpath /usr/local/mongodb/data/db
mongod -dbpath=/usr/local/mongodb/data/db --bind_ip 0.0.0.0
指定所有的 ip 都可以连接上,当然现在只是暂时的,后面项目部署上去后,肯定是要关闭的。
可能遇到的错误以及解决方案:
Segmentation fault (core dumped):
https://blog.csdn.net/weixin_44320761/article/details/107671990
error while loading shared libraries: libssl.so.10,既libssl.so.10缺失库文件的解决办法:
https://blog.csdn.net/xcyja/article/details/115357818
导出数据库的数据,详细参见文档。
如果是 widnows 系统,参阅:https://www.runoob.com/mongodb/mongodb-mongodump-mongorestore.html
接下来,我们需要将打包好的数据库数据压缩包以及服务器代码压缩包(删除 node_modules)上传到云服务器。
windows 系统:可以使用 finalshell(使用方法很简单,安装,连接服务器,将要上传的文件拖动到对应窗口即可)
mac 系统:可以使用自带的 shell 工具。
打开 shell 工具,选择【新建远程连接】

选择【安全文件传输(sftp)】,下面要填写用户名和对应的服务器的 ip 地址

点击【连接】,如下:

使用命令:put 要上传的文件的地址 远程服务器的具体地址
例如:put /Users/Jie/Desktop/dbData.zip /usr/local
解压 zip 压缩包命令:unzip 压缩包名
例如:unzip dbData.zip
启动服务器:进入到服务器目录,安装依赖包,npm start 启动即可
(1)下载依赖
yum -y install pcre*
yum -y install openssl*
(2)下载 wget(类似于迅雷,用来下载文件的)
yum install wget
(3)下载 nginx
wget http://nginx.org/download/nginx-1.21.1.tar.gz
(4)解压
tar zxvf nginx-1.21.1.tar.gz
(5)进入到解压后的目录,编译
./configure
(6)安装
make install
安装完毕后,会在同级目录生成一个 nginx 的目录,这个才是我们的服务器目录
nginx 常用命令:
nginx:启动
nginx -v:查看版本
nginx -s stop:停止
nginx -s reload:重启
打包前台代码:
npm run build
打包后台代码:
npm run build:prod
将打包好的前台代码放入 nginx 的 html 目录下,将打包好的后台代码放入到 nginx/html/admin 目录下
修改 nginx 的配置文件,该文件位于 conf 目录下的 nginx.conf,添加代理设置:
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://127.0.0.1:7001;
}
location /res {
proxy_pass http://127.0.0.1:7001;
}
location /static {
proxy_pass http://127.0.0.1:7001;
}
在 Linux 中,可以输入:
nohup command &
来把进程挂起,这样即使我们退出了远程连接,也能够继续保持进程。
使用示例:
nohup npm start &
挂起进程之后,使用 exit 命令来退出远程连接。
目前为止,我们的项目就已经部署成功了,但是用 IP 访问不是太友好,所以我们来进行域名的映射。
首先,我们需要购买一个域名。

购买完成后,点击【管理我的域名】

进去之后,找到要映射的域名,点击【解析】

进去之后,点击【添加记录】

填写的内容如下:
记录类型选择【A】,主机记录填写【www】,记录值填写【IP 地址】

为了权限接入可用,必须确保有一个用户是 userAdmin 或者 userAdminAnyDatabase 的角色在 admin 数据库里。
因此,我们首先创建用户 root 用户在 admin 数据库里,代码如下:
use admin # 切换 admin 数据库
db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db: "admin"}]})
具体操作如下图:

注:db 可以查看当前所使用的数据库

接下来在其他数据库上面创建用户,但是一定要注意先在 admin 数据库上面使用刚才的超级管理员登录,再进行其他数据库用户创建的创建。
对应代码如下:
use amdin
db.auth("root","123456")
在 mongodb 中 admin 数据库是一个特别的数据库,这个数据库的用户,可以访问 mongodb 中的所有数据库。
如果要为其他数据库设置用户,步骤也是一样的,首先切换到其他数据库,然后创建用户
use 数据库名
db.createUser({user:"用户名",pwd:"密码",roles:[{role:"read",db: "数据库名"},{role:"readWrite",db:"数据库名"}]})

最后执行
db.auth("用户名","密码")

返回 1,说明登录成功。
至此,我们就在数据库上面添加了一个用户,并且设置了账号和密码。
修改 mongodb 的配置文件:
systemLog:
destination: file #日志输出方式。file/syslog,如果是file,需指定path,默认是输出到标准输出流中
path: /usr/local/mongodb/mongod.log #日志路径
logAppend: true #启动时,日志追加在已有日志文件内还是备份旧日志后,创建新文件记录日志, 默认false
net:
port: 27017 #监听端口,默认27017
bindIp: 0.0.0.0 #绑定监听的ip,设置为127.0.0.1时,只会监听本机
maxIncomingConnections: 65536 #最大连接数,可接受的连接数还受限于操作系统配置的最大连接数
wireObjectCheck: true #校验客户端的请求,防止错误的或无效BSON插入,多层文档嵌套的对象会有轻微性能影响,默认true
processManagement:
fork: true # 后台运行
security:
authorization: enabled # enabled/disabled #开启客户端认证
storage:
dbPath: /usr/local/mongodb/data/db # 数据库地址
journal:
enabled: true #启动journal,64位系统默认开启,32位默认关闭
然后在启动 mongodb 的时候,指定读取配置文件:
./mongod --config /usr/local/mongodb/mongodb.conf
查看进程的 PID:
lsof -i:端口号
例如:lsof -i:27017
停止进程
kill -9 PID
例如:kill -9 24311
远程数据库连接时,需要输入账号以及密码。
接下来就是在你的服务器端代码里面,使用 mongoose 的时候,连接的是有权限的数据库,所以需要修改连接字符串:
连接字符串修改为:mongodb://username:password@ip:port/database?authSource=admin
例如:mongodb://testadmin:testadmin123@88.888.88.888:27017/testmongodb?authSource=admin
# 参数说明
# testadmin 用户名称
# testadmin123 用户密码
# 88.888.88.888 服务器地址
# 27017 端口号码
# testmongodb 连接的数据库
# ?authSource=admin 权限来源
# 至此,可以通过 mongoose 连接数据库
首先电脑上没安装 mongodb ,需要去官网下载一下 mongodb

然后根据你自己的操作系统下载对应的版本

注意,新的 mongodb 不会包含以前的一大堆命令,所以我们要恢复数据库,还需要下载命令
仍然是根据你自己的操作系统下载对应的工具包

最后根据 mongodb 文档中的恢复数据库的命令,进行恢复即可。

CentOS官方已计划停止维护CentOS Linux项目,阿里云上CentOS Linux公共镜像来源于CentOS官方,当CentOS Linux停止维护后,阿里云将会同时停止对该操作系统的支持。
这里选择了它家自研的 Alibaba Cloud Linux 2.1903 LTS 64,因为做了很多优化,而且全面兼容RHEL/CentOS生态,并且这也是官方所提供的一个替代方案

修改了操作系统镜像后,安装 Node.js 没有一点问题。
参阅:https://help.aliyun.com/document_detail/172788.html 的部署Node.js环境(Alibaba Cloud Linux 2)
安装 Node.js 的途中,遇到了:
fatal: unable to access ‘https://github.com/cnpm/nvm.git/’: Encountered end of file
原因:阿里云服务器未开启443端口
执行以下的代码:
需要开启防火墙 systemctl start firewalld
firewall-cmd --zone=public --add-port=443/tcp --permanent # 添加 443 端口访问
firewall-cmd --reload # 重新加载让配置生效
firewall-cmd --zone=public --query-port=443/tcp 查看开启情况,返回 yes 说明已开启。
对应的解决方案可以参阅:https://www.cnblogs.com/pangya/p/15735974.html
由于我们更换了操作系统,所以安装 Mongodb 的方式也和之前有所不同。
首先需要明确的一点:
Alibaba Cloud Linux 2 对应的是 CentOS7
Alibaba Cloud Linux 3 对应的是 CentOS8
我这里使用的是yum命令安装,需要先添加yum源:
vi /etc/yum.repos.d/mongodb-org-5.0.repo
然后将如下内容添加进去:
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
在 vi 中,按键盘的 i 键是插入内容,插入完毕后按 ESC 退出,然后输入 :wq 保存
按照官方文档添加了yum源文件,但是当执行yum install -y mongodb-org命令的时候报错了:
Error: Failed to download metadata for repo 'mongodb-org-5.0': Cannot download repomd.xml: Status code: 404 for https://repo.mongodb.org/yum/redhat/3/mongodb-org/5.0/x86_64/repodata/repomd.xml
解决办法就是将$releasever变量直接修改为Centos的版本 7,如下:
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
操作截图如下:

修改完后再次执行如下命令:
yum install -y mongodb-org
MongoDB就能安装成功了。
安装完成后,使用systemctl命令启动MongoDB服务:
systemctl start mongod #启动
systemctl status mongod #查看状态
systemctl restart mongod #重新启动
具体操作如下图:

通过查看状态命令,很多信息都能看到。
接下来我们来远程连接,记得先把阿里云的安全组的对应端口打开,如下图:

点击【配置规则】

添加 27017 端口,不把这个端口打开,后期本地电脑无法远程连接数据库

首先在云端系统输入 mongo,连接上云端的数据库

步骤和上一个文档一样
为了权限接入可用,必须确保有一个用户是 userAdmin 或者 userAdminAnyDatabase 的角色在 admin 数据库里。
因此,我们首先创建用户 root 用户在 admin 数据库里,代码如下:
use admin # 切换 admin 数据库
db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db: "admin"}]})
具体操作如下图:

在 mongodb 中 admin 数据库是一个特别的数据库,这个数据库的用户,可以访问 mongodb 中的所有数据库。所以接下来在 admin 数据库上面使用刚才的超级管理员登录,对应代码如下:
use amdin
db.auth("root","123456")
具体操作如下:

之后为其他数据库设置用户,步骤也是一样的,首先切换到其他数据库,然后创建用户。
use 数据库名
db.createUser({user:"用户名",pwd:"密码",roles:[{role:"read",db: "数据库名"},{role:"readWrite",db:"数据库名"}]})
具体操作如下图所示:

最后执行
db.auth("用户名","密码")
具体操作如下图:

返回 1,说明登录成功。
至此,我们就在 mysite 数据库上面添加了一个用户,并且设置了账号和密码。
接下来我们来修改 mongodb 的配置文件
vi /etc/mongod.conf
主要就是将 bingIp 修改为 0.0.0.0 ,这样我们本地的电脑才能访问到

之后重新启动一下 mongodb,重启命令:
systemctl restart mongod
然后我们在本地的 robo3T 就能连接云端数据库了
