EntwicklerVolumes und Traffic

Volumes, Speicher und Traffic

Persistente Volumes#

Die eigenen Dateien eines Containers werden bei jedem Deployment ersetzt. Alles, was deine App behalten muss, etwa Uploads oder eine SQLite-Datei, gehört auf ein Volume, das in den Container eingehängt wird.

hw $API/applications/$APP/storages | jq

hw -X POST $API/applications/$APP/storages -d '{"type": "persistent", "name": "uploads", "mount_path": "/app/uploads"}'
hw -X POST $API/applications/$APP/start   # mounts it
AufrufWas es tut
GET /applications/{uuid}/storages{persistent_storages, file_storages}
POST /applications/{uuid}/storagesEin Volume (type: persistent, name, mount_path) oder einen Datei-Mount (type: file, mount_path, content) hinzufügen
PATCH /applications/{uuid}/storagesEine ändern (per uuid)
DELETE /applications/{uuid}/storages/{storage_uuid}Sie samt Daten löschen

Datei-Mounts legen eine Datei, die du bereitstellst (zum Beispiel eine Konfigurationsdatei), unter mount_path ab. Ein Volume liegt auf einem Server: Bei mehreren Kopien hat jeder Server sein eigenes. Daten, die jede Kopie sehen muss, gehören in eine verwaltete Datenbank.

Volume-Backups#

Sichere ein Volume nach Zeitplan und behalte eine bestimmte Anzahl Archive auf dem Server:

hw -X PUT $API/applications/$APP/storages/$VOLUME/backups -d '{"frequency": "0 3 * * *", "retention_amount_locally": 7}'
hw -X POST $API/applications/$APP/storages/$VOLUME/backups/run   # one now
hw -X DELETE $API/applications/$APP/storages/$VOLUME/backups     # schedule and archives
  • frequency ist ein cron-Ausdruck oder hourly, daily, weekly oder monthly.
  • stop_during_backup: true stoppt die App, während das Volume archiviert wird, für eine konsistente Kopie von Dateien, die gerade benutzt werden.
  • Um Archive auch außerhalb des Servers aufzubewahren, füge einen S3-kompatiblen Bucket hinzu (POST /s3-storages) und übergib save_s3: true mit seiner s3_storage_uuid.

Storage-Volumes#

Wenn die eigene Disk eines Servers zu klein ist, füge ihm ein Storage-Volume hinzu: 10 bis 1000 GB Block Storage, eingehängt unter /mnt/volume-<id> auf dem Server, stündlich über das Abo des Servers abgerechnet. Richte das Volume einer App (host_path) oder einen Datenbank-Dump auf diesen Pfad.

SRV=$(hw $API/hostwolf/servers | jq -r '[.[] | select(.status == "ready")][0].uuid')   # a ready purchased server (app server or VPS)

hw "$API/hostwolf/servers/$SRV/volumes/offer?size_gb=50" | jq    # sizes allowed in its city and the price

# Without "confirm": true nothing is bought; the 422 answer has the price.
hw -X POST $API/hostwolf/servers/$SRV/volumes -H "Idempotency-Key: $(uuidgen)"   -d '{"size_gb": 50, "backups": true, "autogrow_max_gb": 200, "confirm": true}'

hw $API/hostwolf/servers/$SRV/volumes | jq '.[] | {id, status, size_gb, mount_path, monthly_price}'
AufrufWas es tut
GET /hostwolf/servers/{uuid}/volumesDie Volumes des Servers, mit Größe, Belegung, Backups und Preis
GET /hostwolf/servers/{uuid}/volumes/offerIn der Stadt des Servers erlaubte Größen und der Preis von size_gb
POST /hostwolf/servers/{uuid}/volumesEins hinzufügen (size_gb, backups, autogrow_max_gb, confirm)
PATCH /hostwolf/servers/{uuid}/volumes/{id}Vergrößern (size_gb), Backups ein- oder ausschalten, das Auto-Grow-Limit setzen
POST /hostwolf/servers/{uuid}/volumes/{id}/detachAushängen und vom Server abhängen
DELETE /hostwolf/servers/{uuid}/volumes/{id}Es samt Dateien löschen
GET /hostwolf/volumesAlle Volumes des Teams; ?status=detached für die abgehängten
POST /hostwolf/volumes/{id}/attachEin abgehängtes Volume an einen Server in derselben Stadt anhängen (server_uuid, confirm)
  • Preis: vom Anbieter der Stadt festgelegt, über den Katalog. In Vultr-Städten kostet ein Volume 1,24 $ im Monat für 10 GB, 3,11 $ für 25 GB und 12,38 $ für 100 GB, stündlich abgerechnet (Monatspreis ÷ 730).
  • Bestätigen: Ein neues Volume, eine größere Größe, das Einschalten von Backups und ein Auto-Grow-Limit erhöhen die Rechnung, deshalb brauchen sie "confirm": true. Ohne das ändert sich nichts, und die 422-Antwort enthält confirm_required: true, eine lesbare message und den Preis in quote.
  • Vergrößern geht im laufenden Betrieb: Das Dateisystem wächst mit, und nichts wird gestoppt. Volumes können nicht schrumpfen; füge stattdessen ein kleineres hinzu und lösche das alte.
  • Änderungen an Volumes sind auf 10 pro Minute begrenzt, zusammen mit den Buttons der Konsole.

