云计算百科
云计算领域专业知识百科平台

vue+springboot+mysql项目打包部署到云端服务器

1.购买云服务器资源

1.1这里我用到的是阿里云,打开阿里云的主页,选择产品—->云服务器ECS

这里具体租服务器和安装宝塔的过程我是看另一篇博客的,感觉已经很详细了:vue3+SpringBoot+MySQL8.0打包上线部署(使用宝塔面板)_宝塔部署vue3项目-CSDN博客^v102^pc_search_result_base9&spm=1018.2226.3001.4187

看完上面的文章如果有问题没解决就还来找我

不过有一点要说,阿里云每个人是可以免费试用的,有300的额度,建议安装的时候先使用试用权限,上面这个博主说的用宝塔安装mysql8.0必须要求服务器的配置是4GB,但4GB的服务器目前没有活动,价格太贵,我的小业务用那么贵的感觉有点浪费,于是我尝试使用2GB的服务器安装mysq

2.问题解决

2.1宝塔那个链接打不开

下面是我联系宝塔的客服然后给出的解决办法(也就是要打开你租的服务器的那个访问宝塔的端口):

  • 登录到阿里云弹性云服务器控制台

  • 在搜索栏输入"云服务器ECS" 如下图:找到安全组—>管理规则

  在入方向添加一些规则打开一些端口,这里需要根据个人需求,像我要用到mysql的话3306肯定要打开的,这个39916是宝塔那个链接上需要用到的端口,必须要打开才能访问到那个链接。我后面还要用到8080和8866,这里可以一起打开

注意:如需完整使用宝塔的所有功能 你还需要放行如下端口 20 、21、 39000-40000端口(linux 系统 ),3000-4000(windows系统),22 (SSH),80、443(网站及SSL),3306 (数据库远程连接),888 (phpmyadmin)

打开端口后可以来到这个链接检测一下有没有成功打开:端口扫描 – 站长工具 像我这个下面显示开启了就可以通过浏览器访问了,然后继续登录自己的宝塔账号密码

进入宝塔里面,由于咱们是从阿里云组的服务器,这里可以直接绑定阿里云,接下来会推荐一些东西让你安装,我就按照我的需求安装了java那一栏中下面这些东西和jdk(这里点击mysql8.0的时候虽然说的是内存低于6GB不推荐安装,但好像还是可以安装的,所以感觉从这里安装很爽嘿嘿…)

安装超级无敌巨顺畅!不用像上面那个博主那样每个单独找来安装

2.2前端项目打包时不知道端口怎么设置的

这里的问题一般都是修改这四个文件:./src/utils/request.ts,和根文件夹下的这三个:.env.development、.env.production、vue.config.js:

  • 在两个环境文件里用同一个变量,统一用 VUE_APP_BASE_API,为我们带来的好处就是可以让同一套代码在「开发」和「生产」环境都能正确找到后端接口,而且不需要改变任何东西,打包完可以直接在生产环境用,生产环境如果出问题了,可以直接在开发环境修改,完了重新打包在上传上去而不用再另外配置后端地址;

  • 这里以我的项目为例,在开发环境下,我的前端项目中访问的地址都是http://localhost:8080/admin,但我这里是通过Vue CLI 的 devServer.proxy 把 /api 转发到后端,并自动把/api转换成/admin(详见vue.config.js),因此我这个development中没有写出admin,在生产环境下,直接把 VUE_APP_BASE_API 配成后端地址完整地址。项目根路径下如果没有.env.development文件,就自己创建一个,内容如下:

NODE_ENV=development

VUE_APP_BASE_API=/api

VUE_APP_URL=http://localhost:8080

  • .env.production同理,假如我在阿里云上租的服务器地址是11.11.11.11:

NODE_ENV=production

VUE_APP_BASE_API=http://11.11.11.11:8080/admin

  • 在 request.ts 找到下面这一块,我们的baseURL根据 process.env.NODE_ENV 来选用这个变量;

    const service = axios.create({

    baseURL: process.env.VUE_APP_BASE_API,

    "timeout": 600000

    })

  • 我的vue.config.js是下面这个样子的

const path = require("path");

const name = "Vue Typescript Admin";

const IS_PROD = ["production", "development"].includes(process.env.NODE_ENV);



