Nasazení přes CLI (rosticli stacks push)
rosticli stacks push je příkaz, který v jednom kroku sestaví Docker image z vašeho projektu, nahraje ho na Roští a spustí stack. Stačí mít v pracovním adresáři Dockerfile a docker-compose.yml a spustit:
rosticli login # pouze při prvním použití — otevře prohlížeč
rosticli stacks push
rosticli login otevře přihlašovací stránku v prohlížeči. Po potvrzení se token uloží a příkaz není třeba opakovat. Pokud preferujete ruční zadání tokenu, použijte rosticli login --no-browser.
Při prvním spuštění se automaticky vytvoří nový stack (pokud ještě neexistuje) a uloží se jeho identifikátor do souboru .rostistate. Nemusíte stack předem vytvářet v administraci — příkaz se vás zeptá na název a profil (velikost VM) a stack vytvoří sám. Při každém dalším volání příkazu se stack aktualizuje — nahraje se nový image a stack se restartuje. Aktualizace aplikace je tedy vždy jen jeden příkaz.
Pokud chcete příkaz spustit pro konkrétní existující stack, předejte jeho ID příznakem --stack-id:
rosticli stacks push --stack-id 42
ID stacku najdete v administraci nebo ve výpisu rosticli stacks list. Pokud je adresář už spárovaný s jiným stackem (soubor .rostistate), příkaz upozorní na konflikt a odmítne pokračovat.
Co push dělá
Push prochází těmito kroky v pořadí:
- Kontrola prerekvizit — ověří, zda jsou přítomny
Dockerfile,docker-compose.ymla příkazdocker. Pokud chybí a máte k dispozici podporovaný AI nástroj, nabídne jejich vygenerování. - Výběr společnosti — použije uloženou hodnotu z
.rostistate, nebo se zeptá interaktivně. - Vytvoření stacku — pokud stack ještě neexistuje, vytvoří ho (název se odvozuje od aktuálního adresáře, lze přepsat příznakem
--name). - SSH klíč — vygeneruje sdílený ed25519 klíč a nainstaluje ho na stack (jednorázově).
- Čekání na SSH endpoint — počká, než je stack dostupný přes SSH (až 3 minuty).
- Build image —
docker build -t app:latest . - Export image na server —
docker save | ssh ... docker load - Nahrání docker-compose.yml — obsah souboru se nahraje na stack tak, jak je.
- Spuštění —
docker compose up -d
Po dokončení příkaz vypíše URL nasazené aplikace a připomene příkaz pro další nasazení.
Příprava Dockerfile a docker-compose.yml
Pomocí AI nástroje
Pokud Dockerfile nebo docker-compose.yml chybí, push to automaticky detekuje. Pokud máte na počítači nainstalovaný a nakonfigurovaný některý z podporovaných AI nástrojů, nabídne ho k vygenerování obou souborů:
$ rosticli stacks push
==> Checking prerequisites
! Dockerfile and docker-compose.yml are not found in the current directory.
An AI coding assistant can generate them for this project.
Available AI tools:
[1] Claude Code (claude)
[2] OpenCode (opencode)
[3] Gemini CLI (gemini)
[4] Cursor Agent (cursor-agent)
[5] Codex (codex)
[6] Aider (aider)
[7] Skip / create files manually
Select [1-7]:
Podporované nástroje (hledají se v PATH):
| Nástroj | Příkaz |
|---|---|
| Claude Code | claude |
| OpenCode | opencode |
| Gemini CLI | gemini |
| Cursor Agent | cursor-agent (alternativně cursor) |
| Codex | codex |
| Aider | aider |
Pokud je dostupný jen jeden nástroj, push se rovnou zeptá na potvrzení. Vybraný nástroj se spustí s předem připraveným promptem, který obsahuje pravidla pro Roští (správný název image, port 80, restart: unless-stopped atd.) a zároveň mu říká, aby po vytvoření nebo úpravě Dockerfile zkusil lokální docker build a případné chyby opravil. Po jeho dokončení push zkontroluje, zda soubory vznikly, a pokračuje.
Některé AI nástroje je potřeba po skončení jejich práce ukončit ručně. Push pak bude pokračovat.
Ručně
docker-compose.yml musí splňovat tato pravidla:
- Hlavní služba musí používat image
localhost/app:latest— to je přesný název, pod kterým Roští image na server nahraje. - Port 80 musí být namapován na port, na kterém aplikace naslouchá (naše reverzní proxy očekává port 80).
- Každá služba musí mít
restart: unless-stopped, jinak se po restartu serveru nespustí.
Příklad minimálního docker-compose.yml:
services:
app:
image: localhost/app:latest
restart: unless-stopped
ports:
- "80:8080"
environment:
APP_PORT: "8080"
volumes:
- ./data:/data
Pokud aplikace potřebuje databázi nebo jiné závislosti (PostgreSQL, Redis, …), přidejte je jako další služby. Jen hlavní aplikace používá localhost/app:latest — ostatní služby používají standardní image z Docker Hubu:
services:
app:
image: localhost/app:latest
restart: unless-stopped
ports:
- "80:8080"
environment:
DATABASE_URL: "postgres://app:secret@db:5432/app"
depends_on:
- db
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: app
volumes:
- ./data/postgres:/var/lib/postgresql/data
Základní příkazy pro práci se stackem
Po úspěšném push jsou stack ID a SSH endpoint uloženy v .rostistate. Všechny příkazy níže je načtou automaticky, pokud je voláte ze stejného adresáře.
Zobrazení informací o stacku:
rosticli stacks info
Vypíše stav stacku a hotové příkazy pro ssh, scp a rsync.
SSH přístup:
rosticli stacks ssh
Otevře interaktivní SSH session přímo do stacku jako root.
Restart, zastavení, spuštění:
rosticli stacks restart
rosticli stacks stop
rosticli stacks start
Aktualizace aplikace:
Kdykoli chcete nasadit novou verzi kódu, stačí znovu spustit:
rosticli stacks push
Push je idempotentní — pokud se nic nezměnilo, projde beze škody. Pokud se změnil kód, sestaví nový image a provede rolling restart.
Přechod na automatizované CI/CD
Jakmile ruční push nestačí a chcete, aby se každý commit nebo release automaticky nasadil bez ručního spuštění, použijte příkaz setup-cicd:
rosticli stacks setup-cicd
Příkaz vytvoří GitHub Actions workflow, nakonfiguruje GitHub secrets a nastaví stack tak, aby si image po každém buildu sám stáhl a restartoval. Více o tomto způsobu nasazení najdete v sekci Možnost 3: GitHub Actions v průvodci quickstartem.
Použití v automatizaci a AI nástrojích
Příkazy push a setup-cicd lze spustit bez interaktivních dotazů pomocí příznaku --no-input doplněného o potřebné identifikátory:
rosticli stacks push --no-input --company-id 123 --profile-id 2 --name moje-app
rosticli stacks setup-cicd --no-input --company-id 123 --profile-id 2 --name moje-app
Pokud --no-input použijete bez potřebných příznaků (např. máte více společností a neuvedete --company-id), příkaz skončí s chybou, která popisuje, co chybí.
Pro AI asistenty můžete nainstalovat vestavěný skill příkazem rosticli install-ai-skills.
Příkaz projde podporované nástroje (OpenCode, Cursor, Claude Code, Codex, Gemini CLI, Aider, VS Code a GitHub Copilot), zjistí které jsou dostupné v PATH nebo podle lokální konfigurace a nainstaluje rosti-deploy do správného umístění pro každý z nich.
Pro pohodlnější práci v terminálu můžete vygenerovat shell completion: rosticli completion bash, rosticli completion zsh nebo rosticli completion fish (aliasy rosticli completion shell a rosticli completion sh fungují stejně jako bash).
Příklady aktivace completion:
# Bash (uloží skript a načte ho v aktuálním shellu)
rosticli completion bash > ~/.local/share/bash-completion/completions/rosticli
source ~/.local/share/bash-completion/completions/rosticli
# Zsh
rosticli completion zsh > ~/.zfunc/_rosticli
# Fish
rosticli completion fish > ~/.config/fish/completions/rosticli.fish
Příznaky
| Příznak | Příkaz | Popis |
|---|---|---|
--company-id |
push, setup-cicd |
ID společnosti (organization). Povinné pokud máte více společností a používáte --no-input. |
--profile-id |
push, setup-cicd |
ID profilu (velikost VM). Povinné při vytváření nového stacku s --no-input. |
--name |
push, setup-cicd |
Název stacku. Výchozí hodnota je název aktuálního adresáře. |
--stack-id |
push, setup-cicd |
Použije existující stack místo vytváření nového. |
--no-input |
push, setup-cicd |
Zakáže interaktivní dotazy — příkaz skončí chybou místo čekání na vstup. |
--disable-ai |
push, setup-cicd |
Zakáže nabídku AI generování Dockerfile/docker-compose.yml — příkaz skončí chybou, pokud soubory chybí. |
--no-build |
push |
Přeskočí docker build a docker save — nahraje jen compose a spustí stack. |
--no-up |
push |
Přeskočí finální docker compose up. |
ID společnosti zjistíte příkazem rosticli companies. ID profilu pak zjistíte příkazem rosticli stacks profiles.