Implantando uma aplicação PHP symfony 1.4.x no DotCloud

Um amigo sugeriu-me testar a Plataforma de Aplicações Dotcloud que roda sobre a Amazon Cloud.

Como um desenvolvedor que utiliza o framework PHP symfony, existem alguns problemas para resolver. Bem após algumas pesquisas e estudos, estes são meus passos para "fazer acontecer".

Crie sua conta

Vá até Dotcloud e crie sua conta.

Siga as informações em
http://docs.dotcloud.com/tutorials/firststeps
para instalar o básico das ferramentas do Dotcloud.

Crie o namespace e as aplicações

Primeiro o namespace:

dotcloud create myprojectname

Depois a aplicação:

dotcloud deploy --type php myprojectname.www

E a aplicação para o banco de dados (no caso, MySQL)

dotcloud deploy --type mysql myprojectname.db

Recupere o usuário e senha do MySQL com o comandodotcloud info:

dotcloud info myprojectname.db

A saída do comando:

cluster: wolverine
config:
mysql_password: xyxyxyxyxyxyxyxyxxyx
mysql_serverid: -1
created_at: 1306702905.039634
name: myprojectname.db
namespace: myprojectname
ports:
-   name: ssh
url: ssh://dotcloud@db.sandbox1.dotcloud.com:6034
-   name: mysql
url: mysql://root:xyxyxyxyxyxyxyxyxxyx@db.myprojectname.dotcloud.com:6035
state: running
type: mysql

Então você pode fazer o seguinte comando no diretório symfony para configurar o banco de dados:

./symfony configure:database 'mysql://db.myprojectname.dotcloud.com:6035:mydatabase' root xyxyxyxyxyxyxyxyxxyx

Ou opcionalmente editar diretamente seu arquivo /PATH_TO_SYMFONY_APP/config/database.yml:

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql://db.myprojectname.dotcloud.com:6035;dbname=mydatabase'
      username: 'root'
      password: 'xyxyxyxyxyxyxyxyxxyx'

Obviamente, se você utiliza o Propel, ajuste conforme seu caso.

Preparando seu código

O Dotcloud utiliza o Nginx no lugar do Apache (não se preocupe, continua em boas mãos, pois o Nginx é excelente). Ou seja, o .htaccess não funciona para ativar as regras de rewrite. Mas a mudança é simples.

O único ajuste é incluir nginx.conf dentro do diretório web do projeto symfony (então ficará: /PATH_TO_SYMFONY_APP/web/nginx.conf:

# Se você precisa ativar o expires headers, aqui é o lugar
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
  expires 7d;
  break;
}

# handler de produção
location / {
  try_files $uri $uri/ /index.php;
}

# handler de desenvolvimento - não deixe isto num servidor de produção
location ^~ /frontend_dev.php/ {
  try_files $uri /frontend_dev.php;
}

# Nota: se você possui outras aplicações e handlers, use os exemplos acima

# Se você não tem um link simbólico para symfony/data/web/sf/,
# você pode fazer um alias (preste atenção ao seu diretório symfony)
#location ^~ /sf/ {
#  alias /home/dotcloud/code/lib/vendor/symfony/data/web/sf/;
#}

Implante sua aplicação

Não esqueça de limpar seu cache antes de enviar ("push").

cd /PATH_TO_SYMFONY_APP/
./symfony cc
dotcloud push myprojectname.www .

Algo mais?

Não está pronto!

Agradecimentos ao Jérôme Petazzoni do suporte do Dotcloud, que pacientemente aguentou minhas perguntas estúpidas de iniciante sobre o Nginx.

Referencias