Debian 6 beta2 – Serveurs : Apache, Tomcat & Postgres
FrançaisLinuxTutorials
Une série de doc pour garder une archive quelque part…
Le but est d’installer et de configurer un serveur sans IHM sur une base de Debian 6 (j’utilise la beta 2 pour l’instant, la stable n’est pas encore sortie).
J’ai mis tous les logiciels dans le même serveur c’est pour simplifier le tuto, dans le monde réel créez un ou plusieurs serveurs pour chaque logiciel.
Logiciels installé dans ce serveur :
– Apache http serveur 2.3.8
– Apache Tomcat 6 et Java
– PostgreSQL 9
A la question pourquoi ne pas utiliser les installeurs fourni par apt, je répondrai que sur un système en production j’ai besoin de maitriser les versions installées notamment en cas de retour arrière. Pour ça un mécanisme à base de lien symbolique permet une souplesse toute particulière.
———————————————
———- INSTALLATION
Lancez l’installeur en mode expert (graphique ou non c’est vous qui voyez) et installez le bouzin en ne sélectionnant aucun environnement graphique (ça sert à rien…)…
DHCP ou ip statique on s’en moque… pour l’instant et tant que vous êtes connectés.
Créez le compte root mais pas de compte utilisateur (enfin vous faites ce qui vous arrange, dans ce tuto ce n’est pas utile).
Lorsque vous arrivez au choix des paquets pour la sélection des logiciels, choisissez seulement :
– Serveur SSH
– Utilitaires standard du système
Première connexion
Une fois tout installé, se connecter en ssh et mettre à jour et en installant 2 ou 3 choses en plus :
1 | apt-get install -y xinetd unzip elinks bison g++ |
Mise à jour des profils :
1 2 3 4 5 6 7 | cat >> /etc/profile << "EOF" alias ll= 'ls -la --color' alias df = 'df -h' alias ici= 'du -m -h --max-depth=2' EOF |
———————————————
———- LE RESEAU
Configuration d’une adresse IP statique
Il faut regarder à 2 endroits c’est tout. Histoire de vérifier que tout est ok.
Paramètres nécessaire à remplacer par vos informations :
– Adresse IP : 192.168.2.166
– Nom de la machine : SERVER-01
– Nom de la carte : eth0
– Passerelle : 192.168.2.1
Le nom de la machine se trouve dans le fichier /etc/hostname :
1 | vi /etc/hostname |
La conf dhcp ou ip statique est là /etc/network/interfaces :
1 | /etc/network/interfaces |
Il faut remplacer (si vous étiez en dhcp) :
1 | iface eth0 inet dhcp |
par
1 2 3 4 | iface eth0 inet static address 192.168.2.166 netmask 255.255.255.0 gateway 192.168.2.1 |
Et on relance le réseau :
1 2 | ifdown eth0 ifup eth0 |
Puis on vérifie que tout est OK…
1 | ifconfig |
Configuration d’une adresse IP dynamique
La conf dhcp est là /etc/network/interfaces et ce fichier doit ressembler à ça :
1 | vi /etc/network/interfaces |
Et on relance le réseau :
1 2 | ifdown eth0 ifup eth0 |
———————————————
———- LE FIREWALL
Nous allons utiliser iptables qui est installé par défaut.
Comme pour faire toutes ces configurations je suis connecté en ssh, je commence par autoriser tous les accès pour ne pas me retrouver bloqué :
1 | iptables -P INPUT ACCEPT |
Ensuite on supprime toutes les règles existantes :
1 | iptables -F |
Maintenant nous allons ajouter (-A) des règles.
Tout ce qui va vers localhost ou 127.0.0.1 (lo) est accepté :
1 | iptables -A INPUT -i lo -j ACCEPT |
Toutes les connexions qui sont déjà active doivent être gardées :
1 | iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT |
Tout le reste est droppé (on ne le regarde même pas) :
1 | iptables -P INPUT DROP |
Je n’utilise pas mon serveur comme un routeur dons je droppe également ce qui est forwardé (si vous utilisez votre serveur comme un routeur n’ajoutez pas cette règle) :
1 | iptables -P FORWARD DROP |
J’autorise le traffic à ressortir du serveur (sisi ça peut servir) :
1 | iptables -P OUTPUT ACCEPT |
Pour finir j’autorise les ping :
1 | iptables -A INPUT -i eth0 -p icmp -j ACCEPT |
On peut maintenant autoriser les connexions sur le port 22 (ssh) :
1 | iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
Ou alors on peut n’autoriser les connexions ssh que sur un réseau local :
1 | iptables -A INPUT -p tcp -s 192.168.0.0 /24 --dport 22 -j ACCEPT |
Il est possible de lister les règles existantes histoire de vérifier avant l’enregistrement :
1 | iptables -L |
Puis l’on sauvegarde les règles existantes :
1 | iptables-save > /etc/iptables .up.rules |
Pour lancer iptables au démarrage du serveur on créé un fichier contenant :
1 2 3 4 | cat > /etc/network/if-pre-up .d /iptables << "EOF" #!/bin/bash /sbin/iptables-restore < /etc/iptables .up.rules EOF |
Et on lui ajoute les droit d’exécution :
1 | chmod +x /etc/network/if-pre-up .d /iptables |
Et voilà.
———————————————
———- APACHE 2
Installation de librairies supplémentaires :
libexpat1-dev
Téléchargement des sources d’Apache :
1 2 | cd ~ wget -c http: //apache .crihan.fr /dist/httpd/httpd-2 .3.8. tar .gz |
Décompression :
1 2 | tar zxvf httpd-2.3.8. tar .gz cd ~ /httpd-2 .3.8/ |
Préparation de la compilation :
1 | . /configure --prefix= /usr/local/apache-2 .3.8 -- enable -so -- enable -ssl -- enable -ssl=shared -- enable -rewrite -- enable -rewrite=shared --with-z= /usr |
Compilation et installation dans le répertoire /usr/local/apache-2.3.8 :
1 2 | make make install |
Un petit lien symbolique qui sera bien utile en cas de migration vers une version ultérieure plus tard :
1 | ln -s /usr/local/apache-2 .3.8/ /usr/local/apache |
Un peu de ménache :
1 2 | cd ~ rm -Rf ~ /httpd-2 .3.8/ |
Création du groupe et de l’utilisateur pour Apache
1 2 | groupadd www useradd -g www www |
Création d’un script de lancement d’Apache dans /etc/init.d/
1 | cp /usr/local/apache/bin/apachectl /etc/init .d /httpd |
On lance apache :
1 | /etc/init .d /httpd start |
Vérifions que le service est bien lancé :
1 | ps x | grep httpd |
Ce qui doit donner un truc du genre :
1 | 30202 ? Ss 0:00 /usr/local/apache-2 .3.8 /bin/httpd -k start |
On stoppe apache :
1 | /etc/init .d /httpd stop |
Et hop on active apache au lancement du serveur (puis on le coupe lors de l’arrêt), pour ça, éditez le fichier :
1 | vi /etc/init .d /httpd |
Pour ajouter les lignes suivantes au début juste après #!/bin/sh :
Et lancez la commande :
1 | update-rc.d httpd defaults |
Il faut maintenant préparer Apache.
Création des répertoires qui nous servirons à déployer nos sites :
1 2 | mkdir -p /home/www/html mkdir -p /home/www/cgi-bin |
Un petit fichier pour nos amis les robots :
1 | cat > /home/www/html/robots .txt << "EOF" User-agent: * Disallow: / EOF |
Et un fichier d’accueil pour dire bonjour à la planète entière :
1 2 3 | cat > /home/www/html/index .html << "EOF" Bonjour ! EOF |
Affectation des droits à tous ces répertoires :
1 2 | chgrp -R www /home/www chmod -R 775 /home/www |
Un peu de configuration maintenant.
On commence par sauvegarder puis éditer le fichier /usr/local/apache/conf/httpd.conf :
1 | cp /usr/local/apache/conf/httpd .conf /usr/local/apache/conf/httpd .old |
Puis on édite le fichier (pour plus d’info sur vi tapez “vi commandes de bases” dans un site de recherche quelconque) :
1 | vi /usr/local/apache/conf/httpd .conf |
Modifier les lignes suivantes pour correspondre à nos besoins :
– User www
– Group www
– ServerAdmin moncourriel@mondomaine.xx
– ServerName 192.168.2.42:80
– Listen 80
– DirectoryIndex index.html index.php index.jsp
– DocumentRoot/home/www/html
– /home/www/html”>
– ScriptAlias /cgi-bin/ “/home/www/cgi-bin/”
– /home/www/cgi-bin”>
Options FollowSymLinks
AllowOverride All
Allow from all
Le firewall
N’oublions pas de régler le firewall histoire qu’il autorise les connexions sur notre serveur web (http et https) :
1 2 3 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables-save > /etc/iptables .up.rules |
Il ne reste plus qu’à démarrer Apache pour voir si tout fonctionne :
1 | /etc/init .d /httpd start |
Et aller a l’adresse :
1 | elinks http: //127 .0.0.1 |
Doit afficher “Bonjour !
———————————————
———- JAVA 6
Récupérer le bon JDK (au 17/12/2010 : jdk-6u23-linux-i586.bin) par exemple en le téléchargeant avec elinks :
1 2 | cd ~ elinks http: //java .sun.com |
Une fois le téléchargement terminé, permettre l’exécution du fichier :
1 | chmod 700 jdk-6u23-linux-i586.bin |
L’exécuter :
1 2 | chmod +x jdk-6u23-linux-i586.bin . /jdk-6u23-linux-i586 .bin |
Appuyer sur ‘Entrée’ à la fin…
Maintenant on va créer les répertoires et les alias pour simplifier les mises à jour + tard :
1 2 | mv jdk1.6.0_23 /usr/local/java1 .6.0_23 ln -s /usr/local/java1 .6.0_23/ /usr/local/java |
Ajoutons à la fin de /etc/profile des choses (JAVA_HOME + path vers le bin)
1 2 3 4 5 6 7 | cat >> /etc/profile << "EOF" JAVA_HOME= /usr/local/java export JAVA_HOME PATH=$PATH:$JAVA_HOME /bin EOF |
Déconnexion et connexion puis on teste que ça fonctionne :
1 | java -version |
Devrait donner :
Et voilà.
Le firewall
N’oublions pas de régler le firewall au cas ou vous voudriez faire du remote debugging (changez le port en fonction de voter configuration) :
1 2 | iptables -A INPUT -i eth0 -p tcp --dport 8000 -j ACCEPT iptables-save > /etc/iptables .up.rules |
———————————————
———- TOMCAT 6
Allons dans le répertoire de téléchargement et récupérons tomcat (si ce mirroir ne répond pas trouvez-en un autre ) :
1 2 | cd ~ wget -c http: //mirror .ovh.net /ftp .apache.org /dist/tomcat/tomcat-6/v6 .0.29 /bin/apache-tomcat-6 .0.29. tar .gz |
Décompression de tomcat dans /usr/local/ et création des liens symbolique pour simplifier les changements de versions plus tard :
1 2 3 4 | cd /usr/local/ tar zxvf ~ /apache-tomcat-6 .0.29. tar .gz mv apache-tomcat-6.0.29 tomcat-6.0.29 ln -s tomcat-6.0.29/ tomcat |
Création de l’utilisateur qui contrôlera le processus :
1 2 | groupadd tomcat useradd -g tomcat tomcat |
Affectation des droits :
1 2 | chown tomcat:tomcat /usr/local/tomcat chown -R tomcat:tomcat /usr/local/tomcat-6 .0.29 |
Création d’un lanceur pour tomcat :
1 | cat > /etc/init .d /tomcat << "EOF" #!/bin/bash ### BEGIN INIT INFO # Provides: tomcat # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: true # Description: Start up the Tomcat servlet engine at boot time # Short-Description: Starts Tomcat ### END INIT INFO RETVAL=$? TOMCATHOME="/usr/local/tomcat" case "$1" in start) if [ -f $TOMCATHOME/bin/startup.sh ]; then echo $"Starting Tomcat" /bin/su - tomcat -c $TOMCATHOME/bin/startup.sh fi ;; stop) if [ -f $TOMCATHOME/bin/shutdown.sh ]; then TOMCAT_PID=<code>ps -ef | grep java | grep tomcat | awk '{print $2}'</code> echo $"Stopping Tomcat with PID=$TOMCAT_PID" /bin/su - tomcat -c $TOMCATHOME/bin/shutdown.sh sleep 15s kill $TOMCAT_PID fi ;; *) echo $"Usage: $0 {start|stop}" exit 1 ;; esac exit $RETVAL EOF |
On rend ce fichier exécutable :
1 | chmod a+x /etc/init .d /tomcat |
On met à jour le fichier des user de tomcat (le fichier par défaut n’est pas top) :
1 2 3 4 5 6 7 8 9 | cat > /usr/local/tomcat/conf/tomcat-users.xml << "EOF" <!--?xml version='1.0' encoding='utf-8'?--> EOF |
Affectation des répertoires à l’utilisateur tomcat :
1 2 | chown tomcat:tomcat /usr/local/tomcat chown -R tomcat:tomcat /usr/local/tomcat-6 .0.29 |
Sauvegarde du fichier de configuration original :
1 | mv /usr/local/tomcat/conf/server .xml /usr/local/tomcat/conf/server .xml.ORIG |
Création d’un fichier de configuration qui est prêt à fonctionné en mode connecteur avec Apache :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | cat > /usr/local/tomcat/conf/server.xml << "EOF" <!--?xml version='1.0' encoding='utf-8'?--> EOF |
Pour faire fonctionner Tomcat en standelone il suffit d’ajouter la ligne suivante :
1 |
On arrête tomcat (au cas ou il à été démarré) :
1 2 | chmod 700 /etc/init .d /tomcat /etc/init .d /tomcat stop |
On permet à Tomcat de se lancer au démarrage du serveur (et de se couper à l’arrêt du serveur)
1 | update-rc.d tomcat defaults |
Ajoutons à la fin de /etc/profile des choses (CATALINA_HOME) :
1 2 3 4 5 6 | cat >> /etc/profile << "EOF" CATALINA_HOME= /usr/local/tomcat export CATALINA_HOME EOF |
On lance tomcat :
1 | /etc/init .d /tomcat start |
On regarde si Server started s’affiche à la fin du fichier de log :
1 | tail -f /usr/local/tomcat/logs/catalina .out |
Ctrl + c pour sortir du tail.
Le firewall
N’oublions pas de régler au besoin le firewall histoire qu’il autorise les connexions sur notre serveur tomcat :
1 2 3 | iptables -A INPUT -p tcp --dport 8080 -j ACCEPT iptables -A INPUT -p tcp --dport 8009 -j ACCEPT iptables-save > /etc/iptables .up.rules |
———————————————
———- POSTGRESQL 9
Commençons par installer 2 librairies qui nous servirons durant la compilation de Postgres :
1 | apt-get install libreadline-dev gettext |
Allons dans le répertoire de téléchargement et récupérons les sources de Postgres :
1 2 | cd ~ wget -c http: //ftp4 .fr.postgresql.org /pub/mirrors/postgresql/source/v9 .0.2 /postgresql-9 .0.2. tar .gz |
Decompression, préparation de la compilation, compilation et installation dans le répertoire /usr/local/pgsql-9.0.2 :
1 2 3 4 5 | tar zxvf postgresql-9.0.2. tar .gz cd ~ /postgresql-9 .0.2 . /configure --prefix= /usr/local/pgsql-9 .0.2 -- enable -nls= 'fr' --with-openssl -- enable -thread-safety make make install |
Copions le script de lancement de Postgres dans /etc/rc.d/init.d/ :
1 2 | cp contrib /start-scripts/linux /etc/init .d /pgsql chmod 744 /etc/init .d /pgsql |
Un peu de ménage :
1 2 | cd ~ rm -Rf postgresql-9.0.2 |
Puis l’on créer l’utilisateur qui exécutera le process Postgres :
1 2 3 4 | groupadd postgres useradd -g postgres postgres mkdir -p /home/postgres/data chown postgres /home/postgres/data |
Création d’un lien symbolique pour simplifier une éventuelle migration + tard :
1 2 | rm -f /usr/local/pgsql ln -s /usr/local/pgsql-9 .0.2/ /usr/local/pgsql |
On se connecte avec l’utilisateur postgres :
1 | su - postgres |
Et on initialise la base de données :
1 2 3 4 5 6 7 8 9 | /usr/local/pgsql/bin/initdb -D /home/postgres/data -A md5 -W -E UTF-8 Saisissez le nouveau mot de passe du super-utilisateur : adminPassword [shell] On autorise la connexion distante aux bases de données : [shell] cat >> /home/postgres/data/pg_hba .conf << "EOF" host all all 192.168.2.0 255.255.0.0 md5 EOF |
On déconnecte l’utilisateur Postgres (Ctrl + D) ou :
1 | exit |
On édite le fichier de lancement de Postgres :
1 | vi /etc/init .d /pgsql |
Pour ajouter les lignes suivantes au début juste après #!/bin/sh :
Et lancez la commande :
1 | update-rc.d pgsql defaults |
Il faut maintenant préparer Apache.
Pour d’une part préciser le répertoire de destination :
1 2 | # Data directory PGDATA= "/home/postgres/data" |
Et d’autre part, remplacer les 2 :
1 | $DAEMON -D |
par
1 | $DAEMON -i -D |
Pour autoriser les connexions distantes (clients SQL)
Ensuite on affecte les droit qui vont bien à tous les répertoires :
1 2 3 | chmod 700 /etc/init .d /pgsql /etc/init .d /pgsql stop /etc/init .d /pgsql start |
Et voilà.
Le firewall
N’oublions pas de régler le firewall histoire qu’il autorise les connexions distantes sur notre serveur :
1 2 | iptables -A INPUT -p tcp --dport 5432 -j ACCEPT iptables-save > /etc/iptables .up.rules |
Leave a comment