Un VPS est un Virtual Private Server, pouvant être loué à n'importe quel opérateur, et pouvant supporter une ou plusieurs instances de AMAPJ

La procédure suivante va vous indiquer comment installer complètement AmapJ sur un VPS, avec un frontal Apache et utilisation de certificats SSL pour sécuriser les transferts

Dans la suite de la procèdure, on suppose que vous utilisez l'OS Debian Strech 64 bits en anglais .

A vous de choisir parmi les offres du marché ...

Typiquement, il faut un serveur avec 2Go de RAM pour faire fonctionner l'application AMAPJ

Vous allez avoir besoin d'un nom de domaine, à louer vous même auprès de votre opérateur

Dans notre exemple, on va supposer que votre domaine est le-nom-de-mon-amap.fr

Pour AmapJ, nous allons utiliser un sous domaine ,dans notre exemple, on va prendre contrats.le-nom-de-mon-amap.fr

Vous devez maintenant configurer votre sous domaine pour que celui ci pointe vers l'adresse IP de votre serveur VPS

Pour faire ceci, vous récupérez l'adresse IP de votre serveur VPS (commande ifconfig en tant que root), et vous renseignez cette adresse IP dans le paramétrage DNS de votre nom de domaine

Se logguer en tant que root, creer l'utilisateur amap1 avec la commande

adduser amap1

et renseigner un mot de passe pour cet utilisateur

Tout d'abord, nous allons supprimer l'accès par défaut par SSH sur le port 22, et le remplacer par un accès sur un autre port, par exemple 12345.

Nous allons aussi interdire les accès SSH pour l'utilisateur root

Pour cela, faire

vi /etc/ssh/sshd_config

Modifier le fichier pour obtenir

Port 12345 
...
PermitRootLogin no  

Faire un reboot de la machine. Pour vous connecter par SSH, il faut maintenant utiliser l'utilisateur amap1 et le port 12345

Nous allons mettre en place un firewall pour que votre VPS soit accessible uniquement par les ports 12345 , 80 et 443

Pour cela, executer les commandes suivantes en étant loggué en tant que root :

# Regles IPV4 - On accepte uniquement le traffic sur 12345 , 80 et 443
# ATTENTION : si vous avez remplacé 12345 par une autre valeur, il faut bien la modifier ici !!  
iptables -A INPUT -p tcp --dport 12345 -j ACCEPT
iptables -A INPUT -p tcp --dport www -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP

# Regles IPV6 - Tout le traffic est stoppé
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP

Executer les commandes suivantes en tant que root :

apt install iptables-persistent

Faire yes deux fois pour sauveagrder les regles existantes (IPv4 et IPv6)

puis faire reboot

Executer ensuite la commande suivante en tant que root :

iptables -L

et vérifier que les régles iptables sont bien actives

Il faut ensuite configurer le fuseau horaire.Toujours en tant que root, lancer la commande

dpkg-reconfigure tzdata

Enfin, il faut installer l'outil zip.Toujours en tant que root, lancer la commande

apt install zip
apt install unzip

AmapJ peut utiliser openJDK 8. Pour l'installer, en tant que root, lancer la commande

	apt install openjdk-8-jdk-headless

Vous devez décider des 3 ports qui seront utilisés.

Dans cet exemple, nous allons prendre les ports 8001, 8002, 8003

Le port 8001 correspond au port utilisé par AJP

Le port 8002 correspond au port utilisé par la base de données

Le port 8003 correspond au port utilisé pour le shutdown de Tomcat

Attention : AmapJ ne fonctionne pas avec Tomcat 6 ou 8.

Pour connaitre la dernière version de Tomcat, vous devez aller sur le site de Apache Tomcat 7et identifier le lien vers la dernière version

A la date du 24 février 2019, ce lien est http://mirrors.standaloneinstaller.com/apache/tomcat/tomcat-7/v7.0.93/bin/apache-tomcat-7.0.93.zip

