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

news2024/12/23 9:09:23

使用 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.coloradmin.cn/o/2204049.html

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

相关文章

linux线程 | 线程的概念

前言:本篇讲述linux里面线程的相关概念。 线程在我们的教材中的定义通常是这样的——线程是进程的一个执行分支。 线程的执行粒度, 要比进程要细。 我们在读完这句话后其实并不能很好的理解什么是线程。 所以, 本节内容博主将会带友友们理解什么是线程&a…

Vulnhub靶场案例渗透[6]- DC6

文章目录 1. 靶场搭建2. 信息收集2.1 确定靶机ip2.2 主机信息收集2.3 主机目录扫描2.4 网站用户名和密码爆破 3. 反弹shell4. 提权 1. 靶场搭建 靶场源地址 检验下载文件的检验码&#xff0c;对比没问题使用vmware打开 # windwos 命令 Get-FileHash <filePath> -Algori…

RTSP 音视频play同步分析

基础理论 RTSP RTP RTCP SDP基础知识-CSDN博客 关于RTP的时间戳知识点回顾 时间戳单位&#xff1a;时间戳计算的单位不是秒&#xff0c;而是采用采样频率的倒数&#xff0c;这样做的目的是为了使时间戳单位更为精准。比如说一个音频的采样频率为8000Hz&#xff0c;那么我们可…

【华为】基于华为交换机的VLAN配置与不同VLAN间通信实现

划分VLAN&#xff08;虚拟局域网&#xff09;主要作用&#xff1a; 一、提高网络安全性 广播域隔离访问控制增强 二、优化网络性能 减少网络拥塞提高网络可管理性 sysytem-view #进入系统视图配置参数 vlan batch 10 20 #批量创建vlan LSW3: int g0/0/1 port…

「实战应用」如何用图表控件LightningChart可视化天气数据?(一)

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

scau:面向对象java实验作业1-2 猜数字游戏

题目名称实验1-2 猜数字游戏题目关键字数据类型 基本输入输出 控制语句 方法题目录入时间2022/10/10 11:01:37题目内容 使用Java程序&#xff0c;项目名称&#xff1a;GuessNumberGame&#xff0c;类根据自己需要定义。 程序开始运行后&#xff0c;允许玩家进行多次猜数字的游…

C++从入门到起飞之——(multi)set与(multi)map的的使用 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 序列式容器和关联式容器 2. set系列的使⽤ 2.1 set和multiset参考⽂档 2.2 set类的介绍 2.3 se…

Effective C++笔记之二十四:stack overflow

溢出&#xff08;Stack Overflow&#xff09;是指程序运行过程中&#xff0c;栈空间被耗尽&#xff0c;导致无法继续分配栈内存的错误。C程序中&#xff0c;栈用于存储函数调用的局部变量、返回地址、函数参数等。当栈空间耗尽时&#xff0c;会引发栈溢出&#xff0c;通常导致程…

java的Maven项目的ehcache缓存学习记录

java的ehcache缓存学习记录 第1步:pom.xml增加ehcache的依赖项 <!--ehcache缓存--><dependency><groupId>net.sf.ehcache</groupId</

Renesas R7FA8D1BH (Cortex®-M85) 上超声波测距模块(HC-SR04)驱动开发

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 硬件架构 2.1 硬件框架结构 2.2 测距模块&#xff08;HC-SR04&#xff09;介绍 2.2.1 HC-SR04特性 2.2.2 HC-SR04操作时序 2.2.3 计算距离 3 软件实现 3.1 FSP配置项目 3.1.1 配置IO口的外…

springboot 整合spring ai实现 基于知识库的客服问答

rag 需求产生的背景介绍&#xff1a; 在使用大模型时&#xff0c;常遇到的问题之一是模型可能产生幻觉&#xff0c;即生成的内容缺乏准确性。此外&#xff0c;由于大模型不直接访问企业的专有数据&#xff0c;其响应可能会显得泛泛而谈&#xff0c;不够精准或具体&#xff0c;…

Vue包的安装使用

文章目录 vue介绍一、灵活易用1.渐进式框架2.简洁的语法 二、高效的响应式系统1.数据驱动2.响应式原理 三、强大的组件化开发1.组件化思想2.组件通信 四、丰富的生态系统1.插件和库2.社区支持 安装依赖删除新增文件夹components设置(1)home.vue(2)data.vue(3)zero.vue router配…

Visual Studio Code 中通过鼠标滚轮调整字体大小并使用 Ctrl+W 关闭文档窗口【最详细】

1. 使用鼠标滚轮调整字体大小 希望通过鼠标滚轮与 Ctrl 键组合来放大或缩小编辑器的字体大小&#xff0c;按照以下步骤进行设置&#xff1a; 打开 Visual Studio Code。 进入设置页面&#xff1a; 点击左下角的齿轮图标&#xff0c;然后选择“设置”。 或者直接使用快捷键 …

最新Prompt预设词指令教程大全ChatGPT、AI智能体(300+预设词应用)

使用指南 直接复制在AI工具助手中使用&#xff08;提问前&#xff09; 可以前往已经添加好Prompt预设的AI系统测试使用&#xff08;可自定义添加使用&#xff09; SparkAi系统现已支持自定义添加官方GPTs&#xff08;对专业领域更加专业&#xff0c;支持多模态文档&#xff0…

科研绘图系列:R语言绘制中国地理地图

文章目录 介绍加载R包导入数据图a图b图c图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码。该图展示了不同省份的物种分布情况。 加载R包 library(geojsonsf) library(sf) library(ggplot2) library(RColorBrewer) library(ggspatial) library(</

C++AVL树详解

什么是AVL树 AVL树是最先发明的⾃平衡⼆叉查找树&#xff0c;AVL是⼀颗空树&#xff0c;或者具备下列性质的⼆叉搜索树&#xff1a;它的 左右⼦树都是AV树&#xff0c;且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树&#xff0c; 通过控制⾼度差去控制平衡…

python的介绍以及基本操作

python的介绍 &#xff08;1&#xff09;python是一门编程语言&#xff08;比如&#xff1a;java、c、c、.net、go等都是编程语言&#xff09; python 也是胶水语言 &#xff08;2&#xff09;python是一门面向对象&#xff0c;解释型的动态类型的编程语言&#xff0c; a、什…

select、epoll相关

select函数&#xff1a; int select(int nfds, // 监控的文件描述符集里最大文件描述符加1fd_set *readfds, // 监控有读数据到达文件描述符集合&#xff0c;引用类型的参数fd_set *writefds, // 监控写数据到达文件描述符集合&…

【零散技术】一分钟完成Odoo悬挂网站备案号

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 目录 1.激活开发者模式 2.修改视图 Odoo套上域名是常见的需求&#xff0c;当我们兴致勃勃的做好 域名申请&#xff0c;网站备案&#xff0c;域名解析&#xff0c;SSL证书申请&#xff0c;Nginx转发后&#xff0c;就可以通过域…

横向移动与痕迹清理

目录 横向移动漏洞利⽤服务利⽤IPC横向计划任务横向计划任务横向WMI横向SMB横向DCOM横向WinRM横向PSEXEC横向其他⽅式横向 软件部署利⽤GPO组策略横向 密码喷洒密码策略检查喷洒主机喷洒⽤户名喷洒密码喷洒hash喷洒服务 痕迹清除OPSEC清除webshell清除隧道⼯具清除落地样本清除…