User:Patheticcockroach/Installation serveur Ubuntu 8.04
- Cette page est un backup de ma contribution sur http://www.wikiovh.com/index.php/Ubuntu_8.04:nue-vers-hebergement
Prérequis: ce guide nécessite d'être connecté en root (ou d'avoir les droits root) sur votre serveur. On supposera également que la distribution vient juste d'être installée.
Contents |
Première connexion au serveur
Changement du mot de passe root
Pour changer le mot de passe, on utilisera la commande:
passwd
Mise à jour de la distribution
Commençons par ajouter les repositories de dotdeb.org, qui fournit les derniers binaries de PHP et MySQL:
- On ouvre le fichiers qui liste les sources:
nano /etc/apt/sources.list
- On y joute les lignes suivantes et on sauve:
deb http://packages.dotdeb.org stable all deb-src http://packages.dotdeb.org stable all
Puis on réalise une mise à jour de la distribution:
apt-get update && apt-get -y upgrade
On vérifie que tout a bien été upgradé:
apt-get upgrade
Si certains packages ont été oubliés (ce qui est volontier le cas avec openssh-client et openssh-server), on pourra prendre le risque, si l'installation est neuve, de forcer leur mise à jour, avec par exemple:
apt-get install openssh-client
Résoudre le problème du perl: warning: Setting locale failed.
- Ces instructions[1] concernent la version anglaise. Pour la version française, peut-être que le problème n'existe pas. Ou s'il existe[2], les noms des locales doivent être adaptés (probablement du genre "fr_FR.UTF-8".
On remarque (en tous cas dans la version anglaise) de désagréables messages durant l'installation, ressemblant à ceci:
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "en_GB.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").
Pour les supprimer (pour la version anglais, encore une fois):
- Editer /etc/default/locale, le contenu du fichier doit être:
LANG=en_US.UTF-8
- Editer /etc/environment, le contenu du fichier doit être, après la ligne commençant par PATH que l'on ne touchera pas:
LANG="LANG=en_US.UTF-8" LANGUAGE="en_US:en"
- Editer /etc/locale.def, le contenu du fichier doit être:
en_US ISO-8859-1 en_US.UTF-8 UTF-8
Maintenant on applique:
locale-gen
Et on reboote (il existe peut-être une solution moins radicale, mais je ne l'ai pas trouvée):
reboot
Après le redémarrage, un petit:
dpkg-reconfigure locales
devrait montrer qu'il n'y a plus d'erreurs.
Webmin
Pour plus de simplicité, nous utiliserons Webmin pour nous aider à configurer le reste du serveur. Tout d'abord, nous devons installer un certain nombre de packages requis par Webmin:
apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libmd5-perl
Puis, aller sur http://www.webmin.com/download.html et copier l'URL de téléchargement de Webmin version "Debian package". Puis coller l'URL dans la console, après un wget, par exemple, pour la version 1.430:
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.430_all.deb
Pour installer, utiliser la commande dpkg:
dpkg -i webmin_1.430_all.deb
Webmin est installé! Pour s'y connecter, utiliser l'URL https://[nom_ou_IP_du_serveur]:10000/ Le login est "root" et le mot de passe le même que celui du compte root SSH. Pour changer le mot de passe:
/usr/share/webmin/changepass.pl /etc/webmin root [nouveau mot de passe]
Le changement de mot de passe peut prendre quelques minutes avant d'être effectif.
PHP
Installation
apt-get install php5 php5-gd
Pour installer en plus l'interpréteur en ligne de commande (utile, par exemple, pour utiliser des scripts PHP en cron jobs):
apt-get install php5-cli
Configuration
NB: nous finaliserons la configuration de PHP lors de la configuration d'Apache.
Ouvrir Webmin (s'il était déjà ouvert, cliquer dans le menu sur "Refresh Modules"), puis aller dans "Others" → "PHP Configuration". Le module demande de préciser le chemin des fichiers de configuration: entrer:
/etc/php5/apache2/php.ini=Configuration for mod_php /etc/php5/cli/php.ini=Configuration for command-line scripts /etc/php5/cgi/php.ini=Configuration for scripts run via CGI
Appliquer la configuration recommandée de PHP (cela évite notamment certain soucis avec phpBB ou Moodle[3]):
cp /usr/share/doc/php5-common/examples/php.ini-recommended /etc/php5/apache2/php.ini
Apache
Installation
apt-get install apache2
En allant sur http://[nom_ou_IP_du_serveur], on obtient la page test d'Apache ("It works!"), qui est localisé dans /var/www. Nous réserverons ce répertoire pour des tests et pour l'administration du serveur (par exemple, pour phpMyAdmin).
Configuration
Configuration générale
Dans Webmin, aller dans "Servers" → "Apache Webserver". Puis choisir l'onglet "Global configuration", puis "Edit Config Files": cette page fournit une interface confortable pour éditer tout les fichiers de configuration d'Apache. Nous éditerons d'abord /etc/apache2/apache2.conf:
- pour que PHP fonctionne avec Apache, ajouter au début:
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so DirectoryIndex index.html index.htm index.php
- pour diminuer au maximum les informations envoyées par Apache à propos du serveur (système d'exploitation, modules, etc), remplacer:
ServerTokens Full
par:
ServerTokens Prod
Remplacer également:
ServerSignature On
par:
ServerSignature Off
- Pour empêcher l'affichage de la liste des fichiers quand un dossier ne contient pas de page index (telle que définie par la directive DirectoryIndex), on ajoutera à la suite:
Options -Indexes
L'user et le group utilisé par Apache est par défaut www-data. Il n'est pas nécessaire de le changer. Si toutefois vous le souhaitez, vous pouvez les modifier en éditant /etc/apache2/envvars:
nano /etc/apache2/envvars
Les virtual hosts
Ils sont définis dans /etc/apache2/sites-available/default (éditable dans le module Apache de Webmin). La configuration par défaut est:
NameVirtualHost * <VirtualHost *> ServerAdmin webm[email protected] DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
Gardons à l'esprit que nous voulons garder en l'état /var/www/ pour l'administration uniquement. On remplacera les AllowOverride None par des AllowOverride All, on désactivera les Indexes et la ServerSignature. Enfin, on désactive la documentation. On obtient donc:
NameVirtualHost * <VirtualHost *> ServerAdmin [email protected] DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/> #Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature Off Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all #Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
Nous configurerons d'autres virtual hosts (les plus utiles = ceux pour les sites à héberger!) plus loin, quand nous aurons apris à ajouter un domaine dans BIND.
MySQL
Installation
apt-get install mysql-server
Pendant l'installation, il se peut que MySQL demande de choisir un mot de passe root. Si ce n'est pas le cas, aucun mot de passe n'est nécessaire pour accéder au compte route (ce qui, on s'en doute, n'est pas franchement recommandé!). Pour configurer le mot de passe root:
mysqladmin -u root password [mot de passe voulu]
NB: pour changer le mot de passe root:
mysqladmin -u root -p password [nouveau mot de passe]
(mysqladmin demande alors de s'identifier en entrant l'ancien mot de passe).
Et enfin, pour que PHP et MySQL fonctionnent ensemble:
apt-get install php5-mysql
ProFTPd
Installation
apt-get install proftpd
Choisir "standalone" pendant l'installation.
Configuration
Dans Webmin, aller dans "Servers" → "ProFTPD Server". Choisir "Edit Config Files" et éditer le fichier /etc/proftdp/proftpd.conf:
- Si notre serveur ne supporte pas l'IPv6, on le désactive en remplaçant:
UseIPv6 on
par:
UseIPv6 off
- Pour améliorer considérablement la rapidité de connexion à ProFTPd, on ajoutera[4]:
# Trying to improve connection speed... IdentLookups off UseReverseDNS off
Maintenant, revenir au menu principal de la configuration de ProFTPD dans Webmin et choisir "Files and Directories". A Limit users to directories cocher "Home directory". Sauver.
phpMyAdmin
Téléchargement et décompression
Comme nous l'avons signalé plus haut, nous nous sommes réservé le dossier /var/www pour nos outils d'administrations. C'est donc ici que nous mettrons phpMyAdmin. Dans la console:
cd /var/www
Allons sur http://www.phpmyadmin.net/home_page/downloads.php et choisissons une version qui nous convient. Par exemple la version stable sans traductions, "english.tar.gz":
wget http://prdownloads.sourceforge.net/phpmyadmin/phpMyAdmin-2.11.8.1-english.tar.gz?download
On décompresse:
tar -zxpf phpMyAdmin-2.11.8.1-english.tar.gz
On fait un peu de rangement (utiliser la commande "ls" pour trouver le nom du dossier créé par phpMyAdmin, dans ce cas c'est phpMyAdmin-2.11.8.1-english):
mv phpMyAdmin-2.11.8.1-english pmadmin
Configuration
Rendons-nous maintenant sur http://[nom du serveur]/pmadmin/. Nous obtenons un message d'erreur qui nous invite à utiliser le script de configuration (en cas de problème pour trouver le lien, le script se trouve à l'URL: http://[nom du serveur]/pmadmin/scripts/setup.php). Nous obtenons (encore!) un message d'erreur, qui nous demande de créer un dossier "config" accessible en écriture... obtempérons donc (toujours dans la même console):
cd pmadmin mkdir config chown www-data config
Et voilà, retournons dans le script de configuration:
- Dans "Servers", cliquer sur "Add"
- On laissera tout par défaut sauf:
- Authentication type: choisir http. Ainsi, à chaque connection à phpMyAdmin, il faudra entrer les paramètres de connexion d'un utilisateur MySQL.
- User for config auth: vider le champ.
- Connection type: libre choix, je préfère mysql à mysqli par frilosité envers certaines nouveautés dont les avantages me sont obscurs.
- Cliquer sur "Add" (en vert, tout en bas).
- Dans "Configuration", cliquer sur "Save".
Retour à la console (toujours la même):
cd config cp config.inc.php ..
Voilà, nous pouvons maintenant retourner sur http://[nom du serveur]/pmadmin/, et utiliser le login "root" et le mot de passe root de MySQL pour accéder aux bases de données avec phpMyAdmin.
Postfix
Cette rubrique est imparfaite: la "configuration" réalisée permet d'envoyer des e-mails, mais pas d'en recevoir. Merci de la compléter si vous pouvez.
Installation
apt-get install postfix
Pendant l'installation, on configurera Postfix en "Internet Site", et on laissera le "System mail name" à sa valeur par défaut (c'est-à-dire le nom du serveur).
Ajouter un site web dans tout ça
A partir de l'installation que nous venons de réaliser, nous allons configurer le serveur pour héberger un de nos domaines (NB: il s'agit d'une suggestion de structure, il est tout à fait possible de s'organiser différement).
Création d'un utilisateur
Dans Webmin: "System" → "Users and Groups". Cliquer sur "Create a new user." Laisser les réglages par défaut sauf:
- Username: indiquer un nom d'utilisateur. Nous mettrons wiki4games.
- Password: cliquer sur "normal password" puis entrer un mot de passe.
- Copy template files to home directory?: choisir no.
Cliquer sur "Create" pour valider. Nous obtenons un nouvel utilisateur "wiki4games", dont l'ID est 1000 (peu important...), dont le groupe est "users", et dont le dossier principal est "/home/wiki4games".
Création de dossiers pour notre site
Afin de simplifier la gestion des droits des dossiers, nous allons nous connecter en SSH avec l'utilisateur qu'on vient de créer. On se retrouve donc directement dans /home/wiki4games. Créons des dossiers pour héberger wiki4games.com et un sous domaine test5.wiki4games.com:
mkdir www mkdir sd cd sd mkdir test5
Envoi d'un fichier sur notre site
Créons par exemple le fichier index.php contenant:
<?php phpinfo(); ?>
Avec un client FTP, se connecter au serveur (hôte: [nom du serveur]; port: 21; login: wiki4games; mot de passe: [le mot de passe de wiki4games]), et envoyer index.php dans le sous-dossier www.
Configuration de BIND
Dans Webmin, aller dans "Servers" → "BIND DNS Server". Cliquer sur "Create master zone.":
- Domain name / Network: indiquer le nom de domaine. Nous mettrons wiki4games.com.
- Email address: entrer une address e-mail. C'est obligatoire, bien que (à ma connaissance) parfaitement inutile.
Laisser les autres paramètres par défaut, nous les éditerons manuellement. Cliquer sur "Create". Nous allons maintenant éditer manuellement la configuration du domaine. Cliquer sur "Edit Records File". Le contenu du fichier ressemble à:
$ttl 38400 wiki4games.com. IN SOA [nom du serveur]. [nom avant @ de l'e-mail].[domaine de l'e-mail]. ( 1219596591 10800 3600 604800 38400 ) wiki4games.com. IN NS [nom du serveur].
Remplaçons tout cela par:
$ttl 5m @ IN SOA [nom du serveur]. [nom avant @ de l'e-mail].[domaine de l'e-mail]. ( 2008032807 ; serial 3h ; secondary refresh 3m ; secondary retry 2w ; secondary expire 3h ; default record cache time ) @ IN NS [nom du serveur]. @ IN MX 10 mail @ IN A [IP du serveur] mail IN A [IP du serveur] www IN A [IP du serveur] test5 IN A [IP du serveur]
NB: sauf pour les lignes commençant par @, on aurait pu remplacer, par exemple "test5 IN A [IP du serveur]" par "test5 IN CNAME @"
Un petit tour dans le manager...
Dans le manager, indiquer [nom du serveur] en DNS primaire et ns.kimsufi.com (cette valeur est différente pour les serveurs non-kimsufi, commencer par activer le service de DNS secondaire, le nom du serveur y sera mentionné) en DNS secondaire. Il faut également activer le service de DNS secondaire pour le domaine sur le serveur dédié: Accueil → Serveur dédié → [nom du serveur] → Services → DNS secondaire. NB: si vous obtenez une erreur du type "wiki4games.com realNameserver n'est pas défini à [nom du serveur]", cela signifie que ce nom de domaine est déjà rattaché à un autre dédié, et il faut d'abord le désactiver dans cet autre dédié. Voilà, et pour patienter pendant la propagation (au fait, avez-vous bien pensé à redémarrer tous les services que vous avez configuré? BIND, Apache, ProFTPD, etc doivent tous être redémarrer à chaque fois que vous voulez appliquer de nouveau paramètres), un dernier paramètrage, celui d'Apache.
Les virtual hosts d'Apache
Retour dans Webmin. "Servers" → "Apache Webserver" → "Global configuration" → "Edit Config Files" et éditer le fichier /etc/apache2/sites-available/default. A la fin, ajouter (par exemple):
<VirtualHost *> ServerName wiki4games.com DocumentRoot "/home/wiki4games/www/" <Directory "/home/wiki4games/www/"> allow from all Options -Indexes </Directory> </VirtualHost> <VirtualHost *> ServerName wiki4games.com DocumentRoot "/home/wiki4games/www/" <Directory "/home/wiki4games/www/"> allow from all Options -Indexes </Directory> </VirtualHost> <VirtualHost *> ServerName test5.wiki4games.com DocumentRoot "/home/wiki4games/sd/test5" <Directory "/home/wiki4games/sd/test5"> allow from all Options -Indexes </Directory> </VirtualHost>
Epilogue
Nous nous rendons maintenant sur notre domaine.
- Si nous n'obtenons qu'un timeout, les DNS ne sont pas propagés... attendons quelques heures.
- Si nous obtenons "It works!", vous avez oublié de redémarrer Apache!
- Si nous obtenons une page "phpinfo()" qui affiche en gros la version de PHP et en petit une abominable mais très utile liste de paramètres et de modules, c'est tout bon... Il n'y a plus qu'à uploader le vrai site, créer d'autres sous-domaines, etc.
Que manque-t-il dans ce guide?
A part, forcément, de nombreux détails pour aller plus loin, qui devront être précisés dans des pages spécifiques pour chacun des logiciels installés, ce guide oublie:
- la configuration d'un serveur e-mail correct (le serveur que nous venons de configurer ne sait pas recevoir d'e-mails, seulement en envoyer)
- la sécurité: on a mis le minimum, mais il manque quand même fail2ban et peut-être quelques réglages plus fins
...et peut-être d'autres choses importantes(?), mais cette petite liste n'est qu'une piste pour compléter le guide et pour informer ceux qui l'ont suivi des quelques carences qu'il leur reste à gérer (ou pas ;)).
Liens utiles
- Pingability, pour tester la configuration des DNS. Les résultats sont assez didactiques.