前后端分离部署,后端部署后端服务器的代码,前端将打包好的资源,部署到前端的服务器上面,用户在做请求的时候,从前端服务器请求静态资源,然后从后端服务器获取数据。
目前前端部署静态资源时,大多采用 Node.js 或者 Nginx 来做静态资源部署,我们这里选择 Nginx
1. 阿里云购买服务器
1.1 注册账号
1.2 选择“云服务器 ECS”,点击查看详情
1.3 快速购买
1.4 进入到 Linux 系统后,使用命令来进行操作
ls:查看当前目录下的文件有哪些
exit:退出系统
clear:清屏
touch:创建文件,例如 touch 文件名
mkdir:创建目录,例如 mkdir 目录名称
mv:移动目录或者文件,例如 mv 要移动的文件或者目录 要移动到哪儿
rm -rf 要删除的目录或者文件名:删除目录或者文件
本地连接云服务器:ssh -p 22 <root@xxx.xxx.xxx.xxx>
2. 安装 Node.js
2.1 安装分布式版本管理系统Git
sudo yum install git -y
2.2 使用Git将NVM的源码克隆到本地的~/.nvm目录下,并检查最新版本
git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
2.3 依次运行以下命令,配置NVM的环境变量
sudo sh -c 'echo ". ~/.nvm/nvm.sh" >> /etc/profile'
source /etc/profile
2.4 运行以下命令,修改npm镜像源为阿里云镜像,以加快Node.js下载速度
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
2.5 运行以下命令,查看Node.js版本
nvm list-remote
2.6 安装多个Node.js版本
nvm install 版本号
2.7 查看已安装的Node.js版本
nvm ls
2.8 切换Node.js的版本
nvm use 版本号
3. 安装 Mangodb 社区版
3.1 添加 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 保存
首先需要明确的一点:
Alibaba Cloud Linux 2 对应的是 CentOS7
Alibaba Cloud Linux 3 对应的是 CentOS8
//按照官方文档添加了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
3.2 执行安装命令
yum install -y mongodb-org
3.3 使用systemctl命令启动MongoDB服务
systemctl start mongod #启动
systemctl status mongod #查看状态
systemctl restart mongod #重新启动
3.4 MongoDB服务 已启动
4. 远程链接
4.1 开启阿里云安全组对应端口 点击【配置规则】添加 27017 端口,否则本地电脑无法远程链接数据库
4.2 阿里云服务器链接云端数据库
mongo
4.3 创建用户 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 数据库上面添加了一个用户,并且设置了账号和密码
4.4 修改 mongodb 的配置文件
vi /etc/mongod.conf
主要就是将 bingIp 修改为 0.0.0.0 ,这样我们本地的电脑才能访问到
//重新启动一下 mongodb,重启命令
systemctl restart mongod
4.5 本地 Navicat 就可以链接云端数据库
5. 上传服务器代码以及数据库数据
5.1 将本地MongoDB 数据库指定数据备份并压缩
mongodump -h localhost:27017 -d mysite -o /Users/simple/Desktop
// 参数说明
-h MongoDB所在服务器地址,例:127.0.0.1,也可指定端口号:127.0.0.1:27017
-d 需要备份的数据库实例 例:mysite
-o 备份数据存放位置 例如:/Users/simple/Desktop 我的桌面
备份指定数据库文件后,进行zip 压缩
5.2 将后端服务代码去除node_modules 后进行zip 压缩
5.3 mac 系统 使用自带的 shell 工具 将压缩包传输给云端指定目录
// 使用命令:put 要上传的文件的地址 远程服务器的具体地址
// 将服务器代码 上传至 云端服务器/usr/local目录下
put /Users/simple/Desktop/mysite-server.zip /usr/local
// 同理,将备份数据zip压缩包也上传至云端服务器
// 将服务器代码 上传至 云端服务器/usr/local目录下
put /Users/simple/Desktop/mysite.zip /usr/local
5.4 远程进入云端服务器至压缩包文件目录进行解压
unzip 指定压缩包文件
cd /usr/local
unzip mysite.zip
5.5 将上传的备份数据恢复至云端 monggoDB 数据库中
mongorestore -h localhost:27017 -d mysite --dir /usr/local/mysite
// 参数说明
-h MongoDB 所在服务器
-d 需要恢复的数据实例 即:mysite
--dir 云端备份数据所在位置
恢复成功后,即本地链接的远程服务器即可看到该数据库
5.6 服务器代码解压并安装依赖,启动云端后台服务器
cd /usr/local //进入上传的后天服务压缩包所在位置
unzip mysite-server.zip //解压后台服务代码
cd mysite-server //进入文件目录
npm install //安装程序依赖
npm start //启动后台服务
6. 云端安装 Nginx 静态资源服务器
6.1 下载依赖
yum -y install pcre*
yum -y install openssl*
6.2 下载 wget(类似迅雷)
yum install wget
6.3 下载 Nginx
wget http://nginx.org/download/nginx-1.21.1.tar.gz
6.4 解压
tar zxvf nginx-1.21.1.tar.gz
6.5 进入到解压后的目录,编译
./configure
6.6 安装 Nginx
make install
6.6 安装完毕后,会在同级目录生成一个 nginx 的目录,这个即是我们的服务器目录
// nginx 常用命令
cd /nginx/sbin 可执行如下命令
nginx:启动
nginx -v:查看版本
nginx -s stop:停止
nginx -s reload:重启
6.7 通过./nginx启动后,即可通过公网IP 进行访问
7. 上传静态资源
7.1 打包项目静态资源文件
npm run build #将开发环境文件进行打包生成 dist 文件目录
7.2 将zip压缩后的 dist 文件上传至云端 nginx 服务器目录
// mac系统 通过自带的 shell 将文件上传至云端服务器
put /xx/xx/xx/xx /usr/local/nginx/html
// 远程进入云端服务器目录
cd /usr/local/nginx/html
// 进行解压
unzip xxx.zip
// 解压后进入目录 将文件全部移动至 html 目录下
mv static index.html /usr/local/nginx/html
// 前端后台项目 可以新建 admin 文件夹 将项目放置在该目录下面
mkdir admin
7.3 修改 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; }
8. 开启进程守护
//即使我们退出了远程连接,也能够继续保持进程
nohup 命令
//使用示例
nohup npm start &
//挂起进程之后,使用 exit 命令来退出远程连接
9. 域名映射
- 购买完成后,点击【管理我的域名】
- 进去之后,找到要映射的域名,点击【解析】
- 进去之后,点击【添加记录】
- 记录类型选择【A】,主机记录填写【www】,记录值填写【IP 地址】
10. 数据库加密
10.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
- 远程数据库连接时,需要输入账号以及密码
10.2 服务器端代码里面,使用 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 连接数据库