Docker
本文最后更新于-1天前,其中的信息可能已经过时,如有错误请发送邮件到2392862431@qq.com

全栈项目平滑迁移指南:从 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。

wgethttp://10.27.78.134:8000/procuratorate-backend.tar

下载完毕后,执行加载命令,把镜像重新装载进虚拟机的 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 临时下载站拉取过来。

wgethttp://10.27.78.134:8000/dist.tar.gz

下载好之后,直接执行解压命令。

tar -xzvf dist.tar.gz

解压完成的瞬间,最新的 dist 目录就已经替换就位。Nginx 代理服务器会自动读取硬盘上的最新文件,所以前端代码瞬间就生效了。

此时,你可以去 Mac 的终端里按 Ctrl+C 把那个临时的 Python 下载服务关掉。然后打开你习惯使用的浏览器,输入虚拟机的地址,就可以开始尽情测试前后端的数据交互和业务逻辑了。


ipconfig getifaddr en0   

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