Fork me on GitHub

Déployer une application PHP sur OpenShift

OpenShift est une plate-forme de publication d’applications de type PaaS concue par la société RedHat.

Elle permet de déployer grauitement jusqu’à trois applications et supporte de nombreux langages : Java, Ruby, Python, PHP, Node.js, etc.

Nous allons l’utiliser pour déployer une application PHP utilisant le framework Silex ainsi que MySQL.

Création d’une nouvelle application sur OpenShift

#LOCALE = Encoding.find(Encoding.locale_charmap)
LOCALE = Encoding::UTF_8
$ rhc setup

Lien avec un projet existant

Une application OpenShift correspond à un dépôt Git hébergé chez OpenShift. Pour pouvoir déployer une application existante, il faut lier son dépôt Git local au dépôt distant OpenShift.

$ git remote add openshift <url_depot_openshift_copiee>
$ git fetch openshift
$ git merge openshift/master -s recursive -X ours
$ echo "" > .openshift/markers/use_composer
$ touch .openshift/markers/use_composer

Le répertoire .openshift contient maintenant tous les paramètres liés à OpenShift.

<?php

// Doctrine (db)
$app['db.options'] = array(
    'driver'   => 'pdo_mysql',
    'charset'  => 'utf8',
    'host'     => '127.0.0.1',
    'port'     => '3306',
    'dbname'   => 'presidents',
    'user'     => 'presidents_user',
    'password' => 'secret',
);

// enable the debug mode
$app['debug'] = true;

A présent, nous allons utiliser le fichier app/config/prod.php pour définir la configuration liée au déploiement sur OpenShift. Les paramètres d’accès à la base de données seront spécifiques.

<?php

// MySQL config for OpenShift
$dbHost = getenv('OPENSHIFT_MYSQL_DB_HOST');
$dbPort = getenv('OPENSHIFT_MYSQL_DB_PORT');
$dbName = getenv('OPENSHIFT_GEAR_NAME');
$dbUser = getenv('OPENSHIFT_MYSQL_DB_USERNAME');
$dbPassword = getenv('OPENSHIFT_MYSQL_DB_PASSWORD');

// Doctrine (db)
$app['db.options'] = array(
    'driver'   => 'pdo_mysql',
    'charset'  => 'utf8',
    'host'     => "$dbHost",
    'port'     => "$dbPort",
    'dbname'   => "$dbName",
    'user'     => "$dbUser",
    'password' => "$dbPassword",
);
// require __DIR__.'/../app/config/dev.php';
require __DIR__.'/../app/config/prod.php';
$ git add --all
$ git commit -m "Add OpenShift"
$ git push openshift master

Et là, c’est magique : le dépôt local est poussé sur OpenShift, ce qui déclenche automatiquement l’installation des composants et le déploiement en ligne. Pas de connexion FTP, pas d’hôte virtuel ou de redirection à configurer sur le serveur distant, rien.

Il ne reste plus qu’à implanter le schéma de la base de données sur OpenShift.

Modifications ultérieures

Une fois la configuration initiale effectuée, le déploiement de nouvelles modifications se fait en les committant dans le dépôt local, puis en lançant la commande :

$ git push openshift master

Il faudra jongler entre les configurations dev et prod dans le fichier web/index.php pour pouvoir tester localement puis déployer sur OpenShift.

Exercice