【前端项目部署上线】


提示:本文将介绍三种前端打包项目上线的方式:本地服务器部署、nginx服务器部署、云服务器部署

项目打包

  • 开发用的脚手架其实就是一个微型服务器,用于支持开发环境和运行代理服务器
  • 打包后的文件没有 .vue、.jsx、.less等文件,只有 .html、.js、.css等文件
  • 打包后的文件不再依赖脚手架运行,而是部署到服务器上运行

前提:写完项目后使用命令打包前端项目:

例如:vue项目使用 npm run build 命令打包生成 dist 文件(一般生成的文件在项目文件的根目录下)
默认命令是npm run build,但有的项目自己配置的话,打开package.json文件看具体命令是啥
在这里插入图片描述


一、本地服务器部署

1.使用步骤

Ⅰ. 准备一个本地服务器

本地服务器可以使用Java、php、Go、node.js等语言编写,这里是用node.js编写的,静态资源放在public文件夹下(即打包后的dist文件内容放着里面),
如图是一个简单本地服务目录

在这里插入图片描述

		//server.js文件内容如下:
 
 	//1.引入express
 	const express = require("express")
 	//2.配置端口号
	const PORT = 8088
	
	//3.创建一个app服务实例
	const app = express()
	//4.配置静态资源
	app.use(express.static(_dirname + '/public'))
	//5.绑定端口监听
	app.listen(PORT,()=>{
		const.log(`本地服务启动起来了,地址http://localhost:${PORT}`)
	})

启动命令:nodemon server.js 启动成功后输入地址即可打开页面,此时会出现两个bug,
1.刷新页面后404
2.axios发送请求失败了

Ⅱ. 解决两个bug

刷新页面后404

问题分析:前端项目的路由,通常分为两种工作模式,分别为:
1.hash 模式

hash 值又称锚点,通常用于指定网页中的某个位置,例如下面的网址:
https://www.cctv.com/#SUBD1605080062959435,其中的#SUBD1605080062959435就是 hash 值,hash 值只在客户端(如浏览器)中使用,是不会带给服务器的,所以使用 hash 模式时,不存在刷新 404 问题。

2.history 模式

history 去掉了URL中的#号,可以让应用的URL看起来更美观,带来的问题就是刷新时,会将前端路由携带给后端,而后端没有对应资源的匹配,就出现了 404 问题。

解决方式一:将前端路由器工作模式改为 hash 模式 —— 不推荐。
解决方式二:让服务器在收到未配置的GET路由时,都返回index.html即可,代码如下:

	//server.js 文件

	//把 url 中的 path,交给了前端路由去处理,每次刷新进入index.html文件
	app.get('*',(req,res)=>{
		res.sendFile(__dirname + '/public/index.html')
	})

还可以使用插件 connect-history-api-fallback ,npm i connect-history-api-fallback 下载插件后,配置代码如下即可:

	//server.js 文件
	const history = require("connect-history-api-fallback")
	
	// 可以让配置更灵活,比如/login临时不需要作为前端路由处理
	app.use(history({
		verbose:false,
		rewrites:[
			//表示如果当前页面是login,那你哪来的回哪去
			// { from: /^\/login.*$/, to: (context) => context.parsedUrl.path },
		]
	}))

axios发送请求失败了

问题分析:脱离脚手架后,就没有了代理服务器,无法转发请求到【提供数据】的服务器。
解决?—— 在 Node 服务器中借助 http-proxy-middleware 插件配置代理,具体配置如下:

// 下载命令:npm i http-proxy-middleware

	// 引入createProxyMiddleware
	const { createProxyMiddleware } = require('http-proxy-middleware')

	// 配置代理中间件  /dev就是匹配脚手架里面配置代理的部分url,有的叫/api等
	app.use('/dev', createProxyMiddleware({
		target: 'http://sph-h5-api.atguigu.cn',
		changeOrigin: true,
		pathRewrite: {
			// 移除请求url中的dev
			'^/dev': ''
		}
	}))

二、Nginx服务器部署

Nginx 是一款高性能的 HTTP 服务器和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。它以其高性能、高稳定性、丰富的功能集和低系统资源消耗而闻名,主要功能有:

  1. 反向代理
  2. 负载均衡
  3. 静态内容服务
  4. HTTP/2 支持
  5. SSL/TLS 支持
  6. 高速缓存

niginx目录文件如下,地址点击链接找对应版本下载即可
在这里插入图片描述

1.使用步骤

整体思路:让nginx充当两个角色,既是 静态内容服务器,又是代理服务器。
要更改配置的话找 /conf/nfinx.conf 文件

1.修改nginx配置如下,注意nginx的根目录最好不是 C 盘
注意:每次更改nginx配置后,先关闭nginx的进程,再重新启动nginx(点击文件下的nginx.exe就是重启)

