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

web中间件——Tomcat

文章目录

  • Java
    • Java Web中间件选型
    • JVM-JDK-JRE
    • JDK选型
    • JDK长期支持版本
  • TOmcat基础功能
    • 支持JDK版本
    • 安装Tomcat(yum/apt安装/二进制安装)m
    • tomcat的文件结构和组成
      • 目录结构
      • 配置文件
      • 组件分层和分类
      • 日志文件格式(tomcat vs nginx)
    • Nginx和tomcat对比
    • tomcat处理用户请求流程
  • Tomcat应用部署
    • tomcat的根目录结构
    • 一般业务代码部署流程
    • 打包编译全流程
      • Jar包
      • war包
    • tomcat多虚拟主机(多站点)
      • 多虚拟机配置说明
      • 虚拟机主机配置过程(复制二进制包)
  • JVM相关工具
    • jps
    • jstack
    • jmap
  • 系统负载高完整排查流程
  • 动静分离
    • 什么是动态资源?什么是静态资源?
    • LNMP部署zrlog个人博客(动静分离高可用集群)
  • 前后端分离
    • 前后端
    • 部署node.js
      • 简易使用前端编译

Java

  • java代码
  • 根据开发人员使用选择

Java Web中间件选型

java web 中间件说明应用场景
tomcat开源免费、轻量级、启动速度快、资源占用少中小型 web 应用、开发测试环境
jetty高性能、模块化设计,可嵌入到应用程序中;适合高并发和低延迟场景,支持异步 IO嵌入式系统、微服务架构;云原生应用(如 kubernetes、Docker 环境)
jboss开源、提供企业级功能(如集群、事务管理)复杂企业级应用;金融、电信行业的大型分布式系统
weblogic商业软件,功能全面(高可用、负载均衡、热部署);稳定性强,但配置复杂,成本高大型企业关键业务系统(如银行核心系统);需要 Oracle 数据库深度集成的场景
国产:东方通(TongWeb)国产中间件,符合国内安全及行业标准(如等保);支持国产化软硬件生态(麒麟 OS、龙芯 CPU)政府、军工、金融等对自主可控要求高的领域

JVM-JDK-JRE

image-20251103170921637

  • Java:可移植性强,一份代码处处运行,其他语言一般无法做到这点

  • Jvm:java虚拟机,java代码运行在虚拟机中

    java一般占用系统资源更多.内存,OOM故障(内存不足,内存溢出)

  • JRE:Java运行时环境,Java 运行时环境,提供了 JVM 和 Java 程序运行所需的必备依赖。如果只是想运行 Java 程序,安装 JRE 即可。

  • JDK:Java 开发工具包,包含了JRE,还额外提供了编译、调试、排障等开发用的命令工具。开发者需要 JDK 来编写、编译 Java 代码。

JDK选型

JDK选型说明补充
jdk(oracle jdk)商业版(企业使用收费,个人测试免费)jdk 8 202 之前免费,211之后收费
openjdk开源版本(yum,apt有)
厂商jdk 华为 毕昇 jdk根据厂商选择

oracle jdk下载地址:Java Downloads | Oracle 中国

openjdk下载地址:Archived OpenJDK GA Releases

JDK长期支持版本

官网地址:Oracle Java SE Support Roadmap

版本正式发布日期主要支持截止时间扩展支持截止时间持续支持
8(LTS,长期支持版)2014 年 3 月2022 年 3 月2030 年 12 月无限期
9 - 10(非 LTS 版)2017 年 9 月 - 2018 年 3 月2018 年 3 月 - 2018 年 9 月无此阶段无限期
11(LTS,长期支持版)2018 年 9 月2023 年 9 月2032 年 1 月无限期
12 - 16(非 LTS 版)2019 年 3 月 - 2021 年 3 月2019 年 9 月 - 2021 年 9 月无此阶段无限期
17(LTS,长期支持版)2021 年 9 月2026 年 9 月2029 年 9 月无限期
18 - 20(非 LTS 版)2022 年 3 月 - 2023 年 3 月2022 年 9 月 - 2023 年 9 月无此阶段无限期
21(LTS,长期支持版)2023 年 9 月2028 年 9 月2031 年 9 月无限期
22(非 LTS 版)2024 年 3 月2024 年 9 月无此阶段无限期
23(非 LTS 版)2024 年 9 月2025 年 3 月无此阶段无限期
24(非 LTS 版)2025 年 3 月2025 年 9 月无此阶段无限期
25(LTS,长期支持版)2025 年 9 月2030 年 9 月2033 年 9 月无限期
26(非 LTS 版)2026 年 3 月2026 年 9 月无此阶段无限期
27(非 LTS 版)2026 年 9 月2027 年 3 月无此阶段无限期

