Подтвердить что ты не робот

Как установить переменные среды для Laravel 5 на AWS EC2 с MySQL

Я успешно применил мое приложение laravel 5 к AWS EC2. Я также создал базу данных MySQL с AWS RDS и связал ее с моим экземпляром приложения.

Теперь я хочу установить мои переменные env, чтобы он использовал значения по умолчанию для homesteads, когда на моей локальной машине в разработке, и мою базу данных AWS при развертывании и производстве.

Отсюда я сделал крупное изменение в моем первоначальном вопросе, чтобы отразить то, что я узнал, начиная с его запроса

Классический .env в проекте laravel для локального развития выглядит примерно так:

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

Для производства я наконец понял, что я просто создаю новый .env файл с моими производными переменными. При использовании AWS мой .env файл будет примерно выглядеть следующим образом:

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

Мой вопрос/проблема сейчас

Я использую AWS eb cli для развертывания моего приложения из git. Но как мне развернуть мой файл .env для производства без необходимости сначала нажимать его на git?

4b9b3361

Ответ 1

Вы можете создать новый .env на свой экземпляр ec2 и добавить туда все env vars. Один из вариантов был бы ssh-ing в поле и создание файла через vi или cat. Или вы можете написать script, чтобы удаленно вытащить .env из внешнего местоположения.

Вы также можете ввести ssh в поле и export APP_ENV=production все ваши env vars (при условии, что правая команда для вашей ОС).

Добавление env vars в вашу среду будет зависеть от операционной системы, в которой работает ваш экземпляр ec2, поэтому решение будет зависеть от этого. ec2 имеет концепцию "тегов", которая может быть полезна, но документы показывают, что они ограничивают количество тегов до 10, поэтому вам может понадобиться сделать это вручную и для экземпляра ec2:/

Смотрите здесь для одного метода, который использует теги для вставки и установки env vars (не-laravel specific).

Я только что пережил это вчера, когда Laravel работал на Elastic Beanstalk, решение было чистым. Фактически вы можете установить env vars непосредственно через консоль aws (EB app/environment → Configuration → Software Configuration → Environment Properties).

Обновление:

Ключевой концепцией для понимания является то, что Laravel просто использует phpdotenv, чтобы сбрасывать vars из файла .env в php global $_ENV, тогда как любые уже существующие env vars автоматически включаются в $_ENV, когда php запускает сервер (docs). Таким образом, сам файл .env не нужен, это просто удобство для разработчиков. (если только я не был испорчен эластичным бобовым стеблем до сих пор).

Ответ 2

Русс Мэтни выше дал правильный ответ, поэтому он получает галочку. Я напишу свой собственный ответ здесь, чтобы добавить подробные сведения о том, как я работал над этим. Я предполагаю, что у вас установлена ​​ваша база данных и все необходимые учетные данные.

1. Перейдите на панель инструментов с эластичным бобовым стеблем.

eb dashboard


2. Далее перейдите в конфигурацию вашего программного обеспечения

eb software config


3. Добавьте переменные рабочей среды, как показано ниже. Не забудьте установить корень документа в /public, а также добавить: 3306 в конце конечной точки базы данных, чтобы избежать ошибки PDOEXCEPTION.

Смотрите увеличенную картинку ниже

environment variable configuration page


4. Следующий SSH в вашем приложении eb. Подробнее см. здесь или попробуйте следующее:

$ ssh -i path/to/your/key/pair/pem/file.pem [email protected]

Обратите внимание, что ec1-11-11-11-111.eu-central-1.compute.amazonaws.com - это ваши общедоступные DNS-приложения. Вы найдете их здесь:

public dns at EC2 instance dashboard


5. cd к вашему приложению: $ cd /var/app/current


6. Предоставьте доступ для чтения/записи к вашей папке хранилища, или приложение не может записать в папку журналов, и это приведет к ошибке при запуске миграции. Чтобы получить доступ: $ sudo chmod -R ugo+rw storage


7. Наконец! Заполните ваши миграции и сделайте другие команды мастеров, если хотите! $ php artisan migrate Успех должен выглядеть примерно так: gitbash:

Migration success on aws eb