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

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 :

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 :

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 :

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 &gt; /etc/init.d/tomcat &lt;&lt; "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 &gt; /usr/local/tomcat/conf/tomcat-users.xml &lt;&lt; "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 &gt; /usr/local/tomcat/conf/server.xml &lt;&lt; "EOF"
<!--?xml version='1.0' encoding='utf-8'?-->

&nbsp;
&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;



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 :

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

 

Previous
Arduino – Capteur de luminosité
Next
CentOS 5.5 – Install Tomcat 7

Leave a comment

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.