Ensuite, se logguer en tant que amap1, et telecharger tomcat 7 avec la commande :

cd /home/amap1
wget http://mirrors.standaloneinstaller.com/apache/tomcat/tomcat-7/v7.0.93/bin/apache-tomcat-7.0.93.zip

(en remplacçant bien sûr le lien par la dernière version)

Il faut ensuite installer tomcat avec les commandes

tar xvf apache-tomcat-7.0.55.tar.gz
rm apache-tomcat-7.0.55.tar.gz
mv apache-tomcat-7.0.55/ tomcat

Tomcat est alors installé dans le répertoire /home/amap1/tomcat

Vous devez ensuite configurer Tomcat.Créer dans /home/amap1/tomcat/bin/ un fichier setenv.sh avec pour contenu

JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
CATALINA_OPTS="-Xms512M -Xmx1024M"
JAVA_OPTS="-Duser.country=FR -Duser.language=fr"
CATALINA_PID="$CATALINA_BASE/bin/catalina.pid"

Vous pouvez ensuite effacer le contenu du répertoire /home/amap1/tomcat/webapps avec les commandes

rm -Rf /home/amap1/tomcat/webapps
mkdir /home/amap1/tomcat/webapps

Vous devez ensuite configurer Tomcat avec les commandes

cd /home/amap1/tomcat/conf/
rm server.xml
vi server.xml

et mettre dans server.xml le fichier suivant

<?xml version='1.0' encoding='utf-8'?>
<!-- AMAPJ - Configuration du serveur TOMCAT avec uniquement un acces par AJP sur le port 8001
et un acces pour l'arret du serveur sur le port 8003 -->

<Server port="8003" shutdown="SHUTDOWN">

<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

<Service name="Catalina">

<!-- Connecteur AJP sur le port 8001 -->
<Connector port="8001" protocol="AJP/1.3" />

<Engine name="Catalina" defaultHost="localhost">

<Host name="localhost"  appBase="webapps"  unpackWARs="false" autoDeploy="false">

</Host>
</Engine>
</Service>
</Server>

Au besoin, vous devez modifier le contenu de ce fichier pour mettre les numéros de ports que vous avez choisis

Se logguer en tant que amap1, et créer un répertoire install

cd /home/amap1
mkdir installl

Vous devez ensuite aller sur le site de Amapj et identifier le lien vers la dernière version, et le numéro de la version.

Si par exemple la version courante est la version V025, vous créez le répertoire install/V025

cd /home/amap1/install
mkdir V025

Vous telecharger ensuite AmapJ avec la commande suivante (en remplacant xxx par le numéro de la version)

cd /home/amap1/install/V025
wget http://amapj.fr/dist/amapj-dist-Vxxx.zip

Il faut ensuite dezipper le tout

unzip amapj-dist-V025.zip

Vous obtenez alors 4 répertoires : amapj-db , amapj-src , amapj-war et apache-tomcat

Vous devez alors copier le répertoire amapj-db dans /home/amap1, avec par exemple

cd /home/amap1/install/V025
cp -R amapj-db /home/amap1/

Vous devez ensuite créer le répertoire qui contiendra les sauvegardes de la base de données

cd /home/amap1/
mkdir backup

Il faut ensuite configurer Amapj. Pour cela, créez un fichier amapj.xml avec vi par exemple , et placer le contenu suivant à l'intérieur :

<Context path="/" docBase="/home/amap1/install/V025/amapj-war">

<Parameter name="dbms" value="hi"  />

<Parameter name="dbms.hi.type" value="hsql_internal"  />
<Parameter name="dbms.hi.dir" value="/home/amap1/amapj-db/"  />
<Parameter name="dbms.hi.port" value="8002"  />

<Parameter name="master.dbms" value="hi"  />
<Parameter name="master.name" value="master"  />

<Parameter name="database.backupdir" value="/home/prod/backup"  />

