VMware开发环境搭建(Ubuntu、docker、mysql、redis、启动java17+vue3项目)教程
1.下载VMware虚拟机官网VMware官网官网下载比较慢下面有已经下载好的在夸克网盘2.下载Ubuntu系统官网Ubuntu官网官网下载比较慢下面有已经下载好的在夸克网盘3.安装VMware无脑安装即可4.新建虚拟机接下来安装默认一直下一步即可新系统虚拟机中的磁盘点击Continue设置用户名密码后面登录使用安装完成重启报错的话当前虚拟机关机重启登录虚拟机查询ipip addr检查 SSH 服务运行状态虚拟机内执行systemctl status ssh报错Unit ssh.service could not be found说明OpenSSH 服务端没有安装成功5.安装OpenSSH# 安装 openssh-server sudo apt update sudo apt install openssh-server -y # 启动服务并设置开机自启 sudo systemctl start ssh sudo systemctl enable ssh # 校验服务状态 systemctl status ssh # 出现绿色active (running)就代表运行正常再执行下面命令确认 22 端口监听 ss -tulpn | grep sshd # 放行防火墙端口可选 sudo ufw allow 22/tcp使用Finalshell进行链接 Finalshell官网下载6.安装 Docker# 更新软件包索引 sudo apt update # 安装依赖包 sudo apt install -y ca-certificates curl # 创建用于存储 GPG 密钥的目录 sudo install -m 0755 -d /etc/apt/keyrings # 下载 GPG 密钥 sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc # 更改密钥文件的权限 sudo chmod ar /etc/apt/keyrings/docker.asc # 添加 Docker 的软件源 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \ $(. /etc/os-release echo ${UBUNTU_CODENAME:-$VERSION_CODENAME}) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 更新软件包索引 sudo apt update # 安装最新版本的 Docker sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证安装是否成功 docker -v出现版本号代表成功安装docker安装成功后Docker 服务将会开机自动启动。执行systemctl is-enabled docker命令可以看到输出是enabled说明 Docker 已经设置为开机自动启动了替换国内镜像源# 查看当前docker状态 sudo docker info # 打开配置文件 sudo vim /etc/docker/daemon.json # 添加镜像源 { registry-mirrors: [ https://docker.m.daocloud.io, http://hub-mirror.c.163.com, https://docker.nju.edu.cn ] } # 重启docker sudo systemctl restart docker # 验证配置 sudo docker info # 相比最初增加了 Registry Mirrors测试现在可以正常拉取镜像并执行了拉取如果本地没有hello-world镜像并创建一个新的容器来运行它输出 “Hello from Docker!” 等信息则表明成功。sudo docker container run hello-world添加当前用户到用户组# 查看用户组 grep docker /etc/group # 添加当前用户 sudo usermod -aG docker $USER # 切换到 docker 组 newgrp docker # 不加 sudo 测试 docker images7.创建docker网络# 在虚拟机中执行以下命令创建一个名为 app-net 的桥接网络 docker network create app-net8.安装并配置 MySQL# 创建数据存放目录为了防止容器删除后数据丢失 sudo mkdir -p /opt/docker/mysql/data # 拉取并运行 MySQL 容器 docker run -d \ --name mysql \ --network app-net \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/docker/mysql/data:/var/lib/mysql \ mysql:8.0参数解释--name mysql容器命名为 mysql。--network app-net加入刚才创建的网络。-p 3306:3306映射宿主机 3306 端口。-e MYSQL_ROOT_PASSWORD123456设置 root 密码为 123456。-v ...将容器内的数据挂载到虚拟机的/opt/docker/mysql/data。初始化数据库等待几秒钟让 MySQL 启动然后可以使用 Navicat 等工具连接虚拟机的IP:3306用户名 root密码 123456把 SQL 脚本导进去。9.安装并配置 Redis# 创建数据存放目录 sudo mkdir -p /opt/docker/redis/data # 拉取并运行 Redis 容器 docker run -d \ --name redis \ --network app-net \ -p 6379:6379 \ -v /opt/docker/redis/data:/data \ redis:7.010.打包并部署 Java 项目修改 Java 项目的配置文件(application.yml或application.properties)⚠️非常重要因为在 Docker 网络中容器之间不能通过localhost通信必须通过容器名称通信。修改数据库和 Redis 的连接地址spring: datasource: # 把 localhost 改成 mysql url: jdbc:mysql://mysql:3306/你的数据库名?useUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghai username: root password: 123456 redis: # 把 localhost 改成 redis host: redis port: 6379打包 Java 项目生成.jar文件例如myapp.jar。上传 jar 包到虚拟机使用 Xftp、FinalShell 或scp命令将myapp.jar上传到虚拟机的/opt/docker/java/目录下。# 将本地的 jar 包传到这个目录 sudo mkdir -p /opt/docker/java编写并运行后端JDK 17# 进入 jar 包所在目录 cd /opt/docker/java # 给目录开放最大读写权限chmod 777谨慎使用测试环境可用 sudo chmod -R 777 /opt/docker/java # 创建 Dockerfile 文件 sudo vim Dockerfile # 写入以下内容注意基础镜像选了 JDK 17 FROM eclipse-temurin:17-jre MAINTAINER yourname COPY jeecg-system-start-3.9.2.jar /app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, /app.jar] # 保存并退出:wq。 # 构建后端镜像 (注意最后有个 .) docker build -t jeecg-backend:1.0 . # 运行后端容器关键一步覆盖配置 #运行以下命令请根据你的实际情况修改数据库密码、数据库名等参数。这里用 --spring.xxxxxx 的方式覆盖配置 docker run -d \ --name jeecg-app \ --network app-net \ -p 8080:8080 \ jeecg-backend:1.0 \ --spring.datasource.urljdbc:mysql://mysql:3306/jeecg-boot?useUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghai \ --spring.datasource.usernameroot \ --spring.datasource.password123456 \ --spring.redis.hostredis \ --spring.redis.port6379 # (注意mysql:3306 和 redis 这两个地址对应的就是容器名。密码 123456 改成你实际的 MySQL密码) # 查看后端启动日志确保没有报错 docker logs -f jeecg-app # 看到 Started JeecgSystemApplication 之类的字眼就说明成功了按 CtrlC 退出日志查看。 # 通过宿主机可以访问到http://192.168.75.131:8080/jeecg-boot/doc.html#/home (仅供参考)11.准备并上传前端 Vue3在你本地的 Vue3 项目中修改前端的 API 请求地址。如果是生产环境通常修改.env.production文件把 API 地址改为空或者/以便让 Nginx 来处理代理。本地运行打包命令如npm run build或pnpm build生成dist文件夹。将dist文件夹上传到虚拟机的/opt/docker/vue目录下。# 编写并运行前端 Nginx # 创建前端目录并进入如果还没建的话 sudo mkdir -p /opt/docker/vue cd /opt/docker/vue # 此处我把前端dist.rar压缩上传到了/opt/docker/vue下面 # 安装通用万能解压工具 7z适配绝大多数压缩格式 sudo apt install p7zip-full -y # 解压 7z x dist.rar # 创建 Nginx 配置文件 nginx.conf sudo vim nginx.conf # 写入以下内容。JeecgBoot 的后端接口前缀通常是 /jeecg-boot需要反向代理到后端容器 server { listen 80; server_name localhost; # 前端静态资源 location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } # 关键前缀必须和前端 VITE_GLOB_API_URL 完全一致 location /jeecgboot/ { proxy_pass http://jeecg-app:8080/jeecg-boot/; 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; proxy_http_version 1.1; } } # 保存退出:wq。 # 创建前端 Dockerfile sudo vim Dockerfile # 写入以下内容 FROM nginx:latest COPY dist/ /usr/share/nginx/html/ COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 # 保存退出 # 构建前端镜像 docker build -t jeecg-frontend:1.0 . # 运行前端容器 docker run -d \ --name jeecg-web \ --network app-net \ -p 80:80 \ jeecg-frontend:1.0 # 用 curl 验证转发是否打通先绕过浏览器在虚拟机上直接测 curl -v http://192.168.75.131/jeecgboot/sys/randomImage/123 curl -X POST -v http://192.168.75.131/jeecgboot/sys/login验证打开浏览器访问虚拟机的 IP 地址http://你的虚拟机IP如果能正常显示 JeecgBoot 的登录页面且能成功登录进去说明整套前后端分离环境部署成功如果遇到问题常用的排查命令查看后端报错docker logs jeecg-app查看 Nginx 报错docker logs jeecg-web确保虚拟机防火墙放行了 80 端口sudo ufw allow 80或直接sudo ufw disable。排查清单检查项期望值前端.env.production的VITE_GLOB_API_URL/jeecgbootNginx location 前缀/jeecgboot/与上面一致proxy_pass末尾http://jeecg-app:8080/jeecg-boot/带斜杠容器是否重启/重建必须重启配置才生效后端 contextPath/jeecg-bootJeecgBoot 默认浏览器缓存CtrlF5 强刷容器开机自启# 让 MySQL 容器开机自启 docker update --restartalways mysql # 让 Redis 容器开机自启 docker update --restartalways redis # 让 Java 后端容器开机自启 docker update --restartalways jeecg-app # 让 Vue 前端容器开机自启 docker update --restartalways jeecg-web

