宝塔面板nodejs+vue+mysql前后分离项目部署上线

准备

  • 服务器(我用的1核2G1兆 国内 Centos 7.5)
  • 域名(可以不用)
  • 项目
  • mysql 5.7
  • PM2

安装宝塔面板,及安装推荐配置

这个很简单,教程很多,就不赘述了。

部署项目

数据库

我用MYSQL
建库一定要记得选 utf6mb4
在这里插入图片描述
然后该导库导库。

前端

我是基于Vue,所以npm run build打包,然后把dist目录上传到前端的文件夹中。
在这里插入图片描述
然后面板 -> 网站
在这里插入图片描述
目录指向前端的目录,有域名写域名,没域名可以写服务器IP。

设置>配置文件,添加(文章尾有整体配置代码):

location /api/
{
   proxy_pass http://域名:后端端口/;
}

前端的baseURL也需要对应进行修改
axios.defaults.baseURL = "http://域名/api/"的形式,与上面配置保持一致,实现跨域。

后端

同理,我个人是直接打包上传,解压(本地依赖都安装好的打包上传的,也没啥毛病)

在这里插入图片描述
打开终端跑跑看,有木有问题。

注意点
  • Specified key was too long; max key length is 767 bytes 版本5.6以下很可能会报。

原因:
msyql5.6及以前版本, 默认索引最大长度767bytes,若使用utf8mb4格式编码(utf8字符占用3字节,utf8mb4字符占用4字节), 则单个字段长度不能超过191, 5.7及之后版本, 限制放开到3072 bytes。

PS: 由于mysql的utf8编码并不是真正UTF-8,详细介绍请自行百度google,推荐使用utf8mb4,这个是通常所说的UTF-8。而utf8mb4的字符占用4字节,所以相较于utf8的占用3字节,更容易出现上面这种索引长度超限的问题。
解决方法:

查看配置:
show variables like 'innodb_large_prefix';
show variables like 'innodb_file_format';
修改为如下配置:
set global innodb_large_prefix=1;
set global innodb_file_format=BARRACUDA;
  • 我是用的sequlize,所以数据库要5.7版本及以上。宝塔推荐配置mysql是5.6。所以要重装,用到的小伙伴要注意下。

没啥问题之后,找到软件商店下载PM2
在这里插入图片描述
下载完成,回到终端 pm2 start XXX(eg: ./bin/www)

需要到安全去开放后端端口

网站配置

  1. SSL证书(教程也很多,腾讯云可以免费申请)
    强制HTTPS
    在这里插入图片描述
  2. 相关配置
    搞HTTPS搞出好多问题
    问题:
    • Mixed Content: The page at ‘.........’ was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ‘.........’. This request has been blocked; the content must be served over HTTPS.
    • Failed to load resource: net::ERR_NAME_NOT_RESOLVED
    • ERR_CERT_COMMON_NAME_INVALID
    • 此链接不安全
    • 访问静态资源404
    • vue在路由页面刷新404

原因:
1-4:HTTPS页面里动态的引入HTTP资源
6:用了history模式

上面问题尝试了无数种方法,最终的解决方式如下:

1-4 :需要在前端端index.html中添加:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
意思是自动将http的不安全请求升级为https,可以解决
修改完成之后会出现获取后端静态资源404, 如Get https....../1.jpg 404 需要nginx配置

整体配置(在网站>设置)如下:
在这里插入图片描述

