【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.mzph.cn/web/50559.shtml

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

相关文章

[算法]归并排序(C语言实现)

一、归并排序的定义 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法。该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。 二、归并排序的算法原理 归并排序的算法可以用递归法和非递归法来实现…

Git基本原理讲解、常见命令、Git版本回退、Git抛弃本地分支拉取仓库最新分支、如何将本地文件推送至github、.gitignore文件的使用

借此机会写篇博客汇总一下自己去公司实习之后遇到的一些常见关于Git的操作。 Git基本认识 Git把数据看作是对小型文件系统的一组快照&#xff0c;每次提交更新&#xff0c;或在Git中保存项目状态时&#xff0c;Git主要对当时的全部文件制作一个快照并保存这个快照的索引。同时…

【ROS 最简单教程 002/300】ROS 环境安装 (虚拟机版): Noetic

&#x1f497; 有遇到安装问题可以留言呀 ~ 当时踩了挺多坑&#xff0c;能帮忙解决的我会尽力 &#xff01; 1. 安装操作系统环境 Linux ❄️ VM / VirtualBox Ubuntu20.04 &#x1f449; 保姆级图文安装教程指路&#xff0c;有经验的话 可以用如下资源自行安装 ITEMREFERENCE…

vue3实战(通用后台管理系统)问题总结

npm install less vue-router element-plus -s elementplus 路由引入组件第二种写法&#xff1a; 使用动态的import( )语法(推荐使用)&#xff08;路由懒加载&#xff09; component:()>import(路径)component:()>import(/views/Main.vue)打包之后的文件将会异常的大&a…

《昇思25天学习打卡营第25天|第28天》

今天是打卡的第二十八天&#xff0c;实践应用篇中的计算机视觉中Vision Transformer图像分类。 从Vision Transformer&#xff08;ViT&#xff09;简介开始了解&#xff0c;模型结构&#xff0c;模型特点&#xff0c;实验的环境准备和数据读取&#xff0c;模型解析&#xff08…

深入探索PHP框架:Symfony框架全面解析

1. 引言 在现代Web开发领域&#xff0c;PHP作为一种广泛使用的服务器端脚本语言&#xff0c;其框架的选择对于项目的成功至关重要。PHP框架不仅能够提高开发效率&#xff0c;还能确保代码的质量和可维护性。本文将深入探讨Symfony框架&#xff0c;这是一个功能强大且灵活的PHP…

Teamcenter RAC开发,创建Item的两种方式

1、如果描述不必填&#xff0c;采用胖客户端的创建方式 newItem itemType.create(newItemId, "", targetTypeComp.getTypeName(), item_name, // "test1", null, null2、如果描述必填&#xff0c;则需要采用SOA的创…

C++11中的右值引用以及移动构造等

目录 一、右值引用 1.左值引用和右值引用 2.左值引用与右值引用比较 3.右值引用使用场景和意义 1️⃣ 传返回值 2️⃣ STL中的应用 4.完美转发 模板中的&& 万能引用&#xff08;引用折叠&#xff09; 二、 新的类功能 1.默认成员函数 2.类成员变量初始化 3.…

线程池学习(一)

1.线程池有什么作用 降低资源消耗&#xff1a;通过池化技术重复利⽤已创建的线程&#xff0c;降低线程创建和销毁造成的损耗。 提⾼响应速度&#xff1a;任务到达时&#xff0c;⽆需等待线程创建即可⽴即执⾏。 提⾼线程的可管理性&#xff1a;线程是稀缺资源&#xff0c;如果…

ProxmoxPVE虚拟化平台--安装PVE虚拟机

Proxmox 虚拟机 Proxmox是一个基于Debian Linux和KVM的虚拟化平台&#xff0c;‌它提供了虚拟化的环境&#xff0c;‌允许用户在同一台物理机上运行多个虚拟机。‌Proxmox虚拟环境&#xff08;‌PVE&#xff09;‌是一个开源项目&#xff0c;‌由Proxmox Server Solutions Gmb…

Power Tower

Problem - D - Codeforces 牛客和codeforce都有 递归处理l,r&#xff0c;终点是lr && mod1 用扩展欧拉定理 // Problem: D. Power Tower // Contest: Codeforces - Codeforces Round 454 (Div. 1, based on Technocup 2018 Elimination Round 4) // URL: https://c…

【Socket 编程】应用层自定义协议与序列化

文章目录 再谈协议序列化和反序列化理解 read、write、recv、send 和 tcp 为什么支持全双工自定义协议网络计算器序列化和反序列化 再谈协议 协议就是约定&#xff0c;协议的内容就是约定好的某种结构化数据。比如&#xff0c;我们要实现一个网络版的计算器&#xff0c;客户端…

关于P2P(点对点)

P2P 是一种客户端与客户端之间&#xff0c;点对点连接的技术&#xff0c;在早前的客户端都是公网IP&#xff0c;没有NAT的情况下&#xff0c;P2P是较为容易实现的。 但现在的P2P&#xff0c;实现上面会略微有一些复杂&#xff1a;需要采取UDP打洞的技术&#xff0c;但UDP打出来…

asp.net mvc 三层架构开发商城系统需要前台页面代完善

一般会后端开发&#xff0c;都不太想写前台界面&#xff0c;这套系统做完本来想开源&#xff0c;需要前台界面&#xff0c;后台已开发&#xff0c;有需求的朋友&#xff0c;可以开发个前端界面完善一下&#xff0c;有的话可以私聊发给我啊

Redis(三)

1. java连接redis java提高连接redis的方式jedis. 我们需要遵循jedis协议。 引入依赖 <!--引入java连接redis的驱动--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version&g…

Android Framework 之AMS

它管理了系统的四大组件:Activity、Service、ContentProvider、Broadcast。 它除了管理四大组件外&#xff0c;同时也负责管理和调度所有的进程 AMS相关目录结构 AMS代码主要在下面几个目录(AndroidQ上AMS相关部分功能移到了wm下)&#xff1a; frameworks/base/core/java/andro…

记录|LabVIEW从0开始

目录 前言一、表达式节点和公式节点二、脚本与公式2.1 公式 三、Excel表格3.1 位置3.2 案例&#xff1a;波形值存入Excel表中3.3 案例&#xff1a;行写入&#xff0c;列写入 四、时间格式化4.1 获取当前时间4.2 对当前时间进行格式化 更新时间 前言 参考视频&#xff1a; LabVI…

【STL】之 vector 使用方法及模拟实现

前言&#xff1a; 本文主要讲在C STL库中vector容器的使用方法和底层的模拟实现~ 成员变量的定义&#xff1a; 对于vector容器&#xff0c;我们首先采用三个成员变量去进行定义&#xff0c;分别是&#xff1a; private:iterator _start; // 指向数据块的开始iterator _finish…

React类组件生命周期与this关键字

类组件生命周期 参考链接 一图胜千言&#xff08;不常用的生命周期函数已隐藏&#xff09; 代码&#xff1a; //CC1.js import { Component } from "react";export default class CC1 extends Component {constructor(props) {super(props);console.log("con…

【Vue3】watchEffect

【Vue3】watchEffect 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文…