Cómo establecer variables de entorno para Laravel 5 en AWS EC2 con MySQL

Implementé con éxito mi aplicación laravel 5 en AWS EC2. También he creado una database MySQL con AWS RDS y la he asociado con la instancia de mi aplicación.

Ahora quiero configurar mis variables env para que utilicen los valores pnetworkingeterminados de los hogares cuando esté en mi máquina local en desarrollo y mi database AWS cuando esté desplegada y en producción.

A partir de aquí hice una edición importante de mi pregunta original para reflejar lo que aprendí desde que se lo pregunté

El clásico .env en un proyecto de laravel para el desarrollo local se ve más o less así:

APP_ENV=local APP_DEBUG=true APP_KEY=BF3nmfzXJ2T6XU8EVkyHtULCtwnakK5k (Note, not a real key) DB_HOST=localhost DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null 

Para la producción, finalmente he entendido que simplemente creo un nuevo file .env con mis variables de producción. Cuando utilizo AWS, mi file .env se vería más o less así:

 APP_ENV=production APP_DEBUG=false APP_KEY=BF3nmfzXJ2T6XU8EVkyHtULCtwnakK5k (Note, not a real key) DB_HOST=aaxxxxxxxxxxxxx.cyxxxxxxxxxx.eu-central-1.rds.amazonaws.com:3306 DB_DATABASE=MyAppsDatabaseName DB_USERNAME=MyAWSRDSUserName DB_PASSWORD=NotARealPassword CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null 

Mi pregunta / problema ahora

Uso AWS eb cli para implementar mi aplicación desde git. Pero, ¿cómo deployment mi file .env de producción sin tener que presionarlo primero?

Podrías crear un nuevo .env en tu instancia de ec2 y agregar todos los env vars allí. Una opción sería ir al cuadro y crear el file vía vi o cat. O podría escribir una secuencia de commands para get de forma remota el .env desde una location externa.

También puede ingresar al cuadro y export APP_ENV=production todos sus files (suponiendo que es el command correcto para su sistema operativo).

Agregar env vars a su entorno dependerá del sistema operativo que ejecute su instancia de ec2, por lo que la solución dependerá de eso. ec2 tiene un concepto de 'tags' que puede ser útil, pero los documentos muestran que limitan el número de tags a 10, por lo que puede tener que hacerlo manualmente y por instancia de ec2: /

Vea aquí un método que usa tags para get y establecer env vars (no específicos de laravel).

Acabo de pasar por esto ayer mientras Laravel se ejecutaba en Elastic Beanstalk, la solución estaba limpia. En realidad, puede configurar los files directamente a través de la console aws (aplicación / entorno EB -> Configuración -> Configuración del software -> Propiedades del entorno).

Actualizar:

El concepto key para comprender es que Laravel solo usa phpdotenv para volcar vars del file .env en $_ENV global $_ENV , mientras que cualquier env medio ya existente se incluye automáticamente en $_ENV cuando php inicia el server ( docs ). Por lo tanto, el file .env en sí no es necesario, realmente solo es una conveniencia del desarrollador. (a less que me haya echado a perder por el tallo de judías elástico hasta el momento).

Russ Matney de arriba dio la respuesta correcta, por lo que obtiene la marca de verificación. Escribiré mi propia respuesta aquí para agregar detalles sobre cómo hice que las cosas funcionen. Supongo que tiene su database configurada y tiene todas las cnetworkingenciales que necesita.

1. Dirígete a tu tablero elástico de habichuelas mágicas

tablero eb


2. Luego ve a tu configuration de software

configuración de software eb


3. Agregue sus variables de entorno de producción como se muestra a continuación. Recuerde establecer la raíz del documento en / public, y también agregue: 3306 al final del punto final de la database para evitar el error PDOEXCEPTION.

Ver la versión más grande de la image a continuación

página de configuración de variable de entorno


4. Siguiente SSH en su instancia de eb de aplicaciones. Vea los detalles aquí , o intente lo siguiente a continuación:

$ ssh -i path/to/your/key/pair/pem/file.pem ec2-user@ec1-11-11-11-111.eu-central-1.compute.amazonaws.com

Tenga en count que ec1-11-11-11-111.eu-central-1.compute.amazonaws.com es su DNS público de aplicaciones. Encontrarás los tuyos aquí mismo:

dns públicos en el panel de instancia EC2


5. CD a su aplicación: $ cd /var/app/current


6. Proporcione acceso de lectura / escritura a su carpeta de almacenamiento o la aplicación no puede escribir en la carpeta de loggings y eso dará como resultado un error al ejecutar las migraciones. Para dar acceso: $ sudo chmod -R ugo+rw storage


7. ¡Finalmente! ¡Ejecuta tus migraciones y haz otros commands artesanales si quieres! $ php artisan migrate éxito debería parecerse a esto de gitbash:

Éxito de migración en aws eb