使用 Docker 部署前端项目:Vue 和 React 结合 Nginx 实现静态文件托管

使用 Docker 部署前端项目:Vue 和 React 结合 Nginx 实现静态文件托管

在这里插入图片描述

Web 开发中,将前端项目(例如 Vue 或 React 应用)打包后通过 Docker 容器和 Nginx 部署是非常常见的方式。它不仅简化了部署流程,还能确保在不同环境中一致的运行效果。本文将介绍如何使用 Docker 将打包生成的 dist 文件夹结合 Nginx 来实现前端项目的静态文件托管与访问。


1. 前端项目的构建

首先,确保已经完成前端项目的开发,并生成一个包含静态文件的 dist 文件夹。以 Vue 和 React 项目为例,可以通过以下命令完成项目的构建:

# Vue 项目
npm run build# React 项目
npm run build

上述命令会将项目打包,并在项目的根目录下生成一个 distbuild 文件夹(React 默认生成 build 文件夹,Vue 默认生成 dist 文件夹)。这个文件夹将包含所有需要托管的静态文件。


2. Nginx 配置

在 Docker 容器中,我们需要使用 Nginx 来托管前端项目的静态资源。为此,需要编写一个自定义的 nginx.conf 配置文件,该文件将指定如何处理静态资源的请求。

Nginx 配置文件 (nginx.conf) 示例:
server {listen 80;# 设置项目的根目录location / {root /usr/share/nginx/html;  # 指定存放静态文件的目录index index.html index.htm;   # 指定默认的首页文件try_files $uri $uri/ /index.html;  # 对于 SPA 单页应用,处理刷新页面时的路由}# 处理服务器错误的页面error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}
}

解释:

  • root /usr/share/nginx/html;:指定了 Nginx 将从 /usr/share/nginx/html 目录中查找和提供静态资源。这是 Nginx 容器的默认静态文件目录。
  • try_files $uri $uri/ /index.html;:这条规则对于单页应用程序 (SPA) 至关重要。它确保所有未找到的资源都会返回 index.html,让前端路由接管请求(如 Vue Router 或 React Router)。
  • error_page 500 502 503 504 /50x.html;:为服务器错误提供自定义的错误页面。

3. 编写 Dockerfile

在 Docker 中部署前端项目时,Dockerfile 是核心文件。它定义了如何构建一个包含前端项目及 Nginx 的 Docker 镜像。

