Esta guía explica como instalar una aplicación Symfony2 existente en OpenShift.
Se asume que:
- Hay un proyecto Symfony2 en un repositorio git local (puede tener un
origin
en cualquier servidor como GitHub o BitBucket) funcionando correctamente. - Se ignoraron del repositorio la carpeta de Vendors, Cache y Logs y los archivos como bootstrap y composer (Ver https://github.com/github/gitignore/blob/master/Symfony2.gitignore ). Si se usa alguna IDE también se sugiere ignorar los rchivos de la misma (Buscarla en https://github.com/github/gitignore/tree/master/Global )
- No hay ningun cambio pendiente de
commit
- En primer lugar debes tener una cuenta, si todavía no la creaste lo haces en https://www.openshift.com
- Ingresar a la web e ingresar con la cuenta
- En Applications elegir
Create your first application now
- Seleccionar el cartucho
PHP 5.4
oPHP 5.4 with Zend Server 6.1
- Completar la URL deseada, dejar vacía la dirección al repositorio git y crear la aplicación (
Create Application
) - Copiar y pegar un archivo de texto (o guardar en algún lado, para encontrarlo rápido) el link de git de la aplicación.
- Hacer click en
Add MySQL 5.5
y aceptar eligiendoAdd Cartridge
- Instalar las
Command Line Tools
siguiente la guía: https://www.openshift.com/developers/rhc-client-tools-install - Configurar la herramienta instalada ejecutando
rhc setup
. Asegurarse de aceptar que instale la clave ssh - Configurar la aplicación para que publique la branch release:
rhc app-configure --deployment-branch release -a <app-name>
- Buscar el archivo
app/config/config.yml
e importar un nuevo archivo de configuración PHP, por ejemploparams.php
, de la siguiente manera:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: params.php }
...
- Crear el archivo app/config/params.php como un archivo PHP vacío:
<?php ?>
- Ignorar este último archivo de git. Para ello agregar en el .gitignore del proyecto su ruta (
app/config/params.php
) - Hacer commit de los cambios introducidos:
git commit -m "Archivo de configuración php agregado"
- Crear un nuevo branch en el que se guardarán los cambios específicos para OpenShift, en este caso
release
:git checkout -b release
- Agregar como remoto el repositorio de Openshift, con nombre openshift:
git remote add openshift -f <dirección>
donde dirección es la copiada en el paso 1.6 - Para poder subir el repo actual, primero hay que combinarlo con el de OpenShift, para ello ejecutar:
git merge openshift/master -s recursive -X ours
. Este comando combina recursivamente la rama actual (release) con la rama master de OpenShift y, en cualquier caso de conflicto, se queda con la versión local del archivo. - En la raíz del repositorio local ahora debe haber una carpeta
.openshift
. Dentro de la carpeta .openshift/action_hooks crear un archivo deploy con el contenido de https://gist.github.com/brunodmt/9567047 reemplazando<app-name>
por el nombre de la carpeta en que está el proyecto Symfony dentro del repositorio. Si los archivos del proyecto están en la raíz del repo simplemente borrar todos los<app-name>/
- Marcar como ejecutable el archivo deploy recién creado. En Windows los permisos de ejecución se pierden al hacer
push
, por lo que debe ejecutarse el comandogit update-index --chmod=+x .openshift/action_hooks/deploy
- Crear el archivo
app/config/params.php
para utilizar los parámetros de OpenShift:
<?php
# app/config/params.php
$container->setParameter('database_host', getEnv("OPENSHIFT_MYSQL_DB_HOST"));
$container->setParameter('database_port', getEnv("OPENSHIFT_MYSQL_DB_PORT"));
$container->setParameter('database_name', getEnv("OPENSHIFT_APP_NAME"));
$container->setParameter('database_user', getEnv("OPENSHIFT_MYSQL_DB_USERNAME"));
$container->setParameter('database_password', getEnv("OPENSHIFT_MYSQL_DB_PASSWORD"));
?>
- Si se quiere acceder en modo Dev a la aplicación remota, para verificar las excepciones y demás, se debe modificar el archivo
web/app_dev.php
comentando las siguientes líneas:
<?php
...
if (isset($_SERVER['HTTP_CLIENT_IP'])
|| isset($_SERVER['HTTP_X_FORWARDED_FOR'])
|| !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1'))
) {
header('HTTP/1.0 403 Forbidden');
exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
...
?>
- Hacer commit de las modificaciones:
git commit -m "Proyecto adaptado a OpenShift"
- Enviar los cambios al repositorio en OpenShift, para hace hacer push contra el origen agregado en el paso 4.1:
git push openshift HEAD
- La consola mostrará los pasos de instalación y ejecutará el archivo deploy creado anteriormente. El mismo bajará los archivos de terceros (vendors) necesarios, ajustará los permisos, limpiará la caché y creará el esquema del a DB. En caso de no ser necesario este último paso (o de utilizar otro ORM distinto de Doctrine) eliminarlo o cambiarlo por el comando necesario.
- Volver a la branch master o de desarrollo, para ello:
git checkout master
Este es un paso opcional. Si se necesita acceder por ssh al servidor ejecutar el comando rhc ssh -a <app-name>
. Para utilizar la consola Symfony, una vez conectado por SSH ejecutar cd $OPENSHIFT_REPO_DIR/<app-name>/
y desde allí se podrán ejecutar los comandos regularmente, como: php app/console cache:clear
- Asegurarse de estar en la branch de desarrollo, por ejemplo si se utiliza master:
git checkout master
- Llevar a cabo todos los cambios deseados
- Pasarse a la branch
release
:git checkout release
- Recuperar los cambios de la branch
master
:git merge master
. En el caso de haber un conflicto resolverlo, pero no debería si el archivoparams.php
está correctamente ignorado - Enviar los cambios a OpenShift:
git push openshift HEAD
- Volver a la branch de desarrollo:
git checkout master
Gracias por el tuto! Muy util y bien explicado.
Lo unico que tuve que hacer extra es quitar el params.php del .gitignore del branch release ya que este archivo es necesario en openshift.
Y otra cosa, ya que no me funcionaba, es agregar en el push el branch destino:
git push openshift HEAD:master
Sin esto no me aparecian los cambios en el server ya que estaria creando un repo release que no es el que copia en el directorio $OPENSHIFT_REPO_DIR