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

CapRover部署Laravel应用出现NGINX 502错误求助

Laravel应用CapRover部署后出现NGINX 502错误排查

问题背景

在虚拟专用服务器(VDS)上通过CapRover部署Laravel应用时,部署命令执行无异常,php artisan migrate也成功创建了数据库表,但访问应用URL时CapRover返回NGINX 502错误。

相关配置文件

Dockerfile

ARG PHP_VERSION=${PHP_VERSION:-8.2}
FROM php:8.2-fpm-alpine AS php-system-setup

# 安装系统依赖
RUN apk add --no-cache dcron busybox-suid libcap curl zip unzip git
RUN apk add --update nodejs npm

# 安装PHP扩展
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/
RUN install-php-extensions intl bcmath gd pdo_mysql opcache redis uuid exif pcntl zip

# 安装supervisord
COPY --from=ochinchina/supervisord:latest /usr/local/bin/supervisord /usr/local/bin/supervisord

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

FROM php-system-setup AS app-setup

# 设置工作目录
ENV LARAVEL_PATH=/srv/app
WORKDIR $LARAVEL_PATH
COPY ./ /srv/app
RUN composer install --ignore-platform-reqs --prefer-dist --no-scripts --no-dev --no-autoloader
RUN npm install

RUN chmod 777 -R $LARAVEL_PATH

# 复制PHP配置
COPY ./.deploy/config/php/local.ini /usr/local/etc/php/conf.d/local.ini

# 复制入口脚本
COPY ./.deploy/entrypoint.sh /

ENTRYPOINT ["sh", "/entrypoint.sh"]

# 启动应用
CMD php artisan serve --host=0.0.0.0 --port=8000
EXPOSE 8000

./.deploy/config/php/local.ini

memory_limit = 512M
max_execution_time = 30
upload_max_filesize = 30M
post_max_size = 35M

./.deploy/entrypoint.sh

composer dump-autoload --no-interaction --no-dev --optimize
php artisan migrate --no-interaction --force

排查方向与解决建议

  • 容器进程启动异常:
    你的entrypoint.sh执行完dump-autoload和migrate后直接退出,没有执行后续的CMD命令。容器会在脚本执行完毕后停止,导致CapRover的NGINX无法连接到后端服务,引发502错误。
    解决:在entrypoint.sh末尾添加exec "$@",让脚本执行完后继续运行CMD指定的命令:

    composer dump-autoload --no-interaction --no-dev --optimize
    php artisan migrate --no-interaction --force
    exec "$@"
    
  • 端口映射配置检查:
    确认CapRover应用设置中,容器端口是否配置为8000(与Dockerfile里的EXPOSE一致)。端口不匹配会导致NGINX无法转发请求,触发502错误。

  • 容器日志排查:
    通过CapRover面板查看应用的容器日志,检查是否有Laravel启动失败的报错,比如环境变量缺失、依赖未正确安装等问题。

  • 生产环境部署优化:
    不建议在生产环境使用php artisan serve,性能和稳定性远不如PHP-FPM配合NGINX的组合。可调整Dockerfile,改用PHP-FPM作为服务,并配置容器内的NGINX处理请求,更符合生产环境标准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:36