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

传统javaweb项目部署

项目架构图

项目介绍

JspGou 是老式 war 包项目,无内置 Web 容器,依赖外部独立 Tomcat 才能运行;

Blog 是 SpringBoot 可执行 jar 项目,自带嵌入式 Tomcat,服务器只装 JDK 就能直接启动,不需要单独安装、配置 Tomcat。

项目搭建

一、环境准备

准备一台服务器,2核心2线程,4G的服务器;

我们一般有了新的项目要部署就会申请服务器,一般我们拿到一台新的服务器都要对这个服务器进行一个初始化,比如IP的配置,防火墙的配置,还有账号密码的设置等,我这里搞了一个简单的初始化脚本

#!/bin/bash# 设置要分配的IP地址、子网掩码和默认网关echo'正在关闭防火墙'systemctl stop firewalld&&systemctl disable firewalldecho'正在关闭networkmanager'systemctl stop NetworkManager&&systemctl disable NetworkManagerecho'正在关闭selinux'setenforce0&&sed-ri's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/configecho'正在配置网卡'ip_address="192.168.255.163"subnet_mask="255.255.255.0"default_gateway="192.168.255.2"networkfile=/etc/sysconfig/network-scripts/ifcfg-ens32if[-f"$networkfile"];thenrm"$networkfile"fi# 编写ifcfg-ens32文件并将其复制到相应目录中cat>>/etc/sysconfig/network-scripts/ifcfg-ens32<<EOF TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="yes" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens32" UUID="2a28f6f8-c188-4415-b960-42b19519a04b" DEVICE="ens32" ONBOOT="yes" IPADDR=$ip_addressNETMASK=$subnet_maskGATEWAY=$default_gatewayDNS1=114.114.114.114 DNS2=223.5.5.5 EOFecho'正在安装基础软件包'yum-yinstallwgetlrzszunzipgziptelnetecho'配置基础环境变量'cat>>/etc/profile<<EOF if [$(id-u)== 0 ]; then export PS1='[\[\e[31;1m\]\u\[\e[m\]@\h \w]# ' else export PS1='[\[\e[34;1m\]\u\[\e[m\]@\h \w]$ ' fi alias ll='ls -lh --color=auto' alias grep='grep --color' alias free='free -m' alias df='df -h' alias du='du -h' alias vi='vim' EOFcat>>~/.vimrc<<EOF "设置高亮 syntax on "显示行号 set number "自动缩进功能 set autoindent "启用鼠标支持 "set mouse=a "vim新打开.sh文件自动添加一下内容 autocmd BufNewFile *.sh exec ":call SetComment()" func SetComment() if expand("%:e")=='sh' call setline(1,'#!/bin/bash') call setline(2,'#Author: xxx') call setline(3,'#Create time:'.strftime("%Y-%m-%d")) endif endfunc EOFsource/etc/profile systemctl restart networkecho'脚本执行完毕'

没有执行权限,给他一个执行权限

chmod +x init.sh

配置yum源:

步骤1:备份原有仓库配置(关键!防止出错无法恢复) 修改系统配置前,务必备份原始文件,避免误操作后无法回滚:sudomv/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 步骤2:下载阿里云YUM源配置文件 根据系统已安装的工具(curl 或 wget),选择以下任一命令执行: 若系统有 curl:sudocurl-o/etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 若系统有 wget:sudowget-O/etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 提示:若两种工具都没有,可先通过系统自带的基础源临时安装(如sudoyuminstall-ycurl),再执行上述命令。 步骤3:清理旧缓存 并重建新缓存 新的YUM源配置需通过清理旧缓存、重建新缓存来生效,避免旧配置干扰:# 清理所有YUM缓存sudoyum clean all# 基于新源重建缓存(加载阿里云源的包信息)sudoyum makecache 步骤4:设置YUM跳过失效仓库(可选但推荐) 当部分仓库失效时,YUM默认会中断 操作。通过以下命令设置“跳过失效仓库”,确保整体流程不中断:sudoyum-config-manager--save--setopt=<repoid>.skip_if_unavailable=true 说明:将<repoid>替换为具体仓库ID(如 CentOS-Base),若需对所有仓库生效,可批量配置或省略具体ID(视系统版本而定)。 步骤5:验证YUM源是否配置成功 执行简单的包安装命令(如安装 wget),测试是否能正常从阿里云源下载:sudoyuminstall-ywget

二、项目解析

blog项目是使用Java开发,使用了springboot框架进行开发的

项目部署环境:jdk8+mysql5.7+redis5.0。注意:如果部署项目中,需要mysql数据库或者其他数据如redis等中间件时,我们应该优先运行中间件

三、数据库的部署

