Aller au contenu

Komodo Periphery

Pour cela, nous devons passer par Komodo Periphery.

Komodo Periphery est un petit serveur web sans état qui s'exécute sur les serveurs que nous souhaitons connectés à Komodo.
Il expose une API appelée par Komodo Core pour :

  • effectuer des actions sur le serveur,
  • obtenir l'utilisation du système ainsi que l'état et les journaux des conteneurs.

Il est uniquement destiné à être accessible depuis le Core et dispose d'une liste blanche d'adresses pour limiter les IP autorisées à appeler cette API. La passkey (définie lors de l'installation de Komodo Core) permet également de limiter les accès à l'API.

Il existe deux solutions pour déployer Komodo Periphery :

  • Conteneur Docker
  • Systemd

Personnellement, je préfère utiliser des conteneurs avec un utilisateur non-root. Après quelques tests avec la version conteneur, je me suis tourné vers l'agent systemd qui m'est apparu moins compliqué à utiliser pour lancer des conteneurs en tant qu'utilisateur non-root.

💾 Installation de l'agent avec systemd

Installation de l'agent
# En tant qu'utilisateur autorisé à instancier des conteneurs Docker
curl -sSL https://raw.githubusercontent.com/moghtech/komodo/main/scripts/setup-periphery.py | python3 - --user

# Cela déploie la configuration suivante dans le home directory de l'utilisateur.
.config/
|-- komodo/
|   `-- periphery.config.toml
`-- systemd/
    `-- user/
        `-- periphery.service

Il faut maintenant configurer le fichier /home/MonUser/.config/komodo/periphery.config.toml

Extrait du fichier .config/komodo/periphery.config.toml
################################
# 🦎 KOMODO PERIPHERY CONFIG 🦎 #
################################

## Optional. The port the server runs on.
## Env: PERIPHERY_PORT
## Default: 8120
port = 8120

(...)

repo_dir = "/srv/repos" # Pas encore utilisé

stack_dir = "/srv/stacks" # Répertoire où seront déployées les stacks Docker

(...)

########
# AUTH #
########

allowed_ips = [] # Je n'ai rien précisé ici sinon Komodo Core n'arrive pas à se connecter

## Optional. Require callers to provide on of the provided passkeys to access the periphery api.
## Env: PERIPHERY_PASSKEYS or PERIPHERY_PASSKEYS_FILE
## Default: empty, which will not require any passkey to be passed by core.
passkeys = ['VOTRE_PASSKEY'] # Renseignez ici la passkey créée précédemment lors de la configuration de Komodo Core

############
# Security #
############

## Enable HTTPS server using the given key and cert.
## If true and a key / cert at the given paths are not found, 
## self signed keys will be generated using openssl.
## Env: PERIPHERY_SSL_ENABLED
## Default: false (will change to `true` in later release)
ssl_enabled = true

## Path to the ssl key.
## Env: PERIPHERY_SSL_KEY_FILE
## Default: /etc/komodo/ssl/key.pem
ssl_key_file = "/home/MonUser/.config/komodo/ssl/key.pem"

## Path to the ssl cert.
## Env: PERIPHERY_SSL_CERT_FILE
## Default: /etc/komodo/ssl/cert.pem
ssl_cert_file = "/home/MonUser/.config/komodo/ssl/cert.pem"

(...)

Créez les dossiers /srv/stacks et /srv/repos :

Création des répertoires
sudo mkdir /srv/{stacks,repos}
sudo chown -R MonUser: /srv/{stacks,repos}

Une fois le fichier de config renseigné et les répertoires créés (repos et stacks) :

Activation de l'agent
# Toujours en tant que votre user
systemctl --user restart periphery

systemctl --user status periphery

* periphery.service - Agent to connect with Komodo Core
     Loaded: loaded (/home/MonUser/.config/systemd/user/periphery.service; enabled; preset: enabled)
     Active: active (running) since Fri 2025-04-25 13:53:05 UTC; 11min ago
   Main PID: 1929846 (sh)
      Tasks: 10 (limit: 37715)
     Memory: 7.1M
        CPU: 7.562s
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/periphery.service
             |-1929846 /bin/sh -lc "/home/MonUser/.local/bin/periphery --config-path /home/MonUser/.config/komodo/periphery.config.toml"
             `-1929849 /home/MonUser/.local/bin/periphery --config-path /home/MonUser/.config/komodo/periphery.config.toml

Apr 25 13:53:05 srv-docker systemd[3808493]: Started periphery.service - Agent to connect with Komodo Core.
Apr 25 13:53:05 srv-docker sh[1929849]: 2025-04-25T13:53:05.060883Z  INFO periphery: Komodo Periphery version: v1.17.2
Apr 25 13:53:05 srv-docker sh[1929849]: 2025-04-25T13:53:05.060910Z  INFO periphery: PeripheryConfig { port: 8120, bind_ip: "[::]", root_directory: "/home/MonUser/.config/komodo", repo_dir: Some("/srv/repos"), stack_dir: Some("/srv/s (...)"
Apr 25 13:53:05 srv-docker sh[1929849]: 2025-04-25T13:53:05.061001Z  INFO periphery: <F0><9F><94><92> Periphery SSL Enabled
Apr 25 13:53:05 srv-docker sh[1929849]: 2025-04-25T13:53:05.061034Z  INFO periphery: Komodo Periphery starting on https://[::]:8120

systemctl --user enable periphery

sudo loginctl enable-linger $USER # Afin d'éviter l'arrêt du service lors de la déconnexion du user

🚀 Connexion du serveur à Komodo Core

L'agent maintenant installé, connectez-vous sur l'interface web de Komodo, puis rendez-vous sur Servers.

server01

Cliquez sur New server et renseignez un nom :

alt text

Renseignez ensuite son adresse IP dans Address (ex. : https://IP:8120), cochez la case Enabled puis cliquez sur Save :

alt text

Le serveur doit alors passer en statut OK.

alt text

Il nous reste plus qu'à déployer des conteneurs.