当前位置: 首页 > article >正文

【JavaEE进阶】部署Web项目到Linux服务器

目录

🍀什么是部署

🌲环境配置

🚩数据准备

🚩程序配置文件修改

🎄构建项目并打包

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

🚩上传Jar包

🚩运行程序

🏀短暂运行

🏀永久运行

🚩开放端口号

🌴杀掉进程

🌳常见问题


🍀什么是部署

我们在⼯作中会涉及到几个"环境"

  • 开发环境: 开发⼈员写代码用的机器.
  • 测试环境: 测试⼈员测试程序使用的机器.
  • ⽣产环境(线上环境): 最终项⽬发布时所使⽤的机器.对稳定性要求很⾼.

把程序安装到⽣产环境上,这个过程称为"部署".也叫"上线"

⼀旦程序部署成功,那么这个程序就能被外网中千千万万的普通用户访问到.

换句话说,如果程序有BUG,这个BUG也就被千千万万的⽤⼾看到了.

部署过程⾄关重要,属于程序开发中最重要的⼀环.⼀旦部署出现问题,极有可能导致严重的事故(服务器不可⽤之类的).

为了防⽌部署出错,⼀般公司内部都有⼀些⾃动化部署工具(如Jenkins等).

本文章使⽤⼿⼯部署的⽅式来完成部署

🌲环境配置

要使程序正常运行,需要保证环境和程序都要正确,我们需要先设置环境

🚩数据准备

准备需要部署到服务器上的web项目所需要的数据库

首先建立我们所需要的数据库

接下这里我们有两种方法来填充里面的数据

  1. 建⽴相同的表结构,导入相同的数据
  2. 对原来数据库的数据进行打包,放入Linux某一个目录下面,然后打开相应的数据库,实用如下命令进行导入

🚩程序配置文件修改

实际⼯作中,开发环境,测试环境以及⽣产环境的配置都是不⼀样的

⽐如mysql的⽤⼾名和密码(当前本地的密码为123456,线上的密码是Yy584等等),我们可以针对不同的环境,设置不同的配置

针对不同平台创建不同的配置⽂件,要求名字为application-XXX.yml或者application-XXX.properties 以下以application-XXX.yml为例

对于开发环境起一个dev的配置文件,对于发布环境起一个prod的配置文件

固定格式,只有后⾯的字⺟可以修改

在配置⽂件⾥写不同的内容

application-dev.yml:

application-prod.yml:

在主配置⽂件application.yml 中指定配置⽂件,并删除数据库相关配置

设置prod:

首先删掉主配置文件中的所有配置信息,通过以下配置信息来指定上述哪个配置文件生效(dev/prod)

启动项目:可以看到当前是prod配置生效了

启动一个测试代码:会直接报错,因为当前项目还没有上线,使用的发布环境的密码,报密码错误

设置dev:

启动项目:

启动测试代码:运行成功

由于在公司是进行团队开发的,通过上述这样的方式进行切换,也是非常的麻烦,接下来我们就通过Maven的方式来进行操作。

在pom.xml文件中,随意找个位置添加:

相当于定义了两个变量,通过主配置文件进行读

application.yml文件:

刷新Maven之后,Profiles文件中就会多出两个文件(dev,prod),你用哪个就勾选哪个即可,勾选完成之后也要刷新Maven

也可以设置其中一个为默认环境:

🎄构建项目并打包

在本地使用maven进行打包

1.如果Test代码中有与环境配置相关的操作(比如环境为prod),打包会失败,点击下图①处的图标,可以跳过测试

2. 点击clean->package

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

🚩上传Jar包

直接拖动打好的jar包到xshell窗⼝即可完成⽂件的上传

Xshell可以直接拖动⽂件到窗⼝,达到上传⽂件的⽬的,如果使⽤其他客⼾端,不⽀持⽂件的上传,需要借助lrzsz命令

  1. 上传⽂件
    sz filename
  2. 下载⽂件
    rz

