JavaWeb项目运维部署

2023-10-30

一、项目部署介绍

Web项目网络拓扑图
在这里插入图片描述

部署目录介绍

项目目录:/home/projectName
启动文件目录:/home/projectName/bin
后端项目:/home/projectName/target
Web前端资源 :/home/projectName/dist
备份文件:/home/projectName/backup
nginx配置文件目录:/home/nginx
nginx项目http代理配置:/home/nginx/server666
nginx项目https代理配置:/home/nginx/ssl888

二、网络模型底层原理-Nginx

Nginx简介

nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
nginx的特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx的优点

  1. 高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数
  2. 内存消耗少:在3万并发连接下,开启的10个nginx进程才消耗150M内存(15M*10=150M)
  3. 配置文件非常简单:风格跟程序一样通俗易懂
  4. 成本低廉:nginx为开源软件,可以免费使用。而购买F5
    BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币支持
  5. Rewrite重写规则:能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组
  6. 内置的健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问
  7. 节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头
  8. 稳定性高:用于反向代理,宕机的概率微乎其微
  9. 模块化设计:模块可以动态编译
  10. 外围支持好:文档全,二次开发和模块较多
  11. 支持热部署:可以不停机重载配置文件
  12. 支持事件驱动、AIO(AsyncIO,异步IO)、mmap(Memory Map,内存映射)等性能优化

静态HTTP服务器

首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。
配置:

server {
  listen 80; 
  server_name  localhost;
	location / {
      root   /home/html;
      index  index.html index.htm;
	}
}

正向代理

说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理
在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
在这里插入图片描述

特点:

  1. 代理服务器位于用户与服务器之间
  2. 用户了解访问的服务器到底是谁.(指定了访问的服务器)
  3. 只有用户可以使用正向代理 (客户端代理)
  4. 正向代理保护了用户的信息. 称之为客户端代理

反向代理

反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
在这里插入图片描述

特点:

  1. 代理服务器位于用户和服务器之间
  2. 用户以为代理服务器就是目标服务器.
  3. 用户无需了解真实服务器地址.
  4. 反向代理保护了服务器信息. 称之为服务器端代理

负载均衡

当网站访问量非常大,也摊上事儿了。因为网站越来越慢,一台服务器已经不够用了。于是将相同的应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。
Nginx可以通过反向代理来实现负载均衡。
配置:

upstream myweb {
	server 192.168.0.111:8080; # 应用服务器1
	server 192.168.0.112:8080; # 应用服务器2
}
server {
	listen 80;
	location / {
		proxy_pass http://myweb;
	}
}

虚拟主机

网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。

例如将http://www.aaa.com和http://www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。

配置:

server {
	listen 80 default_server;
	server_name _;
	return 444; # 过滤其他域名的请求,返回444状态码
}
server {
	listen 80;
	server_name www.aaa.com; # www.aaa.com域名
	location / {
		proxy_pass http://localhost:8080; # 对应端口号8080
	}
}
server {
	listen 80;
	server_name www.bbb.com; # www.bbb.com域名
	location / {
		proxy_pass http://localhost:8081; # 对应端口号8081
	}
}
 

Nginx安装配置

(1)安装依赖包
nginx安装依赖GCC、openssl-devel、pcre-devel和zlib-devel软件库。

yum install  pcre pcre-devel -y 
yum install openssl openssl-devel -y 

(2)开始编译

使用./configure --help查看各个模块的使用情况,使用–without-http_ssi_module的方式关闭不需要的模块。可以使用–with-http_perl_modules方式安装需要的模块。

wget http://nginx.org/download/nginx-1.19.4.tar.gz
tar -zxvf nginx-1.19.4.tar.gz 
cd nginx-1.19.4/
./configure --prefix=/data/nginx-1.19.4.tar.gz --user=nginx --group=nginx  --with-http_ssl_module  --with-http_stub_status_module

useradd nginx -M -s /sbin/nologin 
make && make install 
ln -s /data/nginx-1.19.4.tar.gz /data/nginx

(3)启动nginx服务

/data/nginx/sbin/nginx  -t  ##检查配置文件
/data/nginx/sbin/nginx      ##确定nginx服务
netstat -lntup |grep nginx      ## 检查进程是否正常
curl http://localhost           ## 确认结果
/data/nginx/sbin/nginx -s reload ##重新加载配置文件

nginx配置文件

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    #include /home/nginx/nginxConf/*.conf;
}

通常我们不会直接在nginx.conf配置文件上修改,而是通过include直接引入外部配置文件
配置http和https代理访问端口

