docker部署前后端分离项目

docker部署前后端分离项目

前提,服务器环境是docker环境,如果服务器没有安装docker,可以先安装docker环境。
各个环境安装docker:
Ubuntu上安装Docker:
ubuntu离线安装docker:
CentOS7离线安装Docker:
CentOs7在线安装docker:
docker安装成功后,执行docker ps命令
在这里插入图片描述

一、打包一个前端项目

1.1 创建安装目录

  • 在自己安装的目录先创建三个文件夹
    mkdir config frontend logs
    在这里插入图片描述
  • 将打包好的前端项目dist,上传到frontend 目录下;
    在这里插入图片描述

1.2 编写Dockerfile

  • 编写一个Dockerfile文件放到frontend 目录下;
    Dockerfile:
FROM nginx:latest
COPY ./dist /opt/nginx/aiinspector-frontend3/frontend/dist
  • FROM nginx:latest 表示基于nginx镜像生成一个新镜像,因此前提是先拉去一个nginx:latest镜像
  • 拉取Nginx最新镜像,docker pull nginx
  • 查看拉取的镜像:docker images
    在这里插入图片描述
  • COPY ./dist /opt/nginx/aiinspector-frontend3/frontend/dist 表示复制宿主机中的项目到容器目录;
  • /opt/nginx/aiinspector-frontend3/frontend/dist 宿主机安装目录
  • ./dist 容器目录

1.3 配置nginx.conf

# 修改监听端口
listen 8000;
listen [::]:8000 default_server;
server_name localhost;# 修改项目部署路径
root /opt/nginx/aiinspector-frontend3/frontend/dist;# 修改后端代理路径
location /api {proxy_set_header Host $host;  #反向代理过程中可能会丢失Host头          proxy_pass http://192.168.124.11:3000;proxy_connect_timeout 60s;proxy_send_timeout 180s;proxy_read_timeout 180s;proxy_buffer_size 1M;proxy_buffers 8 1M;proxy_busy_buffers_size 1M;
}
  • nginx.conf配置如下
# 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;client_max_body_size 11m;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;fastcgi_intercept_errors on;proxy_intercept_errors on;gzip_vary on;gzip on;gzip_static on;gzip_buffers 16 8k;gzip_min_length 1k;gzip_comp_level 6;gzip_types text/plaintext/xmltext/cssapplication/x-javascriptapplication/xmlapplication/xml+rssapplication/javascriptapplication/json;server {#root         /opt/nginx/aiinspector-frontend3/frontend/dist;listen 8000;listen [::]:8000 default_server;server_name localhost;#root         /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {proxy_set_header HOST $host;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 加这个是支持history的路由模式try_files $uri /index.html;root /opt/nginx/aiinspector-frontend3/frontend/dist;index index.html;error_page 404 /index.html;error_page 405 =200 $request_uri;# 跨域配置if ($request_method = OPTIONS ) {add_header Access-Control-Allow-Origin "*";add_header Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, DELETE";add_header Access-Control-Max-Age "3600";add_header Access-Control-Allow-Headers"Origin, X-Requested-With, Content-Type, Accept, Authorization";add_header Access-Control-Allow-Credentials "true";add_header Content-Length 0;add_header Content-Type text/plain;return 200;}add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS';add_header 'Access-Control-Allow-Headers' 'Content-Type,*';}location /api {proxy_set_header Host $host;  #反向代理过程中可能会丢失Host头          proxy_pass http://192.168.124.11:3000;proxy_connect_timeout 60s;proxy_send_timeout 180s;proxy_read_timeout 180s;proxy_buffer_size 1M;proxy_buffers 8 1M;proxy_busy_buffers_size 1M;}error_page 404 /404.html;location = /404.html {root /opt/nginx/aiinspector-frontend3/frontend/dist/index.html;}# error_page 500 502 503 504 /50x.html;# location = /50x.html {# }}
}

二、编写启动文件

  • vim build-aiinspector-frontend3.sh
  • 将下面配置复制到build-aiinspector-frontend3.sh文件中