<Parameter name="logDir" value="/home/amap1/tomcat/logs/"  />

<Parameter name="wkhtmltopdf" value="wkhtmltopdf"  />

<!-- Permet de desactiver la serialisation des sessions-->
<Manager pathname="" />

</Context>

Il faut ensuite positionner correctement le fichier amapj.xml avec ces 3 commandes

mkdir tomcat/conf/Catalina
mkdir tomcat/conf/Catalina/localhost
mv amapj.xml tomcat/conf/Catalina/localhost/

Vous devez vous logguer en tant que root, et executer les commandes suivantes :

apt install apache2

Faire un test en ouvrant la page http://contrats.le-nom-de-mon-amap.fr/ avec votre navigateur

On doit obtenir

Apache2 Debian Default Page
It works!
This is the default welcome page ...

Ensuite, aller dans le repertoire /var/www/html, supprimer le fichier index.html présent dans ce répertoire,

et placer un nouveau fichier index.html avec le contenu suivant

<html>
	<body>
		<p>Installation AmapJ pour contrats.le-nom-de-mon-amap.fr en cours ....</p>
	</body>
</html>

Toujours en tant que root, vous devez activer les modules AJP et SSL

a2enmod proxy_ajp
a2enmod ssl
systemctl restart apache2

Toujours en tant que root, vous devez créer un fichier avec le nom contrats.le-nom-de-mon-amap.fr dans le repertoire /etc/apache2/sites-available/ avec ce contenu

<VirtualHost *:80>
        ServerName contrats.le-nom-de-mon-amap.fr
        DocumentRoot "/var/www/html"

        ErrorLog /var/log/apache2/error.contrats.le-nom-de-mon-amap.fr.log
        CustomLog /var/log/apache2/access.contrats.le-nom-de-mon-amap.fr.log combined

		ProxyPass 			/amapj ajp://localhost:8001/amapj
		ProxyPassReverse 	/amapj ajp://localhost:8001/amapj
</VirtualHost>

Ensuite il faut supprimer les 2 fichiers

/etc/apache2/sites-enabled/000-default.conf
/etc/apache2/sites-available/000-default.conf

Toujours en tant que root, vous devez activer votre site

cd /etc/apache2/sites-available/
a2ensite contrats.le-nom-de-mon-amap.fr
systemctl restart apache2

Faire un test en ouvrant la page http://contrats.le-nom-de-mon-amap.fr/index.html avec votre navigateur

On doit obtenir

Installation AmapJ pour contrats.le-nom-de-mon-amap.fr en cours ....

Vous devez maintenant vous logguer en tant qu'amap1

Lancez ensuite les commandes suivantes

cd /home/amap1/tomcat/bin
sh startup.sh

Faire un test en ouvrant la page http://contrats.le-nom-de-mon-amap.fr/amapj/amap1 avec votre navigateur

Vous devriez alors obtenir la page d'accueil de l'application, et vous devez pouvoir vous connecter

Si cela ne fonctionne pas, vous devez ouvrir les fichiers de logs

/home/amap1/tomcat/logs/catalina.out 
/home/amap1/tomcat/logs/global.log 

Maintenant, il est temps de sécuriser les accès par SSL.

Nous allons mettre en place un certificat SSL pour le sous domaine contrats.le-nom-de-mon-amap.fr, avec Let's Encrypt

En tant que root , faire

vi /etc/apt/sources.list

decommenter la ligne

deb http://deb.debian.org/debian stretch-backports main contrib non-free

puis lancer les commandes

apt update
apt install python-certbot-apache -t stretch-backports

Toujours en tant que root, dans n'importe quel repertoire, lancer la commande

certbot --authenticator webroot --installer apache -d contrats.le-nom-de-mon-amap.fr

A la question

Input the webroot for contrats.le-nom-de-mon-amap.fr:

repondre

/home/amap1/www

A la question

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration.

