Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Installer un serveur web sur votre Raspberry

Nous parlons ici d'un serveur Apache.

Lighttpd (“lighty”) et SQLite sont beaucoup moins gourmands en ressources que Apache et MySQL.

Voir la page Lighttpd "how to" - serveur Web rapide et sécurisé en choisissant les paragraphes concernant le RPI.

Voir Création d'un serveur HTTP (Lighty) + PHP + SQLite

1. Compatibilité

2. Pré-requis

  • une Raspberry Pi 3
  • un dossier pour le serveur :

Apache utilise comme racine pour votre site le répertoire /var/www/html. 1)

Créez cette arborescence si lelle n'existe pas :

  • sudo mkdir -p /var/www/html

Donnez_lui des droits qui faciliteront l'administration des sites :

  • sudo chown -R pi:www-data /var/www/html/
    sudo chmod -R 770 /var/www/html/

3. Installation

3.1. Installation des programmes

Mettez à jour le RPI :

  • sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get dist-upgrade
    sudo apt-get autoremove
    sudo apt-get autoclean

Installez apache2, php5, libapache2-mod-php5, mysql-server, php5-mysql, phpmyadmin :

  • sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server php5-mysql phpmyadmin
Apache
le serveur web le plus utilisé, qui possède sa propre licence. De plus, il existe une abondante documentation, avec des cours, et des livres traitant de son utilisation.
Apache est donc un choix sûr et les compétences que vous pourrez acquérir sur le sujet vous seront toujours utiles.
PHP
langage interprété, principalement utilisé pour rendre un site dynamique : l’utilisateur envoie des informations au serveur qui lui renvoie les résultats modifiés en fonction de ces infos.
MySQL
SGBD libre, puissant, massivement utilisé.
PHPMyAdmin
application développée en PHP, qui fournit une interface simplifiée pour manipuler les bases de données MySQL.

Lors de l’installation de mysql-server, un mot de passe est demandé pour le compte administrateur MySQL (root), attention à bien le retenir, car il sera utilisé plus tard.

PHPMyAdmin vous posera plusieurs questions concernant ses réglages :

Choisissez un serveur Apache, puis utilisez le choix par défaut pour la base (dbconfig-common). Pour le mot de passe root, il s’agit de celui que vous aviez utilisé pour MySQL.

Activez les modules rewrite et vhost_alias :

  • sudo a2enmod rewrite vhost_alias

Démarrez ou relancez Apache :

  • sudo apachectl start

  • ou

    sudo apachectl restart

3.2. Vérifier le fonctionnement

Pour tester le fonctionnement d’Apache, ouvrez la page http://framboise.local. Vous devriez obtenir une page avec un message du genre « It works! » :

Pour savoir si PHP fonctionne correctement, créez un fichier /var/www/html/index.php :

  • echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

Ouvrez la page : http://framboise.local/phpinfo.php → vous devriez avoir un résultat proche de cette image :

Pour vérifier le fonctionnement de MySQL, lancez la commande :

  • mysql --user=root --password=votrepasswd

Vous devriez voir un message du type « Bienvenue sur MySQL! »

Pour vérifier le bon fonctionnement de PHPMyAdmin, il suffit d’y accéder à l'adresse http://framboise.local/phpmyadmin

3.3. Installation du serveur Apache avec Raspbian

4. Configuration

4.1. Déplacement de la racine du site

Sauvegarder l'original du fichier /etc/apache2/sites-available/000-default :

  • sudo cp /etc/apache2/sites-available/000-default /etc/apache2/sites-available/000-default.original

Éditez avec les droits d'administration le fichier /etc/apache2/sites-available/000-default pour y remplacer les occurences de /var/www par /le/chemin/voulu (par exemple /[DISQUE]/www :

remplacerpar
    DocumentRoot /var/www
    DocumentRoot /media/[DISQUE]/www
    <Directory /var/www/>
    <Directory /media/[DISQUE]/www/>

Redémarrer le serveur apache par :

  • sudo apachectl restart