执行该命令后,在弹出框中选择要上传的文件即可,上传的速度取决于网络.

如果执⾏上述命令之后,提⽰ Command ‘XX’ not found ,表⽰当前云服务器未安装lrzsz命令,需要先进⾏安装

安装lrzsz命令如下:

🚩运行程序

运行程序分为两种,一种使永久的,一种是短暂的

🏀短暂运行

现在来看一下短暂的语法如下(这个命令的运行方式会在你退出终端时就停止)

🏀永久运行

接下来我们看一个永久的运行方式

现在就能永久访问了,即使关掉终端。

跟踪日志:(tail -f XX.log)

还可以选择性跟踪,例如跟踪错误日志:

我们还可以通过该命令搭配 > 把需要输出的内容写到指定⽂件中.这样的操作称为"重定向".

但是要想重定向首先要杀死启动的进程

举例如下:

🚩开放端口号

程序运行起来后,就需要开放端口号

如果外网需要访问该服务,需要先服务器防火墙开放对应的端⼝号

本着服务器安全的原则,云服务器上的端口非必要不开启.

⽐如常见端⼝号:数据库3306,Redis6379,尽可能避免开放,而是采⽤其他⽅式来连接,⽐如配置隧道的⽅式

接下来以华为云服务器举例:

1. 进入防火墙管理页面(也有可能是安全组)

2. 添加规则(在项目中默认的是8080端口,所以需要把8080端口号开放进来)

通过公网IP进行访问:

但是,现在点击登录的话,会显示"密码错误",因为在程序中的数据库是通过md5进行加密的,在Linux中的数据库是明文显示的

在xshell界面中,也会有相应日志显示:

只需要对其进行修改即可:

此时,项目就可以正常运行了:

当前是采用短暂运行方式进行操作的。

🌴杀掉进程

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

 1. 查看当前服务的进程

​编辑

​编辑

上图119256就是该服务的进程

2. 杀死进程  

  

🌳常见问题

⼀个程序的正常运行,需要程序的正确和环境的正确.同样的代码在Windows上可以运行成功,不⼀定在Linux上运⾏成功.

不同的系统对代码的理解和止持是不同的.⽐如Windows系统对MySQL不区分大小写,Linux区分大小写

服务不能正常访问的原因有很多,主要分以下⼏⽅⾯

服务未启动

  • 使⽤ ps -ef|grep java 查看程序是否在运⾏
  • 使⽤ 相应的访问界面 看下是否有返回html⻚⾯,

如果有返回,说明程序启动成功了,考虑端⼝未开放

如果未启动成功,需要查看对应的⽇志,根据原因来分析.

  1. 数据库不存在
  2. 表不存在(区分大小写)
  3. 数据库密码不正确
  4. Jdk安装版本不对,或者未安装
  5. mysql未设置密码

http://www.kler.cn/a/597131.html

相关文章:

  • shell流程控制
  • 操作系统导论——第13章 抽象:地址空间
  • Python网络编程入门
  • C语言入门教程100讲(2)变量与常量
  • 随笔(1)
  • 大模型-提示词工程与架构
  • MySQL Router被HTTP流量击穿
  • linux之 内存管理(1)-armv8 内核启动页表建立过程
  • Python协程调度
  • 一文分清重载与重写:Java 编程基础的关键辨析
  • OBOO鸥柏丨广告机终端控制端KylinOS麒麟、统信UOS/鸿蒙国产系统
  • nextjs使用next-intl要注意
  • 整理和总结微信小程序的高频知识点
  • SQL Server2019安装步骤+使用+解决部分报错+卸载(超详细 附下载链接)
  • 【GeeRPC】项目总结:使用 Golang 实现 RPC 框架
  • 可以高效记录工作生活琐事的提醒APP工具
  • 走进Java:String字符串的基本使用
  • SVN无法弹出账号密码
  • Labview和C#调用KNX API 相关东西
  • C++ --- 多态