Comment déployer une application PHP ?
Cet article traite de PHP, l’un des langages de script les plus populaires du web. Nous explorerons ses avantages, ses inconvénients et ses options de déploiement.
À la fin de cet article, vous serez en mesure de démarrer une application PHP simple, de la dockeriser et de la déployer sur Back4app Containers.
Contents
Aperçu de PHP
PHP (abréviation de “PHP : HyperText Processor”) est un langage de script populaire et gratuit à usage général. Il a été créé en 1993 par Rasmus Lerdorf et publié en 1995.
PHP a été conçu à l’origine pour le développement web, mais il est désormais également utilisé pour les scripts côté serveur, les scripts en ligne de commande et l’écriture d’applications de bureau.
L’avantage de PHP est qu’il peut être directement intégré dans le code HTML. Il n’est pas nécessaire d’utiliser de longues commandes pour produire du HTML (comme c’est le cas en C ou en Perl). Voici un exemple rapide :
<!DOCTYPE html>
<html lang="en">
<head>
<title>My first PHP website</title>
</head>
<body>
<?php
$cool_scripting_language = "PHP";
echo "$cool_scripting_language is a cool scripting language!";
?>
</body>
</html>
PHP sera exécuté lorsqu’un utilisateur demandera ce site, et seule la sortie HTML traitée sera renvoyée. Dans notre cas, un message disant “PHP est un langage de script cool !”. Le PHP est exécuté sur le serveur et non dans le navigateur (comme JavaScript).
On peut se demander si PHP est un langage entièrement orienté objet. Il supporte cependant les caractéristiques standard de l’orientation objet, telles que les espaces de noms, les classes et les objets.
Au moment où nous écrivons ces lignes, la version stable la plus récente de PHP est la 8.2, mais de nombreuses applications PHP utilisent des versions plus anciennes.
Certains développeurs prétendent que PHP est en train de mourir, mais ce n’est pas le cas. Selon l’étude de W3Techs, PHP équipe actuellement 77,4 % de tous les sites web dont le langage de programmation côté serveur est connu.
Le langage de script est également utilisé par des sites web à fort trafic tels que Facebook, Wikipedia, Mailchimp, divers logiciels CMS, et a même été utilisé par YouTube dans le passé.
Avantages de PHP
Bonne performance
PHP est plus performant que d’autres langages de script côté serveur tels que ASP.NET, JSP et Python. Certains benchmarks montrent que PHP est jusqu’à trois fois plus rapide que Python.
PHP est le plus à même de gérer les tâches liées au web, telles que la génération de pages HTML, la gestion des soumissions de formulaires et l’interaction avec la base de données.
Au contraire, il existe des choix plus optimaux que PHP pour les tâches de calcul lourdes ou les algorithmes complexes.
Multiplateforme
PHP est indépendant de la plate-forme. Il fonctionne sur différentes plateformes, notamment Windows, Linux, Unix et Mac. En outre, il est compatible avec presque tous les serveurs web courants, tels qu’Apache HTTP, Caddy, Nginx, LiteSpeed, etc.
Le langage de script populaire peut également être utilisé pour développer des applications de bureau grâce à phpdesktop de Czarek Tomczak. Vous pouvez considérer cette bibliothèque comme Electron mais pour PHP. Les applications phpdesktop peuvent fonctionner sous Windows et Linux, mais pas sous Mac OS X (pour l’instant).
Soutien à la base de données
Le langage de script supporte une variété de bases de données, y compris les bases de données SQL et NoSQL. La base de données la plus populaire à utiliser avec PHP est MySQL(pile LAMP), mais rien ne vous empêche d’utiliser PostgreSQL, ou tout autre type de base de données.
Vous pouvez consulter toutes les couches d’abstraction PHP et les extensions de bases de données spécifiques aux fournisseurs sur leur site officiel.
Un écosystème dynamique
PHP est aussi populaire qu’il l’est, grâce à son écosystème dynamique. De nombreux frameworks PHP géniaux accélèrent considérablement le processus de développement, simplifient la base de code et vous aident à écrire un code plus propre et plus standardisé.
Les frameworks PHP les plus populaires au moment de la rédaction de ce document sont les suivants :
Pour d’autres frameworks et ressources géniaux, consultez awesome-php sur GitHub.
Il existe également de nombreux CMS qui utilisent PHP, tels que WordPress, Joomla, Drupal et Magento.
Facile à apprendre
PHP est un langage convivial pour les débutants, avec une syntaxe simple. Il est relativement facile à apprendre si vous connaissez les bases du World Wide Web (WWW), HTML, CSS et JavaScript. De nombreux développeurs sont capables d’écrire du PHP, mais seuls quelques-uns sont capables d’écrire du PHP facile à maintenir et qui respecte des conventions de code propres.
Limites de PHP
Outils de débogage limités
PHP gère mal les erreurs et manque d’outils de débogage par rapport à d’autres langages de programmation populaires. Si votre projet nécessite un débogage avancé, vous devrez probablement utiliser des logiciels tiers tels que Xdebug, Krumo ou Kint.
Certains IDE populaires tels que PhpStorm et Visual Studio disposent également d’outils de débogage PHP intégrés.
Dactylographié librement
Comme mentionné ci-dessus, PHP est un langage de script, et non un langage de programmation. L’une des caractéristiques les plus courantes des langages de script est qu’ils sont faiblement typés.
Cela signifie qu’il n’est pas nécessaire de déclarer explicitement le type de la variable avant de l’utiliser. De plus, il peut être modifié à tout moment au cours de l’exécution.
Les applications PHP sont donc plus sujettes aux erreurs et plus difficiles à déboguer.
Les failles de sécurité
Au fil des ans, les applications PHP ont été la cible de diverses attaques de pirates informatiques. Cela est principalement dû à la nature open-source de PHP et à son faible coût d’entrée pour les nouveaux développeurs.
Parmi les vulnérabilités PHP les plus connues, on peut citer les injections SQL, les scripts intersites (XSS), la falsification des requêtes intersites (CSRF) et l’exécution de code à distance (RCE).
Rappelez-vous que ces vulnérabilités peuvent être évitées en suivant des pratiques de codage sécurisées. Veillez à toujours assainir les entrées et à ne jamais exécuter les données fournies par l’utilisateur.
Vanilla PHP est dépassé
Le PHP vanille (c’est-à-dire le PHP sans bibliothèques ou frameworks) peut être assez obsolète pour construire des applications modernes. Pour créer rapidement des applications sécurisées, vous devez utiliser un framework.
Options de déploiement de PHP
Les applications PHP peuvent être déployées sur différentes plateformes. Les modèles de cloud les plus courants pour le déploiement d’applications PHP sont les suivants :
- Infrastructure en tant que service (IaaS),
- Plate-forme en tant que service (PaaS),
- Conteneurs en tant que service (CaaS).
Le meilleur modèle de cloud pour le déploiement d’applications PHP n’existe pas. En fin de compte, le choix dépend des exigences de votre projet, de votre budget et du niveau d’abstraction souhaité.
En général, les équipes de développeurs optent pour PaaS ou CaaS, car ils sont plus faciles à gérer et pas beaucoup plus chers que IaaS. Examinons quelques-uns des meilleurs fournisseurs d’hébergement PHP.
Conteneurs Back4app
Back4app Containers est une excellente offre de conteneurs en tant que service (CaaS) proposée par Back4app. La plateforme permet aux développeurs de construire, de mettre à l’échelle et de déployer rapidement des applications dockerisées.
Déployer une application sur Back4app Containers est aussi simple que d’importer votre dépôt GitHub et de cliquer sur un bouton. La plateforme dispose d’un excellent système d’intégration et de déploiement continus, supporte les déploiements sans temps mort, le suivi des déploiements en temps réel et bien plus encore !
Un autre avantage de Back4app Containers est son niveau gratuit, qui est parfait pour héberger de petites applications. Au fur et à mesure que votre application évolue, vous pouvez passer à des niveaux supérieurs en suivant un plan de tarification simple et prévisible.
Google Cloud Run
Google Cloud Run est une plateforme Containers as a Service (CaaS) entièrement automatisée pour le déploiement et la mise à l’échelle d’apps conteneurisées. Elle est devenue publiquement disponible en 2019 et a depuis gagné beaucoup de popularité.
Cloud Run est relativement facile à utiliser, surtout si vous êtes familier avec les autres produits GCP. Parmi les avantages de Cloud Run, citons les certificats SSL gratuits, une bonne intégration avec d’autres solutions GCP et une mise à l’échelle à zéro.
À l’heure où nous écrivons ces lignes, Google offre 300 dollars de crédits gratuits aux nouveaux utilisateurs.
Heroku
Heroku est l’une des solutions pionnières de plateforme en tant que service (PaaS). Elle a été créée en 2007 et reste très populaire aujourd’hui.
Elle offre une prise en charge étendue de divers langages de programmation, notamment PHP, Java, Node.js, Go, Scala et Python. La plateforme dispose d’une interface utilisateur conviviale, permet une grande évolutivité et offre une vaste sélection de modules complémentaires.
Heroku proposait auparavant un plan gratuit et des instances PostgreSQL et Redis gratuites, mais a décidé de les supprimer en 2022 en raison d’inquiétudes liées à la fraude et aux bots. Néanmoins, Heroku reste une excellente plateforme pour le déploiement d’applications.
AWS Elastic Beanstalk
AWS Elastic Beanstalk (EB) est une excellente solution de plateforme en tant que service (PaaS). Il s’agit d’une plateforme mature et bien testée qui a été créée en 2011. EB supporte nativement Go, Java, Node.js, PHP, Python, Ruby et permet de déployer des applications dockerisées.
L’avantage d’Elastic Beanstalk est que vous pouvez le combiner avec d’autres solutions AWS, telles que AWS S3, AWS RDS, AWS CloudFront, etc. AWS propose un niveau gratuit aux nouveaux clients.
Processus de déploiement de PHP
Dans cette section, nous allons voir comment démarrer et déployer une simple application web Laravel dans les conteneurs Back4app.
Conditions préalables
- Compréhension de base de PHP.
- Compréhension de base de Docker et de la technologie de conteneurisation.
- Composer ainsi que Node.js et Docker installés sur votre machine locale.
Si vous n’êtes pas familier avec la technologie de conteneurisation, consultez la page Qu’est-ce qu’un conteneur ?
Qu’est-ce que Laravel ?
Laravel est un excellent framework PHP qui vous permet de construire des applications en utilisant rapidement une syntaxe expressive et élégante. Vous obtenez ainsi un code propre et concis.
Le framework est basé sur le modèle architectural modèle-vue-contrôleur (MVC). De plus, Laravel est entièrement gratuit et open-source.
Il a été initialement publié en 2011 et est actuellement l’un des frameworks PHP les plus populaires. Grâce à sa flexibilité, il peut être utilisé pour construire n’importe quel type d’application web.
Avantages de Laravel
- Performant et flexible.
- Simplifie le travail avec la base de données (via Eloquent ORM).
- Authentification et autorisation intégrées.
- Mesures de sécurité intégrées (CSRF, XSS).
Parmi les alternatives à Laravel, on trouve Symfony, CodeIgniter, CakePHP et Laminas Project.
Créer une application
Les étapes suivantes nécessitent l’installation de Composer. Si vous ne l’avez pas, téléchargez-le depuis le site officiel.
Commencez par créer un nouveau projet Laravel via l’interface de ligne de commande Composer :
$ composer create-project laravel/laravel sample-app
N’hésitez pas à remplacer
sample-app
par un nom personnalisé.
Cette commande va créer un nouveau projet Laravel et la structure de répertoire par défaut. De plus, elle installera toutes les dépendances via composer install.
Cette commande devrait prendre au maximum trois minutes.
Une fois que c’est fait, vous remarquerez la structure de répertoire suivante :
sample-app/
├── app/ contains the core code of your application
│ ├── Console
│ ├── Exceptions
│ ├── Http
│ ├── Models
│ └── Providers
├── bootstrap is used to bootstrap the framework
├── config contains all your configuration files
├── database contains database factories, migrations, seeders
├── public contains your index.php and static assets (JS, images, CSS)
├── resources contains all your views and templates (along with raw assets)
├── routes is used to define all your application endpoints
├── storage contains logs and other auto-generated stuff
├── tests can be utilized for automatic testing
└── vendor contains your Composer dependencies
Ensuite, lancez le serveur de développement à l’aide de la commande suivante :
$ php artisan serve
INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the server.
Enfin, ouvrez votre navigateur web préféré et naviguez vers http://localhost:8000/. Vous devriez voir la page d’index par défaut de Laravel.
Modifier l’application
Dans cette section, nous allons légèrement modifier l’application en enregistrant un nouveau point de terminaison de l’API.
Comme indiqué dans la section précédente, tous les itinéraires sont définis dans le dossier routes. Le dossier routes contient les fichiers suivants :
routes/
├── api
├── channels
├── console
└── web
Le répertoire web définit les itinéraires de l’utilisateur final, api les itinéraires de l’API, console les commandes de la console, et enfin, channels les canaux de diffusion des événements.
Avant Laravel 5.3, il n’y avait qu’un seul fichier routes situé dans app/Http/routes.php.
Naviguez jusqu’à routes/api.php et enregistrez un nouveau point de terminaison de l’API comme suit :
<?php
// routes/api.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
// new endpoint
Route::get('/', function () {
return response()->json([
'detail' => 'Back4app Containers rocks!',
]);
});
C’est bien, c’est tout.
Redémarrez le serveur de développement (s’il n’est pas encore lancé) et naviguez vers http://localhost:8000/. Vous devriez toujours pouvoir voir la page par défaut de Laravel, mais si vous naviguez vers /api/, vous devriez voir le message suivant :
{
"detail": "Back4app Containers rocks!"
}
Dockerize App
Dans cette section, nous allons dockeriser notre application Laravel à l’aide d’un fichier Docker.
Fichier Docker
Un Dockerfile est un fichier texte contenant toutes les instructions que le moteur Docker doit exécuter pour construire et exécuter une image Docker. Les instructions sont généralement écrites en majuscules et sont suivies d’un nombre personnalisé d’arguments. Exemple :
INSTRUCTION arg1 arg2 ... argn
Allez-y et créez un fichier Docker à la racine du projet avec le contenu suivant :
FROM php:8.1-apache
# Set the working directory
WORKDIR /var/www/html
# Install the necessary libraries
RUN apt-get update && apt-get install -y \
libonig-dev \
libzip-dev
# Install PHP extensions
RUN docker-php-ext-install \
mbstring \
zip
# Copy over the Laravel project
COPY . .
# Install Composer along with the dependencies
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN composer install
# Change ownership of our applications
RUN chown -R www-data:www-data /var/www/html
# Copy over the .env file and generate the app key
COPY .env .env
RUN php artisan key:generate
# Expose port 80
EXPOSE 80
# Adjusting Apache configurations
RUN a2enmod rewrite
COPY apache/apache-config.conf /etc/apache2/sites-available/000-default.conf
Ce fichier Docker utilise php:8.1-apache
comme image de base, installe les dépendances nécessaires au système d’exploitation et copie le projet. Il installe ensuite les dépendances PHP via Composer, génère une clé Laravel, expose le port 80, et enfin copie la configuration Apache.
Pour en savoir plus sur les Dockerfiles, consultez la référence Dockerfile.
.dockerignore
Nous pouvons utiliser un fichier .dockerignore pour réduire la taille de l’image. Ce fichier fonctionne de la même manière qu’un fichier .gitignore. Il nous permet d’omettre des fichiers et des répertoires spécifiques que nous ne voulons pas inclure dans l’image.
Créez un fichier .dockerignore à la racine du projet avec le contenu suivant :
/.phpunit.cache
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
/vendor
.phpunit.result.cache
auth.json
npm-debug.log
yarn-error.log
/.fleet
/.idea
/.vscode
N’hésitez pas à modifier le fichier .dockerignore en fonction de vos besoins.
Construire, exécuter et tester
Avant d’essayer de construire une image, assurez-vous que Docker est installé :
$ docker --version
Docker version 20.10.22, build 3a2c30b
Une fois que vous avez vérifié cela, vous pouvez construire l’image :
$ docker build -t laravel-sample:1.0 .
Récapitulatif du commandement :
docker build
est utilisé pour construire l’image.-t laravel-sample:1.0
marque l’image (les noms d’images ont généralement une structurenom:version
)..
spécifie le contexte de construction. Dans notre cas, il s’agit de la racine du projet.
Ensuite, utilisez l’image nouvellement créée pour démarrer un conteneur :
$ docker run -p 80:80 --name laravel-sample-container -d laravel-sample:1.0
Récapitulatif du commandement :
docker run
est utilisé pour démarrer un conteneur.-p 80:80
lie le port80
de l’hôte au port80
du conteneur.--name laravel-sample-container
spécifie le nom du conteneur.-d
exécute l’image en mode détaché, c’est-à-dire sans occuper le terminal.laravel-sample:1.0
indique au moteur Docker quelle image doit être utilisée.
Si vous vérifiez maintenant les conteneurs en cours d’exécution, vous devriez voir laravel-sample-container
:
$ docker ps
CONTAINER IMAGE COMMAND CREATED PORTS
b0bfbd laravel-sample:1.0 "docker-php..." 2s ago 0.0.0.0:80->80/tcp laravel
Enfin, vérifiez si vous pouvez voir l’application en visitant http://localhost/ dans votre navigateur web préféré.
Pousser vers GitHub
Pour déployer votre application sur Back4app Containers, vous devez d’abord télécharger votre code source sur GitHub. Back4app Containers utilise un système CI/CD qui déploie automatiquement votre application lorsque vous livrez votre code sur une branche spécifique.
Les étapes suivantes nécessitent que vous ayez un compte GitHub (et que Git soit installé).
Commencez par naviguer sur https://github.com et créez un nouveau dépôt :
Ensuite, choisissez un nom approprié et laissez tout le reste par défaut. Cliquez ensuite sur le bouton “Créer un référentiel” pour créer le référentiel :
Une fois votre dépôt créé, récupérez l’URL distante :
Retournez maintenant à votre projet local et ouvrez la ligne de commande. Pour pousser le code sur GitHub, vous devez d’abord initialiser un dépôt Git local en procédant comme suit :
$ git init
Ensuite, VCS tous les fichiers et créer un nouveau commit :
$ git add .
$ git commit -m "init"
Enfin, il faut introduire le code dans la télécommande :
$ git push origin master
Voilà, c’est fait ! Si vous actualisez la page du dépôt GitHub, vous devriez voir que tous les fichiers ont été poussés avec succès vers le dépôt Git distant.
Déployer l’application
Pour déployer une application sur Back4app Containers, vous devez d’abord vous connecter (ou vous inscrire si vous n’avez pas encore de compte). Vous serez ensuite redirigé vers la page du tableau de bord de l’application lorsque vous vous connecterez.
Utilisez ensuite le bouton “Créer une nouvelle application” pour lancer le processus de création de l’application :
Sélectionnez “Containers as a Service” puisque nous déployons une application conteneurisée :
Ensuite, connectez votre GitHub à votre compte Back4app et importez le dépôt que nous avons créé dans l’étape précédente.
Donnez à votre application un nom personnalisé et laissez tout le reste par défaut.
Pour créer une application, cliquez sur “Create App”. Back4app va automatiquement extraire le code source de GitHub et démarrer le processus de construction de l’image docker au fur et à mesure que vous cliquez dessus. Après quelques minutes, l’état de l’application passera à “Prêt”.
Une fois que c’est fait, utilisez le lien à gauche pour ouvrir la page dans votre navigateur.
C’est tout !
Conclusion
En conclusion, vous avez appris à connaître PHP, ses avantages, ses inconvénients et ses options de déploiement. Vous savez maintenant comment démarrer et déployer une application Laravel sur Back4app.
Les sujets abordés tout au long de ce tutoriel ont à peine effleuré la surface du framework Laravel. Vous pouvez toujours en apprendre davantage en consultant la documentation de Laravel.
Le code source est disponible sur le dépôt GitHub back4app-containers-php.
Prochaines étapes
- Examinez les concepts d’architecture de Laravel et l’ORM d’Eloquent.
- Créez une base de données MySQL gérée et connectez-y votre application Back4app Containers.
FAQ
Qu’est-ce que PHP ?
PHP est un langage de script gratuit et polyvalent très populaire. Il a été conçu pour le web, mais peut aussi être utilisé pour des scripts côté serveur, des commandes en ligne de commande et des applications de bureau. Actuellement, PHP alimente environ 80 % du web et est utilisé par de nombreux sites à fort trafic comme Facebook, Wikipedia, Slack, etc.
Quels sont les avantages de PHP ?
– Bonnes performances
– Multi-plateforme
– Prise en charge des bases de données
– Écosystème dynamique
– Facile à apprendre
Quels sont les inconvénients de PHP ?
– Outils de débogage limités
– Typage faible
– Failles de sécurité
– Le PHP “vanilla” est dépassé
Comment déployer une application PHP ?
1. Codez votre application PHP.
2. Dockerisez votre application et testez-la localement.
3. Poussez le code source sur GitHub.
4. Créez un compte sur Back4app Containers.
5. Importez votre dépôt GitHub et cliquez sur “Déployer” !