具体使用哪个JDK版本,根据代码要求

TOmcat基础功能

支持JDK版本

官方文档:Apache Tomcat® - Which Version Do I Want?

Apache Tomcat 版本支持的 Java 版本
11.0.x 版本17 及以后
10.1.x11 及更高版本
9.0.x 版本8 及更高版本

安装Tomcat(yum/apt安装/二进制安装)m

部署各种服务_凤凰战士芭比Q的博客-CSDN博客

tomcat的文件结构和组成

目录结构

目录文件说明
bintomcat的管理脚本
startup.sh
shutdown.sh
catalina.sh 做jvm优化修改这个文件
confserver.xml 主要配置文件
logging.properties日志功能配置文件
server.xml主要配置
liblib(library)tomcat依赖的目录一般是.jar结尾
logs日志目录一般看业务/应用日志
关键字:error,failed,exception(异常)
webapps站点目录
work加载jvm中的文件信息

范例:

配置文件

注意:配置文件大小写敏感

文件名说明
server.xml主配置文件
web.xml每个 webapp 只有 “部署” 后才能被访问,它的部署方式通常由 web.xml 进行定义,其存放位置为 WEB-INF / 目录中;此文件为所有的 webapps 提供默认部署相关的配置,每个 web 应用也可以使用专用配置文件,来覆盖全局文件
context.xml用于定义所有 web 应用均需加载的 Context 配置,此文件为所有的 webapps 提供默认配置,每个 web 应用也可以使用自已专用的配置,它通常由专用的配置文件 context.xml 来定义,其存放位置为 WEB-INF / 目录中,覆盖全局的文件
tomcat-users.xml用户认证的账号和密码文件
catalina.policy当使用 security 选项启动 tomcat 时,用于为 tomcat 设置安全策略
catalina.propertiesTomcat 环境变量的配置,用于设定类加载器路径,以及一些与 JVM 调优相关参数
logging.propertiesTomcat 日志系统相关的配置,可以修改日志级别和日志路径等

组件分层和分类

image-20251105142408653

顶级组件

Server,代表整个Tomcat容器,一台主机可以启动多tomcat实例,需要确保端口不要产生冲突

服务类组件

Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine

连接器组件

Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议

容器类

Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序

内嵌类

可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内分别定义。

集群类组件

listener、cluster

名称说明
Server服务器,Tomcat 运行的进程实例,一个 Server 中可以有多个 service,但通常就一个
Service服务,用来组织 Engine 和 Connector 的对应关系,一个 service 中只有一个 Engine
Connector连接器,负责客户端的 HTTP、HTTPS、AJP 等协议连接。一个 Connector 只属于某一个 Engine
Engine即引擎,用来响应并处理用户请求。一个 Engine 上可以绑定多个 Connector
Host即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分
Context应用的上下文,配置特定 url 路径映射和目录的映射关系:url => directory

日志文件格式(tomcat vs nginx)

日志(logs/)说明
catalina.日期.log当天tomcat服务日志
catalina.outtomcat服务日志
host-manager.日期host manager管理日志
localhost.日期.log默认主机日志
localhost_access_log.日期.txt当天主机访问日志
manager.日期.log当天manager管理日志

官方文档:Apache Tomcat 9 Configuration Reference (9.0.111) - The Valve Component

说明tomcatnginx
定义访问日志的格式Host 部分的 pattern 定义http 区域 log_format 部分
客户端 ip 地址%h$remote_addr
访问的时间%t$localTime
请求起始行 (请求方法,URL,HTTP)%r$request
状态码%s$status
大小%b$body_bytes_sent
从哪里跳转来的 (用户如何访问网站)%{Referer} i 新增$http_referer
客户端类型,浏览器%{User-Agent} i 新增$http_user_agent
XFF 头记录%{X-Forwarded-For} i 新增$http_x_forwarded_for