Auto-Grow#

Setze autogrow_max_gb, und das Volume wächst von selbst, wenn es zu 85% voll ist: um 25%, mindestens 10 GB, bis zu deinem Limit. Das Dateisystem wächst im laufenden Betrieb, und die neue Größe wird ab dann berechnet. 0 schaltet es aus.

Backups#

Nächtliche Backups sind standardmäßig an. Sie sind verschlüsselt, werden extern in Amsterdam gespeichert und 7 Tage aufbewahrt. Du zahlst für den Platz, den sie belegen: 0,23 $ im Monat für 10 GB gespeicherte Daten, 2,23 $ für 100 GB.

hw $API/hostwolf/volumes/$VOL/backups | jq                                 # newest first
hw -X POST $API/hostwolf/servers/$SRV/volumes/$VOL/backups                  # one now
hw -X POST $API/hostwolf/servers/$SRV/volumes/$VOL/restore   -d '{"backup_id": "4f1c2a9b", "target": "new", "confirm": true}'
  • target: "same" stellt in das Volume selbst wieder her: Dateien, die nach dem Backup geschrieben wurden, werden entfernt, und das Volume ist nicht erreichbar, bis die Wiederherstellung fertig ist.
  • target: "new" stellt in ein neues Volume derselben Größe auf demselben Server wieder her, abgerechnet wie jedes Volume.
  • PATCH … {"backups": false} schaltet sie aus; die vorhandenen Backups werden nach 7 Tagen gelöscht.

Abhängen, Anhängen und die 7-tägige Schonfrist#

  • Abhängen (POST …/detach) hängt ein Volume aus und nimmt es von seinem Server. Es behält seine Dateien und wird weiter berechnet, bis du es wieder anhängst oder löschst. Stoppe vorher alles, was darauf schreibt.
  • Wenn ein Server gelöscht wird, werden seine Volumes abgehängt und 7 Tage lang kostenlos aufbewahrt. kept_until zeigt das Datum; danach werden das Volume und seine Dateien gelöscht.
  • Anhängen: Hänge ein abgehängtes Volume mit POST /hostwolf/volumes/{id}/attach an einen deiner bereiten Server in derselben Stadt an. Es wird in etwa einer Minute unter demselben Pfad eingehängt. Ein Volume eines gelöschten Servers wird ab dann wieder berechnet, deshalb braucht das "confirm": true.
  • Die Backups eines abgehängten Volumes lassen sich in ein neues Volume auf einem anderen Server in derselben Stadt wiederherstellen: POST /hostwolf/volumes/{id}/restore mit backup_id, server_uuid und confirm.
  • DELETE /hostwolf/volumes/{id} löscht ein abgehängtes Volume sofort.

Traffic#

Jeder Server enthält 1 TB ausgehenden Traffic pro Monat. Darüber hinaus kostet jedes GB 0,01 $, aufgeschlagen auf die Rechnung dieses Servers. Eingehender Traffic ist kostenlos.

hw $API/hostwolf/servers/$SRV/traffic | jq
# {"month": "2026-10", "outbound_bytes": 12400000000, "outbound": "12.4 GB", "included_bytes": 1000000000000,
#  "overage_bytes": 0, "price_per_gb": 0.01, "bill_so_far": 0, "sampled_at": "…"}

hw "$API/hostwolf/traffic?month=2026-09" | jq '.bill_so_far, .servers[].outbound'   # every server, any month

Der Traffic wird alle 10 Minuten gemessen. Die Seite Analytics in der Konsole zeigt die Anfragen pro App.

Port 25 (ausgehende E-Mail) ist auf jedem Server gesperrt; sende E-Mails über die API eines Anbieters oder über Port 587.

Kommst du nicht weiter, oder fehlt ein Endpunkt? Sag es uns unter app.hostwolf.net/contact oder [email protected].