使用阿里云轻量应用服务器安装Docker进行SpringBoot项目的部署上线

零、写在前面

项目源码:QiuShicheng/Qiu-blog (github.com)

项目是跟着B站up主【三更草堂】做的,本人最终系统是修改了一些前端代码。

(注:源码中前端代码未修改,仍是up主提供的)

购买了一个轻量应用服务器2核2G,新用户包年108元。

安装WinSCP,用于服务器与本地文件的传输。

请一起参考四、参考链接去操作,最后出错,数据库连不上,redis报错,可以尝试删除容器和镜像,重新操作。

一、工作准备

1.数据库打包

第一步:在D盘新建SpringBootBlogMySQL文件夹

第二步:win+r,在弹出的命令行黑窗口输入如下,-p是数据库密码,mybolgSite.sql是输出后的文件名

mysqldump -u root -p228675 sg_blog > D:\SpringBootBlogMySQL\mybolgSite.sql

第三步:查看SpringBootBlogMySQL文件夹,就会发现有一个mybolgSite.sql,这个就是数据库备份文件,也就是我们要的打包文件

2.后端项目打包

第一步: 把Qiu-admin(子工程)的application.yml文件修改为如下

server:port: 8989
spring:datasource:url: jdbc:mysql://服务器ip(公):3306/sg_blog?characterEncoding=utf-8&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverservlet:# 文件上传multipart:# 单个上传文件的最大允许大小max-file-size: 20MB# HTTP请求中包含的所有文件的总大小的最大允许值max-request-size: 20MBredis:host: 服务器ip(公)port: 6379mybatis-plus:configuration:# 日志log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:logic-delete-field: delFlaglogic-delete-value: 1logic-not-delete-value: 0id-type: auto# 打开七牛云,找到密钥管理,把相关信息填写到下面3行,会被Qiu-blog工程的OOSTest类获取
myoss:accessKey: _ibGP9wytjLCAZPqcFaWQNxbw7fMUvofSOvOFFR3secretKey: QSOAU-cv3sSDGNfVNPF6iXz-PsP5X9QTrjFI9zYwbucket: Qiu-blog

第二步: 把Qiu-blog(子工程)的application.yml文件修改为如下 

server:port: 7777spring:# 数据库连接信息datasource:url: jdbc:mysql://服务器ip(公).180:3306/sg_blog?characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverservlet:# 文件上传multipart:# 单个上传文件的最大允许大小max-file-size: 20MB# HTTP请求中包含的所有文件的总大小的最大允许值max-request-size: 20MB# springboot 2.6版本之后需要配置ant_path_matcher才能生使swagger生成接口文档# 我们目前的springboot版本是2.5.0,不需要配置ant_path_matcher也可正常使用swaggermvc:pathmatch:matching-strategy: ant_path_matcherredis:host: 服务器ip(公)port: 6379
mybatis-plus:
#  configuration:
#    # 日志
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:# 逻辑删除的字段logic-delete-field: delFlag# 代表已删除的值logic-delete-value: 1# 代表未删除的值logic-not-delete-value: 0# 主键自增策略,以mysql数据库为准id-type: auto# 打开七牛云,找到密钥管理,把相关信息填写到下面3行,会被Qiu-blog工程的OOSTest类获取
myoss:accessKey: _ibGP9wytjLCAZPqcFaWQNxbw7fMUvofSOvOFFR3secretKey: QSOAU-cv3sSDGNfVNPF6iXz-PsP5X9QTrjFI9zYwbucket: huanf-blog

 第三步: 把SpringBootBlog(父工程)的pom.xml文件修改为如下,然后刷新

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.QiuBolg</groupId><artifactId>QiuBolg</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><!-- Maven的聚合--><modules><module>Qiu-framework</module><module>Qiu-admin</module><module>Qiu-blog</module></modules><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencyManagement><dependencies><!-- SpringBoot的依赖配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.5.0</version><type>pom</type><scope>import</scope></dependency><!--fastjson依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.33</version></dependency><!--jwt依赖--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.0</version></dependency><!--mybatisPlus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency><!--阿里云OSS--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><executions><!--执行本插件的方法为,在主目录下执行如下命令:mvn package assembly:single对于 IntelliJ IDEA,生成的 JAR 包位于每个模块下的文件夹 target--><execution><id>make-assembly</id><phase>package</phase><goals><!-- 此处 IntelliJ IDEA 可能会报红,这是正常现象  --><goal>single</goal></goals></execution></executions><configuration><archive><manifest><!-- 配置程序运行入口所在的类 --><mainClass>com.Qiu.QiuBlogApplication</mainClass></manifest><manifest><!-- 配置程序运行入口所在的类 --><mainClass>com.Qiu.BlogAdminApplication</mainClass></manifest></archive><!-- 设置 JAR 包输出目录 --><outputDirectory>${project.build.directory}/#maven-assembly-plugin</outputDirectory><!-- 设置打包后的 JAR 包的目录结构为默认 --><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration></plugin></plugins></build>
</project>