Nginx和tomcat对比

tomcat vs ngx 对比tomcatngx
web 端口Connector=8080listen 80/443
站点 / 虚拟主机 部分server {} 部分
域名name=“localhost”server_name
站点目录appBase=“webapps”root
自动解压 (war 包解压目录) zip 压缩包unpackWARs=“true”
自动部署 (加载 vm)autoDeploy=“true”

tomcat处理用户请求流程

①连接建立
用户通过浏览器访问 http://www.example.com:8080/api/data,请求到达 Tomcat 的 Connector(监听 8080 端口)。②协议处理
Connector 解析 HTTP 协议,生成 Request 和 Response 对象。③虚拟主机匹配
请求被传递到 Engine,根据 Host 头匹配 <Host name="www.example.com">。④应用路径路由
在匹配的 Host 中,根据 URL 路径 /api/data 查找 <Context path="/api">,定位到 /data/webapps/api 目录下的应用。⑤Servlet 处理
应用内部的 web.xml 或注解配置的 Servlet 根据剩余路径 /data 处理请求。⑥响应返回
处理结果通过 Connector 返回客户端。

Tomcat应用部署

tomcat的根目录结构

nginx

Nginx 部署多个网站应用(如 eshop、forum)的核心逻辑:以统一网站根目录(如 /data/nginx/html)为基础,主应用(eshop)直接部署到根目录,其他应用(forum)部署到根目录下的对应子目录,实现多应用共存

tomcat

Tomcat 部署多 Web 应用(如 eshop、forum)的核心规则是 “目录即应用”,以 webapps 为基础目录,ROOT 目录对应默认主站,其他子目录对应独立应用,支持虚拟主机自定义站点目录

tomcat部署规则

  • 主应用(eshop):解压文件放入 $CATALINA_BASE/webapps/ROOT/,对应访问路径 http://localhost/
  • 其他应用(forum):解压文件放入 $CATALINA_BASE/webapps/[应用名]/(如 forum/),对应访问路径 http://localhost/[应用名]/(如 http://localhost/forum/

tomcat自动部署

  • Tomcat 的 自动部署(Auto-Deploy)功能,默认开启,会自动监测 webapps 目录下的 WAR 包并解压为同名目录,旧目录若存在则覆盖

一般业务代码部署流程

image-20251103191801319

war或jar如何部署

war处理

war包一般需要tomcat(webapps)。jdk,tomcat+war例如:memtest.war
把war包移动到webapp下
查看日志catalina.out
浏览器访问 http://ip:8080/memtest/meminfo.jsp

jar包处理

jar包直接运行(jar包内部塞了一个tomcat或jetty)。jdk+jar
java -jar xxx.jar 启动应用(业务)或其他选项jar包 运行时候在jar包所在目录(相对路径)
#前台运行(测试)
java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/code/nginx/#后台运行(正式)或交给systemctl运行
nohup java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/code/nginx/ &##开机自启动
#方案01 最简单启动命令写道/etc/rc.local#方案02 书写jar包管理脚本,systemctl调用脚本
1.写脚本(核心case语句)
bash /xxx/xxx/nginxwebui.sh start   运行
bash /xxx/xxx/nginxwebui.sh stop    关闭指定的服务
bash /xxx/xxx/nginxwebui.sh restart 先关闭然后启动
bash /xxx/xxx/nginxwebui.sh status  检查是否允许,如果允许显示pid
2.写服务启动配置文件
cat /lib/systemd/system/tomcatwebui.service
[Unit]
Descripton=nginx webui
Afer=network.target[Service]
Type=forking
ExecStart=bash /xxx/xxx/nginxwebui.sh start
ExecStop=bash /xxx/xxx/nginxwebui.sh stop[Install]
WantedBy=multi-user.target

打包编译全流程

Jar包

(1)安装tomcat、jdk、maven

tomcat和jdk安装:部署Tomcat11(Kylinv10sp3、Ubuntu2204、Rocky9.3)_ubuntu部署tomcat11-CSDN博客

maven下载地址:Download Apache Maven – Maven