repondre

2 

Avec un navigateur WEB, ouvrir la page

http://contrats.le-nom-de-mon-amap.fr/

Normalement, on est redirigé vers https://contrats.le-nom-de-mon-amap.fr/ et on doit voir la page suivante

Installation AmapJ pour contrats.le-nom-de-mon-amap.fr en cours ....

Ensuite, avec un navigateur WEB, ouvrir la page

http://contrats.le-nom-de-mon-amap.fr/amapj/amap1

Normalement, on est redirigé vers https://contrats.le-nom-de-mon-amap.fr/amapj/amap1 et vous devez pouvoir vous connecter sur AmapJ

Lancer ensuite dans un navigateur

https://www.ssllabs.com/ssltest/analyze.html?d=contrats.le-nom-de-mon-amap.fr&latest

Vous devez alors obtenir la note A, qui prouve que le certificat HTTPS est bien installé.

Vous pouvez aussi utiliser ce site : https://www.digicert.com/help/ pour vérifier que tout est OK.

A NOTER : il ne faut pas supprimer la ligne

DocumentRoot "/home/amap1/www"

du fichier /etc/apache2/sites-enabled/contrats.le-nom-de-mon-amap.fr

En effet, si cette ligne est supprimée, il ne sera pas possible de renouveler les certificats

wkhtmltopdf est l'outil qui va permettre la génération des PDF (pour les contrats d'engagement, les bulletins d'adhésion, ...).

Installer le package liberation : en tant que root, lancer les commandes

apt install fonts-liberation 
apt install xfonts-base

Ensuite, il faut visiter le site https://wkhtmltopdf.org/downloads.html, et chercher le lien du fichier correspondant à votre distribution et votre architecture

Dans notre cas (Debian9 64 bits), on obtient https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb

en tant que root

cd /tmp
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb
dpkg -i wkhtmltox_0.12.5-1.stretch_amd64.deb

Vous pouvez tester ainsi l'installation de wkhtmltopdf: se logguer en tant que amap1, lancer les commandes suivantes :

cd /tmp
wkhtmltopdf http://www.google.com output.pdf

Vous devez maintenant récupérer le fichier output.pdf et l'ouvrir : ce document PDF doit contenir une copie de la page de garde du site google.com

Se connecter en tant que amap1, et arrêter Tomcat avec les commandes suivantes

cd /home/amap1/tomcat/bin
sh shutdown.sh 

Se connecter en tant que root , créer 1 fichier /etc/systemd/system/amap1_tomcat.service ayant pour contenu

[Unit]
Description=Tomcat AMAP1
After=syslog.target network.target

[Service]
Type=forking

User=amap1
Group=amap1

ExecStart=/home/amap1/tomcat/bin/startup.sh
ExecStop=/home/amap1/tomcat/bin/shutdown.sh 120 

[Install]
WantedBy=multi-user.target

Il faut ensuite lancer le commandes suivantes en tant que root

systemctl daemon-reload
systemctl enable amap1_tomcat.service

