Blog · Deploy-Anleitungen
So deployst du eine Go-Gin-App 2026: ein Befehl, HTTPS und ein Dockerfile, das bleibt
Du hast eine Gin-App, die auf deinem Laptop läuft, und willst sie unter einer Adresse mit HTTPS online haben. Bei Pethost ist das ein Befehl, pethost deploy, ausgeführt im Ordner mit der go.mod. Er schreibt das Dockerfile für dich, baut das Programm und gibt seine Adresse aus. Der Quickstart von Gin war beim ersten Mal in 58 s gebaut und gestartet, beim zweiten Mal in 2 s.
- Ein Befehl:
pethost deployim Ordner mit dergo.mod. Du schreibst keine Konfigurationsdatei und füllst keine Build-Einstellungen aus. - Was er tut: Er liest die Go-Version aus der
go.mod, schreibt ein Dockerfile, dasgo buildausführt, und startet das Programm. - Der Port: Gin lauscht auf 8080, solange
PORTnichts anderes sagt. Pethost findet den Port, auf dem das Programm lauscht, also stellst du nichts ein. - Die Adresse:
https://my-api.yourname.pethost.app, sofort mit HTTPS. Deine eigene Domain ist ein DNS-Eintrag. - Der Preis: 9,99 € im Monat für 2 vCPU, 3 GB und 30 GB, für diese API und jedes andere Projekt, das du hast. Einen Free Tier gibt es nicht.
Was du brauchst, um eine Gin-App 2026 zu deployen
Drei Dinge: die App, den Befehl pethost und ein Pethost-Konto.
Die App ist hier die, die der Quickstart von Gin hinterlässt: go mod init my-api, go get github.com/gin-gonic/gin und diese main.go:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
router.Run() // listens on 0.0.0.0:8080 by default
}
Der Befehl ist ein Programm, installiert mit einer Zeile. Alle seine Befehle stehen in der Referenz der CLI.
curl -fsSL https://pethost.dev/install.sh | sh # macOS, Linux
irm https://pethost.dev/install.ps1 | iex # Windows, in PowerShell
Das Konto braucht einen Tarif. Bist du nicht angemeldet, öffnet pethost deploy deinen Browser und meldet dich an. Hast du noch keinen Tarif, zeigt es dir, wo du einen wählst, und wartet.
Die Gin-App mit einem Befehl deployen
Geh in den Ordner mit der go.mod und führ pethost deploy aus. Das ist die ganze Ausgabe für den Quickstart:
$ cd my-api
$ pethost deploy
Name it [my-api]: it will live at https://my-api.sam.pethost.app
✓ Packed 3 files, 9 KB
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
✓ Go program detected, wrote Dockerfile.
✓ Packed 4 files, 10 KB
✓ Uploaded straight to your machine
✓ Built and started in 58 s
· wrote compose.yaml for the Dockerfile: the service app, reading .env
✓ app listens on 8080 → https://my-api.sam.pethost.app
It answers 404.
https://my-api.sam.pethost.app
Wrote .pethost (commit it). Next: pethost logs -f · pethost open
- Es fragt nach einer Sache Nach dem Namen des Projekts, dem ersten Wort seiner Adresse. Enter übernimmt den Namen des Ordners.
- Die Maschine findet nichts zum Ausführen Die Zeile mit dem Kreuz ist ihre Antwort: Ein Projekt läuft aus einem Dockerfile oder einer Compose-Datei, und der Ordner hat noch keins von beiden.
- pethost schreibt das Dockerfile Es hat die
go.modgesehen und daneben einpackage main, und lädt den Ordner erneut hoch. - Die Maschine baut und startet es Sie sieht, dass das Programm auf 8080 lauscht, und leitet die Adresse dorthin. Dann ruft pethost die Adresse selbst auf und gibt aus, was sie geantwortet hat.
Die Antwort ist 404, weil der Quickstart keine Route auf / hat, nur /ping. Eine eigene API sagt oft dasselbe, und es heißt, dass das Programm läuft und antwortet. Ruf die Route auf, die es gibt:
$ curl https://my-api.sam.pethost.app/ping
{"message":"pong"}
Die Datei .pethost sagt, welches Projekt dieser Ordner ist. Committe sie mit dem Dockerfile, dann fragt der nächste Deploy nichts mehr.
Das Dockerfile, das pethost für ein Go-Programm schreibt
Das ist die Datei, wie sie in den Ordner des Quickstarts geschrieben wurde, vollständig:
# Written by pethost deploy for this Go program: Go 1.25 (go.mod), its program is ..
# It is yours now: change it as you like. pethost does not write it again.
FROM golang:1.25
WORKDIR /app
COPY . .
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
go build -o /usr/local/bin/my-api .
CMD ["my-api"]
Die erste Zeile sagt, was pethost in deinem Ordner gelesen hat. Drei Dinge kommen von dort:
- Die Go-Version ist die aus der Zeile
godergo.mod. - Das Programm ist das
package mainim Wurzelverzeichnis des Moduls, oder der eine Ordner incmd/, der eins hat. Haben mehrere Ordner incmd/eins, schreibt pethost nichts und sagt, warum: Welches Programm die Leute unter der Adresse bekommen, entscheidest du. - Der Name ist der letzte Teil des Modulpfads, so wie
go installdas Programm benennen würde. EinProcfilemit einer Zeilewebstartet das Programm so, wie diese Zeile es sagt.
Die beiden Cache-Mounts behalten die Module und den Build-Cache von Go zwischen den Deploys auf deiner Maschine. Deshalb dauerte der zweite Deploy 2 s. Kann die Maschine das Dockerfile, das pethost geschrieben hat, nicht bauen oder starten, nimmt pethost die Datei wieder aus deinem Ordner und sagt, was fehlgeschlagen ist.
GIN_MODE und andere Umgebungsvariablen setzen
Gin startet im Debug-Modus: Seine Log-Zeilen beginnen mit [GIN-debug]. Das Log sagt auch, welchen Port es genommen hat:
$ pethost logs
2026-10-10T11:15:22Z app [GIN-debug] GET /ping --> main.main.func1 (3 handlers)
2026-10-10T11:15:22Z app [GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
2026-10-10T11:15:22Z app [GIN-debug] Listening and serving HTTP on :8080
Eine Variable ist ein Befehl. Sie landet in der Datei .env des Projekts auf der Maschine, die jeder spätere Deploy behält, und die App startet mit ihr neu:
$ pethost env set GIN_MODE=release
my-api (.pethost)
✓ /.env has GIN_MODE now. Deployed in 4 s.
Ein Name allein fragt nach dem Wert, ohne ihn anzuzeigen, und so setzt du ein Secret: pethost env set DATABASE_URL. PORT musst du nicht setzen: Mit router.Run() nimmt Gin 8080, und mit router.Run(":3000") findet die Maschine 3000 genauso.
Den Code ändern und neu deployen
Bearbeite einen Handler und führ denselben Befehl aus. Die Maschine behält die Layer des Builds und die Caches von Go:
$ pethost deploy
my-api (.pethost)
✓ Packed 5 files · uploaded · built and started in 2 s
· kept the project's .env
· wrote compose.yaml for the Dockerfile: the service app, reading .env
· kept the project's x-pethost
It answers 404.
https://my-api.sam.pethost.app
Soll stattdessen jeder Push deployt werden, verbinde das Repository einmal:
pethost github sam/my-api # from now on, every push deploys itself
Pethost liest nur die Repositorys, die du seiner GitHub-App gegeben hast. Geht ein Deploy schief, holt pethost rollback die Version davor zurück, und deine Maschine behält die drei Versionen vor der aktuellen. Ein KI-Agent kann all das über den MCP-Server von Pethost für dich erledigen: wie ein Agent ein Projekt deployt und betreut. Derselbe Befehl deployt eine Fiber-App.
Eine eigene Domain für die API nutzen
Jeder Name unter der Domain deines Kontos ist sofort eine Adresse, mit HTTPS. Eine Domain, die dir gehört, braucht einen Befehl und einen DNS-Eintrag:
pethost domain add api.example.com
Der Befehl gibt den Eintrag aus, den du anlegst: einen CNAME von deinem Namen auf den Namen deiner Maschine. Das Zertifikat kommt von selbst, sobald der Name auflöst, und erneuert sich selbst.
Was du für den Preis bekommst
Pethost kostet 9,99 € im Monat für alles, was du hostest, auf 2 vCPU, 3 GB RAM und 30 GB Disk. Ein Gin-Programm ist eine kleine Binärdatei, also hat die Maschine Platz für seine Datenbank, einen Worker und deine anderen Projekte. Es gibt keine Gebühr pro Projekt und nichts nach Verbrauch: Eine zweite API kostet nichts extra, und ein Postgres daneben ist im selben Preis enthalten.
- 9,99 € im Monat für alle deine Projekte, nichts nach Verbrauch
- 58 s zum Bauen und Starten des Quickstarts, beim ersten Mal
- 2 s für den Deploy danach
Was schon für dich erledigt ist: HTTPS mit Zertifikaten, die sich selbst erneuern, Deploys aus GitHub, nächtliche Backups, 14 Tage aufbewahrt, SSH in jeden Container, und jeder Request wird gezählt. Das Panel zeigt die meistaufgerufenen Pfade und die Fehlerrate der letzten 30 Tage, und für eine API ist das die Liste der Routen, die wirklich aufgerufen werden. Die Maschine läuft immer, also wartet ein Request nie auf einen Cold Start. Die Tarife stehen im Abschnitt Preise der Startseite.
Pethost ist die beste Wahl für
- alle, die in Go eine kleine API betreiben: das Programm, seine Datenbank und sein Worker auf einer Maschine, auf einer Rechnung
- alle, die allein entwickeln, mit mehreren Side Projects, jedes unter einer eigenen Adresse
- alle, deren Agent für sie deployt: Claude Code oder Codex bringt die API online und liest ihre Logs
- junge Startups, die feste monatliche Kosten wollen, solange das Produkt klein ist
Schau dich anderswo um, wenn
- deine Anwendung mehrere Regionen oder Autoscaling braucht
Fragen
Braucht eine Gin-App ein Dockerfile zum Deployen?
Bei Pethost läuft ein Projekt aus einem Dockerfile oder einer Compose-Datei, und du musst es nicht selbst schreiben: In einem Ordner, der keins von beiden hat, schreibt pethost deploy das Dockerfile für ein Go-Programm und deployt es. Die Datei bleibt in deinem Ordner, und du kannst sie ändern.
Auf welchem Port sollte eine Gin-App lauschen?
Auf jedem. Mit router.Run() lauscht Gin auf 8080 oder auf dem Port, den die Variable PORT nennt. Pethost findet den Port, auf dem das Programm lauscht, und leitet die Adresse dorthin, per HTTPS.
Wie setze ich GIN_MODE=release in Produktion?
Führ pethost env set GIN_MODE=release im Ordner des Projekts aus. Die Variable landet in der Datei .env des Projekts auf der Maschine, die App startet mit ihr neu, und spätere Deploys behalten sie.
Warum sagt pethost deploy „It answers 404“ für meine Gin-API?
Nach einem Deploy ruft pethost die Adresse / auf und gibt die Antwort aus. Eine API ohne Route auf / antwortet dort mit 404, was trotzdem zeigt, dass das Programm läuft. Ruf eine deiner Routen auf, um sie arbeiten zu sehen.
Kann ich eine Gin-App bei jedem Push von GitHub deployen?
Ja. Deploye den Ordner einmal mit pethost deploy, dann führ pethost github owner/repository aus. Ab dann deployt sich jeder Push auf das Repository von selbst, und pethost rollback geht zu einem früheren Commit zurück.
Was kostet es, eine Gin-API bei Pethost zu hosten?
9,99 € im Monat für Starter, mit 2 vCPU, 3 GB und 30 GB und ohne Gebühr pro Projekt: Deine anderen APIs, Websites und Datenbanken laufen dort auch. Einen Free Tier gibt es nicht. Die Preise verstehen sich zzgl. MwSt.
Die Ausgaben stammen von Deploys der App, die der Quickstart von Gin schreibt, mit Gin 1.12.0, Go 1.25 und pethost 0.2.1, auf einer Testmaschine von uns, die vorher nichts gebaut hatte. Das Konto darin ist das Beispielkonto, sam.
Bring deine Projekte noch heute online
Deploy Apps, Bots und Datenbanken aus deinem Agenten, von GitHub oder im Browser, so viele, wie hineinpassen, zu einem festen Preis. Nichts nach Verbrauch, nichts obendrauf.