One place for hosting & domains

      Deploy a LAMP Stack with One-Click Apps


      Updated by Linode

      Contributed by

      Linode

      LAMP Stack One-Click App

      A LAMP (Linux, Apache, MySQL, PHP) stack is a popular, free, and open-source web software bundle used for hosting websites on Linux. This software environment is a foundation for popular PHP application frameworks like WordPress, Drupal, and Laravel. After you deploy your LAMP One-Click App, you can upload your existing PHP application code to it or use a PHP framework to write a new application on your Linode.

      Deploy a LAMP Stack with One-Click Apps

      One-Click Apps allow you to easily deploy software on a Linode using the Linode Cloud Manager. To access Linode’s One-Click Apps:

      1. Log in to your Linode Cloud Manager account.

      2. From the Linode dashboard, click on the Create button in the top left-hand side of the screen and select Linode from the dropdown menu.

      3. The Linode creation page will appear. Select the One-Click tab.

      4. Under the Select App section, select the app you would like to deploy:

        Select a One-Click App to deploy

      5. Once you have selected the app, proceed to the app’s Options section and provide values for the required fields.

      The LAMP Stack Options section of this guide provides details on all available configuration options for this app.

      LAMP Stack Options

      Field Description
      MySQL Root Password The root password for your LAMP stack’s MySQL database. This is not the same as your Linode’s root password. Required.

      Linode Options

      After providing the app-specific options, enter configuration values for your Linode server:

      Configuration Description
      Select an Image Debian 9 is currently the only image supported by the LAMP One-Click App, and it is pre-selected on the Linode creation page. Required.
      Region The region where you would like your Linode to reside. In general, it’s best to choose a location that’s closest to you. For more information on choosing a DC, review the How to Choose a Data Center guide. You can also generate MTR reports for a deeper look at the network routes between you and each of our data centers. Required.
      Linode Plan Your Linode’s hardware resources. The Linode plan you deploy your LAMP stack on should account for the estimated workload. If you are standing up a simple web page, you can use a Nanode or 2GB Linode. If you are standing up a larger or more robust web app, then consider a plan with higher RAM and CPU allocations. If you decide that you need more or fewer hardware resources after you deploy your app, you can always resize your Linode to a different plan. Required.
      Linode Label The name for your Linode, which must be unique between all of the Linodes on your account. This name will be how you identify your server in the Cloud Manager’s Dashboard. Required.
      Root Password The primary administrative password for your Linode instance. This password must be provided when you log in to your Linode via SSH. It must be at least 6 characters long and contain characters from two of the following categories: lowercase and uppercase case letters, numbers, and punctuation characters. Your root password can be used to perform any action on your server, so make it long, complex, and unique. Required.

      When you’ve provided all required Linode Options, click on the Create button. Your LAMP Stack app will complete installation anywhere between 2-3 minutes after your Linode has finished provisioning.

      Getting Started After Deployment

      After your LAMP stack has finished deploying, you can:

      • Connect to your Linode via SSH. You will need your Linode’s root password to proceed. Note that your Linode’s web root will be located in the /var/www/html directory.

      • Navigate to the public IP address of your Linode in a browser. You will see the PHP settings that are active for your Linode.

      • Consult the following guides to learn more about working with the various components of the LAMP stack:

      • Upload files to your web root directory with an SFTP application like FileZilla. Use the same root credentials that you would use for SSH.

      • Assign a domain name to your Linode’s IP address. Review the DNS Manager guide for instructions on setting up your DNS records in the Cloud Manager, and read through DNS Records: An Introduction for general information about how DNS works.

      Software Included

      The LAMP Stack One-Click App will install the following software on your Linode:

      Software Description
      Apache HTTP Server Web server that can be used to serve your site or web application.
      MySQL Server Relational database.
      PHP 7 General purpose programming language.
      UFW (Uncomplicated Firewall) Firewall utility. Ports 22/tcp, 80/tcp, and 443/tcp for IPv4 and IPv6 will allow outgoing and incoming traffic.

      More Information

      You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.

      Find answers, ask questions, and help others.

      This guide is published under a CC BY-ND 4.0 license.



      Source link

      Comment installer la pile Linux, Apache, MySQL, PHP (LAMP) sur un serveur Ubuntu 18.04


      Introduction

      Une pile “LAMP” est un groupe de logiciels libres qui sont généralement installés ensemble afin de permettre à un serveur d’héberger des sites internet dynamiques ainsi que des applications web. Le terme constitue généralement un acronyme qui représente le système d’exploitation Linux, le serveur web Apache. Les données du site sont hébergées sur une base de données MySQL, puis le contenu dynamique est traité par PHP.

      Dans ce guide, nous installerons une pile LAMP sur un serveur Ubuntu 18.04.

      Préalable

      Afin de compléter ce tutoriel, vous aurez besoin d’un serveur Ubuntu 18.04, un compte d’utilisateur non-root «sudo» activé, ainsi qu’un pare-feu de base. Cela peut être configuré en se référant à notre guide de configuration initial pour Ubuntu 18.04.

      Étape 1 — Installer Apache et mettre à jour le pare-feu.

      Le serveur Apache est parmi les serveurs web les plus populaires au monde. Il est bien documenté et a été utilisé abondamment pour la majeure partie de l’histoire de l’internet, ce qui en fait un bon choix par défaut pour héberger un site internet.

      Installer Apache à l’aide du gestionnaire de paquets d’Ubuntu, apt:

      • sudo apt update
      • sudo apt install apache2

      Puisqu’il s’agit d’une commande sudo, ces opérations sont exécutées avec les privilèges root. On vous demandera votre mot de passe d’utilisateur régulier afin de connaître vos intentions.

      Dès que vous aurez entré votre mot de passe, apt vous dira quels paquets il prévoit installer et combien d’espace il prendra sur votre disque dur. Entrez la touche Y et appuyer sur ENTER afin de continuer, et l’installation poursuivra.

      Ajuster votre pare-feu afin d’autoriser le trafic web.

      Ensuite, en présumant que vous avez suivi les instructions de configuration initiale du serveur et autorisé le pare-feu UFW, assurez-vous que votre pare-feu autorise le trafic HTTP et HTTPS. Vous pouvez vérifier que UFW possède un profil d’application pour Apache de la manière suivante :

      SortieOutput

      Available applications: Apache Apache Full Apache Secure OpenSSH

      Si vous regardez sur le profil Apache Full, il devrait y être indiqué qu’il permet le trafic aux ports 80 et 443 :

      • sudo ufw app info "Apache Full"

      SortieOutput

      Profile: Apache Full Title: Web Server (HTTP,HTTPS) Description: Apache v2 is the next generation of the omnipresent Apache web server. Ports: 80,443/tcp

      Autoriser le trafic HTTP et HTTPS entrant pour ce profil :

      • sudo ufw allow in "Apache Full"

      Vous pouvez immédiatement effectuer une vérification afin de valider que tout se soit déroulé comme prévu en visitant l’adresse IP de votre serveur public sur votre navigateur web (voir la note sous la rubrique suivante afin de voir quel est votre adresse IP, si vous ne disposez pas déjà de cette information) :

      http://your_server_ip
      

      Vous allez voir la page web par défaut du serveur Ubuntu 18.04 Apache qui s’affiche à titre d’information et à des fins d’essai. La page devrait ressembler à ceci :

      Ubuntu 18.04 Apache default

      Si vous voyez cette page, cela veut dire que votre serveur web est maintenant bien installé et qu’il est accessible à travers votre pare-feu.

      Si vous ne connaissez pas l’adresse IP publique de votre serveur, il existe différentes façons de la trouver. Normalement, il s’agit de l’adresse que vous utilisez afin de vous connecter à votre serveur via SSH.

      Il y a plusieurs façons d’effectuer cela à partir de la ligne de commande. D’abord, vous pouvez utiliser les outils iproute2 afin d’obtenir votre adresse IP en écrivant ceci :

      • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's//.*$//'

      Vous devriez voir apparaître deux ou trois lignes de résultats. Ce sont tous des adresses correctes, par contre votre ordinateur ne sera peut-être qu’en mesure d’utiliser une de celles-ci, alors libre à vous d’essayer chacune d’entre elles.

      Une autre méthode consiste à utiliser l’outil curl pour contacter un correspondant externe afin qu’il vous informe comment « il » perçoit votre serveur. Cela s’effectue en demandant à un serveur spécifique quelle est votre adresse IP :

      • sudo apt install curl
      • curl http://icanhazip.com

      Indépendamment de la méthode que vous choisissez pour obtenir votre adresse IP, inscrivez-la sur la barre d’adresse de votre navigateur afin de voir la page par défaut d’Apache.

      Étape 2 — Installer MySQL

      Maintenant que votre serveur web est opérationnel, il est temps d’installer MySQL. MySQL est un système de gestion de base de données. Il sert essentiellement à organiser et donner l’accès aux bases de données au sein desquelles votre site pourra emmagasiner de l’information.

      Encore une fois, utiliser apt pour obtenir et installer ce logiciel.

      • sudo apt install mysql-server

      Note: Dans ce cas, vous n’avez pas besoin d’activer sudo apt update avant d’effectuer la commande. Cela est dû au fait que l’avez récemment activé dans les commandes ci-dessus pour installer Apache. Le paquet d’index sur votre ordinateur devrait déjà être à jour.

      Cette commande affichera également une liste des paquets qui seront installés, de même que l’espace qu’ils occuperont sur votre disque dur. Entrez la touche Y pour continuer.

      Lorsque l’installation est complétée, exécuter un script de sécurité simple qui est préinstallé avec MySQL et qui permettra de supprimer des défaillances dangereuses et puis de verrouiller l’accès à votre système de base de données. Démarrer le script interactif en exécutant la commande :

      • sudo mysql_secure_installation

      On vous demandera si vous désirez configurer le VALIDATE PASSWORD PLUGIN.

      Note: Activer cette fonctionnalité demeure une question de jugement. Lorsqu’activés, les mots de passe qui ne correspondent pas au critère spécifique seront refusés par MySQL avec un message d’erreur. Ceci engendrera des problèmes si vous utilisez un mot de passe faible conjointement à l’application qui configure automatiquement les identifiants d’utilisateurs MySQL, tels que les paquets d’Ubuntu pour phpMyAdmin. Il est sécuritaire de laisser la validation désactivée, mais vous devriez toujours utiliser un mot de passe robuste et unique pour les authentifications de base de données.

      Répondre Y pour oui, ou n’importe quelle autre commande pour continuer sans l’activer.

      VALIDATE PASSWORD PLUGIN peut être utilisé pour tester les mots de passe
      et améliorer la sécurité. Le système vérifie la sécurité du mot de passe
      et permet aux utilisateurs de définir uniquement les mots de passe qui sont
      assez bien sécurisés en demandant : Voulez-vous configurer le plug-in  - VALIDATE PASSWORD?
      Press y|Y for Yes, any other key for No:
      

      Si vous répondez “oui”, on vous demandera de choisir un niveau de validation de mot de passe. Gardez à l’esprit que si vous choisissez 2, pour le niveau le plus élevé, vous recevrez des messages d’erreur lorsque vous tenterez de définir un mot de passe qui ne contient pas de chiffre, de majuscule et de minuscule, de caractères spéciaux, ou qui s’inspire de mots communs du dictionnaire.

      Il existe trois niveaux de politique de validation du mot de passe:
      
      LOW    Length >= 8
      MEDIUM Length >= 8, numeric, mixed case, and special characters
      STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
      
      Veuillez saisir 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
      

      Indépendamment de votre décision de configurer ou non le VALIDATE PASSWORD PLUGIN, votre serveur vous demandera de choisir et de confirmer un mot de passe pour l’utilisateur root MySQL. Il s’agit d’un compte administratif au sein de MySQL qui possède des privilèges accrus. Voyez-le comme étant similaire au compte root pour le serveur lui-même (bien que celui que vous êtes en train de configurer est un compte spécifique au sein de MySQL). Assurez-vous que vous de détenir un mot de passe robuste, unique, et de ne pas laisser l’espace vide.

      Si vous activez la validation du mot de passe, on vous indiquera la robustesse du mot de passe root que vous venez d’inscrire et votre serveur vous demandera si vous voulez le modifier. Si vous êtes satisfait de votre mot de passe, entrez N pour « non » au moment de faire le choix :

      Utiliser le mot de passe existant pour root.
      
      Force estimée du mot de passe : 100
      Changer le mot de passe pour root ? ((Press y|Y for Yes, any other key for No) : n
      

      Pour le reste des questions, entrez la touche Y et appuyer sur le bouton ENTER au moment de faire le choix. Cela supprimera certains utilisateurs anonymes ainsi que la base de données d’essai, désactivera les identifications root à distance et chargera les nouvelles règles afin que MySQL applique automatiquement les changements que vous venez d’apporter.

      Veuillez noter que pour les systèmes Ubuntu fonctionnant avec MySQL 5.7 (et les versions ultérieures), l’utilisateur root MySQL est configuré par défaut pour authentifier en utilisant le plugin auth_socket, plutôt qu’avec un mot de passe. Cela permet d’avoir une meilleure sécurité et ergonomie dans de nombreux cas, mais il peut également compliquer les choses lorsque vous devez autoriser l’ouverture d’un programme externe (ex : phpMyAdmin) afin d’accéder au serveur.

      Si vous préférez utiliser un mot de passe lorsque vous vous connectez au MySQL en tant que root, vous aurez besoin de changer le mode d’authentification de auth_socket à mysql_native_password. Pour y parvenir, ouvrez le prompt MySQL à partir de votre terminal :

      Ensuite, vérifier quel mode d’authentification chacun de vos comptes d’utilisateurs MySQL fait appel avec la commande suivante :

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      SortieOutput

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

      Dans cet exemple, vous pouvez voir que l’utilisateur root s’authentifie effectivement en utilisant le plugin auth_socket. Afin de configurer le compte root pour l’identification avec mot de passe, exécuter la commande ALTER USER ci-dessous. Assurez-vous de modifier password pour un mot de passe robuste de votre choix :

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

      Ensuite, exécuter FLUSH PRIVILEGES, qui envoie un message au serveur de renouveler les tableaux d’autorisations et de mettre en application vos nouvelles modifications :

      Vérifier encore les modes d’authentifications utilisées par chacun de vos utilisateurs afin de confirmer que le root ne s’authentifie plus en utilisant le plugin auth_socket :

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      SortieOutput

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

      Vous pouvez voir dans cet exemple que l’utilisateur root de MySQL s’authentifie actuellement en utilisant un mot de passe. Une fois que vous aurez confirmé cela sur votre propre serveur, vous pouvez sortir du shell MySQL :

      À ce stade, votre système de base de données est maintenant programmé et vous pouvez poursuivre avec l’installation PHP, le dernier composant de la pile LAMP.

      Étape 3 — Installer PHP

      PHP est le composant de votre configuration qui sert de code de traitement pour afficher le contenu dynamique. Il peut exécuter des scripts, se connecter à vos bases de données MySQL afin d’obtenir de l’information et acheminer le contenu traité vers votre serveur web pour affichage.

      Encore une fois, utiliser le système apt pour installer PHP. De plus, inclure des paquets d’assistance cette fois-ci afin de permettre au code PHP de s’exécuter sous le serveur Apache et communiquer avec votre base de données MySQL :

      • sudo apt install php libapache2-mod-php php-mysql

      Cela devrait permettre d’installer PHP sans problème. Nous le mettrons à l’essai dans un moment.

      Dans la plupart des cas, vous allez vouloir modifier la façon dont Apache dessert les fichiers lorsqu’un répertoire est demandé. Actuellement, si un utilisateur demande un répertoire du serveur, Apache recherchera d’abord pour un fichier nommé index.html. Nous voulons dire au serveur web de donner priorité aux fichiers PHP, ainsi il faut exiger à Apache de regarder pour un fichier index.php en premier.

      Afin d’effectuer cela, entrez cette commande pour ouvrir le fichier dir.conf dans un éditeur de texte avec des privilèges root :

      • sudo nano /etc/apache2/mods-enabled/dir.conf

      Cela va ressembler à cela :

      /etc/apache2/mods-enabled/dir.conf

      <IfModule mod_dir.c>
          DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
      </IfModule>
      

      Déplacer le fichier d’index PHP (surligner ci-dessous) à la première position après la spécification DirectoryIndex, de la manière suivante :

      /etc/apache2/mods-enabled/dir.conf

      <IfModule mod_dir.c>
          DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
      </IfModule>
      

      Lorsque vous avez terminé, sauvegarder et fermer le fichier en appuyant sur CTRL+X. Confirmer la sauvegarde en entrant la touche Y et en appuyant sur ENTER afin de vérifier la localisation du fichier de sauvegarde.

      Ensuite, redémarrer le serveur web Apache afin que vos modifications prennent effet. Cela s’effectuera en inscrivant ceci :

      • sudo systemctl restart apache2

      Vous pouvez également vérifier le statut du service apache2 en utilisant la commande systemctl :

      • sudo systemctl status apache2

      Sample SortieOutput

      ● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start

      Afin d’améliorer le fonctionnement de PHP, vous avez l’option d’installer de modules supplémentaires. Pour voir les options disponibles de modules PHP et de bibliothèques, mener les résultats de apt search vers less, un récepteur qui vous laissera défiler à travers les résultats d’autres commandes :

      Utiliser les flèches afin de défiler de haut en bas, et appuyer sur Q pour quitter.

      Les résultats sont tous des composants optionnels que vous pouvez installer. Une courte description de chacun d’entre eux sera affichée :

      bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
        Tracks usage of TCP/IP and builds html files with graphs
      
      bluefish/bionic 2.2.10-1 amd64
        advanced Gtk+ text editor for web and software development
      
      cacti/bionic 1.1.38+ds1-1 all
        web interface for graphing of monitoring systems
      
      ganglia-webfrontend/bionic 3.6.1-3 all
        cluster monitoring toolkit - web front-end
      
      golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
        PHP-like Compression and Archive Extensions in Go
      
      haserl/bionic 0.9.35-2 amd64
        CGI scripting program for embedded environments
      
      kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
        transitional package for kdevelop-php
      
      kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
        transitional package for kdevelop-php-l10n
      …
      :
      

      Pour en savoir plus sur la fonctionnalité de chaque module, vous pouvez chercher sur internet pour plus d’informations à leur sujet. Une autre solution est de lire la longue description du paquet en tapant :

      Il y aura plusieurs résultats, incluant un champ intitulé Description qui présentera une explication plus détaillée de la fonctionnalité du module en question.

      Par exemple, afin de découvrir en quoi le module php-cli consiste, vous pouvez taper :

      En plus de la grande quantité d’autres informations, vous obtiendrez quelque chose qui ressemble à ceci :

      SortieOutput

      … Description: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . Ce paquet est un forfait de dépendances, qui dépend du défaut d'Ubuntu PHP version (currently 7.2). …

      Si, après votre recherche, vous décidez que vous voulez installer un paquet, vous pouvez le faire en utilisation la commande apt install, de la même manière que vous avez procédé pour l’autre logiciel.

      Si vous décidez que le php-cli est quelque chose dont vous avez besoin, vous pouvez taper cette commande :

      Si vous désirez installer plus d’un module, vous pouvez le faire en énumérant chacun d’entre eux, séparé d’un espace, suivant la commande apt install, comme ceci :

      • sudo apt install package1 package2 ...

      À ce stade, votre pile LAMP est installée et configurée. Cependant, avant de procéder à toute modification ou de déployer une application, il serait préférable de tester votre configuration PHP de manière proactive au cas où il y aurait un problème à traiter.

      Étape 4 — Tester le processus PHP sur votre serveur web

      Afin de tester si votre système est configuré correctement pour PHP, créer un script PHP de base appelé info.php. Afin qu’Apache puisse localiser ce fichier et le desservir correctement, il devra être sauvegardé dans un répertoire bien spécifique, qui se nomme le "web root".

      Sur Ubuntu 18.04, ce répertoire est situé au /var/www/html/. Créer le fichier à cet emplacement en exécutant :

      • sudo nano /var/www/html/info.php

      Cela ouvrira un fichier vierge. Ajouter le texte suivant, qui s’agit d’un code PHP valide, à l’intérieur du fichier :

      info.php

      <?php
      phpinfo();
      ?>
      

      Lorsque vous aurez terminé, sauvegarder et fermer le fichier.

      Vous pouvez maintenant tester si votre serveur web affiche correctement le contenu généré par ce script PHP. Pour le tester, visiter la page suivante dans votre navigateur web. Vous aurez encore besoin de votre adresse IP publique.

      L’adresse que vous devrez consulter est la suivante :

      http://your_server_ip/info.php
      

      La page que vous allez accéder devrait ressembler à ceci :
      Ubuntu 18.04 default PHP info

      Cette page présente de l’information de base sur votre serveur du point de vue de PHP. Elle est pratique pour le débogage et afin d’assurer que vos réglages sont appliqués correctement.

      Si vous voyez cette page sur votre navigateur, alors votre PHP fonctionne correctement.

      Vous devriez supprimer ce fichier après la mise en essai parce qu’il pourrait en fait donner de l’information sur votre serveur à des utilisateurs non autorisés. Pour ce faire, exécuter la commande suivante :

      • sudo rm /var/www/html/info.php

      Vous pourrez toujours recréer cette page si vous avez besoin d’accéder à cette information plus tard.

      Conclusion

      Maintenant que votre pile LAMP est installée, vous avez plusieurs choix quant à ce que vous pouvez faire par la suite. Essentiellement, vous venez d’installer une plateforme qui vous permettra d’installer la plupart des types de site internet et de logiciels web sur votre serveur.

      Dans l’immédiat, vous devriez vous assurer que les connexions à votre serveur web sont sécurisées, en les faisant fonctionner via HTTPS. L’option la plus simple dans ce cas est de utiliser Let's Encrypt afin de sécuriser votre site avec un certificat TLS/SSL gratuit.

      D’autres options populaires demeurent (notez que pour le moment ces tutoriels sont seulement disponibles en anglais) :



      Source link

      How To Set Up a CakePHP Application with LAMP on Ubuntu 18.04


      The author selected the Free and Open Source Fund to receive a donation as part of the Write for DOnations program.

      Introduction

      CakePHP is a popular and feature-rich PHP web framework. It solves many of the common problems in web development, such as interacting with a database, shielding against SQL injections, and generating view code. It adheres to the model-view-controller (MVC) pattern, which decouples various parts of the application, effectively allowing developers to work on different parts of the app in parallel. It also provides built-in security and authentication. To create a basic database app is a seamless process, which makes CakePHP useful for prototyping. However, you can use CakePHP to create fully developed web applications for deployment as well.

      In this tutorial, you will deploy an example CakePHP web application to a production environment. To achieve this, you’ll set up an example database and user, configure Apache, connect your app to the database, and turn off debug mode. You’ll also use CakePHP’s bake command to automatically generate article models.

      Prerequisites

      Before you begin this tutorial, you will need:

      • A server running Ubuntu 18.04 with root access and a sudo, non-root account, you can set this up by following this initial server setup guide.
      • A LAMP stack installed according to How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 18.04. At the time of this writing, PHP 7.2 is the latest version.
      • Composer (a PHP package manager) installed on your server. For a guide on how to do that, visit How To Install and Use Composer on Ubuntu 18.04. You only need to complete the first two steps from that tutorial.
      • Apache secured with Let’s Encrypt. To complete this prerequisite, you’ll first need to set up virtual hosts following Step 5 of How To Install Apache on Ubuntu 18.04. You can then follow How To Secure Apache with Let’s Encrypt on Ubuntu 18.04 to secure Apache with Let’s Encrypt. When asked, enable mandatory HTTPS redirection.
      • A fully registered domain name. This tutorial will use example.com throughout. You can purchase a domain name on Namecheap, get one for free on Freenom, or use the domain registrar of your choice.
      • Both of the following DNS records set up for your server. You can follow this introduction to DigitalOcean DNS for details on how to add them.
        • An A record with example.com pointing to your server’s public IP address.
        • An A record with www.example.com pointing to your server’s public IP address.

      Step 1 — Installing Dependencies

      To prepare for your application, you’ll begin by installing the PHP extensions that CakePHP needs.

      Start off by updating the package manager cache:

      CakePHP requires the mbstring, intl, and simplexml PHP extensions, which add support for multibyte strings, internationalization, and XML processing. You have installed mbstring as part of the Composer prerequisite tutorial. You can install the remaining libraries with one command:

      • sudo apt install php7.2-intl php7.2-xml -y

      Remember that the version numbers above (7.2) will change with new versions of PHP.

      You installed the required dependencies for CakePHP. You're now ready to configure your MySQL database for production use.

      Step 2 — Setting Up a MySQL Database

      Now, you'll create a MySQL database to store information about your blog's articles. You'll also create a database user that your application will use to access the database. You'll modify the database privileges to achieve this separation of control. As a result, bad actors won't be able to cause issues on the system even with database credentials, which is an important security precaution in a production environment.

      Launch your MySQL shell:

      When asked, enter the password you set up during the initial LAMP installation.

      Next, create a database:

      • CREATE DATABASE cakephp_blog;

      You will see output similar to:

      Output

      Query OK, 1 row affected (0.00 sec)

      Your CakePHP app will use this new database to read and store production data.

      Then, instruct MySQL to operate on the new cakephp_blog database:

      You will see output similar to:

      Output

      Database changed

      Now you'll create a table schema for your blog articles in the cakephp_blog database. Run the following command to set this up:

      • CREATE TABLE articles (
      • id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
      • title VARCHAR(50),
      • body TEXT,
      • created DATETIME DEFAULT NULL,
      • modified DATETIME DEFAULT NULL
      • );

      You've created a schema with five fields to describe blog articles:

      • id: is the unique identifier of an article, set up as a primary key.
      • title: is the title of an article, declared as a text field containing a maximum of 50 characters.
      • body: is the text of the article, declared as TEXT field.
      • created: is the date and time of a record's creation.
      • modified: is the date and time of a record's modification.

      The output will be similar to:

      Output

      Query OK, 0 rows affected (0.01 sec)

      You have created a table for storing articles in the cakephp_blog database. Next, populate it with example articles by running the following command:

      • INSERT INTO articles (title, body, created)
      • VALUES ('Sample title', 'This is the article body.', NOW());

      You've added an example article with some sample data for the title and body text.

      You will see the following output:

      Output

      Query OK, 0 rows affected (0.01 sec)

      In order to connect the CakePHP app to the database, you need to create a new database user and restrict its privileges:

      • GRANT ALL PRIVILEGES ON cakephp_blog.* TO 'cake_user'@'localhost' IDENTIFIED BY 'password';

      This command grants all privileges to all the tables in the database.

      Remember to replace password with a strong password of your choice.

      To update your database with the changes you've made, reload by running:

      You've just created a new database user, cake_user and given the user privileges only on the cakephp_blog database, thus tightening security.

      Exit the MySQL terminal by entering exit.

      You've created a new database with a schema, populated it with example data, and created an appropriate database user. In the next step, you will set up the CakePHP app itself.

      Step 3 — Creating the Blog Application

      In this section, you'll use Composer to install an example CakePHP app. It is advantageous to use Composer as it allows you to install CakePHP from your command line and it automatically sets up certain file permissions and configuration files.

      First, navigate to the Apache web server folder:

      • cd /var/www/example.com/html

      Apache uses this directory to store files visible to the outside world. The root user owns this directory, and so your non-root user, sammy, can't write anything to it. To correct this, you'll change the file system permissions by running:

      You'll now create a new CakePHP app via Composer:

      • composer create-project --prefer-dist cakephp/app cake-blog

      Here you have invoked composer and instructed it to create a new project with create-project. --prefer-dist cakephp/app tells composer to use CakePHP as a template with cake-blog as the name of the new application.

      Keep in mind that this command may take some time to finish.

      When Composer asks you to set up folder permissions, answer with y.

      In this section, you created a new CakePHP project with Composer. In the next step, you will configure Apache to point to the new app, which will make it viewable in your browser.

      Step 4 — Configuring Apache to Point to Your App

      Now, you'll configure Apache for your new CakePHP application, as well as enable .htaccess overriding, which is a CakePHP requirement. This entails editing Apache configuration files.

      For actual routing to take place, you must instruct Apache to use .htaccess files. These are configuration files that will be in subdirectories of the application (where needed), and then Apache uses the files to alter its global configuration for the requested part of the app. Among other tasks, they will contain URL rewriting rules, which you'll be adjusting now.

      Start off by opening the Apache global configuration file (apache2.conf) using your text editor:

      • sudo nano /etc/apache2/apache2.conf

      Find the following block of code:

      /etc/apache2/apache2.conf

      ...
      <Directory /var/www/>
              Options Indexes FollowSymLinks
              AllowOverride None
              Require all granted
      </Directory>
      ...
      

      Change AllowOverride from None to All, like the following:

      /etc/apache2/apache2.conf

      ...
      <Directory /var/www/>
              Options Indexes FollowSymLinks
              AllowOverride All
              Require all granted
      </Directory>
      ...
      

      Save and close the file.

      Next, you will instruct Apache to point to the webroot directory in the CakePHP installation. Apache stores its configuration files on Ubuntu 18.04 in /etc/apache2/sites-available. These files govern how Apache processes web requests.

      During the Let's Encrypt prerequisite tutorial, you enabled HTTPS redirection; therefore only allowing HTTPS traffic. As a result, you'll only edit the example.com-le-ssl.conf file, which configures HTTPS traffic.

      First, open the example.com-le-ssl.conf configuration file:

      • sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf

      You need to change only one line, the one that sets up DocumentRoot and tells Apache from where to serve content to the browser. Find the following line in the file:

      /etc/apache2/sites-available/example.com-le-ssl.conf

      DocumentRoot /var/www/example.com/html
      

      Edit this line to point to the CakePHP installation, by adding the following highlighted content:

      /etc/apache2/sites-available/example.com-le-ssl.conf

      DocumentRoot /var/www/example.com/html/cake-blog/webroot
      

      Save the file and exit the editor.

      Afterwards, restart Apache to reflect the new configuration:

      • sudo systemctl restart apache2

      Now you can visit https://your_domain/ in your browser.

      CakePHP can't connect to the database

      You'll see the default CakePHP success page. You'll notice that there is a block indicating that your application can't connect to the database. In the next step you'll resolve this by connecting your app to the database.

      You've now enabled .htaccess overriding, and pointed Apache to the correct webroot directory.

      Step 5 — Connecting Your App to the Database

      In this section, you will connect your database to your application so that your blog can access the articles. You'll edit CakePHP's default config/app.php file to set up the connection to your database.

      Navigate to the app folder:

      • cd /var/www/example.com/html/cake-blog

      Open the config/app.php file, by running the following command:

      Find the Datasources block (it looks like the following):

      /var/www/example.com/html/cake-blog/config/app.php

      ...
          'Datasources' => [
              'default' => [
                  'className' => 'CakeDatabaseConnection',
                  'driver' => 'CakeDatabaseDriverMysql',
                  'persistent' => false,
                  'host' => 'localhost',
                  ...
                  //'port' => 'non_standard_port_number',
                  'username' => 'cake_user',
                  'password' => 'password',
                  'database' => 'cakephp_blog',
      ...
      

      For 'username' replace my_app with your database user's username (this tutorial uses: cake_user), secret with your database user's password, and the second my_app with the database name (cakephp_blog in this tutorial).

      Save and close the file.

      Refresh the app in your browser and observe the success message under the Database section. If it shows an error, double check your configuration file against the preceding steps.

      CakePHP can connect to the database

      In this step, you've connected the CakePHP app to your MySQL database. In the next step, you'll generate the model, view, and controller files that will make up the user interface for interacting with the articles.

      Step 6 — Creating the Article User Interface

      In this section, you'll create a ready-to-use article interface by running the CakePHP bake command, which generates the article model. In CakePHP, baking generates all required models, views, and controllers in a basic state, ready for further development. Every database app must allow for create, read, update, and delete (CRUD) operations, which makes CakePHP's bake feature useful for automatically generating code for these operations. Within a couple of minutes, you get a full prototype of the app, ready to enter, store, and edit the data.

      Models, views, and controllers pertain to the MVC pattern. Their roles are:

      • Models represent the data structure.
      • Views present the data in a user-friendly way.
      • Controllers act upon user requests and serve as an intermediary between views and models.

      CakePHP stores its CLI executable under bin/cake. While it is mostly used for baking, it offers a slew of other commands, such as the ones for clearing various caches.

      The bake command will check your database, and generate the models based on the table definitions it finds. Start off by running the following command:

      By passing the all command, you are instructing CakePHP to generate models, controllers, and views all at once.

      Your output will look like this:

      Output

      Bake All --------------------------------------------------------------- Possible model names based on your database: - articles Run `cake bake all [name]` to generate skeleton files.

      It has properly detected the articles definition from your database, and is offering to generate files for that model.

      Bake it by running:

      • ./bin/cake bake all articles

      Your output will look like this:

      Output

      Bake All --------------------------------------------------------------- One moment while associations are detected. Baking table class for Articles... Creating file /var/www/example.com/html/cake-blog/src/Model/Table/ArticlesTable.php Wrote `/var/www/example.com/html/cake-blog/src/Model/Table/ArticlesTable.php` Deleted `/var/www/example.com/html/cake-blog/src/Model/Table/empty` Baking entity class for Article... Creating file /var/www/example.com/html/cake-blog/src/Model/Entity/Article.php Wrote `/var/www/example.com/html/cake-blog/src/Model/Entity/Article.php` Deleted `/var/www/example.com/html/cake-blog/src/Model/Entity/empty` Baking test fixture for Articles... Creating file /var/www/example.com/html/cake-blog/tests/Fixture/ArticlesFixture.php Wrote `/var/www/example.com/html/cake-blog/tests/Fixture/ArticlesFixture.php` Deleted `/var/www/example.com/html/cake-blog/tests/Fixture/empty` Bake is detecting possible fixtures... Baking test case for AppModelTableArticlesTable ... Creating file /var/www/example.com/html/cake-blog/tests/TestCase/Model/Table/ArticlesTableTest.php Wrote `/var/www/example.com/html/cake-blog/tests/TestCase/Model/Table/ArticlesTableTest.php` Baking controller class for Articles... Creating file /var/www/example.com/html/cake-blog/src/Controller/ArticlesController.php Wrote `/var/www/example.com/html/cake-blog/src/Controller/ArticlesController.php` Bake is detecting possible fixtures... ... Baking `add` view template file... Creating file /var/www/example.com/html/cake-blog/src/Template/Articles/add.ctp Wrote `/var/www/example.com/html/cake-blog/src/Template/Articles/add.ctp` Baking `edit` view template file... Creating file /var/www/example.com/html/cake-blog/src/Template/Articles/edit.ctp Wrote `/var/www/example.com/html/cake-blog/src/Template/Articles/edit.ctp` Bake All complete.

      In the output, you will see that CakePHP has logged all the steps it took to create a functional boilerplate for the articles database.

      Now, navigate to the following in your browser:

      https://your_domain/articles
      

      You'll see a list of articles currently in the database, which includes one row titled Sample Title. The bake command created this interface allowing you to create, delete, and edit articles. As such, it provides a solid starting point for further development. You can try adding a new article by clicking the New Article link in the sidebar.

      The generated article user interface

      In this section, you generated model, view, and controller files with CakePHP's bake command. You can now create, delete, view, and edit your articles, with all your changes immediately saved to the database.

      In the next step, you will disable the debug mode.

      Step 7 — Disabling Debug Mode in CakePHP

      In this section, you will disable the debug mode in CakePHP. This is crucial because in debug mode the app shows detailed debugging information, which is a security risk. You'll complete this step after you've completed the development of your application.

      Open the config/app.php file using your favorite editor:

      Near the start of the file there will be a line for the 'debug' mode. When you open the file 'debug' mode will be set to true. Change this to false as per the following:

      config/app.php

      ...
      'debug' => filter_var(env('DEBUG', false), FILTER_VALIDATE_BOOLEAN),
      ...
      

      Once you've turned debug mode off, the home page, located under src/Templates/Pages/home.ctp, will show an error.

      The debug mode error

      Note: If you haven't changed the default route or replaced the contents of home.ctp, the home page of your app will now show an error. This is because the default home page serves as a status dashboard during development, but does not work with debug mode disabled.

      You've disabled debug mode. Any errors and exceptions that occur from now, along with their stack traces, won't be shown to the end user, tightening the security of your application.

      However, after, disabling debug mode, your home.ctp will show an error. If you've completed this step only for the purposes of this tutorial, you can now redirect your home page to the articles listing interface while keeping debug mode disabled. You'll achieve this by editing the contents of home.ctp.

      Open home.ctp for editing:

      • sudo nano src/Template/Pages/home.ctp

      Replace its contents with the following:

      src/Template/Pages/home.ctp

      <meta http-equiv="refresh" content="0; url=./Articles" />
      <p><a href="./Articles">Click here if you are not redirected</a></p>
      

      This HTML redirects to the Articles controller. If the automatic redirection fails, there is also a link for users to follow.

      In this step, you disabled debug mode for security purposes and fixed the home page's error by redirecting the user to the blog post listing interface that the Articles controller provides.

      Conclusion

      You have now successfully set up a CakePHP application on a LAMP stack on Ubuntu 18.04. With CakePHP, you can create a database with as many tables as you like, and it will produce a live web editor for the data.

      The CakePHP cookbook offers detailed documentation regarding every aspect of CakePHP. The next step for your application could include implementing user authentication so that every user can make their own articles.



      Source link