Docker 部署项目,真的太雅了~

大家好,我是南城余! 最近在找工作,正好手里有台服务器,之前项目上线用的宝塔部署项目上线,在公司实习了一年后,发现如今项目部署都使用的是容器化部署方案,也就是类似于和 Docker 一样的部署方案。今天一篇文章带大家用 Docker 部署前后端项目。

前端分别用域名和无域名实现了下。具体可以见下方步骤描述: <a name="LkpKO"></a>

1、后端

IDEA 打包,如下图:

image.png

<a name="zFeJ5"></a>

1.1、dockerfile

在任意目录下创建 Dockerfile 文件,如 /app,并上传这两个文件。

image.png

# 使用官方 Java 镜像作为基础镜像
FROM openjdk:8-jdk
​
# 设置容器内的工作目录
WORKDIR /app
​
# 复制本地文件到容器内的工作目录
COPY ./*.jar /app/app.jar
​
# 指定容器启动后执行的命令,这里使用 java 命令运行 Spring Boot 应用
CMD ["java", "-jar", "app.jar"]
​
# 暴露端口,如果 Spring Boot 应用使用了不同的端口,需要修改
EXPOSE 8001

<a name="T4Owj"></a>

1.2、构建镜像包

创建完成后,用docker build -t techmindwave-backend:1.0 .构建镜像包。 <a name="K9ImQ"></a>

1.3、启动容器

docker run -p 8001:8001 -d techmindwave-backend:1.0

此处,按照上方已经成功部署 若是云服务器,记得开放相应端口

image.png

<a name="RLmq5"></a>

2、前端(无域名)

<a name="K7oh3"></a>

2.1、Dockerfile

nginx.conf

# 使用官方 Nginx 镜像作为基础镜像
FROM nginx:latest
​
# 将本地的 Nginx 配置文件复制到镜像的配置文件目录
COPY ./nginx.conf /etc/nginx/nginx.conf
​
# 将构建好的前端静态文件复制到 Nginx 的 www 目录下
COPY ./dist /usr/share/nginx/html
​
events {}
​
http {server {listen 800; # 监听 800 端口## 添加上这个配置
​location / {try_files $uri $uri/ @router;index index.html;}
​location @router {rewrite ^.*$ /index.html last;}
​# 静态文件服务root /usr/share/nginx/html;index index.html;
​# 配置反向代理location /api {proxy_pass http://106.14.202.122:8001/;  # 将请求转发到指定地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
}
​

<a name="z5Pm0"></a>

2.2、构建镜像包

创建完成后,用docker build -t techmindwave-frontend:1.0 .构建镜像包。 <a name="HzZbg"></a>

2.3、启动容器

docker run -p 800:800 -d techmindwave-frontend:1.0

<a name="LluvQ"></a>

3、前端(有域名)

<a name="yS10S"></a>

3.1、Dockerfile
# 使用官方 Nginx 镜像作为基础镜像
FROM nginx:latest
​
# 将本地的 Nginx 配置文件复制到镜像的配置文件目录
COPY ./nginx.conf /etc/nginx/nginx.conf
​
# 将构建好的前端静态文件复制到 Nginx 的 www 目录下
COPY ./dist /usr/share/nginx/html
​
COPY ./default.conf /etc/nginx/conf.d/default.conf
​
#将ssl证书复制到容器中
copy ./certificates /etc/nginx/ssl
​
​
# Expose ports 80 and 443
EXPOSE 80
EXPOSE 443

** default.conf **

server {listen 80;server_name techmindwave.nanchengyu.cn;
​# Redirect HTTP to HTTPSreturn 301 https://$host$request_uri;
}
​
server {listen 443 ssl;server_name techmindwave.nanchengyu.cn;
​ssl_certificate /etc/nginx/ssl/nginx.pem;ssl_certificate_key /etc/nginx/ssl/nginx.key;
​ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;
​root /usr/share/nginx/html;index index.html;
​location / {try_files $uri $uri/ /index.html;}# 配置反向代理location /api {proxy_pass http://106.14.202.122:8001/;  # 将请求转发到指定地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}
​

nginx.conf

user  nginx;
worker_processes  auto;
​
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" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
​access_log  /var/log/nginx/access.log  main;
​sendfile        on;keepalive_timeout  65;
​include /etc/nginx/conf.d/*.conf;
}
​

<a name="y1LHf"></a>

3.2、构建镜像包

创建完成后,用docker build -t techmindwave-frontend:3.0 .构建镜像包。 <a name="ZgYtF"></a>

3.3、启动容器
docker run -d -p 80:80 -p 443:443 \-v ./certificates/nginx.pem:/etc/nginx/ssl/nginx.pem \-v ./certificates/nginx.key:/etc/nginx/ssl/nginx.key \--name my-nginx-container techmindwave-frontend:3.0

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

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

相关文章

海外仓系统能解决海外仓哪些难题?海外仓标准化管理实用指南

海外仓管理问题常常导致业务流程变慢&#xff0c;根据我们的调查显示&#xff0c;至少有48%的海外仓每周都会出现一些“小意外”。甚至这些小问题每天都在发生&#xff0c;问题的出现已经严重影响到了海外仓业务的进行。今天我们将重点分析海外仓比较常见的一些问题&#xff0c…

springboot vue 开源 会员收银系统 (7) 收银台的完善 新增开卡 结算

前言 完整版演示 开发版演示 在前面的开发中&#xff0c;我们成功完成了商品分类和商品信息的搭建&#xff0c;开发了收银台基础。现在&#xff0c;我们将进一步完善收银台的功能&#xff0c;添加开卡和结算功能&#xff0c;并在后台实现会员卡的创建和订单保存。同时&#xff…

地瓜网络技术综合助手教你一键下载腾讯会议高清视频

当您错过腾讯会议的直播课程&#xff0c;不必担心&#xff0c;地瓜网络技术综合助手帮您轻松获取视频回放。 只需几个简单步骤&#xff0c;即可在手头保留珍贵的学习资料。 首先&#xff0c;启动地瓜网络技术综合助手&#xff0c; 进行软件初始化并开启监测功能。 接下来&…

智慧乡村和美人家信息化系统

一、简介 智慧乡村和美人家信息化系统是一个综合管理平台&#xff0c;集成了首页概览、一张图可视化、数据填报、智能评估、便捷申报、公开公示、任务管理、活动发布和灵活配置等功能。该系统不仅提升了乡村管理效率&#xff0c;也优化了家庭生活的便捷性。通过一张图&#xf…

BEVM背靠比特大陆打造新赛道,算力RWA成下一个千亿市场?

众所周知&#xff0c;在加密行业&#xff0c;每隔一段时间就会有一个新的概念或者一个新词出现&#xff0c;并引来社区和资本的追捧关注&#xff0c;笔者近期在浏览新闻时&#xff0c;发现了一个特别有意思的新概念——算力RWA&#xff0c;在社区引起了不少讨论。 该词最早出现…

Flutter【组件】按钮

简介 flutter 按钮组件。提供一种封装按钮组件的思路&#xff0c;并不支持过多的自定义属性。根据使用场景及设计规范进行封装&#xff0c;使用起来比较方便。 github地址&#xff1a;https://github.com/ThinkerJack/jac_uikit pub地址&#xff1a;https://pub.dev/package…

el-upload组件校验不通过预览列表依然显示图片问题解决

如图校验不通过的图片依然显示在预览列表了&#xff0c;需要在校验不通过的时候移除图片 <el-uploadclass"upload-cls":action"ossSignature.host":auto-upload"false"ref"upload":list-type"listType":limit"limi…

如何在React中使用CSS模块,并解释为什么使用它们比传统CSS更有益?

在React中使用CSS模块是一种将CSS类名局部化到单个组件的方法&#xff0c;从而避免了全局作用域中的类名冲突。CSS模块允许你为组件编写样式&#xff0c;并确保这些样式只应用于该组件&#xff0c;而不会影响到其他组件。 以下是在React中使用CSS模块的步骤&#xff1a; 安装C…

医疗器械3D全景展会在线漫游创造数字化时代的展览新篇章

在数字化浪潮的引领下&#xff0c;VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光&#xff0c;凭借优质的服务和丰富的经验&#xff0c;赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战&#xff0c;许…

深入浅出Git原理与Gitflow流程

1 Git原理 版本控制系统在软件开发和团队协作中扮演着至关重要的角色。它们帮助开发人员跟踪和管理代码的变化&#xff0c;协调多人同时编辑同一代码库&#xff0c;回溯历史版本&#xff0c;并解决代码冲突等问题。Git作为当今最流行的分布式版本控制系统&#xff0c;为开发人…

C++ 59 之 纯虚函数和抽象类

#include <iostream> #include <string> using namespace std;class Cal { // 类中有纯虚函数&#xff0c;这个类也叫做抽象类&#xff0c;无法实现实例化 public:int m_a;int m_b;// 虚函数// virtual int getRes(){// return 0;// }// 纯虚函数 作用和虚函数…

Python第二语言(十三、PySpark实战)

目录 1.开篇 2. PySpark介绍 3. PySpark基础准备 3.1 PySpark安装 3.2 掌握PySpark执行环境入口对象的构建 3.3 理解PySpark的编程模型 4. PySpark&#xff1a;RDD对象数据输入 4.1 RDD对象概念&#xff1a;PySpark支持多种数据的输入&#xff0c;完成后会返回RDD类的对…

有关计算素数的算法

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝黑暗的笼罩更会凸显光明的可贵! 一、引言 什么是素数 素数,也被称为质数,是指在大于1的自然数中,只能被1和它本身…

[Shell编程学习路线]——for循环应用技巧 语法和案例

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月20日16点21分 &#x1f004;️文章质量&#xff1a;96分 目录 ————前言———— for 循环语句 基本结构 图示原理…

【启明智显产品分享】Model3工业级HMI芯片详解系列专题(三):安全、稳定、高防护

芯片作为电子设备的核心部件&#xff0c;&#xff0c;根据不同的应用领域被分为不同等级。工业级芯片适用于工业自动化、控制系统和仪器仪表等领域&#xff0c;对芯片的安全、稳定、防护能力等等有着较高的要求。这些芯片往往需要具备更宽的工业温度范围&#xff0c;能够在更恶…

分布式锁三种方案

基于数据库的分布式锁&#xff08;基于主键id和唯一索引&#xff09; 1基于主键实现分布式锁 2基于唯一索引实现分布式锁 其实原理一致&#xff0c;都是采用一个唯一的标识进行判断是否加锁。 原理&#xff1a;通过主键或者唯一索性两者都是唯一的特性&#xff0c;如果多个…

抉择与未来:高考后专业与学校的深度选择思考

引言 随着2024年高考的尘埃落定&#xff0c;数百万考生及其家庭正面临一个至关重要的决策&#xff1a;在有限的分数条件下&#xff0c;是优先选择专业还是学校&#xff1f;这一选择不仅影响着个人的未来职业道路&#xff0c;也关系到大学生活的质量和个人综合素质的培养。本文将…

【单片机】DS2431芯片,读写128个字节,程序

ds2431pt&r stm32读写程序&#xff1a; 部分程序&#xff1a; #include "sys.h" #include "delay.h" #include "usart.h"#include <stdio.h> #include <stdlib.h> #include <string.h>#include "sys.h" #incl…

openEuler搭建hadoop Standalone 模式

Standalone 升级软件安装常用软件关闭防火墙修改主机名和IP地址修改hosts配置文件下载jdk和hadoop并配置环境变量配置ssh免密钥登录修改配置文件初始化集群windows修改hosts文件测试 1、升级软件 yum -y update2、安装常用软件 yum -y install gcc gcc-c autoconf automake…

【APP_汽修宝】数据采集案例APP_数据解密分析

如果不会写代码&#xff0c;那就出书、写博客、做视频、录播客。 &#x1f4da; S35赛季末王者昭君罗 关键代码定位 使用方法【逆向-快速定位关键代码】通过hook常用函数HashMap方法 动态分析 下面是我们通过访问目标页面时 Frida hook 捕获HashMap的调…