项目如何部署

我们平常写的项目通常只能在本机上运行,要想项目能被远程访问就不得不谈到项目部署的知识,接下来我通过实际操作的操作让大家来上线一个vue+springBoot项目。

1.在windows上将vue部署到nginx服务器上

介绍nginx

        Nginx是一款高性能的Web服务器和反向代理服务器,具有许多显著的特点和优势,使其在各种应用场景中都能发挥出色。

        首先,Nginx的设计重点在于高并发、高性能和低内存消耗。它采用异步、非阻塞的事件驱动架构,能够高效地处理大量并发连接,尤其是对于静态文件请求,效率极高。同时,在保持高性能的同时,Nginx对系统资源特别是内存的占用率较低,使得在相同的硬件条件下能提供更高的服务能力。

        其次,Nginx作为反向代理服务器,功能强大且灵活。它可以将客户端的请求转发到多个后端服务器,实现负载均衡、缓存和安全性等功能。Nginx提供了丰富的负载均衡策略,如轮询、加权轮询、IP哈希等,可以根据需要选择合适的策略。同时,它还可以根据配置实现HTTP、HTTPS、TCP等多种协议的负载均衡,并支持会话持久化、健康检查等功能。

        此外,Nginx对静态内容处理非常出色,可以快速地处理请求和发送静态内容,如HTML、图片、CSS、JavaScript等。这使得Nginx在提供静态资源服务方面效率很高,可以快速的响应大量的静态请求,减轻其他动态服务器的负担。

        同时,Nginx的配置非常灵活,管理员可以根据需要进行各种配置和优化,以满足不同的需求。例如,它可以配置为缓存一些响应结果,降低后端服务器的负载,提高数据的访问速度,平衡访问压力等。

        最后,Nginx具有广泛的应用场景,不仅可以用于静态文件服务、反向代理和负载均衡,还可以作为缓存服务器、访问控制和安全工具等。其性能优异、高可靠性、丰富的模块化支持和简单易用等优势,使其在互联网应用中得到了广泛的应用。

        总的来说,Nginx是一款功能强大、性能卓越、配置灵活的Web服务器和反向代理服务器,适用于各种需要处理大量并发连接和提供高效服务的场景。

nginx下载与安装

nginx官网:nginx news

进入官网点击download

下载Stable version 版本

 我这里用的是老版本1.18.0

 下载后进行解压

之后打开vscode将完成的前端vue项目打包

 打包完成后会在你的前端工程目录下生成一个dist文件夹将这个文件夹复制到nginx目录下的html中

之后打开nginx的配置文件nginx.conf 进行修改

将注释删除 后:


#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;#监听localhist:8080 前端项目server {listen       80;server_name  localhost;location / {# 换成自己的地址root   B:/workspace/project-02/nginx-1.18.0/html/dist;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {# 换成自己的地址root   B:/workspace/project-02/nginx-1.18.0/html}}}

 把root后换成自己的地址

location / {root   B:/workspace/project-02/nginx-1.18.0/html/dist;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   B:/workspace/project-02/nginx-1.18.0/html}

之后启动nginx就可以正常的访问部署的前端项目了

注意每次更改完配置文件要执行修改重装载命令。

1. 找到nginx的安装目录,在目录上cmd进入黑窗口;

2. 启动

start nginx

3.配置文件nginx.conf修改重装载命令

nginx -s reload 

 nginx负载均衡和反向代理

 反向代理的配置方式

