VUE 项目用 Docker+Nginx进行打包部署

一、Docker

  • Docker 是一个容器化平台,允许你将应用程序及其依赖项打包在容器中。
  • 使用 Docker,你可以创建一个包含 Vue.js 应用程序的容器镜像,并在任何支持 Docker 的环境中运行该镜像。

二、Nginx

  • Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,广泛用于提供静态文件和路由请求到后端服务。
  • 在 Vue.js 应用程序的部署中,Nginx 可以用于:
    • 作为静态文件服务器,提供构建后的 Vue.js 应用程序文件。
    • 作为反向代理,将 API 请求转发到后端服务器。

三、Docker Nginx配置到vue--项目中使用

1. VUE 项目创建文件Dockerfile-private

FROM nginx:1.19.3COPY dist/ /usr/share/nginx/htmlCOPY ./nginx/nginx.conf /etc/nginx/nginx.confCOPY ./nginx/private/default.conf /etc/nginx/conf.d/default.conf
  1. FROM nginx:1.19.3:指定基础镜像,这里使用的是 Nginx 的官方镜像,标签为 1.19.3

  2. COPY dist/ /usr/share/nginx/html:将 Vue 项目构建输出的 dist 目录中的所有文件复制到 Nginx 的默认网页根目录 /usr/share/nginx/html。这意味着当你访问 Nginx 服务器时,这些静态文件将被提供给客户端。

  3. COPY ./nginx/nginx.conf /etc/nginx/nginx.conf:复制自定义的 Nginx 主配置文件 nginx.conf 到容器中的 /etc/nginx/nginx.conf。这将覆盖默认的 Nginx 配置。

  4. COPY ./nginx/private/default.conf /etc/nginx/conf.d/default.conf:复制自定义的 Nginx 配置文件 default.conf 到 Nginx 配置目录 /etc/nginx/conf.d/。这个文件将被 Nginx 加载以配置网站的行为,例如设置代理、重定向等。

Nginx文件:

nginx.conf文件


user  nginx;
worker_processes  1;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" "$request_body"''$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;keepalive_timeout  65;gzip  on;include /etc/nginx/conf.d/*.conf;
}

nginx/private/default.conf

