如何优雅的部署一个SpringBoot+Vue2的个人博客项目到服务器(全栈项目部署)

2023-11-01

在前端时间花了大概三个星期时间纯手写了一个个人博客系统,是基于SpringBoot+Vue+MySQL的,下面是主页界面和后台管理界面(感兴趣的新手小伙伴可以加我哦,后期还会找一些项目,可以一起做)

本文主要讲一下如何部署对应的项目到服务器,下面开干吧!

后端打包部署:

打包:相对来说比较简单,直接点击package就可以实现打包的一些列操作

 

上图表示成功了打包了

 之后在项目路径下会生成对应的jar包

部署到Linux服务器:

 我用的是宝塔面板进行部署(非常的方便,不知道宝塔的小伙伴可以去安装玩一玩)

将对应的jar包放到一个文件夹目录下

 点击网站,之后java项目,添加java项目

填写下面的信息(首先要保证linux环境下自己有对应项目的jdk,注意一定要保持一致,我当时用的是jdk11开发的项目,之后linux上jdk用的1.8,肯定是跑不起来的,所有版本一定要统一一下,避免出现错误,端口的话就填你项目配置文件里面的项目运行端口)

 之后就放行一下你要用的端口(后面不在赘述,总是你所有要用到的端口一定要在这里进行开放,当然,我用的是阿里云的服务器,所有也要在里面开发对应的安全组)

 之后就跑起来就行了

 目前为止后端就部署成功了,其实过程中 还有点细节上的东西,比如你要安装好对应的环境:比如在软件商店安装

 前端项目部署:

我前端用的是webpack创建的项目,目录结构如下:

在打包部署之前要进行一些配置:
config/index.js文件的修改

'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.

const path = require('path')
//这是我开发环境下的一个解决跨域的配置
module.exports = {
  dev: {
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
      '/': {
        target: 'http://ip:项目port',
        changeOrigin: true,
        pathRewrite: {
          '^/': ''         //路径重写
        }
      }
    },

    // Various Dev Server settings
    host: 'localhost', // can be overwritten by process.env.HOST
    port: 本项目运行的端口, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
    autoOpenBrowser: false,
    errorOverlay: true,
    notifyOnErrors: true,
    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-


    /**
     * Source Maps
     */

    // https://webpack.js.org/configuration/devtool/#development
    devtool: 'cheap-module-eval-source-map',

    // If you have problems debugging vue-files in devtools,
    // set this to false - it *may* help
    // https://vue-loader.vuejs.org/en/options.html#cachebusting
    cacheBusting: true,

    cssSourceMap: true
  },
//重点配置这块
  build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),
    env: require('./prod.env'),  //这里改成生产环境
    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),     //打包后dist文件夹生成的位置,默认不修改
    assetsSubDirectory: 'static',
    assetsPublicPath: './', //这里非常重要,不然你的图片啥的加载不出来,具体原因你可以自己去查一下

    /**
     * Source Maps
     */

    productionSourceMap: true,
    // https://webpack.js.org/configuration/devtool/#production
    devtool: '#source-map',

    // Gzip off by default as many popular static hosts such as
    // Surge or Netlify already gzip all static assets for you.
    // Before setting to `true`, make sure to:
    // npm install --save-dev compression-webpack-plugin
    productionGzip: false,
    productionGzipExtensions: ['js', 'css'],

    // Run the build command with an extra argument to
    // View the bundle analyzer report after build finishes:
    // `npm run build --report`
    // Set to `true` or `false` to always turn it on or off
    bundleAnalyzerReport: process.env.npm_config_report
  }
}

 同时为了部署之后图片加载不了的问题,还要进行如下的修改

 都配置好了之后就可以打包操作了

打包:

终端输入:npm run build

之后会生成对应的dist文件夹

部署:

 我将dist文件夹放在了一个大目录下

 

之后到如下界面去添加站点

一般改动三个地方就好了

 

第一个位置填写你的域名,如果没有域名的话就直接用你服务器的公网ip

根目录位置找到你的dist文件夹

php版本改成纯静态

至此,前后端的部署工作就完成了,可以去浏览器访问你部署好的项目了 

 简单总结一下吧

我这个项目其实写的东西比较简单:

前端是基于Vue2+element-ui+Ajax(简单的二次封装了一下)+v-md-editor(说实话这种富文本编辑器还是挺好用的)

后端主要是SpringBoot+Mybatis-Plus+MySQL(代码量我这个相对较少)

