Laravel+Docker部署至Render时迁移失败及依赖兼容问题求助
Laravel Docker部署Render时的依赖兼容问题
我是Laravel+Docker新手,将Laravel项目通过Docker部署到Render托管服务,使用pgsql数据库,配置信息已写入Render提供的.env文件。部署日志显示执行composer global require hirak/prestissimo时出现错误:
- hirak/prestissimo 0.3.10要求PHP版本为^5.3.2 || ^7.0,与当前安装的PHP8.2.7不兼容
- 要求composer-plugin-api ^1.0.0,与当前Composer2.3.0版本不匹配
虽然后续依赖安装完成,但迁移提示无内容可迁移,需要解决这个依赖兼容问题。以下是相关配置文件:
Dockerfile
FROM richarvey/nginx-php-fpm:latest COPY . . # Image config ENV SKIP_COMPOSER 1 ENV WEBROOT /var/www/html/public ENV PHP_ERRORS_STDERR 1 ENV RUN_SCRIPTS 1 ENV REAL_IP_HEADER 1 # Laravel config ENV APP_ENV production ENV APP_DEBUG false ENV LOG_CHANNEL stderr # Allow composer to run as root ENV COMPOSER_ALLOW_SUPERUSER 1 CMD ["/start.sh"]
.dockerignore
/node_modules /public/hot /public/storage /storage/*.key /vendor .env .phpunit.result.cache Homestead.json Homestead.yaml npm-debug.log yarn-error.log
scripts/00-larvel-deploy.sh
#!/usr/bin/env bash echo "Running composer" composer global require hirak/prestissimo composer install --no-dev --working-dir=/var/www/html echo "generating application key..." php artisan key:generate --show echo "Caching config..." php artisan config:cache echo "Caching routes..." php artisan route:cache echo "Running migrations..." php artisan migrate --force
conf/ngnix/ngnix-site.conf(注意:此处内容粘贴错误)
#!/usr/bin/env bash echo "Running composer" composer global require hirak/prestissimo composer install --no-dev --working-dir=/var/www/html echo "generating application key..." php artisan key:generate --show echo "Caching config..." php artisan config:cache echo "Caching routes..." php artisan route:cache echo "Running migrations..." php artisan migrate --force
解决方案
1. 移除hirak/prestissimo依赖
hirak/prestissimo是Composer 1.x专属的并行下载插件,Composer 2.x已经内置了并行下载功能,完全不需要额外安装这个插件。直接删除部署脚本中对应的命令即可:
- 编辑
scripts/00-larvel-deploy.sh,删掉composer global require hirak/prestissimo这一行 - 修正
conf/ngnix/ngnix-site.conf:这个文件应该是Nginx的站点配置,而非部署脚本,替换为标准的Laravel Nginx配置(示例如下),否则Nginx无法正常提供服务:
server { listen 80; root /var/www/html/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } location ~ /\.ht { deny all; } }
2. 迁移问题排查
如果迁移提示无内容可迁移,按以下步骤排查:
- 确认Render提供的pgsql数据库配置(
DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD)已正确写入.env文件 - 检查本地的迁移文件(
database/migrations/目录下的文件)是否已提交到代码仓库,未被.gitignore排除 - 可以在部署脚本中添加
php artisan migrate:status命令,查看迁移执行状态,确认哪些迁移未被执行
内容的提问来源于stack exchange,提问作者suborno das
相关产品推荐
相关产品推荐