相关新闻

深入解析TI bq24725电池充电控制器:从同步降压原理到SMBus编程实战

深入解析TI bq24725电池充电控制器:从同步降压原理到SMBus编程实战

1. 项目概述与核心价值在笔记本电脑、平板电脑这类便携式设备里,电源管理系统的“心脏”往往不是那颗最显眼的CPU,而是默默无闻的电池充电管理芯片。它决定了设备能否快速、安全地“回血”,更关乎着整机的续航、发热乃至长期使用的可靠性。今…

2026/10/31 20:18:22 阅读更多 →
AI打破跨部门的信息壁垒

AI打破跨部门的信息壁垒

企业最大的浪费不是钱,是信息不对称一家电子制造企业正在面临一个矛盾:成品仓库堆了四百多台智能穿戴设备严重积压,但同时原材料仓库的电池和主板快不够用了。这个矛盾的本质是跨部门信息不对称。 生产部门不知道销售部门出货放缓&#xff0c…

2026/10/31 20:17:25 阅读更多 →
Sandy Bridge平台IMVP7电源系统设计:从多相降压到SVID通信实战

Sandy Bridge平台IMVP7电源系统设计:从多相降压到SVID通信实战

1. 项目概述:为Sandy Bridge平台构建高效电源系统在移动计算和嵌入式系统领域,每一次处理器架构的迭代,都不仅仅是性能的提升,更是对周边配套设计,尤其是电源管理系统的严峻考验。大约在2011年前后,当英特尔…

2026/10/31 21:00:20 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/1 0:24:43 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/1 10:36:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/1 10:36:51 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/1 1:06:58 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/1 10:35:11 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/1 9:35:41 阅读更多 →

日新闻

周新闻

月新闻