# 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 : \_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\_\** ## 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 [paquerette.eu](http://paquerette.eu)