从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镜像

bash 复制代码
sudo docker pull nginx
sudo docker images

(5)编写nginx.conf

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

bash 复制代码
vim /root/hosptal/hospital-nginx/nginx.conf
bash 复制代码
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

bash 复制代码
# 容器的名字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

前端部署成功

输入账号,登录

说明前后端联调成功

相关推荐
蓝染k9z1 分钟前
在Ubuntu上使用Docker部署DeepSeek
linux·人工智能·ubuntu·docker·deepseek+
爱是小小的癌4 分钟前
Java-数据结构-优先级队列(堆)
java·前端·数据结构
苏-言39 分钟前
Linux环境下的Java项目部署技巧:安装 Mysql
linux·运维·mysql
傻小胖41 分钟前
vue3中Teleport的用法以及使用场景
前端·javascript·vue.js
加油,旭杏1 小时前
【go语言】函数
开发语言·后端·golang
wl85111 小时前
Vue 入门到实战 七
前端·javascript·vue.js
代码对我眨眼睛1 小时前
重回C语言之老兵重装上阵(十三)C 预处理器
linux·c语言
2501_903238651 小时前
自定义登录页面的Spring Security实践
java·后端·spring·个人开发
张文君1 小时前
ubuntu直接运行arm环境qemu-arm-static
linux·arm开发·ubuntu
lljss20202 小时前
在 WSL2 中重启 Ubuntu 实例
linux·运维·ubuntu