adimeo-lab / deckle
Automation tool for containerized projects
Installs: 6
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 5
Type:application
Requires
- php: ^7.3
- ext-curl: *
- ext-json: *
- ext-posix: *
- docker-php/docker-php: ^2.0
- objective-php/events-handler: ^3.1
- objective-php/services-factory: ^3.1
- padraic/phar-updater: ^1.0
- symfony/console: ^4.3
- symfony/filesystem: ^4.3
- symfony/finder: ^4.3
- symfony/yaml: ^4.3
Requires (Dev)
- codeception/codeception: ^3.1
- phpro/grumphp: ^0.17.2
- squizlabs/php_codesniffer: ^3.5
- symfony/var-dumper: ^4.3
This package is auto-updated.
Last update: 2024-10-25 02:01:25 UTC
README
Concept
Parce que Docker ne fonctionne (correctement) que sous Linux, et que nous sommes nombreux à travailler sous Mac, nous avons choisi de faire tourner nos environnements de référence dans une machine virtuelle Ubuntu.
L'administration d'un tel environnement peut s'avérer complexe, voire déroutant pour un junior. Deckle a vocation à simplifier cette administration en automatisant de nombreuses tâches, aussi bien en rapport avec le déploiement de l'environnement qu'avec son utilisation quotidienne.
Et parce que son environnement est riche, on a fait en sorte que sous Linux aussi, Deckle devienne notre environnement de développement de référence.
Composants
Pour fonctionner de manière optimale, l'ecosystème Deckle requiert (notamment) les compsoants suivants :
-
macOs
-
Linux (Ubuntu/Debian)
Paramétrage
Installation des dépendances
La majorité des outils en ligne de commande nécessaires au bon fonctionnement de Deckle sont soit natifs
sur macOs soit installables avec brew
. L'installateur de Deckle procédera à l'installation de ces dépendances.
Virtual Box
Téléchargez l'installateur sur le site officiel.
Vagrant
- macOs
- Télécharger l'installateur sur le site officiel
- GNU/Linux (Ubuntu/Debian)
- l'installateur de Deckle procédera à l'installation pour vous
Mutagen
Pour assurer des performances maximales, nous n'utilisons pas de montage de volume entre l'hôte et le container, mais un outil de synchronisation ultra performant qui installe un daemon dans le container et assure en permanence une synchronisation bi-directionelle entre l'hôte et le container, avec une precedence donnée à l'hôte.
Cet outil s'appelle mutagen
et s'installe sous macOs à l'aide de brew
.
NOTE : Si vous tentez d'utilisez Deckle sur une autre plateforme que macOs (Linux notamment), il faut télécharger le package sur la page GitHub du projet.
Installation de Deckle
Dans un premier temps, rendez-vous sur deckle.adimeo.eu pour télécharger la dernière version de Deckle.
Ensuite, pour installer l'environnement nécessaire au fonctionnement de Deckle, exécutez :
deckle install
Dans le cas où tout s'est bien passé, vous devriez pouvoir accéder à la machine virtuelle Deckle et voir les containers en fonctionnement sur Portainer (identifiants par défaut : admin/portainer).
Fine tuning
Authentification SSH
Le plus confortable pour se connecter en SSH sera le recours à une clé SSH, et une configuration de votre client.
Le préalable est donc de disposer d'une paire de clés RSA associée à son compte utilisateur. Idéalement, cette même clé devrait être associée à votre compte GitHub.
La première étape consiste donc à copier votre clé publique sur la VM :
deckle vm:ssh:copy-id
Ensuite, il faut indiquer à SSH que l'on souhaite propager sa clé privée dans les sessions distantes (ce qui permet de ne PAS la copier physiquement dans la VM) en éditant votre fichier de config SSH :
vi ~/.ssh/config
Et en y ajoutant la section suivante :
Host deckle-vm
Hostname deckle-vm
User deckle
AddKeysToAgent yes
ServerAliveInterval 60
ForwardAgent Yes
IdentitiesOnly yes
UseKeychain yes # macOs uniquement
Travailler avec Deckle
Nouveau projet
Pour déployer un nouveau projet dans la machine virtuelle Deckle, il vous suffit de vous placer dans le dossier racine de votre projet et d'exécuter :
deckle bootstrap <projectid> <provider/template>
Où :
- est l'identifiant de votre projet. Attention, celui-ci doit être unique et ne comporter aucun caractère spécial (lettres seulement)
- <provider/template> est le nom du template de configuration Deckle à utiliser. La liste des templates peut être obtenue en exécutant :
deckle templates:list
ou en consultant le dépôt officiel.
Une fois le projet bootstrapé, il sera éventuellement nécessaire d'adapter le template au projet en cours en parcourant les fichiers du dossier ./deckle
nouvellement créé. Chaque template fourni un README expliquant ses grands principes de fonctionnement et ce qu'il convient d'ajuster ou non.
Initialisation de l'environnement
Pour déployer un projet préalablement bootstrapé (i.e. disposant d'une configuration opérationnelle dans un dossir ./deckle
), il suffit d'exécuter :
cd project/diretory
deckle up
Si la configuration Deckle du projet a été mise à jour, il peut être nécessaire de redéployer certains fichiers locaux en réexécutant :
cd project/diretory
deckl init
Synchronisation des fichiers sources dans l'image
Chaque projet doit fournir un fichier deckle/mutagen.yml
pour fonctionner correctement avec Deckle. Pour démarrer la
synchronisation, exécuter :
cd project/directory
deckle mutagen:sync start
NOTE : la commande deckle mutagen:sync <operation>
peut être abrégée en deckle sync <operation>
Pour contrôler le bon fonctionnement de la synchronisation en continu :
deckle mutagen:monitor
Ou pour surveiller une première synchronisation :
deckle mutagen:monitor -u
Auquel cas le moniteur s'interrompera automatiquement lorsque toutes les sessions seront synchronisées.
Installation des dépendances
Pour installer les dépendances d'un projet à l'aide de composer
, exécutez :
deckle composer install
NOTE: si vous voulez passer des paramètres à composer
, il faut les faire précéder de la séquence --
afin
que Deckle ne les considère pas comme lui étant destinés. Exemple :
deckle composer install -- --no-interaction
Ouvrir un shell dans un container
Pour accéder rapidement aux images de l'environnement en shell, exécutez :
deckle sh
Ceci ouvrira une session shell automatiquement dans le container identifié dans la section app.container
de la configuration. Si vous souhaitez accéder à un autre container de la machine virtuelle, utilisez :
deckle sh <container-name> # par exemple deckle sh mysql57
Ouvrir un shell dans la Deckle Machine
Pour accéder en ssh à la machine Deckle, utilisez simplement :
deckle vm:ssh
Cette commande ouvrira un shell ssh en tant que l'utilisateur deckle
. Pour passer en root, exécutez sudo -s
une fois dans le shell distant. Au besoin, le mot de passe par défaut de l'utilisateur deckle
est ... deckle
.
Aide et autres commandes
Pour obtenir plus d'informations sur ces commandes et/ou découvrir les autres commandes disponibles, consultez l'aide embarquée :
# afficher toutes les commandes disponibles deckle list # afficher le détail de l'utilisation d'une commande deckle help <command> # exemple deckle help vm:ssh
Autres services
La Deckle Machine intègre un certain nombre de services, dont la plupart offrent une interface web d'accès et/ou de monitoring. Les principales sont listées dans ce chapitre. Pour voir la liste de toutes les applis installées, exécutez :
deckle apps list
Et pour savoir si elles exposent une interface web (ainsi que leur état), utilisez :
deckle apps status
Si une app expose un port 80, la convention veut que cette interface web soit accessible par l'url http://<app-name>.deckle.local
.
Portainer
http://portainer.deckle.local admin/portainer
Traefik
Traefik est le reverse proxy qui permet d'accèder aux différents container via les adresses en *.deckle.local
. Vous pouvez accéder à son UI à l'adresse ci-dessous pour consulter la liste des routers HTTP ou TCP qui sont configurés dans l'environnement Deckle :
MySQL 5.7
Une instance de phpMyAdmin configurée pour accéder au serveur MySQL 5.7 est disponible à l'adresse suivante :
Toutefois, il est également possible (et préférable) de configurer un client plus classique (comme MySQL Workbench) en utilisant les informations de connexion suivantes :
- hôte :
mysql57.deckle.local
(attention, depuis les autres containers, il faut utilisermysql57
uniquement) - user : root
- pass : root
Maildev
Maildev est un serveur de mail local permettant d'intercepter tout mail sortant d'une application et de les consulter dans un webmail accessible sur :
Pour que vos applications utilisent ce service en développement, il suffit de les configurer pour utiliser l'hôte maildev
en guise de serveur SMTP.
XHGui
Cette application permet de consulter des traces de profiling générées par XHProf. Pour les projets utilisant un template Deckle officiel (provider "adimeo"), il suffit d'ajouter ?xhprofile
ou &xhprofile
dans n'importe quelle URL du projet. Ce paramètre peut également être passé en POST.
Sa présence déclenchera la collecte d'informations de profiling que vous retrouverez sur :
Etendre Deckle
Commandes locales
Si vous souhaitez écrire une commande spécifique à un projet, vous pouvez créer une classe dans ./deckle/commands
.
Le fichier contenant la classe doit s'appeler *Command.php
et étendre AdimeoLab\Deckle\AbstractDeckleCommand
.
| Attention : pour développer votre commande, il vous faudra installer les sources de Deckle dans votre dossier ./deckle
,
| mais ces sources ne seront pas celles utilisées à l'exécution. A la place, ce sont celles embarquées dans le binaire
| deckle(.phar)
qui le seront. Il n'y a pour l'heure aucun mécanisme de contrôle de versions pour les commandes locales.
Support
Problèmes connus
Certaines commandes impliquant une connexion SSH depuis la VM échouent avec le message 'Host key verification failed.
'
Le message Host key verification failed.
signifie en général que la machine distante n'est pas connue de la VM (i.e.
que son identité est absente du fichier ~/.ssh/known_hosts
).
Pour remédier à ce problème, il faut faire une première connexion depuis la VM elle-même sur la machine concernée.
La résolution des hôtes *.deckle.local ne fonctionne pas sur macOs
Si ce problème survient, tentez de redémarrer le sous-système DNS de macOs comme suit :
dscacheutil -flushcache sudo killall -HUP mDNSResponder
En cas de problème avec la mise en oeuvre de DNSmasq, consulter ce blog
Toutes les URL en http://*.deckle.local
affichent un simple message 404 not found
Ceci est du à un problème de configuration de Traefik. Pour consulter l'état de Traefik, tentez d'accéder à son UI par l'adresse suivante :
http://traefik.deckle.local:8080
Autres problèmes
Si vous rencontrez des problèmes durant l'installation ou durant l'utilisation de Deckle, merci de contacter Gauthier ou de créer une issue sur le dépôt GiHub.