第四步: 把Qiu-blog(子工程)的pom.xml文件修改为如下,然后刷新

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>QiuBolg</artifactId><groupId>com.QiuBolg</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>Qiu-blog</artifactId><dependencies><dependency><groupId>com.QiuBolg</groupId><artifactId>Qiu-framework</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.0</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins><finalName>${project.artifactId}</finalName></build>
</project>

第五步:Qiu-admin(子工程)的pom.xml文件修改为如下,然后刷新

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>QiuBolg</artifactId><groupId>com.QiuBolg</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>Qiu-admin</artifactId><dependencies><dependency><groupId>com.QiuBolg</groupId><artifactId>Qiu-framework</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.0</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins><finalName>${project.artifactId}</finalName></build>
</project>

第六步: 打开父工程所在的目录,导航栏输入cmd回车会弹出一个黑窗口

第七步: 在cmd输入如下,即可得到Qiu-admin(在Qiu-admin/target可找到jar包)、Qiu-blog(在Qiu-blog/target可找到jar包)工程的jar包。当然也得到了Qiu-framework工程的jar包(这个jar包用不上)

mvn package assembly:single

第八步: 测试jar包。只需要在Qiu-admin/target打开cmd输入如下,即可测试Qiu-admin或Qiu-blog工程的jar包,建议测试Qiu-admin工程的jar包,会比较方便

注意: 由于Qiu-blog在启动时必须要开redis,如果是测试Qiu-blog工程的jar包,那么你必须先开启redis

3.前端项目打包

第一步: 把sg-blog-vue(前台)项目的config目录下的index.js文件,port属性值从8080改为8093

第二步: 把sg-vue-admin(后台)项目的vue.config.js文件的port值从81改为8094

第三步: 把sg-blog-vue\src\vue.config.js文件,里面的localhost改为服务器ip。第33行左右。

第四步: 把sg-blog-vue\src\store\index.js文件,里面的localhost改为服务器ip。第13行左右。

第五步: 把sg-blog-vue的.env.development文件,里面的localhost改为服务器ip,注意端口是8989

# just a flag
ENV = 'development'# base api
VUE_APP_BASE_API = 'http://服务器ip(公):8989'

第六步: 把sg-blog-vue的.env.production文件,里面的localhost改为服务器ip,注意端口是8989

# just a flag
ENV = 'production'# base api
VUE_APP_BASE_API = 'http://服务器ip(公):8989'

第七步: 把sg-vue-admin的vue.config.js文件,里面的localhost改为服务器ip,注意端口是8989。第33行左右。

第八步: 把sg-vue-admin的.env.development文件,里面的localhost改为服务器ip,注意端口是8989。

# just a flag
ENV = 'development'# base api
VUE_APP_BASE_API = 'http://服务器ip(公):8989'

第九步: 把sg-vue-admin的.env.production文件,里面的localhost改为服务器ip,注意端口是8989

# just a flag
ENV = 'production'# base api
VUE_APP_BASE_API = 'http://8.137.35.5:8989'

第十步: 把sg-vue-admin\src\router\index.js文件修改为如下

