Containers and static sites
Apps that don't run as Workers are built with the unmodified upstream Paketo buildpacks (Ubuntu Noble builder, pinned by digest) and run as containers on Scaleway Serverless Containers. A repository of plain HTML files is published as a static site without a build.
Before any build, Eurobase reads your repository, shows what it detected, and prefills the settings you confirm with Save and Deploy.
Supported languages
Node.js, Python, Go, Java, Ruby, PHP and .NET. When a root directory has files of several languages, the first in this order wins: Ruby, .NET, Go, Python, PHP, Java, Node.js. A root directory with both requirements.txt and package.json builds as Python.
For Node.js:
- npm or Yarn 1. pnpm, Bun, Deno and Yarn 2 or later (a
.yarnrc.yml, orpackageManagerset toyarn@2or later) are refused before the build. - Commit one lockfile:
package-lock.jsonandyarn.locktogether are refused. - Node.js 20, 22 or 24. A version range that allows only Node.js 25 or later is refused.
- The build runs with
NODE_ENV=productionand installs devDependencies.
In a monorepo, pick the root directory of the app you want to deploy; Eurobase finds candidates up to 6 levels deep. Only that directory is sent to the build, so packages elsewhere in the repository aren't available. Detection reads up to 1,000 files and folders in a root directory; choose a narrower one if it has more. Dockerfiles aren't used.
Build and start
Build command(Node.js only) runs one script from yourpackage.json, written asnpm run <script>,yarn <script>oryarn run <script>. It defaults to yourbuildscript; leave it empty to skip the build. Other languages build automatically.Start command: a singleweb:line in aProcfilealways wins. Otherwise a Node.js app is prefilled with yourstartscript when it isn't a development server, then the framework's own server (SvelteKit withadapter-node, Astro with@astrojs/node, Nuxt), then a developmentstartscript, which is flagged, thennode server.js,app.js,main.jsorindex.js. Without astartscript or one of those files, the command must benode <file>. Python apps are prefilled with auvicornorgunicorncommand when Eurobase finds a FastAPI, Flask or Django entry point and you depend on that server. Node.js and Python need a start command; it is one line of up to 1,024 characters.- Today secrets aren't available during the build, only when the app runs.
- A build gets 4 vCPU, 6 GB of memory, 10 GB of disk and 45 minutes. The built image can be up to 4 GB.
Port and health path
Listen on 0.0.0.0 at the port set in Port (3000 unless you change it; 1024 to 65535). Scaleway also passes it in the PORT environment variable. Uvicorn is configured for it automatically.
A deployment goes live only after your Health path (/ unless you change it) answers a GET with 2xx or 3xx. First Scaleway's startup check tries it up to 10 times, 5 s apart; then Eurobase requests it through your project's address up to 60 times, 2 s apart, with a 5 s timeout each, and never follows redirects. If it doesn't pass, the deployment fails and the previous one keeps serving. While an instance runs, the platform requests the health path every 30 s and stops sending it traffic after 3 failures in a row.
Built static sites
In a project that doesn't run on Workers, a Node.js app can be a Static site instead of a Web service: Eurobase runs the build script and serves the Output directory with NGINX in a container, sending unknown paths to index.html for single-page apps. Eurobase suggests this for Vite and Create React App apps (dist, build), static Astro sites and SvelteKit with adapter-static.
Running and scaling
Container apps scale to zero when they receive no traffic. The next request starts an instance again, and waits for your app to start. The number of instances and the CPU and memory sizes your plan allows are in Plans and limits; new apps start on the smallest size.
Container limits
- A response must start within 55 s of the request arriving, or the visitor gets 504. Once it has started, a response, an event stream or a WebSocket has no time limit, but it is closed after 60 s without data from your app, so send data or a keepalive more often. A Eurobase update can also end an open stream; clients should reconnect.
- Your app's own output (standard output and error) isn't shown yet. The
Logspage shows the build, deployment and HTTP request logs. - A changed secret reaches the app with its next deployment; the
Secretspage marks the appRedeploy requireduntil then.
Plain static sites
A root directory with an index.html and only web files (.html, .css, .js, images, fonts, media, .json, .txt, .xml and similar) is published as-is, without a build or a container. The list is strict today: a README.md, a LICENSE or CNAME file without an extension, a hidden file other than .well-known, or a build or server file such as package.json or a Dockerfile means the directory isn't treated as a plain static site.
- Up to 1,000 files and folders (what detection reads) and 512 MB, nested at most 32 levels.
/aboutservesabout/index.html;about.htmlis served only at/about.html. Missing files answer 404; custom 404 pages and single-page-app fallback aren't supported.- Files are sent with
Cache-Control: public, max-age=300.
Not available yet
- Preview deployments for branches other than the project's branch.
- Dockerfile builds.
- Your container app's runtime output in the logs.