Recientemente pude implementar mi aplicación Laravel usando codepipeline en Elastic Beanstalk, pero me encontré con un problema. Noté que mis rutas fallaban debido a la configuración de php.conf Nginx. Tuve que agregar algunas líneas de código al archivo nginx php.conf de EB para que funcionara.
Mi problema ahora era que después de cada implementación, la instancia de la aplicación que modifiqué, el archivo php.conf, se destruyó y se volvió a crear. Quería una forma de actualizar dinámicamente el archivo después de cada implementación exitosa. Tenía una versión del archivo que quería versionar con mi aplicación y, por lo tanto, quería crear un enlace simbólico a ese archivo después de la implementación.
Después de mucha investigación, me topé con appDeploy Hooks en Elastic Beanstalk que ejecuta secuencias de comandos posteriores a la implementación, así que hice esto.
files: "/opt/elasticbeanstalk/hooks/appdeploy/post/91_post_deploy_script.sh": mode: "000755" owner: root group: root content: | #!/usr/bin/env bash sudo mkdir /var/testing1 sudo ln -sfn /var/www/html/php.conf.example /etc/nginx/conf.d/elasticbeanstalk/php.conf sudo mkdir /var/testing sudo nginx -s reloadY esto por alguna razón no funciona. El enlace simbólico no se crea, por lo que mis rutas aún no funcionan.
Incluso agregué algo de mkdir, así que estoy seguro de que se ejecutan los comandos en ese script, ninguno de esos comandos se ejecutó porque ninguno de esos directorios se creó.
Tenga en cuenta que si entro en la instancia ec2 y ejecuto los comandos allí, funciona. Ese script bash también existe en el directorio de publicaciones y si lo ejecuto manualmente en el servidor, también funciona.
Cualquier sugerencia sobre cómo podría solucionar esto sería útil. Tal vez yo también estoy haciendo algo mal.
Ahora he conseguido que mis scripts se ejecuten siguiendo este . Sin embargo, el script no se está ejecutando. estoy recibiendo un error
2020/06/28 08:22:13.653339 [INFO] Following platform hooks will be executed in order: [01_myconf.config] 2020/06/28 08:22:13.653344 [INFO] Running platform hook: .platform/hooks/postdeploy/01_myconf.config 2020/06/28 08:22:13.653516 [ERROR] An error occurred during execution of command [app-deploy] - [RunPostDeployHooks]. Stop running the command. Error: Command .platform/hooks/postdeploy/01_myconf.config failed with error fork/exec .platform/hooks/postdeploy/01_myconf.config: permission deniedTraté de seguir esta publicación del foro aquí para hacer que mi archivo sea ejecutable agregando a mi comando de contenedor un nuevo comando como este:
01_chmod1: command: "chmod +x .platform/hooks/postdeploy/91_post_deploy_script.sh"Todavía me encuentro con el mismo problema. Permiso denegado
Lamentablemente, los ganchos que está describiendo (es decir /opt/elasticbeanstalk/hooks/appdeploy ) son para Amazon Linux 1 .
Dado que está utilizando Amazon Linux 2 , como se aclara en los comentarios, los ganchos que está tratando de usar no se aplican. Por lo tanto, no están siendo ejecutados .
En Amazon Linux 2, hay nuevos ganchos como se describe aquí y son:
precompilación: los archivos aquí se ejecutan después de que el motor de la plataforma Elastic Beanstalk descargue y extraiga el paquete de código fuente de la aplicación, y antes de instalar y configurar la aplicación y el servidor web.
preimplementación: los archivos aquí se ejecutan después de que el motor de la plataforma Elastic Beanstalk instala y configura la aplicación y el servidor web, y antes de que los implemente en su ubicación de tiempo de ejecución final.
postdeploy: los archivos aquí se ejecutan después de que el motor de la plataforma Elastic Beanstalk implementa la aplicación y el servidor proxy.
El uso de estos nuevos ganchos es diferente al de Amazon Linux 1. Por lo tanto, debe volver a Amazon Linux 1 o migrar su aplicación a Amazon Linux 2.
Los pasos generales de migración de Amazon Linux 1 a Amazon Linux 2 en EB se describen aquí .
Cree una carpeta llamada .platform en la carpeta raíz de su proyecto y cree un archivo con el nombre 00_myconf.config dentro de la carpeta .platform .
.platform/ 00_myconf.configAbra 00_myconf.config y agregue los scripts
files: "/opt/elasticbeanstalk/hooks/appdeploy/post/91_post_deploy_script.sh": mode: "000755" owner: root group: root content: | #!/usr/bin/env bash sudo mkdir /var/testing1 sudo ln -sfn /var/www/html/php.conf.example /etc/nginx/conf.d/elasticbeanstalk/php.conf sudo mkdir /var/testing sudo nginx -s reloadConfirme sus cambios o vuelva a cargar el proyecto. Esta carpeta .platform se considerará en cada nueva creación de instancia y su aplicación se implementará correctamente en todas las nuevas instancias que cree Amazon Elastic beanstalk.
Si accede a la documentación aquí y se desplaza a la sección con el título "Ejemplo de aplicación con extensiones", puede ver un ejemplo de la estructura de carpetas de su carpeta .platform para que agregue su configuración personalizada a NGINX conf en cada implementación.
Puede reemplazar todo el archivo nginx.conf con su archivo o agregar archivos de configuración adicionales al directorio conf.d
Reemplace el archivo conf con su archivo en la implementación de la aplicación: .platform/nginx/nginx.conf
Agregue archivos de configuración a nginx.conf: .platform/nginx/conf.d/custom.conf