piku
, inspiré de dokku
, vous permet d'effectuer des déploiements git push
sur vos propres serveurs, aussi petits soient-ils.
TL;DR :
curl https://piku.github.io/get | sh
Il existe également d'autres méthodes d'installation disponibles, notamment cloud-init
et l'installation manuelle.
piku
est considéré comme STABLE . Il est activement maintenu, mais « activement » signifie ici que l'ensemble des fonctionnalités est à peu près terminé, il n'est donc mis à jour que lorsque de nouveaux environnements d'exécution de langage sont ajoutés ou que des bogues reproductibles apparaissent.
Il nécessite actuellement Python 3.7 ou supérieur, car même si 3.8+ est désormais la version de base de Python 3 dans Ubuntu LTS 20.04 et que Debian 11 est déjà passée à 3.9, il n'y a pas de différences substantielles entre ces versions.
Nous voulions un moyen de type Heroku/CloudFoundry pour déployer des éléments sur quelques cartes ARM
, mais comme dokku
ne fonctionnait pas sur ARM
à l'époque et que même docker
peut parfois être excessif, une solution plus simple était nécessaire.
piku
est actuellement capable de déployer, de gérer et de faire évoluer indépendamment plusieurs applications par hôte sur les architectures ARM et Intel, et fonctionne sur n'importe quel fournisseur de cloud (ainsi que sur du bare metal) pouvant exécuter Python, nginx
et uwsgi
.
piku
prend en charge un flux de travail de type Heroku :
git
SSH pointant vers votre serveur piku
avec le nom de l'application comme nom de dépôt : git remote add piku piku@yourserver:appname
.git push piku master
(ou si vous souhaitez pousser une branche différente de celle actuelle, utilisez git push piku release-branch-name
).piku
détermine le runtime et installe les dépendances pour votre application (en créant tout ce qui est nécessaire).virtualenv
.GOPATH
distinct pour chaque application.package.json
dans node_modules
.pom.xml
ou build.gradle
.leiningen
, soit la CLI Clojure et un fichier deps.edn
.bundle install
de vos gemmes dans un dossier isolé.Procfile
et démarre les travailleurs concernés en utilisant uwsgi
comme gestionnaire de processus générique.release
worker qui est exécuté une fois lorsque l'application est déployée.config:set
) ou augmenter/réduire les processus de travail ( ps:scale
).nginx
dans un fichier ENV
. Vous pouvez également déployer un site statique de style gh-pages
en utilisant un type de travailleur static
, avec le chemin racine comme argument, et exécuter une tâche release
pour effectuer un traitement sur le serveur après git push
. piku
prend entièrement en charge les hôtes virtuels : vous pouvez héberger plusieurs applications sur le même VPS et utiliser des alias DNS pour y accéder via différents noms d'hôte.
piku
configurera également un certificat privé ou en obtiendra un via Let's Encrypt pour activer SSL.
Si vous êtes sur un réseau local et accédez à piku
à partir de clients macOS/iOS/Linux, vous pouvez essayer d'utiliser piku/avahi-aliases
pour annoncer différents hôtes pour la même adresse IP via Avahi/mDNS/Bonjour.
Outre les sites statiques, piku
prend également en charge le mappage direct de préfixes d'URL spécifiques aux chemins du système de fichiers (pour servir les actifs statiques) ou la mise en cache des réponses back-end (pour supprimer la charge des applications).
Ces fonctionnalités sont configurées en définissant les valeurs appropriées dans le fichier ENV
.
piku
est destiné à fonctionner dans n'importe quel environnement de type POSIX où vous disposez de Python, nginx
, uwsgi
et SSH : il a été déployé sur Linux, FreeBSD, Cygwin et le sous-système Windows pour Linux.
À titre de base, il a commencé son développement sur un Raspberry Pi modèle B original de 256 Mo, et fonctionne toujours de manière fiable sur celui-ci.
Mais son utilisation principale est celle d'un micro-PaaS pour exécuter des applications sur des serveurs cloud équipés de processeurs Intel et ARM, avec Debian et Ubuntu Linux comme plates-formes cibles.
piku
prend actuellement en charge les applications écrites en Python, Node, Clojure, Java et quelques autres langages (comme Go) en préparation.
Mais en règle générale, s'il peut être invoqué depuis un shell, il peut être exécuté dans piku
.
git
, ssh
, uwsgi
, nginx
).