Dockerfile 示例:
# 使用官方 Nginx 基础镜像
FROM nginx:alpine# 删除默认的 Nginx 页面
RUN rm -rf /usr/share/nginx/html/*# 将构建生成的 dist 文件夹复制到 Nginx 的静态资源目录中
COPY dist/ /usr/share/nginx/html/# 将自定义的 Nginx 配置文件复制到 Nginx 的配置目录中
COPY nginx.conf /etc/nginx/conf.d/default.conf# 暴露 Nginx 的端口
EXPOSE 80# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

解释:

  • FROM nginx:alpine:使用 Nginx 的轻量级 Alpine 版本作为基础镜像,适用于资源受限的环境。
  • RUN rm -rf /usr/share/nginx/html/*:删除默认的 Nginx 欢迎页面,以避免与我们自定义的静态文件冲突。
  • COPY dist/ /usr/share/nginx/html/:将本地构建好的 dist 文件夹复制到 Nginx 的静态资源目录 /usr/share/nginx/html/ 中。
  • COPY nginx.conf /etc/nginx/conf.d/default.conf:将自定义的 Nginx 配置文件复制到容器中。
  • EXPOSE 80:暴露容器的 80 端口以供外部访问。
  • CMD ["nginx", "-g", "daemon off;"]:启动 Nginx,并确保其在前台运行。

4. 构建 Docker 镜像

在项目的根目录下(包含 dist 文件夹、nginx.confDockerfile),运行以下命令来构建 Docker 镜像:

docker build -t your-frontend-app .

这条命令会根据 Dockerfile 构建一个名为 your-frontend-app 的 Docker 镜像。


5. 运行 Docker 容器

镜像构建完成后,可以通过以下命令启动 Docker 容器:

docker run -d -p 8080:80 your-frontend-app
  • -d:后台运行容器。
  • -p 8080:80:将本地主机的 8080 端口映射到容器的 80 端口,这样可以通过 http://localhost:8080 访问前端应用。

此时,浏览器中访问 http://localhost:8080,即可查看前端项目的部署效果。


6. 总结

通过上述步骤,我们可以轻松地使用 Docker 将前端项目与 Nginx 相结合,实现高效的静态文件托管和访问。总结起来有以下几个关键步骤:

  1. 构建前端项目:通过构建工具生成静态文件,通常为 dist 文件夹。
  2. 编写 Nginx 配置:自定义 Nginx 配置以支持 SPA 路由和静态文件托管。
  3. 编写 Dockerfile:通过 Dockerfile 将前端项目与 Nginx 镜像结合。
  4. 构建镜像并运行容器:构建 Docker 镜像,并通过容器启动服务,设置端口映射,实现外部访问。

通过这种方式,你可以快速地将前端项目部署在任意支持 Docker 的服务器或环境中,享受容器化带来的优势。


额外优化(可选)

  • 缓存控制:你可以通过修改 Nginx 配置文件来添加 HTTP 头部,控制静态文件的缓存策略,从而提高网站性能。

  • SSL 加密:在实际的生产环境中,你可能还需要配置 SSL 证书,为 Nginx 提供 HTTPS 支持。

这样,通过 Docker 部署前端项目的整个流程就完整呈现了。

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

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

相关文章

4G路由网关R10在智能制造生产线的应用

在当今智能制造的时代,高效稳定的网络连接和数据传输至关重要。4G 路由网关 R10 以其卓越的性能,在智能制造生产线中发挥着重要作用。 4G 路由网关 R10 是一款功能强大的网络设备。它支持多种网络连接方式,包括 4G 网络、有线网络等&#xff…

MySQL连接:内连接

先看我的表结构 dept表 emp表 内连接分为两个连接方式 1.隐式内连接 2.显式内连接 1.隐式内连接 基本语法 select 字段列表 FROM 表1, 表2 WHERE 条件... ;例子:查询每一个员工的姓名,及关联的部门的名称(隐式内连接实现) …

【C++ STL算法】二分查找 lower_bound、upper_bound、equal_range、binary_search

文章目录 【 1. 首个不小于 lower_bound 】【 2. 首个大于 upper_bound 】【 3. 所有等于 equel_range 】【 4. 二分查找 binary_search 】 当 指定区域内的数据处于有序状态 时,如果想查找某个目标元素,更推荐使用二分查找的方法(相比顺序查…

电影选票选座系统|影院购票|电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)

电影院订票选座小程序 目录 基于微信小程序的电影院购票系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户功能实现 2、管理员功能实现 (1)影院信息管理 (2)电影信息管理 (3)已完成…

Internet Download Manager6.42免费版下载神器新体验

🚀 开篇就燃!你的下载速度被“TA”承包了 #### 🌟 初识IDM 6.42,下载界的“超跑”驾到 各位追求效率的小伙伴们,今天小红要来揭秘一款让我彻底告别“龟速”下载的神器——Internet Download Manager (简称IDM) 6.42版&…

xtu oj 四位数

样例输入# 2 1990 1111样例输出# 5 0 分离整数与合并 AC代码 #include<stdio.h> //判断四个数码是否相等 int Judge(int n){int flag1;int gn%10,sn/10%10,bn/100%10,qn/1000;if(gs&&gb&&gq)flag0;return flag; } int main(){int T;scanf("%d…

dayu_widgets-简介

前言: 越来越多的人开始使用python来做GUI程序&#xff0c;市面上却很少有好的UI控件。即使有也是走的商业收费协议&#xff0c;不敢使用&#xff0c;一个不小心就收到法律传票。 一、原始开源项目: 偶然在GitHub上发现了这个博主的开源项目。https://github.com/phenom-films…

抽象类Abstart Class

抽象类其实就是一种不完全的设计图 必须用abstract修饰 模板方法&#xff1a;建议使用final修饰&#xff0c;不能被重写。

DGL库之HGTConv的使用

DGL库之HGTConv的使用 论文地址和异构图构建教程HGTConv语法格式HGTConv的使用 论文地址和异构图构建教程 论文地址&#xff1a;https://arxiv.org/pdf/2003.01332 异构图构建教程&#xff1a;异构图构建 异构图转同构图&#xff1a;异构图转同构图 HGTConv语法格式 dgl.nn.…

AI智能聊天问答系统源码+AI绘画系统+图文搭建部署教程,文生图图生图,TTS语音识别输入,AI智能体,文档分析

一、前言 人工智能的快速进步吸引了全球的瞩目&#xff0c;各式AI应用如绘图、语言模型和视频处理等已在多个领域获得应用。这些技术不仅加速了科技的创新&#xff0c;也在艺术创作、内容生产和商业实践等方面显示了其巨大潜力。例如&#xff0c;AI语言模型极大提升了内容自动…

【动态规划-最长公共子序列(LCS)】【hard】【科大讯飞笔试最后一题】力扣115. 不同的子序列

给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 10^9 7 取模。 示例 1&#xff1a; 输入&#xff1a;s “rabbbit”, t “rabbit” 输出&#xff1a;3 解释&#xff1a; 如下所示, 有 3 种可以从 s 中得到 “rabbit”…

ABAP 表转JSON格式

FUNCTION ZRFC_FI_SEND_PAYPLAN2BPM. *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *" IMPORTING *" VALUE(INPUT) TYPE ZSRFC_FI_SEND_PAYBPM_IN *" EXPORTING *" VAL…

vue3数字滚动插件vue3-count-to

1.安装 npm i vue3-count-to 2.引入 import { CountTo } from vue3-count-to3.使用 <countTo :startVal"0" :endVal"57.63" :decimals"2" :duration"3000"></countTo> 配置项:

yolov5-7.0模型DNN加载函数及参数详解(重要)

yolov5-7.0模型DNN加载函数及参数详解&#xff08;重要&#xff09; 引言yolov5&#xff08;v7.0&#xff09;1&#xff0c;yolov5.h(加载对应模型里面的相关参数要更改)2&#xff0c;main主程序&#xff08;1&#xff09;加载网络&#xff08;2&#xff09;检测推理&#xff0…

AVL树如何维持平衡

1.AVL树的特性 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年 发明了一种…

【万字长文】Word2Vec计算详解(一)CBOW模型

【万字长文】Word2Vec计算详解&#xff08;一&#xff09;CBOW模型 写在前面 本文用于记录本人学习NLP过程中&#xff0c;学习Word2Vec部分时的详细过程&#xff0c;本文与本人写的其他文章一样&#xff0c;旨在给出Word2Vec模型中的详细计算过程&#xff0c;包括每个模块的计…

【redis-06】redis的stream流实现消息中间件

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…

Auto-Animate:是一款零配置、即插即用的动画工具,可以为您的 Web 应用添加流畅的过渡效果

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 用户体验成为了检验产品成功与否的关键因素。而动画效果&#xff0c;作为提升用户体验的重要手段&#xff0c;在网页和应用开发中扮演着举足轻重的角色…

同望OA tooneAssistantAttachement.jsp 任意文件读取漏洞复现

0x01 产品简介 同望OA,即同望科技打造的智企云协同管理系统,是一款高效的企业协同移动办公系统。秉承“互联网++企业管理”理念,定位于以移动互联办公为基础的企业协同管理软件平台。它旨在通过内置常用标准模块与专项管理模块应用,安全快速地打通管理与业务通道,实现管理…

QT 实现QMessageBox::about()信息自定义显示

这是我记录Qt学习过程的第四篇心得文章&#xff0c;主要是方便自己编写的应用程序显示“关于信息”&#xff0c;对QMessageBox::about()输入信息进行规范&#xff0c;可以设置应用程序名称&#xff0c;通过定义宏从pro文件获取应用程序版本号&#xff0c;以及编译程序的QT版本、…