import Vue from 'vue'
import Router from 'vue-router'Vue.use(Router)/* Layout */
import Layout from '@/layout'/*** Note: sub-menu only appear when route children.length >= 1* Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html** hidden: true                   if set true, item will not show in the sidebar(default is false)* alwaysShow: true               if set true, will always show the root menu*                                if not set alwaysShow, when item has more than one children route,*                                it will becomes nested mode, otherwise not show the root menu* redirect: noRedirect           if set noRedirect will no redirect in the breadcrumb* name:'router-name'             the name is used by <keep-alive> (must set!!!)* meta : {roles: ['admin','editor']    control the page roles (you can set multiple roles)title: 'title'               the name show in sidebar and breadcrumb (recommend set)icon: 'svg-name'/'el-icon-x' the icon show in the sidebarbreadcrumb: false            if set false, the item will hidden in breadcrumb(default is true)activeMenu: '/example/list'  if set path, the sidebar will highlight the path you set}*//*** constantRoutes* a base page that does not have permission requirements* all roles can be accessed*/
export const constantRoutes = [{path: '/login',component: () => import('@/views/login/index'),hidden: true},{path: '/',component: Layout,redirect: '/dashboard',children: [{path: 'dashboard',name: 'Dashboard',component: () => import('@/views/dashboard/index'),meta: { title: '首页', icon: 'dashboard' }}]},{path: '/write',component: Layout,children: [{path: '/',name: 'Write',component: () => import('@/views/content/article/write/index'),hidden: true}]},{path: '/system/user',component: Layout,children: [{path: '/',name: 'User',component: () => import('@/views/system/user'),hidden: true}]},{path: '/system/role',component: Layout,children: [{path: '/',name: 'role',component: () => import('@/views/system/role'),hidden: true}]},{path: '/system/menu',component: Layout,children: [{path: '/',name: 'menu',component: () => import('@/views/system/menu'),hidden: true}]},{path: '/system/role',component: Layout,children: [{path: '/',name: 'role',component: () => import('@/views/system/role'),hidden: true}]},{path: '/content/article',component: Layout,children: [{path: '/',name: 'article',component: () => import('@/views/content/article/index'),hidden: true}]},{path: '/content/category',component: Layout,children: [{path: '/',name: 'category',component: () => import('@/views/content/category/index'),hidden: true}]},{path: '/content/link',component: Layout,children: [{path: '/',name: 'link',component: () => import('@/views/content/link/index'),hidden: true}]},{path: '/content/tag',component: Layout,children: [{path: '/',name: 'tag',component: () => import('@/views/content/tag/index'),hidden: true}]}
]const createRouter = () => new Router({// mode: 'history', // require service supportscrollBehavior: () => ({ y: 0 }),routes: constantRoutes
})const router = createRouter()// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {const newRouter = createRouter()router.matcher = newRouter.matcher // reset router
}export default router

第十一步: 把sg-vue-admin\src\main.js文件,注释掉下面的内容

第十二步: 在sg-blog-vue项目的终端执行如下

npm run build

第十三步: 在sg-vue-admin项目的终端执行如下

npm run build:prod

第十四步: 检查打包目录是否生成

二、服务器部署

1.开放防火墙

安装的系统环境为CentOS7。首先添加规则,开发端口。

2.Docker安装

yum -y install gcc
yum -y install gcc-c++
yum install -y yum-utils
yum install vim

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl start docker # 启动docker
docker version

 3.拉取镜像

docker pull openjdk:8
docker pull mysql:8.0.19 # 建议和本地mysql的版本一样
docker pull redis:6.0.8
docker pull nginx:1.18.0

docker images # 查看有哪些镜像

4.构建镜像

第一步: 在目录下新建mydataQiu-admin.jar和Qiu-blog.jar包传到这个mydata目录里面 

第二步: 在mydata目录新建Dockerfile文件,写入如下

cd
cd mydata
touch Dockerfile
vim Dockerfile

# 基础镜像使用jdk1.8
FROM openjdk:8
# 作者
MAINTAINER xha
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名
ADD Qiu-blog.jar qiu_blog.jar
# 运行jar包
RUN bash -c 'touch /qiu_blog.jar'
ENTRYPOINT ["java","-jar","/qiu_blog.jar"]
#暴露7777端口作为微服务
EXPOSE 7777

第三步: 在mydata目录执行如下,作用是构建Qiu-blog.jar包的镜像,构建出来的镜像名为sangeng_blog 

docker build -t sangeng_blog:1.0 .

第四步: 把mydata目录下的Dockerfile文件修改为如下

# 基础镜像使用jdk1.8
FROM openjdk:8
# 作者
MAINTAINER xha
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名
ADD Qiu-admin.jar qiu_admin.jar
# 运行jar包
RUN bash -c 'touch /qiu_admin.jar'
ENTRYPOINT ["java","-jar","/qiu_admin.jar"]
#暴露8989端口作为微服务
EXPOSE 8989

