You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多测试环境下Flutter对接云VM的后端配置问题

解决Flutter本地运行对应当前分支后端的问题

不用搞多台VM,单台VM就能实现分支隔离的后端部署,下面给你具体方案:

1. 给每个分支部署独立的PM2实例

当前你的CI脚本不管什么分支推上来,都会杀掉所有PM2进程再重启一个server.js,所以会互相覆盖。改成按分支名创建独立实例就行:

修改你的CI配置文件:

variables:
    HEROKU_APP_NAME: "room-booking-backend"
    HEROKU_PRODUCTION_KEY: $HEROKU_PRODUCTION_KEY

stages:         
  - deploy  # 把原来的production改成通用deploy,支持所有分支

backend-deploy:
  stage: deploy
  script:
    - cd server
    # 把分支名里的斜杠换成横杠,避免PM2实例名非法
    - INSTANCE_NAME="server-${CI_COMMIT_BRANCH//\//-}"
    # 先删掉旧实例(如果存在),不存在就忽略错误
    - pm2 delete $INSTANCE_NAME || true
    # 生成唯一端口:基于分支名计算,确保和其他分支不冲突
    - PORT=$((3000 + $(echo $CI_COMMIT_BRANCH | cksum | cut -d' ' -f1) % 100))
    # 启动对应分支的后端实例,指定端口和实例名
    - pm2 start server.js --name $INSTANCE_NAME -- --port $PORT

注:如果你的CI不是GitLab CI,把CI_COMMIT_BRANCH换成对应CI的分支环境变量(比如GitHub Actions用GITHUB_REF_NAME)。

2. 本地Flutter动态对接对应分支的后端

Flutter运行时指定当前分支对应的后端地址就行,嫌手动输麻烦可以搞个脚本:

比如在Flutter项目根目录创建run_with_branch_backend.sh:

#!/bin/bash
# 获取当前本地分支名
BRANCH=$(git rev-parse --abbrev-ref HEAD)
# 和CI里一样的端口计算逻辑,保证端口一致
PORT=$((3000 + $(echo $BRANCH | cksum | cut -d' ' -f1) % 100))
# 启动Flutter并传入后端地址参数
flutter run --dart-define=BACKEND_URL=http://你的VMIP:$PORT

然后给脚本加执行权限:chmod +x run_with_branch_backend.sh,以后直接跑这个脚本就能自动对接当前分支的后端了。

3. 进阶:用Docker做环境隔离

如果担心不同分支的依赖冲突,就用Docker给每个分支跑独立容器,CI脚本改成构建镜像并启动容器,端口映射逻辑和上面一样,好处是每个分支的后端环境完全隔离,不会互相影响。

要不要多台VM?

完全没必要,除非你们团队几十人同时开发,单台VM资源扛不住。上面的方案单台VM就能搞定多人分支的隔离需求。

内容的提问来源于stack exchange,提问作者staplegun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:15:04