server {listen       8002;server_name  localhost;#charset koi8-r;#access_log  /var/log/nginx/host.access.log  main;gzip_static on;gzip on;gzip_min_length 1k;gzip_comp_level 3;gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;gzip_vary on;gzip_disable "MSIE [1-6]\.";gzip_buffers 32 4k;fastcgi_intercept_errors on;server_tokens off;client_max_body_size 102400m;resolver 114.114.114.114 8.8.8.8 valid=120s;set $sentry router.anban.cloud;location / {add_header Cache-Control no-cache;root   /usr/share/nginx/html;index  index.html index.htm;try_files $uri /index.html;}location /abfuzz {proxy_read_timeout 100s;proxy_pass http://127.0.0.1:18800;}location /files {rewrite ^/files(.*)$ $1 break;proxy_pass http://127.0.0.1:18800;proxy_http_version 1.1;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}error_page  403 404 408 500 501 502 503 504 507 /index.html;}   

四、构建镜像并运行:

构建镜像:

docker build --platform linux/amd64 -f Dockerfile-private -t myapp .

  • docker build:Docker 构建命令,用于根据 Dockerfile 创建一个新的镜像。
  • --platform linux/amd64:指定构建的目标平台为 Linux 架构的 amd64(64位)。
  • -f Dockerfile-private:指定使用 Dockerfile-private 作为构建上下文的 Dockerfile。这表明你的构建配置可能在 Dockerfile-private 文件中定义,而不是默认的 Dockerfile
  • -t myapp:给构建的镜像指定一个标签(tag),这里标签是 myapp,这样你就可以通过这个名称来引用镜像。
  • .(点):表示 Docker

 运行镜像:

docker run -d -p 3000:8002 --name vue-app-container myapp

  • docker run:Docker 运行命令,用于从镜像创建并启动一个新的容器。
  • -d:以分离模式运行容器,在后台运行。
  • -p 8002:8002:端口映射,将容器内部的 8002 端口映射到宿主机的 8002 端口。
  • --name vue-app-container:为容器指定一个名称 vue-app-container,方便后续管理和引用。
  • myapp:指定要运行的镜像的名称或标签,这里使用了之前构建的 myapp 镜像

查看镜像运行:

docker ps

 运行正常,直接访问地址: http://localhost:8002/

docker常用命令:

要中止正在运行的容器并重新运行它,你可以按照以下步骤操作:

  1. 找到容器 ID 或名称: 首先,你需要找到容器的 ID 或名称。你可以使用 docker ps 命令列出所有正在运行的容器。

    docker ps

  2. 停止容器: 使用 docker stop 命令加上容器的 ID 或名称来停止容器。

    docker stop <容器名称或ID>

    如果你为容器指定了名称(在这个例子中是 vue-app-container),你可以直接使用名称来停止它:

    docker stop vue-app-container

  3. 启动容器: 在停止了容器之后,你可以使用 docker run 命令重新启动它,这次使用正确的端口映射。如果 Nginx 配置为监听 8002 端口,你需要确保 Docker 容器的端口映射也相应地设置为 8002

    docker run -d -p 8002:8002 --name my-nginx-container my-nginx-image

    这个命令将容器内部的 8002 端口映射到宿主机的 8002 端口,并以分离模式启动容器。

  4. 验证容器状态:  docker ps 来检查容器是否成功启动。

四、基础配置demo(Dockerfile和nginx/default.conf)

刚才第三点,是我项目中使用的配置,下面是一个很基础的配置,可以直粘贴代码使用

dockerfile文件

FROM nginx:1.19.3COPY dist/ /usr/share/nginx/htmlCOPY ./nginx/default.conf /etc/nginx/default.conf

nignx/default.conf

复制代码server {listen       80;server_name  localhost;#charset koi8-r;access_log  /var/log/nginx/host.access.log  main;error_log  /var/log/nginx/error.log  error;location / {root   /usr/share/nginx/html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}location /abfuzz {proxy_read_timeout 100s;proxy_pass http://127.0.0.1:18800;}
}

构建镜像:

docker build --platform linux/amd64 -f Dockerfile -t test1 .

运行镜像:

 docker run -d -p 3000:80 --name test1-container test1

查看镜像状态:

docker ps 

 访问地址:http://localhost:3000/  

噢耶,撒花✿✿ヽ(°▽°)ノ✿

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

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

相关文章

Eureka 学习笔记(1)

一 、contextInitialized() eureka-core里面&#xff0c;监听器的执行初始化的方法&#xff0c;是contextInitialized()方法&#xff0c;这个方法就是整个eureka-server启动初始化的一个入口。 Overridepublic void contextInitialized(ServletContextEvent event) {try {init…

React useRef 组件内及组件传参使用

保存变量&#xff0c; 改变不引起渲染 import { useRef} from react; const dataRef useRef(null) ... dataRef.current setTimeout(()>console.log(...),1000)绑定dom const inputRef useRef(null) <input ref {inputRef} />绑定dom列表 - ref 回调 const ite…

无声短视频:成都柏煜文化传媒有限公司

无声短视频&#xff1a;视觉艺术的独特魅力 在数字化时代的浪潮中&#xff0c;短视频以其简短、直观、易于传播的特点迅速崛起&#xff0c;成为当下最热门的媒体形式之一。而在众多的短视频类型中&#xff0c;无声短视频以其独特的视觉表达方式&#xff0c;逐渐吸引了越来越多…

mysql竖表变横表不含聚合

文章目录 前言一、vertical_table二、转换1.要将其转换为横表形式&#xff0c;例如&#xff1a;2.sql 总结 前言 在MySQL中将竖表转换为横表&#xff08;也称为行转列操作&#xff09;&#xff0c;不涉及聚合函数&#xff0c;通常可以通过使用条件判断和自连接来实现。假设有一…

Intelij IDEA中Mapper.xml无法构建到资源目录的问题

问题场景&#xff1a; 在尝试把原本在eclipse上的Java Web项目转移至Intelij idea上时&#xff0c;在配置文件均与eclipse一致的情况下出现了如下报错&#xff1a; org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.umbrella.crm_core.…

leetcode118 杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] public List…

信创服务器操作系统的适配迁移分析

浅谈信创服务器操作系统的适配迁移 01 服务器操作系统迁移适配流程复杂 随着CentOS停服临近和红帽RHEL源码权限受限&#xff0c;服务器操作系统安全漏洞风险加剧。国内众多企业面临CentOS、REHL等系统升级替换的挑战。同时&#xff0c;出于安全、功能升级和合规需求&#xff0…

33、循环语句--函数---递归+阶乘

一、函数 1.1、shell的函数 1.1.1、函数的定义&#xff1a;将命令序列按照格式写在一起。格式指的是函数的固定格式。两种格式。 for i in {}do命令序列doneif []then 命令序列else命令序列fi #可以作为一个命令序列作用&#xff1a;方便重复使用&#xff0c;函数库&…

