Kategorier
LXC Operativsystem PHP

Linux Container API v4.0

Den enkla hypervisorn för Linux Containrar

Vad som började som ett simpelt skript för att se status på Linux containrar har utvecklats till en kraftfull PHP-fil som driver både Webbpanel och ett Restful API

Ett Restful API

REST är en akronym för REpresentational State Transfer. Det är en arkitektursstil för distribuerade system.

API är en akronym för Application Programming Interface, en sorts mellanhand mellan mjukvaror som låter olika program kommunicera.

Ett standardiserat sätt att kommunicera

API:et hanterar förfrågningar via GET och tar emot kommandon från POST och svarar med JSON.

Basic Auth används för autentisering, en array med användarnamn och lösenords-hash sparas i php filen.

För att göra förfrågningar från en extern maskin så kan man använda curl, wget eller en vanlig browser.

# curl -u username http://localhost:1587/api/host/info

# curl -u username -XPOST -F 'action=start' http://localhost:1587/api/container/alpine-base/

# wget -O - http://username:password@localhost:1587/api/host/info

Förfrågningar till server

GET /api/host/info
GET /api/host/memory
GET /api/host/loadavg
GET /api/host/network
GET /api/host/cpu

Kommandon & förfrågningar till container

GET /api/container/$name/info
POST /api/container/$name action=start
POST /api/container/$name action=stop
POST /api/container/$name action=restart
POST /api/container/$name action=freeze
POST /api/container/$name action=unfreeze
POST /api/container/$name action=snapshot newname=name type=overlayfs/dir

Runtime-Miljö

Det finns flera olika sätt att köra API:et på dina servrar.

PHPs inbyggda webbserver

Drift med PHPs inbyggda webbserver är fördelaktigt eftersom det förebygger konflikter med andra webbtjänster som kanske körs på värdservern.

# php -S 0.0.0.0:1587 /opt/lxc-tools/lxc-api.php

Tjänsten kan startas som en SystemD-service och kan då kontrolleras med ”systemctl” kommandot tillsammans med övriga Linuxtjänster.

Beroenden

PHP and LXC of course, all data is collected from the kernel or by native Linux commands.

SSL Certifikat

Om du vill lägga till SSL-certifikat så behövs Apache, Nginx, Lighttpd eller någon annan PHP-kompatibel server.

Med hjälp av SystemD

Skapa en ny servicefil som heter ”/etc/systemd/system/lxc-api.service”

[Unit]
Description=LXC-Api Server
After=network.target
ConditionPathExists=/opt/lxc-tools/lxc-api.php

[Service]
ExecStart=/usr/bin/php -S 0.0.0.0:1587 /opt/lxc-tools/lxc-api.php
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

Aktivera och starta sedan tjänsten
# systemctl enable lxc-api
# systemctl start lxc-api

Webbpanel

Webbgränssnittet använder det egna API:et för att hämta information om både värddatorn och dom olika containrarna utan att ladda om sidan.