服务器:阿里云 Ubuntu20.04 64位
第一步:配置安全组规则
先配置实例的安全组规则,打开 80、8360 端口。 只有配置了安全组规则,才能够通过 公网IP:端口 访问到我们的网站。
第二步:安装宝塔Linux面板
宝塔面板 的官网把安装步骤写的很详细了,按步骤来肯定能安装成功的,安装成功之后,进入到面板首页。
首次进入面板的时候,会跳出个一键部署选择项,有LNMP和LAMP两种,我们选择 LNMP,然后面板就会帮我们进行Nginx、MySQL、PHP的安装了,这里什么都不用动,静静等待安装完成。
如果没有一键部署,可以去到面板的软件商店中找到需要的软件,安装好。
第三步:安装NodeJS
安装NodeJS是为了能运行我们的后台系统 ThinkJS。
# 首先安装npm
sudo apt install npm
# 然后安装n
sudo npm install n -g
# 最后安装node lts版本
sudo n lts
# npm 更新
npm install npm -g
在安装npm的时候可能会报这个错误:Unable to locate package npm,只需执行下面的命令后再重新安装。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install npm
执行完 npm i npm -g 之后,node就已经安装完毕了,此时执行 node -v 如果出现了版本号,说明安装成功。
第四步:部署前端Vue项目
首先把前端项目打包好,然后在宝塔面板,打开软件商店,点击已安装,进入到Nginx安装目录
进入到html目录,新建一个frontend目录,然后将前端项目打包后dist目录中的文件放入frontend目录中
接着进入到conf目录,找到 nginx.conf 文件,双击打开,编辑。
# nginx.conf文件
# ... 省略
server {
listen 80;
server_name localhost;
location /
{
root html/my-blog-frontend;
index index.html index.htm;
}
}
将上面的这个serve块放到文件中本来就存在的一个 listen 888 的serve块下面,注意,是下面,不是里面,放好之后,配置文件中的http块应该是如下结构的:
http
{
server {
listen 888
# .... 省略
}
server {
listen 80
# .... 省略
}
}
然后在面板中重载nginx的配置,不放心的话可以停止后重新启动。
做完上面的步骤,此时在浏览器中输入:你服务器的公网IP,点击回车,应该会出现你的网站。静态的,因为没配置后台。
第五步:后台部署
首先也是在nginx安装目录下的html目录中新建一个backend目录,然后把后台项目上传到该目录(切记不要上传node_modules目录),然后在backend目录打开终端,执行 npm install 进行依赖安装。
安装完依赖后,执行 npm start,启动项目,不出意外的话,会报错:
EACCES: permission denied, open '/www/server/nginx/html/my-blog-backend/runtime/config/development.json
字面意思,权限被拒绝了,也就是权限不够,我们找到对应的 development.json 文件,然后将它的权限改成777,再重新跑一次 npm start 即可。
除了这里,还有一个地方我们也要去改一下,那就是 src/config/config.js,我们要在其中添加如下内容:
module.export = {
workers:1,
host:'0.0.0.0',
port:'8360'
}
要注意的是,这里有一个前提条件就是:后台的数据库已经搭建好了以及数据库配置都已经配置好了,不然的话,启动还是会报错的。
ThinkJS默认的端口是8360,所以我们要去放行该端口,来到面板的安全 选项中,在放行端口中输入8360,点击放行即可。
这里要注意,我们一共对端口进行过两次配置,一次是服务器的安全组规则,一次是这里的放行端口,两者缺一不可。
接下来就是最最最重要的一步了,Nginx的配置。
再次打开 nginx.conf 文件,在我们上面添加的server块,替换成下面这个server块:
server {
listen 80;
server_name localhost;
set $node_port 8360;
location / {
root html/my-blog-frontend;
index index.html index.htm;
}
location ~ ^/api/(.*)$ {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:$node_port/$1$is_args$args;
proxy_redirect off;
}
location ~ /static/ {
etag on;
expires max;
}
}
上面的配置中,有两点需要注意的地方:
location ~ ^/api/(.*)$
上面这个点的意思是,当访问的url中有 api 字段存在的时候,就代理到这个location中。
因为前端Vue项目跨域都会配置代理,导致我们的请求会变成 xxx.com/api/实际请求地址,也就是多了一个 /api/,部署的时候这个就很致命了,因为这样会导致报404,找不到对应的接口。而解决办法就是我们下面的这个点。
$is_args$args
$is_args
当有$args(和$query_string一样) 时,此处为?否则为空$args
和$query_string一致,表查询字符串即,GET 参数
弄完上面这些,保存,然后重载配置。
然后再次在浏览器中输入你的公网IP,回车,就可以访问到你的网站啦!
第六步:使用pm2来启动后台项目
安装pm2
npm i -g pm2
然后执行
pm2
如果出现下面的这些内容,就说明安装成功了
如果显示说找不到pm2,那就给pm2做一下连接,先执行下面的命令,获取pm2在本机的安装路径
whereis pm2 # 获取pm2的安装路径 => pm2: /usr/local/bin/pm2
用上面得到的安装路径做一下连接
ln -s /usr/local/src/node/bin/pm2 /usr/local/bin/pm2
安装成功之后,我们就通过pm2来启动项目,先去到项目的根目录,打开终端,输入以下命令
# 原项目启动时使用 npm start,现在则使用pm2 start
pm2 start development.js # 启动development.js应用 因人而异
# 或者
pm2 start development.js --name backend # 启动应用并设置name为backend
# 监听模式
pm2 start development.js --watch # 当文件发生变化时自动重启
输入上面的命令后,没报错就是启动成功了,我们可以通过 pm2 list 来查看启动了的应用列表。
到这里就ok了,补充几个pm2的指令
# 停止应用
pm2 stop all # 停止所有应用
pm2 stop name # 根据应用名停止指定应用 比如我停止上面启动的应用 pm2 stop development
pm2 stop id # 比如 pm2 stop 0, 因为在list中我启动的development的id是0
# 删除应用
pm2 delete all # 关闭并删除应用
pm2 delete name # 根据应用name关闭并删除应用
pm2 delete id # 根据应用id关闭并删除应用
# 设置开启启动
pm2 startup
# pm2更新
pm2 update
# 重新启动
pm2 restart development.js
完结,撒花~