Spring boot前后端分离项目使用docker-compose部署在Ubuntu上 以及内网穿透,外网访问项目

news2024/11/20 12:30:54

docker-compose.yml部署vue + Springboot前后端分离项目 以及内网穿透,外网访问项目

  • 一、windows上部署前后端项目,测试
    • 1、前端Vue打包,放到nginx的html中
    • 2、nginx代理转发后端端口:
    • 4、后端Springboot项目使用Maven打包
  • 二、Linux上使用docker-compose部署项目
    • 1、Linux上创建nginx文件夹及配置文件
    • 2、编写Dockerfile与docker-compose.yml文件
      • 2.1 Dockerfile文件编写(`文件名必须是Dockerfile`)
      • 2.2 docker-compose.yml文件编写
    • 访问成功,后台部署完毕!
  • 三、Linux上部署的项目通过内网穿透实现`外网访问`

一、windows上部署前后端项目,测试

首先在windows上测试运行的项目没有问题。

1、前端Vue打包,放到nginx的html中

在这里插入图片描述
在这里插入图片描述

2、nginx代理转发后端端口:

注意:使用命令行方式打开和关闭nginx,不然手动点击和关闭,会出问题。
start nginx  #cmd命令中开启nginx
nginx -s stop 或者 nginx -s quit  #关闭nginx
# stop表示立即停止nginx,不保存相关信息
# quit表示正常退出nginx,并保存相关信息
nginx -s reload  # 重启(因为改变了配置,需要重启)
taskkill /im nginx.exe -f # 在用nginx发现找不到指令,网上找了一种强制关闭nginx的方法

色在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

		# 这里相当于前端发送http://localhost:8070/后端接口
        location /api/ {
            # 通过8070端口访问的这个路径, 会一直对应在8070这个路径下, 
           proxy_pass http://localhost:8070/; # 反向代理本地8070端口,这里8070后加'/',表示绝对路径,路径拼接时会去掉/api/
        }

在这里插入图片描述

4、后端Springboot项目使用Maven打包

 <!--打包时添加资源文件-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.yml</include>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.yml</include>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>

        <!--添加该插件,否则打包的jar包运行,找不到主类清单-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
          </plugins>
    </build>

在这里插入图片描述
在这里插入图片描述

java -jar jar包名

在这里插入图片描述

二、Linux上使用docker-compose部署项目

安转docker-compose这里就不提供了,新建nginx与Windos上的相同结构。

1、Linux上创建nginx文件夹及配置文件

在这里插入图片描述

