Michaël Gallego

This is my blog. What can you expect here? Well... Zend Framework 2, Amazon AWS...

Twitter

Google+

LinkedIn

Github

Last.fm

Installer PHP, Apache et MySQL sur Amazon EC2 + RDS

Nous réfléchissons avec mon associé d’héberger notre futur site via les services Amazon AWS. Comme c’est gratuit pendant 1 an (à condition de n’utiliser que les plans “micro” pour chaque service), on s’est dit qu’on allait tenter (et puis, soyons honnête, l’aspect serveur n’est ni mon fort, ni celui de mon associé).

J’ai réussi à installer sans quasiment aucune encombre la base de données MySQL (via le service Amazon RDS), et le serveur (sur Amazon EC2, en installant Apache et PHP, ainsi que quelques extensions PHP indispensables). Cet article est surtout un pense-bête pour moi même, mais il peut être utile à certains.

Mise à jour : depuis l’écriture de cet article, j’ai découvert un autre service d’AWS, appelé Amazon Beanstalk. Celui ci automatise la plupart des étapes décrites dans cet aticle, et permet de réaliser des déploiements simplifiés par Git. Je vous conseille donc de jeter un coup d’oeil à ce super service ;-).

Amazon RDS (base de données)

  1. Launch DB instance : création de l’instance.
  2. Choisir MySQL.
  3. Génération de mot de passe : https://www.grc.com/passwords.htm
  4. Lancer l’instance, et créer un Security Group afin de permettre à la machine ou au serveur S3 de se connecter à la base. Il faut ensuite modifier l’instance afin d’ajouter le groupe de sécurité créé.

Amazon EC2 (serveur web)

  1. Launch instance : création de l’instance.
  2. Choisir Classic Wizard, puis sélectionner Ubuntu Server (ou n’importe quelle autre, mais les étapes suivantes n’ont été testées que sur Ubuntu Server 12.04).
  3. Ajouter un nom d’utilisateur pour la clé SSH, et la télécharger.
  4. Pour se connecter à l’instance : sudo ssh -i [FILE NAME].pem ubuntu@ec2-[IP ADDRESS].compute.amazonaws.com Sur OS X, on peut stocker le fichier SSH :

  5. Copier le fichier .pem dans le dossier .ssh (taper la commande open ~/.ssh pour ouvrir le dossier).
  6. Maintenant on peut taper : sudo ssh -i ~/.ssh/[FILE NAME].pem ubuntu@ec2-[IP ADDRESS].compute.amazonaws.com
  7. On ajoute ensuite une configuration SSH afin de permettre aux applications de connaître l’emplacement du fichier SSH. Pour cela on ouvre/créé le fichier ~/.ssh/config, et on ajoute la ligne IdentityFile "~/.ssh/[FILE NAME].pem"
  8. On change les permissions du fichier .pem en tapant la commande chmod 700 ~/.ssh/[FILE NAME].pem
  9. Redémarrer la machine. On peut ensuite se connecter directement sur Transmit en tapant le nom du serveur, et ubuntu comme nom d’utilisateur (ou root sur un autre serveur Linux), et en laissant le mot de passe vide. Par défaut, les autres dossiers du serveur ont comme propriétaire “root”, ce qui signifie qu’on ne peut pas y transférer de fichiers depuis un FTP, par exemple. Généralement, on balance ses sites dans le dossier /var/www. On va donc changer le propriétaire juste pour ce dossier :

  10. Aller dans le dossier /var en tapant cd /var
  11. Et taper : sudo chown -R ubuntu:ubuntu /var/www (en assumant que l’utilisateur s’appelle ubuntu, ce qui est le réglage par défaut lorsque l’on crée une instance Ubuntu Server sur EC2).

Création de l’IP

Afin de rendre le serveur accessible, il faut créer une Elastic IP à partir du panneau de contrôle d’EC2. Puis associer l’IP à l’instance (note : du coup, l’accès SSH change car l’IP a été modifiée vers une IP publique).

Il ne faut pas oublier d’ouvrir le port 80 de l’instance EC2 :

  1. Dans l’onglet “Network & Security” de EC2, cliquer sur Security Group.
  2. Dans l’onglet “Inbound” de la page de droite, ajouter une règle TCP pour le port 80.

