Symfony est le choix préféré des développeurs PHP pour la création d'applications à petite et grande échelle. Avec chaque nouvelle version, Symfony évolue vers une meilleure boîte à outils pour les développeurs. Symfony permet des processus de développement d'applications rapides afin que les développeurs puissent créer des API à grande échelle, des plateformes de commerce électronique, des applications fintech et comptables, etc. De l'autre côté du spectre, les développeurs pourraient créer des sites Web simples à l'aide du moteur de template Twig.
Symfony 4 dispose d'un système de recettes intelligent et d'une structure de répertoires simplifiée qui ne surcharge pas les fichiers de code de votre projet. Symfony Flex est là pour installer des bibliothèques avec des noms d'alias et les enregistrer automatiquement dans les configurations du bundle. La nouvelle version introduit également un système de routage ultra-rapide utilisant des recherches de cartes de hachage pour les routes statiques et des expressions régulières combinées pour les routes avec des espaces réservés.
Compte tenu de la popularité de Symfony 4, j'ai décidé de configurer et d'installer cette version sur une machine Debian 9. Dans cet article, je vais vous montrer comment configurer une pile Symfony complète pour exécuter des applications Symfony. Le processus comprend des étapes concernant les autorisations, les racines Web et le serveur Web.
Créer un serveur DigitalOcean
Aujourd'hui, vous pouvez trouver un certain nombre de fournisseurs d'hébergement cloud sur le marché et le choix dépend vraiment de votre combinaison d'exigences de performances et de budget.
Pour les besoins de cet article, j'opterai pour DigitalOcean, un fournisseur d'hébergement cloud très apprécié des développeurs. Vous pouvez facilement créer un compte DigitalOcean et choisir votre distribution, la taille et le centre de données de votre serveur, comme indiqué dans le GIF suivant :
Maintenant, la prochaine étape consiste à lancer le terminal SSH. Si vous êtes un utilisateur Linux ou Mac, vous l'obtenez par défaut sur votre machine. Si vous êtes un utilisateur Windows, vous devez télécharger PuTTY. La bonne nouvelle est que Windows 10 est livré avec son propre PowerShell que vous pouvez utiliser aux fins de cet article.
Après avoir lancé le droplet, vous avez besoin des trois éléments suivants pour vous connecter au terminal SSH :
-
Adresse IP du serveur
-
Nom d'utilisateur
-
Mot de passe ou clé SSH
Depuis que j'utilise Windows, j'utiliserai PuTTY pour toutes les activités liées à SSH. Notez les éléments ci-dessus à partir du droplet et connectez-vous au terminal SSH. Dans PuTTY, lorsque vous entrez l'adresse IP et appuyez sur Entrée, le serveur vous demandera de mettre en cache la clé. Coup simple Oui.
Ensuite, entrez les informations d'identification et vous vous connecterez à votre droplet DigitalOcean avec un accès root.
La pile Symfony LAMP
Symfony s'appuie sur une pile LAMP typique comprenant PHP, Apache/Nginx, MySQL et une distribution Linux. Vous devez d'abord installer tous ces composants logiciels, puis configurer Apache/Nginx selon les exigences de Symfony. Heureusement, tous les composants pour créer la pile Symfony sont open source, il vous suffit donc d'exécuter les commandes et de les installer via SSH sur votre serveur.
Symfony a également défini la configuration du serveur Web pour Nginx et Apache dans leur documentation. Je couvrirai donc les principaux paramètres ici et vous pourrez lire le reste ici.
Mettre à jour les packages sur Debian
La première action de la liste consiste à mettre à jour les packages sur la machine Debian.
Commencez par vérifier la version de Debian sur le serveur en exécutant la commande suivante :
cat /etc/debian_version
J'ai donc Debian 9.4 sur mon serveur DigitalOcean.
Ensuite, exécutez les commandes suivantes pour mettre à jour les packages via SSH :
apt-get update
apt-get upgrade
apt-get dist-upgrade
Une fois que tout a été mis à jour, je suis prêt à installer le serveur Web.
Installer Apache2 pour Symfony 4
Accédez au terminal SSH et installez d'abord Apache2 avec la commande suivante :
apt-get install apache2 -y
Une fois la commande terminée, accédez à l'IP de votre serveur et vous verrez la page d'accueil d'Apache :
Suivant. allez dans la structure des sous-répertoires avec la commande :
cd /etc/apache2/sites-available/
Activez d'abord rapidement l'option mod_rewrite avec cette commande :
a2enmod rewrite
Ouvrez maintenant 000-default.conf fichier et ajoutez ce qui suit pour configurer l'hébergeur Web dans Apache 2 :
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/html/symfony4/public
<Directory /var/www/html/symfony4/public>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from All
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/html>
# Options FollowSymlinks
# </Directory>
ErrorLog /var/log/apache2/project_error.log
CustomLog /var/log/apache2/projec_access.log combined
</VirtualHost>
Maintenant, Apache2 est configuré pour exécuter le projet depuis /var/www/html dossier. Mais vous pouvez également étendre la configuration avec quelques options supplémentaires qui conviennent le mieux à Symfony 4. Voici un exemple :
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/html/symfony4/public
<Directory /var/www/html/symfony4/public>
AllowOverride None
Require all granted
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/crvfakeexample.com>
# Options FollowSymlinks
# </Directory>
# optionally disable the RewriteEngine for the asset directories
# which will allow apache to simply reply with a 404 when files are
# not found instead of passing the request into the full symfony stack
<Directory /var/www/crvfakeexample.com/public/bundles>
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
</Directory>
ErrorLog /var/log/apache2/crvfakeexample.com_error.log
CustomLog /var/log/apache2/crvfakeexample.com_access.log combined
# optionally set the value of the environment variables used in the application
#SetEnv APP_ENV prod
#SetEnv APP_SECRET <app-secret-id>
#SetEnv DATABASE_URL "mysql://db_user:[email protected]:3306/db_name"
</VirtualHost>
Vous pouvez également utiliser les dernières options Apache telles que Exiger que tous soient accordés et configurez les variables d'environnement dans les paramètres ci-dessus. Rechargez maintenant le serveur Apache avec la commande suivante pour que les nouveaux paramètres prennent effet :
service apache2 reload
Installer Nginx pour Symfony 4
Si vous ne souhaitez pas utiliser Apache, Nginx est une excellente option pour un serveur Web. Le processus est assez similaire.
Commencez par installer Nginx avec la commande suivante :
apt-get update
apt-get install nginx -y
Maintenant, lancez cd /etc/nginx/conf.d et configurez le fichier comme :
server {
server_name domain.tld www.domain.tld;
root /var/www/html/symfony4/public;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php7.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
# optionally set the value of the environment variables used in the application
# fastcgi_param APP_ENV prod;
# fastcgi_param APP_SECRET <app-secret-id>;
# fastcgi_param DATABASE_URL "mysql://db_user:[email protected]:3306/db_name";
# When you are using symlinks to link the document root to the
# current version of your application, you should pass the real
# application path instead of the path to the symlink to PHP
# FPM.
# Otherwise, PHP's OPcache may not properly detect changes to
# your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
# for more information).
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
# Prevents URIs that include the front controller. This will 404:
# http://domain.tld/index.php/some-path
# Remove the internal directive to allow URIs like this
internal;
}
# return 404 for all other php files not matching the front controller
# this prevents access to other php files you don't want to be accessible.
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/project_error.log;
access_log /var/log/nginx/project_access.log;
}
Rechargez maintenant le serveur en exécutant la commande suivante :
service nginx reload
Installer PHP 7.2 pour Symfony 4
Une dépendance importante de Symfony 4 est PHP 7.1.3 (ou supérieur) sur le serveur. Pour installer la version requise, je dois mettre à jour/installer quelques packages sur Debian 9 pour installer PHP 7.2. Accédez au terminal SSH (et assurez-vous que vous êtes à la racine) et exécutez les commandes suivantes :
sudo apt install ca-certificates apt-transport-https
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
sudo echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
À l'étape suivante, exécutez ces commandes :
sudo apt update
sudo apt install php7.2
Une fois l'installation réussie, vérifiez la version de PHP :
php -v
Je dois également installer quelques bibliothèques supplémentaires pour m'assurer que PHP 7.2 fonctionne correctement sur le serveur. Exécutez la commande suivante pour installer les bibliothèques requises :
sudo apt install php7.2-cli php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-xml libapache2-mod-php7.2
Les bibliothèques seront installées et PHP 7.2 est correctement configuré pour Symfony 4.
Installer MySQL pour configurer les bases de données
Installons rapidement la base de données MySQL.
Commencez par exécuter la commande suivante :
apt-get install mysql-server
Le processus s'arrêtera pour demander votre permission. Tapez (y ) et appuyez sur Entrée. Dans la fenêtre suivante, définissez le mot de passe pour l'utilisateur racine MySQL.
Le processus se termine en quelques minutes.
Ensuite, je vais configurer MySQL en fonction des exigences de la pile LAMP. Pour cela, saisissez la commande suivante :
mysql_secure_installation
À ce stade, la configuration du serveur est terminée conformément aux exigences de Symfony 4. Je vais maintenant me concentrer sur l'installation du framework lui-même.
Installer Composer sur Debian 9
L'installation globale de Composer est une bonne idée car de cette façon, chaque utilisateur peut facilement l'utiliser. Donc, je vais l'installer dans /user/local/bin répertoire.
Commençons par copier le programme d'installation dans /tmp répertoire :
php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
Ensuite, exécutez la commande suivante pour exécuter le fichier Composer et l'installer globalement :
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Maintenant que Composer est installé, je vais procéder à l'installation proprement dite de Symfony 4.
Enfin, installez Symfony 4 sur le serveur Debian 9
À ce stade, j'ai configuré le serveur Apache pour la racine Web en donnant l'URL :/var/www/html/symfony4/public.
Allez dans le html dossier et exécutez la commande Composer suivante pour installer Symfony 4 :
composer create-project symfony/skeleton symfony4
Le framework sera installé en quelques secondes. Parce que Symfony 4 est très optimisé avec une petite base de code et des dépendances, il ne demandera aucune information d'identification lors de l'installation. Une fois cela fait, vous devez configurer la base de données.
Une fois le processus terminé, accédez à l'IP de votre serveur et vous verrez la page d'accueil :
Ensuite, j'ajouterai les informations d'identification de la base de données à .env fichier du Symfony.
###> doctrine/doctrine-bundle ###
APP_ENV=dev
APP_DEBUG=1
APP_SECRET=bd4d4fxxxx035a97fxxxed13f18646f
# customize this line!
DATABASE_URL="mysql://db_user:[email protected]:3306/db_name"
###< doctrine/doctrine-bundle ###
Derniers mots
Symfony 4 a été largement adopté et apprécié par les développeurs PHP et est déjà téléchargé par millions. Vous pouvez également utiliser les versions standard de Symfony 3.x (il vous suffit de mettre à jour la commande pour installer la version spécifique) :
Pour Symfony 3.0 :
composer create-project symfony/framework-standard-edition your_project_name "3.0.*"
Pour Symfony 3.1 :
composer create-project symfony/framework-standard-edition your_project_name "3.1.*"
Si vous avez besoin d'aide pour installer et configurer Symfony 4 sur une machine Debian 9, faites-le moi savoir dans les commentaires.