Pour demarrer AmapJ , lancer en tant que root (dans n'importe quel répertoire)

systemctl start amap1_tomcat.service

Pour arreter AmapJ , lancer en tant que root

systemctl stop amap1_tomcat.service

Ensuite, il faut créer une regle sudo pour pouvoir arreter et demarrer le service sans être root

se logguer en tant que root , lancer la commande

visudo 

et ajouter en dessous de "# User alias specification" la ligne

Cmnd_Alias AMAP1_CMDS = /bin/systemctl start amap1_tomcat.service, /bin/systemctl stop amap1_tomcat.service

puis à la fin du fichier

amap1 ALL=(ALL) NOPASSWD: AMAP1_CMDS

Se connecter en tant que amap1 , on peut maintenant demarrer et arreter le service avec les commandes

sudo systemctl start amap1_tomcat.service
sudo systemctl stop amap1_tomcat.service

Faire un reboot du serveur : normalement, au démarrage, le site AmapJ est bien accessible

Ensuite, dans le fichier .bashrc de amap1, ajouter tout à la fin

# Custom aliases
alias amap1_tomcat_start='sudo systemctl start amap1_tomcat.service'
alias amap1_tomcat_stop='read -p "Arret de TOMCAT AMAP1. Appuyez sur une touche pour continuer ... " x ;sudo systemctl stop amap1_tomcat.service'
alias amap1_tomcat_status='systemctl status amap1_tomcat'
alias amap1_tomcat_conf='vi /home/amap1/tomcat/conf/Catalina/localhost/amapj.xml'
alias tomcat_log='tail -f -n 100 /home/amap1/tomcat/logs/catalina.out'

Pour l'envoi des mails, il est nécessaire d'installer PostFix. Pour cela, se logguer en tant que root, puis lancer les commandes suivantes

apt install postfix

Vous obtenez alors

Vous cliquez sur OK, vous obtenez alors

Vous choissisez "Site Internet", vous cliquez sur OK , vous obtenez alors

Vous devez saisir le nom de votre sous domaine, c'est à dire dans notre exemple contrats.le-nom-de-mon-amap.fr

Vous cliquez alors sur OK, et normalement Postfix est installé.

Il faut maintenant terminer la configuration de postfix :vous faites un vi sur le fichier /etc/postfix/main.cf

A la fin du fichier, vous trouvez la ligne

inet_interfaces = all

et vous la remplacez par ces deux lignes

inet_interfaces = loopback-only
smtp_tls_security_level = may

Vous lancez alors les commandes

postfix stop
postfix start

Faites ensuite un premier essai de bon fonctionnement.

En étant loggué en tant que amap1, créer dans le repertoire /tmp un fichier mail.txt avec ce contenu

ehlo localhost
mail from: contact@contrats.le-nom-de-mon-amap.fr
rcpt to: votre.adresse.mail@gmail.com
data
Subject: Essai Postfix

Hi,
Ceci est un essai PostFix
.

(A noter : le point final est obligatoire)

Ensuite, lancer la commande

cat mail.txt |  netcat 127.0.0.1 25  

Vous devez recevoir un mail sur l'adresse votre.adresse.mail@gmail.com

Vous pouvez ensuite faire un deuxième essai de bon fonctionnement.

Pour cela , vous allez dans AMAPJ, dans "ADMIN / Envoyer un mail

et vous essayez d'envoyer un mail vers votre propre adresse mail. En cas de dysfonctionnement, il faut analyser les logs dans /var/logs/mail.info

Cette partie est extraite de cet article PostFix Slow

Lorsque vous envoyez un grand nombre de mails vers certains domaines, notamment « orange.fr », « wanadoo.fr » ou encore « laposte.net », vous pouvez facilement vous retrouvez face à des problèmes d’envoi de mails, se traduisant dans vos logs par des erreurs de type « too many connections ».

Voici l’erreur en question que l’on peut retrouver dans les logs :

Feb 6 14:31:48 mail postfix/smtp[21691]: F2C2D8C7912: 
to=<utilisateur@laposte.net>, relay=smtpz4.laposte.net[194.117.213.1]:25, 
delay=13, delays=0.01/0.02/13/0, dsn=4.7.0, status=deferred 
(host smtpz4.laposte.net[194.117.213.1] refused to talk to me: 
421 4.7.0 Error: too many connections)

Voici la configuration à réaliser pour ralentir le débit d’envoi de Postfix

Il faut d'abord créer le fichier transport.

vi /etc/postfix/transport

avec ce contenu

orange.fr slow:
wanadoo.fr slow:
laposte.net slow:

Il faut penser ensuite à reconstruire la base transport avec la commande :

postmap /etc/postfix/transport

Ensuite, il faut ajouter cette ligne dans /etc/postfix/master.cf :

# Postfix-slow
slow unix - - n - 5 smtp -o syslog_name=postfix-slow -o smtp_destination_concurrency_limit=3 -o slow_destination_rate_delay=1

Puis, il faut ajouter les lignes ci-dessous dans /etc/postfix/main.cf :

transport_maps = hash:/etc/postfix/transport
slow_destination_concurrency_limit = 3
slow_destination_rate_delay = 3s

Pour finir, il vous faudra recharger la configuration de Postfix :

service postfix reload

Il faut ensuite configurer la vérification des mails par SPF (indispensable si vous ne voulez pas que la plupart de vos mails finissent en Spam)

Pour cela, vous vous rendez dans les paramètres DNS de votre sous domaine contrats.le-nom-de-mon-amap.fr

Vous devez alors ajouter un record TXT contenant

v=spf1 a -all

Vous attendez alors deux heures que la propagation DNS se réalise bien. Ensuite, vous faites de nouveau l'essai d'envoi d'un mail pour voir si tout fonctionne bien.

Pour vérifier plus finement que tout est OK, toujours depuis AMAPJ, faites l'envoi d'un mail avec un contenu quelconque vers check-auth-aaaaa=bbbbb@verifier.port25.com

Le site verifier.port25.com fournit en effet un outil gratuit d'évaluation des mails

Si votre adresse e mail est bob@gmail.com, il faut remplacer aaaaa par bob et bbbbb par gmail.com , ce qui donne donc check-auth-bob=gmail.com@verifier.port25.com

Vous allez alors obtenir dans votre boite aux lettes bob@gmail.com un mail avec un rapport sur le fonctionnemet de votre PostFix

Normalement, vous devriez obtenir ceci

==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   neutral
DKIM check:         neutral
Sender-ID check:    pass
SpamAssassin check: ham

On voit ici que la vérification SPF est OK, DKIM est neutral car non installé, mais ce n'est pas nécessaire.

Il est nécessaire de savoir accèder à la base en SQL, par exemple pour pouvoir appliquer des patchs lors des mises à jour

Pour pouvoir accèder en SQL à la base, il faut utiliser un SQL client, comme par exemple SQUIRREL Lien direct vers Squirrel

Cet outil sera installé sur votre PC, et non sur votre VPS

Téléchargez le logiciel : vous obtenez alors un fichier squirrel-sql-[version]-install.jar

Installez Squirrel sur votre PC, en lançant la commande suivante :

java -jar squirrel-sql-[version]-install.jar

Vous obtenez alors un écran d'installation classique, faites Next Next Next Finish (pas de configuration particulière)

Vous devez ensuite télecharger AMAPJ, vous dezippez le fichier obtenu dans c:\test-amapj par exemple. Vous allez ensuite dans C:\test-amapj\amapj-war\WEB-INF\lib

Vous localisez le fichier hsqldb.jar, et vous en faites un copier coller dans C:\Program Files\squirrel-sql\lib si vous avez installé Squirrel dans C:\Program Files\

Ensuite, vous devez mettre en place un port forwarding SSH entre votre PC et votre VPS, de tel façon que le port 8002 de votre PC corresponde au port 8002 de vore VPS

Vous démarrez ensuite SQUIRREL, vous faites "Aliases / New Alias ..."

Vous choississez ensuite Driver : HSQLDBSERVER

Ensuite, vous mettez

NAME : AMAP (ou ce que vous voulez)

URL : jdbc:hsqldb:hsql://127.0.0.1:8002/amap1

User Name : SA

PassWord : laissez vide

Vous devriez alors obtenir ceci

Vous faites ensuite OK, puis clic droit puis connect

Vous pouvez alors lancer la requête suivante

select * from PARAMETRES

Pour cela, vous devez copier le texte "select * from PARAMETRES" dans le fenetre "SQL", puis vous faites Session / Run SQL

Vous devez alors obtenir le résultat suivant