全栈项目平滑迁移指南:从 Mac 开发环境到麒麟虚拟机 Docker 部署
在日常开发中,我们经常需要在 Mac 本地编写代码,然后打包部署到操作系统的虚拟机里运行测试。整个流程涉及到前后端代码的构建、文件的跨系统传输,以及 Docker 容器的无缝替换。
如果你的项目还涉及到跨机调用宿主机的 MySQL 数据库和 Ollama 大模型,网络 IP 的动态配置就显得尤为关键。这篇记录将梳理一套极其标准且极其成熟的部署流水线,让你不仅能清晰地掌握部署的每一个环节,还能告别每次更换网络环境都要改代码重新打包的痛苦。
第一阶段:在 Mac 上完成前后端打包与传输准备
要想顺利迁移,第一步是在 Mac 上把所有代码变成随时可以带走的压缩包,并搭建一个极简的文件中转站。
处理后端镜像
打开 Mac 的终端,进入你后端 Python 项目的根目录。执行镜像构建命令,重新生成镜像文件。在这个例子中,我们假设打包的版本为 3.0。
docker build -t procuratorate-backend:3.0 .
构建完成后,我们需要把这个存在于 Docker 内部的镜像导出来,变成一个实实在在的独立文件,方便后续跨系统传输。
docker save -o procuratorate-backend.tar procuratorate-backend:3.0
处理前端静态文件
新开一个 Mac 终端窗口,进入你的 Vue 前端项目目录。执行编译命令,把源码打包成浏览器能够直接运行的静态文件。
npm run build
编译完成后,项目目录下会生成一个名为 dist 的文件夹。为了传输效率,我们将整个文件夹压缩。
tar -czvf dist.tar.gz dist
开启临时文件传输服务
为了避免在两个系统之间配置复杂的共享文件夹,我们可以直接利用 Python 自带的轻量级服务来传输文件。在 Mac 桌面上新建一个名为 deploy 的临时文件夹,把刚才生成的 procuratorate-backend.tar 和 dist.tar.gz 都拖进去。接着在终端里进入这个 deploy 目录,执行服务启动命令。
python -m http.server 8000
这个命令会在你的 Mac 上开启一个临时的下载站,随时等待虚拟机通过网络来拉取文件。
第二阶段:麒麟虚拟机上的旧环境大扫除
切回到麒麟虚拟机的 root 终端。在迎接新代码之前,必须把占用着端口和名字的老服务彻底清理干净,这是避免端口冲突和部署报错的铁律。
停用并销毁旧容器
依次敲入下面两条指令,把正在后台占用着 8000 端口的旧后端进程彻底停掉并抹除,把名字和端口完全释放出来。
docker stop backend-server docker rm backend-server
清理废弃镜像释放空间
为了保持服务器环境的整洁,把旧镜像清理掉是个非常好的开发习惯。如果你想顺手把之前那些没有标签的悬空废弃镜像一起打扫干净,直接敲击系统清理命令,系统会自动帮你执行强制垃圾回收。
docker image prune -f
第三阶段:拉取文件并启动最新后端服务
现在虚拟机的环境已经完全干净了,接下来就是接收 Mac 上的最新图纸,并利用动态注入的技术让服务跑起来。
下载并加载新镜像
进入麒麟系统的工作目录,通常是 /root/下载。利用 wget 命令向刚才 Mac 开启的临时下载站请求文件。假设你在 Mac 上查到的最新物理局域网 IP 是 10.27.78.134。
下载完毕后,执行加载命令,把镜像重新装载进虚拟机的 Docker 环境中。
docker load -i procuratorate-backend.tar
当终端打印出 Loaded image: procuratorate-backend:3.0 这样的提示时,说明最新的代码环境已经安稳就位了。
注入动态 IP 启动容器
这是整套跨机联调架构最核心的一步。为了防止未来更换网络导致数据库和大模型断连,我们在后端配置文件中已经写好了读取 DB_HOST 环境变量的逻辑。现在只需要在启动时,利用 -e 参数把 Mac 当前的真实 IP 动态传给容器即可。
docker run -d -p 8000:8000 -e DB_HOST=10.27.78.134 –name backend-server procuratorate-backend:3.0
看到终端吐出一长串由字母和数字组成的容器 ID,这就代表带有最新数据库 IP 配置的后端服务已经在后台默默跑起来了。
实时查验运行状态
服务拉起后,最关键的一环是确认程序的真实运行状态,排查隐藏的网络拦截。直接敲入日志查看命令。
docker logs -f backend-server
只要你看到屏幕上的日志安安静静地停留在 Application startup complete 这句提示上,没有任何报错堆栈,就说明整套后端架构已经彻底打通。
第四阶段:一键替换前端文件
前端代码的更新是最省事的环节。因为当初部署时采用了物理目录直接挂载的方式,所以你完全不需要去停止、删除或者重装前端的 Nginx 容器。
在虚拟机的终端里,先进入存放前端文件的目录,例如 cd /root/frontend。为了防止旧文件残留导致页面显示异常,直接把旧的静态文件夹彻底删掉。
rm -rf dist
接着,再次使用 wget 命令,把最新的前端压缩包从 Mac 临时下载站拉取过来。
下载好之后,直接执行解压命令。
tar -xzvf dist.tar.gz
解压完成的瞬间,最新的 dist 目录就已经替换就位。Nginx 代理服务器会自动读取硬盘上的最新文件,所以前端代码瞬间就生效了。
此时,你可以去 Mac 的终端里按 Ctrl+C 把那个临时的 Python 下载服务关掉。然后打开你习惯使用的浏览器,输入虚拟机的地址,就可以开始尽情测试前后端的数据交互和业务逻辑了。
ipconfig getifaddr en0



