Comment déployer une application Symfony 4 en production avec LEMP sur Ubuntu 18.04

L’auteur a choisi https://www.brightfunds.org/organizations/software-in-the-public- interest-inc[Software in the Public Interest Inc] à recevoir un don dans le cadre du https://do.co/ w4do-cta [programme d’écriture pour DOnations] .

introduction

https://symfony.com [Symfony] est un framework PHP open-source avec une structure élégante et la réputation d’être un framework approprié pour lancer n’importe quel projet, quelle que soit sa taille. En tant qu’ensemble de composants réutilisables, sa flexibilité, son architecture et ses performances élevées en font un choix de premier ordre pour la création d’une application d’entreprise extrêmement complexe.

Dans ce didacticiel, vous allez déployer une application standard Symfony 4 existante en production avec une pile LEMP (Nginx, MySQL et PHP) sur Ubuntu 18.04, ce qui vous aidera à démarrer la configuration du serveur et de la structure de la structure. Nginx est un serveur HTTP populaire Open Source haute performance offrant des fonctionnalités supplémentaires, notamment la prise en charge du proxy inverse. Il jouit d’une bonne réputation et héberge certains des sites les plus importants et les plus achalandés d’Internet. Si vous choisissez de déployer votre propre application Symfony à la place, vous devrez peut-être implémenter des étapes supplémentaires en fonction de la structure existante de votre application.

Conditions préalables

Pour compléter ce tutoriel, vous aurez besoin de:

Étape 1 - Création d’un utilisateur et d’une base de données pour l’application

En suivant les instructions des conditions préalables, vous disposez désormais de toutes les dépendances de serveur de base requises pour l’installation de l’application. Comme chaque application Web dynamique nécessite une base de données, vous allez créer un utilisateur et configurer correctement une base de données pour l’application dans cette section.

Pour créer une base de données MySQL pour notre application et un utilisateur qui lui est associé, vous devez accéder au client MySQL à l’aide du compte racine MySQL:

mysql -u root -p

Entrez le mot de passe approprié, qui devrait être le même que celui utilisé lors de l’exécution de + mysql_secure_installation +.

Ensuite, créez la base de données d’application avec:

CREATE DATABASE blog;

Vous verrez la sortie suivante dans la console:

OutputQuery OK, 1 row affected (0.00 sec)

Vous avez créé avec succès votre base de données d’applications. Vous pouvez maintenant créer un utilisateur MySQL et lui donner accès à la base de données nouvellement créée.

Exécutez la commande suivante pour créer un utilisateur et un mot de passe MySQL. Vous pouvez modifier le nom d’utilisateur et le mot de passe pour quelque chose de plus sécurisé si vous le souhaitez:

CREATE USER  @'localhost' IDENTIFIED BY ;

Vous verrez la sortie suivante:

OutputQuery OK, 0 rows affected (0.00 sec)

Actuellement, l’utilisateur * blog-admin * ne dispose pas des droits appropriés sur la base de données de l’application. En fait, même si * blog-admin * tente de se connecter avec leur mot de passe, ils ne pourront pas accéder au shell MySQL.

Un utilisateur a besoin de l’autorisation nécessaire avant d’accéder à une action spécifique sur une base de données ou de la réaliser. Utilisez la commande suivante pour autoriser un accès complet à la base de données * blog * pour l’utilisateur * blog-admin *:

GRANT ALL PRIVILEGES ON blog.* TO @'localhost';

Vous verrez la sortie suivante:

OutputQuery OK, 0 rows affected (0.00 sec)
  • Blog-admin * a maintenant tous les privilèges sur toutes les tables de la base de données * blog *. Pour recharger les tables d’attribution et appliquer les modifications, vous devez effectuer une opération de privilège de vidage à l’aide de l’instruction flush:

FLUSH PRIVILEGES;

Vous verrez la sortie suivante:

OutputQuery OK, 0 rows affected (0.00 sec)

Vous avez terminé de créer un nouvel utilisateur et d’accorder des privilèges. Pour vérifier si vous êtes sur la bonne voie, quittez le client MySQL:

quit;

Et connectez-vous à nouveau, en utilisant les informations d’identification de l’utilisateur MySQL que vous venez de créer et entrez le mot de passe lorsque vous y êtes invité:

mysql -u  -p

Vérifiez que l’utilisateur peut accéder à la base de données avec:

SHOW DATABASES;

Vous verrez la table + blog + dans la sortie:

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               |
+--------------------+
2 rows in set (0.00 sec)

Enfin, quittez le client MySQL:

quit;

Vous avez créé avec succès une base de données, un utilisateur de l’application de démonstration, et accordé à l’utilisateur nouvellement créé les privilèges requis pour accéder à la base de données. Vous êtes maintenant prêt à configurer l’application de démonstration.

Étape 2 - Configuration de l’application de démonstration

Pour que ce tutoriel reste simple, vous allez déployer une application de blog construite avec Symfony. Cette application permettra à un utilisateur authentifié de créer un article de blog et de le stocker dans la base de données. En outre, l’utilisateur de l’application peut afficher tous les messages et les détails associés à un auteur.