location /api/{proxy_pass   http://localhost:8090/;}

 表示以/api/开头的请求会被转发到http://localhost:8090/ 这个地址
 

  1. 匹配/a
    • 当配置为匹配/a时,它将只匹配那些URI精确为/a的请求。
    • 这意味着,如果客户端请求/a,这个规则会被触发。
    • 但是,如果客户端请求/a/(带有末尾的斜杠),或者/a/something(带有额外的路径组件),那么这个规则不会被触发。
  2. 匹配/a/
    • 当配置为匹配/a/时,它通常匹配以/a/开头的请求URI,但是否匹配取决于具体的服务器配置和使用的匹配类型(例如,精确匹配、前缀匹配、正则表达式匹配等)。
    • 在某些上下文中,/a/可能只匹配精确为/a/的请求,而不匹配/a/a/something
    • 在其他上下文中,/a/可能作为前缀匹配,意味着它会匹配所有以/a/开始的请求,如/a//a/b/a/b/c等。
    • 如果服务器配置使用的是精确匹配,并且没有特别的指令来处理末尾的斜杠,那么/a/可能只会匹配/a/而不会匹配/a

      

举个例子:

  1. 如果一个客户端请求http://yourdomain.com/api/somepath,Nginx会将这个请求转发到http://localhost:8090/somepath

  2. 如果proxy_pass指令是proxy_pass http://localhost:8090;(没有末尾的斜杠),那么同样的请求http://yourdomain.com/api/somepath会被转发到http://localhost:8090/api/somepath

反向代理的优先级

//优先级最高
location = /api/{
}
//优先级次高
location ^~/api/{
}
//优先级第三高 
//使用正则表达式进行匹配//最后如果优先级一样高,写在前面的优先级高

负载均衡的配置方式

http {  upstream backend {  server backend1.example.com;  server backend2.example.com weight=2;  server backend3.example.com;  }  server {  listen 80;  location / {  proxy_pass http://backend;  }  
}
}

2.将项目上线到云服务器 

服务器请自己提前准备,可以购买网上的云服务器,安装操作系统为centos 7

docker 安装

详细的docker请看: Docker-CSDN博客

 在这里就简单的讲一下docker的安装

1.卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

 
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

2.配置Docker的yum库

首先要安装一个yum工具

yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

 
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装Docker及其相关组件

最后,执行命令,安装Docker

 
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4.启动和校验

 
# 启动Docker
systemctl start docker# 停止Docker
systemctl stop docker# 重启
systemctl restart docker# 设置开机自启
systemctl enable docker# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

使用docker自定义java项目镜像

  相将java项目打包

      

 Dockerfile是一个用来构建Docker镜像的文本文件

内容为:

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY interfaceGroup.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

之后将jar包和Dockerfile移入服务器的root目录中

 进入root目录,执行命令

docker build -t project-interface .

输入 

docker images 

来检查镜像是否创建成功创建

 

创建容器

docker run -d --name project-interface -p 8090:8090 --network aynu project-interface

 注意我们的java容器以及后续的mysql容器等等,一定要在同一个网络下,这样他们才能用过容器名来进行访问(因此我们的后端项目的yml中连接mysql的url为jdbc:mysql://mysql:3306/interface)

之后执行

docker logs -f project-interface

 来查看他的日志

 

看到spring表示运行成功。

 使用docker将nginx和前端项目部署到服务器

根据我们在windows上将前端项目部署到nginx上的操作,准备好一个文件夹nginx ,

里面包含前端的打包资源和nginx.conf

将这个文件夹复制到服务器的root目录下

执行命令完成下载nginx镜像并创建nginx容器 

docker run -d \--name nginx \-p 8080:8080 \-v /root/nginx/html:/usr/share/nginx/html \-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \--network aynu \
nginx

输入

docker ps

来检查容器是否正常运行

如果没有正常运行就输入 

docker logs nginx

 来查看他的日志文件进行纠错

使用docker安装mysql

 在服务器的root目录下创建一个文件夹mysql

其目录结构为:

 conf下有一个mysql的配置文件

文件内容为

[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

 init下有一个初始化的sql脚本,自己导出自己的sql脚本放进去即可

执行命令

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=1234 \-v /root/mysql/data:/var/lib/mysql \-v /root/mysql/conf:/etc/mysql/conf.d \-v /root/mysql/init:/docker-entrypoint-initdb.d \--network aynu\mysql:5.7.24

 输入

docker ps

来检查容器是否正常运行

如果没有正常运行就输入 

docker logs mysql

查看他的日志文件进行纠错 

 使用docker安装redis

docker run --name redis --network aynu -p 6379:6379 -e REDIS_PASSWORD=123456 -d redis redis-server --appendonly yes

设置安全组

如果以上操作都完成了,依然访问不到,保证自己配置没有出错的前提下请按照一下步骤进行排查:

  1. 安全组规则:确保您的阿里云服务器安全组规则允许外部流量访问8080端口。您需要在安全组规则中添加一条入站规则,以允许来自外部的TCP流量访问该端口。(先设置8080的安全组,然后设置网卡开放8080端口)
  2. 防火墙设置:检查您的阿里云服务器上的防火墙设置,确保没有阻止外部访问8080端口的规则。您需要添加一条规则来允许外部访问该端口。(或者直接关闭防火墙)

 

这样部署就完成了。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/1157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#语法知识之循环语句

5、循环语句 文章目录 1、while思考1 斐波那契数列思考2 判断一个数是否为质数思考3 找出100以内的质数 2、do...while3、for思考1 找水仙花数思考2 乘法表 1、while 1、作用 让代码重复去执行 2、语法相关 while(bool类型值){//当满足条件时,就会执行while语句…

【GIS教程】ArcGIS做日照分析(附练习数据下载)

我国对住宅日照标准的规定是:冬至日住宅底层日照不少于1小时或大寒日住宅层日照不少于2小时(通常以当地冬至日正午12时的太阳高度角作为依据)。因冬至日太阳高度角最低,照射范围最小,如果冬至日12:00建筑物底层能够接收到阳光,那么…

Python数据可视化库—Bokeh与Altair指南

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域,数据可视化是一种强大的工具,可以帮助我们…

Docker - HelloWorld

原文地址,使用效果更佳! Docker - HelloWorld | CoderMast编程桅杆https://www.codermast.com/dev-tools/docker/docker-helloworld.html 开始之前 在学习本小节之前,你必须确保你正确安装了 Docker,正确安装 Docker 是后续学习的…

墨子web3实时周报

蚂蚁集团Web3研发进展与布局 国内Web3赛道的领军企业——蚂蚁集团,凭借其在前沿科技领域的深耕不辍,已在Web3技术研发疆域缔造了卓越战绩。特别是在引领行业革新的关键时刻,集团于今年四月末震撼推出了颠覆性的Web3全套解决方案,…

java通过maven导入本地jar包的三种方式

一、引入lib下加载(加载过后打包,以后再次使用不用再次导入) 首先创建一个用于创建jar包的项目,并测试能否成功运行 讲项目打包 在需要引入的项目中创建lib目录 并把刚才打包的jar复制进去 通过dependency引入jar包 groupId、art…

读天才与算法:人脑与AI的数学思维笔记05_算法的幻觉

1. 自下而上 1.1. 代码在未来可以自主学习、适应并进行自我改进 1.2. 程序员通过编程教会计算机玩游戏,而计算机却会比教它的人玩得更好,这种输入寡而输出众的事情不大可能实现 1.3. 早在20世纪50年代,计算机科学家们就模拟该过程创造了感…

人工智能论文GPT-3(3):2020.5 Language Models are Few-Shot Learners;架构;训练数据集;开源

2.1 模型与架构 我们使用了与GPT-2相同的模型和架构,包括其中描述的改进初始化、预归一化和可逆分词技术,但有所不同的是,我们在Transformer的各层中使用了交替的密集和局部带状稀疏注意力模式,类似于Sparse Transformer 。为了研…

Flutter 的 showDialog 和 showCupertinoDialog 有什么区别?

我将我的 App 里用的 Flutter 升级到了 3.19,没想到,以前我用 showDialog 和 AlertDialog 组合创建的二次确认框,变得无敌难看了,大幅度增加了整个框的圆角和里面默认按钮的圆角。不得已,我必须修改一下,以…

算法练习|Leetcode189轮转数组 ,Leetcode56合并区间,Leetcode21合并两个有序链表,Leetcode2两数相加,sql总结

目录 一、Leetcode189轮转数组题目描述解题思路方法:切片总结 二、Leetcode56合并区间题目描述解题思路方法:总结 三、Leetcode21合并两个有序链表题目描述解题思路方法:总结 四、Leetcode2两数相加题目描述解题思路方法:总结 sql总结: 一、Leetcode189轮转数组 题目描述 给定…

C++|stack-queue-priority_queue(适配器+模拟实现+仿函数)

目录 一、容器适配器 1.1容器适配器概念的介绍 1.2stack和queue的底层结构 1.3deque容器的介绍 1.3.1deque的缺陷及为何选择他作为stack和queue的底层默认实现 二、stack的介绍和使用 2.1stack的介绍 2.2stack的使用 2.3stack的模拟实现 三、queue的介绍和使用 …

NotePad++联动ABAQUS

Abaqus 中脚本运行 1. 命令区kernel Command Line Interface (KCLI) execfile(C:\\temp\second develop\chapter2\pyTest1.py)2. CAE-Run Script File->Run Script 3. Abaqus command Abaqus cae noGUIscript.py(前后处理都可)Abaqus Python scr…

排序算法集合

912. 排序数组 趁着这道题总结下排序方法 1.快速排序 算法描述 1.从数列中挑出一个元素,称为"基准"(pivot), 2.重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基…

【网站项目】高校毕业论文管理系统小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

人工智能论文GPT-3(2):2020.5 Language Models are Few-Shot Learners;微调;少样本Few-Shot (FS)

2 方法Approach 我们的基本预训练方法,包括模型、数据和训练,与GPT-2中描述的过程相似,只是模型规模、数据集规模和多样性,以及训练时长有所扩大,相对简单直接。 我们使用的上下文学习也与GPT-2相似,但在…

SpringCloud系列(8)--将服务提供者Provider注册进Eureka Server

前言:上一章节我们介绍了Eureka服务端的安装与配置,本章节则介绍关于微服务如何入职Eureka Server Eureka架构原理图 1、修改provider-payment8001子模块的pom.xml文件,引入Eureka Clinet的依赖,然后reolad一下,下载依…

Parade Series - CoreAudio Loopback

Scenario 鉴于业务场景需要, 经过技术路径探索, 发现 comtypes 兼容性过于混乱,故而考虑整合一个 CoreAudio 的轮子dll来解决实际问题!std::StringStream ⇒ std::ios::binary ⇒ std::ofstream Loopback.dll #ifndef _DLL_C…

数学建模--非线性规划模型+MATLAB代码保姆式解析

目录 1.简单介绍 2.求解方法 3.适用赛题 4.典型例题及相关分析 (1)问题引入 (2)决策变量&约束条件 (3)确定目标函数 (4)建立数学模型 5.MATLAB代码祝逐字句讲解 1.简单…

Redis系列之Cluster集群搭建

在上一篇博客,我们学习Redis哨兵Sentinel集群的搭建,redis的哨兵模式提供了比如监控、自动故障转移等高可用方案,但是这种方案,容量相对固定,要进行持续扩容或者数据分片就不适合,所以有另外一种更复杂的集…

图像处理的魔法师:Pillow 库探秘

文章目录 图像处理的魔法师:Pillow 库探秘第一部分:背景介绍第二部分:库是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见Bug及解…