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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:45:35