• 项目的部署


    项目部署

    1. 项目部署介绍

    当我们的项目开发完毕后,我们需要将项目打包、部署到服务器上,供用户来使用。

    目前,常见的部署方式有两种:

    • 后端部署
    • 前后端分离部署

    1-1 后端部署

    这是最古老的部署方式,也是最常见的一种部署方式。

    我们前端只需要将我们的项目打包好,交给后端开发人员即可。后端开发人员会把我们打包好的项目放到后端的静态资源目录里面。

    在这里插入图片描述

    1-2 前后端分离部署

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

    在这里插入图片描述

    目前前端部署静态资源时,大多采用 Node.js 或者 Nginx 来做静态资源部署,我们这里选择 Nginx。

    2. 部署具体流程

    2-1 阿里云购买服务器

    首先,我们需要一台服务器,现在流行的云服务器极大的节约了我们部署成本,我们能够很轻松的快速拥有一台服务器。

    阿里云:https://www.aliyun.com/

    (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

    具体的操作流程见视频。

    2-2 安装 Node.js

    安装 Node.js:https://help.aliyun.com/document_detail/50775.html

    2-3 安装 MongoDB

    安装依赖库:

    yum -y install pcre*
    yum -y install openssl*
    
    • 1
    • 2

    安装 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
    
    • 1
    • 2
    • 3

    在配置文件中加入如下代码:

    dbpath=/usr/local/mongodb/data/db
    logpath=/usr/local/mongodb/log/mongod.log
    logappend = true
    port = 27017
    fork = true
    auth = true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    切换到 mongodb 的 bin 下:

    在这里插入图片描述

    启动:./mongod --dbpath /usr/local/mongodb/data/db

    mongod -dbpath=/usr/local/mongodb/data/db --bind_ip 0.0.0.0
    
    • 1

    指定所有的 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

    2-4 上传服务器代码以及数据库数据

    导出数据库的数据,详细参见文档。

    如果是 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 启动即可

    2-5 安装 Nginx 静态资源服务器

    (1)下载依赖

    yum -y install pcre*
    yum -y install openssl*
    
    • 1
    • 2

    (2)下载 wget(类似于迅雷,用来下载文件的)

    yum install wget
    
    • 1

    (3)下载 nginx

    wget http://nginx.org/download/nginx-1.21.1.tar.gz
    
    • 1

    (4)解压

    tar zxvf nginx-1.21.1.tar.gz
    
    • 1

    (5)进入到解压后的目录,编译

    ./configure
    
    • 1

    (6)安装

    make install
    
    • 1

    安装完毕后,会在同级目录生成一个 nginx 的目录,这个才是我们的服务器目录

    nginx 常用命令:

    • nginx:启动

    • nginx -v:查看版本

    • nginx -s stop:停止

    • nginx -s reload:重启

    2-6 打包静态资源

    打包前台代码:

    npm run build
    
    • 1

    打包后台代码:

    npm run build:prod
    
    • 1

    将打包好的前台代码放入 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2-7 进程守护

    在 Linux 中,可以输入:

    nohup command &
    
    • 1

    来把进程挂起,这样即使我们退出了远程连接,也能够继续保持进程。

    使用示例:

    nohup npm start &
    
    • 1

    挂起进程之后,使用 exit 命令来退出远程连接。

    2-8 域名映射

    目前为止,我们的项目就已经部署成功了,但是用 IP 访问不是太友好,所以我们来进行域名的映射。

    首先,我们需要购买一个域名。

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    填写的内容如下:

    记录类型选择【A】,主机记录填写【www】,记录值填写【IP 地址】

    在这里插入图片描述

    2-9 数据库加密

    为了权限接入可用,必须确保有一个用户是 userAdmin 或者 userAdminAnyDatabase 的角色在 admin 数据库里。
    因此,我们首先创建用户 root 用户在 admin 数据库里,代码如下:

    use admin # 切换 admin 数据库
    db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db: "admin"}]})
    
    • 1
    • 2

    具体操作如下图:

    在这里插入图片描述

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

    在这里插入图片描述

    接下来在其他数据库上面创建用户,但是一定要注意先在 admin 数据库上面使用刚才的超级管理员登录,再进行其他数据库用户创建的创建。

    对应代码如下:

    use amdin
    db.auth("root","123456")
    
    • 1
    • 2

    mongodbadmin 数据库是一个特别的数据库,这个数据库的用户,可以访问 mongodb 中的所有数据库。

    如果要为其他数据库设置用户,步骤也是一样的,首先切换到其他数据库,然后创建用户

    use 数据库名
    db.createUser({user:"用户名",pwd:"密码",roles:[{role:"read",db: "数据库名"},{role:"readWrite",db:"数据库名"}]})
    
    • 1
    • 2

    在这里插入图片描述

    最后执行

     db.auth("用户名","密码")
    
    • 1

    在这里插入图片描述

    返回 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位默认关闭
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    然后在启动 mongodb 的时候,指定读取配置文件:

    ./mongod --config /usr/local/mongodb/mongodb.conf
    
    • 1

    查看进程的 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 连接数据库
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    数据库恢复数据

    首先电脑上没安装 mongodb ,需要去官网下载一下 mongodb

    官网地址:https://www.mongodb.com/

    在这里插入图片描述

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

    在这里插入图片描述

    注意,新的 mongodb 不会包含以前的一大堆命令,所以我们要恢复数据库,还需要下载命令

    仍然是根据你自己的操作系统下载对应的工具包

    在这里插入图片描述

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

    在这里插入图片描述

    CentOS Linux停止维护后如何应对?

    CentOS官方已计划停止维护CentOS Linux项目,阿里云上CentOS Linux公共镜像来源于CentOS官方,当CentOS Linux停止维护后,阿里云将会同时停止对该操作系统的支持。

    具体参阅:https://help.aliyun.com/document_detail/347584.html?spm=5176.11346930configuration.0.0.284e5ca3pjg7iY

    这里选择了它家自研的 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 说明已开启。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    对应的解决方案可以参阅:https://www.cnblogs.com/pangya/p/15735974.html

    安装 Mongodb

    由于我们更换了操作系统,所以安装 Mongodb 的方式也和之前有所不同。

    首先需要明确的一点:

    Alibaba Cloud Linux 2 对应的是 CentOS7

    Alibaba Cloud Linux 3 对应的是 CentOS8

    添加yum源

    我这里使用的是yum命令安装,需要先添加yum源:

    vi /etc/yum.repos.d/mongodb-org-5.0.repo
    
    • 1

    然后将如下内容添加进去:

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在 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
    
    • 1

    解决办法就是将$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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    操作截图如下:

    在这里插入图片描述

    修改完后再次执行如下命令:

    yum install -y mongodb-org
    
    • 1

    MongoDB就能安装成功了。

    启动 Mongodb

    安装完成后,使用systemctl命令启动MongoDB服务:

    systemctl start mongod  #启动
    systemctl status mongod #查看状态
    systemctl restart mongod #重新启动
    
    • 1
    • 2
    • 3

    具体操作如下图:

    在这里插入图片描述

    通过查看状态命令,很多信息都能看到。

    远程连接

    接下来我们来远程连接,记得先把阿里云的安全组的对应端口打开,如下图:

    在这里插入图片描述

    点击【配置规则】

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    步骤和上一个文档一样

    为了权限接入可用,必须确保有一个用户是 userAdmin 或者 userAdminAnyDatabase 的角色在 admin 数据库里。
    因此,我们首先创建用户 root 用户在 admin 数据库里,代码如下:

    use admin # 切换 admin 数据库
    db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db: "admin"}]})
    
    • 1
    • 2

    具体操作如下图:

    在这里插入图片描述

    mongodbadmin 数据库是一个特别的数据库,这个数据库的用户,可以访问 mongodb 中的所有数据库。所以接下来在 admin 数据库上面使用刚才的超级管理员登录,对应代码如下:

    use amdin
    db.auth("root","123456")
    
    • 1
    • 2

    具体操作如下:

    在这里插入图片描述

    之后为其他数据库设置用户,步骤也是一样的,首先切换到其他数据库,然后创建用户。

    use 数据库名
    db.createUser({user:"用户名",pwd:"密码",roles:[{role:"read",db: "数据库名"},{role:"readWrite",db:"数据库名"}]})
    
    • 1
    • 2

    具体操作如下图所示:

    在这里插入图片描述

    最后执行

    db.auth("用户名","密码")
    
    • 1

    具体操作如下图:

    在这里插入图片描述

    返回 1,说明登录成功。

    至此,我们就在 mysite 数据库上面添加了一个用户,并且设置了账号和密码。

    接下来我们来修改 mongodb 的配置文件

    vi /etc/mongod.conf
    
    • 1

    主要就是将 bingIp 修改为 0.0.0.0 ,这样我们本地的电脑才能访问到

    在这里插入图片描述

    之后重新启动一下 mongodb,重启命令:

    systemctl restart mongod
    
    • 1

    然后我们在本地的 robo3T 就能连接云端数据库了

    在这里插入图片描述

  • 相关阅读:
    logstash同步mysql数据到elasticsearch
    Linux 多线程
    【STL常用容器】:string 容器
    TUN设备和TAP设备
    [最短路]猛犸不上 Ban 2021RoboCom决赛D
    快速上手Linux核心命令(十一):Linux用户相关命令
    (高阶)Redis 7 第10讲 单线程 与 多线程 入门篇
    C++.I/O流
    React 组件实例的三大核心—refs
    左连接一对多的情况
  • 原文地址:https://blog.csdn.net/qq_46262422/article/details/125276311