传统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.rpm2.安装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_ci4.启动mysql
#设置开机自启并立即启动systemctlenablemysqld&&systemctl start mysqld#查看mysql状态systemctl status mysqld5.修改密码
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。