#!/bin/bashecho "-----clear container start-----"
# 容器名称
rep=frontend3-react
# 判断容器是否存在,存在则先停止容器
if docker ps | grep "$rep";thendocker stop $rep
fi
# 如果容器已经停止,则删除容器
if docker ps -a | grep "$rep";thendocker rm $rep
fi
# 如果镜像存在,则删除镜像
if docker images -a | grep "$rep";thendocker rmi $rep
fiecho "----clear container end----"echo "----build docker image satrt----"
# 制作镜像,目录必须是项目的安装路径,且与Dockerfile在同一个目录
docker build -t $rep /opt/nginx/aiinspector-frontend3/frontend || ! echo "build new image error" || exit
echo "----build docker image end----"echo "----build nginx container start-----"
# 启动容器 
# -d 后台运行,
# -p 8000:8000 -p [宿主机端口:容器端口],蒋容器为8000的端口映射到宿主机为8000的端口,
# --restart=always,docker 服务重启时此容器自动重启,
# --name $rep 容器名称为 frontend3-react
# -e TZ=Asia/Shanghai ,容器时间为亚洲上海时间
# -v /opt/nginx/aiinspector-frontend3/config/nginx.conf:/etc/nginx/nginx.conf 映射宿主机目录文件nginx.conf到容器的目录文件中/etc/nginx/nginx.conf
docker run -d -p 8000:8000 \
--restart=always \
--name $rep \
-e TZ=Asia/Shanghai \
-v /opt/nginx/aiinspector-frontend3/config/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/aiinspector-frontend3/logs:/var/log/nginx $rep || ! echo "cannot run container:$rep,exit" || exit
echo "----build nginx container end-------"
  • 执行启动文件命令: sh build-aiinspector-frontend3.sh
    在这里插入图片描述

三、查看启动容器

  • docker ps
    在这里插入图片描述
  • 浏览器访问:http://localhost:port

四、总结

  • docker容器化部署前端项目,首先需要拉去一个nginx基础镜像;
  • 需要编写Dockerfile制作镜像;
  • 需要配置nginx.conf配置文件;
  • 需要编写一个启动容器项目的脚本;
  • 宿主机的端口不能被其他程序占用,否则启动失败。

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

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

相关文章

类与对象-对象特性

师从黑马程序员 对象的初始化和清理 构造函数和析构函数 用于完成对象的初始化和清理工作 如果我们不提供构造和析构,编译器会提供编译器提供的构造函数和析构函数是空实现 构造函数:主要用于创建对象时为对象的成员属性赋值,构造函数由编…

什么是机器视觉?

什么是机器视觉 近年来,人工智能渐渐成为一个热点话题。作为人工智能领域的一个分支,图像处理技术也随之发展到了一个新的高度,各种新的软件工具、算法库、开源资料不断涌现,各行各业也渐渐开始进行技术变革。比较典型的例子是&a…

运维常见的工具

当谈到DevOps时,有许多工具可用于自动化、协作和监控软件开发和运维过程。收集整理了以下DevOps常见的工具及其简介: 版本控制:Git - 分布式版本控制系统,用于协作开发和追踪代码变更。 持续集成:Jenkins - 开源自动…

【论文笔记】Gemma: Open Models Based on Gemini Research and Technology

Gemma 日期: March 5, 2024 平台: CSDN, 知乎 状态: Writing Gemma: Open Models Based on Gemini Research and Technology 谷歌最近放出的Gemma模型【模型名字来源于拉丁文gemma,意为宝石】采用的是与先前Gemini相同的架构。这次谷歌开源了两个规模的模型&…

Android抓包--不走代理的请求Proxy.NO_PROXY,过代理检测,burpsuite+Postern

网上很多不走代理检测的抓包都是charles + Postern 或 charles + Postern + burpsuite,本文使用burpsuite+Postern。 使用无代理 Proxy.NO_PROXY 访问网络接口原理 在Android开发中,大部分的App的网络请求都是基于charles 和 fiddler 来进行抓包的,对网络客户端使用无代理模…

【2024】vue-router和pinia的配置使用