maven镜像_maven下载地址_maven安装教程-阿里巴巴开源镜像站

#1.安装tomcat和jdk
#2.安装maven软件包
yum install -y wget;wget https://dlcdn.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz -P /download#3.解压maven二进制包
tar -zxvf /download/apache-maven-3.9.11-bin.tar.gz -C /usr/local/#4.设置软链接简化路径
ln -s /usr/local/apache-maven-3.9.11/ /usr/local/maven#5.配置环境变量,并查看maven版本
echo 'export PATH=$PATH:/usr/local/maven/bin' >> /etc/profile
mvn --version#6.配置maven编译加速
#mvn编译本质下载代码需要的jar包依赖,整合依赖生成war包/jar包
#mvn默认从官网下载,速度很慢
#配置maven阿里云加速
#打开 Maven 的配置文件(在maven安装目录的conf/settings.xml)
#在<mirrors></mirrors>标签中添加 mirror 子节点:
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>

(2)编译nginxwebui

官网gitee仓库:nginxWebUI.

#1.下载nginxWebUI-master.zip源码包
#2.解压
unzip nginxWebUI-master.zip
cd nginxWebUI-master
#2.使用mvn编译
mvn clean package
#3.运行编译的文件with assembly file: /root/nginxWebUI-master/target/nginxWebUI-4.3.4.jar
#前台测试运行
java -jar -Dfile.encoding=UTF-8 nginxWebUI-4.3.4.jar --server.port=8848 --project.home=/app/code/nginx/
#4.使用curl测试访问
curl http://10.0.0.108:8848

(3)设置开机自启动

#1.把jar包移动到站点目录
mv nginxWebUI-4.3.4.jar /app/code/nginx/
#2.编写脚本
cat > /server/scripts/nginxwebui.sh <<'EOF'
#!/bin/bash
#############################################################################
# File Name: /server/scripts/nginxwebui.sh
# Version: V1.0
# Author: csq
# Organization: blog.chenshiquan.xyz
# Desc: 
#############################################################################
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/jdk21/bin:/usr/local/maven/bin:/root/bin#1.vars
service=nginxWebUI-4.3.4.jar
dir=/app/code/nginx/
choose=$1
port=8848
log_file=${dir}nginxwebUI.log
time=`date +%F_%T`#2.函数部分
##日志函数
function logsng() {msg="$*"echo "$*" >> ${log_file}
}##开启服务脚本
function srv_start() {# 目录检查:目录不存在则记录日志并退出if [ ! -d "${dir}" ]; thenlogsng "start [Failed] [${time}] 目录 ${dir} 不存在"echo "错误:目录 ${dir} 不存在"return 1fi# jar文件检查:文件不存在则记录日志并退出if [ ! -f "${dir}${service}" ]; thenlogsng "start [Failed] [${time}] 文件 ${dir}${service} 不存在"echo "错误:文件 ${dir}${service} 不存在"return 1fi# 检查服务是否已运行pid=$(ps -ef | grep -w "${service}" | grep -v grep | awk '{print $2}')if [ -z "${pid}" ]; then  # 服务未运行(pid为空),执行启动cd ${dir} || return 1  # 切换目录失败则退出nohup java -jar -Dfile.encoding=UTF-8 ${service} \--server.port=${port} --project.home=${dir} >/dev/null 2>&1 &# 检查启动结果if [ $? -eq 0 ]; thenlogsng "start [OK] [${time}] ${service} 启动成功"echo "${service} 启动成功"elselogsng "start [Failed] [${time}] ${service} 启动失败"echo "${service} 启动失败"fielse  # 服务已运行(pid非空),提示已运行logsng "start [Failed] [${time}] ${service} 已运行(pid: ${pid})"echo "${service} 已运行(pid: ${pid})"fi
}##关闭服务脚本
function srv_stop() {#1.pidpid=$(ps -ef | grep -w "${service}" | grep -v grep | awk '{print $2}')#2.是否存在pidif [ -n "${pid}" ]; then#3.存在则关闭kill pidkill -9 ${pid}if [ $? -eq 0 ];thenlogsng stop [OK] [${time}] ${service}elselogsng stop [Failed] [${time}] ${service}fifi
}##重启
function srv_restart() {srv_stopsleep 1srv_start
}##状态
function srv_status() {#1.pidpid=$(ps -ef | grep -w "${service}" | grep -v grep | awk '{print $2}')pid_cnt=$(ps -ef | grep -w "${service}" | grep -v grep | wc -l)#2.是否存在pidif [ ${pid_cnt} -ge 1 ];thenecho "running [OK] [${pid}] ${service}"logsng "running [OK] [${pid}] [${time}] ${service}"elseecho "stopped [Failed] [${time}] ${service}"logsng "stopped [Failed] [${time}] ${service}"fi
}#3.case语句部分
case "$choose" instart)    srv_start   ;;stop)     srv_stop    ;;restart)  srv_restart ;;status)   srv_status  ;;*)        echo "input error" ;;
esac
EOF#3.配置启动文件
cat > /usr/lib/systemd/system/nginxwebui.service <<EOF
[Unit]
Description=nginx webui
After=network.target
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/bin/bash /server/scripts/ngxwebui.sh start
ExecStop=/bin/bash /server/scripts/ngxwebui.sh stop
[Install]
WantedBy=multi-user.target
EOF#4.设置开机自启动并开启服务,查看状态
systemctl daemon-reload && systemctl enable --now nginxwebui && systemctl status nginxwebui#5.放行8848端口
firewall-cmd --add-port=8848/tcp --permanent
firewall-cmd --reload