1.下载rpm包
mkdir/opt/soft/mysql-p&&cd/opt/soft/mysqlwgethttps://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-client-5.7.36-1.el7.x86_64.rpmwgethttps://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-common-5.7.36-1.el7.x86_64.rpmwgethttps://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-devel-5.7.36-1.el7.x86_64.rpmwgethttps://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-libs-5.7.36-1.el7.x86_64.rpmwgethttps://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-libs-compat-5.7.36-1.el7.x86_64.rpmwgethttps://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-server-5.7.36-1.el7.x86_64.rpm
2.安装mysql
yum-yinstallmysql-community*
3.配置

安装完成后我们不要急着启动,先给mysql来一个自定义配置

备份原来的配置,然后添加新的配置

cp /etc/my.cnf /etc/my.cnf_bak

mv /etc/my.cnf /etc/my.cnfbak

vim /etc/my.cnf

#客户端设置 [client] #mysql服务配置 [mysqld] #服务器监听端口,默认为3306 port=3306 #数据存储位置 datadir=/var/lib/mysql #Unix套接字文件路径 socket=/var/lib/mysql/mysql.sock #MySQL服务唯一标识,开启二进制日志,做主从时需要 server-id=1 log-bin=mysql-bin #不会跟随符号链接 symbolic-links=0 #日志路径 log-error=/var/log/mysqld.log #服务进程pid文件路径 pid-file=/var/run/mysqld/mysqld.pid #mysql字符集设置 character_set_server=utf8mb4 #mysql比较规则设置 collation_server=utf8mb4_general_ci
4.启动mysql
#设置开机自启并立即启动systemctlenablemysqld&&systemctl start mysqld#查看mysql状态systemctl status mysqld
5.修改密码

yum安装的mysql会在日志中给我们生成一个临时密码,我们需要用这个临时密码去修改成我们自己的密码

#查看临时密码grep'password'/var/log/mysqld.log#修改mysql密码mysqladmin-uroot-p'临时密码'password'需要修改的密码'mysqladmin-uroot-p'b:4omwydI1Se'password'Admin123.'
6.授权

mysql安装完成后还需要给一个登录权限不然无法用IP连接

登录mysql

mysql-uroot-p-查看一下用户是否具有权限SELECTuser,host,authentication_stringfrommysql.user;

授权

--语法GRANT权限列表ON库名.表名TO'用户名'@'客户端主机ip'IDENTIFIEDBY'密码'WITHGRANTOPTION;GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'Admin123.'WITHGRANTOPTION;-- 最后刷新FLUSHPRIVILEGES;
7.创建数据库

当我们拿到项目后,如果项目没有提供数据库需要创建的名称,我们可以通过项目的配置文件中查看,blog目录结构后面有讲解

spring:datasource:#这里能看到我们需要的数据库名字叫做blogurl:jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8username:rootpassword:Admin123.driver-class-name:com.mysql.cj.jdbc.Driver

四、jdk安装

下载好jdk上传到服务器

#创建文件夹,上传jdk mkdir /opt/soft/jdk && cd /opt/soft/jdk #创建Java文件夹 mkdir /usr/local/java #上传jdk后解压 unzip jdk1.8.0_121.zip #移动解压后的jdk mv jdk1.8.0_121 /usr/local/java/ #授权 chmod +x /usr/local/java/jdk1.8.0_121/bin/* chmod +x /usr/local/java/jdk1.8.0_121/jre/bin/*

环境变量配置

#vim /etc/profileexportJAVA_HOME=/usr/local/java/jdk1.8.0_121exportJRE_HOME=${JAVA_HOME}/jreexportCLASSPATH=$JAVA_HOME/lib:${JRE_HOME}/lib:$CLASSPATHexportJAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/binPATH=$PATH:$HOME/bin:$JAVA_HOME/bin#刷新环境变量source/etc/profile#查看java版本java-version

五、部署blog

创建文件夹,上传软件包及配置文件

mkdir-p/opt/web/blog&&cd/opt/web/blog

创建好后我们就上传我们的包和相关文件

上传之后我们修改对应的配置文件,假如我们环境是生产环境,我们就要使用生产环境的配置文件,需要在application.yml中修改active: dev为active: pro,修改之后我们再去生产配置文件中修改相关配置

如果这里为active: dev,不想对其进行修改,那么我们就需要使用application-dev.yml,此时application-pro.yml不生效,如果是active: pro那么application-dev.yml不生效。

在yml中修改连接mysql的配置文件

spring:datasource:#localhost修改成具体的IPurl:jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8username:rootpassword:Admin123.driver-class-name:com.mysql.cj.jdbc.Driver

修改完成后我们就可以启动Java程序。Java启动命令

java-jarblog-0.0.1-SNAPSHOT.jar#如果没有报错我们就按ctrl+C停掉,然后使用下面的后台启动

如果没有问题我们的项目就部署完成了,但是java -jar xxx.jar属于前台运行,如果我们关闭窗口进程将自动结束,所以我们需要使用后台运行

