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.