module.exports = {



parallel: false,

publicPath: process.env.NODE_ENV === 'production' ? './' : '/',

lintOnSave: process.env.NODE_ENV === "development",

pwa: { name },



pluginOptions: {

"style-resources-loader": {

  preProcessor: "scss",

  patterns: [

  path.resolve(__dirname, "src/styles/_variables.scss"),

  path.resolve(__dirname, "src/styles/_mixins.scss")

  ]

}

},


devServer: {

port: 8888,//这里是我在开发环境下访问前端界面的端口,这个不关键

open: true,

// Webpack-Dev-Server 4 中不用 disableHostCheck,改用 allowedHosts

allowedHosts: "all",

hot: true,

// overlay 要放到 client 里

client: {

  overlay: {

  warnings: false,

  errors: true

  }

},

proxy: {

  '/api': {

  target: process.env.VUE_APP_URL, // http://localhost:8080

  changeOrigin: true,

  secure: false,

  pathRewrite: { '^/api': '/admin' },

      onProxyReq(proxyReq /* , req, res */) {

    // 删除 Origin,后端就不会当成跨域请求来验证

    proxyReq.removeHeader('origin')

  }

  }

}

},



chainWebpack: config => {

config.resolve.symlinks(true);

config.plugins.delete('pwa');



// 删除 thread-loader / cache-loader(如果有)

["js", "ts", "tsx", "vue"].forEach(ruleName => {

  const r = config.module.rule(ruleName);

  if (r) {

  r.uses.delete("thread-loader");

  r.uses.delete("cache-loader");

  }

});



// SVG sprite-loader 配置

config.module.rule("svg").uses.clear();

config.module

  .rule("icons")

  .test(/\\.svg$/)

  .include.add(path.resolve(__dirname, "src/icons/svg"))

  .end()

  .use("svg-sprite-loader")

  .loader("svg-sprite-loader")

  .options({ symbolId: "icon-[name]" });

config.module

  .rule("svg-file")

  .test(/\\.svg$/)

  .exclude.add(path.resolve(__dirname, "src/icons/svg"))

  .end()

  .use("file-loader")

  .loader("file-loader");

},



configureWebpack: {

devtool: "source-map",

resolve: {

  fallback: {

// 这一行让 webpack 在遇到 `import 'path'` 时,用 path-browserify 来替代

  path: require.resolve('path-browserify'),

  },

},

},



css: {

extract: IS_PROD,

sourceMap: false,

loaderOptions: {

  sass: { implementation: require("sass") },

  scss: { implementation: require("sass") }

}

}

};

这样写好之后就可以打包前端环境了,打包好之后项目的根文件夹下会产生一个/dist的文件,接下来要做的就是把这个文件上传到服务器上,然后配置好相应的内容。

2.3前端环境打包好上传到服务器后跑不起来

这里一般牵涉到nginx、服务器端口是否打开、后端项目是否配置好

我们这里假设后端是没问题的,先把前端都搞顺溜

2.3.1 nginx的配置

如果你是跟着我使用宝塔自动安装的nginx的话,nginx应该会存放在这里:

打开conf/nginx.conf

1.找到http那一块添加一行内容: include /www/server/nginx/conf/vhost/*.conf;

2.找到最下面的server那一块直接全部注释掉  

3.打开与nginx.conf文件同级目录vhost,在里面创建文件名为:11.11.11.11.conf,也就是你的服务器ip.conf,内容如下,8866是你在外界想通过哪个端口号访问到咱的前端项目,我在本地的时候前面设置的是8888,但在这里设置不了8888,因为待会在另外一个地方设置端口的时候会提示8888为常用端口,不能设置,所以这里就改成了8866,让nginx监听这个端口,同时下面root这个变量里的值/www/wwwroot/MyProject/projectWeb就是我的前端项目打包好存放的位置:

server {
# 只在这里声明 default_server,主配置里的就不管了
listen 80;
listen 8866;

# 用下划线(_)作为通配域名,匹配任意请求
server_name _;

root /www/wwwroot/MyProject/projectWeb;
index index.html;

location / {
try_files $uri $uri/ /index.html;
}

location /admin/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}

}

这里弄好了之后在宝塔中打开如下所示,域名还写你的ip,这里先不填端口号,根目录选到你的前端文件存放的位置,和刚才一样

然后点击你刚才添加好的那个站点右侧的设置,在域名管理中添加两个内容:域名:11.11.11.11 端口8866;域名11.11.11.11 端口80

然后在宝塔的安全中,添加这几个端口的访问权限:

 最后别忘了在阿里云上也打开这几个端口,然后前端的问题基本解决

2.4 后端问题解决

在打包之前找到本地的application文件,记得修改好数据库名,用户名和密码,然后是端口号,比如我的后端想用的是8080,别的没什么需要改了,maven管理的话直接点生命周期中的package打包(如果因为测试报错了的话,你把test给忽略掉再重新打包):

打包好生成.jar文件,上传到和前端文件同级目录下:

然后在这里添加java项目,项目路径选刚才那个jar文件,端口这里和我们之前在本地修改项目application文件中的端口保持一致写8080并放行端口,项目名称自己随便起,最后点击确定。然后项目启动起来了你在浏览器通过输入https://11.11.11.11:8866就可以访问到啦~

2.5 如果你的后端项目还有访问跨域的问题的话

在你的后端项目的web配置文件中加入以下代码,这个类是继承WebMvcConfigurationSupport的:

@Override
protected void addCorsMappings(CorsRegistry registry) {
   // 对 /admin/** 下所有接口允许跨域
   registry.addMapping("/admin/**")
           // 允许前端静态服务器的地址
          .allowedOrigins("http://114.215.193.119:8866")
           // 必须显式放行 OPTIONS
          .allowedMethods("GET","POST","PUT","DELETE","OPTIONS")
          .allowCredentials(true)
          .maxAge(3600);
}

有什么问题欢迎交流~

赞(0)
未经允许不得转载:网硕互联帮助中心 » vue+springboot+mysql项目打包部署到云端服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!