Installation d’Apache

  1. sudo apt-get install apache2
  2. sudo /etc/init.d/apache2 start

Par défaut, certaines extensions utiles ne sont pas activées :

  • Pour mod_rewrite : sudo a2enmod rewrite
  • Pour mod_expires : sudo a2enmod expires
  • Pour mod_headers : sudo a2enmod headers
  • Pour mod_filter : sudo a2enmod filter

Pour installer l’extension mod_pagespeed de Google, jetez un coup d’oeil à ce lien. Au cas ou le lien venait à disparaître :

  1. cd ~
  2. wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_amd64.deb
  3. sudo dpkg -i mod-pagespeed*.deb
  4. rm mod-pagespeed*.deb
  5. Configurer le module : sudo nano /etc/apache2/mods-available/pagespeed.conf

Puis redémarrer Apache : sudo /etc/init.d/apache2 restart

Installation de PHP

Note : les commandes suivantes permettent d’installer la dernière version de PHP 5 (à l’heure où j’écris, cela m’a installé PHP 5.4.9). Pour installer la dernière version “embarquée” par Ubuntu, c’est une autre commande (dont je ne me souviens plus) :

  1. sudo add-apt-repository ppa:ondrej/php5
  2. sudo apt-get update
  3. sudo apt-get install php5

Pour installer Intl (une fois Apache installé) :

  1. apt-cache search php5
  2. sudo apt-get install php5-intl
  3. sudo /etc/init.d/apache2 restart

Pour installer APC (une fois Apache installé) :

  1. sudo apt-get install php-apc
  2. sudo /etc/init.d/apache2 restart

Installation de MySQL

Même si nous utilisons RDS pour la base de données MySQL (la base ne sera donc pas stockée sur notre instance EC2 mais sur l’instance d’Amazon RDS), on doit quand même installer MySQL pour récupérer, entre autre, l’extension MySQL pour PDO :

  1. sudo apt-get install php5-mysql
  2. Logiquement, le fichier /etc/php5/mods-available/pdo_mysql.ini a été automatiquement créé. Si ce n’est pas le cas, ajouter la ligne extension=pdo_mysql.so dans le fichier /etc/php5/mods-available/pdo.ini.

Quelques chemins utiles…

  • /var/www : dossier pour mettre vos sites
  • /etc/php5/apache2/php.ini : fichier de configuration PHP
  • /etc/apache2/apache2.conf : fichier de configuration Apache
  • /etc/apache2/sites-enabled : dossier dans lequel mettre vos Virtual Hosts
  • /etc/hosts : fichier hosts

Envoi d’un site

Il suffit de créer un site dans le dossier /var/www, puis d’ajouter un virtual host dans /etc/apache2/sites-enabled, et enfin de redémarrer Apache en tapant sudo /etc/init.d/apache2 restart.

Il se peut que lorsque l’on tente d’accéder au site, une page blanche s’affiche avec une vilaine erreur 500. La solution : chez moi, le dossier “data” de mon site (qui contient entre autre les templates Twig, les données de cache…) n’était pas accessible en écriture. Un coup de chmod et l’affaire est pliée.

Redirection

Si vous avez un nom de domaine chez OVH que vous souhaitez rediriger vers votre serveur EC2 :

  1. Aller dans le manager OVH.
  2. Cliquer sur Domaine & DNS.
  3. Dans la partie Zone DNS changer la ligne dont le type est ‘A’ en mettant l’IP publique de votre serveur Amazon.

NOTE : il est également possible de gérer ses DNS depuis le service Route 53 d’Amazon.

Une fois ceci fait, il faut modifier le virtual host :

DocumentRoot "/var/www/[CHEMIN_DOSSIER_PUBLIC]"
ServerName [mondomaine.com]
ServerAlias [www.mondomaine.com]

<Directory "[chemin_dossier_public]">
    DirectoryIndex index.php
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Et d’ajouter la ligne suivante dans le fichier /etc/hosts : 127.0.0.1 [mondomaine.com].