在亚马逊上设置Symfony2应用程序(傻瓜)

我正在尝试学习如何在亚马逊云上成功部署Symfony2应用程序。有效的是,我从空白的Ubuntu开始,安装了灯服务器^,svn...其他好东西很少,它很完美。

问题是:所有资产和数据库都托管在那个实例上,我知道这不是正确的做法。我检查了许多网站,没有找到任何设置真正的S2应用程序的简单解决方案,只有Wordpress等。

我的应用程序允许用户上传图像,然后使用Liip /Imagine捆绑包显示它们

我还检查了AmazonWebServices捆绑包,我想我应该以某种方式使用它们;第一个用于显示,第二个用于将文件发送到 S3 存储桶。而且它也必须在我当地的Windows环境中工作。

  1. 如何解决这个问题?有没有一些真正白痴的解决方案?
  2. RDS 需要读取

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

    以便能够访问 mysql。使用 parameters.yml 时如何做到这一点?


答案 1

基础设施

虽然您可以使用 AWS 提供独立服务器,但如果您希望支持多个实例、负载均衡等,则需要将事情分开。在最基本的层面上,您可能希望使用:

  • S3 - 持久性存储
  • RDS - MySQL 数据库
  • EC2 - Apache / Nginx, PHP 前端

然后,您可以使用以下命令来增强这一点:

  • 云端 - 本地化交付您的 S3 内容
  • 负载均衡器 - 确保您的 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,只需在 EC2 实例上托管 Apache 即可。您甚至可能会发现这也很划算,因为鉴于较低的内存/ CPU要求,您将能够利用小型实例。

此外,随着时间的流逝,您可以开始查看Elastic Beanstalk和Chef(甚至可能是本地开发盒的流浪汉),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

您需要做的就是遵循环境逻辑并相应地设置数据库字符串生产/本地。这应该在后台无缝连接,不需要手动MySQL连接。


答案 2

您可以使用 Amazon s3 存储桶来存储您的文件。看看 https://github.com/KnpLabs/Gaufrette ,它使您能够将文件存储在本地文件系统,Amazon s3文件系统或其他文件系统上,只需使用配置进行控制即可。用于在 RDS 上指定数据库详细信息。在 parameters.yml 中配置以下内容:

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

推荐