Настройка приложения Symfony2 на амазонке (для чайников)

Я пытаюсь научиться успешно развертывать приложение Symfony2 на облаке амазонок. То, что сработало, это то, что я начал с пустого Ubuntu, установил lamp-server ^, svn... несколько других лакомств, и он отлично работал.

Проблема: все активы и БД были размещены на одном экземпляре, и я знаю, что это не так. Я проверил множество сайтов и не нашел простого решения для установки реального приложения S2, только Wordpress и т.п.

Мое приложение позволяет пользователям загружать изображения, а затем отображать их с помощью пакет Liip/Imagine

Я также проверил пакет AmazonWebServices, и я думаю, что я должен каким-то образом использовать их оба; первый для отображения, второй для отправки файлов в ведро S3. И он также должен работать в моей локальной среде Windows.

  • Как это решить? Есть ли на самом деле какое-то идиотское решение?
  • RDS требует читать

    $dbhost = $_SERVER['RDS_HOSTNAME'];
    $dbport = $_SERVER['RDS_PORT'];
    $dbname = $_SERVER['RDS_DB_NAME'];
    

    чтобы иметь возможность доступа к mysql. Как это сделать при использовании параметров .yml?

Ответы

Ответ 1

Инфраструктура

В то время как вы можете использовать AWS для автономных серверов, если вы хотите поддерживать несколько экземпляров, балансировку нагрузки и т.д., вы захотите отделить все. На самом базовом уровне вы, скорее всего, захотите использовать:

  • S3 - постоянное хранилище
  • База данных RDS - MySQL
  • EC2 - Apache/Nginx, внешний интерфейс PHP

Затем вы можете увеличить это с помощью:

  • Cloudfront - локализованная доставка вашего контента S3
  • Loadbalancer - убедитесь, что ваши экземпляры EC2 оптимально используются
  • Автоматическое масштабирование - запуск/остановка новых экземпляров
  • Маршрут 53 - DNS
  • VPC - важно, так как это обеспечивает безопасность, отдельные интерфейсы для сертификатов SSL и т.д.

Кроме того, вместо запуска с нуля вы можете использовать AMI с рынка: https://aws.amazon.com/marketplace/

Ознакомьтесь с руководством по началу работы с AWS, поскольку это подробно описано: http://docs.aws.amazon.com/gettingstarted/latest/wah-linux/web-app-hosting-intro.html

Используя вышеизложенное, я бы предложил переместить вашу базу данных в RDS и просто разместить Apache в своих экземплярах EC2. Возможно, вы даже обнаружите, что это экономически выгодно, так как вы сможете использовать небольшие экземпляры с учетом требований к более низкой памяти/ЦП.

Кроме того, по прошествии времени вы можете начать смотреть на эластичный бобовый сундук и шеф-повар (возможно, даже бродячий для локальных dev-боксов), Elastic Beanstalk (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_PHP_symfony2.html)

Итак, Symfony

сначала, среда

Я предполагаю, что вы создали среды разработки и разработки: http://symfony.com/doc/current/cookbook/configuration/environments.html. Это важно, так как вы можете изменить конфигурацию между локальной и производственной средой.

Изображения

Оформить заказ https://github.com/liip/LiipImagineBundle/blob/master/Resources/doc/data-loader/stream.md, который использует https://github.com/KnpLabs/Gaufrette (или комплект: https://github.com/KnpLabs/KnpGaufretteBundle).

Кажется, есть хорошая статья о том, как настроить его здесь: https://florian.ec/articles/upload-files-to-amazon-s3-with-symfony2-and-gaufrette/

Используя вышеуказанные среды, вы сможете настроить производство для чтения/записи на s3, тогда как события пишут в /tmp (например)

База данных.

Я собираюсь сделать предположение, что вы используете Doctrine в качестве своего соединения с БД и следили за документами Symfony о том, как настроить конфигурацию: http://symfony.com/doc/current/book/doctrine.html#configuring-the-database.

Все, что вам нужно сделать, это следовать логике среды и соответственно установить производные строки db/local. Это должно быть плавным в фоновом режиме и не требует ручных подключений MySQL.

Ответ 2

Вы можете использовать ведро Amazon s3 для хранения ваших файлов. Посмотрите https://github.com/KnpLabs/Gaufrette, он позволяет хранить файлы на локальной файловой системе, в файловой системе Amazon s3 или другой, просто управляя ею, используя конфигурации. Для указания сведений о базе данных в RDS. настройте следующее в параметрах .yml:

database_driver:   pdo_mysql
database_host:     127.0.0.1
database_port:     ~
database_name:     symfony
database_user:     root
database_password: password

Ответ 3

Проблема заключается в следующем: Symfony ожидает префикс SYMFONY__ в имени переменной среды, чтобы передать его в контейнер параметров. Это может быть легко достигнуто путем сглаживания переменных среды в эластичном бобовом стебле.

Моя собственная конфигурация выглядит следующим образом:

SYMFONY__DATABASE_HOST: '$RDS_HOST'
SYMFONY__DATABASE_PORT: '$RDS_PORT'
SYMFONY__DATABASE_USER: '$RDS_USERNAME'
SYMFONY__DATABASE_PASSWORD: '$RDS_PASSWORD'
SYMFONY__DATABASE_NAME: '$RDS_DB_NAME'