Scripts Ansible pour le déploiement de l'application polywiki sur les serveurs de production EPFL.
- Ansible 2.9+
- Accès SSH aux serveurs cibles (kis@kissrv121.epfl.ch, kis@kissrv124.epfl.ch)
- Le fichier WAR buildé (
build/libs/polywiki.war)
Sur les serveurs cibles (déjà installés) :
- Tomcat 10+
- Apache httpd avec mod_ssl, mod_proxy, mod_rewrite
- MySQL/MariaDB
- Java 17+
- Certificats SSL dans
/var/www/vhosts/wiki.epfl.ch/ssl/
ansible/
├── ansible.cfg # Configuration Ansible
├── playbook.yml # Playbook principal
├── inventories/
│ └── prod/
│ ├── hosts # Inventaire des serveurs
│ └── group_vars/
│ └── all.yml # Variables d'environnement
├── group_vars/
│ ├── all.yml # Variables globales
│ ├── vault.yml # Secrets (chiffré)
│ └── vault.yml.example # Template pour créer le vault
└── roles/
├── polywiki_tomcat/ # Configuration Tomcat
│ ├── tasks/main.yml
│ ├── handlers/main.yml
│ └── templates/
│ ├── server.xml.j2
│ ├── connector-http.xml.j2
│ └── web.xml.j2
├── polywiki_app/ # Déploiement application
│ ├── tasks/main.yml
│ ├── handlers/main.yml
│ └── templates/
│ ├── hibernate.cfg.xml.j2
│ ├── appilis.application.properties.j2
│ └── logrotate-polywiki.j2
└── polywiki_apache/ # Configuration Apache
├── tasks/main.yml
├── handlers/main.yml
└── templates/
├── polywiki-vhost.conf.j2
└── polywiki-proxy.conf.j2
Configure Tomcat :
server.xmlavec le connecteur HTTPweb.xmlavec les servlets par défaut- Connecteur HTTP sur le port 8080 avec proxy headers
Déploie l'application :
- Extrait le WAR dans
/srv/tomcat/wiki/private/polywiki-{version} - Injecte les secrets dans
hibernate.cfg.xmletappilis.application.properties - Met à jour le symlink
/srv/tomcat/wiki/webapps/ROOT - Archive l'ancienne release
- Nettoie les anciennes archives (garde les 5 dernières)
- Redémarre Tomcat
Configure Apache :
- VirtualHost HTTP (redirect vers HTTPS)
- VirtualHost HTTPS avec SSL
- Reverse proxy HTTP vers Tomcat
- Règles de réécriture pour les URLs wiki
- Redirections des anciens domaines
cd ansible
# Créer le vault (première fois)
ansible-vault create group_vars/vault.yml
# Copier le contenu de vault.yml.example et modifier les valeursLes secrets requis :
- Credentials base de données (
vault_db_*) - Configuration OIDC Entra ID (
vault_entraid_*) - Configuration edu-ID (
vault_eduid_*) - Credentials FileService (
vault_fileservice_*)
ansible-vault edit group_vars/vault.yml# Vérifier la syntaxe
ansible-playbook playbook.yml --syntax-check
# Dry-run
ansible-playbook playbook.yml --ask-vault-pass --check# Depuis la racine du projet
make war
# ou
./gradlew warcd ansible
# Déploiement complet (Tomcat config + App + Apache)
ansible-playbook playbook.yml --ask-vault-pass
# Forcer la mise à jour si la version existe déjà
ansible-playbook playbook.yml --ask-vault-pass -e "polywiki_force_update=true"
# Déployer une version spécifique
ansible-playbook playbook.yml --ask-vault-pass -e "polywiki_version=2024-01-15"# Uniquement la configuration Tomcat
ansible-playbook playbook.yml --ask-vault-pass --tags tomcat
# Uniquement l'application (WAR + secrets)
ansible-playbook playbook.yml --ask-vault-pass --tags app
# Uniquement la configuration Apache
ansible-playbook playbook.yml --ask-vault-pass --tags apache# Déployer uniquement sur kissrv121
ansible-playbook playbook.yml --ask-vault-pass --limit kissrv121.epfl.ch| Variable | Description | Défaut |
|---|---|---|
polywiki_version |
Version/date de la release | Date du jour |
polywiki_force_update |
Écraser si la version existe | false |
polywiki_archive_keep_count |
Nombre d'archives à garder | 5 |
polywiki_tomcat_http_port |
Port HTTP Tomcat | 8080 |
polywiki_apache_server_name |
Hostname Apache | wiki.epfl.ch |
Le déploiement archive automatiquement les anciennes releases :
- Les releases sont archivées dans
/srv/tomcat/wiki/private/_archive/ - Format :
polywiki-{version}_{timestamp} - Les 5 dernières archives sont conservées (configurable via
polywiki_archive_keep_count)
Pour revenir à une version précédente :
# Sur le serveur cible
sudo systemctl stop tomcat-wiki
# Lister les archives disponibles
ls -la /srv/tomcat/wiki/private/_archive/
# Restaurer une archive
rm /srv/tomcat/wiki/webapps/ROOT
ln -s /srv/tomcat/wiki/private/_archive/polywiki-2024-01-14_1705234567 /srv/tomcat/wiki/webapps/ROOT
sudo systemctl start tomcat-wikiOu redéployer une ancienne version avec Ansible :
ansible-playbook playbook.yml --ask-vault-pass -e "polywiki_version=2024-01-14" -e "polywiki_force_update=true"ssh kis@kissrv121.epfl.ch
tail -f /srv/tomcat/wiki/logs/catalina.out
tail -f /srv/tomcat/wiki/logs/polywiki.logtail -f /var/www/vhosts/wiki.epfl.ch/logs/error.log
tail -f /var/www/vhosts/wiki.epfl.ch/logs/access.log# Tester le playbook en mode verbose
ansible-playbook playbook.yml --ask-vault-pass -vvv
# Tester la connexion SSH
ansible polywiki_prod -m pingssh kis@kissrv121.epfl.ch
ls -la /var/www/vhosts/wiki.epfl.ch/ssl/
openssl x509 -in /var/www/vhosts/wiki.epfl.ch/ssl/wiki.epfl.ch.crt.pem -noout -dates