第五步: 在mydata目录执行如下,作用是构建Qiu-admin.jar包的镜像,构建出来的镜像名为sangeng_admin

docker build -t sangeng_admin:1.0 .

 第六步: 检查是否构建出sangeng_blog和sangeng_admin镜像

docker images

5.创建容器

第一步:看Docker-compose版本,如果你是按照我上面安装的docker,那么你肯定会有Docker-compose

docker compose version

第二步:在mydata目录新建docker-compose.yml文件,写入如下

cd
cd mydata
touch docker-compose.yml
vim docker-compose.yml

 (注:记得mysql密码改写成自己的)

#compose版本
version: "3"  services:sangeng_blog:
#微服务镜像  image: sangeng_blog:1.0container_name: sangeng_blogports:- "7777:7777"
#数据卷volumes:- /app/sangeng_blog:/data/sangeng_blognetworks: - blog_networkdepends_on: - redis- mysql- nginxsangeng_admin:
#微服务镜像image: sangeng_admin:1.0container_name: sangeng_adminports:- "8989:8989"
#数据卷volumes:- /app/sangeng_admin:/data/sangeng_adminnetworks:- blog_networkdepends_on:- redis- mysql- nginx#redis服务redis:image: redis:6.0.8ports:- "6379:6379"volumes:- /app/redis/conf/redis.conf:/etc/redis/redis.conf- /app/redis/data:/datanetworks: - blog_networkcommand: redis-server /etc/redis/redis.conf#mysql服务mysql:image: mysql:8.0.19environment:MYSQL_ROOT_PASSWORD: '123456'MYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'sg_blog'MYSQL_USER: 'root'MYSQL_PASSWORD: '123456'ports:- "3306:3306"volumes:- /app/mysql/db:/var/lib/mysql- /app/mysql/conf/my.cnf:/etc/my.cnf- /app/mysql/init:/docker-entrypoint-initdb.dnetworks:- blog_networkcommand: --default-authentication-plugin=mysql_native_password #解决外部无法访问#nginx服务nginx:image: nginx:1.18.0ports:- "80:80"- "8093:8093"- "8094:8094"volumes:- /app/nginx/html:/usr/share/nginx/html- /app/nginx/logs:/var/log/nginx- /app/nginx/conf:/etc/nginxnetworks:- blog_network#创建自定义网络
networks: blog_network:

 输入如下,作用是检查docker-compose.yml文件有没有语法错误,如果输入之后没任何输出,就说明没有语法错误

cd
cd mydata
docker compose config -q

 运行docker-compose.yml文件,就可以创建并运行java容器、mysql容器、redis容器、nginx容器。-d表示后台运行

docker compose up -d
docker ps -a #查看正在运行的容器

6.导入数据库

第一步:把前面在 '部署博客项目-数据库打包' 那里拿到的 'mybolgSite.sql' 文件上传到服务器的 /app/mysql/db 目录

第二步:查看容器ID

docker ps -a #查看容器ID

第三步: 进入MySQL容器内部,执行导入sql文件的操作 

docker start mydata-mysql-1 # 启动mysql容器
docker exec -it 容器ID bash # 进入mysql容器内部

# 下面的是执行导入sql文件的操作,必须要进入了mysql容器内部才能执行如下命令,mysql的登录密码是228675
mysql -u root -p
228675
use sg_blog;
source /var/lib/mysql/mybolgSite.sql;
show tables; #这里能看到数据库表格

第四步: 退出MySQL容器内部

exit # 退出MySQL
exit # 退出MySQL容器

7.配置Redis

第一步:进入 /app/redis/redis.conf 目录下,新建redis.conf文件,写入如下,注意不需要把配置写完全,redis有自己的默认配置

cd /app/redis/redis.conf
touch redis.conf
vim redis.conf

bind 0.0.0.0
daemonize no
protected-mode no

第二步: 启动所有容器。nginx容器启动不了没关系,现在还没配置nginx

systemctl start docker # 启动docker
docker ps -a # 查看容器ID
docker restart 容器ID # 重新启动所有容器
docker ps # 查看实际启动的容器

8.配置Nginx

第一步:将前端项目打包好后的两个dist文件夹重命名发送到/app/nginx/html目录下

第二步:修改/app/nginx/conf/nginx.conf配置文件,文件内容如下:

