从0开始在linux服务器上部署SpringBoot和Vue

目录

一、申请服务器的IP

(1)阿里云申请IP

(2)设置服务器的密码

(3)远程终端——MobaXterm

二、Docker

(1)安装Docker

(2)镜像加速

(3)删除镜像/容器指令

删除镜像

删除容器

三、MySQL

(1)拉取MySQL镜像

(2)阿里云服务器开放端口权限

(3)navicat连接服务器

(4)导入sql文件 

四、Springboot

(1)创建目录

(2)在本地配置application.yml

(3)在本地打包jar发送到服务器

(4)如需在本地对jar进行加密编译(代码混淆)

(5)编写Dockerfile

(6)构建springboot容器

(7)运行容器

五、Vue

(1)在本地修改配置

(2)构建静态文件

(3)dist移动至服务器

(4)拉取nginx的Docker镜像

(5)编写nginx.conf

(6)运行docker

(7)浏览器输入url测试


一、申请服务器的IP

(1)阿里云申请IP

例如申请的IP为8.146.208.150(已失效,仅为演示),服务器是ubuntu的linux服务器

(2)设置服务器的密码

密码是xxxx,用户是root

(3)远程终端——MobaXterm

使用MobaXterm为例:

然后输入密码xxxx

二、Docker

以ubuntu服务器为例:

【Docker】在 Ubuntu 上安装 Docker 的详细指南_ubuntu安装docker-CSDN博客

(1)安装Docker

sudo apt update
​
#检查系统版本
lsb_release -a
​
sudo apt install apt-transport-https ca-certificates curl software-properties-common
​
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
​
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
​
sudo apt update
​
sudo apt install docker-ce
​
#启动docker
sudo systemctl start docker
​
#启动linux时自动启动
sudo systemctl enable docker

(2)镜像加速

vim /etc/docker/daemon.json

输入以下:

{
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    },
​
​
    "registry-mirrors": ["https://docker.registry.cyou",
        "https://docker-cf.registry.cyou",
        "https://dockercf.jsdelivr.fyi",
        "https://docker.jsdelivr.fyi",
        "https://dockertest.jsdelivr.fyi",
        "https://mirror.aliyuncs.com",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.iscas.ac.cn",
        "https://docker.rainbond.cc"
    ]
​
​
}

然后输入:wq

重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

(3)删除镜像/容器指令

删除镜像

sudo docker rmi -f hospital-image
sudo docker rmi -f hospital-ui

删除容器

sudo docker rm -f hospital-spring
sudo docker rm -f hospital-vue

三、MySQL

(1)拉取MySQL镜像

#拉取mysql8.0.22版本
sudo docker pull mysql:8.0.22
​
#查看所有镜像
docker images
​
#运行mysql8.0容器
​
#容器名字mysql8.0
# --restart=always表示 Docker 容器会在退出时自动重启
# 暴露的端口7255
# 密码123456
sudo docker run -d \
  --restart=always \
  --name=mysql8.0 \
  -v /data/mysql:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 7255:3306 \
  mysql:8.0.22
  
#查看所有运行的容器
docker ps
​

(2)阿里云服务器开放端口权限

开放7211前端端口,开放7233后端端口,开放7255数据库MySQL的端口

(3)navicat连接服务器

看到绿色的线说明连接成功了

(4)导入sql文件 

四、Springboot

(1)创建目录

hospital-backend存放后端代码

hospital-nginx存放前端

Imgdata存放该后端项目产生的文件

(2)在本地配置application.yml

server:
  port: 7233 #后端的端口

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://8.146.208.150:7255/hospital3?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true #后端IP+服务器端口+数据库名
    username: root 
    password: 123456 #数据库密码

