一、前言
项目上线,就是将项目弄到线上服务器上面提供在线访问。
准备工作
- 租赁服务器
- 配置服务器相关的环境
二、租赁服务器
服务器提供商有很多
腾讯云、阿里云、华为云、滴滴云、小米云、…
三、配置服务器相关环境
1. 登录进服务器
- 直接浏览器登录
密码在站内信中去查找

- 通过本地电脑的终端来登录
$ ssh root@ip地址
回车之后输入密码(你看不见输入内容,只管输入,输入完成回车即可)
- 通过一些软件来登录
PuTTY 、xShell、…
2. Nodejs 环境
- 选择安装目录:cd /usr/local
- 下载NodeJs linux包:**wget https://npm.taobao.org/mirrors/node/v12.16.1/node-v12.16.1-linux-x64.tar.xz
- NodeJs淘宝镜像地址:链接
- 更换版本的话,后续步骤中请都注意文件名修改问题
- 解压:xz -d node-v12.16.1-linux-x64.tar.xz
- 解压:tar -xvf node-v12.16.1-linux-x64.tar
- 删除无用的tar文件:rm -rf **node-v12.16.1-linux-x64.tar**
- 修改文件名字:mv **node-v12.16.1-linux-x64 node**
- 配置环境变量,使 node 、npm、npx 命令在服务器中全局可用
- 编辑 /etc/profile 文件。使用命令 vim /etc/profile,在文件最后加入一行写入 export PATH=$PATH:/usr/local/node/bin
- 使配置生效:source /etc/profile
- 在任意目录下校验 node -v 是否可用
3. MongoDB 环境
安装
参照官网教程即可 链接
常用命令
# 启动服务,一次就好$ service mongod start# 停止服务$ service mongod stop# 查看服务状态$ service mongod status# 重启服务,在修改了一些 mongodb 的配置文件之后,需要重启服务$ service mongod restart
本地电脑通过 Robo 3T 来连接服务器的 MongoDB

产生上面这个错误的问题是,服务器上的 MongoDB 有限制。只允许服务器本地去连接。
解决这个问题,需要去修改服务器上 MongoDB 的配置文件,文件是 /etc/mongod.conf
**
- 将 bindIp: 127.0.0.1 修改为 bindIp: 0.0.0.0

- 修改了配置文件,需要重启 MongoDB 服务
$ service mongod restart
- 再通过本地 Robo 3T 试一试即可。
四、上线
将本地 Node 项目上传到服务器的某个目录下
- 将 Node 项目中的 node_modules 文件夹先给删除掉。(不然上传过程将非常缓慢)
- 下载一个远程传送文件的 ftp 工具。推荐使用 FileZilla
- 在服务器的根目录下创建一个 projects 文件夹
- 将项目上传至服务器的 /projects 目录下
- 进入到服务器上的项目目录下,去安装依赖项(之前node_modules是删除了的)
- 可以先对 npm 做一个换源操作,让安装依赖时更快一些。
- 启动项目,通过 node xxx.js 去启动即可
- 访问项目,通过服务器公网ip地址加对应的端口号就好
本地访问:http://localhost:3000
上线访问:http://xxip:3000
五、使用 PM2 来守护进程
PM2 是 node 进程管理工具,可以利用他来简化很多 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。而且使用非常简单。
目前使用 node server.js 在服务器启动服务之后,不能随意去做其他的操作。
1. 在服务器上全局安装它
$ npm install pm2 -g
2. 就可以使用 pm2 start 命令去替换 node 命令
$ node server.js => pm2 start server.js
3. pm2 常用命令
# 启动$ pm2 start app_name# 停止$ pm2 stop app_name|app_id# 重启$ pm2 restart app_name|app_id# 删除$ pm2 delete app_name|app_id# 查看$ pm2 list# 查看日志(输出)$ pm2 logs app_name|app_id
六、问题汇总
1. 前端页面写死了io连接的地址
<script>const socket = io('http://localhost:3000')</script>
上线之后,访问这个页面时发现连接socketio失败,原因是应该连接线上的那个地址。
解决方法:
<script>const socket = io()</script>
2. 思考,连接数据库时使用的是 localhost:27017 或者 127.0.0.1:27017 这个在上线之后需要修改么?
const mongoose = require("mongoose");const url = "mongodb://127.0.0.1:27017/express-1904-chat";
不需要修改。原因是这个是后端的js文件,指的就是服务器上的MongoDB
3. 用户集合设置了一个头像,头像的默认地址需要修改么?
const userSchema = new mongoose.Schema({username: { type: String, required: true },password: { type: String, required: true },avatar: {type: String,default: "http://localhost:3000/assets/img/avatar.png"}});
需要修改成线上的Ip地址的方式
这时需要多去考虑考虑。
开发时要改成 localhost:3000 . 上线时要修改成 线上ip地址:3000
七、项目中的环境配置操作
为了更方便的去解决本地开发与上线时一些环境配置的问题。去配置一个环境文件来处理就好了
- 在项目根目录下创建一个 .env 文件。
- 在这个 .env 文件中写入一些变量
key1=value1key2=value2key3=value3
- 项目中安装 dotenv 这个依赖
$ npm install dotenv
- 项目入口文件中(server.js)引入 dotenv 并初始化。
const express = require('express')const dotenv = require('dotenv')// dotenv 配置dotenv.config()
- 这时就可以使用 process.env.环境变量名 去获取环境变量值
process.env.key1; // value1process.env.key2; // value2