Désormais, en tapant l'adresse http://framboise, on aboutit dans le répertoire /media/[DISQUE]/www.

4.2. Création de sous-domaines automatisés

Il faut d'abord installer le module vhost_alias :

  • a2enmod vhost_alias
    /etc/init.d/apache2 reload

Tout se passe dans le répertoire /etc/apache2/sites-available/. Ce répertoire contient un fichier de configuration par serveur. Le serveur par défaut est défini par le fichier default.

Nous prendrons comme exemple le sous-domaine doc.framboise.home qui correspond à un dokuwiki de racine /media/Reservoirs/www/doc.

Les sous-domaines sont déduits de l'appel :

  • sous-répertoires de domaine :
    • xxx.domaine.tld → répertoire www/domaine/xxx
    • yyy.domaine.tld → répertoire www/domaine/yyy
  • mais on peut aussi faire des répertoires plus élaborés :
    • aaa.domaine.tld → répertoire www/domaine/aaa/un_répertoire
    • bbb.domaine.tld → répertoire www/domaine/bbb/un_répertoire

Créer une copie de /etc/apache2/sites-available/default/etc/apache2/sites-available/framboise.home

Ajouter une directive VirtualDocumentRoot et ServerAlias dans la configuration de votre VirtualHost comme dans l’ex suivant :

framboise.home
# obtenir le nom du serveur à partir de l'entête "Host:"
UseCanonicalName Off

<VirtualHost *:80>
    DocumentRoot /media/Reservoirs/www
    ServerName framboise.home
    ServerAlias *.framboise.home
    VirtualDocumentRoot /media/Reservoirs/%-3
    # format de journal avec l'appel
    LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog access.log vcommon
</VirtualHost>

# réglages pour les répertoires du dokuwiki
<Directory /media/Reservoirs/www/doc>
    Order deny,allow
    allow from all
</Directory>

<LocationMatch "/doc/(data|conf|bin|inc)/">
    Order allow,deny
    Deny from all
    Satisfy All
</LocationMatch>
  • variable %0 = le sous-domaine déduit de l'adresse appelée. (xxx.domaine.com)
  • variable %1 = premier élément de l'adresse appelée. (xxx)
  • variable %2 = 2e élément de l'adresse appelée. (domaine)
  • variable %-1 = dernier élément de l'adresse appelée. (com)
  • variable %-2 = avant-dernier élément de l'adresse appelée. (domaine)
  • variable %-3 = avant-avant-dernier élément de l'adresse appelée. (xxx, yyy, …)

Ici, %-3 permet d'éviter les problèmes dûs à www.

Enregistrer le fichier framboise.home et relancer apache :

  • sudo a2ensite framboise.home
    sudo service apache2 restart

4.3. Méthode simple pour un domaine

Pour créer un sous-domaine (par ex. doc.framboise), nous allons créer un fichier doc.framboise dans ce répertoire. Chaque sous-domaine doit être répertorié dans le dns ou dans le fichier hosts.

Éditer le fichier /etc/hosts et relancer Apache :

sh fredit.sh /etc hosts \
&& ssh framboise "sudo /etc/init.d/apache2 restart"

Ajouter au fichier /etc/hosts la ligne :

192.168.0.100  doc.framboise

Enregistrer : apache se relance.

Copier le fichier /etc/apache2/sites-available/default → doc.framboise :

scp framboise:/etc/apache2/sites-available/default /etc/apache2/sites-available/doc.framboise

, l'éditer, enregistrer le site et relancer apache :

sh fredit.sh /etc/apache2/sites-available default \
&& ssh framboise "sudo a2ensite doc.framboise; \
sudo /etc/init.d/apache2 restart"

et y ajouter les lignes :

doc.framboise
NameVirtualHost doc.framboise

