ansible-roles-paquerette
Proposition de rôles ansible minimaux, pour mettre en oeuvre et maintenir des applications sur des machines auto hébergées ou dans le cloud.
Systèmes supportés : Ubuntu 16.04 LTS, Ubuntu 18.04 LTS partiellement : debian 9
Choix, discutables ! :
-
configuration basée sur deux partitions, 1 système, 1 "production" montée sur /mnt/vdb par défaut
-
monitoring : monit
-
backup : backupninja (!), backup externe en mode "master/slave" : un serveur externe se connecte sur la machine pour récupérer les archives mises à sa disposition
-
mail, remontée de messages : postfix configuré en relai SMTP, copie cachée systématique permettant l'envoi de sms par exemple, non détaillé ici
-
tous les services web utilisent des certificats letsencrypt
L'organisation des scripts se fait de la façon suivante :
1 - L'inventaire
C'est la partie qui définit la liste des machines pilotées, la composition de la plateforme de support applicative, la liste des instances applicatives et toutes les variables utiles aux rôles.
En gras, les groupes à définir localement, selon les besoins.
- secret : les variables qui doivent rester secrètes (mot de passe etc...)
-
- base_server : toutes les variables communes non secrètes
-
-
- test : toutes les variables propres aux machines de test
-
-
-
- prod : toutes les variables propres aux machines de production
-
etc...
fichiers dans group_vars cf hosts.example
2 - Le serveur
C'est la partie qui définit les base du serveur, elle est la couche basse. Elle met en oeuvre :
- l'organisation des répertoires et fichiers
- la localisation du serveur
- la stratégie de sauvegarde
- la stratégie de monitoring
rôle : base_server
utilitaires : server_<...>
3 - La plateforme de support applicative
C'est la partie qui définit l'ensemble des services ou composants nécessaire au fonctionnement d'une instance applicative. Elle met en oeuvre :
- les serveurs web (nginx, apache,...)
- les serveurs de base de données (mariadb, postgres, mongodb...)
- les languages (php, python, nodejs...)
- le monitoring associé à ces composants
rôle : base_platform
4 - Le déploiement de l'instance applicative et mise à jour
C'est la partie qui définit la méthode de déploiement et de mise à jour d'une instance applicative. Elle met en oeuvre, pour le déploiement :
- le téléchargement d'une application
- la création des bases de données et dépendances (certificat letsencrypt...)
- la configuration de base de l'application
- la mise en place des sauvegardes et du monitoring
- le démarrage du service
pour la mise à jour :
- le téléchargement de la nouvelle version
- l'arrêt du service
- la sauvegarde complète de la version courante à froid
- la mise à jour du logiciel et de la base de données + ou - automatisée selon l'application
- le redémarrage du service
rôles : <application>_instance
5 - Éléments réutilisables
Les rôles utilisent des parties factorisées dans des rôles réutilisables (création de base de données, de certificats etc...)
rôles : _app_<fonction>
6 - Gestion des instances
Il est possible de déclarer toutes les instances d'une machine dans la liste **app_instances"" dans les fichiers host_vars. Elles sont gérées à l'aide de l'utilitaire play.py qui génère les playbooks pour l'exécution du rôle lié à l'instance, avec l'ensemble de ses variables.
cf: le fichier d'inventaire host.example.yml
par exemple : ./pay.py host_example nc_mydomain_eu install
utilitaire : play.py
7 - Playbooks utilitaires
- Obtention de certificats letsencrypt pendant la coupure nocturne : playbook_new_certificates.yml
Notes :
ROLES STABLES
- base server
- base platform (apache, nginx, mysql/mariadb, mongodb, nodejs, postgres, php7_fpm, _python3 )
- _app_backup, _app_logrotate, _app_monit, _create_database, _letsencrypt_certificate
- backup en mode master/slave
- nextcloud (install-upgrade)
- collabora online (partner)
- dolibarr (install-upgrade)
- rocket.chat
ROLES NOUVEAUX OU EN DEVELOPPEMENT (qui peuvent subir un refactoring important):
- wekan snap
- _web_app (chrooted sftp only user, git, static, php)
- _app_env_python3 (virtual env, requirements, git) (refactoring)
- _flask_app_instance
- mpapi_instance
- nap_instance
- turn_server
- _app_log_inventory (refactoring)'
TODO : priorité :
- nextcloud upg :
occ db:add-missing-indices / occ db:convert-filecache-bigint à surveiller - déplacer le /var/lib/ postgres.... dans /mnt/vdb/ à l'étude
- failtoban pour les services (ou pas)
En cours d'abandon :
- mattermost, pour rocket.chat
- multi instance pour mattermost
- mise à jour des scripts mattermost avec les éléments réutilisables