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

如何从BitBucket向无公网IP的内部企业PHP Laravel服务器实现持续部署

无公网IP内部服务器Laravel应用CI/CD部署方案

针对你这种内部服务器无公网IP、已用BitBucket Cloud完成构建测试的场景,以下几个可行方案供你参考:

方案1:内部服务器定时轮询BitBucket触发部署

既然外部没法主动触发内部服务器,就让服务器自己定期查有没有新的代码更新或构建结果。

  • 步骤:
    1. 在BitBucket生成个人访问令牌(PAT),权限勾选仓库读权限,用来授权服务器访问BitBucket API。
    2. 在内部服务器上写部署脚本(比如deploy.sh),核心逻辑:
      • 调用BitBucket API获取目标分支的最新commit哈希:curl -H "Authorization: Bearer $BITBUCKET_PAT" https://api.bitbucket.org/2.0/repos/[用户名]/[仓库名]/refs/branches/[分支名]
      • 和本地存储的上次部署commit哈希对比,若不一致则拉取最新代码:git pull origin [分支名]
      • 执行Laravel部署命令:composer install --no-dev --optimize-autoloader、php artisan config:cache、php artisan route:cache、php artisan migrate --force等
    3. 用cron设置定时任务,比如每5分钟跑一次脚本:*/5 * * * * /path/to/deploy.sh >> /var/log/deploy.log 2>&1
  • 注意:PAT存到服务器环境变量,不要硬编码在脚本里;给脚本加权限控制,避免非授权执行。

方案2:BitBucket Pipelines主动连接内部服务器(需防火墙开白名单)

如果内部服务器所在网络允许BitBucket构建机的IP段访问,可直接在流水线里加部署步骤,让构建机通过SSH连接内部服务器执行部署。

  • 步骤:
    1. 查BitBucket官方公布的构建机IP段,在内部服务器防火墙/网关里把这些IP段加入白名单,允许SSH访问(默认22端口)。
    2. 在BitBucket仓库Settings > Repository variables里添加SSH私钥(变量名比如SSH_PRIVATE_KEY),对应的公钥要加到内部服务器的~/.ssh/authorized_keys中。
    3. 修改bitbucket-pipelines.yml,在构建测试阶段后加部署阶段:
      pipelines:
        default:
          - step:
              name: Build and Test
              script:
                - composer install
                - php artisan test
          - step:
              name: Deploy to Internal Server
              deployment: production
              script:
                - echo "$SSH_PRIVATE_KEY" > /tmp/id_rsa
                - chmod 600 /tmp/id_rsa
                - ssh -i /tmp/id_rsa -o StrictHostKeyChecking=no [服务器用户名]@[内部服务器IP] 'cd /path/to/laravel && git pull origin main && composer install --no-dev --optimize-autoloader && php artisan config:cache && php artisan route:cache'
      
  • 注意:若内部服务器用内网IP,需确保BitBucket构建机能通过VPN/专线访问内网;StrictHostKeyChecking=no是避免首次连接交互问题,生产环境也可提前把服务器公钥加入构建机known_hosts。

方案3:通过公网中转服务器传递部署指令/产物

如果内部服务器完全不能被公网访问,但有一台带公网IP的中转服务器(比如公司云网关),可以用中转做桥梁:

  • 步骤:
    1. BitBucket Pipelines构建成功后,把代码打包成压缩包,用scp或rsync传到中转服务器指定目录。
    2. 内部服务器通过内网访问中转服务器,定时检查目录有没有新压缩包,有则下载解压到部署目录,执行部署脚本。
    3. 也可让中转服务器收到新包后,主动通过内网把部署指令推给内部服务器(比如用SSH或自定义脚本)。
  • 优势:不用修改内部服务器防火墙规则,中转服务器作为中间层隔离公网与内网。

方案4:部署BitBucket自托管Runner到内部网络

BitBucket支持自托管Runner,把Runner部署在内部网络里,Runner会主动和BitBucket Cloud建立连接,这样就能在流水线里用这个Runner直接访问内部服务器,无需公网能访问内部服务器。

  • 步骤:
    1. 在BitBucket仓库Settings > Runners里创建自托管Runner,获取安装命令和注册令牌。
    2. 在内部网络的一台机器(可以是Laravel部署服务器本身)上执行安装命令,完成Runner注册。
    3. 修改bitbucket-pipelines.yml,指定部署阶段用自托管Runner:
      pipelines:
        default:
          - step:
              name: Build and Test
              script:
                - composer install
                - php artisan test
          - step:
              name: Deploy to Internal Server
              deployment: production
              runs-on:
                - self.hosted
                - linux
              script:
                - cd /path/to/laravel && git pull origin main && composer install --no-dev --optimize-autoloader && php artisan config:cache && php artisan route:cache
      
  • 优势:Runner在内部网络,安全性高,能直接访问所有内部资源,无需处理公网IP和防火墙问题,适合企业级场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:50:43