# 配置nginx根目录
server {
	listen   8099;  #8099就是配置的访问端口号
	server_name locallhost;

	#charset koi8-r;

	#access_log logs/host.access.log main;

	location / {
		# 项目dist包放置的位置
  		root   D:\dist;
  		index  index.html index.htm;
	}

	# 配置代理   /dev/就是匹配脚手架里面配置代理的部分url,有的叫/api等   
	# /dev//dev不展示,/dev:展示/dev
	location /dev/ {
  		# 设置代理目标 写入代理的服务器地址
  		proxy_pass http://xxx.com.cn/;
	}
}

2.修改前端项目,让所有请求都转发给 /dev,随后重新打包

const request = axios.create({
  baseURL:'/dev',
  timeout:10000
})

3.随后直接访问nginx服务器即可,例如 nginx如果运行在8099端口,则访问:

http://localhost:8099

4.如果遇到刷新404问题,追加nginx配置来解决

# 配置nginx根目录
location / {
  root   D:\dist;
  index  index.html index.htm;
  try_files $uri $uri/ /index.html; # 解决刷新404
}
# 配置代理
location /dev/ {
  # 设置代理目标
  proxy_pass http://xxx.com.cn/;
}

三.云服务器部署

在云服务器上借助nginx完成部署,大致流程与本地nginx部署一致

云服务器

可选择:阿里云、腾讯云等。
小型项目部署选择轻量应用服务器然后基于操作系统镜像即可
操作系统,看个人习惯,Ubuntu、CentOs、RedHat、都不错。我这里选择的是CentOs 7.6
购买完服务器后记得重置密码
服务器在控制台内找轻量级服务器,找到公网IP地址(部署好后就是项目地址)

linux 远程操作软件:Xshell、Xftp

Xshell: 用于写命令操作系统的
Xftp: 用于连接服务器,然后传输文件的

Xshell
1.打开后链接服务器后即可对系统使用命令操作
2.给服务器安装nginx

//yum 是Linux内置的一个包管理器
yum install nginx

如何确认是否安装成功,找到服务器根目录下/etc文件夹下面如果出现nginx文件,即可代表安装成功
Xftp
1.打开后链接服务器,即可新建文件夹

2.将前端静态资源(dist文件内容)放在里面,这里文件放在/var目录下,例如:/var/bobc_web
注:最好不要将文件放在/root目录下面,因为root本身存在很多权限

3.找到 /etc/nginx/ 下的 nginx.config 文件,打开文件,配置代码如下:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        # 前端服务地址
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        	# dist文件夹相对路径,可根据实际情况进行更改
          root   /var/bobc_web;
          index  index.html index.htm;
          try_files $uri $uri/ /index.html; # 解决刷新404
        }
        # 配置代理
        location /dev/ {
          # 设置代理目标
          proxy_pass http://xxx.com.cn/;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
	
	# HTTPS server
	
	# server {
		# listen      443 ssl;
		# server_name   localhost;

		# ssl_certificate   cert.pem;
		# ssl_certificate   cert.key;

		# ssl_session_cache  shared:SSL:1m;
		# ssl_session_timeout 5m;

		# ssl_ciphers HIGH:!aNULL:!MD5;
		# ssl_prefer_server_ciphers  on;

		# location / {
		#	root html;
		#	index index.html index.htm;
		# }
	# }
}
前端项目部署上线的具体步骤可能会因为项目的不同而有所差异,但是下面是一个通用的流程: 1. 选择合适的服务器:选择一个适合你项目需求的服务器,可以是云服务器、虚拟主机或者其他托管服务提供商。 2. 准备服务器环境:在服务器上安装所需的环境,包括操作系统、Web服务器(如Nginx或Apache)、Node.js(如果项目需要)等。 3. 构建项目:在本地开发环境中使用构建工具(如Webpack、Parcel、Gulp等)构建你的前端项目。这将生成一个可部署的生产版本。 4. 上传项目文件:将构建好的项目文件上传到服务器上。可以使用FTP、SCP或者其他文件传输工具进行上传。 5. 配置服务器:根据你的项目需求,对服务器进行配置。这可能包括设置域名、配置SSL证书、配置反向代理等。 6. 运行项目:在服务器上启动你的应用程序。如果是基于Node.js的项目,可以使用PM2或者其他进程管理工具来守护进程并保持项目的持续运行。 7. 测试和验证:访问你的应用程序,在浏览器中进行测试和验证。确保一切正常运行,并解决可能出现的问题。 8. 监控和维护:设置适当的监控和日志记录机制,以便及时发现并解决潜在的问题。定期进行维护,更新项目依赖和修复漏洞。 9. 域名解析:如果你使用的是自定义域名,需要在域名注册商处进行域名解析,将域名指向你的服务器IP地址。 10. 高可用和负载均衡(可选):如果需要更高的可用性和负载均衡,可以考虑使用负载均衡器或者容器编排工具。 请注意,这只是一个基本的部署流程概述,实际操作可能会有更多细节和特殊情况需要考虑。在部署过程中,确保项目的安全性、性能和可用性是非常重要的。所以建议在部署之前充分了解你的项目需求,并参考相关文档和最佳实践来进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值