【JavaEE】通过Linux部署Web项目到云服务器上

一.配置部署所需的环境.

1.1 什么是部署?

  • 要想知道什么是部署, 就要先了解我们在日常开发的过程中所设计到的几种环境:
    • 开发环境: 软件开发环境指的是开发人员在创建、测试和部署软件应用程序时所需的一系列硬件、软件、工具和流程的集合。它是为了支持软件开发过程而构建的基础设施.
    • 测试环境: 测试环境是专门为软件测试工作搭建的环境,用于模拟真实生产环境以验证软件的功能和性能。
    • 生产环境: 生产环境是软件正式发布并对外提供服务的环境,用于面向最终用户的实际使用.
  • 部署: 把程序安装到生产环境上, 这个过程称为 “部署”. 也叫 “上线”. 一旦程序部署成功, 那么这个程序就能被外网中千千万万的普通用户访问到. 当然,如果程序有 BUG, 这个 BUG 也就被千千万万的用户看到了. 部署过程至关重要, 属于程序开发中最重要的一环. 一旦部署出现问题, 极有可能导致严重的事故(服务器不可用之类的问题). 为了防止部署出错, 一般公司内部都有一些自动化部署工具(如 Jenkins 等). 当前我们在学习阶段先使用手工部署的方式来完成部署.

1.2 环境配置.

  • 程序正常运行, 需要保证环境和程序都要正确, 我们需要先设置环境
  • 实际工作中, 开发环境, 测试环境以及生产环境的配置都是不一样的. 比如mysql的用户名和密码
    我们可以针对不同的环境, 设置不同的配置