(4)浏览器访问

设置完用户名密码,登陆

image-20251103215857583

war包

#1.war包移动到tomcat根目录下的webapps中
mv memtest.war /usr/local/tomcat/webapps/
#2.查看war包解压内容
cd /usr/local/tomcat/webapps/
ls memtest
meminfo.jsp  META-INF
#3.访问测试
curl http://10.0.0.108:8080/memtest/meminfo.jsp

tomcat多虚拟主机(多站点)

Tomcat 的 “多虚拟主机(多站点)” 是指在同一台 Tomcat 服务器上,通过配置多个Host组件,实现同时部署多个独立网站(站点),并通过不同的域名(或端口)区分访问。

多虚拟机配置说明

  • name 必须是主机名,用主机名来匹配
  • appBase 当前主机的网页根目录,是相对于$CATALINA_HOME,也可以使用绝对路径
  • unpackWARs 是否自动解压war格式
  • autoDeploy 热部署,自动加载并运行应用

虚拟主机配置过程(使用配置文件)

  • 再添加和配置一个新的虚拟主机
#1.添加虚拟主机
vim /usr/local/tomcat/conf/server.xml
#在默认的<Host>
.....
.....
#</Host>下面添加<Host name="test.chenshiquan.xyz" appBase="csqwebapp"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access" suffix=".log"pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot;&quot;%{User-Agent}i&quot; &quot;%{X-Forwarded-For}i&quot;" /></Host> 

虚拟机主机配置过程(复制二进制包)

#思路:将tomcat安装包解压多份进行配置
#默认tomcat安装目录还有一个虚拟主机主机
#第二个虚拟主机主机
mkdir -p /app/code
tar -zxvf /download/apache-tomcat-9.0.111.tar.gz -C /app/code/
mv /app/code/apache-tomcat-9.0.111/ /app/code/tomcat8081
sed -i 's/8080/8081/g' /app/code/tomcat8081/conf/server.xml 
sed -i 's/8005/8006/g' /app/code/tomcat8081/conf/server.xml 
echo "8081" > /app/code/tomcat8081/webapps/ROOT/index.jsp
/app/code/tomcat8081/bin/startup.sh
#第三个虚拟主机主机
tar -zxvf /download/apache-tomcat-9.0.111.tar.gz -C /app/code/
mv /app/code/apache-tomcat-9.0.111/ /app/code/tomcat8081
sed -i 's/8080/8082/g' /app/code/tomcat8082/conf/server.xml 
sed -i 's/8005/8007/g' /app/code/tomcat8082/conf/server.xml 
echo "8082" > /app/code/tomcat8082/webapps/ROOT/index.jsp
/app/code/tomcat8082/bin/startup.sh#测试访问
[root@web04 ~]# curl 10.0.0.109:8081
8081
[root@web04 ~]# curl 10.0.0.109:8082
8082

