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 :
apt-get install -y xinetd unzip elinks bison g++
Mise à jour des profils :
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 :
vi /etc/hostname
La conf dhcp ou ip statique est là /etc/network/interfaces :
/etc/network/interfaces
Il faut remplacer (si vous étiez en dhcp) :
iface eth0 inet dhcp
par
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 :
ifdown eth0 ifup eth0
Puis on vérifie que tout est OK…
ifconfig
Configuration d’une adresse IP dynamique
La conf dhcp est là /etc/network/interfaces et ce fichier doit ressembler à ça :
vi /etc/network/interfaces
1 2 3 4 5 6 7 |
# The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet dhcp |
Et on relance le réseau :
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é :
iptables -P INPUT ACCEPT
Ensuite on supprime toutes les règles existantes :
iptables -F
Maintenant nous allons ajouter (-A) des règles.
Tout ce qui va vers localhost ou 127.0.0.1 (lo) est accepté :
iptables -A INPUT -i lo -j ACCEPT
Toutes les connexions qui sont déjà active doivent être gardées :
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Tout le reste est droppé (on ne le regarde même pas) :
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) :
iptables -P FORWARD DROP
J’autorise le traffic à ressortir du serveur (sisi ça peut servir) :
iptables -P OUTPUT ACCEPT
Pour finir j’autorise les ping :
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
On peut maintenant autoriser les connexions sur le port 22 (ssh) :
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Ou alors on peut n’autoriser les connexions ssh que sur un réseau local :
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 :
iptables -L
Puis l’on sauvegarde les règles existantes :
iptables-save > /etc/iptables.up.rules
Pour lancer iptables au démarrage du serveur on créé un fichier contenant :
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 :
chmod +x /etc/network/if-pre-up.d/iptables
Et voilà.
———————————————
———- APACHE 2
Installation de librairies supplémentaires :
1 |
apt-get install libapr1 libapr1-dev libpcre3 libpcre3-dev libaprutil1-dev |
libexpat1-dev
Téléchargement des sources d’Apache :
cd ~ wget -c http://apache.crihan.fr/dist/httpd/httpd-2.3.8.tar.gz
Décompression :
tar zxvf httpd-2.3.8.tar.gz cd ~/httpd-2.3.8/
Préparation de la compilation :
./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 :
make make install
Un petit lien symbolique qui sera bien utile en cas de migration vers une version ultérieure plus tard :
ln -s /usr/local/apache-2.3.8/ /usr/local/apache
Un peu de ménache :
cd ~ rm -Rf ~/httpd-2.3.8/
Création du groupe et de l’utilisateur pour Apache
groupadd www useradd -g www www
Création d’un script de lancement d’Apache dans /etc/init.d/
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
On lance apache :
/etc/init.d/httpd start
Vérifions que le service est bien lancé :
ps x | grep httpd
Ce qui doit donner un truc du genre :
30202 ? Ss 0:00 /usr/local/apache-2.3.8/bin/httpd -k start
On stoppe apache :
/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 :
vi /etc/init.d/httpd
Pour ajouter les lignes suivantes au début juste après #!/bin/sh :
1 2 3 4 5 6 7 8 9 10 |
### BEGIN INIT INFO # Provides: httpd # 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: Starts Apache server at boot time # Short-Description: Starts Apache ### END INIT INFO |
Et lancez la commande :
update-rc.d httpd defaults
Il faut maintenant préparer Apache.
Création des répertoires qui nous servirons à déployer nos sites :
mkdir -p /home/www/html mkdir -p /home/www/cgi-bin
Un petit fichier pour nos amis les robots :
cat > /home/www/html/robots.txt << "EOF" User-agent: * Disallow: / EOF
Et un fichier d’accueil pour dire bonjour à la planète entière :
cat > /home/www/html/index.html << "EOF" Bonjour ! EOF
Affectation des droits à tous ces répertoires :
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 :
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) :
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) :
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 :
/etc/init.d/httpd start
Et aller a l’adresse :
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 :
cd ~ elinks http://java.sun.com
Une fois le téléchargement terminé, permettre l’exécution du fichier :
chmod 700 jdk-6u23-linux-i586.bin
L’exécuter :
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 :
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)
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 :
java -version
Devrait donner :
1 2 3 |
java version "1.6.0_23" Java(TM) SE Runtime Environment (build 1.6.0_23-b05) Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing) |
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) :
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 🙂 ) :
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 :
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 :
groupadd tomcat useradd -g tomcat tomcat
Affectation des droits :
chown tomcat:tomcat /usr/local/tomcat chown -R tomcat:tomcat /usr/local/tomcat-6.0.29
Création d’un lanceur pour tomcat :
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 :
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) :
cat > /usr/local/tomcat/conf/tomcat-users.xml << "EOF" <!--?xml version='1.0' encoding='utf-8'?--> EOF
Affectation des répertoires à l’utilisateur tomcat :
chown tomcat:tomcat /usr/local/tomcat chown -R tomcat:tomcat /usr/local/tomcat-6.0.29
Sauvegarde du fichier de configuration original :
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 :
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 :
On arrête tomcat (au cas ou il à été démarré) :
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)
update-rc.d tomcat defaults
Ajoutons à la fin de /etc/profile des choses (CATALINA_HOME) :
cat >> /etc/profile << "EOF" CATALINA_HOME=/usr/local/tomcat export CATALINA_HOME EOF
On lance tomcat :
/etc/init.d/tomcat start
On regarde si Server started s’affiche à la fin du fichier de log :
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 :
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 :
apt-get install libreadline-dev gettext
Allons dans le répertoire de téléchargement et récupérons les sources de Postgres :
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 :
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/ :
cp contrib/start-scripts/linux /etc/init.d/pgsql chmod 744 /etc/init.d/pgsql
Un peu de ménage :
cd ~ rm -Rf postgresql-9.0.2
Puis l’on créer l’utilisateur qui exécutera le process Postgres :
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 :
rm -f /usr/local/pgsql ln -s /usr/local/pgsql-9.0.2/ /usr/local/pgsql
On se connecte avec l’utilisateur postgres :
su - postgres
Et on initialise la base de données :
/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 :
exit
On édite le fichier de lancement de Postgres :
vi /etc/init.d/pgsql
Pour ajouter les lignes suivantes au début juste après #!/bin/sh :
1 2 3 4 5 6 7 8 9 10 |
### BEGIN INIT INFO # Provides: pgsql # 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: Starts PostgreSQL server at boot time # Short-Description: Starts PostgreSQL ### END INIT INFO |
Et lancez la commande :
update-rc.d pgsql defaults
Il faut maintenant préparer Apache.
Pour d’une part préciser le répertoire de destination :
# Data directory PGDATA="/home/postgres/data"
Et d’autre part, remplacer les 2 :
$DAEMON -D
par
$DAEMON -i -D
Pour autoriser les connexions distantes (clients SQL)
Ensuite on affecte les droit qui vont bien à tous les répertoires :
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 :
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT iptables-save > /etc/iptables.up.rules
Leave a comment