VMware开发环境搭建(Ubuntu、docker、mysql、redis、启动java17+vue3项目)教程

📅 2026/7/23 11:35:33
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