<VirtualHost doc.framboise>
    ServerAdmin webmaster@domaine.fr
    ServerName www.doc.framboise
    ServerAlias doc.framboise
    DocumentRoot /media/Reservoirs/www/dokuwiki

    # réglages pour le répertoire
    <Directory /media/Reservoirs/www/dokuwiki>
        Order deny,allow
        allow from all
    </Directory>
	
    <LocationMatch "/dokuwiki/(data|conf|bin|inc)/">
        Order allow,deny
        Deny from all
        Satisfy All
    </LocationMatch>
</VirtualHost>

Pour pouvoir accéder depuis deux adresses (par exemple une en local et une sur internet) :

<note important>Les adresses doc.framboise et 1.2.3.4 doivent exister dans le DNS ou le hosts</note>

doc.framboise
NameVirtualHost doc.framboise
NameVirtualHost 1.2.3.4

<VirtualHost 1.2.3.4 doc.framboise>
    ServerAdmin webmaster@domaine.fr
    ServerName www.doc.framboise
    ServerAlias doc.framboise
    DocumentRoot /media/Reservoirs/www/dokuwiki

    # réglages pour le répertoire
    <Directory /media/Reservoirs/www/dokuwiki>
        Order deny,allow
        allow from all
    </Directory>
    
    <LocationMatch "/dokuwiki/(data|conf|bin|inc)/">
        Order allow,deny
        Deny from all
        Satisfy All
    </LocationMatch>
</VirtualHost>

4.4. Autres exemples de sous-domaines

