【发布时间】:2017-06-04 05:54:01
【问题描述】:
我正在尝试通过 docker 在 AWS Elastic Beanstalk 上使用 Laravel 安装 nginx+php-fpm。我已经能够成功启动并运行它,但是 Laravel 给了我一个错误:Mcrypt PHP extension required.
我已经能够通过容器中的命令 docker-php-ext-install 安装 mcrypt,但是在安装它并验证它已安装并启用(通过 php-fpm -m |grep mcrypt)之后,我仍然收到 Mcrypt PHP extension required. 错误。每当我尝试重新启动 php-fpm 进程或重新启动容器时,elastic beanstalk 都会启动一个全新的容器,我必须重新安装 mcrypt(基本上是清除板岩)。
我正在尝试为这一切制作一个自动化脚本,有没有简单的方法可以做到这一点?
这是我的 Dockerrun.aws.json 文件:
{
"AWSEBDockerrunVersion": 2,
"volumes": [
{
"name": "php-app",
"host": {
"sourcePath": "/var/app/current/src"
}
},
{
"name": "nginx-conf",
"host": {
"sourcePath": "/var/app/current/nginx/conf.d"
}
}
],
"containerDefinitions": [
{
"name": "php-app",
"image": "php:5-fpm",
"essential": true,
"memory": 128,
"mountPoints": [
{
"sourceVolume": "php-app",
"containerPath": "/var/www/html"
}
]
},
{
"name": "nginx-proxy",
"image": "nginx",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"php-app"
],
"mountPoints": [
{
"sourceVolume": "php-app",
"containerPath": "/var/www/html"
},
{
"sourceVolume": "awseb-logs-nginx-proxy",
"containerPath": "/var/log/nginx"
},
{
"sourceVolume": "nginx-conf",
"containerPath": "/etc/nginx/conf.d",
"readOnly": true
}
]
}
]
}
以及我在容器旋转后运行的后置脚本(放置在 .ebextensions 中):
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_delayed_job.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
DOCKER_ID=`docker ps -q --filter "ancestor=php:5-fpm"`
docker exec -i $DOCKER_ID bash -c "apt-get update"
docker exec -i $DOCKER_ID bash -c "apt-get install -y libmcrypt-dev"
docker exec -i $DOCKER_ID bash -c "docker-php-ext-install mcrypt pdo pdo_mysql"
【问题讨论】:
-
您没有提及您要安装的 Laravel 版本。
mcryptPHP 扩展被认为是废弃软件,不应使用,openssl_做得更好。您最好的解决方案是安装不依赖于mcrypt的较新版本的 Laravel(我不确定哪个版本的 Laravel 依赖于mcrypt,如果有的话)。如果您不需要 mcrypt,那么您的问题就会消失,并且您似乎可以通过使用更新版本的 Laravel(例如 5.3)来解决它,如果这对您来说是可能的话。 -
我使用的是 Laravel 4.2
标签: php laravel amazon-web-services amazon-elastic-beanstalk mcrypt