1. Java容器
用于存放与运行java代码的环境
java容器 | 说明 |
---|---|
Tomcat | 最常用,较重,功能完善. |
Jetty | 轻量,功能较少. |
Weblogic | 用于Oracle数据库环境使用,Weblogic属于甲骨文 |
东方通 | 国产java容器 |
2. JVM-JRE-JDK
1. JVM: java 虚拟机中,运行java代码的地方
2. JRE:java运行环境 . 提供jvm环境,java命令
3. JDK: java开发环境 , jvm+jre+额外功能
3. 部署JDK
##配置JAVA环境变量,这里是是二进制安装需要配置(yum安装或rpm包方式安装就不需要配置)
mkdir -p /app/tools/ #创建目录
tar xf jdk-8u351-linux-x64.tar.gz -C /app/tools/ ##解压到指定目录
ln -s /app/tools/jdk1.8.0_351/ /app/tools/jdk ##创建软连接
vim /etc/profile ##配置环境变量
export JAVA_HOME=/app/tools/jdk
export PATH=$JAVA_HOME/bin/:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
source /etc/profile ##生效
java -version ##查看版本
4. 部署tomcat
##上传软件包
tar xf apache-tomcat-9.0.52.tar.gz -C /app/tools/ ##解压到指定目录
ln -s /app/tools/apache-tomcat-9.0.52/ /app/tools/tomcat ##创建软连接
/app/tools/tomcat/bin/version.sh ##检查jdk,tomcat信息
5. 启动tomcat
/app/tools/tomcat/bin/startup.sh ##启动
##查看端口和进程
ss -lntup|grep java
ps -ef |grep java
6. Tomcat目录结构
6.1 目录概述
目录 | 说明 |
---|---|
bin | 存放tomcat管理命令 |
conf | tomcat配置文件 |
lib | 依赖与库文件,插件文件 |
logs | 日志目录 |
webapps | 站点目录 |
work | tomcat运行java代码的存放代码的目录 |
6.2 bin
bin目录 | 说明 |
---|---|
statrup.sh | 启动脚本 |
shutdown.sh | 关闭脚本 |
catalina.sh | 核心脚本,配置tomcat优化,jvm优化 |
6.3 conf
conf配置文件 | 说明 |
---|---|
server.xml | tomcat配置文件 |
web.xml | 配置文件,辅助配置 |
6.4 logs日志
logs目录 | 说明 |
---|---|
catalina.out | tomcat应用日志,启动过程,关闭,错误信息 |
catalina.2024-10-20.log | catalina.out的切割日志.按照每天进行切割 |
localhost_access_log.2024-10-20.txt | 访问日志,未来可以重新定义名字和内容 |
6.5 webapps
1.站点目录
2.war包,自动解压,自动部署
7. Tomcat日常管理
7.1书写systemctl管理配置文件进行管理 日常启动与维护
systemctl配置文件的结构 | 说明 |
---|---|
[Unit] | 指定注释信息,依赖(先后顺序) |
Description | 说明与注释 |
After | 在这里指定的服务之后运行. network.target |
[Service] | 用于指定服务开启命令,关闭命令,重启命令 |
Type=notify | 指定类型 simple 或forking即可 |
ExecStart | 服务启动命令 |
ExecStop | 服务关闭命令 |
ExecReload | 重启命令 |
EnvironmentFile | 配置环境变量的文件(一般对于编译安装,二进制安装需要加上) |
[Install] | 内容固定,用于指定运行级别 |
WantedBy=multi-user.target | 运行级别,一般都是多用户模式 |
7.2 tomcat systemctl 配置
#systemctl配置
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat Java Web Container
After=network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh
ExecReload=/app/tools/tomcat/bin/startup.sh && /app/tools/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
##环境变量配置
vim /etc/sysconfig/tomcat
JAVA_HOME=/app/tools/jdk
PATH=$JAVA_HOME/bin/:$JAVA_HOME/jre/bin:/usr/bin/:/usr/sbin/:/usr/local/bin/:/usr/local/sbin/
CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
##加载
systemctl daemon-reload
##启动
ststemctl start tomcat
8. 运行代码
1. 开发人员书写的java代码: java源代码,无法直接部署tomcat中
2. 需要对源代码进行编译: 生成war包或jar包
如何运行java相关软件包 | 说明 |
---|---|
war包 | 需要放在java容器中运行,比如放到tomcat的webapps目录下. (tomcat会自动加载与运行 war包内容) |
jar包 | 不需要java容器,内置tomcat,只需要jdk ,通过java -jar xxx.jar 运行 |
如何编译java源代码:
通过maven,Gradle把java源代码,编译生成war包或jar包.
war包案例,运行memtest.war包案例,放在webapps目录,然后访问即可
jar包案例,运行指定的jar包(nginxwebUI)
yum install -y nginx ##安装nginx
mkdir -p /home/nginxWebUI/ #创建目录
wget -O /home/nginxWebUI/nginxWebUI.jar
https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.4/nginxWebUI-4.2.4.jar ##将来可以把jar包放在指定目录下
java -jar -Dfile.encoding=UTF-8 /home/nginxWebUI/nginxWebUI.jar --server.port=8888 --project.home=/home/nginxWebUI/ >/dev/null & ##访问端口是8888,定向到空并后台运行
9. Tomcat管理端
##修改配置文件
vim /app/tools/tomcat/conf/tomcat-users.xml
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="1" roles="manager-gui,admin-gui"/> ##用户名tomcat 密码:1
</tomcat-users>
##修改代码
cd /app/tools/tomcat/webapps/
sed -i 's#127#\\d+#g' ./host-manager/META-INF/context.xml ./host-manager/WEB-INF/manager.xml ./manager/META-INF/context.xml
输入用户名密码登录管理端
10. 配置文件
/tomcat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
## 8005 shutdown端口,连接这个端口输入shutdown字符,就可以关闭Tomcat.
<GlobalNamingResources> ##配置 管理端认证功能
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Connector port="8080" protocol="HTTP/1.1" ###8080 处理用户的http请求的
connectionTimeout="20000"
redirectPort="8443" /> ##这里的8443是用于处理 https请求.
<Engine name="Catalina" defaultHost="localhost"> ##engine部分,指定默认的虚拟主机
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps" ## 指定localhost作为默认的虚拟主机
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Server>
区别 | tomcat | nginx |
---|---|---|
虚拟主机 | Host部分 | server {} |
域名 | name="域名" | server_name |
端口 | Connector部分 port="8080" | listen 80 |
站点目录 | appBase="webapps" | root /app/code/blog |
自动解压 | unpackWARs="true" | 无 |
自动部署 | autoDeploy="true" 加载到jvm中 | 无 |
日志目录 | <value 部分directory=logs> | access_log /var/log/nginx/access.log main; |
日志格式 | <value 部分parten=> | log_format main |
11. Tomcat部署zrlog应用
##先修改主机host部分
<Host name="zrlog.oldboylinux.cn" appBase="webapps"
unpackWARs="true" autoDeploy="true"
11.1 数据库
##在10.0.0.51 mariadb数据库
grant all on zrlog.* to 'zrlog' @'172.16.1.%' identified by '1'; ##创建用户
show databases ;
select user,host from mysql.user;
11.2 部署代码
##改名为zrlog.war后 移动到webapps目录
[root@tomcat_web01 ~]# ll /app/tools/tomcat/webapps/
total 11336
drwxr-x--- 15 root root 4096 Oct 20 13:44 docs
drwxr-x--- 7 root root 99 Oct 20 13:44 examples
drwxr-x--- 6 root root 79 Oct 20 13:44 host-manager
drwxr-x--- 6 root root 114 Oct 20 13:44 manager
drwxr-x--- 3 root root 41 Oct 20 14:38 memtest
-rw-r--r-- 1 root root 643 Oct 20 14:37 memtest.war
drwxr-x--- 8 root root 111 Oct 20 16:39 ROOT
-rw-r--r-- 1 root root 11596673 Oct 20 16:34 zrlog.war
浏览器解析访问:http://zrlog.oldboylinux.cn:8080/zrlog
前台: http: zrlog.oldboylinux.cn:8080/zrlog/
后台管理: http: zrlog.oldboylinux.cn:8080/zrlog/admin/
11.3 接入nginx
#nginx配置文件
server{
listen 80;
server_name zrlog.oldboylinux.cn;
error_log /var/log/nginx/zrlog/error_log notice;
access_log /var/log/nginx/zrlog/access_log main;
location /{
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
nginx -t
systemctl reload nginx
11.4 优化
我们会发现用户访问的时候需要加上路径才可以,http://zrlog.oldboylinux.cn//zrlog,
ROOT 用户访问的时候不加上路径,直接访问文件,就会访问ROOT下面的内容
应用建议: 把应用war包和目录放在ROOT目录下面即可
或者直接把war包名改为ROOT.war 并将原来的ROOT目录删除即可
12. Tomcat多实例
场景:同一台主机上运行多个tomcat
原因:充分利用服务器资源
12.1 准备多个tomcat
tar xf apache-tomcat-9.0.65.tar.gz
cp -r apache-tomcat-9.0.65 tomcat-8081
cp -r apache-tomcat-9.0.65 tomcat-8082
mv tomcat-808* /app/tools/
12.2 修改配置
##修改tomcat-8081
sed -i 's#8005#8006#g' tomcat-8081/conf/server.xml
sed -i 's#8080#8081#g' tomcat-8081/conf/server.xml
##修改tomcat-8082
sed -i 's#8005#8007#g' tomcat-8082/conf/server.xml
sed -i 's#8080#8082#g' tomcat-8082/conf/server.xml
12.3 手动启动
##手动启动
/app/tools/tomcat-8081/bin/startup.sh
/app/tools/tomcat-8082/bin/startup.sh
##写入内容测试
echo java xzb-tomcat 8082 >/app/tools/tomcat-8082/webapps/ROOT/index.jsp
echo java xzb-tomcat 8081 >/app/tools/tomcat-8081/webapps/ROOT/index.jsp
13. 监控功能
tomcat配置中修改tomcat启动的选项.开启jmx远程监控功能
13.1 步骤
C:\Program Files\Java\jdk1.8.0_201\bin\jconsole.exe
13.2 在windows下,通过jdk连接tomcat(模拟监控软件连接)
C:\Program Files\Java\jdk1.8.0_201\bin\jconsole.exe ##具体看自己jdk的位置
13.3 java监控命令
jps -lvm|grep tomcat ##类似于ps -ef grep tomcat
##1. 先过滤出java进程的pid
##2. 查看java进程的线程信息
##3. jstack 1786
##4. 查看java线程状态
jstack 1786 |grep -i state
jmap -heap java-pid ##导出java进程的jvm内存使用情况
14. 搭建前后端分离项目
1. 前端,后端下载的代码是源代码
2. 前端代码需要编译,nodejs环境编译静态资源(html,css,js) >>>>>>nginx中
3. 后端代码java, 通过maven/gradle编译war包/jar包运行
14.1 数据库准备
二进制部署mysql8.0
##准备安装目录
mkdir -p /app/tools/mysql/
##准备数据目录
mkdir -p /app/data/3306/
##安装依赖
yum install -y ncurses ncurses-devel libaio-devel
openssl openssl-devel
##解压到目录中
tar xf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz -C /app/tools/mysql/
##创建软连接
cd /app/tools/mysql/
ln -s mysql-8.0.30-linux-glibc2.12-x86_64/ /app/tools/mysql/mysql
###配置文件,创建用户
useradd -s /sbin/nologin -M mysql
###设置配置文件
vim /etc/my.cnf
[mysqld]
user=mysql ##用户
basedir=/app/tools/mysql/mysql/ ##安装目录
datadir=/app/data/3306/ ##数据目录
port=3306
socket=/tmp/mysql.sock
[client]
socket=/tmp/mysql.sock
##修改目录所有者
chown mysql.mysql /etc/my.cnf
chown -R mysql.mysql /app/data/3306/
#配置PATH环境变量
echo 'export PATH=/app/tools/mysql/mysql/bin:$PATH' >>/etc/profile
source /etc/profile
##检查
mysql -V
##初始化数据库(不需要重复运行,重复运行会报错)
mysqld --initialize-insecure --user=mysql --basedir=/app/tools/mysql/mysql --datadir=/app/data/3306/
##检查
echo $? ##返回值为0表示成功
#拷贝已经准备好的启动管理文件
cp /app/tools/mysql/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
#开机自启动服务,运行服务
systemctl enable mysqld
systemctl start mysqld
##查看端口
ss -lntup
##登录
mysql
##进入数据库
mysql
##创建exam数据库并指定字符集.
create database exam charset utf8mb4;
##创建用户
create user exam@'172.16.1.%' identified with mysql_native_password by '1';
#授权
grant all on exam.* to exam@'172.16.1.%';
#测试
mysql -uexam -p1 -h 172.16.1.52 ##-u接用户名,-p接密码,-h接主机地址
##导入数据库文件
mysql exam <xzs-mysql.sql
14.2 部署后端
##准备前后端目录
mkdir -p /app/code/exam/{front,backend}
##上传代码目录 xzs-3.0.9-war
##解压
cd /app/code/exam/backend/
##创建配置文件
cat> application-prod.yml<<'EOF'
logging:
path: /usr/log/xzs/
spring:
datasource:
url: jdbc:mysql://172.16.1.52:3306/exam? ##数据库地址 useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&allowMultiQueries=true
username: exam ##数据库用户
password: 1 ##数据库密码
driver-class-name: com.mysql.cj.jdbc.Driver
EOF
##后台启动
java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.9.0.jar >start1.log 2>&1 &
##查看是否有8000端口
ss -lntup
##测试与访问
http://10.0.0.9:8000/student 学生端 student 123456
http://10.0.0.9:8000/admin 管理端 admin 123456
14.3 部署前端
##启动nginx,编写配置文件
vim /etc/nginx/conf.d/exam.conf
server{
listen 80;
server_name admin.oldboylinux.cn;
root /app/code/exam/admin;
location / {
index index.html;
}
location /api/ {
proxy_pass http://localhost:8000;
}
}
server{
listen 80;
server_name student.oldboylinxu.cn;
root /app/code/exam/admin;
location / {
index index.html;
}
location /api/ {
proxy_pass http://localhost:8000;
}
}
##测试访问
http://admin.oldboylinux.cn
http://student.oldboylinxu.cn