App or system
The Pro plan includes a machine of your own in the cloud for apps written in anything: Node, Python, Go, Rust, Ruby, PHP, Java, a static site, or whatever a Dockerfile builds. Programs written in Synsema run as Synsema projects instead (and on the Free plan).
| Machine | 2 vCPU, 4 GB of memory, 40 GB of disk (Pro, USD 20/month) · 4 vCPU, 8 GB, 80 GB (Pro 8 GB, USD 30/month) |
| What runs | Any app: a whole compose project (the app with its database and the rest), its Dockerfile, or Railpack, which finds out the language |
| Where it answers | https://<app>.synsema.app, HTTPS included |
| Console | A terminal in the browser at https://<machine>-console.synsema.app, private to you |
| While you pay | Nothing is deleted for want of use |
Make the machine§
In the dashboard: New → App or system. Choose a name and a place; the machine is ready in about a minute. One machine per account; your apps share it.
Deploy an app§
From the terminal, in the folder of the app:
syn deploy
syn deploy looks at the folder: a Synsema program becomes a Synsema project; anything else becomes an app on your machine. --app or --project say it outright, --name names it, --port gives the port when it cannot be found out. It follows the build until the app answers and prints its address.
From the dashboard: on your machine's page, New app: a public repository (and, if you want, a branch, a folder inside it, the port and the environment).
How an app is built and run§
1. The source is fetched: the repository (a shallow clone) or the folder syn deploy uploaded. 2. With a compose file (compose.yaml, docker-compose.yml…), the whole project comes up, as its README says to run it: the app, its database, its cache. The service no other one needs is the one published; the rest publish no port (they reach each other by name), so two projects never fight over one. Its variables reach the file as its .env. Else, with a Dockerfile, it is built with it. Without one, Railpack finds out the language and builds an image (Node with package.json, Python with requirements.txt or pyproject.toml, Go with go.mod, Rust with Cargo.toml, and more). A Procfile says how to start it. 3. It runs with Docker and starts again with the machine. It gets PORT: listen on it. The port is the one you gave, else the one the image exposes, else 8080. The build's log shows on the app's page while it runs. 4. When it answers, it is published at https://<app>.synsema.app. Every request reaches it from 127.0.0.1 with X-Forwarded-Proto, -Host and -For, as behind your own reverse proxy: HTTPS, cookies, OAuth and passkeys work as on a VPS.
Each app has its page: state, address, the last lines of its log, the environment (saving deploys it again), Deploy again and Delete.
Environment§
NAME=value, one per line, in the app's page or when you create it. The app gets them as environment variables, plus PORT.
What an app needs§
An app runs in its own container: what it needs comes from its own repository, not from the machine. Libraries go where its language expects them (package.json, requirements.txt, go.mod…); system packages, in its environment as RAILPACK_DEPLOY_APT_PACKAGES=ffmpeg imagemagick (variables that start with RAILPACK_ reach the build; the others only the running app). With a Dockerfile, the Dockerfile says it all. sudo apt install in the console installs on the machine, not inside an app.
A domain of your own§
On the app's page, under Domains of your own, add app.example.com and point it here in your DNS:
| The domain | Record |
|---|---|
a subdomain, app.example.com | CNAME to <app>.synsema.app |
the root, example.com | A to the IP address the app's page shows |
The certificate is issued on the first visit, once the DNS points here; the app keeps answering at <app>.synsema.app too. Up to ten domains per app; removing the app gives them up. Any syn tunnel on Pro takes them as well: POST /api/v1/tunnels/<id>/domains.
The console§
The Console tab of your machine (or https://<machine>-console.synsema.app) opens a terminal on the machine, as the user agent, in its home: a place of yours to clone, build and try things. syn deploy in any folder of the machine publishes it as an app, the same as from your computer. ~/apps shows the deployed apps (one folder each, the source in src/); the platform rewrites them on every deploy, so work in your home, not there. It is private: only you, signed in at synsema.com, can open it. From there you have the machine: docker ps, logs, files.
When Pro ends§
The machine and its apps are powered off and deleted 30 days later, with an email when it happens, a week before and a day before. Going Pro again within those days turns it back on as it was.