server
{
    listen 80;
	listen 443 ssl http2;
    server_name 域名;
  
    index index.php index.html index.htm default.php default.htm default.html;
    root 前端目录;
    # 反向代理
    location /api/
    {
       proxy_pass http://域名:后端端口/;
    }
    # vue路由刷新404
    location /
    {
        index index.html index.htm index.php;
        root  前端目录;
        try_files $uri $uri/ @rewrites;
    }
    location @rewrites
    {
      rewrite ^(.+)$ /index.html last;
    }
    # 静态资源404
    location ~ /img/.*\.(gif|jpg|jpeg|png)$
    {
        proxy_pass http://域名:后端端口;
        rewrite ^/api/img/(.*)$ /img/$1 last;
    }
    
    ........................
nginx反向代理解释:
如:打开 http://www.qqq.com/api 访问 http://www.qqq.com:3000

#http://www.qqq.com服务器nginx配置api反向代理
location /api/ {
       proxy_pass http://www.qqq.com/;
}
# http://www.qqq.com/api/img  =>http://www.qqq.com:3000/img
就上面一段简单的代码,就完成了
注:http://www.qqq.com后面必须要有/

# 不加/
location /api/ {
       proxy_pass http://www.qqq.com/;
}
# http://www.qqq.com/api/img  =>http://www.qqq.com:3000/api/img

如果只是代理api,上面的已经满足了
如果要代理静态文件(如jpg,js等)可能就报404静态文件

http://www.qqq.com/api/img/1.gif  //404
http://www.qqq.com/api/img/1.jpg //404
静态部分需要单独代理:

location ~ /api/.*\.(gif|jpg|jpeg|png)$ { 
     proxy_pass http://www.qqq.com:3000;
}

# http://www.qqq.com/api/img/1.jpg => http://www.qqq.com:3000/api/img/1.jpg

以上代码就差一下,如果静态放在api/img目录,那就不用改了,如果静态文件都放在img目录,使用rewrite 替换即可

location ~ /img/.*\.(gif|jpg|jpeg|png)$ { 
     proxy_pass http://www.qqq.com:3000; 
     rewrite ^/api/img/(.*)$ /img/$1 last;
}

# http://www.qqq.com/api/img/1.jpg => http://www.qqq.com:3000/img/1.jpg

我后端用的NodeJS,静态资源访问的链接是http://www.qqq.com:3000/img/1.jpg
文件夹是img,后端地址:http://www.qqq.com:3000

前端在调用时,前端IP/api/img/1.jpg

我相信大家都会改哒。

我的网站:
www.ricolo.cn
希望大家来踩踩呀~

参考链接:
不用域名用IP部署的小伙伴可以看看:
https://blog.csdn.net/qq_23347131/article/details/109952657

  • 0
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Node.jsVue.js都是非常流行的前端和后端技术。为了连接这两个技术,我们可以采用以下步骤: 1. 开发后端: 使用Node.js构建后端服务,提供API接口。可以使用任何适合的框架,比如Express、Koa等。 2. 安装CORS: 在Node.js安装cors以允许跨域资源共享,因为我们将会从vue前端连接到后端Node.js服务。 3. 开发前端: 使用Vue.js构建前端,可以使用Vue CLI或者其他适当的方式。使用vue-router轻松构建应用程序路由系统。 4. 连接前后端: 使用Axios或fetch来调用API接口,从Node.js后端获取数据并将其显示在Vue.js前端。 在Vue,我们可以定义axios来发送异步HTTP请求。我们可以发送GET、POST、PUT等HTTP请求。比如,我们可以定义一个从后端获取数据的axios实例: ``` javascript import axios from 'axios'; const instance = axios.create({ baseURL: 'http://localhost:3000/api', // 后端接口地址 }); export default instance; ``` 然后,在Vue组件,我们可以使用这个实例来发送HTTP请求。举个例子,我们可以获取用户列表: ``` javascript <script> import api from '@/services'; export default { data() { return { users: [], }; }, created() { api.get('/users') .then(response => { this.users = response.data; }) .catch(error => { console.log(error); }); }, }; </script> ``` 在这个例子,我们使用Axios从后端Node.js服务获取用户列表,然后将它保存在Vue.js的数据。这样,在前端页面上就可以显示这些用户了。 综上,这是使用Node.jsVue.js连接前后端的一些简单步骤。有了这个基础知识,我们可以更深入的学习和应用这两个技术来构建更好的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值