CubeMx打不开

问题点&#xff1a;打开CubeMx一直这个界面&#xff0c;然后就消失了。 问题所在&#xff1a;java版本过高。 博主的版本是合适的&#xff0c;如果你的版本是17什么的肯定是不合适的。 解决方法&#xff1a;卸载重装 卸载工具站内下载&#xff0c;免安装&#xff1a;&#xf…

相机的标定

文章目录 相机的标定标定步骤标定结果影响因素参数分析精度提升一、拍摄棋盘格二、提升标定精度 标定代码实现 相机的标定 双目相机的标定是确保它们能够准确聚焦和成像的关键步骤。以下是详细的标定步骤和可能的结果&#xff0c;同时考虑了不同光照条件和镜头光圈大小等因素对…

4.1. 马氏过程及其构造

马氏过程及其构造 1. 马氏过程与转移概率1.1. Markov过程1.2. 示例1.3. 四元函数(转移概率)2. 活动概率空间: P x , P μ P_x,P_\mu Px​,Pμ​2.1. 初始点为 x x x活动概率空间 P x P_x Px​2.2. 初始分布为 μ \mu μ的活动概率空间 P μ P_\mu Pμ​对于围棋, 如果某个时刻形…

极速解析,精准合规 — Ada,现代C++的URL解析器

Ada&#xff1a;用Ada&#xff0c;让URL解析变得轻而易举。- 精选真开源&#xff0c;释放新价值。 概览 Ada是一个用现代C编写的快速且符合WHATWG标准的URL解析库。它通过了WHATWG网站提供的全部规范测试&#xff0c;并在包括Windows、Linux、macOS在内的多个平台上表现卓越。…

Python机器学习分类算法(二)-- 决策树(Decision Tree)

决策树&#xff08;Decision Tree&#xff09;是一种基于树形结构的分类和回归方法&#xff0c;它主要用于在给定输入特征的情况下预测目标变量的值。以下是关于决策树的详细解释&#xff1a; 定义 决策树是一种直观的决策分析方法&#xff0c;通过构成树形结构来求取净现值的…

LeetCode 2288.价格减免:模拟

【LetMeFly】2288.价格减免&#xff1a;模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/apply-discount-to-prices/ 句子 是由若干个单词组成的字符串&#xff0c;单词之间用单个空格分隔&#xff0c;其中每个单词可以包含数字、小写字母、和美元符号 $ 。如果单…

关于vue elementUi校验slot插槽中的表单项

项目场景&#xff1a;在父组件表单中使用子组件&#xff0c;并使用子组件插槽功能来管理父组件的单个表单项 重点提示&#xff1a;这里要明确一个概念&#xff0c;凡是在组件内插槽的内容都属于组件管理&#xff0c;因此&#xff0c;要校验父组件使用子组件的slot插槽展示表单…

Python将Markdown格式转为HTML:轻松实现博客文章的自动化处理

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 引言 编写一篇高质量的博客文章并非易事&#xff0c;尤其是在排版和格式方面。Markdown作为一种轻量级的标记语言&#xff0c;为博主们提供了一种简洁、高效的写作方式。而Python作为一门强大的编程语言&#xff0c…

反射的原理和操作

反射是框架设计的灵魂 &#xff08;使用的前提条件&#xff1a;必须先得到代表的字节码的Class&#xff0c;Class类用于表示.class文件&#xff08;字节码&#xff09;&#xff09; 在Java中&#xff0c;反射是指在运行时动态地获取、检查和操作类、对象、方法和属性的能力。J…

本地快速部署 SuperSonic

本地快速部署 SuperSonic 0. 引言1. 本地快速部署 supersonic2. 访问 supersonic3. 支持的数据库4. github 地址 0. 引言 SuperSonic融合Chat BI&#xff08;powered by LLM&#xff09;和Headless BI&#xff08;powered by 语义层&#xff09;打造新一代的BI平台。这种融合确…

C++ 66 之 类模版

#include <iostream> #include <string> using namespace std;// 习惯性 < >中 类模板用class 普通的函数模板就用typename // template<class NAMETYPE, class AGETYPE> template<class NAMETYPE, class AGETYPE int> // 可以设置默认的类型值…

c语言单元测试构建

前言 查阅gtest、ceedling、unity、cmock等测试框架,在项目集成实践。 Ceedling安装和使用(放弃) 使用总结:Ceedling使用的确非常方便,但是由于toolchain的设置的文档说明和sample缺失,尝试了更新toolchain失败而告终。同时ceedling编译后需要在目标机器环境下运行才能生效…