# 编写nginx.conf内容根据自己需要更改。
vim nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080; # 前端端口号,nginx会自动:80 -> :8080
        server_name  192.168.120.130;  # Linux的IP

        location / {
            root   /usr/share/nginx/html;
            try_files  $uri  $uri/  /index.html last; # 添加这一行,原因自行搜索
            index  index.html index.htm;
        }
        
        location /api/ {
            # 可以填其他的, 可以是正则等, 这个没有细看(自行百度~)
            # 路径要和对应服务的路径相同, 比如localhost:8001/后面请求的所有路径
            # 通过8070端口访问的这个路径, 会一直对应在8070这个路径下,
           proxy_pass http://192.168.120.130:8070/; # 反向代理本地8070端口
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

2、编写Dockerfile与docker-compose.yml文件

2.1 Dockerfile文件编写(文件名必须是Dockerfile)

这里程序运行使用了外部的config/application.yml配置文件
如果使用内部文件,去掉 ,"--spring.config.location=/config/application.yml"
注意,使用外部配置文件时一定要记得程序配置文件更改时,同样换掉原先的配置文件。(程序改了半天配置文件,排查才想起来加载的是外部的配置文件。。。)

FROM java:8
EXPOSE 8070
ADD Application-1.0.0.jar application.jar

RUN bash -c 'touch /application.jar'
ENTRYPOINT ["java","-jar","/application.jar","--spring.config.location=/config/application.yml"]

2.2 docker-compose.yml文件编写

version: "2"
services:
  nginx: # 服务名称,用户自定义
    image: nginx:latest  # 镜像版本
    ports:
    - 8080:8080  # 暴露端口
    volumes: # 挂载,更改自己的文件位置   挂载结构:   - Linux文件`绝对位置`:容器中文件或文件夹位置
    - /root/nginx/html:/usr/share/nginx/html
    - /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    privileged: true # 这个必须要,解决nginx的文件调用的权限问题
  mysql:
    image: mysql:8.0.20
    ports:
    - 3306:3306
    environment: # 指定用户root的密码
      - MYSQL_ROOT_PASSWORD=123456
    volumes:
      - /home/mysql/mysql8.0.20/mysql:/etc/mysql
      - /home/mysql/mysql8.0.20/logs:/logs
      - /home/mysql/mysql8.0.20/data:/var/lib/mysql
      - /etc/localtime:/etc/localtime
    privileged: true
    restart: always

  application:
    image: application:latest
    build: . # 表示以当前目录下的Dockerfile开始构建镜像
    ports:
    - 8070:8070
    volumes:          #卷轴数据挂载同步  
      - /root/work_projects/Intelligent-Identification/config:/config
      - /root/work_projects/Intelligent-Identification/ip2region:/ip2region
      - /root/work_projects/Intelligent-Identification/dicts:/dicts
      - /root/work_projects/Intelligent-Identification/urls:/urls
      - /root/work_projects/Intelligent-Identification/logs:/logs
      - /root/work_projects/Intelligent-Identification/upload:/upload
    depends_on: # 依赖与mysql,其实可以不填,默认已经表示可以,这里依赖存在顺序,越往前,越先加载,注意顺序
      - mysql
docker-compose up -d

在这里插入图片描述
在这里插入图片描述

访问成功,后台部署完毕!

在这里插入图片描述

三、Linux上部署的项目通过内网穿透实现外网访问

一个免费的内网穿透方式,简单方便。
网址:https://www.cpolar.com/

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cpolar http 8080

在这里插入图片描述
在这里插入图片描述

sudo systemctl restart cpolar

在这里插入图片描述

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

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

相关文章

-aop-

文章目录一.动态代理实现invocationHandler二.AOP概述环绕通知Pointcut定义切入点一.动态代理实现invocationHandler 动态代理&#xff1a;可以在程序的执行过程中&#xff0c;创建代理对象。 通过代理对象执行方法&#xff0c;给目标类的方法增加额外的功能&#xff08;功能增…

Filebeat采集数据到ES保证数据不重复

一.背景 业务需求使然&#xff0c;API接口负责收集用户传递上来的json数据&#xff0c;为了保证接口性能和数据的可靠性。我们没有直接拿到数据&#xff0c;然后存储到mysql或者kafka&#xff0c;而是直接使用最稳妥的方式&#xff0c;写文件。之后采用filebeat对数据文件进行采…

8_1、Java基本语法之多线程基本概念

一、涉及到多线程的基本概念 1、程序(programm) 概念&#xff1a;是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码&#xff0c;静态对象。 2、进程(process) 概念&#xff1a;是程序的一次执行过程&#xff0c;或是正在运行的一个程…

Cy7 Tyramide, Tyramide-Cy7,花青素Cy7 酪酰胺化学试剂供应

一&#xff1a;产品描述 1、名称 英文&#xff1a;Cyanine7 Tyramide&#xff0c;Cy7 Tyramide&#xff0c;Tyramide-Cy7 中文&#xff1a;花青素Cy7 酪酰胺 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Cyanine 4、分子量&#xff1a;802.01 5、分子式&#xff…

Docker学习6-Docker镜像commit操作案例

在上一篇中&#xff0c;我们知道了docker是基于联合文件系统的分层镜像。而且也知道了镜像是只读的&#xff0c;容器才是可以写的。那么&#xff0c;如果我们要修改镜像&#xff0c;修改之后&#xff0c;怎么提交呢&#xff1f;本文&#xff0c;凯哥将介绍&#xff0c;docker的…

svd分解

sklearn中svd分解 class sklearn.decomposition.TruncatedSVD(n_components2, *, algorithmrandomized, n_iter5, random_stateNone, tol0.0) 参数&#xff1a; n_components&#xff1a;整数&#xff0c;默认2 输出数据的所需维度。必须严格小于特征数。默认值对可视化很有用…

Git 操作 Gitea 出现 kex_exchange_identification: Connection closed by remote host

1. 问题背景 我的部分代码储存在使用 Gitea 搭建的服务上: DevWiki - 首页 - DevWiki Gitea 之前都是使用网页在网站上进行 仓库管理, 今天在clone代码的时候出现异常: kex_exchange_identification: Connection closed by remote host, 具体以下提示: $ git clone gitgit.d…

【案例分享】跨机房ES同步实战

背景 众所周知单个机房在出现不可抗拒的问题&#xff08;如断电、断网等因素&#xff09;时&#xff0c;会导致无法正常提供服务&#xff0c;会对业务造成潜在的损失。所以在协同办公领域&#xff0c;一种可以基于同城或异地多活机制的高可用设计&#xff0c;在保障数据一致性…

微软CTO谈AI:逃不掉马拉松就准备好跑鞋!30秒自动化妆机;ChatGPT刷爆票圈;剪纸风格的AI绘画 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f3a1;AI应用与工具大全 | &#x1f514;公众号资料下载 | &#x1f369;韩信子 &#x1f4e2; 对话微软 CTO 凯文斯科特 (Kevin Scott)&#xff1a;人工智能将去向何方&#xff1f; https://blogs.microsoft.com/ai/a-conversation-with-kevi…

【卡塔尔世界杯】空调制冷,全是科技与狠活

半自动化越位技术比赛用球AI Rihla球场智能空调Feelix Palm辅助技术可持续利用的体育场便利的数字设施和App 西班牙队和英格兰队穿外套出场&#xff0c;卡塔尔的空调功率到底有多大&#xff1f; 还是很大的&#xff0c;不管是室外还是室内&#xff0c;到处都安装了空调&#…

Verilog系统函数

Verilog系统函数前言一、$width&#xff08;一&#xff09;简介&#xff08;二&#xff09;$width 参数&#xff08;三&#xff09;例子二、Specify参数三、$display&#xff08;一&#xff09;简介&#xff08;二&#xff09;格式说明&#xff08;三&#xff09;例子1.例12.例…

Bert论文解读及相关代码实践

Bert&#xff1a;Bidirectional Encoder Representations from Transformers Transformer中双向Encoder表达学习。BERT被设计为通过在所有层中对左右上下文进行联合调节&#xff0c;从未标记文本中预训练深度双向表示。预训练的BERT模型可以通过仅一个额外的输出层进行微调&am…

AVS-试听分割-论文阅读

题目: Audio-Visual Segmentation 论文地址:https://arxiv.org/abs/2207.05042 GitHub地址:https://github.com/OpenNLPLab/AVSBench 项目主页:https://opennlplab.github.io/AVSBench/ 相关博客https://arxiv.org/abs/2203.03821 摘要 We propose to explore a new pro…

(附源码)ssm汽车租赁 毕业设计 271621

基于ssm的汽车租赁平台的设计与实现 摘 要 随着社会经济的快速发展,我国机动车保有量大幅增加,城市交通问题日益严重。为缓解用户停车难问题,本文设计并实现了汽车租赁平台.该系统通过错峰停车达到车位利用率最大化.基于现状分析,本文结合实际停车问题,从系统应用流程,系统软硬…

微电网和直流电网中最优潮流(OPF)的凸优化(Matlab代码实现)

&#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;⛳️⛳️⛳️ 目录 1 概述 2 最优潮流 3 电力系统强大的CVX 4 直流电网中最优潮流&#xff08;OPF&#xff09;的凸优化 4.1 Matlab代码 4.2 运行结果 5 微电网中最优潮流&#xff08;OPF&#xff09;的凸优…

go gin web综合教程,包括 mysql redis log 路由

前言 在学习go许久&#xff0c;没看到网上有比较综合的gin web教程&#xff0c;很多都是最基础的教程&#xff0c;完全就是启动个服务返回参数&#xff0c;没有过多的结合实际开发。下面我结合一下我的经验&#xff0c;来写一篇深入的综合教程&#xff0c;包括数据库Mysql、re…

JMeter启动时常见的错误

很多小伙伴在学工具这一块时&#xff0c;安装也是很吃力的一个问题&#xff0c;之前记得有说过怎么安装jmeter这个工具。那么你要启动jmeter的时候&#xff0c;一些粉丝就会碰到如下几个问题。 1.解压下载好的jmeter安装&#xff0c;Windows 平台&#xff0c;双击 jmeter/bin …

基于python实现的SGM半全局立体匹配算法

文章目录前言一、SGM是什么&#xff1f;1.代价计算2.代价聚合3.视察计算4.视察优化二、基于python实现SGM算法&#xff1f;总结前言 开始正是入门立体匹配算法啦&#xff0c;会不断更新立体匹配的算法和代码。   水平有限&#xff0c;旨在先了解和读懂别人的代码的实现方式&a…

3D立体匹配入门 - 视差计算

经典假设 1、左右视图成功匹配的窗口&#xff0c;具有相同的像素 这个是最经典的假设&#xff0c;几乎所有视差图计算都用上了他&#xff0c;通过匹配左右窗口像素&#xff0c;得到最佳匹配对应的x轴坐标差&#xff0c;就是视差 2、像素P的视差只与其领域有关 这个是基于马尔…

外汇天眼:即使与世界第一的差价合约提供商交易也会被骗!

你能想象&#xff0c;当你与世界第一的差价合约提供商进行交易时&#xff0c;也可能会被骗吗&#xff1f; 在投资理财多元化的今天&#xff0c;外汇投资理财也备受大家的关注&#xff0c;而与此同时&#xff0c;骗子的诈骗渠道也与时俱进&#xff0c;各类外汇投资骗局也层出不穷…