如何在AWS App Runner的PHP 8.1运行时中安装启用Imagick?
在AWS App Runner上为PHP 8.1启用Imagick扩展(Laravel 10项目)
你的build脚本存在repo版本冲突、重复安装逻辑、配置路径错误等问题,导致Imagick无法正常加载。以下是修正后的方案:
修正后的build.sh脚本
#!/usr/bin/env bash echo "Starting build process" # 清理原有PHP环境 sudo yum remove -y php* sudo yum clean all # 安装兼容Amazon Linux 2的repo(基于CentOS7) sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm sudo yum-config-manager --enable remi-php81 # 安装PHP 8.1及核心依赖(含Imagick扩展) sudo yum install -y php81 php81-php php81-php-common php81-php-mbstring php81-php-mysqlnd php81-php-xml php81-php-bcmath php81-php-gd php81-php-intl php81-php-pecl-zip php81-php-pecl-imagick-im7 php81-php-fpm php81-php-pecl-apcu php81-php-opcache # 建立全局PHP软链接 ln -sf /usr/bin/php81 /usr/bin/php ln -sf /usr/sbin/php81-php-fpm /usr/sbin/php-fpm # 安装Composer EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')" php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] then >&2 echo 'ERROR: Invalid installer checksum' rm composer-setup.php exit 1 fi php composer-setup.php --install-dir=/usr/local/bin --filename=composer rm composer-setup.php # 安装Laravel依赖 composer install # 配置Laravel环境 cp -p .env.staging .env php artisan key:generate php artisan config:cache sudo chmod -R 755 ./storage # 启用Imagick扩展(写入正确的配置目录) sudo echo "extension=imagick.so" > /etc/opt/remi/php81/php.d/20-imagick.ini # 安装Nginx sudo yum install -y nginx # Nginx和PHP-FPM配置 cp -p /app/scripts/resources/nginx.conf /etc/nginx/nginx.conf cp -p /app/scripts/resources/www.conf /etc/opt/remi/php81/php-fpm.d/www.conf # 目录权限配置 chown -R :nginx /app/storage /app/bootstrap/cache /app/public find /app/storage -type d -exec chmod 775 {} \; find /app/storage -type f -exec chmod 664 {} \; find /app/bootstrap/cache -type d -exec chmod 775 {} \; find /app/bootstrap/cache -type f -exec chmod 664 {} \; find /app/storage -type d -exec chmod g+s {} \; find /app/bootstrap/cache -type d -exec chmod g+s {} \; setfacl -R -d -m g::rwx /app/storage setfacl -R -d -m g::rwx /app/bootstrap/cache # 日志重定向 ln -sf /dev/stdout /var/log/nginx/error.log ln -sf /dev/stdout /var/log/nginx/access.log ln -sf /dev/stdout /var/log/php-fpm/error.log ln -sf /dev/stdout /var/log/php-fpm/www-access.log ln -sf /dev/stdout /var/log/php-fpm/www-error.log # 安装Node.js并构建前端 curl -fsSL https://rpm.nodesource.com/setup_16.x | bash - && sudo yum -y install nodejs sudo yum install -y gcc-c++ make npm install npm run build # 重启服务使配置生效 sudo service php81-php-fpm restart sudo service nginx restart # 验证Imagick加载状态 echo "Checking Imagick installation status:" php -m | grep imagick php -i | grep -A 10 "imagick"
关键改动说明
- 统一Repo版本:仅使用兼容Amazon Linux 2的CentOS7版本repo,避免版本冲突
- 直接使用预编译扩展:移除手动编译ImageMagick和重复pecl安装步骤,直接用remi源的
php81-php-pecl-imagick-im7包,无需手动编译 - 修正配置路径:将Imagick扩展配置写入PHP8.1专属的
/etc/opt/remi/php81/php.d/目录,而非通用的/etc/php.d/ - 修复服务名:使用正确的PHP-FPM服务名
php81-php-fpm,移除无效的httpd服务操作 - 简化PHP环境安装:避免重复卸载/安装PHP的冗余步骤,一次性安装所有依赖
内容的提问来源于stack exchange,提问作者topninja
相关产品推荐
相关产品推荐

