Deploying applications
Preparing a build, deploying it and verifying the result.
View as MarkdownPick a runtime
Node.js (Next.js, NestJS or a plain server), Python, Go, ASP.NET Core, Rust, Java, Bun, Deno, PHP and Ruby are built for you on the server. Any other language ships as a Dockerfile. Next.js needs output: 'standalone' in next.config, NestJS uses dist/main.js, and compiled runtimes are compiled in an isolated build container before the application starts. In every case the application must listen on 0.0.0.0 and bind the PORT it is given rather than a hardcoded one. The full catalogue, with the build strategy of each entry, is on the Runtimes page.
Deploy
Run the command in your application directory and pass the project ID. Without --runtime the CLI detects it from the files in the directory.
veltic apps deploy PROJECT_ID storefront ./ --runtime nextjs
veltic apps deploy PROJECT_ID orders-api ./ --runtime go
veltic apps deploy PROJECT_ID billing-api ./ --runtime dotnet
veltic apps deploy PROJECT_ID legacy-api ./ --runtime docker
veltic apps logs PROJECT_ID storefront --followHow a deployment actually replaces the old one
The running container is stopped and renamed to a rollback container. The new one starts and is probed over HTTP. Only after the probe passes is the old container discarded; if the probe fails, the previous version comes back. There is a brief interruption during the swap, so this is not a rolling reload.
The runtime you get
A rootless Podman container with a read-only root filesystem, all capabilities dropped, no new privileges, a process limit and a hard memory limit without swap. Exceeding memory is a kernel kill, not a graceful restart, and the restart policy retries a bounded number of times. A Dockerfile deployment keeps every one of those limits, but its filesystem stays writable because a foreign image usually needs it, and its process limit grows with its memory limit.
- Persistent data belongs in the database or storage, never on the container filesystem.
- Secrets are environment variables, configured per application.
- Logs stream over a realtime channel; the dashboard no longer polls.