Retour : Page Principale > sommaire serveurs & domaines > Agathis

Procédure de configuration d'Agathis


Configuration du système

Serveur de nom
Pas besoin de serveur de nom (c'est mon choix !). Désinstallation si nécessaire.

Mise à jour générale
Lancement de la commande de mise à jour générale :

apt-get update
apt-get upgrade

Redémarrer la machine si nécessaire (en cas d'upgrade d'un paquet linux-image...).

Mise Ă  jour de l'heure
Installer ntpdate si nécessaire : ntpdate fr.pool.ntp.org

Vérification différence vi et vim
Si en éditant un fichier avec la commande vi, l'appui sur la touche "INSER" ne bascule pas en mode insertion, il faut alors utiliser vim.
Vous pouvez aussi lancer la commande suivante pour résoudre le problème :

apt-get install vim
update-alternatives --config vi (doit contenir : vim.basic)
update-alternatives --display vi (en cas de problème mais normalement fait pas l'install de vim)


Configuration de bash
Pour root créer un fichier ~/.bashrc avec les droits 640 contenant :
# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

#-----------------------------------------------------------------------------------------------------------#
# GESTION du PROMPT

NORMAL="\\033[0;39m"
VERT="\\033[1;32m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
BLANCLAIR="\\033[1;08m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

#-----------------------------------------------------------------------------------------------------------#
# You may uncomment the following lines if you want `ls' to be colorized:
 export LS_OPTIONS='--color=auto'
 eval "`dircolors`"
 alias ls='ls $LS_OPTIONS'
 alias ll='ls $LS_OPTIONS -l'
 alias l='ls $LS_OPTIONS -lA'

# Some more alias to avoid making mistakes:
 alias rm='rm -i'
 alias cp='cp -i'
 alias mv='mv -i'


Pour admin créer un fichier ~/.bashrc avec les droits 640 contenant :
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
# don't overwrite GNU Midnight Commander's setting of `ignorespace'.
HISTCONTROL=$HISTCONTROL${HISTCONTROL+:}ignoredups
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi  
fi

NORMAL="\\033[0;39m"
VERT="\\033[1;32m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
BLANCLAIR="\\033[1;08m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[1;33m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi

# some more ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -Al'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi


Pour les autres utilisateurs créer un fichier ~/.bashrc comme pour admin avec les droits 640 contenant la même chose que pour admin.:
Vous remplacerez la ligne :
PS1='${debian_chroot:+($debian_chroot)}\[\033[1;33m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
par
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Pour root, admin et les autres utilisateurs :
  • supprimer l'Ă©ventuel fichier : ~/.bash_profile
  • crĂ©er un fichier ~/.profile avec les droits 640 contenant :
# ~/.profile: executed by Bourne-compatible login shells.
export LC_ALL="fr_FR.UTF-8"
export LANG="fr_FR.UTF-8"
export LANGUAGE="fr_FR.UTF-8"

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi  
fi


Configuration de vim
Créer un fichier .vimrc à mettre dans /root et /home/admin contenant :
".vimrc
" Nombre d'espaces qu'une tabulation prend.
set tabstop=4
" Empêche vim de créer une sauvegarde avant d'écrire sur un fichier.
set nobk
" Active le surlignage syntaxique de vim.
syntax on
" Oblige vim � ins�rer les tabulations comme des caract�res au lieu d'ins�rer un ensemble d'espaces.
set noexpandtab
" Affiche les numéros de ligne
set nu
" Utiliser des couleurs correctes sur un fond noir.
set background=dark


Ajout de sources logicielles
Vérifions les sources logicielles et ajoutons contrib non-free.
vi /etc/apt/source.list :

deb ftp://mir1.ovh.net/debian/ etch main contrib non-free
deb-src ftp://mir1.ovh.net/debian/ etch main contrib non-free

deb http://security.debian.org/ etch/updates main contrib non-free
deb-src http://security.debian.org/ etch/updates main contrib non-free


Installation de MC
Je ne peux pas me passer de midnight commander :
apt-get install mc

Réorganisation du répertoire /var/log
Création d'un lien : /var/log --> /home/log
  • PrĂ©partion du dossier /home :
    • chmod -R -s /home
    • chown root:root /home
  • ArrĂŞt des demons qui Ă©crivent dans /var/log
    • /etc/init.d/rsyslog stop
    • /etc/init.d/cron stop
  • CrĂ©ation du dossier log : mkdir /home/log
  • DĂ©placement du contenu du dossier log : (cd /var/log; tar -cvf - .) | (cd /home/log;tar -xvf -)
  • CrĂ©ation du lien :
    • rm -Rf /var/log
    • ln -s /home/log /var/log
  • RedĂ©marrage des serveurs :
    • /etc/init.d/cron start
    • /etc/init.d/rsyslog start

Création espace administration / gestion des scripts / mise à jour du système
useradd -g users admin
mkdir /home/admin
chown admin:users /home/admin/
su - admin
mkdir src
mkdir src/targz
mkdir script
mkdir save
mkdir www


Installation de sudo et ajout du compte admin
  • apt-get install sudo
  • vi /etc/sudoers
    • Laisser en place : root ALL=(ALL) ALL
    • Modifier la ligne : admin ALL=(ALL) ALL
    • Le fichier est en lecture seule. Pour sauver avec vi utiliser : w!

Configuration de l'envoie de mail via Mail
  • Lancer la commande dpkg-reconfigure exim4-config voici les rĂ©ponses Ă  fournir:
    • Type de configuration : Distribution directe par SMTP (site internet)
    • Nom de courriel du système  : agathis.tela-botanica.net
    • Liste d'adresses IP oĂą Exim sera en attente de connexions SMTP entrantes : 127.0.0.1 ; ::1
    • Autres destinations dont le courriel doit ĂŞtre accepté : agathis.tela-botanica.net
    • Domaines Ă  relayer : _
    • Machines Ă  relayer : _
    • Faut-il minimiser les requĂŞtes DNS (connexions Ă  la demande) ? : Oui
    • MĂ©thode de distribution du courrier local : Format « mbox » dans /var/mail
    • Faut-il sĂ©parer la configuration dans plusieurs fichiers ? : Non
  • Tester l'envoie de mail : echo "Test 1 - Agathis"|mail -s "Test mail Agathis" votre_mail@tela-botanica.org

Services au démarrage
  • Installer l'utilitaire rcconf qui permet de dĂ©finir les services Ă  lancer lors du dĂ©marrage de la machine : apt-get install rcconf
  • Lancer l'utilitaire : rcconf => utiliser les flèches pour vous dĂ©placer et la barre espace pour cocher/dĂ©cocher les services
  • État lors de la fin de la config :
[*] acpid
[*] atd
[*] bootlogs
[*] console-setup
[*] cron
[*] exim4
[*] kbd
[*] keyboard-setup
[*] module-init-tools
[*] munin-node
[*] mysql
[*] nfs-common
[*] nfs-kernel-server
[*] nginx
[*] php-54-fpm
[*] portmap
[*] procps
[*] rsync
[*] rsyslog
[*] shorewall
[*] ssh
[*] sudo
[*] udev
[*] vsftpd
[*] x11-common
[ ] php-55-fpm
[*] sphinx


Mise en place des sauvegardes
Se connecter sur le serveur de sauvegarde :
  • mkdir /home/agathis
  • chmod 777 /home/agathis
  • Éditer le fichier de snapshot : vi /etc/snapshot/include.txt et ajouter la ligne /home/agathis
Sur Agathis :
  • Installer rsync : apt-get install rsync
  • CrĂ©er un dossier .ssh pour backup :
    • mkdir /var/backup/.ssh
    • chown backup:backup /var/backup/.ssh
    • chmod 700 /var/backup/.ssh
  • Se connecter en tant qu'utilisateur backup : su - backup
    • GĂ©nĂ©rer la clĂ© ssh : ssh-keygen -t rsa
    • Ajouter le contenu du fichier /var/backup/.ssh/id_rsa.pub au fichier /var/backup/.ssh/authorized_keys prĂ©sent sur le serveur de sauvegarde
  • CrĂ©er les scripts de backup :
    • cd /usr/local/sbin/
    • CrĂ©er un script backup_dist avec le contenu ci-dessous : vi /usr/local/sbin/backup_dist
    • CrĂ©er un script backup_mysql avec le contenu ci-dessous : vi /usr/local/sbin/backup_mysql
    • chmod 744 backup_*
  • CrĂ©er les scripts cron de backup :
    • cd /etc/cron.daily
    • CrĂ©er un script ndistbackup avec le contenu ci-dessous : vi /etc/cron.daily/ndistbackup
    • CrĂ©er un script mysqlbackup avec le contenu ci-dessous : vi /etc/cron.daily/mysqlbackup
    • chmod 755 *backup

Fichier backup_dist :
Utilisation : /usr/local/sbin/backup_dist /home/utilisateur
#!/bin/bash
source=$1
destination=backup@adansonia:/home/agathis/
rsync -auR --stats --exclude *tmp* -e 'ssh -i /var/backups/.ssh/id_rsa' --delete $source $destination >> $2


Fichier backup_mysql :
Utilisation : /usr/local/sbin/backup_mysql utilisateur nom_bdd_01 nom_bdd_02
#/bin/bash
# Sauvegarde base de donnee dans /home/utilisateur/bases sur 7 jours ...
# Mai 2004 David Delon Inspiration Faq ovh
# Parametres :
# $1 utilisateur
# $2 base (ou liste de bases séparées par des espaces)
# Le mot de passe de l'administrateur de base de donnee est present dans ce
# script en clair, c'est pas bien : faut chmoder en 700 ce truc.
user=$1
/bin/mkdir -p /home/$user/bases/tmp 2>/dev/null
cd /home/$user/bases;
shift
for base in $*
do
# On verifie que la base existe
        /usr/bin/touch tmp/$base.sql
        if [ -d /home/mysql/$base ] ; then
                /usr/local/mysql/bin/mysqldump --add-drop-table -u root $base -f > tmp/$base.sql;
        fi
done
/bin/tar zcf bases-$(/bin/date -I).tar.gz tmp/*.sql --remove-files
/usr/bin/find /home/$user/bases/bases*.gz -mtime +7 -exec /bin/rm -f {} \;
chown $user:$user -R /home/$user/bases


Fichier ndistbackup :
#!/bin/bash
date=`date +"%F"`
log="/tmp/sauve_distant_"$date".log"
debut=`date +"%c"`
echo "------------------------------------------------------------------------" >> $log
echo "Place disponible sur les disques de Agathis :"
df -h >> $log
echo "------------------------------------------------------------------------" >> $log
echo "Debut sauvegarde distante Agathis : $debut" >> $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /etc :" >> $log
/usr/local/sbin/backup_dist /etc $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/admin/www :" >> $log
/usr/local/sbin/backup_dist /home/admin/www $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/admin/script :" >> $log
/usr/local/sbin/backup_dist /home/admin/script $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/apitela :" >> $log
/usr/local/sbin/backup_dist /home/apitela $log
echo "------------------------------------------------------------------------" >> $log
fin=`date +"%c"`
echo "Fin sauvegarde distante Agathis  $fin" >> $log
echo "------------------------------------------------------------------------" >> $log
cat $log|mail -s "Sauvegarde Agathis rapport du $fin" david.delon@clapas.net
cat $log|mail -s "Sauvegarde Agathis rapport du $fin" jpm@tela-botanica.org
rm -f $log


Fichier mysqlbackup :
#!/bin/bash
/usr/local/sbin/backup_mysql apitela tb_eflore
/usr/local/sbin/backup_mysql apitest tb_eflore_test tb_cel_test tb_del_test tela_prod_v4


Installations


Installation des outils nécessaires à la compilation
apt-get install build-essential autoconf automake libtool cmake make g++

Installation de Mysql pour gérer plusieurs instances
Voir le script dans /home/admin/script :

Installation de pt-query-digest (Percona Toolkit)
Script Perl permettant de faire l'analyse des slow-query.
Pour l'installation, utiliser le script : percona-toolkit_2.2.5.sh

Installation de Mysql Tunner
apt-get install mysqltuner
Pour l'utilisation voir le mémo sur l'optimisation de Mysql.

Installation de Php et php-fpm
Préparer le dossier d'installation de Php :
  • cd /usr/local/
  • mkdir php : dossier contenant les diffĂ©rentes version de php (5.2, 5.4, 5.5...)
  • mkdir php/backup : dossier contenant le backup des diffĂ©rents binaires php
Voir script dans /home/admin/script :
  • Passer en admin : su - admin
  • Se rendre dans le dossier des scripts : cd script/
  • Lancer le script : sh php_5.4.17.sh
Préparer le dossier de config :
  • mkdir /etc/php
  • mv /usr/local/php/5.4/etc /etc/php/5.4
  • ln -s /etc/php/5.4 /usr/local/php/5.4/etc
Installer le fichier php.ini :
  • cp /home/admin/src/php-5.4.17/php.ini-production /etc/php/5.4/php.ini
  • Modifier les paramètres du fichier php.ini : vi /etc/php/5.4/php.ini
    • upload_max_filesize = 50M
    • post_max_size = 50M
    • short_open_tag = On
    • memory_limit = 1024M ; A cause du widget carto... mettre 512 si possible
    • max_execution_time = 60
    • max_input_time = 60

Activer les extensions dans php.ini :
; Ajout de l'extension imagick (jpm & mathias) [22-11-2013]
; Elles sont cherchées par défaut dans : /lib64/extensions/no-debug-non-zts-xxx/
extension=imagick.so

; Activation de opcache (mathias) [29-08-2014]
zend_extension=opcache.so
;opcache.memory_consumption=64  
;opcache.max_accelerated_files=2000

Les extensions sont stockées dans les dossiers suivant :
  • php 5.4 : /lib64/extensions/no-debug-non-zts-20100525/
  • php 5.5 : /lib64/extensions/no-debug-non-zts-20121212/
  • php 5.6 : /lib64/extensions/no-debug-non-zts-20131226/

Et installer le moniteur pour opcache dans /home/apitest/www :
- wget https://raw.github.com/amnuts/opcache-gui/master/index.php -O op.php
On peut ensuite le consulter Ă  la page :
- http://api-test.tela-botanica.org/op.php

Installer le démon php-fpm :
  • cp /home/admin/src/php-5.4.17/sapi/fpm/init.d.php-fpm /etc/init.d/php-54-fpm
  • chmod +x /etc/init.d/php-54-fpm
  • Afin de permettre Ă  admin dÂ’accĂ©der aux diffĂ©rentes versions de php-fpm, pour que l'on puisse accĂ©der au status et ping, il est nĂ©cessaire de donnĂ©es les droits Ă  admin sur les fichiers .sock. Pour ce faire, ajouter la ligne suivante dans /etc/init.d/php-54-fpm dans la section "start" après echo "done" :
# [2014-08-29] (jpm) : Changement des droits du .sock pour accéder au status et ping depuis admin
chown root:admin /var/run/php-54-fpm.sock


Configuer php-fpm :
  • cp /etc/php/5.4/php-fpm.conf.default /etc/php/5.4/php-fpm.conf
  • Modifier le fichier /etc/php/5.4/php-fpm.conf :
    • Ligne 15 -> dĂ©commenter : include=etc/fpm.d/*.conf
    • Ligne 32 -> indiquer le chemin vers le fichier de log : error_log = /home/log/php-54-fpm.log
    • Ligne 159 -> indiquer le socket unix : listen = /var/run/php-54-fpm.sock;
  • CrĂ©er le dossier contenant les fichiers ini de chaque site : mkdir /etc/php/5.4/fpm.d/
  • DĂ©marrer php-fpm : /etc/init.d/php-54-fpm start
  • VĂ©rifier le status de php-fpm : netstat -tlnp |grep php-fpm
Ajouter des directives au niveau du fichier de configuration propre Ă  la pool (cot cot).
Exemple pour apitest , fichier /etc/php/5.5/fpm.d/api-test.tela-botanica.org.pool.conf
; Doc sur les paramètres : http://www.php.net/manual/fr/install.fpm.configuration.php
[apitest]
listen = /var/run/apitest_fpm.sock
listen.owner = apitest
listen.group = apitest
listen.mode = 0660
user = apitest
group = apitest
pm = dynamic
pm.max_children = 16
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 1000
request_terminate_timeout = 3600s
chdir = /
php_admin_value[session.save_path] = "/home/apitest/_sessions"
php_admin_value[open_basedir] = "/lib/php:/home/apitest:/usr/share/pear:/usr/share/php:/tmp:/usr/local/lib/php:/home/apitest/www/images"
catch_workers_output = yes


Installer la bibliothèque imagemagick et l'extension PHP imagick :
Utiliser le script /home/admin/script/imagemagick-6.7.4-7.sh pour avoir la lib imagemagick dans le système.
Le script s'occupe de compiler l'extension pour PHP 5.5 et 5.4.
Pour mémoire les extensions compilées se trouvent dans : /lib64/extensions/no-debug-non-zts-20121212/ (où 20121212 peut changer suivant la date de compilation de php)

Installation de Nginx
Voir l'aide sur Nginx.
Voir script dans /home/admin/script :
  • Passer en admin : su - admin
  • Se rendre dans le dossier des scripts : cd script/
  • Lancer le script : sh nginx_1.4.1.sh
Créer le dossier de cache de nginx :
  • mkdir /var/cache/nginx
  • chown www-data:www-data /var/cache/nginx
Préparer le dossier de config :
  • cd /etc/nginx
  • mkdir sites-available : contient les fichiers de config pour chaque domaine virtuel
  • mkdir sites-enabled : permet Ă  l'aide de lien d'activer ou pas un site sans supprimer son fichier de config
Créer un espace "localhost" :
  • mkdir /home/admin/www/agathis
  • chown admin:admin /home/admin/www/agathis
  • Ajouter le fichier "agathis.tela-botanica.net.conf" dĂ©crit ci-dessous au dossier /etc/nginx/sites-available/
  • CrĂ©er un lien dans le dossiers /etc/nginx/sites-enabled/ : ln -s /etc/nginx/sites-available/agathis.tela-botanica.net.conf /etc/nginx/sites-enabled/agathis.tela-botanica.net.conf
Adapter le fichier nginx.conf avec le contenu indiqué ci-dessous : vi /etc/nginx/nginx.conf
Démarrer le serveur : /etc/init.d/nginx start

Fichier /etc/nginx/nginx.conf :
user  www-data www-data; # Default: nobody
worker_processes  8; # Default : 1
# Nombre de fichiers ouverts par processeur
worker_rlimit_nofile 100000;

pid /var/run/nginx.pid

# [ debug | info | notice | warn | error | crit ]
error_log  /var/log/nginx-error.log  info;

events {
    worker_connections  4096; # Default : 1024
    # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;
    # use kqueue;
    use epoll;
}

http {
    include  mime.types;
    # include  /etc/nginx/fastcgi.conf;
    index    index.html index.htm index.php;

    default_type  application/octet-stream;

    log_format main   '"$remote_addr" $host [$time_local] '
                                '"$request" $status $body_bytes_sent '
                                '$request_length $bytes_sent "$http_referer" '
                                '"$http_user_agent" $request_time "$gzip_ratio"';

    # La ligne ci-dessous semble inutile puisqu'il faut la redéfinir dans chaque vhost : server {}
    access_log  /var/log/nginx-access.log  main;

    sendfile       on;
    tcp_nopush     on;

    # 1er param : timeout pour les connections keep-alive ; 2ème param : valeur du header "Keep-Alive: timeout=" envoyé en réponse
    keepalive_timeout 30 30;
    # délai d'attente de la réponse de php-fpm : à accorder avec request_terminate_timeout dans la conf de php-fpm
    fastcgi_read_timeout 3600s;

    gzip on;
    gzip_comp_level 9; # 1 <= level <= 9
    gzip_min_length 50; # les fichiers plus petits que 50 octets ne sont pas compressés
    # types de fichiers Ă  compresser
    gzip_types
        text/css
        text/plain
        text/javascript
        application/javascript
        application/json
        application/x-javascript
        application/xml
        application/xml+rss
        application/xhtml+xml
        application/x-font-ttf
        application/x-font-opentype
        application/vnd.ms-fontobject
        image/svg+xml
        image/x-icon
        application/rss+xml
        application/atom_xml;

    # Load all vhosts !
    include /etc/nginx/sites-enabled/*.conf
}


Config pour agathis.tela-botanica.org dans /etc/nginx/site-available/agathis.tela-botanica.org.conf :
server {
    server_name agathis.tela-botanica.net www.agathis.tela-botanica.net;
    root "/home/admin/www/agathis";

    index index.html;
    client_max_body_size 10m;

    access_log /home/admin/_logs/access.log;
    access_log /var/log/nginx-access.log main;  
    error_log /home/admin/_logs/error.log;

    #################################################################################################
    # BLOCAGE - Bloquer l'accès à certains robots et extracteurs de contenu

    # Bloquer l'accès à certains robots
    if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { 
        return 401;
    }   
    # Bloquer l'accès aux extracteurs de contenu
    if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { 
        return 401;
    }   

    #################################################################################################
    # PROTECTION - Éviter l'affichage de fichiers sensibles

    # Éviter l'affichage du contenu des dossiers des gestionnaires de versions
    location ~ "\.(svn|git|hg|bzr|cvs)" {
        return 404;
    }   

    # Eviter l'affichage des fichiers de config en .ini
    location ~ "\.ini$" {
        return 404;
    }   

    # Eviter l'affichage des fichiers senssibles
    location ~ "\.(htaccess|htpasswd)$" {
        return 404;
    }   
    
    ###########################################################################################################
    # TOMCAT    

    # Redirection de port
    location /tomcat {
        rewrite ^/tomcat(.*)$ $1 break;
        #rewrite /tomcat / break;
        proxy_pass http://localhost:8080;
        proxy_redirect default;
        proxy_set_header  X-Real-IP  $remote_addr;
    }   

    ###########################################################################################################
    # STATUTS

    location /nginx_status {
        stub_status on; 
        access_log off;
        allow 127.0.0.1;
        allow 193.54.123.216;
        allow 162.38.234.0/24;
        deny all;
    }

    # Statuts PHP-FPM 5.6
    # ATTENTION : pour voir ces infos, le fichier php-56-fpm.sock doit avoir un droit de lecture pour l'utilisateur "admin"
    location ~ ^/php-56-fpm-(status|ping)$ {
        access_log off;
        include fastcgi_params;
        fastcgi_pass   unix:/var/run/php-56-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        allow 127.0.0.1;
        allow 193.54.123.216;
        allow 162.38.234.0/24;
        deny all;

    # Statuts PHP-FPM 5.5
    # ATTENTION : pour voir ces infos, le fichier php-55-fpm.sock doit avoir un droit de lecture pour l'utilisateur "admin"
    location ~ ^/php-55-fpm-(status|ping)$ {
        access_log off;
        include fastcgi_params;
        fastcgi_pass   unix:/var/run/php-55-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        allow 127.0.0.1;
        allow 193.54.123.216;
        allow 162.38.234.0/24;
        deny all;
    }

    # Statuts PHP-FPM 5.4
    # ATTENTION : pour voir ces infos, le fichier php-54-fpm.sock doit avoir un droit de lecture pour l'utilisateur "admin"
    location ~ ^/php-54-fpm-(status|ping)$ {
        access_log off;
        include fastcgi_params;
        fastcgi_pass   unix:/var/run/php-54-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        allow 127.0.0.1;
        allow 193.54.123.216;
        allow 162.38.234.0/24;
        deny all;
    }

    #################################################################################################
    # Réecritures générales

    location / {
        try_files $uri $uri/ /index.php$uri?$args;
    }

    location ~ "^(.+\.php)($|/)" {
        fastcgi_split_path_info ^(.+\.php)(.*)$;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SERVER_NAME $host;

        if ($uri !~ "^/uploads/") {
            fastcgi_pass   unix:/var/run/admin_fpm.sock;
        }
        include fastcgi_params;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
        access_log off;
    }

    location ~* \.(html|htm)$ {
        expires 30m;
    }
}


Config pour api.tela-botanica.org dans /etc/nginx/site-available/api.tela-botanica.org.conf :
(s'en inspirer pour api-test.tela-botanica.org , en ajustant le server_name, le root, les logs etc.)
server {
    server_name api.tela-botanica.org www.api.tela-botanica.org;
    root "/home/apitela/www";

    index index.php;
    client_max_body_size 50m;

    access_log /home/apitela/_logs/access.log;
    access_log /var/log/nginx-access.log main;
    error_log /home/apitela/_logs/error.log;

    if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { 
        return 401;
    }   

    if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { 
        return 401;
    }   

    # Éviter l'affichage du contenu des dossiers des gestionnes de versions
    location ~ "\.(svn|git|hg|bzr|cvs)" {
        return 404;
    }

    # Eviter l'affichage des fichiers de config en .ini
    location ~ "\.ini$" {
        return 404;
    }

    location / { 
        try_files $uri $uri/ /index.php$uri?$args;
    }

    # Fichiers pas libres (bouh)
    location ~ "/donnees/(baseflor|baseveg|lion1906|nasa-srtm|nvjfl|osm|plantscan|sophy|tl2|wikipedia)" {
        return 404;
    }

    # CORS dynamique multi-domaines (trop de la boulette)
    set $cors_origine_acceptee "http://www.tela-botanica.org";
    if ($http_origin ~* (www\.tela-botanica\.org|localhost)) {
        set $cors_origine_acceptee "$http_origin";
    }

    # EntĂŞtes pour CORS
    add_header Access-Control-Allow-Origin "$cors_origine_acceptee"; # mode dynamique
    add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
    add_header Access-Control-Allow-Credentials "true";
    add_header Access-Control-Expose-Headers "X-DebugJrest-Data";

    # redéfinition par défaut de la query_string
    set $query_string_api $args;

    location ~ "^(.+\.php)($|/)" {
        fastcgi_split_path_info ^(.+\.php)(.*)$;

        include /etc/nginx/fastcgi.conf;
        fastcgi_pass   unix:/var/run/apitest_fpm.sock;

        # Réecriture des headers pour l'API d'eFlore
        fastcgi_param REQUEST_URI $request_uri_api;
        fastcgi_param QUERY_STRING $query_string_api;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
        access_log off;
    }
    
    location ~* \.(html|htm)$ {
        expires 30m;
    } 
}


Installation du script de création des domaines virtuels
  • cd /home/admin/script
  • wget http://www.sebdangerfield.me.uk/wp-content/uploads/2012/05/create_php_vhost.tar.gz
  • tar xzvf create_php_vhost.tar.gz
  • mv create_php_vhost.tar.gz create_php_vhost/
  • cd create_php_vhost/
  • CrĂ©er un fichier de test : vi test.php
    • Contenu : <pre><?php var_export($_SERVER)?></pre>
  • Modifier le script gĂ©nĂ©ral : vi create_php_site.sh
    • Remplacer le nom de dossier "public_html" par "www" dans le script (lignes 51, 53 et 55)
    • Remplacer la ligne 50 par : if [ "$CHANGEROOT" = "y" ]; then
    • Après la ligne 98 ajouter :
      • # Copy the test.php file
      • cp $CURRENT_DIR/test.php /home/$HOME_DIR$PUBLIC_HTML_DIR/
      • echo "Test installation with : http://$DOMAIN/test.php"
  • CrĂ©er un script spĂ©cifique Ă  une version de php :
    • cp create_php_site.sh create_php54_site.sh
    • vi create_php54_site.sh
      • PHP_INI_DIR='/usr/local/php/5.4/etc/fpm.d/'
      • PHP_FPM_INIT='/etc/init.d/php-54-fpm'
  • cp nginx.vhost.conf.template nginx.vhost.conf.template.default
  • cp pool.conf.template pool.conf.template.default
  • Changer les droits de tous les fichiers : chown admin:users ./*
Remplacer le contenu de nginx.vhost.conf.template par :
server {
    server_name @@HOSTNAME@@ www.@@HOSTNAME@@;
    root "@@PATH@@";

    index index.php;
    client_max_body_size 10m;

    access_log @@LOG_PATH@@/access.log;
    access_log /var/log/nginx-access.log main;
    error_log @@LOG_PATH@@/error.log;
    
    if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { 
        return 401;
    }   

    if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { 
        return 401;
    }   

    location / { 
        try_files $uri $uri/ /index.php$uri?$args;
    }   
    
    location ~ "^(.+\.php)($|/)" {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SERVER_NAME $host;

        if ($uri !~ "^/uploads/") {
            fastcgi_pass   unix:@@SOCKET@@;
        }   
        include        fastcgi_params;
    }   

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
        access_log off;
    }   
    
    location ~* \.(html|htm)$ {
        expires 30m;
    }   
 
    location ~* /\.(ht|git|svn) {
        deny  all;
    }   
}


Remplacer le contenu de pool.conf.template par :
; Doc sur les paramètres : http://www.php.net/manual/fr/install.fpm.configuration.php
[@@USER@@]
listen = /var/run/@@USER@@_fpm.sock
listen.owner = @@USER@@
listen.group = @@USER@@
listen.mode = 0660
user = @@USER@@
group = @@USER@@
pm = dynamic
pm.max_children = @@MAX_CHILDS@@
pm.start_servers = @@START_SERVERS@@
pm.min_spare_servers = @@MIN_SERVERS@@
pm.max_spare_servers = @@MAX_SERVERS@@
pm.max_requests = 500 
request_terminate_timeout = 30s 
chdir = / 
php_admin_value[session.save_path] = "@@HOME_DIR@@/_sessions"
php_admin_value[open_basedir] = "@@HOME_DIR@@:/usr/share/pear:/usr/share/php:/tmp:/usr/local/lib/php"


Pour créer ou supprimer un domaine virtuel.

Installation de Phpmyadmin
Voir script dans /home/admin/script :
  • Passer en admin : su - admin
  • Se rendre dans le dossier des scripts : cd script/
  • Lancer le script : sh phpmyadmin_3.5.8.1.sh
Ajouter sur Gandi (gandi.net) le sous-domaine : sql.agathis.tela-botanica.net
Créer le domaine virtuel :
  • cd /home/admin/script/create_php_vhost
  • sh create_php54_site.sh sql.agathis.tela-botanica.net :
    • Please specify the username for this site? : admin
    • Would you like to change to web root directory (y/n)? : y
    • Enter the new web root dir (after the www/) : phpmyadmin
    • How many FPM servers would you like by default : 2
    • Min number of FPM servers would you like : 1
    • Max number of FPM servers would you like : 5
Installer la base de donnĂ©es pour  PhpMyAdmin :
  • /usr/local/mysql/bin/mysql -u root -p
    • source /home/admin/www/phpmyadmin/examples/create_tables.sql
    • exit
Ajouter Ă  mysql l'utilisateur pour la base de donnĂ©es pour  PhpMyAdmin qui sont dĂ©finit dans le script /home/admin/script/phpmyadmin_3.5.8.1.sh :

Installation de Munin
Voir l'aide sur Munin.
Installer les paquets munin :
  • apt-get install munin munin-node
Configuration de Munin-node :
  • Ajouter un module Perl via le CPAN :
    • cpan : valider les options par dĂ©faut jusqu'au prompt CPAN
    • install LWP::UserAgent
      • Si CPAN n'arrive pas Ă  rĂ©aliser un make, il se peut qu'il manque les paquets pour la compilation. Sortir du CPAN (exit) puis lancer la commande : apt-get install build-essential autoconf automake libtool gdb
    • exit
  • Éditer le fichier munin-node.conf : vi /etc/munin/munin-node.conf
    • VĂ©rifier la prĂ©sence de la ligne : allow ^127\.0\.0\.1$
    • Ajouter des autorisations d'accès au munin local pour d'autres serveurs : allow ^193\.54\.123\.169$
    • Penser Ă  modifier les firewalls (shorewall) pour autoriser le port 4949 sur la machine
      • VĂ©rification du bon fonctionnement de Munin :
    • Se loguer en tant que Munin : sudo -u munin bash ou su - munin -s /bin/bash
    • GĂ©nĂ©rer les stats : /usr/share/munin/munin-update --nofork --debug
      • De nombreuses lignes apparaissent dans la console, c'est normal
      • Si tout c'est bien passĂ©, on obtient une ligne ressemblant Ă  : 2013/07/18 14:22:58 [INFO]: Munin-update finished (5.33 sec)
  • CrĂ©er un fichier de log spĂ©cifique pour cron :
    • Éditer le fichier : vi /etc/rsyslog.conf
    • DĂ©commenter la ligne : cron.* /var/log/cron.log et modifiĂ© la ligne du dessus pour : *.*;cron,auth,authpriv.none -/var/log/syslog
    • RedĂ©marrez rsyslog : service rsyslog restart
  • VĂ©rifier que le dossier /etc/cron.d/ contient bien les fichiers : munin et munin-node. VĂ©rifier aussi dans /home/log/cron.log que le log de munin fonctionne.
    • Éditer le crontab pour y ajouter une entrĂ©e munin afin qu'il mette les stats Ă  jour toutes les 5mn :
      • crontab -e
      • La ligne Ă  ajouter : */5 * * * * /usr/bin/munin-cron 1>/dev/null 2>/dev/null

  • Ajouter les plugins Mysql Ă  Munin :
    • Éditer le fichier munin-node : vi /etc/munin/plugin-conf.d/munin-node et y ajouter le contenu indiquĂ© après la liste ci-dessous
    • Ajouter les plugins mysql aux plugins munin actifs: ln -s /usr/share/munin/plugins/mysql_* /etc/munin/plugins/
    • Ajouter une entrĂ©e [client] dans /root/.my.cnf (voir installation mysql)
    • RedĂ©marrer munin : /etc/init.d/munin-node restart

  • Ajouter les plugins Sphinx Ă  Munin :
    • Se rendre dans le dossier des plugins : cd /usr/share/munin/plugins
    • TĂ©lĂ©charger tous les plugins :
    • Donner des droits d'execution : chmod +x sphin*
    • Modifier les scripts des plugins Sphinx pour indiquer le bon emplacement des binaires ou dossier :
      • binaire php dans l'entete du script (connections, queries) : #!/usr/local/php/5.5/bin/php
      • binaire mysql (connections, queries) : /usr/local/mysql/5.6/bin
      • binaire indextool (documents) : /home/sphinx/bin
      • dossier data de sphinx (documents) : idxpath=/home/sphinx/var/data/
    • Ajouter les liens vers les plugins Sphinx :
      • ln -s /usr/share/munin/plugins/sphinx_connections /etc/munin/plugins/sphinx_connections
      • ln -s /usr/share/munin/plugins/sphinx_documents /etc/munin/plugins/sphinx_documents
      • ln -s /usr/share/munin/plugins/sphinx_queries /etc/munin/plugins/sphinx_queries
    • RedĂ©marrer munin : /etc/init.d/munin-node restart

  • Ajouter les plugins Nginx Ă  Munin :
    • Se rendre dans le dossier des plugins : cd /usr/share/munin/plugins
    • TĂ©lĂ©charger tous les plugins : wget -nd http://debianuser.org/nginx/nginx_{memory,status,traffic,request}
  • VĂ©rifier si toutes les sondes munins sont configurĂ©s : munin-node-configure --suggest
    • RedĂ©marrer munin : /etc/init.d/munin-node restart

  • Ajouter les plugins Php-Fpm Ă  munin :
    • Se rendre dans le dossier des plugins : cd /usr/share/munin/plugins
    • Donner les bon droits aux fichiers : chmod +x php-fpm
    • Éditer le plugin et indiquer le bon emplacement du binaire php cli :
      • vi /usr/share/munin/plugins/php-fpm
      • Remplacer #!/usr/bin/php par #!/usr/local/php/5.5/bin/php
  • Ajouter les plugins Php-fpm Ă  Munin :
    • ln -s /usr/share/munin/plugins/php-fpm /etc/munin/plugins/php-fpm-memory
    • ln -s /usr/share/munin/plugins/php-fpm /etc/munin/plugins/php-fpm-cpu
    • ln -s /usr/share/munin/plugins/php-fpm /etc/munin/plugins/php-fpm-count
    • ln -s /usr/share/munin/plugins/php-fpm /etc/munin/plugins/php-fpm-time
  • VĂ©rifier si toutes les sondes munins sont configurĂ©s : su - munin -s /bin/bash ; munin-node-configure --suggest
  • RedĂ©marrer munin : service munin-node restart

Configuration de Munin (le grapheur) :
  • Munin-node gĂ©nĂ©re seulement des fichiers html, png, css.. qui sont placĂ©s dans le dossier /var/cache/munin/www
  • CrĂ©er un lien pour placer Munin sur le compte admin : ln -s /var/cache/munin/www /home/admin/www/munin
  • Utiliser le script d'ajout de domaine virtuel pour ajouter : munin.agathis.tela-botanica.net

Fichier /etc/munin/plugin-conf.d/munin-node :
# Ajout de l'instance Mysql 5.6 PROD (jpm) [26-11-2013]
[mysql_56_*]
user root
env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3306
env.mysqladmin /usr/local/mysql/5.6/bin/mysqladmin
env.mysqlopts --defaults-extra-file=/root/.my.cnf

# Ajout de l'instance Mysql 5.6 TEST (jpm) [26-11-2013]
[mysql_56-test_*]
user root
env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3308
env.mysqladmin /usr/local/mysql/5.6-test/bin/mysqladmin
env.mysqlopts --defaults-extra-file=/root/.my.cnf

# Ajout de la sonde Nginx (jpm) [18-07-2013]
[nginx*]
user root
# La ligne suivante ne semble pas utile
# env.url http://agathis.tela-botanica.org/nginx_status 

[nginx_traffic]
group adm
env.vhosts api.tela-botanica.org agathis.tela-botanica.net munin.agathis.tela-botanica.net sql.agathis.tela-botanica.net
env.logdir /home/log
env.flogfile nginx-access.log 
env.bparam 11
env.aggregate false


Fichier /etc/munin/munin.conf :
# a simple host tree
[Agathis]
    address 127.0.0.1
    use_node_name yes
[Sequoia]
    address 193.54.123.169
    use_node_name yes


Affichage du status de php-fpm
Activer l'affichage du status dans php-fpm :
  • RĂ©aliser les opĂ©rations suivants pour chaque version de php installĂ©es (5.4 et 5.5) : vi /etc/php/5.5/php-fpm.conf
    • DĂ©commenter les lignes contenant pm.status_path et ping.path.
    • Remplacer le contenu de la ligne pm.status_path par : pm.status_path = /php-55-fpm-status
    • Remplacer le contenu de la ligne ping.path par : ping.path = /php-55-fpm-ping
  • Pour fonctionner, le fichiers .sock doivent avoir les droits pour admin. Modifier le service de lancement de php-fpm : vi /etc/init.d/php-55-fpm et ajouter après la ligne 70 :
# [2014-08-29] (jpm) : Changement des droits du .sock pour accéder au status et ping depuis admin
chown root:admin /var/run/php-55-fpm.sock

  • Éditer le fichier de configuration du site d'administration par dĂ©faut : vi /etc/nginx/sites-available/agathis.tela-botanica.net.conf
  • Ajouter le contenu indiquĂ© ci-dessous

Ajout Ă  faire au fichier /etc/nginx/sites-available/agathis.tela-botanica.net.conf :
location ~ ^/php-55-fpm-(status|ping)$ {
        include fastcgi_params;
        fastcgi_pass   unix:/var/run/php-55-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        allow 127.0.0.1;
        allow 193.54.123.216;
        allow 162.38.234.0/24;
        deny all;
    }
    
    location ~ ^/php-54-fpm-(status|ping)$ {
        include fastcgi_params;
        fastcgi_pass   unix:/var/run/php-54-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        allow 127.0.0.1;
        allow 193.54.123.216;
        allow 162.38.234.0/24;
        deny all;
    }


Installation de Vsftpd
  • Installer le serveur FTP : apt-get install vsftpd
  • Ajouter un bash de type /bin/false pour la sĂ©curitĂ© : vi /etc/shells et ajout d'une ligne /bin/false
  • Éditer le fichier de configuration : vi /etc/vsftpd.conf
  • Lancer le serveur FTP : /etc/init.d/vsftpd start
  • Pour ajouter un utilisateur hors /home voir l'aide de Vsftpd.

Fichier de configuration de vsftpd :
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
#
# Run standalone?  vsftpd can run either from an inetd or as a standalone
# daemon started from an initscript.
listen=YES
#
# Run standalone with IPv6?
# Like the listen parameter, except vsftpd will listen on an IPv6 socket
# instead of an IPv4 one. This parameter and the listen parameter are mutually
# exclusive.
#listen_ipv6=YES
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# If enabled, vsftpd will display directory listings with the time
# in  your  local  time  zone.  The default is to display GMT. The
# times returned by the MDTM FTP command are also affected by this
# option.
use_localtime=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
#xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
idle_session_timeout=2000
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=ftp
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may restrict local users to their home directories.  See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
#chroot_local_user=YES
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
ls_recurse_enable=YES
#
# Debian customization
#
# Some of vsftpd's settings don't fit the Debian filesystem layout by
# default.  These settings are more Debian-friendly.
#
# This option should be the name of a directory which is empty.  Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd/empty
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/private/vsftpd.pem


Installation de Shorewall
Shorewall est un outil qui permet de configurer Iptables (le pare-feu) Ă  notre place.
  • Installation du Shorewall : apt-get install shorewall
  • RĂ©cupĂ©rer seulement les fichiers de configs par dĂ©faut nĂ©cessaire de /usr/share/doc/shorewall/default-config dans /etc/shorewall :
    • cp -r /usr/share/doc/shorewall/default-config/interfaces /etc/shorewall/interfaces : dĂ©finit la carte rĂ©seau sur laquelle Shorewall doit s'appliquer
    • cp -r /usr/share/doc/shorewall/default-config/rules /etc/shorewall/rules : indique ce qui est acceptĂ©
    • cp -r /usr/share/doc/shorewall/default-config/policy /etc/shorewall/policy : indique ce qui est refusĂ© si ce n'est pas acceptĂ©
    • cp -r /usr/share/doc/shorewall/default-config/zones /etc/shorewall/zones : permet de dĂ©finir des allias (pour utiliser Ă  la place des numĂ©ros de port)
  • Adapter le contenu interfaces : vi /etc/shorewall/interfaces
net eth0 detect

  • Adapter le contenu rules : vi /etc/shorewall/rules
#SECTION NEW
ACCEPT          net       $FW           tcp     ssh,www,ftp,4949
ACCEPT          net       $FW           udp     ssh,www
ACCEPT          net       $FW           icmp    8   
# nfs
ACCEPT          net:193.54.123.169 $FW  udp     111 
ACCEPT          net:193.54.123.169 $FW  tcp     111 
ACCEPT          net:193.54.123.169 $FW  tcp     2049
ACCEPT          net:193.54.123.169 $FW  udp     2049
ACCEPT          net:193.54.123.169 $FW  tcp     32764:32769
ACCEPT          net:193.54.123.169 $FW  udp     32764:32769
# sphynx + mysql
ACCEPT          net:193.54.123.169 $FW  tcp     9312,9306,3306
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

  • Adapter le contenu policy : vi /etc/shorewall/policy
$FW     net             ACCEPT
109 net     all             DROP           info
110 all     all             REJECT         info

  • Adapter le contenu zones : vi /etc/shorewall/zones
fw  firewall
net ipv4

  • Afin de s'assurer que Shorewall a Ă©tĂ© configurĂ© correctement par l'administrateur, Shorewall oblige Ă  modifier une variable avant de le dĂ©marrer : vi /etc/default/shorewall
startup=1

  • Avant de lancer Shorewall, vĂ©rifier sa configuration : shorewall check
  • Pour voir les correspondance entre nom de service et port : vi /etc/services
  • Shorewall sera lancĂ© ensuite systĂ©matiquement depuis rcS.d pour l'instant on le lance Ă  la main : /etc/init.d/shorewall start

Notes :
  • Si NFS est dĂ©jĂ  dĂ©marrĂ© quand Shorewall est installĂ© et lancĂ©, il ne bloquera pas NFS. Si le serveur NFS est redĂ©marrĂ©, Shorewall le bloquera. Il est donc nĂ©cessaire d'ajouter les règles NFS Ă  Shorewall et de configurer NFS pour le forcer Ă  utiliser toujours les mĂŞmes ports.

Installation de NFS
  • Doc : https://wiki.debian.org/SecuringNFS
  • Installer NFS Ă  l'aide des paquets Debian :
    • sur le serveur (ici Agathis) : apt-get install nfs-common nfs-kernel-server
    • sur le client (ici Sequoia, seul nfs-common est nĂ©cessaire) : apt-get install nfs-common
  • Pour dĂ©marrer / ou arrĂŞter :
    • le serveur NFS : /etc/init.d/nfs-kernel-server start ou /etc/init.d/nfs-kernel-server stop
    • le client NFS : /etc/init.d/nfs-common start ou /etc/init.d/nfs-common stop
  • Il est possible de voir des infos envoyĂ©es par Shorewall / NFS avec : dmesg ou tailf /var/log/syslog
    • utiliser sur Agathis : tailf /var/log/syslog
  • Configurer les ports de NFS pour qu'Ă  chaque dĂ©marrage les mĂŞmes ports soient utilisĂ©s :
    • sur Agahtis, fichier /etc/defaut/nfs-kernel-server, modifier la ligne : RPCMOUNTDOPTS="--manage-gids -p 32767"
    • sur Sequoia, fichier /etc/defaut/nfs-common, modifier la ligne : STATDOPTS="-p 32765 -o 32766"
  • Pour dĂ©monter un dossier NFS, utiliser la commande : umount -f -l /home/grosdur/

Installation de Sphinx
  • CrĂ©er un utilisateur sphinx : voir doc
  • Passer en admin : su admin
  • Lancer le script : sh /home/admin/script/sphinx_2.0.sh
  • Appliquer la configuration post-installation : voir doc
  • Autoriser Sphinx dans Shorewall : voir doc
  • RĂ©aliser les vĂ©rifications
  • Ajouter Sphinx au dĂ©marrage : rcconf
  • Configurer Sphinx pour qu'il puisse ĂŞtre utilisĂ© depuis Sequoia : Utiliser Sphinx Ă  distance

Installation de Tomcat
  • Passer en admin : su admin
  • Lancer le script : sh /home/admin/script/tomcat_2.0.sh
  • Normalement tout devrait ĂŞtre fonctionnel, il ne reste qu'Ă  dĂ©marrer le serveur : service tomcat start
  • Augmenter la taille mĂ©moire (de l'espace  PermGen principalement) pour IPT et Gbif-France-Harvester, en Ă©ditant /usr/local/tomcat/bin/catalina.sh : ajouter la ligne suivante
CATALINA_OPTS="$CATALINA_OPTS -server -Xms256m -Xmx4096m -XX:PermSize=512m -XX:MaxPermSize=512m"


Installation des librairies PEAR
Voir pour chaque version installée de PHP :
/usr/local/php/5.{x}/bin/pear list