全栈前后端分离项目云服务器部署上线
不同的技术栈,部署上线的方案也不同,轩钰就以自个用的技术栈记录详细的部署笔记
轩钰使用的是 node + pm2 + 宝塔管理工具 部署自个前后端分离项目
写的不好处地方,还请多多谅解.
准备:
- 准备一台云服务器
- 服务器终端连接工具(我这里用的是vscode的一个插件:Remote - SSH)
- 安装Node环境
- 安装PM2工具包
云服务器购买
云服务器的大牌服务商有很多,可以选择阿里云,腾讯云,华为云等等都可以
以阿里云为例
阿里云官网网址
进入阿里云官网,选择产品分类,选择云服务器ECS,如图
选择立即购买
选择你想要配置和服务器地区
服务器系统的选择(推荐选择Linux系统CentOs)
购买成功之后进入个人控制台,查看自己已经购买成功的云服务器(ECS)
点击查看实例
配置服务器的安全组,配置安全组规则
配置开放的端口
基本的购买和配置已经搞定
下面我们就可以使用工具连接我们服务器终端
连接服务器终端
连接工具我们以vscode插件:Remote - SSH为例
vscode工具的安装和使用就不多介绍
推荐看看慕课网一门vscode入门课程,可以去看看
vscode入门课程
我们直接在vscode安装插件中直接搜索Remote就能搜索的到此插件
安装完成之后,重启一下vscode,重启完之后我们可以看vscode左侧多了个这样的图标,说明已经安装成功
接下来我们就可以配置ssh连接文件
配置示例,如下图:
配置完成之后,我就可以连接我们的服务器了
连接时会重新打开一个新窗口的vscode,再弹出一个输入框,让我们输入自己服务器登录密码进行登录,如下图
然后我们输入密码,回车键登录即可
登录成功之后我们就可以看到有这样的打开文件夹,说明已经登录成功了,我们就可以打开我们服务器任意目录
使用vscode打开我们的服务器终端
当我们使用ssh插件连接服务器成功之后,就可以vscode自带的工具打开我们服务器终端了,如下图
这里跟大家说一下使用的vscode插件连接服务器的好处.
1.在我们开发的时候我会把代码托管到github,或者码云上面,我们可以在服务器中直接把我们的代码拉下来然后直接就可以在vscode编辑修改一下内容,非常的方便.
2.本地的项目文件和服务器之间推荐拖拽上传,减少了我们使用ftp上传
接下来我们就可以进行我们的服务器的环境配置了
在服务器中Node环境安装
我们服务器系统使用的是 Linux CentOS
具体安装就介绍了,推荐去看看这里的安装教程
Node环境安装
PM2工具安装和使用
node本身是一个单线程应用。它的特点就是所有的方法都是串行一次执行,并且node没有能力像java一样去创建一个新的现成去实现异步,如果在执行I/O中遇到了阻塞,就会降低整个应用的执行效率。在应用和计算能力要求日益倍增的今天,单线程最大的弊端就是无法利用多核CPU带来的优势来提升运行效率
m2的主要特性
- 内建负载均衡(使用node cluster集群模块,可以使用服务器上的所有cpu)
- 后台运行(node app.js 这种命令是直接在前台运行的,不稳定,很容易断)
- 0秒停机重载(应该是上线升级的时候 不需要停机)
- 停止不稳定的进程(避免无限循环)
- 控制台检测
全局安装PM2
npm i pm2 -g
用法
pm2 start build/ecosystem.config.js --env test -i 4 #也可以把‘Max’传递给start,正确的进程数目依赖于cpu的核心数目
pm2 start build/ecosystem.config.js --name my-api # 命名进程,后面的参数其实都可以在config.js中定义
pm2 deploy build/ecosystem.config.js test # 执行deploy部署
pm2 list # 显示所有进程状态
pm2 monit # 监控所有进程
pm2 logs # 显示所有进程日志
pm2 log name/id # 显示单个进程日志(name为进程名称)
pm2 stop all # 停止所有的进程
pm2 stop name/id # 停止指定的进程
pm2 reload all # 0秒停机重载所有的进程
pm2 reload name/id # 0秒停机重载指定的进程
# 0秒停机重载:
# 这项功能允许你重新载入代码而不用失去请求连接。
pm2 restart all # 重启所有的进程
pm2 restart name/id # 重启指定的进程
pm2 delete all # 杀死所有的进程
pm2 delete name/id # 杀死指定的进程
查看已经运行中项目列表
pm2 list
监视每个node进程的CPU和内存的使用情况
app.js 解析(对应的地方会有注释)
const origin = typeof process.argv[2] != 'undefined' ? process.argv[2] : 'origin/dev';
module.exports = {
/**
* Application configuration section
* http://pm2.keymetrics.io/docs/usage/application-declaration/
* start 时会根据--env 后面的参数,决定注入不同的环境变量
* pm2 start 的时候会执行apps里面的配置
*/
apps: [
{
name: '进程的名字',
script: 'server.js', # 注入了环境变量后,执行的脚本
log: '/var/log/xm.log',
error: '/var/log/xm-err.log',
output: '/var/log/xm-out.log',
instances: 4, # 实例数
exec_mode: 'cluster',
env: {
COMMON_VARIABLE: 'true',
},
env_test: {
NODE_ENV: 'test',
port: 4003,
},
env_development: {
NODE_ENV: 'development',
port: 4003,
},
env_production: {
NODE_ENV: 'production',
port: 3862,
},
},
],
/**
* Deployment section
* http://pm2.keymetrics.io/docs/usage/deployment/
* pm2 deploy的时候会执行deploy中的配置,会使用ssh的方式去登录到服务器上
* post-deploy 为拉取代码之后 要执行的命令,若是不设置post-deploy字段的话,执行deploy命令就只是登录到服务器上拉取对应分支的代码
*/
deploy: {
test: {
user: 'root',
host: 'x.x.x.x',
ref: origin,
key: 'build/key',
repo: 'git仓库地址',
path: '代码在服务器上的路径',
'post-deploy': 'npm run test_build && npm run test_start',
env: {
NODE_ENV: 'test',
},
},
},
};
宝塔管理工具安装和使用
可能有些朋友不了解宝塔是啥工具,宝塔面板是一个简单好用的Linux/Windows服务器运维管理面板,如果对于服务器运维方面不熟悉的,宝塔是个不错的选择.聚成了多种服务环境配置,一键操作非常的方便.
宝塔官方网址:www.bt.cn
具体的安装官方都有详细的说明,都是傻瓜式安装教程,
注意:
默认安装会自动配置一个8888端口号,如果你的服务器安全组没配置该端口开放的话,安装成功后地址是打不开的,需要我们开放次端口号才能使用,前面有讲到服务器安全组配置,可以往上翻翻看
这是我们安装成功登录后后台管理面板
Nginx安装和使用
如果你是使用了宝塔面板管理工具那么,这个安装Nginx就非常简单,如果不使用宝塔面板管理工具,需要自行手动安装.
具体手动安装教程可以参考这里
Nginx安装和配置
我们这里讲讲宝塔怎么安装Nginx
一般宝塔面板在初始安装的时候,都会提示你一键安装配置环境,直接选择Nginx一键安装即可.
项目部署
那么我们如果部署我们的项目呢?
如果部署的是静态页面,那就非常简单了,我们可以在宝塔中添加一个网站站点即可.例下图:
域名的购买和解析,就不多做介绍了,我们在各大服务商中购买即可,例如,新网,腾讯云,阿里云,华为云,等等
添加站点是添加的域名端口默认是80端口
例如我们部署一个静态页面,需要绑定的域名地址是test.zhouxuanyu.com ,那么我们就可以添加test.zhouxuanyu.com(注意必须要把相对应的域名地址解析到服务器)
未写完....
One comment
文章写得不错