JVM相关工具

JVM

命令说明
jps查看所有 jvm 进程
jinfo查看进程的运行环境参数,主要是 jvm 命令行参数
jstat对 jvm 应用程序的资源和性能进行实时监控
jstack查看所有线程的运行状态
jmap查看 jvm 占用物理内存的状态
jhat +UseParNew(注:jhat 用于分析 jmap 生成的堆转储文件,UseParNew 是垃圾收集器参数)
jconsole图形工具
jvisualvm图形工具

jps

查看java进程信息

jps -lvm
#根据业务名字(jar包名字过滤,目录名字,产品名字)
#选项
jps [-q] [-mlvV] [<hostid>]
-q:静默模式;
-v:显示传递给jvm的命令行参数;
-m:输出传入main方法的参数;
-l:输出main类或jar完全限定名称;
-v:显示通过flag文件传递给jvm的参数;

jstack

查看指定的java进程的线程栈的相关信息

jstack [-l] <pid>
jstack -F [-m] [-l] <pid>
#选项
-l:long listings,会显示额外的锁信息,因此,发生死锁时常用此选项
-m:混合模式,既输出java堆栈信息,也输出C/C++堆栈信息
-F:当使用"jstack -l PID"无响应,可以使用-F强制输出信息
  • ps aux进程有L标记 线程的意思
  • top -Hp pid 显示线程信息
  • pstree -pu
  • ps -efL
线程状态描述
NEW线程已创建但尚未启动(未调用 start() 方法)。
RUNNABLE线程正在运行或准备运行,等待 CPU 调度。
BLOCKED线程被阻塞,等待获取监视器锁(例如,进入同步块或方法)。
WAITING线程无限期等待,直到被其他线程显式唤醒(例如,调用 Object.wait())。
TIMED_WAITING线程在指定时间内等待(例如,调用 Thread.sleep()Object.wait(timeout))。
TERMINATED线程已执行完毕,终止状态。

jmap

用于查看堆内存的使用状态

(1)导出jvm信息 使用情况
jmap -heap pid #导出jvm信息 使用率。<==jdk8之前
jhsdb jmap --heap --pid xxx   #jdk8之后(2)保存jvm文件(类似于windows蓝屏信息)。然后使用MAT(memory ana tools)分析
jmap -dump:format=b,file=/root/xxx.hprof  pidwindows安装MAT进行分析,MAT依赖jdk

系统负载高完整排查流程

流程

先排查与解决故障

后续:

  • 根因分析
    • 故障现象
    • 故障排查流程
    • 故障如何解决
    • 预防故障

image-20251105084021415

动静分离

image-20251105164802982

什么是动态资源?什么是静态资源?

静态资源:
是什么:静态内容是固定不变的资源,内容不会因为用户请求、时间等条件变化而改变,本质是“预先生成的固定文件”
怎么来的:静态资源通常是由开发者预先创建并保存为具体文件比如前端开发编写的 CSS 样式表、JS 脚本、纯 HTML 页面比如用户上传的图片、视频、音频等
静态资源由nginx自行处理动态资源:
是什么:动态资源是内容随请求条件动态生成的资源,其内容依赖用户身份、请求参数、数据库数据、时间等因素,每次请求可能返回不同结果,本质是 “服务器实时计算的动态内容”
怎么来的:当用户发送请求(如访问 “我的订单” 页面、搜索商品),服务器接收请求后,通过后端语言(如 PHP、Python、Java)或框架(如 Django、Spring)处理逻辑;
可能需要查询数据库(如获取用户的订单数据、商品库存)、解析请求参数(如搜索关键词)、结合时间或用户身份(如登录状态);
最终动态生成内容(如 HTML 页面、JSON 数据),并返回给用户动态资源的核心作用是提供个性化、实时性的内容,满足交互和动态需求

LNMP部署zrlog个人博客(动静分离高可用集群)

image-20251105204717212

LNMT部署zrlog个人博客(动静分离集群)-CSDN博客

前后端分离

前后端分离部署学之思在线考试系统-CSDN博客

