Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.suji.fr/llms.txt

Use this file to discover all available pages before exploring further.

This page is the cross-cutting “where do I start when something’s wrong” guide. For app-specific issues, see the app’s marketplace page (e.g. OpenClaw).

VMs

Provisioning typically finishes in 60–120 seconds. If it sits in provisioning for more than 10 minutes, Suji marks it error and partially cleans up.Fix: delete the failed VM and create a new one. If it happens repeatedly, file a support ticket — usually a transient cloud-provider issue.
Causes:
  • Out-of-memory kill of a critical process
  • Underlying disk issue
  • Network blip during a state transition
Fix: click Restart from the instance detail page. Check Logs for the cause. If the VM has been getting OOM’d, resize up.
Most common: credit balance is €0. The dashboard shows a banner explaining; top up to resume. See Grace period.Other causes: ongoing maintenance in the region (rare), or you’re trying to start while it’s still in a transitional state — wait 30 s and retry.
  1. Open the Metrics tab — sustained CPU at 100% or memory at the cap means you’ve outgrown the size.
  2. Resize up. Reboot takes ~60 s.
  3. Check Logs for crash-restart loops in any app (cycles of “starting → exited → starting”).
Check, in order:
  1. SSH key registered? Settings → SSH Keys before VM creation.
  2. Right user? ssh suji@<public-ip>, not root.
  3. Firewall? The default rules allow SSH from anywhere. If you replaced it with a restricted rule, your current IP must be in the source list.
  4. VM status? Must be running. Stopped VMs aren’t reachable.
If SSH still fails, use the dashboard’s Terminal tab as a fallback.

Apps

Usually means the Docker image is taking a long time to pull (large image, slow network). Wait 2–3 minutes. If it’s still installing after that, check the install’s Logs tab — there’s usually a Pulling, Error: denied, or manifest unknown message indicating the cause.
The install row has a last_error field with the reason. Common ones:
  • “image denied / unauthorized” — the image isn’t public; we don’t support private registries yet.
  • “port in use” — rare; redeploy resolves it.
  • “docker compose up failed” with an EACCES — volume ownership issue; usually fixes itself on the next upgrade. If not, file a packaging bug on the templates repo.
Try a redeploy (Install detail page → Restart, or Upgrade). If still failing, the Logs tab usually has the smoking gun.
Cloudflare can’t reach the app inside your VM. Check, in order:
  1. Is the container running? Dashboard → Logs tab for that install. If it’s crashing on startup, the logs say why.
  2. Is the app actually listening on its declared port? Most app-specific bugs are here — see the app’s marketplace page for app-specific debugging (e.g. OpenClaw’s bind-mode setting).
  3. Cloudflare propagation — right after install or subdomain change, give it 30 s.
  1. Confirm the third-party service is configured with the right URL (https://<install-subdomain>.suji.fr/...).
  2. Open Logs for the install, send a test webhook. If nothing appears in the logs, the request didn’t reach the app — DNS / Cloudflare issue.
  3. If you see the request hit the app but get a 4xx/5xx, the app rejected it; the body of the response or the next few log lines explain why.

Billing & credits

Expected behavior at €0. Top up from Billing → Top up and your VMs auto-resume. You have a 7-day grace period before any data is destroyed. See Grace period.
The card was declined. You’ll see a “card declined” email and a banner in the dashboard. Fix the card in Billing → Payment methods — Stripe automatically retries. If retries also fail, you fall into the standard grace period.
Webhook delay (rare). Refresh the dashboard after 30 s. If the credit still doesn’t show, file a ticket with your Stripe payment reference — we can reconcile manually.
Set them once in Billing → Profile. Future invoices pick them up automatically. Old invoices can be re-issued with updated details on request.

Account

Go to app.suji.fr/forgot-password and enter your email. The reset link is valid for 1 hour.
  1. Check spam.
  2. Dashboard → Resend verification email.
  3. Confirm the email address you registered with.
  4. Rate-limited to 5 resends per hour.
  1. Your authenticator and our server may have time drift — re-sync your authenticator’s clock.
  2. If you’re locked out, email [email protected] from the address on the account — we can verify identity and reset 2FA.
Org owner → Settings → Members → remove the old member and invite a new one. The org’s resources are unaffected; only access changes.

Network / firewall

  1. Is the firewall rule for the correct VM and direction?
  2. Is the app actually listening on that port inside the VM? ss -tlnp from the host terminal confirms.
  3. Is the app bound to 0.0.0.0 (not 127.0.0.1)? Apps that default to loopback won’t accept external connections even if the firewall is wide open.
  4. Is the port in the provider-blocked list (25 / 465 outbound)?
Outbound TCP 25 and 465 are blocked at the network layer. Use port 587 with STARTTLS or an HTTP-based provider (SendGrid / Postmark / Mailgun / Resend). A firewall rule won’t unblock those ports.

Still stuck

Open a support ticket from the dashboard with:
  • Your account email and organization name.
  • Instance ID (inst_…) and install ID (install_…) if applicable.
  • A short description of what you expected vs what happened.
  • The last 20–30 lines of relevant logs.
  • A screenshot if it’s a UI issue.
The clearer the report, the faster we can help.