以后做的话还会手写一下JWT认证,用redis做下缓存,增加多用户模块等等,目前限于时间和技术原因没有去实现,感兴趣的小伙伴可以加我,大家一起遨游在技术的海洋hhhhhh

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何优雅的部署一个SpringBoot+Vue2的个人博客项目到服务器(全栈项目部署) 的相关文章

  • 如何通过单击图像预览上的“x”从文件输入中删除图像?

    我目前有一个文件输入 一旦用户上传图像 就会显示图像预览 在图像预览上 有一个 x 可以从列表中删除图像预览 单击此 x 后 有什么方法可以从输入中的文件集中删除图像吗
  • React-native:将场景绑定到导航栏

    我正在整理这个提问 回答应用程序 并遇到了这个障碍 我想从导航栏触发场景中的功能 与登录应用程序类似 我在导航栏中有一个用于提交答案的按钮 RightButton route navigator index navState if rout
  • 如何更改传单中功能集的样式?

    我正在看等值区域的例子 https leafletjs com examples choropleth https leafletjs com examples choropleth 这是他们使用的数据源 type Feature prop
  • 网站 YouTube 嵌入视频不断播放

    我正在使用 youtube 提供的 iframe 在我的网站上嵌入视频 我还使用了一个 css 弹出窗口 这是我从这个页面学到的http www pat burt com web development how to do a css po
  • 如何使用 JavaScript 中的值填充下拉列表?

    我在 Tridion CMS 扩展中的功能区工具栏按钮中添加了一个按钮 单击该按钮后 将显示一个弹出页面 其中包含两个下拉菜单 通过更改第一个下拉控件中的值 我应该填充第二个下拉控件的值 就我而言 我正在使用ASP drop down li
  • 使用 moment.js 检查输入日期是否为星期一

    好吧 我想检查日期是否是星期一 例如 var myDate new Date moment myDate DD MM YYYY dayIs monday 在我的国家 一周的第一天是星期一 所以 我真的想检查输入日期是否是一周的开始 我尝试使
  • 如何使用canvas.toDataURL()将画布保存为图像?

    我目前正在构建一个 HTML5 Web 应用程序 Phonegap 本机应用程序 我似乎不知道如何将画布保存为图像canvas toDataURL 有人可以帮我吗 这是代码 有什么问题吗 我的画布被命名为 canvasSignature J
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • 如果链接包含特定文本,jQuery 将类添加到 href

    我的网站上的列表中有一些动态填充的链接 这些链接链接到文件 是否可以使用 jQuery 查看文件名是否以 pdf 结尾 并在 href 或类似的链接文本以 mp3 结尾时添加一个类 例如 我的列表中有以下链接 文件1 pdf 歌曲1 mp3
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • 将 javascript 整数转换为字节数组并返回

    function intFromBytes x var val 0 for var i 0 i lt x length i val x i if i lt x length 1 val val lt lt 8 return val func
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • anaconda创建和删除环境

    一 创建环境 在菜单栏中打开Anaconda Prompt 它是一个命令行界面 我们输入下面命令创建环境 这里的py37是我随意起的环境名 大家任意取好记为主 后面的python版本也是自由指定 中间只有一个等号 例如我这里是想创建pyth
  • unicode编码表

    unicode编码表 转载于 近來情轉深的博客 http jlqzs blog 163 com blog static 2125298320070101826277 另附一个汉字转化unicode编码的网页工具 http www bangn
  • 使用别人编译的动态库gdb,路径不匹配

    如果你在调试时需要在动态库中打断点 但动态库的路径是别人的路径 可以使用 GDB 的 set substitute path 命令将动态库路径替换为你本地的路径 具体来说 执行以下步骤 启动 GDB 并加载调试目标 使用 info shar
  • WebFlux ServerHttpRequest RequestBody 读取

    MockServerHttpRequest request MockServerHttpRequest post test body test DecoderHttpMessageReader
  • 安卓开发--不走弯路,5步教你快速实现拍照功能(基于安卓13)

    先展示效果 实现基本逻辑很简单 大致5步为 点击按钮 启动相机 拍照 保存相片 展示相片 但是这里面有一些细节对于初次接触安卓的用户并不友好 比如笔者我 折腾了一阵子才梳理出基本流程 下面我将分步骤说明 按着我的步骤即可快速实现拍照功能 目
  • Update function的问题和解决方案

    DN的过账一般使用的是都是 Function WS DELIVERY UPDATE 其实这是一个经常使用到的函数 注意 这不是一个BAPI 只是一个函数 但是这个函数里面有一个update funtion 所以这个函数并没有返回参数 ret
  • 【RK3399】I3399烧写Debian系统详解

    00 目录 文章目录 00 目录 01 驱动安装 02 镜像文件烧写 03 问题讨论 04 附录 01 驱动安装 1 1 没有安装驱动的时候 显示感叹号 1 2 解压DriverAssitant v5 1 1 zip 1 3 双击Drive
  • Tomcat的下载安装及使用

    目录 一 tomcat简介 二 tomcat的下载 1 进入官网界面 2 选择你使用的版本 3 选择下载 4 将下载好的tomcat安装包进行解压 5 Tomcat的目录结构 6 启动tomcat 7 关闭tomcat 8 解决乱码问题 8
  • 动态绑定与静态绑定的小结(改)

    接下来的一段话是我从一位博客大佬那里copy来的 对象的静态类型 对象在声明时采用的类型 是在编译期确定的 对象的动态类型 目前所指对象的类型 是在运行期决定的 对象的动态类型可以更改 但是静态类型无法更改 静态绑定 绑定的是对象的静态类型
  • 基于多渠道比价

    目录 背景 流程梳理 技术预研 关键点代码 后记 背景 产品贱兮兮的跑来问 星哥 我们既然接入了那么多渠道 那么能不能在客户下单的时候做多渠道比价了 我 这是什么骚操作 产品 就是客户下单的时候 我们可以在已经接入的渠道中进行比价 然后选择
  • 访黏度计算公式_常用粘度单位换算

    常用粘度单位换算 1 厘泊 1cP 1 毫帕斯卡 秒 1mPa s 100 厘泊 100cP 1 泊 1P 1000 毫帕斯卡 秒 1000mPa s 1 帕斯卡 秒 1Pa s 用厘泊 Cp 为单位 1cp 10 3Pa s 动力粘度与运
  • 汽车加油行驶问题【网络流24题】【可以使用BFS】

    题目链接 这道题虽然说是网络流24题中的一题 但是我的第一想法确实去用BFS 跑一个最小的花费 但是由于加油的钱 向后走的钱 开设一个新的加油站的钱是不固定的 所以 我们需要进行相应的判断 跑所有可以达到终点的值去比较大小 include
  • 省掉80%配置时间,这款Mock神器免费又好用

    前端的痛苦 作为前端 最痛苦的是什么时候 每个迭代 需求文档跟设计稿都出来了 静态页面唰唰两天就做完了 可是做前端又不是简单地把后端吐出来的数据放到页面上就完了 还有各种前端处理逻辑啊 后端接口还没出来 我就得边写代码边测前端效果 又没有真
  • Vue3+Vite+AntDesignVue初始化项目

    通过vite官方的命令新建一个vue3的项目 通过这个命令新建的项目结构非常简介 当然什么也没有 需要手动安装路由等 npm create vite latest 1 配置热更新和路径别名 安装 types node 配置地址时会用到 np
  • k8s篇之init与pause容器

    文章目录 前言 init容器是什么 理解 Init 容器 与普通容器的不同之处 Init 容器能做什么 init容器示例 使用 Init 容器 init容器具体行为 资源 Pod 重启的原因 Pause 容器 Pause 容器特点 Paus
  • IntelliJ常用的快捷键

    跟查找有关 Ctrl N 快速查找类 Shift Shift 查找所有 不区分文件格式 根据输入的文件名匹配 Ctrl Shift F 查找文本 需要关闭输入法 Ctrl B 找变量 方法 类等的来源或者使用过的地方 跟写代码有关 Ctrl
  • 迪杰斯特拉(Dijkstra)算法解决最短路径问题

    Dijkstra 算法介绍 迪杰斯特拉算法 Dijkstra 是由荷兰计算机科学家狄克斯特拉于1959年提出的 因此又叫狄克斯特拉算法 迪杰斯特拉 Dijkstra 算法是最经典的最短路径算法之一 用于计算一个结点到其他结点的最短路径 它的
  • L1-8 估值一亿的AI核心代码 (正则表达式匹配) C++

    原题 以上图片来自新浪微博 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序 规则是 无论用户说什么 首先把对方说的话在一行中原样打印出来 消除原文中多余空格 把相邻单词间的多个空格换成 1 个空格 把行首尾的空格全部删掉 把标点符号
  • Vue根据接口返回权限和动态路由,来配置路由组件

    首先再router index js中 import Vue from vue import Router from vue router import getLogin from api login 登录接口 const Main gt
  • 如何优雅的部署一个SpringBoot+Vue2的个人博客项目到服务器(全栈项目部署)

    在前端时间花了大概三个星期时间纯手写了一个个人博客系统 是基于SpringBoot Vue MySQL的 下面是主页界面和后台管理界面 感兴趣的新手小伙伴可以加我哦 后期还会找一些项目 可以一起做 本文主要讲一下如何部署对应的项目到服务器