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

DigitalOcean App(Laravel)连接托管MySQL数据库超时如何排查

问题核心根因

构建超时、运行时数据库连接失败是两个独立的DigitalOcean Apps平台机制问题,和Laravel代码、数据库凭证本身有效性无关:

  • 构建环境网络隔离:Apps平台的构建阶段使用临时弹性构建机,和最终部署的运行时实例不属于同一网络资源池,你给数据库配置的可信来源规则仅对运行时实例生效,构建机到数据库公网端口的连接请求会被防火墙静默丢弃,不会返回连接拒绝响应,直接触发TCP默认30秒超时。Laravel 8执行php artisan package:discover时会加载所有已安装包的服务提供者,部分第三方包(如权限管理、审计日志、队列驱动类包)会在服务注册阶段主动探测数据库连接,直接导致步骤卡住崩溃。这也解释了为什么清空DB_*变量后该步骤可以正常执行——没有数据库配置时,相关服务提供者会自动跳过连接探测逻辑。
  • 重复配置导致连接参数冲突:你同时手动配置了全量DB_*环境变量、又将数据库作为平台托管资源绑定到App,两套配置存在优先级覆盖问题。平台绑定资源默认注入的是VPC内网连接参数,和你手动填写的公网参数冲突后,实际生效的配置网络不可达,就会出现跳过构建步骤后依然无法连接数据库的问题。
分步修复方案
  • 调整构建命令,禁止构建阶段触发外部数据库连接
    不要在构建阶段使用生产数据库配置,临时使用内存级sqlite驱动完成构建流程即可,构建阶段生成的代码缓存不会影响运行时配置,替换原有构建命令为以下内容:
    # 临时写入空数据库配置,阻断构建阶段的数据库连接探测
    export DB_CONNECTION=sqlite
    export DB_DATABASE=:memory:
    # 执行无数据库依赖的构建步骤
    composer install --no-dev --optimize-autoloader
    php artisan package:discover
    php artisan route:cache
    php artisan view:cache
    
    注意:不要在构建阶段执行php artisan config:cache,也不要把php artisan migrate这类需要数据库连接的命令放在构建流程里,这类逻辑必须放到运行时阶段执行。
  • 清理重复的数据库配置,避免参数冲突
    删掉你手动在App级环境变量中配置的所有DB_*开头的参数,完全依赖平台绑定数据库资源时自动注入的环境变量即可。如果需要强制使用公网连接,不需要手动填写连接参数,直接在App的数据库资源配置页将连接方式从「VPC内网」切换为「公网」,平台会自动将对应的公网地址、端口、账号密码注入到运行时环境变量,不会出现配置冲突。
  • 校验可信来源配置
    打开托管数据库的可信来源配置页,确认当前App的服务条目处于勾选状态即可,不要手动添加任何IP段到可信来源列表——Apps平台没有固定出口IP,手动填IP的规则完全无效,只有通过服务名称关联的规则,才会自动放行App所有运行时实例的出口流量。
  • 调整运行时启动命令
    将需要数据库连接的初始化操作放到启动命令中,在运行时网络环境下执行,参考示例:
    # 运行时阶段生成配置缓存,此时平台注入的数据库配置已生效
    php artisan config:cache
    # 执行数据库迁移,加--isolated参数避免多实例并发部署时重复执行迁移
    php artisan migrate --force --isolated
    # 启动Web服务,根据你使用的运行时替换对应启动命令,比如Nginx+FPM、apache2-foreground等
    apache2-foreground
    
故障排查提示

如果部署后依然存在连接问题,可以在启动命令最前面临时加一行调试代码:

php artisan tinker --execute="var_dump(DB::connection()->getPdo());"

这行代码会在运行时打印数据库连接状态,对应的输出会直接展示在App的运行时日志中,不会因为构建失败丢失日志信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:03:41