#user  nobody;
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       8093;server_name  localhost;location / {root   /usr/share/nginx/html/blog_dist;index  index.html index.htm;try_files $uri $uri/ /index.html;}}server {listen       8094;server_name  localhost;location / {root   /usr/share/nginx/html/admin_dist;index  index.html index.htm;try_files $uri $uri/ /index.html;}}
}

第三步: 启动所有容器。注意,这次nginx容器是可以正常启动的,并且全部容器都是正常启动的

systemctl start docker # 启动docker
docker ps -a # 查看容器ID
docker restart 容器ID # 重新启动所有容器
docker ps # 查看实际启动的容器

到此,完成了所有部署相关的操作。即可浏览器输入ip+8093查看个人前端系统。ip+8094查看个人后台系统。

三、效果展示

前台博客系统   http://8.137.35.5:8093/#/Home

四、参考链接

1. myblog (yuque.com) 

2. 超详细Docker部署SpringBoot+Vue项目(三更博客项目部署) - xhang′s blog (xhablog.online)

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

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

相关文章

2023年世界机器人大会回顾

1、前记&#xff1a; 本次记录是我自己去世界机器人博览会参观的一些感受&#xff0c;所有回顾为个人感兴趣部分的机器人产品分享。整个参观下来最大的感受就是科学技术、特别是机器人技术和人工智能毫无疑问地、广泛的应用在我们日常生活的方方面面&#xff0c;在安全巡检、特…

SolVES4.1学习2——导入数据运行模型

使用样例数据运行模型很容易&#xff0c;运行自己的数据要根据教程先对数据进行预处理之后根据教程导入数据。 首先新建一个solves数据库&#xff0c;之后restore。导入数据大概的流程为&#xff1a; 1、导入数据 首先使用PostGIS导入矢量数据。矢量数据包括点位和范围数据。…

亚马逊API接口解析,实现获得AMAZON商品详情

要解析亚马逊API接口并实现获取亚马逊商品详情&#xff0c;你需要按照以下步骤进行操作&#xff1a; 了解亚马逊开发者中心&#xff1a;访问亚马逊开发者中心&#xff0c;并了解相关的API文档、开发者指南和规定。注册开发者账号&#xff1a;在亚马逊开发者中心上注册一个开发…

分类预测 | MATLAB实现PCA-BiLSTM(主成分双向长短期记忆神经网络)分类预测

