
An app is one container on one server. Symplax deploys from GitHub only: GitLab and Bitbucket are not supported. Your app must answer HTTP on a port. Background workers, bots and queue consumers that serve no HTTP cannot pass the health check, so they are not supported yet.
Deploy your first app
You need a connected server first. See Connect a server or Buy a server.1
Open the deploy sheet
Go to Apps and click Deploy App.
2
Choose the source
Under Deployment source, pick Git repository. If you have not connected GitHub yet, Symplax sends you to GitHub to install the Symplax GitHub App. Choose which repositories it may read, public or private, then come back.
3
Pick the repository and branch
Search for the repository, then choose a branch. If the repository holds several apps, Symplax lists the folders it can deploy. Pick one, or type a path in Root directory. See Monorepos.
4
Name it and choose a server
Give the app a name and choose the Target server. Leave Domain blank to get a free
*.symplax.app address.5
Add variables and deploy
Add any environment variables your app needs, and a release command if it runs migrations. Click Start Deployment.
How Symplax builds your code
If your root directory contains aDockerfile, Symplax builds it as is. That is the way to deploy any language or setup the detector does not cover.
Without a Dockerfile, Symplax looks at the files in your root directory and writes one for you. It checks for these, in this order:
If nothing matches, the build stops and asks you to add a
Dockerfile.
For Node.js, Symplax uses the Node version you ask for in engines.node, .nvmrc or .node-version, and Node 20 if you name none. It installs with npm, Yarn or pnpm depending on which lockfile you commit.
Port and health check
Symplax picks the port your app listens on in this order:- A
PORTenvironment variable, if you set one. - The
EXPOSEline in the Dockerfile, yours or the generated one. - The Port in your app’s Settings.
3000.
0.0.0.0, not localhost, or Symplax cannot reach it from outside the container.
Before your new version gets traffic, Symplax probes it on that port. By default it tries /health first. If that answers with a 2xx or 3xx, it keeps using /health. Otherwise it accepts any HTTP response on /. The new version must pass three checks in a row within 60 seconds.
To use a specific endpoint, set Health Check in Settings to a path and the status code it returns, for example /api/health and 200.
Your free subdomain
Every app gets an address likemy-app.symplax.app, made from the app name, with HTTPS already working. If the name is taken, Symplax adds a short suffix. The subdomain stays with the app even after you add your own domain. See Domains and SSL.
Auto-deploy on push
When you create an app from GitHub, Symplax registers a webhook on the repository. Every push to the app’s branch starts a new deploy. For an app with a root directory, only pushes that change files inside it count. See Monorepos. You can turn this off with the Auto Deploy toggle in the app’s CI/CD tab. The CI/CD tab also has:- Branch: change which branch the app follows.
- Concurrent builds: what happens when a push arrives during a build. queue waits, cancel stops the running build, skip ignores the new push.
- Build Filters: deploy only when certain paths change, or never when only certain paths change. See Monorepos.
- Deploy Hook: a URL you can
POSTto from any CI tool to start a deploy. - Notifications: Slack and Discord webhooks.
npx symplax deploy <app> as the last step of your CI. See the CLI guide.
Zero-downtime swap
Your old version keeps serving while the new one starts. Symplax runs the new image as a separate container, waits for it to pass the health check, then swaps the two and points nginx at the new one. It checks the new container again after the swap. If that check fails, Symplax puts the previous container back. The old container is removed only after the new one has proven stable. If the new version never passes, nothing changes for your visitors: the previous version stays live.Build logs
The deploy view streams every line as it happens, through each phase: preparing, building, delivering the image to your server, starting it, verifying and routing. Errors are highlighted in red. Past deploys are listed in the History tab, and your running app’s output is in Logs.When a build fails
Symplax reads the failed build or startup log and, for problems it recognises, shows what went wrong and how to fix it above the logs. It recognises, among others:package-lock.jsonoryarn.lockout of sync withpackage.json- An app that needs a newer Node version than it was given
- A missing
buildscript, or a build tool that was never installed - A build that ran out of memory
- A native module that needs a compiler
- A
COPYin the Dockerfile that points outside the root directory - A build that tries to reach a database on
localhost, or a database it cannot resolve - Next.js failing to prerender a page
- A container that crashed on startup, never listened on its port, or returned server errors
On the Free plan you can deploy 15 times in any 24 hours. Every successful deploy counts, including ones started by a push. Pro and Team have no daily limit.
Related
Environment variables
Runtime and build-time variables, and who can see them.
Release commands
Run migrations before the new version starts.
Rollbacks
Go back to the previous version in one click.
Docker images
Deploy a prebuilt image instead of a repository.