一、前言

项目上线,就是将项目弄到线上服务器上面提供在线访问。

准备工作

  1. 租赁服务器
  2. 配置服务器相关的环境

二、租赁服务器

服务器提供商有很多

腾讯云、阿里云、华为云、滴滴云、小米云、…

三、配置服务器相关环境

1. 登录进服务器

  1. 直接浏览器登录

密码在站内信中去查找

image.png

  1. 通过本地电脑的终端来登录
  1. $ ssh root@ip地址

回车之后输入密码(你看不见输入内容,只管输入,输入完成回车即可)

  1. 通过一些软件来登录

PuTTY 、xShell、…

2. Nodejs 环境

  1. 选择安装目录:cd /usr/local
  2. 下载NodeJs linux包:**wget https://npm.taobao.org/mirrors/node/v12.16.1/node-v12.16.1-linux-x64.tar.xz
    1. NodeJs淘宝镜像地址:链接
    2. 更换版本的话,后续步骤中请都注意文件名修改问题
  3. 解压:xz -d node-v12.16.1-linux-x64.tar.xz
  4. 解压:tar -xvf node-v12.16.1-linux-x64.tar
  5. 删除无用的tar文件:rm -rf **node-v12.16.1-linux-x64.tar**
  6. 修改文件名字:mv **node-v12.16.1-linux-x64 node**
  7. 配置环境变量,使 node 、npm、npx 命令在服务器中全局可用
    1. 编辑 /etc/profile 文件。使用命令 vim /etc/profile,在文件最后加入一行写入 export PATH=$PATH:/usr/local/node/bin
    2. 使配置生效:source /etc/profile
    3. 在任意目录下校验 node -v 是否可用

3. MongoDB 环境

安装

参照官网教程即可 链接

常用命令

  1. # 启动服务,一次就好
  2. $ service mongod start
  3. # 停止服务
  4. $ service mongod stop
  5. # 查看服务状态
  6. $ service mongod status
  7. # 重启服务,在修改了一些 mongodb 的配置文件之后,需要重启服务
  8. $ service mongod restart

本地电脑通过 Robo 3T 来连接服务器的 MongoDB

image.png

产生上面这个错误的问题是,服务器上的 MongoDB 有限制。只允许服务器本地去连接。

解决这个问题,需要去修改服务器上 MongoDB 的配置文件,文件是 /etc/mongod.conf
**

  1. 将 bindIp: 127.0.0.1 修改为 bindIp: 0.0.0.0

image.png

  1. 修改了配置文件,需要重启 MongoDB 服务
  1. $ service mongod restart
  1. 再通过本地 Robo 3T 试一试即可。

四、上线

将本地 Node 项目上传到服务器的某个目录下

  1. 将 Node 项目中的 node_modules 文件夹先给删除掉。(不然上传过程将非常缓慢)
  2. 下载一个远程传送文件的 ftp 工具。推荐使用 FileZilla
  3. 在服务器的根目录下创建一个 projects 文件夹
  4. 将项目上传至服务器的 /projects 目录下
  5. 进入到服务器上的项目目录下,去安装依赖项(之前node_modules是删除了的)
    1. 可以先对 npm 做一个换源操作,让安装依赖时更快一些。
  6. 启动项目,通过 node xxx.js 去启动即可
  7. 访问项目,通过服务器公网ip地址加对应的端口号就好

本地访问:http://localhost:3000
上线访问:http://xxip:3000

五、使用 PM2 来守护进程

PM2 是 node 进程管理工具,可以利用他来简化很多 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。而且使用非常简单。

目前使用 node server.js 在服务器启动服务之后,不能随意去做其他的操作。

1. 在服务器上全局安装它

  1. $ npm install pm2 -g

2. 就可以使用 pm2 start 命令去替换 node 命令

  1. $ node server.js => pm2 start server.js

3. pm2 常用命令

  1. # 启动
  2. $ pm2 start app_name
  3. # 停止
  4. $ pm2 stop app_name|app_id
  5. # 重启
  6. $ pm2 restart app_name|app_id
  7. # 删除
  8. $ pm2 delete app_name|app_id
  9. # 查看
  10. $ pm2 list
  11. # 查看日志(输出)
  12. $ pm2 logs app_name|app_id

六、问题汇总

1. 前端页面写死了io连接的地址

  1. <script>
  2. const socket = io('http://localhost:3000')
  3. </script>

上线之后,访问这个页面时发现连接socketio失败,原因是应该连接线上的那个地址。

解决方法:

  1. <script>
  2. const socket = io()
  3. </script>

2. 思考,连接数据库时使用的是 localhost:27017 或者 127.0.0.1:27017 这个在上线之后需要修改么?

  1. const mongoose = require("mongoose");
  2. const url = "mongodb://127.0.0.1:27017/express-1904-chat";

不需要修改。原因是这个是后端的js文件,指的就是服务器上的MongoDB

3. 用户集合设置了一个头像,头像的默认地址需要修改么?

  1. const userSchema = new mongoose.Schema({
  2. username: { type: String, required: true },
  3. password: { type: String, required: true },
  4. avatar: {
  5. type: String,
  6. default: "http://localhost:3000/assets/img/avatar.png"
  7. }
  8. });


需要修改成线上的Ip地址的方式

这时需要多去考虑考虑。

开发时要改成 localhost:3000 . 上线时要修改成 线上ip地址:3000

七、项目中的环境配置操作

为了更方便的去解决本地开发与上线时一些环境配置的问题。去配置一个环境文件来处理就好了

  1. 在项目根目录下创建一个 .env 文件。
  2. 在这个 .env 文件中写入一些变量
  1. key1=value1
  2. key2=value2
  3. key3=value3
  1. 项目中安装 dotenv 这个依赖
  1. $ npm install dotenv
  1. 项目入口文件中(server.js)引入 dotenv 并初始化。
  1. const express = require('express')
  2. const dotenv = require('dotenv')
  3. // dotenv 配置
  4. dotenv.config()
  1. 这时就可以使用 process.env.环境变量名 去获取环境变量值
  1. process.env.key1; // value1
  2. process.env.key2; // value2