目录 vue-routerpiniavue-routerpinia进阶用法---动态路由 有同学在项目初始化后没有下载vue-router和pinia,下面开始: vue-router npm install vue-router然后在src目录下创建文件夹router,以及下面的index.ts文件: 写进下面的…

短剧小程序:掌中剧院,随时上演

在繁忙的生活节奏中,我们总渴望找到一片属于自己的休闲空间。短剧小程序,就是这样一处随时随地都能让你沉浸其中的掌上剧院。无论你在何处,无论何时,只要轻轻一点,精彩纷呈的短剧即刻上演。 一、掌中剧院,…

学习Java的第二天

如何使用文本文档在cmd里打印出HelloWorld 1、创建一个文本文档,并命名为HelloWorld,将后缀改为java(需要自己去把后缀打开显示出来) 2、打开编辑 也可以双击打开 3、在里面写出以下代码 上面红框里为你要打印的语句,…

MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)

一、MySql、Navicat 软件安装 及正常使用 MySql下载+安装: 检查安装情况: 配置环境变量: 搞定了!!! 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …

【C++】102.二叉树的层序遍历

题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]示例 2&#xff1…

leetcode230. 二叉搜索树中第K小的元素

lletcode 230. 二叉搜索树中第K小的元素,链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst 题目描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 …

自学Java的第二十一天(在学校版)

一,每日收获 类与对象 1.看一个养猫猫问题 2.使用现有技术解决 Object01.java 3.类与对象的关系示意图 4.快速入门 5.类和对象的区别和联系 6.对象在内存中存在形式 7.属性/成员变量/字段 8.如何创建对象 9.如何访问属性 二,新名词与小技巧 三…

【Linux】Linux网络故障排查与解决指南

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 检查网络连接状态: 检查路由表: 检查DNS配置: 检查网络连接状态: 检查防火墙设…

JavaScript | 【讨论】微软早在2022年已经停用ie的今天,js开发还需要考虑ie9以下的情况嘛?

CSDN的C知道机器回复: 在进行JavaScript开发时,通常需要考虑IE9以下的况。尽管IE9以下的浏览器在市场份额上逐渐减少,但仍然有一部分用户在使用这些旧版本的浏览器。为了确保网站或应用在这些浏览器上能够正常运行,以下是一些需要…

Igraph入门指南 2

3、图的基本要素——边(Edge|Arc) 图的最本质的内容是一种二元关系,如果给这种二元关系赋予一个方向,就产生了有向图和无向图的分类,在教材中,无向的边叫Edge,有向的边叫Arc,另外,根据两个顶点…

【C++】贪心算法

贪心算法(Greedy Algorithm)是一种基于贪心策略的算法,它在每一步选择中都采取当前状态下最优的选择,以希望最终得到全局最优解。贪心算法通常适用于满足最优子结构性质的问题,即问题的最优解可以通过其子问题的最优解…

KOA优化高斯回归预测(matlab代码)

KOA-高斯回归预测matlab代码 开普勒优化算法(Kepler Optimization Algorithm,KOA)是一种元启发式算法,灵感来源于开普勒的行星运动规律。该算法模拟行星在不同时间的位置和速度,每个行星代表一个候选解,在…

列表循环多个el-form-item并校验

必须套一层 const ruleForm ref({ list: [ { name: } ] }) <el-form-item label"名称" :prop"list[${index}].name" :rules"rules.name"> <el-input v-model"item.name" maxlength"30" /> </el…

指针数组初始化,不常见啊

今天无意间看到这样一段代码&#xff0c;因为还是第一次看到&#xff0c;这是glibc库里的代码&#xff0c;写出来分享一下&#xff1a; #ifndef ERR_MAP # define ERR_MAP(n) n #endif const char *const _sys_errlist_internal[] { #define _S(n, str) [ERR_MAP(n)] …

WebGIS开发0基础必看教程:矢量查询

1.前言 在第七章里我们知道了WebGIS中要素的本质是UIComponent&#xff0c;而矢量图层的本质是包含了n&#xff08;n>0&#xff09;个UIComponent的Canvas。我们在UIComponent的graphics中&#xff0c;根据矢量数据画出矢量的形状(shape)&#xff0c;并且将矢量数据的属性(…