One command from a Lovable repository to a live address
Ship it in four steps
Connect Lovable to GitHub
Add one file
try_files line is what makes a refresh on /dashboard/settings return the app instead of a 404, and /healthz gives the cluster something to probe. The Supabase address Lovable committed in .env is built into the app, so it keeps talking to the same backend.Ship it
ankra.cc domain, with a certificate. If you run the command again it carries on from where it stopped.ankra pipeline get --application <name> --latest, which prints the exact approve command, and run it as yourself.Tell Supabase where the app lives
Use your own domain
Add one option to the same command:What you get without asking
- Scans on every change. Semgrep over the source, Checkov over the manifests and Trivy over the image, judged against your organisation’s gate before anything is published. A generated app is mostly code you did not write, so this is where an unsafe pattern or a leaked key shows up.
- An immutable tag per commit. Every deployment is a
sha-tag, so going back is deploying an earlier one. - Tests when you add them. Ankra adds a test stage only when
package.jsonhas atestscript. Lovable projects usually have none, so the pipeline starts at the build, and a test stage appears the day you add a script. - An AI review. Ankra reads every pull request and watches every run, and opens a fix when a build breaks.
ankra pipeline findings <run-id> --application <name>.
Add a development environment
Everything above gives you one running copy. When real users depend on the app, add a second cluster and a second Supabase project so each change is proved before production sees it.One image, two environments: the backend address is injected when the container starts
Dockerfile for two or more environments
Dockerfile for two or more environments
.env Lovable commits, so the placeholders win and the committed address never reaches the bundle. A container started without either variable exits at once, naming the one that is missing. Check the variable names against your .env: older projects use VITE_SUPABASE_ANON_KEY.Give each cluster its own values
shop-web namespace manifest as its parent, with names prefixed lovable-runtime- because manifest names are unique across a cluster. See SOPS Encryption.Deploy to development
Promote the tag that passed
Verify
Troubleshooting
Ankra says it wrote no Dockerfile
Ankra says it wrote no Dockerfile
package.json has no start script, so there is nothing for Ankra to guess. Add the Dockerfile from step 2 and run ship again. Ankra builds whatever Dockerfile it finds and never overwrites it.The page loads but refreshing a nested route shows a 404
The page loads but refreshing a nested route shows a 404
try_files $uri /index.html; line is missing from the nginx config, or the config was not copied into the image.Sign-in redirects to localhost or the old address
Sign-in redirects to localhost or the old address
Calls to an edge function fail with a CORS error
Calls to an edge function fail with a CORS error
supabase functions deploy.The build stops at the image gate
The build stops at the image gate
ankra pipeline findings <run-id> --application <name> lists it, worst first. Fix the dependency or the code, or accept it deliberately and write down why.The pod restarts and its log says a variable is not set
The pod restarts and its log says a variable is not set
env_from_secrets was not passed. ankra cluster get resources Secret --namespace shop-web --cluster <cluster-id> shows what exists.My own domain shows no certificate or does not resolve
My own domain shows no certificate or does not resolve
ankra cluster custom-dns-zones list <cluster> and add it with its credential.