nohupjava-jarxxx.jar&nohupjava-jarblog-0.0.1-SNAPSHOT.jar&讲解:nohup表示守护进程&表示后台启动#查看一下进程是否存在ps-ef|grepjava#查看端口是否正常netstat-lntp|grep8080

加了nohup启动日志就会输出到nohup.out中,使用tail -f查看日志是否报错

#查看日志是否正常tail-fnohup.out 或者vim nohup.out直接进去看#如果以上都没有问题了我们就去浏览器进行访问

由于敲这个命令比较麻烦,所以我们可以编写成一个脚本的方式进行启动vim start.sh

使用脚本时需要先停掉原来的Java

#!/bin/bash# 检查Java是否已安装if!command-vjava&>/dev/null;thenecho"错误:Java未安装。请安装Java后再试。"exit1fi# 定义Java应用程序的JAR文件路径JAR_FILE="blog-0.0.1-SNAPSHOT.jar"# 检查JAR文件是否存在if[!-f"$JAR_FILE"];thenecho"错误:在$JAR_FILE找不到JAR文件"exit1fi# 检查Java应用程序是否已经在运行ifpgrep-f"$JAR_FILE"&>/dev/null;thenecho"错误:应用程序已在运行。"exit1fi# 后台启动Java应用程序nohupjava-jar"$JAR_FILE">log/blog.log2>&1&# 获取应用程序的进程IDPID=$!echo"Java应用程序已成功在后台启动,进程ID为$PID。"

脚本授权

chmod+x start.sh#启动脚本./start.sh

日志查看方法

tail-flog/blog.log

如果没有报错即可访问

ip:端口# 端口是8080

这里和我们之前做的jspgou对比:

数据库方面都是一样的,部署数据库,创建数据库,导入数据。

不一样的地方:

  • 我们这次的部署没有使用tomcat
  • 添加环境变量的时候只需要添加jdk的,tomcat的不需要
  • 之前我们项目是存放在tomcat中,现在存放在/opt/web/blog中
  • 之前启动Java服务我们启动的是tomcat,现在启动Java服务使用的java -jar,用的是java命令

最后思考一个问题,为什么jspgou需要tomcat,blog不需要部署tomcat?

  • JspGou 是老式 war 包项目,无内置 Web 容器,依赖外部独立 Tomcat 才能运行;

    Blog 是 SpringBoot 可执行 jar 项目,自带嵌入式 Tomcat,服务器只装 JDK 就能直接启动,不需要单独安装、配置 Tomcat。

http://www.gsyq.cn/news/1621328.html

相关文章:

  • 游戏装备交易小程序开发定制
  • 如何让浏览器直接渲染Markdown文件?这个开源插件提供了完整解决方案
  • 终极指南:如何快速上手UABEA - Unity资源包提取神器完整教程
  • MC74HC165A与PIC18F47K42的SPI扩展输入方案详解
  • 基于ICM-42605和STM32的6DOF运动追踪系统实现
  • 基于Arduino单片机温湿度报警 大棚温湿度采集系统 DHT113(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • AI工作流循环逻辑实现与优化实践
  • 统一接入与算力解耦:基于 Docker + GB28181/RTSP 的边缘计算 AI 视频管理平台架构设计与源码交付实践
  • 百年汾酒的数字化跃迁:Newline重塑跨域协同新中枢
  • PCF8591与TM4C1299KCZAD的混合信号采集方案
  • PrismLauncher-Cracked:三步解锁Minecraft离线账户的终极解决方案
  • 夸克网盘自动转存:5个场景解决你的网盘管理难题
  • 埃及手语实时翻译系统:面向资源受限场景的分层架构实践
  • 遗传算法实战:Python实现N皇后问题求解与调优
  • 如何用NBTExplorer轻松管理你的Minecraft游戏数据
  • VinXiangQi完全指南:让AI成为你的象棋教练,三步开启智能连线新时代
  • 如何快速上手UABEA:Unity资源包提取与编辑的终极指南
  • OpenSpeedy深度解析:Windows游戏加速工具的高级Hook技术实现与优化指南
  • DAC161S997与PIC18F4585构建高精度4-20mA电流环方案
  • ROC曲线与AUC:二分类模型评估的核心原理与实战指南
  • 2026晋中黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • LTE Cat 1bis物联网模块与PIC微控制器的美洲应用方案
  • PCF8591与PIC18F85J10的I2C通信与ADC/DAC应用优化
  • Java后端负载测试全攻略:从单元到集成的性能保障策略
  • 2026合肥黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • 曲辕RPA-企业微信群通知
  • 遗传算法实战:Python手撕100皇后问题
  • 芯界光核获亿元级融资,全光互联平台助力AI算力集群突破功耗时延瓶颈
  • 半导体百科 | 设备维护与预测性维护:从被动抢修到智能预测的实战转型
  • DAC161S997与PIC18LF45K22构建高精度4-20mA电流环方案