fichier de configuration apache /etc/apache2/sites-available/domaine.com (http://forum.ubuntu-fr.org/viewtopic.php?id=361680):

domaine.com :

NameVirtualHost *:80

<VirtualHost *:80>

    ServerAdmin admin@domaine.com
    ServerName   www.domaine.com
    ServerAlias domaine.com

    UseCanonicalName Off

    DocumentRoot /websites/www.domaine.com
        <Directory /websites/www.domaine.com>
            Options Indexes FollowSymlinks
            AllowOverride none
            Order deny,allow
            Allow from all
        </Directory>

    ErrorLog /var/log/apache2/www_error.log
    LogLevel warn
    CustomLog /var/log/apache2/www_access.log combined
    ServerSignature On

</VirtualHost>

UseCanonicalName Off → le nom du serveur est déduit du contenu de l'entête Host: de la requête0.

sql.domaine.com :

<VirtualHost *:80>
    ServerName sql.domaine.com
    ServerAdmin "admin@domaine.com"

    DocumentRoot /websites/sql.domaine.com
        <Directory /websites/sql.domaine.com>
            Options Indexes FollowSymlinks
            AllowOverride none
            Order deny,allow
            Allow from all
        </Directory>
    ErrorLog /var/log/apache2/sql_error.log
    LogLevel warn
    CustomLog /var/log/apache2/sql_access.log combined
</VirtualHost>

dev.domaine.com :

<VirtualHost *:80>
        ServerName dev.domaine.com
        ServerAdmin "admin@domaine.com"

        DocumentRoot /websites/dev.domaine.com
        <Directory /websites/dev.domaine.com>
            Options Indexes FollowSymlinks
            AllowOverride none
            Order deny,allow
            Allow from all
        </Directory>


        ErrorLog /var/log/apache2/dev_error.log
        LogLevel warn
        CustomLog /var/log/apache2/dev_access.log combined
</VirtualHost>

phpmyadmin.domaine.com :

<VirtualHost *:80>
        ServerName phpmyadmin.domaine.com
        ServerAdmin "admin@domaine.com"

        DocumentRoot /websites/phpmyadmin.domaine.com
        <Directory /websites/phpmyadmin.domaine.com>
            Options Indexes FollowSymlinks
            AllowOverride none
            Order deny,allow
            Allow from all
        </Directory>
        ErrorLog /var/log/apache2/phpmyadmin_error.log
        LogLevel warn
        CustomLog /var/log/apache2/phpmyadmin_access.log combined
</VirtualHost>

blog.domaine.com :

<VirtualHost *:80>
        ServerName blog.domaine.com
       ServerAdmin "admin@domaine.com"

        DocumentRoot /websites/blog.domaine.com
        <Directory /websites/blog.domaine.com>
            Options Indexes FollowSymlinks
            AllowOverride none
            Order deny,allow
            Allow from all
        </Directory>
        ErrorLog /var/log/apache2/blog_error.log
        LogLevel warn
        CustomLog /var/log/apache2/blog_access.log combined
</VirtualHost>

4.5. Rendre accessible votre serveur depuis internet

Pour rendre accessible votre serveur depuis internet, allez dans la gestion de votre box (livebox, freebox, etc.) et mettez en place la redirection des ports.

Nous allons configurer le routeur pour autoriser les connexions ssh et des trafics Web grâce à son pare-feu au RPI.

Par sécurité, le mot de passe de l'utilisateur pi doit avoir été changé et éventuellement un nouvel utilisateur mis en place.

Il faut rediriger les adresses parvenant sur le routeur (la freebox) vers le RPI.

Les ports à rediriger en TCP sont :

  • le port 80 (pour http)
  • le port 22 (pour ssh)
  • le port 1723 (pour vpn)

4.6. Optimisation du Raspberry Pi pour Lighttpd Owncloud, WordPress et plus

source : http://c-mobberley.com/wordpress/index.php/2013/05/18/raspberry-pi-lighttpd-optimisation-for-wordpress-owncloud-and-more/

Lighttpd, sont installés. Nous allons optimiser lighttpd pour le Raspberry Pi en installant PHP APC, en activant fast cgi et en mettant en place la compression avec gzip.

Tout d'abord, Ouvrir avec les droits d'administration le fichier /etc/lighttpd/lighttpd.conf et remplir la section server.modules avec les modules suivants :

server.modules = (
    #"mod_rewrite",
    "mod_redirect",
    "mod_alias",
    "mod_access",
    #"mod_auth",
    #"mod_status",
    #"mod_simple_vhost",
    #"mod_evhost",
    #"mod_userdir",
    #"mod_secdownload",
    #"mod_fastcgi",
    #"mod_proxy",
    #"mod_cgi",
    #"mod_ssi",
    #"mod_compress",
    #"mod_usertrack",
    #"mod_expire",
    #"mod_rrdtool",
    #"mod_accesslog"
)

4.7. PostgreSQL

4.8. Configurer le SSL avec Apache 2

Le site par défaut de notre serveur web LAMP utilise le protocole non-sécurisé HTTP et écoute sur le port 80.

Par souci de sécurité et de confidentialité, il peut être intéressant de le passer en HTTPS qui écoute sur le port 443.

Le plus rapide : utiliser les certificats SSL par défaut d’Apache 2.

Par défaut, Apache 2 contient deux sites préconfigurés : default et default-ssl qui pointent tous les deux vers le répertoire « /var/www » mais le premier écoute sur le port 80 (HTTP) et le second sur le port 443 (HTTPS).

Dans la configuration d’origine, seul le site default est actif, ce qui permet d’accéder à la page It Works ! après l’installation.

Pour activer l'accès en https :

  • Activer le module SSL d’Apache
  • Activer le site « default-ssl » d’Apache
  • recharger Apache et le site sera accessible en HTTPS.

Voici les commandes à saisir :

  • sudo a2enmod ssl
    sudo a2ensite default-ssl.conf
    sudo apachectl restart

Pas besoin de générer de certificat SSL : il y en a déjà un par défaut (valable 10 ans). Son emplacement peut se lire dans le fichier /etc/apache2/sites-available/default-ssl

5. Utilisation

6. Voir aussi

1)
C'est-à-dire que quand vous appelez votre Raspberry, Apache cherche le fichier dans /var/www/html.
Par exemple, si vous appelez l’adresse http://127.0.0.1/exemple, Apache cherchera le fichier exemple dans le répertoire /var/www/html.
C'est donc dans ce répertoire que vous ajouterez de nouveaux fichiers, sites, etc..