mybatis-plus:
  mapper-locations: classpath*:mybatis/*.xml
  configuration:
    map-underscore-to-camel-case: true

bear:
  #image-address: /home/ubuntu/hosptal/Imgdata/ #图片和视频保存的本地路径
  image-address: /root/hosptal/Imgdata/
  mmbt-ip: 8.146.208.150     #mmbt模型的服务器IP
  mmbt-port: 7266         #mmbt模型的服务器port
  cnn-gcn-ip: 8.146.208.150   #cnn-gcn模型的服务器IP
  cnn-gcn-port: 7267      #cnn-gcn模型的服务器port

(3)在本地打包jar发送到服务器

Hospital-1.0-SNAPSHOT.jar上传到/root/hosptal/hospital-backend/

(4)如需在本地对jar进行加密编译(代码混淆)

在pom.xml中引入classfinal-maven-plugin插件

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>net.roseboy</groupId>
                <artifactId>classfinal-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <password>123456</password><!--加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码-->
                    <packages>com.bear.hospital</packages>
                    <cfgfiles>application.yml</cfgfiles>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>classFinal</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

    </build>

验证运行生成的 Hospital-1.0-SNAPSHOT-encrypted.jar

java -javaagent:Hospital-1.0-SNAPSHOT-encrypted.jar -jar Hospital-1.0-SNAPSHOT-encrypted.jar

输入pom.xml设置密码的123456

然后Hospital-1.0-SNAPSHOT-encrypted.jar移入服务器

(5)编写Dockerfile

vim /root/hosptal/hospital-backend/Dockerfile
# 使用jdk11版本
FROM openjdk:11-jdk 

# 在镜像中创建一个目录存放我们的应用
VOLUME /root/hosptal/temp

# 将jar包添加到容器中并更名为hospital.jar
ADD *.jar hospital.jar

# 暴露容器内的端口给外部访问
EXPOSE 7233

CMD ["java", "-jar", "/hospital.jar"] 

#如果是加密的编译文件
#CMD ["java", "-javaagent:/hospital.jar", "-jar", "/hospital.jar"] 

然后输入:wq

文件在目录中的存放:

(6)构建springboot容器

# .的意思是在当前目录下搜索有没有dockerfile文件
# hospital-image是容器名

sudo docker build -t hospital-image .

(7)运行容器

# 运行容器
# hospital-spring是容器名字,hospital-image是镜像名字
sudo docker run -d -p 7233:7233 --name hospital-spring hospital-image

# 查看后端程序运行日志
sudo docker logs hospital-spring

五、Vue

(1)在本地修改配置

 

port: 8091, proxy: "http://localhost:9999"

这些都是不要紧的,属于vue的动态代理,但是打包后的dist是静态项目

(2)构建静态文件

在本地对vue项目进行构建dist

npm run build

 点击index.html是可以直接跳转到网页的

(3)dist移动至服务器

移动到/root/hosptal/hospital-nginx/html/目录

(4)拉取nginx的Docker镜像

sudo docker pull nginx
sudo docker images

(5)编写nginx.conf

在/root/hosptal/hospital-nginx/目录下创建nginx.conf:

vim /root/hosptal/hospital-nginx/nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/json;

    sendfile        on;

    keepalive_timeout  65;

    server {
	    listen       7211; #注意这里是前端端口
	    # server_name  8.146.208.150; #注意这里是服务器IP

	    location / {
	        root   /usr/share/nginx/html/dist; #注意这里
	        index  index.html index.htm;
	    }

	    location /admin {
	        proxy_pass  http://8.146.208.150:7233/admin; #注意这里是后端反向代理
	        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;
	    }
	    location /doctor {
	        proxy_pass  http://8.146.208.150:7233/doctor;
	        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;
	    }
	    location /notice {
	        proxy_pass  http://8.146.208.150:7233/notice;
	        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;
	    }
	    location /patient {
	        proxy_pass  http://8.146.208.150:7233/patient;
	        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;
	    }
	    location /consultation {
	        proxy_pass  http://8.146.208.150:7233/consultation;
	        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;
	    }
	    location /model {
	        proxy_pass  http://8.146.208.150:7233/model;
	        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;
	    }
	    error_page   500 502 503 504  /50x.html;
	    location = /50x.html {
                root   html;
            }
	}
}

然后输入:wq

(6)运行docker

# 容器的名字hospital-nginx,镜像的名字nginx
# 暴露的端口7211
# 把[html文件夹]和[nginx.conf文件]挂载

docker run -d \
  --name hospital-nginx \
  --restart=always \
  -p 7211:7211 \
  -v /root/hosptal/hospital-nginx/html:/usr/share/nginx/html \
  -v /root/hosptal/hospital-nginx/nginx.conf:/etc/nginx/nginx.conf \
  nginx

(7)浏览器输入url测试

输入8.146.208.150:7211

前端部署成功

输入账号,登录 

说明前后端联调成功

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业销售人员培训系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

智能家居实训室中,STC单片机驱动的“互联网+”智能家居系统设计

一、引言 随着经济的快速发展&#xff0c;人们对家居环境的智能化、网络化需求日益增强&#xff0c;智能家居的研究也因此受到了国内外相关机构的广泛关注。STC单片机凭借其卓越的性能和广泛的应用领域&#xff0c;成为了智能家居系统设计的优选方案。作为一种先进的微控制器&…

替代传统FTP传输,镭速大数据传输系统实现安全高效数据流转!

信息技术的快速进步让大数据成为了企业决策的关键支撑&#xff0c;但同时也带来了巨大的挑战。企业在运营过程中产生的数据量急剧增加&#xff0c;这对数据传输的速度、安全性和效率提出了更高的要求。然而&#xff0c;传统的FTP传输方式在处理大规模数据时显得力不从心&#x…

渗透Vulnhub-Solidstate靶机

本篇文章旨在为网络安全渗透测试行业靶机教学。通过阅读本文&#xff0c;读者将能够对渗透Vulnhub系列Solidstate靶机有定的了解 一、信息收集阶段 靶机官网&#xff1a;https://www.vulnhub.com/entry/solidstate-1%2C261/ 因为靶机为本地部署虚拟机网段&#xff0c;查看dhcp…

前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案

目录 场景还原 相关代码开发者工具 - 网络请求记录 问题排查 定位改bug 总结 场景还原 我在前端使用axios接收后端xlsx表格文件流并下载&#xff0c;xlsx文件能够下载成功&#xff0c;但是打开却显示文件无法打开 相关代码 请求API封装:Content–Type以及responseType经核…

什么样的LabVIEW控制算自动控制?

自动控制是指系统通过预先设计的算法和逻辑&#xff0c;在无人工干预的情况下对被控对象的状态进行实时监测、决策和调整&#xff0c;达到预期目标的过程。LabVIEW作为一种图形化编程工具&#xff0c;非常适合开发自动控制系统。那么&#xff0c;什么样的LabVIEW控制算作“自动…

【机器学习】探索机器学习与人工智能:驱动未来创新的关键技术

探索机器学习与人工智能&#xff1a;驱动未来创新的关键技术 前言&#xff1a;人工智能的核心技术深度学习&#xff1a;自然语言处理&#xff08;NLP&#xff09;&#xff1a;计算机视觉&#xff1a; 机器学习与人工智能的驱动创新医疗健康领域金融行业智能制造与工业互联网智慧…

在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)

一、概述 记录时间 [2024-12-26] 本文讲述如何在 Vue3 项目中使用计时器组件。具体包括开发环境的配置&#xff0c;ViteVue 项目的创建&#xff0c;Element Plus 插件的使用&#xff0c;以及计时器组件的创建和使用。 想要直接实现计时器组件&#xff0c;查看文章的第四部分。…

图神经网络_图嵌入_Struc2Vec

0 背景 之前的node embedding方式&#xff0c;都是基于近邻关系&#xff0c;但是有些节点没有近邻&#xff0c;也有结构相似性。如图中的u、v节点。 struc2vec算法适用于捕获结构相似性。 1 相似度&#xff08;距离&#xff09;计算 1.1 公式 f k ( u , v ) f k − 1 ( u …

JZ31 栈的压入、弹出序列

题目来源&#xff1a;栈的压入、弹出序列_牛客题霸_牛客网 题目&#xff1a;如下 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序&#xf…

Android 蓝牙开发-传输数据

概述 传统蓝牙是通过建立REFCCOM sockect来进行通信的&#xff0c;类似于socket通信&#xff0c;一台设备需要开放服务器套接字并处于listen状态&#xff0c;而另一台设备使用服务器的MAC地址发起连接。连接建立后&#xff0c;服务器和客户端就都通过对BluetoothSocket进行读写…

Java圣诞树

目录 写在前面 技术需求 程序设计 代码分析 一、代码结构与主要功能概述 二、代码功能分解与分析 1. 类与常量定义 2. 绘制树的主逻辑 3. 彩色球的绘制 4. 动态效果的实现 5. 窗口初始化 三、关键特性与优点 四、总结 写在后面 写在前面 Java语言绘制精美圣诞树…

认识计算机网络

单单看这一个词语&#xff0c;有熟悉又陌生&#xff0c;让我们来重新认识一下这位大角色——计算机网络。 一、是什么 以及 怎么来的 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路和通信设备连接起来&#xff0c;在网络操作…

【再谈设计模式】享元模式~对象共享的优化妙手

一、引言 在软件开发过程中&#xff0c;我们常常面临着创建大量细粒度对象的情况&#xff0c;这可能会导致内存占用过高、性能下降等问题。享元模式&#xff08;Flyweight Pattern&#xff09;就像是一位空间管理大师&#xff0c;它能够在不影响功能的前提下&#xff0c;有效地…

用Python写炸金花游戏

文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **打印结果** 完整代码 以下游戏规则&#xff1a; 那么我们要实现的功能&#xff0c;就是…

WebRTC服务质量(07)- 重传机制(04) 接收NACK消息

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…

Cadence学习笔记 11 PCB中器件放置

基于Cadence 17.4&#xff0c;四层板4路HDMI电路 更多Cadence学习笔记&#xff1a;Cadence学习笔记 1 原理图库绘制Cadence学习笔记 2 PCB封装绘制Cadence学习笔记 3 MCU主控原理图绘制Cadence学习笔记 4 单片机原理图绘制Cadence学习笔记 5 四路HDMI原理图绘制Cadence学习笔记…

Docker 入门:如何使用 Docker 容器化 AI 项目(二)

四、将 AI 项目容器化&#xff1a;示例实践 - 完整的图像分类与 API 服务 让我们通过一个更完整的 AI 项目示例&#xff0c;展示如何将 AI 项目容器化。我们以一个基于 TensorFlow 的图像分类模型为例&#xff0c;演示如何将训练、推理、以及 API 服务过程容器化。 4.1 创建 …

三层交换机配置

一&#xff0c;三层交换 概念&#xff1a;三层交换技术就是&#xff1a;二层交换技术三层转发技术(路由器功能)。它解决了局域网中网段划分之后&#xff0c;网段中子网必须依赖路由器进行管理的局面&#xff0c;解决了传统路由器低速&#xff0c;复杂所造成的网络瓶颈问题。 …

LabVIEW应用在工业车间

LabVIEW作为一种图形化编程语言&#xff0c;以其强大的数据采集和硬件集成功能广泛应用于工业自动化领域。在工业车间中&#xff0c;LabVIEW不仅能够实现快速开发&#xff0c;还能通过灵活的硬件接口和直观的用户界面提升生产效率和设备管理水平。尽管其高成本和初期学习门槛可…