Node.js零基础到项目实战 上线和部署

78 阅读4分钟

一、CORS处理跨域

  1. npm install cors
  2. CORS跨域配置
//app.js
const corsOptions = {
  origin: 'http://localhost:3000',
  credentials: true,
}
app.use(cors(corsOptions));

二、上线前的准备

# 修改项目端口
# .env 不传到git仓库,因为SECRET有值 不允许别人看到
port = 3000
SECRET=94cb853f7b3a9c3adb5a59903962d1125fe56efb860f331ca669d13c0a979bb7

# .env.example 传到git仓库
port = 3000
SECRET = 

# 添加项目说明文件
README.md

# 提交到git仓库
# 提交前根目录建立 .gitignore 文件 忽略掉一些不需要上传的文件
# 项目依赖的npm包
/node_modules
# 环境变量文件
/.env
# WebSotrm 和 VSCode编辑器配置文件
/.idea
/.vscode
# macOS 和 Windows的系统文件
.DS_Store
Thumbs.db
# Docker 运行 MySQ L的数据库文件
/data

# 初始一个git仓库
git init

# 下载github客户端
# 登录上自己账户
# Add -> 添加已有仓库 -> 选择当前的项目目录 -> 确定增加仓库
# 左下角 -> Commit to main -> Publish repository
# Name 
# Keep this code private
# 左上角 -> 找到项目 -> 右键 -> View on GitHub

三、服务器和域名

在阿里云或其它平台上购买分别购买服务器和域名

四、使用ssh连接服务器

ssh root@公网ip
root password:输入密码

Welcome to Alibaba Cloud... 表示登陆成功

# 更新系统上的软件包
sudo apt update / apt update 
# 安装更新
sudo apt upgrade - y / apt upgrade - y 

# 退出
exit

# 为了安全 使用密钥登陆
# 生成密钥对
ssh-keygen

# 打开密钥对文件
open ~/.ssh
id_rsa.pub # 公钥
id_rsa     #私钥

# 查看公钥
cat ~/.ssh/id_rsa.pub

# 将公钥传到阿里云服务器上
# 左侧面板 -> 密钥对 -> 创建密钥对 -> 导入已有密钥对 -> 确定 ->  绑定密钥对 -> 提醒重启服务器

# 再次登陆就不需要密码了
ssh root@公网ip

# 创建config文件
touch ~/.ssh/config
# 用编辑器打开,增加一下配置
Host hk
    HostName 公网ip
    User root
    
# 完成后 直接登陆服务器
ssh hk 

五、使用宝塔面板(简化Linux的操作难度)

# 连上服务器
ssh hk

# 执行宝塔面板的安装命令
wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && sudo bash install_panel.sh ed8484bec

# 出现 面板账户登陆信息
# 外网面板地址:
# 内网面板地址:
# username: 
# password:
# 请将安全组放行 29974 端口  每个人端口不一样

# 将端口配置到阿里云服务器的安全组中
# 安全组 -> 管理规则 -> 入方向 -> 手动添加 -> 目的(填入刚才的端口号) -> 源(选择全是0)-> 描述内容(宝塔面板)-> 保存

# 访问宝塔的外网面板地址
# 使用账号密码登录
# 登陆后需要绑定宝塔官方账号
# 自己去注册一个
# 不理会推荐安装套件

# 软件商店 -> 搜索Node -> Node.js版本管理器 -> 安装
# 安装完成后点击设置 -> 更新版本列表 -> 选择最新稳定的node版本进行安装(会自动安装PM2)
# 命令行版本 -> 设置为安装的node版本

# 软件商店 -> 搜索Nginx -> 安装
# 软件商店 -> 搜索Mysql -> 安装

六、上传项目代码&配置数据库

# 打开宝塔面板 -> 点击左侧的终端
# 建立密钥对
ssh-keygen
# 查看公钥
cat ~/.ssh/id_rsa.pub
# 复制公钥 -> GitHub仓库 -> 设置 -> 部署密钥 -> 添加密钥 -> 不给写入权限(只用来克隆和拉取)-> 增加 -> 输入GitHub验证码 -> 部署密钥就添加好了

# 复制仓库的ssh克隆命令 -> 宝塔的 /www/wwwroot目录 -> 点击终端 -> git clone (ssh地址)
# 进入项目安装依赖
npm i

# 宝塔面板 -> 数据库 -> root密码 -> 替换项目中连接mysql的密码
# 项目根目录
# 创建数据库
npx sequelize-cli db:create --charset utf8mb4 --collate utf8mb4_general_cli --env production
# 创建数据库表
npx sequelize-cli db:migrate --env production

# 用客户端连接服务器上数据库
# 选择SSH登录

# Name:       随便起一个
# MySQL Host: 127.0.0.1
# Username: root
# Password: 服务器上数据库的root密码
# DataBase:
# SSH Host: 公网ip
# SSH User: root
# SSH Key:  选择密钥登录 .ssh/id_rsa

七、使用PM2部署项目

# 域名解析
# 域名要经过备案
# 阿里云 -> 域名控制台 -> 域名列表 -> 找到域名 -> 解析 -> 添加记录
# 主机记录 域名
# 记录值  ip地址

# 添加站点
# 宝塔 -> 网站 -> Node项目 -> 添加Node项目
# 项目目录 选择项目
# 项目名称 随便起一个
# 启动选项 自定义启动命令 
#         pm2 start ./bin/www
# 项目端口 3000
# 绑定域名 解析的域名

# 设置https
# 站点 -> 设置 -> SSL -> Let's Encrypt
# 全选
# 申请证书
# 强制HTTPS
# 保存

# 部署后更新项目
# git提交代码后 -> 宝塔项目目录终端 -> git pull -> 网站 -> 项目设置 -> 服务状态 -> 重启
# 设置 -> 项目信息 -> 开机启动 -> 跟随系统服务启动 -> 保存配置

# 如何在一台服务器上部署多个项目
# 服务器上传第二个项目,项目端口3001(不是3000就行)
# 宝塔里的项目端口也改为3001
# 再做一个新的域名解析到当前的服务器ip上
# 宝塔里项目的绑定域名改为新解析的域名