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/7/23 11:34:32 阅读更多 →
AI打破跨部门的信息壁垒

AI打破跨部门的信息壁垒

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

2026/7/23 11:34:32 阅读更多 →
Sandy Bridge平台IMVP7电源系统设计:从多相降压到SVID通信实战

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

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

2026/7/23 11:34:32 阅读更多 →

最新新闻

MSPM0 UNICOMM-I2C模块深度解析:从基础原理到多主通信实战

MSPM0 UNICOMM-I2C模块深度解析:从基础原理到多主通信实战

1. UNICOMM-I2C模块:MSPM0的I2C通信核心引擎在嵌入式系统开发中,I2C总线因其简洁的两线制(SDA和SCL)和灵活的多主多从架构,成为了连接各类传感器、EEPROM、实时时钟和电源管理芯片的首选协议。然而,在实际项…

2026/7/23 11:56:42 阅读更多 →
5大免费AI应用托管平台评测与选型指南

5大免费AI应用托管平台评测与选型指南

1. 项目概述在AI应用开发领域,部署和托管往往是开发者面临的最大挑战之一。作为一名经历过从本地调试到云端部署全流程的开发者,我深刻理解选择一个合适的托管平台对项目成败的关键影响。本文将分享5个当前最流行且提供免费方案的AI应用托管平台&#xf…

2026/7/23 11:56:42 阅读更多 →
SPI通信协议核心原理与MSPM0配置调试实战指南

SPI通信协议核心原理与MSPM0配置调试实战指南

1. SPI通信协议核心原理与帧格式深度解析搞嵌入式开发这么多年,SPI(Serial Peripheral Interface)绝对是我用得最多的同步串行通信协议之一。它不像I2C那样需要复杂的地址机制,也不像UART那样需要精确的波特率匹配,SPI…

2026/7/23 11:56:42 阅读更多 →
LLM 工具调用与 MCP 机制

LLM 工具调用与 MCP 机制

主题:LLM 如何被提供可用工具、工具调用协议、MCP 工具发现机制、以及多模型参数差异的抹平方式。一、工具调用整体流程 工具调用(Function Calling / Tool Use)本质是一套「声明 → 决策 → 执行 → 回填」的循环: 在请求里声明「…

2026/7/23 11:56:42 阅读更多 →
手把手教你用PDFTranslator处理多语言技术文档

手把手教你用PDFTranslator处理多语言技术文档

做技术文档翻译的同学应该都遇到过这个问题:一份英文技术白皮书或API文档,翻译后表格错位、代码块丢失、图片和文字混成一团,最后还不如直接看原文。 今天分享一个实测好用的在线PDF翻译工具 PDFTranslator,它能比较好地保留原始排…

2026/7/23 11:56:42 阅读更多 →
AI论文写作工具对比:千笔AI与学术猹的技术解析与应用

AI论文写作工具对比:千笔AI与学术猹的技术解析与应用

1. 项目概述:AI论文写作工具的行业价值 去年帮导师审稿时,我连续遇到7篇明显由AI生成的论文,从医学影像分析到供应链优化研究,不同领域的文章却有着相似的"套路化"表达。这让我意识到:AI论文工具已经从早期的…

2026/7/23 11:55:40 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