getting-started/portainer-stack.md
Portainer Stack Deployment
Goal
Deploy Mino by pasting one compose file in Portainer. No repository clone is required.
Step-by-Step
- Open Portainer.
- Go to
Stacks->Add stack. - Set stack name (example:
mino). - Paste YAML from
../reference/docker-compose.md. - (Optional) Add environment variables in Portainer:
MINO_PORT(default3000)MINO_PORT_BIND(default127.0.0.1, use0.0.0.0for open-port mode)MINO_IMAGE_TAG(defaultmain, optional override tolatestor a pinned version)MINO_CONNECTION_MODE(relaydefault,open-portoptional)MINO_RELAY_URL(defaulthttps://relay.mino.ink)MINO_PUBLIC_SERVER_URL(optional explicit public URL for open-port mode)CF_TUNNEL_TOKEN(optional, only if you also want Cloudflare tunnel sidecar)COMPOSE_PROFILES=autoupdate(optional; enables Watchtower sidecar)
- Deploy the stack.
What Starts By Default
With no profile configured:
minoservice starts- server mode is
relay - host bind defaults to
127.0.0.1:${MINO_PORT}(not public) cloudflaredsidecar stays idle unlessCF_TUNNEL_TOKENis setwatchtowerstays disabled
Connection Modes
- Relay mode (default)
MINO_CONNECTION_MODE=relay- generates
mino.ink/test.mino.inklinks using relay pairing code - local UI links are intentionally omitted in this mode
- Open-port mode (direct)
MINO_CONNECTION_MODE=open-portMINO_PORT_BIND=0.0.0.0- optionally set
MINO_PUBLIC_SERVER_URL=https://api.yourdomain.com - generates direct links for
mino.ink, built-in UI, and local dev UI
Optional Profiles
COMPOSE_PROFILES=autoupdateStartswatchtower+mino
Verify Deployment
Use these URLs:
- Health:
http://<SERVER_IP>:3000/api/v1/health(open-port mode or local host access) - Setup:
http://<SERVER_IP>:3000/api/v1/system/setup(same access rules) - Web docs explorer:
http://<SERVER_IP>:3000/docs
If the setup URL is not reachable (relay mode + local bind), use the first-run links printed in container logs.
Expected health response status is 200.
Link Output Rules
relaymode:- generates relay-code links for
mino.inkandtest.mino.ink - intended one-click flow: open link ->
/linkauto-exchanges code -> connected
- generates relay-code links for
open-portmode:- generates direct
serverUrl + apiKeylinks for:mino.ink- built-in UI (
/link) - local dev UI (
localhost:5173/link)
- generates direct
Persistent Data
Docker volume:
mino-data-> mounted at/data
This stores:
credentials.jsonconfig.json- notes and plugin data
Re-deploying the stack does not lose data as long as the volume is kept.