Le code source de l’application de blog que vous allez déployer dans ce didacticiel est on GitHub. Vous utiliserez Git pour extraire le code source de l’application à partir de GitHub et l’enregistrer dans un nouveau répertoire.

Commencez par créer un répertoire qui servira de répertoire racine pour votre application. Donc, lancez la commande suivante depuis la console pour créer un nouveau répertoire nommé + symfony-blog +:

sudo mkdir -p /var/www/symfony-blog

Pour pouvoir utiliser les fichiers de projet à l’aide d’un compte utilisateur non root, vous devez modifier le propriétaire et le groupe du dossier en exécutant:

sudo chown : /var/www/symfony-blog

Remplacez * sammy * par votre nom d’utilisateur sudo non root.

Maintenant, vous pouvez changer de répertoire et cloner l’application sur GitHub:

cd /var/www
git clone https://github.com/yemiwebby/symfony-blog.git symfony-blog

Vous verrez le résultat suivant:

OutputCloning into 'symfony-blog'...
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (122/122), done.
remote: Total 180 (delta 57), reused 164 (delta 41), pack-reused 0
Receiving objects: 100% (180/180), 167.01 KiB | 11.13 MiB/s, done.
Resolving deltas: 100% (57/57), done.

L’application de démonstration est maintenant définie. Dans l’étape suivante, vous allez configurer les variables d’environnement et installer les dépendances requises pour le projet.

Étape 3 - Configuration de vos variables d’environnement pour l’application

Pour configurer complètement l’application, vous devez installer les dépendances du projet et configurer correctement les paramètres de l’application.

Par défaut, l’application Symfony s’exécute en mode développement, ce qui lui fournit un journal très détaillé à des fins de débogage. Cela ne s’applique pas à ce que vous faites dans ce tutoriel et ne constitue pas une bonne pratique pour un environnement de production, car cela peut ralentir les choses et créer de très gros fichiers journaux.

Symfony doit savoir que vous exécutez l’application dans un environnement de production. Vous pouvez le configurer en créant un fichier + .env + contenant des déclarations de variables ou en créant directement des variables d’environnement. Étant donné que vous pouvez également utiliser le fichier + .env + pour configurer les informations d’identification de votre base de données pour cette application, il est plus logique de le faire. Changez votre répertoire de travail dans le projet cloné et créez le fichier + .env + avec:

cd symfony-blog
sudo nano .env

Ajoutez les lignes suivantes au fichier pour configurer l’environnement d’application de production:

env
APP_ENV=prod
APP_DEBUG=0

+ APP_ENV + est une variable d’environnement qui spécifie que l’application est en production, tandis que + APP_DEBUG + est une variable d’environnement qui spécifie si l’application doit être exécutée en mode débogage ou non. Vous l’avez défini sur false pour le moment.

Enregistrez le fichier et quittez l’éditeur.

Ensuite, installez une extension PHP que les applications Symfony utilisent pour gérer XML:

sudo apt install php7.2-xml

Ensuite, vous devez installer les dépendances du projet, exécutez + composer install:

cd /var/www/symfony-blog
composer install

Vous avez correctement configuré les variables d’environnement et installé les dépendances requises pour le projet. Ensuite, vous allez configurer les informations d’identification de la base de données.

Étape 4 - Configuration des informations d’identification de la base de données

Pour récupérer les données de la base de données de l’application que vous avez créée précédemment, vous devez configurer et configurer les informations d’identification requises de la base de données à partir de l’application Symfony.

Ouvrez à nouveau le fichier + .env +:

sudo nano .env

Ajoutez le contenu suivant au fichier, ce qui vous permettra de vous connecter facilement et d’interagir correctement avec la base de données. Vous pouvez l’ajouter juste après la ligne + APP_DEBUG = 0 + dans le fichier + .env +:

env
...
DATABASE_URL=mysql://:@localhost:3306/blog

Le framework Symfony utilise une bibliothèque tierce appelée Doctrine pour communiquer avec les bases de données. Doctrine vous fournit des outils utiles pour rendre les interactions avec les bases de données faciles et flexibles.

Vous pouvez maintenant utiliser Doctrine pour mettre à jour votre base de données avec les tables de l’application Github clonée. Exécutez cette commande pour le faire:

php bin/console doctrine:schema:update --force

Vous verrez le résultat suivant:

OutputUpdating database schema...
   4 queries were executed
[OK] Database schema updated successfully!

Après avoir configuré les informations d’identification requises et mis à jour le schéma de base de données, vous pouvez désormais interagir facilement avec la base de données. Afin de démarrer l’application avec certaines données, vous allez charger un ensemble de données factices dans la base de données dans la section suivante.

Étape 5 - Remplir votre base de données en utilisant Doctrine-Fixtures

Pour le moment, les tables nouvellement créées sont vides. Vous la remplirez à l’aide de doctrine-fixtures. L’utilisation de Doctrine-Fixtures n’est pas une condition préalable aux applications Symfony, elle sert uniquement à fournir des données factices pour votre application.

Exécutez la commande suivante pour charger automatiquement les données de test contenant les détails d’un * auteur * et d’un exemple * post * dans la table de base de données créée pour le blog:

php bin/console doctrine:fixtures:load

Vous recevrez un avertissement concernant le nettoyage de la base de données. Vous pouvez aller de l’avant et tapez + Y +:

OutputCareful, database will be purged. Do you want to continue y/N ? y
 > purging database
 > loading App\DataFixtures\ORM\Fixtures

Dans la section suivante, vous allez effacer et réchauffer votre cache.

Étape 6 - Effacement et préchauffage de votre cache

Pour accélérer le chargement de votre application lorsque les utilisateurs font des demandes, il est recommandé de réchauffer le cache pendant le déploiement. Le préchauffage du cache génère des pages et les stocke pour des réponses plus rapides ultérieurement plutôt que de créer de nouvelles pages. Heureusement, Symfony a une commande pour effacer le cache qui déclenche également un échauffement. Exécutez la commande suivante à cette fin:

php bin/console cache:clear

Vous verrez la sortie suivante:

OutputClearing the cache for the prod environment with debug false
[OK] Cache for the "prod" environment (debug=false) was successfully cleared.

Vous allez conclure la mise en place dans un peu. Il ne reste plus qu’à configurer le serveur Web. Vous ferez cela dans la section suivante.

Étape 7 - Configuration du serveur Web et exécution de l’application

A présent, Nginx est installé pour servir vos pages et MySQL pour stocker et gérer vos données. Vous allez maintenant configurer le serveur Web en créant un nouveau bloc de serveur d’applications, au lieu de modifier le bloc par défaut.

Ouvrez un nouveau bloc serveur avec:

sudo nano /etc/nginx/sites-available/blog

Ajoutez le contenu suivant au nouveau fichier de configuration du bloc de serveur. Assurez-vous de remplacer le ++ dans le bloc serveur par votre adresse IP du serveur:

/ etc / nginx / sites-available / blog

server {
   listen 80;
   listen [::]:80;

   server_name blog ;
   root /var/www/symfony-blog/public;
   index index.php;
   client_max_body_size 100m;

   location / {
       try_files $uri $uri/ /index.php$is_args$args;
   }

   location ~ \.php {
       try_files $uri /index.php =404;
       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param SCRIPT_NAME $fastcgi_script_name;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_index index.php;
       include fastcgi_params;
     }

   location ~ /\.(?:ht|git|svn) {
       deny all;
   }
}

Tout d’abord, nous avons spécifié les directives + listen + pour Nginx, qui est par défaut sur le port + 80 +, puis nous avons défini le nom du serveur pour qu’il corresponde aux demandes d’adresse IP du serveur. Ensuite, nous avons utilisé les directives + racine + pour spécifier la racine du document pour le projet. L’application + symfony-blog + est stockée dans + / var / www / symfony-blog +, mais pour respecter les meilleures pratiques, nous avons défini la racine Web sur + / var / www / symfony-blog / public + comme seul le sous-répertoire + / public + devrait être exposé à Internet. Enfin, nous avons configuré la directive location pour gérer le traitement PHP.

Après avoir ajouté le contenu, enregistrez le fichier et quittez l’éditeur.

Pour activer le bloc de serveur nouvellement créé, nous devons créer un lien symbolique à partir du nouveau fichier de configuration de bloc de serveur situé dans le répertoire + / etc / nginx / sites-available + dans le répertoire + / etc / nginx / sites-enabled + par en utilisant la commande suivante:

sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/

Recherchez des erreurs de syntaxe dans le nouveau fichier de configuration en exécutant:

sudo nginx -t

Cette commande affichera les erreurs éventuelles sur la console. Une fois qu’il n’y a plus d’erreur, lancez cette commande pour recharger Nginx:

sudo systemctl reload nginx

Vous venez de terminer la dernière étape requise pour déployer avec succès l’application Symfony 4. Vous avez configuré le serveur Web en créant un bloc de serveur et en définissant correctement la racine Web afin de rendre l’application Web accessible.

Enfin, vous pouvez maintenant exécuter et tester l’application. Visitez + http: // + dans votre navigateur préféré:

L’image suivante est la capture d’écran de l’application de blog Symfony que vous devriez voir à l’adresse IP de votre serveur:

image: https: //assets.digitalocean.com/articles/symfony4-1804/EQQNuIv.png [Autre capture d’écran de l’application de blog Symfony]

Conclusion

Symfony est un framework PHP riche en fonctionnalités avec une architecture qui rend le développement Web amusant pour le développeur qui construit un logiciel l’utilisant. Symfony est une structure de développement Web riche en fonctionnalités qui fournit aux développeurs des outils puissants pour créer des applications Web. C’est souvent considéré comme un bon choix pour les applications d’entreprise en raison de sa flexibilité. Les étapes pour déployer une application Symfony typique varient en fonction de la configuration, de la complexité et des exigences de l’application.

Dans ce tutoriel, vous avez déployé manuellement une application Symfony 4 en production sur un serveur Ubuntu 18.04 exécutant LEMP. Vous pouvez maintenant appliquer ces connaissances au déploiement de vos propres applications Symfony.