Come posso installare moduli PECL nei miei ambienti Elastic Beanstalk?
Desidero utilizzare PHP 8.1 in Amazon Linux 2 o PHP 8.4 in Amazon Linux 2023 per installare Redis, Memcached o altri moduli PHP Extension Community Library (PECL) nel mio ambiente AWS Elastic Beanstalk.
Breve descrizione
Per installare moduli PECL 7, crea un file di configurazione che includa i comandi per eseguire queste azioni:
- Configurare la directory .ebextensions.
- Installare le dipendenze.
- Installare il modulo PECL.
- Creare o modificare i file di configurazione.
Quindi memorizza il file di configurazione nella cartella .ebextensions.
Nota: Per esempi e requisiti, consulta Personalizzazione avanzata dell'ambiente con i file di configurazione (.ebextensions) e Estensione delle piattaforme Elastic Beanstalk Linux.
Risoluzione
Configura la directory .ebextensions nella root del pacchetto sorgente per l'applicazione.
Elastic Beanstalk memorizza i file di configurazione nella cartella .ebextensions. L'ambiente Elastic Beanstalk utilizza solo file che terminano con l'estensione .config.
Esempio:
|-- .ebextensions | |-- redis/memcached.config | |-- other .config files |-- other application files
Crea un file di configurazione nella directory .ebextensions
PHP 8.1 in Amazon Linux 2
Per i moduli Redis, utilizza la seguente configurazione:
commands: 01_install_redis: command: /usr/bin/yes 'no' | /usr/bin/pecl install redis test: '! /usr/bin/pecl info redis' 02_remove_extension: command: /bin/sed -i -e '/extension="redis.so"/d' /etc/php.ini 03_create_conf: command: /bin/echo 'extension="redis.so"' > /etc/php.d/41-redis.ini
Nota: nel file di configurazione precedente, 01_install_redis installa il modulo Redis e verifica che l'installazione si sia conclusa correttamente. 02_remove_extension rimuove l'estensione Redis dal file /etc/php.ini. 03_create_conf crea un file di configurazione con il nome 41-redis.ini in /etc/php.d/.
Per i moduli Memcached, utilizza la seguente configurazione:
packages: yum: libmemcached-devel: [] commands: 01_install_memcached: command: /usr/bin/yes 'no'| /usr/bin/pecl install memcached test: '! /usr/bin/pecl info memcached' 02_remove_extension: command: /bin/sed -i -e '/extension="memcached.so"/d' /etc/php.ini 03_create_conf: command: /bin/echo 'extension="memcached.so"' > /etc/php.d/41-memcached.ini
Nota: nel file di configurazione precedente, 01_install_memcached installa il modulo Memcached e verifica che l'installazione si sia conclusa correttamente. 02_remove_extension rimuove l'estensione Redis dal file /etc/php.ini. 03_create_conf crea un file di configurazione con il nome 41-memcached.ini in /etc/php.d/.
È consigliabile testare nuove configurazioni .ebextensions in un ambiente non di produzione prima di distribuirle in produzione.
Per PHP 8.4 in Amazon Linux 2023
Per installare i moduli PECL disponibili, utilizza i seguenti pacchetti YUM:
- php8.4-pecl-redis6
- php8.4-pecl-igbinary
- php8.4-pecl-msgpack
- php8.4-pecl-memcached
- php8.4-pecl-apcu
Importante: per impostazione predefinita, il pacchetto YUM php8.4-pecl-* installa i moduli in /usr/lib64/php8.4/modules/ invece della directory delle estensione PHP predefinita /usr/lib64/php/modules/. Questa installazione causa l'esito negativo di PHP quando carichi le estensioni.
Per risolvere l'errore di PHP, crea collegamenti simbolici dalla directory delle estensioni PHP predefinita alla posizione effettiva del modulo dopo aver installato i pacchetti.
Configurazione per i moduli Redis (con igbinary e msgpack):
packages: yum: php8.4-pecl-igbinary: [] php8.4-pecl-msgpack: [] php8.4-pecl-redis6: [] commands: 01_symlink_igbinary: command: ln -sf /usr/lib64/php8.4/modules/igbinary.so /usr/lib64/php/modules/igbinary.so 02_symlink_msgpack: command: ln -sf /usr/lib64/php8.4/modules/msgpack.so /usr/lib64/php/modules/msgpack.so 03_symlink_redis: command: ln -sf /usr/lib64/php8.4/modules/redis.so /usr/lib64/php/modules/redis.so
Nota: nel file di configurazione precedente, la sezione packages utilizza YUM per installare i moduli Redis, igbinary e msgpack. I pacchetti YUM creano automaticamente i file di configurazione .ini in /etc/php.d/. 01_symlink_igbinary crea un collegamento simbolico per il modulo igbinary da /usr/lib64/php8.4/modules/ a /usr/lib64/php/modules/. 02_symlink_msgpack crea un collegamento simbolico per il modulo msgpack. 03_symlink_redis crea un collegamento simbolico per il modulo Redis.
Configurazione per i moduli Memcached:
packages: yum: php8.4-pecl-memcached: [] commands: 01_symlink_memcached: command: ln -sf /usr/lib64/php8.4/modules/memcached.so /usr/lib64/php/modules/memcached.so
Nota: nel file di configurazione precedente, la sezione packages utilizza YUM per installare il modulo Memcached. 01_symlink_memcached crea un collegamento simbolico per il modulo memcached.
Verifica di aver caricato correttamente i moduli
Connettiti all'istanza ed esegui questi comandi.
Per verificare la presenza di errori di avvio di PHP:
php -v
Output atteso:
packages: yum: php8.4-pecl-memcached: [] commands: 01_symlink_memcached: command: ln -sf /usr/lib64/php8.4/modules/memcached.so /usr/lib64/php/modules/memcached.so
Per elencare i moduli caricati:
php -m | grep -iE "redis|igbinary|msgpack|memcached|apcu"
Output atteso (per Redis con igbinary e msgpack):
igbinary msgpack redis
Per verificare la versione di Redis:
php -r "echo 'Redis version: ' . phpversion('redis') . PHP_EOL;"
Risolvi i problemi relativi ai moduli
Se non hai creato correttamente i collegamenti simbolici, PHP non può caricare i moduli e ricevi un messaggio di errore simile al seguente:
"PHP Warning: Unable to load dynamic library 'redis.so' (tried: /usr/lib64/php/modules/redis.so - No such file or directory)"
Per risolvere il problema, verifica che i moduli esistano in /usr/lib64/php8.4/modules/ eseguendo questo comando:
ls -la /usr/lib64/php8.4/modules/
I moduli esistono se ottieni il seguente output:
Se la directory non esiste o se mancano moduli, verifica la sezione packages nel file di configurazione .ebextensions e ridistribuisci l'applicazione.
Per verificare che i collegamenti simbolici esistano in /usr/lib64/php/modules/, esegui questo comando:
ls -la /usr/lib64/php/modules/ | grep -iE "redis|igbinary|msgpack"
Per verificare di avere i comandi symlink corretti nel file di configurazione .ebextentsions, controlla che l'output sia il seguente:
lrwxrwxrwx. 1 root root 37 igbinary.so -> /usr/lib64/php8.4/modules/igbinary.so lrwxrwxrwx. 1 root root 36 msgpack.so -> /usr/lib64/php8.4/modules/msgpack.so lrwxrwxrwx. 1 root root 34 redis.so -> /usr/lib64/php8.4/modules/redis.so
Se non hai collegamenti simbolici, verifica che il file di configurazione .ebextensions includa la sezione commands con i comandi dei collegamenti simbolici.
Testa sempre una nuova configurazione .ebextensions in un ambiente non di produzione prima di distribuirla in produzione.
- Argomenti
- Compute
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata 2 anni fa