分类预测 | MATLAB实现PCA-BiLSTM(主成分双向长短期记忆神经网络)分类预测 目录 分类预测 | MATLAB实现PCA-BiLSTM(主成分双向长短期记忆神经网络)分类预测预测效果基本介绍程序设计参考资料致谢 预测效果 基本介绍 分类预测 | MATLAB实现PCA-BiLSTM(主成分双向长短期记忆神经网…

目标检测笔记(十四): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

文章目录 一、目标检测介绍二、YOLOv8介绍三、源码获取四、环境搭建4.1 环境检测 五、数据集准备六、 模型训练6.1 方式一6.2 方式二6.3 针对其他任务 七、模型验证八、模型测试九、模型转换9.1 转onnx9.1.1 方式一 9.2 转tensorRT9.2.1 trtexec9.2.2 代码转换9.2.3 推理代码 一…

SpringBoot整合SSM-junit测试

前提 &#xff1a;创建一个新的springboot模块 创建一个员工案例(搭建) 创建员工实体类创建员工的控制层创建员工的服务层&#xff08;接口–实现类&#xff09;创建员工的数据层&#xff08;接口–实现类&#xff09; 以上的4种文件 是使用SSM必备的文件 创建员工实体类 属性…

0基础学习VR全景平台篇 第97篇:VR步进式漫游

蛙色VR步进式漫游正式上线&#xff01; 为全行业室内场景提供三维空间重建能力&#xff0c;基于真实场景复刻&#xff0c;多维展示打破线下时空限制&#xff0c;提供高性价比的VR空间应用解决方案。 一、什么是步进式漫游&#xff1f; VR步进式漫游&#xff0c;基于AI特征点提…

修复中间件log4j漏洞方案(直接更换漏洞jar包)

说明&#xff1a; 后台服务里面的log4j漏洞我们已经全部升级处理了&#xff0c;但是一些中间件镜像包里的log4j漏洞需要单独处理 解决办法以ElasticSearch7.6.2为例&#xff1a; 方法&#xff1a; &#xff08;1&#xff09;找到容器里面有哪些旧的log4j依赖包 &#xff08;…

Window安装Node.js npm appium Appium Desktop

Window安装Node.js npm appium appium Desktop 1.安装nodejs 参考链接&#xff1a; https://blog.csdn.net/weixin_42064877/article/details/131610918 1)打开浏览器&#xff0c;并前往 Node.js 官网 https://nodejs.org/ ↗。 2)在首页中&#xff0c;您可以看到当前 Node.…

第17章_瑞萨MCU零基础入门系列教程之CAN FD 模块

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

双碳目标下基于“遥感+”集成技术的碳储量、碳排放、碳循环、温室气体等多领域监测与模拟实践

卫星遥感具有客观、连续、稳定、大范围、重复观测的优点&#xff0c;已成为监测全球碳盘查不可或缺的技术手段&#xff0c;卫星遥感也正在成为新一代 、国际认可的全球碳核查方法。目的就是梳理碳中和与碳达峰对卫星遥感的现实需求&#xff0c;系统总结遥感技术在生态系统碳储量…

pdf文件过大如何缩小上传?pdf压缩跟我学

在我们日常工作和生活中&#xff0c;经常会遇到PDF文件过大的问题&#xff0c;给文件传输和存储带来了很大的不便。那么&#xff0c;如何缩小PDF文件大小以便上传呢&#xff1f;下面就给大家分享几个压缩方法&#xff0c;一起来了解下PDF文件压缩方法吧~ 方法一&#xff1a;嗨格…

docker系列(5) - docker仓库

文章目录 5 docker仓库5.1 创建命名空间5.2 创建镜像仓库5.3 设置访问凭证5.3 镜像仓库命令信息5.4 登录阿里云上传镜像5.5 拉取镜像运行5.6 私有仓库(docker Registry)5.6.1 安装docker registry5.6.2 准备镜像5.6.2 本地私服仓库5.6.3 推送到私服仓库5.6.4 拉取私服镜像 5 do…

C/C++输出第二个整数 2019年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 2019年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入三个整数&#xff0c;把第二个输入的整数输出。 2、输入输出 输…

如何在三星手机上截屏?每一款三星手机的每一种方法,包括S23

无论你是将截图作为保存图片、消息或信息的快速方式&#xff0c;还是作为演示像这篇文章这样有用的操作方法的方式&#xff0c;能够截图都会非常有用。 但并不是所有的手机都以相同的方式进行屏幕截图。事实上&#xff0c;并不是所有的三星手机都能做到这一点。例如&#xff0…

一文了解国自然热点“超级增强子”的重要标记——H3K27ac

2023国自然结果已经揭晓&#xff0c;“超级增强子”&#xff08; Super enhancer, SE&#xff09;作为国自然新热点&#xff0c;2023年项目为32个。2019-2023年来总累计项目143项&#xff0c;但累计项目金额达6033万。此外&#xff0c;Pubmed数据统计显示5年间SE影响因子大于10…

企业架构LNMP学习笔记27

Keepalived的配置补充&#xff1a; 脑裂&#xff08;裂脑&#xff09;&#xff1a;vip出现在了多台机器上。网络不通畅&#xff0c;禁用了数据包&#xff0c;主备服务器没法通讯&#xff0c;造成备服务器认为主服务器不可用&#xff0c;绑定VIP&#xff0c;主服务器VIP不会释放…

laravel系列(二) Dcat admin框架开发工具使用

开发工具可以非常好的帮助我们去快速的开发CURD等操作,但也是有部分框架有些不是太便捷操作,这篇博客主要为大家介绍Dcat admin的开发工具详细使用. 如何创建页面: 在联表我们首先要去.env文件中去找连接数据库方法: APP_NAMELaravel APP_ENVlocal APP_KEYbase64:thO0lOVlzj0…

VR数字工厂,为企业工厂打造竞争新优势

工业经济中大部分行业都是制造业&#xff0c;为了合力助推工业经济提质增效&#xff0c;谋划推进制造业数字化转型就显得尤为重要了。用VR赋能工厂数字升级&#xff0c;打造VR数字工厂&#xff0c;满足各行各业沉浸式营销展示需求。 VR数字工厂是一种全新的工业模式&#xff0c…

【数据结构-队列】双端队列

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…