多平台文件配置

  1. application-dev.yml (开发环境的配置)
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: 120348driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰自动转换log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句mapper-locations: classpath:mapper/**Mapper.xml
# 设置日志文件的文件名
logging:file:name: spring-blog.log
  1. application-prod.yml (生产环境的配置)
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: YT@yyds.666driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰自动转换mapper-locations: classpath:mapper/**Mapper.xml
# 设置日志文件的文件名
logging:file:name: spring-blog.log
  1. application.yml (主配置文件, 用于选择在不同的环境下,选择不同的配置文件)
spring:profiles:active: @profile.name@

在pom中添加标签,方便我们选择不同的环境配置:

	<profiles><profile><id>dev1</id><properties><C>dev</C></properties></profile><profile><id>prod1 </id><properties><profile.name>prod</profile.name></properties></profile></profiles>

在这里插入图片描述

二.构建项目并打包.

  • 在本地使用maven进行打包
    • 如果Test代码中有与环境配置相关的操作(比如数据库相关的操作), 打包会失败, 点击下图①处的图标, 可以跳过测试
    • 点击clean->package
      在这里插入图片描述
      在这里插入图片描述

三.上传Jar包到服务器, 并运行

3.1 上传Jar包到服务器

  1. 将打好的Jar包, 直接拉到Linux的终端中
    如果使用其他客户端,不支持文件的上传, 需要借助lrzsz命令
    • 上传文件
      sz filename
    • 下载文件
      rz
  • 问题: 如果执行上述命令之后, 提示 Command ‘XX’ not found , 表示当前云服务器未安装lrzsz
    命令, 需要先进行安装
    • 安装lrzsz
      apt-get install lrzsz

在这里插入图片描述

在这里插入图片描述

  1. 运行程序.
    • 命令: nohup java -jar blog-spring-0.0.1-SNAPSHOT.jar &
      nohup : 后台运行程序. 用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行.
    • 语法格式:
      nohup Command [ Arg … ] [ & ]
    • 参数说明:
      • Command:要执行的命令。
      • Arg:⼀些参数,可以指定输出文件
      • &:让命令在后台执行,终端退出后命令仍旧执行
    • 比如:
      nohup java -jar blog-0.0.1-SNAPSHOT.jar >/logs &
      Linux 可以通过 > 把需要输出的内容写到指定文件中. 这样的操作称为 “重定向”.

3.2 开放服务器端口号.

  • 如果外网需要访问该服务, 需要先服务器防火墙开放对应的端口号, 本着服务器安全的原则,云服务器上的端口非必要不开启. 比如常见端口号: 数据库 3306 , Redis 6379, 尽可能避免开放, 而是采用其他方式来连接, 比如配置隧道的方式

  • 以阿里云为例子:
    在这里插入图片描述

在这里插入图片描述

3.3 杀掉进程.

如果我们需要重启服务, 或者重新部署等, 都需要先停止之前的服务.

  1. 查看当前服务的进程
    ps -ef|grep java

  2. 杀掉进程
    kill -9 PID

四.常见问题.

  • 一个程序的正常运行, 需要程序的正确和环境的正确. 同样的代码在Windows上可以运行成功, 不一定在Linux上运行成功. 不同的系统对代码的理解和支持是不同的. 比如Windows系统对MySQL不区分大小写, Linux区分大小写服务不能正常访问的原因有很多, 主要分以下几个方面
    1. 服务未启动
      a. 使用 ps -ef|grep java 查看程序是否在运⾏
      b. 使用 curl http://127.0.0.1:8080/blog_login.html 看下是否有返回html页面,
      如果有返回, 说明程序启动成功了, 考虑端口未开放
      c. 如果未启动成功, 需要查看对应的日志, 根据原因来分析.
      i. 数据库不存在
      ii. 表不存在(区分大小写)
      iii. 数据库密码不正确
      iv. Jdk 安装版本不对, 或者未安装
      v. mysql未设置密码
      vi. …
    2. http端口未开放
      检查云服务器防火墙/安全组是否开放相应端⼝(如8080)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/386350.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件包含漏洞--pyload

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.PHP伪协议利用 php://协议 php://filter &#xff1a;用于在读取作用和写入文件时进行过滤和转换操作。 作用1&#xff1a;利用base64编码过滤器读取源码 通常利用文件包含执行php://filte…

哈希表专题

题解之前&#xff1a; 1.有关unordered_map的count功能&#xff1a;查询key&#xff01; Leetcode 1.两数之和 解题思路&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> res;// key:具体的数值(便…

【计算机毕业设计】838装修公司CRM系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

c# - - - ASP.NET Core 网页样式丢失,样式不对

c# - - - ASP.NET Core 网页样式丢失&#xff0c;样式不对 问题 正常样式是这样的。 修改项目名后&#xff0c;样式就变成这样了。底部的内容跑到中间了。 解决 重新生成解决方案&#xff0c;然后发布网站。 原因&#xff1a; 修改项目名之前的 div 上有个这个自定义属…

大数据采集工具——Flume简介安装配置使用教程

Flume简介&安装配置&使用教程 1、Flume简介 一&#xff1a;概要 Flume 是一个可配置、可靠、高可用的大数据采集工具&#xff0c;主要用于将大量的数据从各种数据源&#xff08;如日志文件、数据库、本地磁盘等&#xff09;采集到数据存储系统&#xff08;主要为Had…

React Native在移动端落地实践

在移动互联网产品迅猛发展的今天&#xff0c;技术的不断创新使得企业越来越注重降低成本、提升效率。为了在有限的开发资源下迅速推出高质量、用户体验好的产品&#xff0c;以实现公司发展&#xff0c;业界催生了许多移动端跨平台解决方案。这些方案不仅简化了开发流程&#xf…

C#基于SkiaSharp实现印章管理(5)

印章中最常见的特殊形状通常是五角星&#xff0c;空心、实心的都可能存在&#xff0c;本文学习并实现在印章内部绘制五角星形状。   百度五角星的绘制方法&#xff0c;主要分为三种&#xff1a;   1&#xff09;五角星各点坐标固定&#xff0c;直接调用编程语言的绘制线条或…

校车购票小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;我的乘车信息管理&#xff0c;车辆信息管理&#xff0c;座位管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;车辆信息&#xff0c;我的 开发系统…

推荐一款专注批量推送消息的轻量工具,支持主流平台的消息推送,简单、高效、低成本(附源码)

前言 在数字化时代&#xff0c;企业和个人面临着日益增长的消息推送需求。然而&#xff0c;现有的推送处理方案往往存在一些挑战和不足&#xff0c;如cao作复杂、成本高昂、缺乏灵活性等。这些问题不仅影响了推送效率&#xff0c;也增加了用户的负担。此外&#xff0c;随着工作…

SpringCloud+Vue3主子表插入数据(芋道)

目的&#xff1a;多表联查获取到每个班级里面所有的学生上课的信息。点击消课插入到消课主表和消课子表&#xff0c;主表记录班级信息&#xff0c;消课人员信息&#xff0c;上课时间。子表记录上课学员的信息&#xff0c;学员姓名、手机号、班级名称、班级类型、上课时间、老师…

词的向量化和文本向量化

词的向量化和文本向量化 向量化one-hot编码提前准备词表不提前准备词表one-hot缺点 词向量简介词向量的定义和目标word embedding和word vector的区别onehot编码与词向量关系构建 训练方式1&#xff08;基于语言模型&#xff09;训练方式2&#xff08;基于窗口&#xff09;CBOW…

Javascript前端面试基础(八)

window.onload和$(document).ready区别 window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行$(document).ready()是DOM结构绘制完毕后就执行&#xff0c;不必等到加载完毕 window.onload 触发时机&#xff1a;window.onload 事件会在整个页面&#xf…

[css3] 如何设置边框颜色渐变

div {border: 4px solid;border-image: linear-gradient(to right, #8f41e9, #578aef) 1; }参考&#xff1a; 5种CSS实现渐变色边框&#xff08;Gradient borders方法的汇总

银行贷款信用评分不足?大数据帮你找回失去的“分”

在这个信息爆炸的时代&#xff0c;无论是个人还是企业&#xff0c;数据都成为了衡量信用和评估风险的重要依据。贷款、融资、求职甚至是日常消费&#xff0c;都可能因为一份好的数据报告而变得更加顺畅。那么&#xff0c;如何高效地查询自己的大数据&#xff0c;面对评分不足时…

文件上传漏洞(ctfshow web151-161)

Web151 F12修改源代码 exts后面png改为php 这样就可以上传php的文件了 Web152&#xff1a; 考点&#xff1a;后端不能单一校验 就是要传图片格式&#xff0c;抓个包传个png的图片 然后bp抓包修改php后缀解析 然后放包 Web153-web156 在php代码中可以使用“{}”代替“[]” …

uniapp时间戳转时间

时间戳转时间 utils页面 function timestampToTime(time) { const date new Date(time); const year date.getFullYear(); const month String(date.getMonth() 1).padStart(2, 0); // 月份从0开始&#xff0c;所以要加1&#xff0c;并补齐0 const day String(date…

尚庭公寓(五)

图片上传管理 由于公寓、房间等实体均包含图片信息&#xff0c;所以在新增或修改公寓、房间信息时&#xff0c;需要上传图片&#xff0c;因此我们需要实现一个上传图片的接口。 **1. 图片上传流程** 下图展示了新增房间或公寓时&#xff0c;上传图片的流程。 可以看出图片上传…

深度学习Week21——学习DenseNet算法

文章目录 深度学习Week21——学习DenseNet算法 一、前言 二、我的环境 三、学习DenseNet算法 四、代码复现 4.1 配置数据集 4.2 构建模型 五、模型应用与评估 5.1 编写训练函数 5.2 编写测试函数 5.3 训练模型 5.4 结果可视化 一、前言 &#x1f368; 本文为&#x1f517;365天…

第一个设计模式——单例模式

目录 一、特点&#xff1a; 二、实现单例模式步骤 三、饿汉式 四、懒汉式 五、双重检查锁 六、静态内部类 七、枚举 八、可能被反序列化和反射破坏什么意思&#xff1f; 九、如何解决呢&#xff1f; 一、特点&#xff1a; 唯一性&#xff0c;单例模式确保程序中只有一…

Qt自定义带前后缀图标的PushButton

写在前面 Qt提供QPushButton不满足带前后缀图标的需求&#xff0c;因此考虑自定义实现带前后缀图标的PushButton&#xff0c;方便后续快速使用。 效果如下&#xff1a; 同时可设置前后缀图标和文本之间间隙&#xff1a; 代码实现 通过前文介绍的Qt样式表底层实现 可以得…