# http代理配置
server {
    listen       666;
    server_name loc.enzoz.top;
	  port_in_redirect off;
    include /home/nginx/nginxConf/server666/*.conf;	
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

# https代理配置
server {
     listen 888 ssl;
     server_name loc.enzoz.top;
     root html;
     index index.html index.htm;
     ssl_certificate   /home/nginx/nginxConf/cert/8182068_loc.enzoz.top_nginx/8182068_loc.enzoz.top.pem;
     ssl_certificate_key  /home/nginx/nginxConf/cert/8182068_loc.enzoz.top_nginx/8182068_loc.enzoz.top.key;
     ssl_session_timeout 5m;
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_prefer_server_ciphers on;
	   port_in_redirect off;
     include /home/nginx/nginxConf/ssl888/*.conf;
	  error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

配置代理访问项目

	location / {
		alias /home/projectName/dist/;#前端静态资源文件
    }
	location /projectName/ {
		proxy_pass http://127.0.0.1:1666;#后端项目接口地址
	}
	location ^~/api/ {
		proxy_pass http://127.0.0.1:1666/projectName/;#前端配置带api的后端项目接口地址
	}

三、安装JDK

1.下载及解压

下载及解压jdk

wget https://download.oracle.com/otn/java/jdk/8u241-b07/1f5b5a70bf22433b84d0e960903adac8/jdk-8u241-linux-x64.tar.gz?AuthParam=1580274182_a2486bb3808fe518260214c7c09124d6
tar -zxvf jdk-8u241-linux-x64.tar.gz

2.配置环境变量

编辑配置文件

vi /etc/profile

i键进入编辑模式
追加jdk环境变量配置

export JAVA_HOME=/home/software/java/jdk1.8.0_241
export PATH=$JAVA_HOME/bin:$PATH

Esc键退出编辑
输入:wq然后Enter, 保存并退出
执行使修改的配置生效命令

source /etc/profile

3.验证Java环境

输入命令查看环境变量是否配置成功

java -version

四、安装Mysql数据库

官网下载是用于Linux的Mysql安装包

下载及解压:

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 

解压完成后,可以看到当前目录下多了一个解压文件,移动该文件到/usr/local/下,并将文件夹名称修改为mysql。

mv mysql-5.7.24-linux-glibc2.12-x86_64  /usr/local/
cd /usr/local/
mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql

创建数据目录和日志目录

cd mysql
mkdir data
mkdir logs

创建mysql用户

 useradd mysql -s /bin/bash

更改mysql目录下所有的目录及文件夹所属的用户组和用户,以及权限

chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /usr/local/mysql

编译安装并初始化mysql,务必记住初始化输出日志末尾的密码(数据库管理员临时密码)
(root@localhost: K_;fJtj<0T-V)

cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --lower-case-table-names=1

若初始化失败,则添加插件

yum install  libaio-devel.x86_64

编辑配置文件my.cnf

 vi /etc/my.cnf

添加配置如下:

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=600
innodb_file_per_table=1
lower_case_table_names=1
character-set-server=utf8  

skip-grant-tables

log_bin=/usr/local/mysql/logs/mysql-bin.log
long_query_time=0.1
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/logs/mysql-slow.log
general_log=ON
general_log_file=/usr/local/mysql/logs/logmysql.log
server-id=1

[mysqld_safe]
pid-file=/var/run/mariadb/mariadb.pid

!includedir /etc/my.cnf.d

测试启动mysql服务器

/usr/local/mysql/support-files/mysql.server start

添加软连接,并重启mysql服务

ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql 
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
service mysql restart

登录mysql,修改密码,创建新账号

mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
flush privileges;

创建用户

-- 方式1 创建了一个名为:test 密码为:123456 的用户
CREATE USER 'dbName'@'%' IDENTIFIED with mysql_native_password  BY 'dbPassword';
-- 方式2
create user 'dbName'@'%' identified by 'dbPassword';

创建数据库

create database dbName;

授权指定数据库权限

GRANT all privileges ON dbName.* TO 'dbName'@'%';

数据库还原

/usr/local/mysql/bin/mysqldump -h127.0.0.1 -P3306 -uroot -p dbName< /home/projectName/backup/dbName_20220730.sql

mysql数据库备份命令

/usr/local/mysql/bin/mysqldump -h127.0.0.1 -P3306 -uroot -p dbName> /home/proejctName/backup/dbName_20220730.sql

数据库日志还原

/usr/local/mysql/bin/mysqlbinlog "/usr/local/mysql/logs/mysql-bin.000001"  |mysql -u root -p

五、部署springboot后台服务

配置maven编译环境

本地下载apache-maven-3.3.9,并解压
添加环境变量
MAVEN_HOME=D:\Software\maven\apache-maven-3.3.9
PATH增加%MAVEN_HOME%\bin

验证maven环境配置

mvn -version

项目编译

进入后端springboot项目根目录,目录下存在pom.xml,输入以下命令进行编译

mvn clean install

目录下生成target文件夹
文件夹中的xxx.jar即为编译好的springboot项目

项目启动命令

通过以下命令可启动项目

java -jar xxx.jar

部署

将xxx.jar上传到后端项目:/home/project/target目录
添加在bin目录添加启动脚本start.sh,脚本内容如下

#!/bin/sh
APP_NAME=xxx.jar
TARGET_PATH=../target/
#
JAVA_OPTS="-server -Xms128m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xverify:none -XX:+DisableExplicitGC -Djava.awt.headless=true"
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo Stop $APP_NAME Process...
kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo Kill $APP_NAME Process!
kill -9 $tpid
else
echo Stop $APP_NAME Success!
fi

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo $APP_NAME is running.
else
    echo $APP_NAME is NOT running.
fi

rm -f tpid
ls
nohup  java $JAVA_OPTS -jar $TARGET_PATH$APP_NAME --spring.profiles.active=test &
echo $! > tpid
echo Start $APP_NAME  Success!

配置nginx代理

location /projectName/ {
		proxy_pass http://127.0.0.1:1666;#后端项目接口地址
	}

服务端配置代理前端

public void addResourceHandlers(ResourceHandlerRegistry registry) {
        System.out.println("前端目录:" + getVuePath());
        registry.addResourceHandler("/web/**").addResourceLocations("file:" + getVuePath());
        System.out.println("文件上传目录:" + FileUtil.getUploadFileFolder());
        registry.addResourceHandler("/upload/**").addResourceLocations("file:" + FileUtil.getUploadFileFolder());
        System.out.println("临时文件目录:" + FileUtil.getTempFolder());
        registry.addResourceHandler("/temp/**").addResourceLocations("file:" + FileUtil.getTempFolder());
        System.out.println("资源文件路径:" +FileUtil.getStaticFileFolder().getAbsolutePath().concat(File.separator));
        registry.addResourceHandler("/files/**").addResourceLocations("file:" + FileUtil.getStaticFileFolder().getAbsolutePath().concat(File.separator));

    }

六、部署Vue前端项目

配置Node编译环境

本地下载node-v16.14.2-win-x64,并解压
添加环境变量
NODE_HOME=D:\Software\nodejs\node-v16.14.2-win-x64
PATH增加%NODE_HOME%

验证Node环境配置

node -v

npm私仓配置 (私仓具有下载中央仓库的功能,并具有缓存的功能)

npm set registry http://repository.dct99.com:8100/repository/npm-public/

安装pnpm

npm install -g pnpm

安装cli脚手架

pnpm install dc-vue-base-cli -g

项目编译

使用以下命令编译项目

pnpm install --no-frozen-lockfile
pnpm install
pnpm run build

部署

将编译生成的dist打包上传到Web前端资源 :/home/projectName/dist,并解压
配置nginx代理

location /projectName/web/ {
		alias /home/projectName/dist/;#前端静态资源文件
    }

然后就可以通过nginx端口访问项目了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb项目运维部署 的相关文章

随机推荐

  • Java File类boolean setReadable(boolean read_file)方法(带示例)

    File类boolean setReadable boolean read file File Class boolean setReadable boolean read file This method is available in
  • Vue 打包优化之 externals 抽离公共的第三方库

    使用 vue cli 脚手架构建的 Vue 全家桶项目 默认配置下 打包后会把 vue vue router axios vuex element ui echarts 等公共库打包在一起 导致基础 chunk vendor 包体积特别大
  • 日语五十音图快速记忆

    王进 https www bilibili com video av3120841
  • vue实现pdf预览

    需求说明 实现一个通过vue 预览pdf 并支持滚动加载 可下载的插件 一 下载插件 vue pdf npm install save vue pdf 二 创建组件 在src components 下创建pdfAll vue
  • boost::asio 网络传输错误码的一些实验结果(recv error_code)

    boost asio网络传输错误码的一些实验结果 recv error code 错误码很重要 可以由此判断网络连接到底发生了神马事情 从而驱动高层逻辑的行为 只有笼统的错误码判断的网络层是不够规范的 鄙人觉得有些错误码还是需要在网络层就区
  • 单位矩阵的逆矩阵是它本身吗_【2.4】Gauss-Jordan消元法求矩阵的逆

    我们在高斯消元法的时候定义过最主要的一种消元操作 用某行减去另一行的 倍 并且我们知道 这个操作可以通过消除矩阵 左乘系数矩阵 实现 我们还提到某些主元为 的时候可能需要交换矩阵的两行 这个操作可以通过置换矩阵 左乘 实现 总结一下 我们可
  • 真题详解(有限自动机)-软件设计(七十七)

    确定有限自动机 和 不确定有限自动机 解析 M1的A当0的时候 会变成A 也可能变成B 所以M1是不确定有限自动机 M2的A1的时候只会使A 0的时候只会是B B的0只会是B 1的时候只会是C C0的时候只会是B 1的时候只会是A 所以M2
  • 【ubuntu22.04】解决VMware workstation共享文件夹在Ubuntu虚拟机不显示的问题

    ubuntu22 04 解决VMware workstation共享文件夹在Ubuntu虚拟机不显示的问题 问题描述 我按照网络上的教程 在VMware workstation设置了共享文件夹 但是在我的ubuntu虚拟机内无法显示所设置的
  • STM32F407二维码识别(使用内部RAM+无FIFO摄像头OV7670

    STM32F407二维码识别 使用内部RAM 无FIFO摄像头OV7670 要点 1 摄像头配置 无FIFO的摄像头需要注意时钟配置和窗口配置 否则不能出图像 2 DCMI配置 DCMI需要配置成DMA传输模式和使用行场中断进行图像数据采集
  • DNS原理及解析过程详解

    目录 1 域名系统概述 2 因特网的域名结构 3 域名服务器 4 域名的解析原理过程 4 1 DNS解析原理 4 2 域名解析过程 5 查询过程 5 1 演示整个查询过程 5 2 关于DNS解析的TTL参数 5 3 IP地址分类 1 域名系
  • ArcGIS操作小技巧(五)之色带-----横向(水平)图例

    ArcGIS在制图出图时 对于一类要素要有一个变化的过程 使用色带作为图例展示 就显的非常专业 使用水平色带来展示渐变过程 非常的美观 本示例记录了水平色带的创建过程 一 导入数据 设置属性 gt 符号系统 gt 拉伸 gt 标注 二 打开
  • 数据结构:链表的一些经典的OJ题目,环形链表问题

    文章目录 写在前面 链表OJ调试技巧 移除链表元素 反转链表 链表的中间节点 链表中倒数第K个节点 链表分割问题 环形链表 写在前面 本篇为本人学习链表的过程中遇到的典型OJ题 于是整理出来分享思路和便于后续重新学习 每个标题均可跳转至对应
  • OpenFeign 如何设置动态 URL?

    如果你利用 Spring Cloud OpenFeign 进行服务间调用一般会加入这个注解 FeignClient name url http myapp com path 可以看出其中的 url 参数是一个字符串 上面的配置是把它写 死
  • warning: ‘p’ may be used uninitialized in this function

    warning p may be used uninitialized inthis function 原因 你定义了一个指针变量 只能用来保存地址 如果这个地址所指向的空间不是系统分配给它的 那么你对这块内存的赋值是非法的 正确定义 in
  • 安装SQL2012出现[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1

    本人安装SQL2012出现这个错误 找了三天三夜 终于把问题找出来 共享给有需要的人们 不用重新换系统 错误如下 1 此问题是系统 net Framework版本冲突 首先下载 net Framework清理工具 如 cleanup too
  • C++学习(三八八)Doxygen

    Doxygen 是一个 C C Java Objective C Python IDL CORBA 和 Microsoft flavors Fortran VHDL PHP C 和D语言的文档生成器 可以运行在大多数类Unix系统 以及Ma
  • Java中,定时任务Timer使用缺陷

    缺陷主要有2点 1 管理并发任务的缺陷 timer有且仅有一个线程去执行定时任务 如果存在多个任务 且任务时间过长 会导致执行效果与预期不符 2 当任务抛出异常时的缺陷 如果TimerTask抛出RuntimeException Timer
  • Flutter Card踩坑经历

    Card包含的Column的Text文本显示居中 且设置textAlign TextAlign start无效 在Column添加属性 crossAxisAlignment CrossAxisAlignment start
  • Python的MySQL库,fetchone,fetchall,fetchmany的比较

    fetchone 返回一条记录 row 一维元组 如 小李 21 如果没有结果 则返回 None 再次调用fetchone 则继续返回下一条记录 直到为空 fetchmany 返回指定的前n条记录 二维元组 如fetchmany 3 获取前
  • JavaWeb项目运维部署

    一 项目部署介绍 Web项目网络拓扑图 部署目录介绍 项目目录 home projectName 启动文件目录 home projectName bin 后端项目 home projectName target Web前端资源 home p