前后端

  • 前端:看到页面(小程序,app,网站)框架vue
  • 后端:业务逻辑(登陆,注册,下单,购物,打赏…)java(springboot)
  • 前后端源代码->编译->生成可以部署的内容(前端html页面,后端java(war,jar))

image-20251105164513103

image-20251105165005748

部署node.js

image-20251105165252330

官网:Node.js — Download Node.js®

#1.下载node.js  v16.19.1
#2.解压到/usr/local/下
tar -xf https://nodejs.org/dist/v24.11.0/node-v24.11.0-linux-x64.tar.xz  -C /usr/local/
#3.软链接简化路径
ln -s /usr/local/node-v24.11.0-linux-x64/ /usr/local/node
#4.修改所有者
chown -R root:root /usr/local/node-v24.11.0-linux-x64/
#5.配置PATH环境变量
echo 'export PATH=$PATH:/usr/local/node/bin' >> /etc/profile
source  /etc/profile
#6.配置npm国内下载源
npm config set registry https://registry.npmmirror.com
cat ~/.npmrc  #源存放路径
#7.检查node.js版本和npm版本
npm --version && node --version

简易使用前端编译

编译部署中国制霸生成器

官网:github.com/itorr/china-ex

#1.下载中国制霸生成器的前端包
wget https://github.com/itorr/china-ex/archive/refs/heads/main.zip -P /download/
#2.解压进行编译
unzip /download/main.zip -d /download/
cd /download/china-ex-main/#3.package.json 配置文件
#下载前端依赖各种js文件。很大 下载到代码目录的node_modules目录下
npm install #简写npm i
#4.打包编译
npm run build
#5.生成在dist目录(未来不一定都是这个目录)
[root@web03 /download/china-ex-main]# ll dist/
总用量 16
-rw-r--r-- 1 root root 2385 115 03:34 脚本.js
-rw-r--r-- 1 root root 2314 115 03:34 样式.css
-rw-r--r-- 1 root root    0 115 03:34 字体.woff
-rw-r--r-- 1 root root 5501 115 03:34 index.html
#6.传输到web nginx站点目录
cp -rf dist/* /app/code/china/
#7.配置nginx站点配置文件
cat > /etc/nginx/conf.d/china.chenshiquan.xyz.conf <<EOF
server {listen 80;server_name china.chenshiquan.xyz;root /app/code/china/;location / {index index.html;}
}
EOF
#8.重启加载nginx配置文件
systemctl reload nginx

浏览器访问windows 添加hosts解析,10.0.0.108 china.chenshiquan.xyz

image-20251105134825472

http://www.dtcms.com/a/614695.html

相关文章:

  • Linux中管理员和一般用户的用法小结
  • html手机网站模板html5网页设计教程
  • 【Mac】开发环境使用/维护
  • 网站代码设计惠州网站建设排名
  • 精美网站建设wordpress gae
  • 【STM32MP157 异核通信框架学习篇】(10)Linux下Remoteproc相关API (下)
  • 企业建站服务退役军人215专业品牌网站建设
  • 杭州模板网站建站做国外夏令营的网站
  • 基于SpringBoot的房屋租赁管理系统【协同过滤推荐算法+可视化统计+合同签署】
  • 【MySQL | 基础】函数
  • Java Set
  • (60页PPT)数据治理与数据安全防护方案(附下载方式)
  • DSAC-T算法实现控制倒立摆
  • 学校网站建设需要多少钱wordpress添加首页导航
  • 开发区网站制作公司wordpress+系统安装
  • 什么是性能测试?它的分类?(负载测试、压力测试、并发测试等)
  • 4.3 Go 协程:goroutine
  • 查询缓存8.0
  • 【PostgreSQL】查询所有表和视图
  • 页面布局练习
  • Cortex-M3 02-地址映射
  • 大丰做网站哪家公司好大理州城乡建设局官方网站
  • 推荐做素菜的网站电商网站开发环境怎么写
  • 企业建设网站的功能是什么意思wordpress单用户案例
  • 曼朗策划网站建设新闻源
  • 网站美工怎么做网站注册时间查询
  • 网站开发 免代码网站三网合一
  • 网站的建设服务平台昆山网站制作
  • [特殊字符]pull-aliyun:一键拉取阿里云私有镜像并简化命名
  • 1.2 学习和使用汇编语言的目的