<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Documentation Center</title>
    <description>Scalingo Documentation Center
</description>
    <link>https://doc.scalingo.com/</link>
    <atom:link href="https://doc.scalingo.com/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Fri, 26 Jun 2026 13:09:44 +0000</pubDate>
    <lastBuildDate>Fri, 26 Jun 2026 13:09:44 +0000</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>
    
    
      <item>
        <title>Node.js</title>
        <description>&lt;p&gt;Node.js is supported by Scalingo, furthermore, custom support has been added to
manage the &lt;a href=&quot;/languages/meteorjs/start&quot;&gt;&lt;strong&gt;Meteor&lt;/strong&gt;&lt;/a&gt;
framework.&lt;/p&gt;

&lt;h2 id=&quot;detection&quot;&gt;Detection&lt;/h2&gt;

&lt;p&gt;The file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; should be present at the root of the project.&lt;/p&gt;

&lt;h2 id=&quot;nodejs-versions&quot;&gt;Node.js Versions&lt;/h2&gt;

&lt;h3 id=&quot;availability&quot;&gt;Availability&lt;/h3&gt;

&lt;p&gt;The following Node.js versions are available:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Node.js version&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-22&lt;/code&gt; (&lt;a href=&quot;/platform/internals/stacks/stacks#stack-end-of-life&quot;&gt;EOL&lt;/a&gt;)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-24&lt;/code&gt;&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-26&lt;/code&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v26&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;26.4.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;26.4.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;26.4.0&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v24&lt;/code&gt; (LTS)&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;24.18.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;24.18.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;24.18.0&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v22&lt;/code&gt; (LTS)&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;22.23.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;22.23.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;22.23.1&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;The &lt;a href=&quot;/platform/internals/stacks/scalingo-22-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-22&lt;/code&gt;&lt;/a&gt; stack is deprecated and will be discontinued on June 1, 2027.
Applications must be migrated to &lt;a href=&quot;/platform/internals/stacks/scalingo-24-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-24&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;/platform/internals/stacks/scalingo-26-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-26&lt;/code&gt;&lt;/a&gt; before this date.&lt;/p&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;select-a-version&quot;&gt;Select a Version&lt;/h3&gt;

&lt;p&gt;The default Node.js version on all stacks is the latest &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v24&lt;/code&gt; version. If you
need to install another version, specify it in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;engines.node&lt;/code&gt; key of your
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; file.&lt;br /&gt;
For example, to install the latest Node.js version of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v24&lt;/code&gt; branch:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-app&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;engines&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;node&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;24&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;dependencies-installation&quot;&gt;Dependencies Installation&lt;/h3&gt;

&lt;p&gt;The dependencies of your project are installed either with the &lt;a href=&quot;https://www.npmjs.com/&quot;&gt;npm package
manager&lt;/a&gt; or the &lt;a href=&quot;https://yarnpkg.com/&quot;&gt;Yarn package
manager&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yarn.lock&lt;/code&gt; file is present at the root of your project, yarn will be used
to install the dependencies and run scripts, otherwise npm will build the
dependencies during the deployment.&lt;/p&gt;

&lt;p&gt;If a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package-lock.json&lt;/code&gt; file is present at the root of your project and you
are using npm version 6 or higher, Scalingo will use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm ci&lt;/code&gt; (for
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clean-install&lt;/code&gt;) to install your dependencies. Otherwise Scalingo will fallback
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm install&lt;/code&gt;.&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;You can specify the version of yarn you want to use by defining it in the
  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; file, with the key &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;engines.yarn&lt;/code&gt;.&lt;/p&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;private-dependency&quot;&gt;Private Dependency&lt;/h3&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;Yarn does not handle private modules, if you use them, keep using npm&lt;/p&gt;
&lt;/aside&gt;

&lt;h4 id=&quot;npm-private-modules&quot;&gt;NPM Private Modules&lt;/h4&gt;

&lt;p&gt;First you need to create a read-only token with the NPM account you want to authenticate:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm token create --read-only
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then set this token as environment variable (replace the 0-value by the token obtained in the previous command):&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo env-set &lt;span class=&quot;nv&quot;&gt;NPM_TOKEN&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;00000000-0000-0000-0000-00000000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Add the following NPM configuration file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.npmrc&lt;/code&gt; to the root directory of your project:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;//registry.npmjs.org/:_authToken=${NPM_TOKEN}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Add this file and commit it in your Git repository, the environment variable will be automatically used during the build.&lt;/p&gt;

&lt;h3 id=&quot;configuring-npm&quot;&gt;Configuring NPM&lt;/h3&gt;

&lt;p&gt;Sometimes a project needs custom npm behavior to set up proxies, use a different registry, etc. For such behavior, simply include an .npmrc file in the root of your project.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# .npmrc
registry = &apos;https://custom-registry.com/&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;npm will also read the configuration from any environment variable starting with NPM_CONFIG.&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;If NPM_CONFIG_PRODUCTION is true, npm will automatically run all scripts in a subshell where NODE_ENV is ‘production’.&lt;/p&gt;
&lt;/aside&gt;

&lt;h4 id=&quot;private-modules-from-scm-githubgitlabetc&quot;&gt;Private Modules from SCM (GitHub/GitLab/etc.)&lt;/h4&gt;

&lt;p&gt;Your private module should be fetched from the SCM service through SSH. You can specify it this way:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;package-name&quot;: &quot;git+ssh://git@&amp;lt;SCMhostname&amp;gt;/&amp;lt;workspace&amp;gt;/&amp;lt;repo&amp;gt;.git#master&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To authenticate to the SCM service, you need to use our &lt;a href=&quot;/platform/deployment/buildpacks/ssh-key&quot;&gt;SSH Private Key
Buildpack&lt;/a&gt;,
this buildpack will let you setup a private SSH key securely in the build
environment.&lt;/p&gt;

&lt;h3 id=&quot;devdependencies-installation&quot;&gt;devDependencies Installation&lt;/h3&gt;

&lt;p&gt;By default, dependencies present in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;devDependencies&lt;/code&gt; field are installed. At the end of the deployment, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;devDependencies&lt;/code&gt; are pruned. Hence only production dependencies are left in the image used for the runtime.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;devDependencies&lt;/code&gt; can be totally ignored and not installed at all by setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NPM_CONFIG_PRODUCTION=true&lt;/code&gt; npm or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YARN_PRODUCTION=true&lt;/code&gt; with Yarn 1.&lt;/p&gt;

&lt;h4 id=&quot;skip-pruning&quot;&gt;Skip Pruning&lt;/h4&gt;

&lt;p&gt;If you need access to packages declared under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;devDependencies&lt;/code&gt; at runtime, you may
consider declaring those as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dependencies&lt;/code&gt;. If required at runtime, they are not really development dependencies.&lt;/p&gt;

&lt;p&gt;If you still need access to packages declared under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;devDependencies&lt;/code&gt; after the
build has finished without moving those in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dependencies&lt;/code&gt; - to be used in a different
buildpack for example - then you’ll need to use Yarn 2+ and set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YARN2_SKIP_PRUNING=true&lt;/code&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Package Manager&lt;/th&gt;
      &lt;th&gt;Environment Variable&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Install Dev Deps&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Prune&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;npm&lt;/td&gt;
      &lt;td&gt;none&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Yes&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Yes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;npm&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NPM_CONFIG_PRODUCTION&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;No&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;-&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Yarn&lt;/td&gt;
      &lt;td&gt;none&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Yes&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Yes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Yarn&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YARN_PRODUCTION&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;No&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;-&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Yarn 2+&lt;/td&gt;
      &lt;td&gt;none&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Yes&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Yes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Yarn 2+&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YARN2_SKIP_PRUNING&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Yes&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;No&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;ensure-youre-tracking-all-your-dependencies&quot;&gt;Ensure you’re Tracking all your Dependencies&lt;/h3&gt;

&lt;p&gt;It is important to ensure you are tracking all the dependencies of your project
in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; file. Otherwise your app may build but will potentially
crash during its runtime, failing to find a dependency.&lt;/p&gt;

&lt;p&gt;A common mistake is to run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm install&lt;/code&gt; without the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--save&lt;/code&gt; flag. In this
case the dependency is installed in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modules&lt;/code&gt; directory, but nothing
is tracked in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;You should also avoid to install global packages (i.e. using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-g&lt;/code&gt; flag). In
this case packages are installed at the system level and are not tracked for
your project.&lt;/p&gt;

&lt;p&gt;In a nutshell: you should always use the following command when adding a
dependency:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm install --save &amp;lt;module&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;If the module contains a binary like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grunt&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gulp&lt;/code&gt;, they will be
  installed in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modules/.bin&lt;/code&gt; directory, keeping them local and
  trackable. On Scalingo, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modules/.bin&lt;/code&gt; directory is added to your
  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PATH&lt;/code&gt;, so you can directly use them.&lt;/p&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;do-not-track-modules-with-git&quot;&gt;Do not Track Modules with Git&lt;/h3&gt;

&lt;p&gt;When working locally on your code, after running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm install&lt;/code&gt;, a directory
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modules&lt;/code&gt; containing the dependencies of your application is created. You
should not check this directory in your Git repository. If the dependency is
listed in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; file, it will automatically be installed during
the deployment of your application.&lt;/p&gt;

&lt;p&gt;Adding these files to Git will create confusion and unnecessary noise in your
code history and we consider it’s a good practice to keep it clean, only add
the useful code (the code of your project). Moreover there is an issue with
dependencies which build binaries during their installation. If you add these
binaries to your repository, it may create incompatibility with Scalingo
runtime environment.&lt;/p&gt;

&lt;p&gt;The good method to avoid checking in these files is to add the following
content in a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; file at the root of your project and commit this
file:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;node_modules
bower_components
# Any other file created by grunt/gulp/webpack builds
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once done, Git will ignore these directories when making commits.&lt;/p&gt;

&lt;h3 id=&quot;nodejs-app-startup&quot;&gt;Node.js App Startup&lt;/h3&gt;

&lt;p&gt;What we use in order of priority&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Procfile&lt;/code&gt; at the root of your project&lt;/li&gt;
  &lt;li&gt;The field &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.scripts.start&lt;/code&gt; defined in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node server.js&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;memory-management&quot;&gt;Memory Management&lt;/h2&gt;

&lt;p&gt;On Scalingo, the Node.js buildpack automatically defines &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_CONCURRENCY&lt;/code&gt;
when it is not already set. The value is calculated from the memory available
in the container and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_MEMORY&lt;/code&gt; value:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;WEB_CONCURRENCY = MEMORY_AVAILABLE / WEB_MEMORY
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;By default, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_MEMORY&lt;/code&gt; is set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;512&lt;/code&gt; MB.&lt;/p&gt;

&lt;p&gt;You can override &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_CONCURRENCY&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_MEMORY&lt;/code&gt; if the default values do not 
fit your application workload.&lt;/p&gt;

&lt;p&gt;If your application needs an explicit V8 old-space limit, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NODE_OPTIONS&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--app&lt;/span&gt; my-app env-set &lt;span class=&quot;nv&quot;&gt;NODE_OPTIONS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;--max-old-space-size=512&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The value is expressed in megabytes. This setting can help make memory usage
more predictable, but increasing it does not fix memory leaks.&lt;/p&gt;

&lt;p&gt;For more details, refer to the &lt;a href=&quot;https://nodejs.org/learn/diagnostics/memory/understanding-and-tuning-memory&quot;&gt;official Node.js memory guide&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;nodejs-build-hooks&quot;&gt;Node.js Build Hooks&lt;/h3&gt;

&lt;p&gt;If your application has a build step that you would like to run when you
deploy, you can use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;build&lt;/code&gt; step defined in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node server.js&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;build&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;grunt build&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; has a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;build&lt;/code&gt; script which needs to be customized for
Scalingo, you should define a&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-postbuild&lt;/code&gt; step:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;build&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;grunt build&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scalingo-postbuild&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;grunt build --prod&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node server.js&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;aside class=&quot;warning&quot;&gt;

  &lt;p&gt;If the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-postbuild&lt;/code&gt; hook is defined, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;build&lt;/code&gt; step will &lt;strong&gt;not&lt;/strong&gt; run.&lt;/p&gt;

&lt;/aside&gt;

&lt;p&gt;You may also want to run a custom command before the installation of
dependencies. This is possible thanks to commands named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-prebuild&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scalingo-prebuild&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node prebuild.js&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node server.js&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;You can disable the build phase for your app by setting the environment
variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NPM_NO_BUILD=true&lt;/code&gt;.&lt;/p&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;custom-cache-folder&quot;&gt;Custom Cache Folder&lt;/h3&gt;

&lt;p&gt;By default, Scalingo stores the directories &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bower_components&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modules&lt;/code&gt; at the root of the
project in the deployment
cache. But you might need to add different folders to this cache. You can override these defaults by
specifying the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cacheDirectories&lt;/code&gt; (or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cache_directories&lt;/code&gt;) key at the root of your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt;
file.&lt;/p&gt;

&lt;p&gt;For example, if your application has a client and a server in the same repository, you can specify
these folders to store them in the deployment cache with:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nl&quot;&gt;&quot;cacheDirectories&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;client/node_modules&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;server/node_modules&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;meteor-application&quot;&gt;Meteor Application&lt;/h2&gt;

&lt;p&gt;If a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.meteor&lt;/code&gt; file is detected at the root of your project, your app will
be considered as a Meteor application.&lt;/p&gt;

&lt;p&gt;See the &lt;a href=&quot;/languages/meteorjs/start&quot;&gt;Meteor applications documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;framework-requiring-to-serve-static-files&quot;&gt;Framework Requiring to Serve Static Files&lt;/h2&gt;

&lt;p&gt;Some front-end JavaScript frameworks (such as React Native, Ember.js, Ionic,
Next.js, GatsbyJS) build static files and need a minimal web server to serve
them. In order to do so, first update your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; to at least
specify the following scripts:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;…&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;build&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&amp;lt;build script&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node server.js&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;…&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;build&lt;/code&gt; script depends on the framework you use:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ember.js: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ember build --environment=production&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;GatsbyJS: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gatsby build&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Ionic: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ionic-app-scripts build&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Next.js: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next build&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;server.js&lt;/code&gt; file is a minimal web server such as the one presented &lt;a href=&quot;/platform/app/static-files-hosting&quot;&gt;here&lt;/a&gt; to serve the file
generated during the build phase.&lt;/p&gt;

&lt;h2 id=&quot;buildpack&quot;&gt;Buildpack&lt;/h2&gt;

&lt;p&gt;More information at
&lt;a href=&quot;https://github.com/Scalingo/nodejs-buildpack&quot;&gt;https://github.com/Scalingo/nodejs-buildpack&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;nextjs&quot;&gt;Next.js&lt;/h2&gt;

&lt;p&gt;Out of the box, Next.js is configured with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; which looks like:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;my-app&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;0.1.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;private&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;dev&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;next dev&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;build&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;next build&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;next start&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;dependencies&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;next&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;^10.0.4&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;react&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;^17.0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;react-dom&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;^17.0.1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;To make it work on Scalingo, you need to provide the port.
Otherwise, you would get a timeout error.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;....
 Waiting for your application to boot...
 !   Error deploying the application
 !   → Timeout: my-app took more than 60 seconds to boot
....
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;To fix this issue, modify the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;start&lt;/code&gt; script by adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-p $PORT&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;my-app&quot;,
  &quot;version&quot;: &quot;0.1.0&quot;,
  &quot;private&quot;: true,
  &quot;scripts&quot;: {
    &quot;dev&quot;: &quot;next dev&quot;,
    &quot;build&quot;: &quot;next build&quot;,
    &quot;start&quot;: &quot;next start -p $PORT&quot;
  },
  &quot;dependencies&quot;: {
    &quot;next&quot;: &quot;^10.0.4&quot;,
    &quot;react&quot;: &quot;^17.0.1&quot;,
    &quot;react-dom&quot;: &quot;^17.0.1&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;standalone-mode&quot;&gt;Standalone Mode&lt;/h3&gt;
&lt;p&gt;The Next.js built image can be quite large, easily exceeding 500MB. If you encounter issues with the image size, you can try “standalone” mode.&lt;/p&gt;

&lt;p&gt;More information here: &lt;a href=&quot;/languages/nodejs/nextjs-standalone&quot;&gt;Next.js in standalone mode&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;vite&quot;&gt;Vite&lt;/h2&gt;

&lt;p&gt;In &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt;, you need&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;vite --port $PORT&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;others&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;scripts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vite.config&lt;/code&gt; (or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vite.config.ts&lt;/code&gt;) file you need to add the following&lt;/p&gt;
&lt;div class=&quot;language-typescript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;0.0.0.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As a note, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vite --port $PORT&lt;/code&gt; may compile components, depending on your configuration. If it does, it leads to a very long first HTTP request that may even crash your container. In this case, in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt;, replace the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;start&lt;/code&gt; rule content to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node server.js&lt;/code&gt; (see section &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Framework Requiring to Serve Static Files&lt;/code&gt;) or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vite preview --port $PORT&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;angular&quot;&gt;Angular&lt;/h2&gt;

&lt;p&gt;Please refer to the Angular &lt;a href=&quot;/languages/nodejs/angular&quot;&gt;dedicated page&lt;/a&gt; for instructions on how to deploy such an application on Scalingo.&lt;/p&gt;

&lt;h2 id=&quot;yarn-known-issues&quot;&gt;Yarn Known Issues&lt;/h2&gt;

&lt;h3 id=&quot;catch-sigterm-in-an-application-started-with-yarn&quot;&gt;Catch &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGTERM&lt;/code&gt; In an Application Started With Yarn&lt;/h3&gt;

&lt;p&gt;You may want to catch the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGTERM&lt;/code&gt; signal in your Node.js application:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;SIGTERM&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;notice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot;SIGTERM&quot; received&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The good practice is to start the application by defining a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;start&lt;/code&gt; script in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt;. For example:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node server.js&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then define the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;web&lt;/code&gt; process in the Procfile. Example of Procfile content:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;yarn run start&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The problem with this approach is that Scalingo sends a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGTERM&lt;/code&gt; signal to stop the application. But Yarn do not correctly forward this signal to the started process.&lt;/p&gt;

&lt;p&gt;The solution is to change the content of the Procfile to directly start the Node.js process:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;node server.js&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

</description>
        <pubDate>Fri, 26 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/languages/nodejs/start
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/languages/nodejs/start
          
        </guid>
        
        <category>nodejs</category>
        
        
        <category>languages</category>
        
        <category>nodejs</category>
        
      </item>
    
      <item>
        <title>Grafana - Grafana 13.1.0 is now available</title>
        <description>&lt;p&gt;Grafana &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;13.1.0&lt;/code&gt; is now available.&lt;/p&gt;

&lt;p&gt;It is also the new default version.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/grafana/grafana/releases/tag/v13.1.0&quot;&gt;Changelog&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 26 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-grafana-13-1-0
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-grafana-13-1-0
          
        </guid>
        
        
        <category>changelog</category>
        
        <category>buildpacks</category>
        
      </item>
    
      <item>
        <title>Node.js - Node.js 22.23.1, 24.18.0, and 26.4.0 are now available</title>
        <description>&lt;p&gt;Node.js &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;22.23.1&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;24.18.0&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;26.4.0&lt;/code&gt; are now available.&lt;/p&gt;

&lt;p&gt;[Changelogs]&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V26.md#26.4.0&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;26.4.0&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V24.md#24.18.0&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;24.18.0&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V22.md#22.23.1&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;22.23.1&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 26 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-nodejs-22-23-1-24-18-0-26-4-0
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-nodejs-22-23-1-24-18-0-26-4-0
          
        </guid>
        
        
        <category>changelog</category>
        
        <category>buildpacks</category>
        
      </item>
    
      <item>
        <title>Grafana - Grafana 13.0.3 is now available</title>
        <description>&lt;p&gt;Grafana &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;13.0.3&lt;/code&gt; is now available.&lt;/p&gt;

&lt;p&gt;It is also the new default version.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/grafana/grafana/releases/tag/v13.0.3&quot;&gt;Changelog&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 25 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-grafana-13-0-3
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-grafana-13-0-3
          
        </guid>
        
        
        <category>changelog</category>
        
        <category>buildpacks</category>
        
      </item>
    
      <item>
        <title>nginx: nginx 1.30.3 (stable) is now available</title>
        <description>&lt;p&gt;nginx &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.30.3&lt;/code&gt; (stable) is now available.&lt;/p&gt;

&lt;p&gt;This is also the default version deployed on all stacks when using the
&lt;a href=&quot;https://github.com/Scalingo/nginx-buildpack&quot;&gt;nginx-buildpack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://nginx.org/en/CHANGES-1.30&quot;&gt;Changelog&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 22 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-nginx-1-30-3
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-nginx-1-30-3
          
        </guid>
        
        
        <category>changelog</category>
        
        <category>buildpacks</category>
        
      </item>
    
      <item>
        <title>nginx: nginx 1.31.2 (mainline) is now available</title>
        <description>&lt;p&gt;nginx &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.31.2&lt;/code&gt; (mainline) is now available.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://nginx.org/en/CHANGES&quot;&gt;Changelog&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 22 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-nginx-1-31-2
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-nginx-1-31-2
          
        </guid>
        
        
        <category>changelog</category>
        
        <category>buildpacks</category>
        
      </item>
    
      <item>
        <title>Node.js - Node.js 22.23.0, 24.17.0, and 26.3.1 are now available</title>
        <description>&lt;p&gt;Node.js &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;22.23.0&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;24.17.0&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;26.3.1&lt;/code&gt; are now available.&lt;/p&gt;

&lt;p&gt;[Changelogs]&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V26.md#26.3.1&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;26.3.1&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V24.md#24.17.0&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;24.17.0&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V22.md#22.23.0&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;22.23.0&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 22 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-nodejs-22-23-0-24-17-0-26-3-1
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-nodejs-22-23-0-24-17-0-26-3-1
          
        </guid>
        
        
        <category>changelog</category>
        
        <category>buildpacks</category>
        
      </item>
    
      <item>
        <title>Prometheus - Prometheus 3.5.4 (LTS) is now available</title>
        <description>&lt;p&gt;Prometheus &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.5.4&lt;/code&gt; (LTS) is now available.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/prometheus/prometheus/releases/tag/v3.5.4&quot;&gt;Changelog&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 22 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-prometheus-3-5-4
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/changelog#changelog-buildpacks-prometheus-3-5-4
          
        </guid>
        
        
        <category>changelog</category>
        
        <category>buildpacks</category>
        
      </item>
    
      <item>
        <title>Stack scalingo-26 is the Default Stack</title>
        <description>&lt;p&gt;The stack scalingo-26 is now the default stack for all newly created application. It follows the announcement of scalingo-26 release in this &lt;a href=&quot;https://scalingo.com/blog/new-stack-available-on-scalingo-scalingo-26&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 22 Jun 2026 11:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/changelog#changelog-base-image-scalingo-26-default
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/changelog#changelog-base-image-scalingo-26-default
          
        </guid>
        
        
        <category>changelog</category>
        
        <category>base_image</category>
        
      </item>
    
      <item>
        <title>PostgreSQL® Dedicated Resources - Outscale Net Peering Support</title>
        <description>&lt;p&gt;Scalingo for PostgreSQL® Dedicated Resources databases can now be reached
through Outscale Net Peering.&lt;/p&gt;

&lt;p&gt;Each database now exposes a second &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/endpoints&quot;&gt;endpoint&lt;/a&gt;
dedicated to Net Peering traffic, alongside the existing public endpoint used
for Internet-routed traffic.&lt;/p&gt;

&lt;p&gt;This new access path lets you connect workloads running in an Outscale VPC to a
Dedicated Resources database over Outscale Net Peering, without using the public
Internet route.&lt;/p&gt;

&lt;p&gt;Learn more in the &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/accessing#creating-an-outscale-net-peering&quot;&gt;Dedicated Resources access guide&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/changelog#changelog-databases-postgresql-dedicated-resources-outscale-net-peering
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/changelog#changelog-databases-postgresql-dedicated-resources-outscale-net-peering
          
        </guid>
        
        
        <category>changelog</category>
        
        <category>databases</category>
        
      </item>
    
      <item>
        <title>Accessing Your Scalingo for PostgreSQL® Dedicated Resources Database</title>
        <description>&lt;p&gt;By default the deployed database is completely private and is not reachable by
any entity. Access configuration should be configured to allow database clients
to reach it. Either it is an application using the database, or a database
administration tool like a console or a web client.&lt;/p&gt;

&lt;h2 id=&quot;allowing-access-with-firewall-rules&quot;&gt;Allowing Access with Firewall Rules&lt;/h2&gt;

&lt;p&gt;Dedicated Resources databases are protected by a deny-by-default firewall.
To allow inbound connections, you must add explicit firewall rules for each
trusted source.&lt;/p&gt;

&lt;h3 id=&quot;using-the-database-dashboard&quot;&gt;Using the Database Dashboard&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;From your web browser, &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/provisioning#accessing-the-scalingo-for-postgresql-dashboard&quot;&gt;open your database dashboard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Select the &lt;strong&gt;Settings&lt;/strong&gt; tab&lt;/li&gt;
  &lt;li&gt;In the &lt;strong&gt;Settings&lt;/strong&gt; submenu, select &lt;strong&gt;Internet Access&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;In the &lt;strong&gt;Firewall rules&lt;/strong&gt; block, click &lt;strong&gt;New rule&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Select the rule type:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Custom CIDR IPv4&lt;/strong&gt; to allow specific public IP addresses or ranges&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Scalingo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;region&amp;gt;&lt;/code&gt; region&lt;/strong&gt; to allow traffic from Scalingo apps in that region&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Repeat as needed for each trusted source&lt;/li&gt;
  &lt;li&gt;Connect using the database &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/connecting#getting-the-connection-uri&quot;&gt;connection URI&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;using-the-command-line&quot;&gt;Using the Command Line (Preview)&lt;/h3&gt;

&lt;p&gt;Because Dedicated Resources databases are not yet generally available,
you must first enable preview features to use the related CLI commands:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;SCALINGO_PREVIEW_FEATURES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# List the existing rules&lt;/span&gt;
scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;db-id&amp;gt; database-firewall-rules

&lt;span class=&quot;c&quot;&gt;# Add a new rule to the database based on a CIDR or a managed range&lt;/span&gt;
scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;db-id&amp;gt; database-firewall-rules-add &lt;span class=&quot;nt&quot;&gt;--cidr&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;198.51.100.25/32&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--label&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;My workstation&quot;&lt;/span&gt;
scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;db-id&amp;gt; database-firewall-rules-add &lt;span class=&quot;nt&quot;&gt;--managed-range&lt;/span&gt; mr-scalingo-osc-fr1

&lt;span class=&quot;c&quot;&gt;# Remove an existing rule to restrict access&lt;/span&gt;
scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;db-id&amp;gt; database-firewall-rules-remove &amp;lt;rule-id&amp;gt;

&lt;span class=&quot;c&quot;&gt;# List existing managed ranges which are maintained by Scalingo&lt;/span&gt;
scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;db-id&amp;gt; database-firewall-managed-ranges
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;how-the-firewall-works&quot;&gt;How the Firewall Works&lt;/h3&gt;

&lt;p&gt;The firewall follows an allowlist model: you define allowed source networks
with CIDR notation (single IPs or ranges), and only matching sources can reach
the database endpoint.&lt;/p&gt;

&lt;p&gt;You can configure up to &lt;strong&gt;30 firewall rules&lt;/strong&gt; per
database, and rule changes usually propagate in around 2 minutes.&lt;/p&gt;

&lt;p&gt;Here are common CIDR formats you can use in firewall rules:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Single IP: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;203.0.113.10/32&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/32&lt;/code&gt; means one exact IPv4 address)&lt;/li&gt;
  &lt;li&gt;IP range: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;203.0.113.0/24&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/24&lt;/code&gt; means a subnet of 256 IPv4 addresses)&lt;/li&gt;
  &lt;li&gt;Allow all (not recommended): &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.0.0.0/0&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/0&lt;/code&gt; means all IPv4 addresses; this
effectively disables firewall filtering)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;allowing-scalingo-apps-to-reach-a-dedicated-resources-database&quot;&gt;Allowing Scalingo Apps To Reach a Dedicated Resources Database&lt;/h3&gt;

&lt;p&gt;If a Scalingo app must connect to a Dedicated Resources database, you need to
allow inbound connections from the app &lt;a href=&quot;/platform/networking/public/egress&quot;&gt;region’s egress IP addresses&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To keep the service simple and maintenance-free, Scalingo provides a
&lt;strong&gt;managed rule&lt;/strong&gt; type that automatically allowlists egress IPs for a region.&lt;/p&gt;

&lt;p&gt;Two managed rules are available:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Scalingo osc-fr1 region&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Scalingo osc-secnum-fr1 region&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Workflow:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Identify the app region (for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;osc-fr1&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;osc-secnum-fr1&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;Add the matching &lt;strong&gt;managed rule&lt;/strong&gt; in the Dedicated Resources firewall.&lt;/li&gt;
  &lt;li&gt;Add custom CIDR rules only for additional non-Scalingo sources (office IPs,
VPN, etc.).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A database in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;osc-fr1&lt;/code&gt; can accept traffic from an app in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;osc-secnum-fr1&lt;/code&gt; (and
the other way around) as long as the corresponding managed rule is present.&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;With managed rules, Scalingo maintains the underlying egress IP list for you.
You do not need to manually track egress IP changes for these rules.&lt;/p&gt;
&lt;/aside&gt;

&lt;h2 id=&quot;creating-an-outscale-net-peering&quot;&gt;Creating an Outscale Net Peering&lt;/h2&gt;

&lt;p&gt;You can create an &lt;a href=&quot;/databases/about/network-exposure#outscale-net-peering&quot;&gt;Outscale Net Peering&lt;/a&gt; between the
Dedicated VPC of your database and an Outscale VPC from another Outscale
account in the same region.&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;Using Net Peering does not remove the need for firewall rules. You must allow
the private IP ranges from your own networks.&lt;/p&gt;
&lt;/aside&gt;

&lt;p&gt;This feature is currently available from the Scalingo CLI only and requires
preview features to be enabled.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Enable preview features in your shell:&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;SCALINGO_PREVIEW_FEATURES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Fetch the database network configuration:&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;db-id&amp;gt; database-network-configuration
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;From the fetched information, create the Outscale Net Peering from your
Outscale account and copy the generated ID, for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pcx-123456789&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Register the Outscale Net Peering on the database:&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;db-id&amp;gt; database-net-peerings-add &lt;span class=&quot;nt&quot;&gt;--outscale-net-peering-id&lt;/span&gt; pcx-123456789
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Configure your Outscale VPC to route traffic to the database IP range. Update
both the Security Group and the Route Table rules.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Get your &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/endpoints#private-peering-rw&quot;&gt;private peering endpoint&lt;/a&gt; address to build your connection chain through the Net Peering.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;using-third-party-tools&quot;&gt;Using Third Party Tools&lt;/h2&gt;

&lt;p&gt;While using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psql&lt;/code&gt; to query and administer a PostgreSQL® database is probably
the ubiquitous choice for a lot of users, it’s not limited to that. The
PostgreSQL® ecosystem indeed offers a very large panel of tools made and
provided by third-parties. For example, some might feel more intuitive because
of their Graphical User Interface. Some are better integrated with others
tools, when some others are more data-visualization centric.&lt;/p&gt;

&lt;p&gt;By default, and for security reasons, your PostgreSQL® database is protected by
a deny-by-default firewall.&lt;/p&gt;

&lt;p&gt;Before using any third-party tool, configure the required &lt;a href=&quot;#allowing-access-with-firewall-rules&quot;&gt;firewall rules&lt;/a&gt;
to allow connections from your trusted sources.&lt;/p&gt;

&lt;p&gt;Once your firewall rule is active, you should be able to connect
to your database with your tool of choice. If you don’t have one yet, we
suggest you to &lt;a href=&quot;#using-pgadmin&quot;&gt;take a look at pgAdmin&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;using-pgadmin&quot;&gt;Using pgAdmin&lt;/h3&gt;

&lt;p&gt;pgAdmin is probably the most popular and feature rich administration and
development platform for PostgreSQL®. It’s open-source, it supports many
platforms and comes with a Graphical User Interface, making it a reference tool
for PostgreSQL®.&lt;/p&gt;

&lt;p&gt;You can use your own pgAdmin, deployed on Scalingo or on another infrastructure
as long as the firewall rules are correctly configured.&lt;/p&gt;

</description>
        <pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/getting-started/accessing
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/getting-started/accessing
          
        </guid>
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated</category>
        
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated-resources</category>
        
        <category>getting-started</category>
        
      </item>
    
      <item>
        <title>Connecting Your Scalingo for PostgreSQL® Dedicated Resources Database</title>
        <description>&lt;p&gt;Each Scalingo for PostgreSQL® Dedicated Resources database has its own
&lt;strong&gt;connection URI&lt;/strong&gt;, containing all information needed to connect to it.&lt;/p&gt;

&lt;h2 id=&quot;understanding-the-connection-uri&quot;&gt;Understanding the Connection URI&lt;/h2&gt;

&lt;p&gt;The connection URI is made of several &lt;strong&gt;components&lt;/strong&gt; separated one from each
other by a &lt;strong&gt;delimiter&lt;/strong&gt;. For example, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@&lt;/code&gt; character is used to mark the
end of the &lt;em&gt;userinfo&lt;/em&gt; (credentials) component of the URI.&lt;/p&gt;

&lt;p&gt;In the case of PostgreSQL®, the connection URI provided by Scalingo is always
formed as follows:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;postgresql://[user]:[password]@[hostname]:[port]/[dbname]?sslmode&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;require
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For more information about the connection URI syntax, please see
&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc3986&quot;&gt;RFC 3986&lt;/a&gt; which defines the URI Generic Syntax.&lt;/p&gt;

&lt;h2 id=&quot;getting-the-connection-uri&quot;&gt;Getting the Connection URI&lt;/h2&gt;

&lt;p&gt;Scalingo exposes a connection URI you can use to connect to your Dedicated
Resources database with its default protected user.&lt;/p&gt;

&lt;p&gt;Depending on the client or driver you use, you can either use this URI as-is or
split it into separate values (host, port, database, user, password, TLS
settings) to match the expected format.&lt;/p&gt;

&lt;p&gt;If you connect with another database user you created, keep the same endpoint
and database name, and replace the credentials with this user’s credentials.&lt;/p&gt;

&lt;h3 id=&quot;using-the-dashboard&quot;&gt;Using the Dashboard&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;From your web browser, open your &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/provisioning#accessing-the-scalingo-for-postgresql-dashboard&quot;&gt;dashboard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Locate the &lt;strong&gt;Connect&lt;/strong&gt; section then copy its &lt;strong&gt;Connection String&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;using-the-command-line&quot;&gt;Using the Command Line&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Make sure you have correctly &lt;a href=&quot;/tools/cli/start&quot;&gt;setup the Scalingo command line tool&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;From the command line, list your databases:&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo databases
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Locate the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt; of the database you would like to connect to&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;From the command line, get the connection URI value:&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;database_ID&amp;gt; env-get SCALINGO_POSTGRESQL_URL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The output is:&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;postgresql://my_dedicate_wxyz:YANs3y07m5_KJC2MSDGebh8tx1lliFWh2Yb239zVqGQvbElWDjIN7QWspVH92Ul8@my-dedicate-wxyz.postgresql.a.osc-fr1.scalingo-dbs.com:31000/my_dedicate_wxyz?sslmode&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;require
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;building-the-connection-uri-from-a-specific-endpoint&quot;&gt;Building the Connection URI from a Specific Endpoint&lt;/h2&gt;

&lt;p&gt;Dedicated Resources databases expose &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/endpoints&quot;&gt;multiple endpoints&lt;/a&gt;.
You can choose which one to use depending on the network path you want for your
connection. The database Dashboard, the environment variables generated by
Scalingo, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;env-get SCALINGO_POSTGRESQL_URL&lt;/code&gt; expose the default &lt;strong&gt;Public
RW&lt;/strong&gt; endpoint.&lt;/p&gt;

&lt;p&gt;To use the &lt;strong&gt;Private Peering RW&lt;/strong&gt; endpoint, for example through Outscale Net
Peering, replace the hostname and port in the connection URI with the hostname
and port of this endpoint.&lt;/p&gt;

&lt;p&gt;All endpoints accept the default database credentials or the credentials of a
&lt;a href=&quot;/databases/postgresql/dedicated-resources/guides/managing-users&quot;&gt;custom user&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;tls-connections-are-enforced&quot;&gt;TLS Connections Are Enforced&lt;/h2&gt;

&lt;p&gt;By default, all PostgreSQL® Dedicated Resources databases enforce TLS.
Any non-TLS connection is denied. Consequently, your application must be
configured to use TLS when connecting to the database.&lt;/p&gt;

&lt;h2 id=&quot;connecting-multiple-applications-to-the-same-database&quot;&gt;Connecting Multiple Applications to the Same Database&lt;/h2&gt;

&lt;p&gt;To share a database across multiple Scalingo applications, first make sure the
Dedicated Resources firewall allows traffic from the application’s region (see
&lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/accessing#allowing-scalingo-apps-to-reach-a-dedicated-resources-database&quot;&gt;Allowing Scalingo Apps to Reach a Dedicated Resources Database&lt;/a&gt;).
Then add the database connection string as an environment variable in each
application that needs access.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy &lt;a href=&quot;#getting-the-connection-uri&quot;&gt;the connection URI&lt;/a&gt; of your database instance&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/platform/app/environment&quot;&gt;Create a new environment variable&lt;/a&gt; for the application that
needs to access the database&lt;/li&gt;
  &lt;li&gt;Set the value of this new environment variable to connection URI you just
copied&lt;/li&gt;
  &lt;li&gt;Restart the application to make the new environment variable available&lt;/li&gt;
&lt;/ol&gt;

</description>
        <pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/getting-started/connecting
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/getting-started/connecting
          
        </guid>
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated</category>
        
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated-resources</category>
        
        <category>getting-started</category>
        
      </item>
    
      <item>
        <title>Understanding Database Endpoints</title>
        <description>&lt;p&gt;Database endpoints are the different ways to access the database through the network.&lt;/p&gt;

&lt;h2 id=&quot;listing-database-endpoints-with-cli&quot;&gt;Listing Database Endpoints with CLI&lt;/h2&gt;

&lt;p&gt;Because Dedicated Resources databases are not yet generally available,
you must first enable preview features to use the related CLI commands:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;SCALINGO_PREVIEW_FEATURES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Run the following command to list your database endpoints:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;db-id&amp;gt; database-endpoints
┌──────────────────────────┬────────────────────┬───────────────────────────────────────────────────────┬───────┐
│            ID            │        TYPE        │                       HOSTNAME                        │ PORT  │
├──────────────────────────┼────────────────────┼───────────────────────────────────────────────────────┼───────┤
│ 6a316183d0f1f10ecbcca123 │ public-rw          │ mydb-1234.postgresql.osc-fr1.scalingo-dbs.com         │ 30092 │
│ 6a316183d0f1f10ecbcca456 │ private-peering-rw │ mydb-1234.peering.postgresql.osc-fr1.scalingo-dbs.com │ 30092 │
└──────────────────────────┴────────────────────┴───────────────────────────────────────────────────────┴───────┘
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;types-of-database-endpoints&quot;&gt;Types of Database Endpoints&lt;/h2&gt;

&lt;h3 id=&quot;public-rw&quot;&gt;Public RW&lt;/h3&gt;

&lt;p&gt;Public RW (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;public-rw&lt;/code&gt;) stands for public read/write. Its hostname resolves to
the public IP configured for the database. It will always route requests to the
servers able to receive read and write operations on the database.&lt;/p&gt;

&lt;p&gt;This is the default endpoint exposed through the database Dashboard, the
environment variables generated by Scalingo, and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;env-get SCALINGO_POSTGRESQL_URL&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In case of a cluster failover (maintenance/incident), the gateway instance
targeted by the endpoint will change transparently, the IP resolved by the
hostname will not change.&lt;/p&gt;

&lt;h3 id=&quot;private-peering-rw&quot;&gt;Private Peering RW&lt;/h3&gt;

&lt;p&gt;Private Peering RW (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;private-peering-rw&lt;/code&gt;) stands for private peering
read/write. Its hostname resolves to the private IP address on the database
gateway instance which is considerd as primary at a given time.&lt;/p&gt;

&lt;p&gt;This hostname:port couple will only be reachable from networks linked with a
Net Peering to the database.&lt;/p&gt;

&lt;p&gt;In case of a cluster failover (maintenance/incident), the hostname DNS
resolution will be automatically updated to resolve on an available gateway
instance.&lt;/p&gt;

&lt;h2 id=&quot;build-a-connection-string-from-an-endpoint&quot;&gt;Build a Connection String from an endpoint&lt;/h2&gt;

&lt;p&gt;When configuring an application, choose the endpoint matching the network path
you want to use to reach your database.&lt;/p&gt;

&lt;p&gt;For example, use the public endpoint to connect through the public Internet, or
the Private Peering endpoint to connect through Net Peering.&lt;/p&gt;

</description>
        <pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/getting-started/endpoints
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/getting-started/endpoints
          
        </guid>
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated</category>
        
        <category>endpoints</category>
        
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated-resources</category>
        
        <category>getting-started</category>
        
      </item>
    
      <item>
        <title>Provisioning a Scalingo for PostgreSQL® Dedicated Resources Database</title>
        <description>&lt;p&gt;Once you have chosen the right plan for your needs, you are ready to provision
the database. This can be done via our
&lt;a href=&quot;#using-the-dashboard&quot;&gt;dashboard&lt;/a&gt;, our
&lt;a href=&quot;#using-the-command-line&quot;&gt;CLI tool&lt;/a&gt;, our
&lt;a href=&quot;#using-the-terraform-provider&quot;&gt;Terraform Provider&lt;/a&gt;, or via our
&lt;a href=&quot;#using-the-kubernetes-operator&quot;&gt;Kubernetes Operator&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;provisioning&quot;&gt;Provisioning&lt;/h2&gt;

&lt;h3 id=&quot;using-the-dashboard&quot;&gt;Using the Dashboard&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;From your web browser, open your &lt;a href=&quot;https://dashboard.scalingo.com/projects&quot;&gt;dashboard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Select the &lt;strong&gt;Project&lt;/strong&gt; where you want to create the database&lt;/li&gt;
  &lt;li&gt;Click the arrow next to &lt;strong&gt;Create an application&lt;/strong&gt;, then click
&lt;strong&gt;Database Dedicated Resources&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;In the &lt;strong&gt;Databases engines&lt;/strong&gt; section, select
&lt;strong&gt;PostgreSQL Dedicated Resources&lt;/strong&gt; and confirm your choice&lt;/li&gt;
  &lt;li&gt;Enter a database name, then select or confirm the appropriate &lt;strong&gt;Project&lt;/strong&gt; and
&lt;strong&gt;Region&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Select the plan you want to provision and confirm your selection&lt;/li&gt;
  &lt;li&gt;Click the &lt;strong&gt;Create database&lt;/strong&gt; button&lt;/li&gt;
  &lt;li&gt;Database provisioning typically takes 15–30 minutes&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;using-the-command-line&quot;&gt;Using the Command Line (Preview)&lt;/h3&gt;

&lt;p&gt;Because Dedicated Resources databases are not yet generally available,
you must first enable preview features to use the related CLI commands:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;SCALINGO_PREVIEW_FEATURES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Make sure you have correctly &lt;a href=&quot;/tools/cli/start&quot;&gt;setup the Scalingo command line tool&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;From the command line, list the plans available for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgresql-ng&lt;/code&gt;:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo database-list-plans postgresql-ng
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;The output should look like this:&lt;/p&gt;
    &lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;┌─────────────────────────────────┬─────────────────┐
│               ID                │      NAME       │
├─────────────────────────────────┼─────────────────┤
│ postgresql-dr-starter-4096      │ Starter 4G      │
│ postgresql-dr-starter-8192      │ Starter 8G      │
│ postgresql-dr-starter-16384     │ Starter 16G     │
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Locate the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt; corresponding to the plan you want to deploy (for example
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgresql-dr-starter-4096&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Provision the database:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo database-create &lt;span class=&quot;nt&quot;&gt;--type&lt;/span&gt; postgresql-ng &lt;span class=&quot;nt&quot;&gt;--plan&lt;/span&gt; &amp;lt;plan_ID&amp;gt; &amp;lt;database_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;The output should look like this:&lt;/p&gt;
    &lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-----&amp;gt; Your postgresql-ng database 698e082f968c27dfb8a27521 (&apos;my-dedicated-database&apos;) is being provisioned…
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Database provisioning typically takes 15–30 minutes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Optionally you can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--wait&lt;/code&gt; in order to make the command synchronous.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo database-create &lt;span class=&quot;nt&quot;&gt;--type&lt;/span&gt; postgresql-ng &lt;span class=&quot;nt&quot;&gt;--plan&lt;/span&gt; &amp;lt;plan_ID&amp;gt; &lt;span class=&quot;nt&quot;&gt;--wait&lt;/span&gt; &amp;lt;database_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;using-the-terraform-provider&quot;&gt;Using the Terraform Provider&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Place the following &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;resource&lt;/code&gt; block in your Terraform file to create the
database and attach it to your app:
    &lt;div class=&quot;language-tf highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;resource&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;scalingo_database&quot;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;my-dedicated-database&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;       &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;my-dedicated-database&quot;&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;technology&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;postgresql-ng&quot;&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;plan&lt;/span&gt;       &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;postgresql-dr-starter-4096&quot;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;In this example, we create a dedicated PostgreSQL Starter 4096 database named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my-dedicated-database&lt;/code&gt;. We could have done the same with another plan.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;terraform plan&lt;/code&gt; and check if the result looks good&lt;/li&gt;
  &lt;li&gt;If so, run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;terraform apply&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Database provisioning typically takes 15–30 minutes&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;using-the-kubernetes-operator&quot;&gt;Using the Kubernetes Operator&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Deploy the &lt;a href=&quot;/tools/kubernetes-operator&quot;&gt;Scalingo Kubernetes Operator&lt;/a&gt; in your cluster
using the installation manifest &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;install.yaml&lt;/code&gt; from the
&lt;a href=&quot;https://github.com/Scalingo/scalingo-operator/releases&quot;&gt;latest release&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Create a Scalingo API token and store it in a Kubernetes Secret, as
documented in &lt;a href=&quot;https://github.com/Scalingo/scalingo-operator/blob/main/README.md#create-secret&quot;&gt;Create Secret&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Create a custom resource to provision your dedicated PostgreSQL database:&lt;/p&gt;

    &lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;apiVersion&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;databases.scalingo.com/v1alpha1&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;kind&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;PostgreSQL&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;metadata&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;labels&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;app.kubernetes.io/name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;scalingo-operator&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;app.kubernetes.io/managed-by&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kustomize&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;my-dedicated-database&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;spec&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# Secret read by operator&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;authSecret&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;scalingo&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;api_token&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;# Secret written by operator&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;connInfoSecretTarget&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;my-dedicated-database-secret&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;prefix&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;PG&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;# Network configuration&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;networking&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;internet_access&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;outscale&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;oks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;net_peering&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;firewall&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;rules&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;custom_range&quot;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;cidr&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;198.51.100.25/32&quot;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;My&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;workstation&quot;&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;my-dedicated-database&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;plan&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;postgresql-dr-starter-4096&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;region&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;osc-fr1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;This example provisions a dedicated PostgreSQL database named
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my-dedicated-database&lt;/code&gt; on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgresql-dr-starter-4096&lt;/code&gt; plan and writes
its connection information to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my-dedicated-database-secret&lt;/code&gt; Kubernetes
Secret. You can use another &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgresql-dr-*&lt;/code&gt; plan instead.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Apply the resource and wait for provisioning to complete:&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;kubectl apply &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; my-dedicated-database.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Database provisioning typically takes 15–30 minutes&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To read the database URL from the generated secret:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;kubectl describe secret my-dedicated-database-secret
kubectl get secret my-dedicated-database-secret &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;jsonpath&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;{.data}&apos;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;PG
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For a complete manifest (including all available fields), use the official
&lt;a href=&quot;https://github.com/Scalingo/scalingo-operator/tree/main/config/samples&quot;&gt;PostgreSQL sample resource&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;accessing-the-scalingo-for-postgresql-dashboard&quot;&gt;Accessing the Scalingo for PostgreSQL® Dashboard&lt;/h2&gt;

&lt;p&gt;Every PostgreSQL® database comes with its dedicated dashboard, generally referred
to as &lt;strong&gt;database dashboard&lt;/strong&gt;, which is the central place for administrative
tasks such as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/databases/postgresql/dedicated-resources/guides/monitoring&quot;&gt;Monitoring the database&lt;/a&gt; through logs, metrics and statistics&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/databases/postgresql/dedicated-resources/guides/upgrading&quot;&gt;Upgrading the database&lt;/a&gt; engine version&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/databases/postgresql/extensions/managing-extensions&quot;&gt;Enabling specific features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/databases/postgresql/dedicated-resources/guides/managing-users&quot;&gt;Managing database users&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/databases/postgresql/dedicated-resources/guides/managing-collaborators&quot;&gt;Managing Collaborators&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/databases/postgresql/dedicated-resources/guides/backing-up&quot;&gt;Managing backups&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can access the database dashboard from the main dashboard:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;From your web browser, open your &lt;a href=&quot;https://dashboard.scalingo.com/projects&quot;&gt;dashboard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Open the &lt;strong&gt;Project&lt;/strong&gt; containing the database you want to manage&lt;/li&gt;
  &lt;li&gt;In the &lt;strong&gt;Databases&lt;/strong&gt; section, click the database name&lt;/li&gt;
&lt;/ol&gt;

</description>
        <pubDate>Thu, 18 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/getting-started/provisioning
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/getting-started/provisioning
          
        </guid>
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated</category>
        
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated-resources</category>
        
        <category>getting-started</category>
        
      </item>
    
      <item>
        <title>Managing Users of Your Scalingo for PostgreSQL® Dedicated Resources Database</title>
        <description>&lt;p&gt;Each Scalingo for PostgreSQL® Dedicated Resources Database instances comes with
a &lt;a href=&quot;#understanding-protected-user&quot;&gt;default database user&lt;/a&gt;.
You can &lt;a href=&quot;#creating-a-new-user&quot;&gt;create&lt;/a&gt; as many additional users as needed,
grant them with the appropriate permissions, &lt;a href=&quot;#updating-or-resetting-a-user-password&quot;&gt;update/reset their password&lt;/a&gt;,
and &lt;a href=&quot;#deleting-a-user&quot;&gt;delete&lt;/a&gt; them once they are not required anymore.&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;This guide covers &lt;strong&gt;database users&lt;/strong&gt; only.
If you need to grant access to collaborators on a Dedicated Resources database,
add them as collaborators by following &lt;a href=&quot;/databases/postgresql/dedicated-resources/guides/managing-collaborators&quot;&gt;this guide&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;

&lt;h2 id=&quot;listing-existing-users&quot;&gt;Listing Existing Users&lt;/h2&gt;

&lt;h3 id=&quot;understanding-protected-user&quot;&gt;Understanding Protected User&lt;/h3&gt;

&lt;p&gt;When provisioning a new Scalingo for PostgreSQL® Dedicated Resources Database
instance, the platform creates a default user with a random name and password.
It also grants this default user read and write permissions on the database,
using the following queries:&lt;/p&gt;

&lt;div class=&quot;language-sql highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PRIVILEGES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PRIVILEGES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TABLES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PRIVILEGES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SEQUENCES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PRIVILEGES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FOR&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;USER&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TABLES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;PRIVILEGES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FOR&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;USER&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SCHEMA&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;GRANT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ALL&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SEQUENCES&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;This default user is &lt;strong&gt;&lt;em&gt;protected&lt;/em&gt;&lt;/strong&gt; and thus:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;can’t be renamed, nor removed,&lt;/li&gt;
    &lt;li&gt;its password can’t be updated&lt;/li&gt;
  &lt;/ul&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;using-the-database-dashboard&quot;&gt;Using the Database Dashboard&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;From your web browser, open your &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/provisioning#accessing-the-scalingo-for-postgresql-dashboard&quot;&gt;database dashboard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Once on the database dashboard, click the &lt;strong&gt;Settings&lt;/strong&gt; tab, then select the &lt;strong&gt;Database Users&lt;/strong&gt; tab&lt;/li&gt;
  &lt;li&gt;The list of available users is displayed under the &lt;strong&gt;Manage database users&lt;/strong&gt;
section&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;using-the-command-line&quot;&gt;Using the Command Line&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Make sure you have correctly &lt;a href=&quot;/tools/cli/start&quot;&gt;setup the Scalingo command line tool&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;From the command line, list your databases:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo databases
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Locate the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt; of the database for which you want to list users&lt;/li&gt;
  &lt;li&gt;From the command line, run the following command to list the users:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;database_ID&amp;gt; database-users-list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;The output should look like this:&lt;/p&gt;
    &lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+----------------+-----------+-----------+---------------------+
|    USERNAME    | READ-ONLY | PROTECTED | PASSWORD ENCRYPTION |
+----------------+-----------+-----------+---------------------+
| my_app_4553    | false     | true      | SCRAM-SHA-256       |
| my_app_4553_rw | false     | false     | SCRAM-SHA-256       |
| my_app_4553_ro | true      | false     | SCRAM-SHA-256       |
+----------------+-----------+-----------+---------------------+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;In this example, we can see that the database has 3 users available. The
first one is protected, which means it’s been created along with the database.
It can’t be removed. Among the two others, one can only read data from the
database. We can also see the password encryption algorithm.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;creating-a-new-user&quot;&gt;Creating a New User&lt;/h2&gt;

&lt;p&gt;The following restrictions apply when creating a new user, regardless of the
method used:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Username:
    &lt;ul&gt;
      &lt;li&gt;Must be between 6 and 32 characters long&lt;/li&gt;
      &lt;li&gt;Can only contain alphanumerical characters and underscores (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_&lt;/code&gt;)&lt;/li&gt;
      &lt;li&gt;Must start with a letter&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Password:
    &lt;ul&gt;
      &lt;li&gt;Must be between 24 and 64 characters long.&lt;/li&gt;
      &lt;li&gt;Must not contain the character &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;using-the-database-dashboard-1&quot;&gt;Using the Database Dashboard&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;From your web browser, open your &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/provisioning#accessing-the-scalingo-for-postgresql-dashboard&quot;&gt;database dashboard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Once on the database dashboard, click the &lt;strong&gt;Settings&lt;/strong&gt; tab, then select the &lt;strong&gt;Database Users&lt;/strong&gt; tab&lt;/li&gt;
  &lt;li&gt;Click the &lt;strong&gt;Add a database user&lt;/strong&gt; boutton and fill out the form
    &lt;ul&gt;
      &lt;li&gt;Fill a username&lt;/li&gt;
      &lt;li&gt;Fill the corresponding password twice&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;(optional) If you want to restrict this user to read only abilities, make
sure to check the &lt;strong&gt;Read only&lt;/strong&gt; checkbox&lt;/li&gt;
  &lt;li&gt;Validate by clicking the &lt;strong&gt;Add this user&lt;/strong&gt; button&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;using-the-command-line-1&quot;&gt;Using the Command Line&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Make sure you have correctly &lt;a href=&quot;/tools/cli/start&quot;&gt;setup the Scalingo command line tool&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;From the command line, list your databases:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo databases
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Locate the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt; of the database for which you want to create a user&lt;/li&gt;
  &lt;li&gt;From the command line, run the following command to create a new user:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;database_ID&amp;gt; database-users-create &amp;lt;username&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;Optionally, if you want to restrict this user to read only abilities, use
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--read-only&lt;/code&gt; flag:&lt;/p&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;database_ID&amp;gt; database-users-create &lt;span class=&quot;nt&quot;&gt;--read-only&lt;/span&gt; &amp;lt;username&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Set the user password:
    &lt;ul&gt;
      &lt;li&gt;Either chose a password and confirm it&lt;/li&gt;
      &lt;li&gt;Or let the platform generate a password by leaving the field empty&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;The output should look like this:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;If you set a password:
        &lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;User &quot;my_user&quot; created.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;If you let the platform generate a password:
        &lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;User &quot;my_user&quot; created with password &quot;YANs3y07m5_KJC2MSDGebh8tx1lliFWh2Yb239zVqGQvbElWDjIN7QWspVH92Ul8&quot;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;updating-or-resetting-a-user-password&quot;&gt;Updating or Resetting a User Password&lt;/h2&gt;

&lt;p&gt;It is possible to reset the password of any non-protected user.&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;Using the dashboard, you can only reset a password (platform-generated password)&lt;/li&gt;
    &lt;li&gt;Using the command line, you can either:
      &lt;ul&gt;
        &lt;li&gt;update a password (set a value),&lt;/li&gt;
        &lt;li&gt;or reset it (leave the password empty to let the platform generate one)&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;using-the-database-dashboard-reset-only&quot;&gt;Using the Database Dashboard (Reset Only)&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;From your web browser, open your &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/provisioning#accessing-the-scalingo-for-postgresql-dashboard&quot;&gt;database dashboard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Once on the database dashboard, click the &lt;strong&gt;Settings&lt;/strong&gt; tab, then select the &lt;strong&gt;Database Users&lt;/strong&gt; tab&lt;/li&gt;
  &lt;li&gt;Locate the non-protected user for which you want to reset the password&lt;/li&gt;
  &lt;li&gt;Open the &lt;strong&gt;…&lt;/strong&gt; menu next to this user, then click &lt;strong&gt;Reset password&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Confirm the reset operation and safely store the newly generated password&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;using-the-command-line-2&quot;&gt;Using the Command Line&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Make sure you have correctly &lt;a href=&quot;/tools/cli/start&quot;&gt;setup the Scalingo command line tool&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Update the user password with the following command:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;database_ID&amp;gt; database-users-update-password &amp;lt;username&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;Example:&lt;/p&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; 699d6312565f770d0a6cdab3 database-users-update-password my_user
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;An interactive prompt asks you for a password you want to attribute to your user:
    &lt;ul&gt;
      &lt;li&gt;Either choose a password and confirm it&lt;/li&gt;
      &lt;li&gt;Or let the platform generate a password by leaving the field empty
The output should look like this:&lt;/li&gt;
      &lt;li&gt;If you set a password:
        &lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;User &quot;my_user&quot; updated.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;If you let the platform generate a password:
        &lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;User &quot;my_user&quot; updated with password &quot;YANs3y07m5_KJC2MSDGebh8tx1lliFWh2Yb239zVqGQvbElWDjIN7QWspVH92Ul8&quot;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;deleting-a-user&quot;&gt;Deleting a User&lt;/h2&gt;

&lt;h3 id=&quot;using-the-database-dashboard-2&quot;&gt;Using the Database Dashboard&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;From your web browser, open your &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/provisioning#accessing-the-scalingo-for-postgresql-dashboard&quot;&gt;database dashboard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Once on the database dashboard, click the &lt;strong&gt;Settings&lt;/strong&gt; tab, then select the &lt;strong&gt;Database Users&lt;/strong&gt; tab&lt;/li&gt;
  &lt;li&gt;Locate the user you want to remove&lt;/li&gt;
  &lt;li&gt;Open the &lt;strong&gt;…&lt;/strong&gt; menu next to this user, then click &lt;strong&gt;Delete user&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Confirm the removal&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;using-the-command-line-3&quot;&gt;Using the Command Line&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Make sure you have correctly &lt;a href=&quot;/tools/cli/start&quot;&gt;setup the Scalingo command line tool&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Remove the user with the following command:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scalingo &lt;span class=&quot;nt&quot;&gt;--database&lt;/span&gt; &amp;lt;database_ID&amp;gt; database-users-delete &amp;lt;username&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

</description>
        <pubDate>Thu, 18 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/guides/managing-users
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/databases/postgresql/dedicated-resources/guides/managing-users
          
        </guid>
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated</category>
        
        
        <category>databases</category>
        
        <category>postgresql</category>
        
        <category>dedicated-resources</category>
        
        <category>guides</category>
        
      </item>
    
      <item>
        <title>Architecture Models</title>
        <description>&lt;p&gt;Scalingo Managed Database Service lets you deploy and operate databases in 
minutes, with a fully managed service built for production workloads. 
&lt;a href=&quot;/databases/about/features&quot;&gt;Common features&lt;/a&gt; cover scaling, resilience, security, 
backups and minute based pricing. Then, the architecture model you choose 
defines the level of execution and network isolation, and the SecNumCloud scope.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Architecture model&lt;/th&gt;
      &lt;th&gt;Shared Resources&lt;/th&gt;
      &lt;th&gt;Dedicated Resources&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Execution isolation&lt;/td&gt;
      &lt;td&gt;Container with shared vCPU&lt;/td&gt;
      &lt;td&gt;VM with dedicated vCPU&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Network isolation&lt;/td&gt;
      &lt;td&gt;Shared&lt;/td&gt;
      &lt;td&gt;Dedicated VPC&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cluster communications &lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
      &lt;td&gt;Encrypted communications&lt;/td&gt;
      &lt;td&gt;Encrypted communications&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Regions&lt;/td&gt;
      &lt;td&gt;osc-fr1, osc-secnum-fr1&lt;/td&gt;
      &lt;td&gt;osc-fr1, osc-secnum-fr1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Availability Zones&lt;/td&gt;
      &lt;td&gt;Single AZ&lt;/td&gt;
      &lt;td&gt;Up to 3 AZ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Service classes&lt;/td&gt;
      &lt;td&gt;Starter, Business&lt;/td&gt;
      &lt;td&gt;Starter, Business, Enterprise&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Scaling&lt;/td&gt;
      &lt;td&gt;Scale up and scale down&lt;/td&gt;
      &lt;td&gt;Scale up only&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Service class switching&lt;/td&gt;
      &lt;td&gt;Scale in and out between service classes&lt;/td&gt;
      &lt;td&gt;Scale in and out between service classes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Attachment model&lt;/td&gt;
      &lt;td&gt;Add-on to an application&lt;/td&gt;
      &lt;td&gt;Dedicated database, no app required&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Provisioning permissions&lt;/td&gt;
      &lt;td&gt;Any Collaborator&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
      &lt;td&gt;Owner only&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Collaborators&lt;/td&gt;
      &lt;td&gt;Inherits the app collaborators&lt;/td&gt;
      &lt;td&gt;Has its own collaborators&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Network exposure&lt;/td&gt;
      &lt;td&gt;Enable/disable Internet access, no source filtering&lt;/td&gt;
      &lt;td&gt;Fine-grained firewall, optional Outscale Net Peering&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;HDS eligibility&lt;/td&gt;
      &lt;td&gt;Yes&lt;/td&gt;
      &lt;td&gt;Yes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;SecNumCloud scope&lt;/td&gt;
      &lt;td&gt;Infrastructure qualified&lt;/td&gt;
      &lt;td&gt;Infrastructure qualified; Service targeted in 2026&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;shared-resources&quot;&gt;Shared Resources&lt;/h2&gt;

&lt;p&gt;Shared Resources is Scalingo’s default architecture model and has been powering 
our managed databases for years. It delivers strong performance and security on 
shared infrastructure.&lt;/p&gt;

&lt;p&gt;It is suitable for a wide range of workloads, from development and testing to 
production.&lt;/p&gt;

&lt;h3 id=&quot;shared-resources-infrastructure-model&quot;&gt;Shared Resources Infrastructure Model&lt;/h3&gt;

&lt;p&gt;In the Shared Resources model, each database instance runs in its own dedicated 
container, managed by the Scalingo platform.&lt;/p&gt;

&lt;p&gt;Containers run on shared hosts alongside other databases. Isolation is enforced 
at the container level, while the underlying infrastructure is shared.&lt;/p&gt;

&lt;p&gt;For HA clusters, nodes are placed on different hosts to improve resilience 
against host-level failures.&lt;/p&gt;

&lt;h2 id=&quot;dedicated-resources&quot;&gt;Dedicated Resources&lt;/h2&gt;

&lt;p&gt;Dedicated Resources builds on the same deployment and management stack, but runs 
each database instance in a private environment with dedicated compute and 
network isolation (dedicated VM and dedicated VPC). For multi-node clusters, 
nodes are distributed across multiple Availability Zones within the same region.
This provides stronger isolation and security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dedicated Resources are designed for SecNumCloud requirements and is the model 
we plan to certify under SecNumCloud.&lt;/strong&gt;&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;The Dedicated Resources architecture model is currently available for Scalingo 
for PostgreSQL® only, and only to selected customers.
To request access or learn more, please contact our &lt;a href=&quot;mailto:support@scalingo.com&quot;&gt;Support&lt;/a&gt; or &lt;a href=&quot;https://scalingo.com/book-a-demo&quot;&gt;Sales&lt;/a&gt; teams.&lt;/p&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;dedicated-resources-infrastructure-model&quot;&gt;Dedicated Resources Infrastructure Model&lt;/h3&gt;

&lt;p&gt;In the Dedicated Resources model, each database node runs on its own dedicated 
virtual machine, with allocated RAM, dedicated vCPU cores, and a dedicated 
storage volume with dedicated IOPS.&lt;/p&gt;

&lt;p&gt;This infrastructure-level isolation (one VM per node) provides strong tenant 
separation and more predictable compute and storage performance.&lt;/p&gt;

&lt;p&gt;Each database instance or cluster is deployed in a dedicated VPC. For multi-node 
clusters, nodes are distributed across up to three Availability Zones within the 
same region.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;For Business and Enterprise (HA) plans, intra cluster communications are always encrypted, for both architecture models. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;The “Collaborator” role (excluding “Limited Collaborator”) allows users to provision add-ons. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;In 2026, Scalingo’s objective is to qualify the architecture model that powers Databases on Dedicated Resources. This qualification is not yet completed. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 18 Jun 2026 10:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/databases/about/architecture-models
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/databases/about/architecture-models
          
        </guid>
        
        
        <category>databases</category>
        
        <category>about</category>
        
      </item>
    
      <item>
        <title>Database Network Exposure</title>
        <description>&lt;p&gt;This page explains how &lt;strong&gt;Managed Databases&lt;/strong&gt; can be accessed remotely at the 
network level depending on the &lt;strong&gt;architecture model&lt;/strong&gt;.&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;This page covers only network exposure and traffic filtering rules.
For maintenance access methods: Remote Console, Encrypted Tunnel and Direct
Access, see &lt;a href=&quot;/platform/databases/access&quot;&gt;Access Your Database&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;

&lt;h2 id=&quot;at-a-glance&quot;&gt;At a Glance&lt;/h2&gt;

&lt;p&gt;By default, databases are not exposed to the public Internet. We apply secure
connectivity settings out of the box, so your database is not publicly exposed
unless you explicitly enable it.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;&lt;a href=&quot;#shared-resources&quot;&gt;Shared Resources&lt;/a&gt;&lt;/th&gt;
      &lt;th&gt;&lt;a href=&quot;#dedicated-resources&quot;&gt;Dedicated Resources&lt;/a&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Default reachability&lt;/td&gt;
      &lt;td&gt;Reachable from the Scalingo regional network&lt;/td&gt;
      &lt;td&gt;Not reachable by default (no internal or public access)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Internet-routable endpoint&lt;/td&gt;
      &lt;td&gt;Optional, through Internet Accessibility&lt;/td&gt;
      &lt;td&gt;Available, denied by default, allowed only via firewall&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Private peering endpoint&lt;/td&gt;
      &lt;td&gt;Not available&lt;/td&gt;
      &lt;td&gt;Optional, through Outscale Net Peering&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Force TLS&lt;/td&gt;
      &lt;td&gt;Disabled by default&lt;/td&gt;
      &lt;td&gt;Enabled by default&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;For &lt;em&gt;Shared Resources&lt;/em&gt; and &lt;em&gt;Dedicated Resources&lt;/em&gt; fundamentals, see 
&lt;a href=&quot;/databases/about/architecture-models&quot;&gt;Architecture Models&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;shared-resources&quot;&gt;Shared Resources&lt;/h2&gt;

&lt;h3 id=&quot;allowing-scalingo-apps-to-reach-a-database&quot;&gt;Allowing Scalingo Apps To Reach a Database&lt;/h3&gt;

&lt;p&gt;Shared Resources databases are reachable from the Scalingo regional network by
default. Apps running in the same region can reach the database at the network
level without adding a firewall rule.&lt;/p&gt;

&lt;h3 id=&quot;tls-and-force-tls&quot;&gt;TLS and Force TLS&lt;/h3&gt;

&lt;p&gt;On Shared Resources, TLS is available, but &lt;strong&gt;Force TLS connections&lt;/strong&gt; is
disabled by default to maximize compatibility with application frameworks and
database clients.&lt;/p&gt;

&lt;p&gt;When &lt;strong&gt;Force TLS connections&lt;/strong&gt; is enabled, the database denies any non-TLS 
connection, whether it comes from the Scalingo network (for example 
applications) or from the public Internet.&lt;/p&gt;

&lt;p&gt;For multi-node clusters, intra-cluster communications are always encrypted and
do not depend on the &lt;strong&gt;Force TLS connections&lt;/strong&gt; setting. See
&lt;a href=&quot;/databases/about/features&quot;&gt;Common Features&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;making-your-database-reachable-from-the-internet&quot;&gt;Making Your Database Reachable from the Internet&lt;/h3&gt;

&lt;p&gt;Public Internet exposure is optional. To make the database reachable from the
public Internet:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Enable &lt;a href=&quot;#tls-and-force-tls&quot;&gt;Force TLS&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Enable &lt;strong&gt;Internet Accessibility&lt;/strong&gt; from the database dashboard.&lt;/li&gt;
  &lt;li&gt;Use &lt;a href=&quot;/platform/databases/access#direct-access&quot;&gt;Direct Access&lt;/a&gt; for client connections.&lt;/li&gt;
&lt;/ol&gt;

&lt;aside class=&quot;warning&quot;&gt;

  &lt;p&gt;Only enable this setting if your use case requires public Internet access and
you have reviewed the security implications.&lt;/p&gt;

&lt;/aside&gt;

&lt;h2 id=&quot;dedicated-resources&quot;&gt;Dedicated Resources&lt;/h2&gt;

&lt;p&gt;Dedicated Resources databases provide fine-grained control over network
exposure. By default, no application, external client, or peered network can
reach them until you explicitly allow traffic.&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;The Dedicated Resources architecture model is currently available for Scalingo 
for PostgreSQL® only, and only to selected customers.
To request access or learn more, please contact our &lt;a href=&quot;mailto:support@scalingo.com&quot;&gt;Support&lt;/a&gt; or &lt;a href=&quot;https://scalingo.com/book-a-demo&quot;&gt;Sales&lt;/a&gt; teams.&lt;/p&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;outscale-net-peering&quot;&gt;Outscale Net Peering&lt;/h3&gt;

&lt;p&gt;In addition to their &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/endpoints#public-rw&quot;&gt;Internet-routable endpoint&lt;/a&gt;,
Dedicated Resources database instances can provide a &lt;a href=&quot;/databases/postgresql/dedicated-resources/getting-started/endpoints#private-peering-rw&quot;&gt;private endpoint&lt;/a&gt;
reachable through an &lt;a href=&quot;https://docs.outscale.com/en/userguide/About-Net-Peerings.html&quot;&gt;Outscale Net Peering&lt;/a&gt; from an
Outscale account in the same region as the database. This creates a private
connectivity path between the database network and an Outscale VPC.&lt;/p&gt;

&lt;p&gt;This access path is useful when your workloads run outside Scalingo but inside
an Outscale VPC, and you want traffic to reach the database without using the
public Internet route.&lt;/p&gt;

&lt;h3 id=&quot;how-the-firewall-works&quot;&gt;How the Firewall Works&lt;/h3&gt;

&lt;p&gt;With Dedicated Resources, the database endpoint is Internet-routable, but
inbound traffic is denied by default. Access is controlled through a
&lt;strong&gt;fine-grained firewall&lt;/strong&gt; that follows an allowlist model: &lt;strong&gt;every incoming
connection must match an explicit rule&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each access path requires an explicit firewall rule:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#allowing-scalingo-apps-to-reach-a-database-1&quot;&gt;Scalingo apps&lt;/a&gt;: add the matching
managed firewall rule for the app region.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#making-your-database-reachable-from-external-networks&quot;&gt;Public Internet clients&lt;/a&gt;:
allow only the required public source IP addresses or CIDR ranges.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#making-your-database-reachable-from-external-networks&quot;&gt;Outscale Net Peering&lt;/a&gt;:
allow the private IP ranges from your own Outscale network in the firewall.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;allowing-scalingo-apps-to-reach-a-database-1&quot;&gt;Allowing Scalingo Apps To Reach a Database&lt;/h3&gt;

&lt;p&gt;Dedicated Resources databases are not reachable from the Scalingo network by
default. If a Scalingo app must connect to the database, add the managed
firewall rule for the app region.&lt;/p&gt;

&lt;p&gt;This rule allows the Scalingo regional network, so the database becomes
reachable at the network level from any Scalingo app hosted in that region.&lt;/p&gt;

&lt;h3 id=&quot;making-your-database-reachable-from-external-networks&quot;&gt;Making Your Database Reachable from External Networks&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Open only required source networks in the firewall allowlist.&lt;/li&gt;
  &lt;li&gt;If needed, add managed rules for Scalingo regions.&lt;/li&gt;
&lt;/ol&gt;

</description>
        <pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/databases/about/network-exposure
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/databases/about/network-exposure
          
        </guid>
        
        <category>databases</category>
        
        <category>internet</category>
        
        <category>access</category>
        
        <category>accessibility</category>
        
        <category>public</category>
        
        <category>networking</category>
        
        
        <category>databases</category>
        
        <category>about</category>
        
      </item>
    
      <item>
        <title>Scalingo Operator for Kubernetes®</title>
        <description>&lt;h2 id=&quot;scalingo-operator&quot;&gt;Scalingo Operator&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://kubernetes.io/&quot;&gt;Kubernetes&lt;/a&gt; is an open-source container orchestration platform used to deploy, scale and operate applications.&lt;/p&gt;

&lt;p&gt;Scalingo maintains a &lt;a href=&quot;https://github.com/Scalingo/scalingo-operator&quot;&gt;Kubernetes Operator&lt;/a&gt; that lets you manage Scalingo Dedicated Resources instances directly from a Kubernetes cluster.&lt;/p&gt;

&lt;h3 id=&quot;scope&quot;&gt;Scope&lt;/h3&gt;

&lt;p&gt;The Scalingo Kubernetes Operator is a deployment and provisioning tool for Dedicated Resources. It handles the operations:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;create database&lt;/li&gt;
  &lt;li&gt;add/remove firewall rules&lt;/li&gt;
  &lt;li&gt;add net peerings&lt;/li&gt;
  &lt;li&gt;change plan&lt;/li&gt;
  &lt;li&gt;remove database&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does not target supervision or day-2 operations. Operations outside this scope must be handled through the Scalingo CLI, API, or Dashboard, for example:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Collaborator management&lt;/li&gt;
  &lt;li&gt;Database user management&lt;/li&gt;
  &lt;li&gt;Maintenance window configuration&lt;/li&gt;
  &lt;li&gt;PITR restoration&lt;/li&gt;
  &lt;li&gt;Database extension management&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;get-started&quot;&gt;Get started&lt;/h3&gt;

&lt;p&gt;To start using the Scalingo operator in your Kubernetes cluster:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Scalingo/scalingo-operator#deploy-the-operator&quot;&gt;Deploy the Operator&lt;/a&gt; in your Kubernetes cluster using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;install.yaml&lt;/code&gt; file from the &lt;a href=&quot;https://github.com/Scalingo/scalingo-operator/releases/latest&quot;&gt;latest release&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Create a Scalingo &lt;a href=&quot;/platform/user-management/scalingo-account/navigating#api-tokens&quot;&gt;API tokens&lt;/a&gt; from your account settings&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Scalingo/scalingo-operator/blob/main/README.md#create-secret&quot;&gt;Put the token in Kubernetes secret&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Create your dedicated database custom resource, based on these &lt;a href=&quot;https://github.com/Scalingo/scalingo-operator/tree/main/doc/examples/custom_resources&quot;&gt;examples&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Apply the custom resource to deploy the dedicated database&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For the complete list of resources, details and examples, see the operator &lt;a href=&quot;https://github.com/Scalingo/scalingo-operator/blob/main/README.md&quot;&gt;documentation page&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/tools/kubernetes-operator
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/tools/kubernetes-operator
          
        </guid>
        
        <category>tools</category>
        
        <category>kubernetes</category>
        
        <category>operator</category>
        
        
        <category>tools</category>
        
      </item>
    
      <item>
        <title>Managing Dependencies</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://getcomposer.org&quot;&gt;Composer&lt;/a&gt; is the official dependency manager for PHP.
It allows to manage (download, install, upgrade, configure, and remove) the
libraries a project depends on.&lt;/p&gt;

&lt;p&gt;If you want the platform to use Composer to manage your dependencies, make sure
to include both the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.json&lt;/code&gt; and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.lock&lt;/code&gt; files in your
codebase.&lt;/p&gt;

&lt;h2 id=&quot;declaring-dependencies&quot;&gt;Declaring Dependencies&lt;/h2&gt;

&lt;p&gt;The dependencies required by your application must be declared in a file named
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.json&lt;/code&gt;, stored at the root of your codebase. The format is described
in the &lt;a href=&quot;https://getcomposer.org/doc/01-basic-usage.md&quot;&gt;Composer documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once your dependencies have been defined and declared, their versions must be
frozen to ensure a precise version of the application will always be deployed
with the same compatible set of Composer packages. This allows for better
reproducibility and consistency across environments. These versions are written
in a file named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.lock&lt;/code&gt;, also stored at the root of your project.&lt;/p&gt;

&lt;p&gt;Use Composer itself on your local computer (or in your CI/CD pipeline) to
generate the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.lock&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;composer &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To upgrade a dependency, run the following command (in the example below, we
ask Composer to upgrade &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slim&lt;/code&gt;):&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;composer update slim/slim
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In some circumstances, it can be convenient to add either the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--ignore-platform-req=&lt;/code&gt; or the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--ignore-platform-reqs&lt;/code&gt; flag to the above
commands.&lt;/p&gt;

&lt;p&gt;After each command, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.lock&lt;/code&gt; file is automatically updated. Don’t
forget to commit the modifications!&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;Both the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.json&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.lock&lt;/code&gt; files are &lt;strong&gt;required&lt;/strong&gt; for the
    platform to handle your dependencies.&lt;/p&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;managing-private-dependencies&quot;&gt;Managing Private Dependencies&lt;/h3&gt;

&lt;p&gt;If you want to install a private dependency, you need to define the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COMPOSER_AUTH&lt;/code&gt; environment variable, as specified in
&lt;a href=&quot;https://getcomposer.org/doc/03-cli.md#composer-auth&quot;&gt;the Composer documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For a private dependency hosted on GitHub, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COMPOSER_AUTH&lt;/code&gt; environment
variable should contain:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;github-oauth&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;github.com&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;MY-TOKEN&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MY-TOKEN&lt;/code&gt; must be replaced with a valid access token (OAuth token) for your
GitHub account.&lt;/p&gt;

&lt;p&gt;Such a token can be generated &lt;a href=&quot;https://github.com/settings/tokens&quot;&gt;from your GitHub account&lt;/a&gt;.
For more details about GitHub access tokens, please refer to &lt;a href=&quot;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens&quot;&gt;their
comprehensive documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;specifying-the-composer-version&quot;&gt;Specifying the Composer Version&lt;/h2&gt;

&lt;p&gt;You can select the Composer version to install by specifying it in your
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.json&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;extra&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;paas&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;engines&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;composer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2.x&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Scalingo currently supports the following versions of Composer:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Composer&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-22&lt;/code&gt; (&lt;a href=&quot;/platform/internals/stacks/stacks#stack-end-of-life&quot;&gt;EOL&lt;/a&gt;)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-24&lt;/code&gt;&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-26&lt;/code&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.10&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.10.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.10.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.10.1&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2&lt;/code&gt; (LTS)&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.28&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.28&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.28&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;The &lt;a href=&quot;/platform/internals/stacks/scalingo-22-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-22&lt;/code&gt;&lt;/a&gt; stack is deprecated and will be discontinued on June 1, 2027.
Applications must be migrated to &lt;a href=&quot;/platform/internals/stacks/scalingo-24-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-24&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;/platform/internals/stacks/scalingo-26-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-26&lt;/code&gt;&lt;/a&gt; before this date.&lt;/p&gt;
&lt;/aside&gt;

&lt;h2 id=&quot;working-with-composer-environments&quot;&gt;Working with Composer Environments&lt;/h2&gt;

&lt;p&gt;By default, Scalingo considers that your application runs in &lt;em&gt;production&lt;/em&gt; mode.
This means that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer install&lt;/code&gt; automatically runs with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-dev&lt;/code&gt; flag.
As a result, won’t install the development dependencies of your application, if
any.&lt;/p&gt;

&lt;p&gt;Set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COMPOSER_DEV&lt;/code&gt; environment variable to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; if you would like to run your application with these
development dependencies installed (e.g. to debug your app).&lt;/p&gt;

&lt;p&gt;In addition to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--[no-]dev&lt;/code&gt; flag, the platform always runs
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer install&lt;/code&gt; with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--prefer-dist&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--optimize-autoloader&lt;/code&gt; flags.&lt;/p&gt;

</description>
        <pubDate>Tue, 16 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/languages/php/dependencies
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/languages/php/dependencies
          
        </guid>
        
        <category>php</category>
        
        
        <category>languages</category>
        
        <category>php</category>
        
      </item>
    
      <item>
        <title>PHP on Scalingo</title>
        <description>&lt;h2 id=&quot;detection&quot;&gt;Detection&lt;/h2&gt;

&lt;p&gt;Your application is detected as a PHP application if:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.lock&lt;/code&gt; file is present in the root directory of your project&lt;/li&gt;
  &lt;li&gt;or if an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;index.php&lt;/code&gt; file is present in the root directory of your project
(&lt;em&gt;Classic&lt;/em&gt; app)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;stack&quot;&gt;Stack&lt;/h2&gt;

&lt;p&gt;A stack based on Nginx and PHP-FPM is installed.&lt;/p&gt;

&lt;h2 id=&quot;default-configuration&quot;&gt;Default Configuration&lt;/h2&gt;

&lt;p&gt;The default configuration for your application is stored in two files, both
available in the PHP buildpack:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Scalingo/php-buildpack/blob/master/conf/php/php.ini&quot;&gt;php.ini&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Scalingo/php-buildpack/blob/master/conf/php/php-fpm.conf&quot;&gt;php-fpm.ini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reviewing them can give you useful inputs, such as the default values for
parameters like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;upload_max_filesize&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;post_max_size&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;php-versions&quot;&gt;PHP Versions&lt;/h2&gt;

&lt;h3 id=&quot;availability&quot;&gt;Availability&lt;/h3&gt;

&lt;p&gt;The following PHP versions are available:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;PHP Version&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-22&lt;/code&gt; (&lt;a href=&quot;/platform/internals/stacks/stacks#stack-end-of-life&quot;&gt;EOL&lt;/a&gt;)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-24&lt;/code&gt;&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-26&lt;/code&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.5&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.5.7&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.5.7&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.5.7&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.4&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.4.22&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.4.22&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.4.22&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.3&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.3.31&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.3.31&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.3.31&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.2&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.2.31&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.2.31&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.2.31&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;The &lt;a href=&quot;/platform/internals/stacks/scalingo-22-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-22&lt;/code&gt;&lt;/a&gt; stack is deprecated and will be discontinued on June 1, 2027.
Applications must be migrated to &lt;a href=&quot;/platform/internals/stacks/scalingo-24-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-24&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;/platform/internals/stacks/scalingo-26-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-26&lt;/code&gt;&lt;/a&gt; before this date.&lt;/p&gt;
&lt;/aside&gt;

&lt;h3 id=&quot;select-a-version&quot;&gt;Select a Version&lt;/h3&gt;

&lt;p&gt;The default PHP version on all stacks is the latest &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.4&lt;/code&gt;&lt;/strong&gt; version.
If you need to install another version, specify it in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.json&lt;/code&gt; file.
For example, to install the latest PHP version of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.5&lt;/code&gt; branch:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;require&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;php&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;~8.5&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;You should not specify a precise version such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8.4.2&lt;/code&gt; or you would miss
important updates. Instead, you should specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~8.4.2&lt;/code&gt; to install a version
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;=8.4.2 and &amp;lt;8.5.0&lt;/code&gt; or specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~8.4&lt;/code&gt; to install a version &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;=8.4 and &amp;lt;9.0.0&lt;/code&gt;.&lt;/p&gt;

  &lt;p&gt;Further details about version constraints can be found in the
&lt;a href=&quot;https://github.com/npm/node-semver?tab=readme-ov-file#advanced-range-syntax&quot;&gt;Semver documentation&lt;/a&gt;&lt;/p&gt;
&lt;/aside&gt;

&lt;p&gt;If you do not use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.json&lt;/code&gt; (classic app), you can specify the PHP version
through the environment variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PHP_VERSION&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;php-extensions-and-dependencies&quot;&gt;PHP Extensions and Dependencies&lt;/h2&gt;

&lt;p&gt;See our dedicated documentation pages:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/languages/php/dependencies&quot;&gt;Working with PHP Dependencies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/languages/php/extensions&quot;&gt;Working with PHP Extensions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;supported-frameworks&quot;&gt;Supported Frameworks&lt;/h2&gt;

&lt;p&gt;Here is a non-exhaustive list of frameworks known to work on Scalingo:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/languages/php/symfony&quot;&gt;Symfony&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/languages/php/laravel&quot;&gt;Laravel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Laravel Lumen&lt;/li&gt;
  &lt;li&gt;Slim&lt;/li&gt;
  &lt;li&gt;CakePHP&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/languages/php/codeigniter&quot;&gt;CodeIgniter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Laminas MVC&lt;/li&gt;
  &lt;li&gt;Magento&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;configuration-tweaks&quot;&gt;Configuration Tweaks&lt;/h2&gt;

&lt;h3 id=&quot;setup-basic-authentication&quot;&gt;Setup Basic Authentication&lt;/h3&gt;

&lt;p&gt;You may want to hide your application behind an authentication gateway.
You can &lt;a href=&quot;/languages/php/basic-auth&quot;&gt;configure HTTP basic auth&lt;/a&gt;
for your application.&lt;/p&gt;

&lt;h3 id=&quot;php-fpm-concurrency&quot;&gt;PHP-FPM Concurrency&lt;/h3&gt;

&lt;p&gt;The level of concurrency configured is defined automatically according to the
size of the containers of your application. If you want to override this value,
you can define the environment variable: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_CONCURRENCY&lt;/code&gt;. It directly
modifies the &lt;a href=&quot;https://www.php.net/manual/fr/install.fpm.configuration.php&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pm.max_children&lt;/code&gt;&lt;/a&gt;
parameter of PHP-FPM, defining the upper limit of how many workers handling
incoming requests will be running. Each of these processes will be able to run
1 request at a time.&lt;/p&gt;

&lt;p&gt;The default values for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pm.max_children&lt;/code&gt; are based on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;memory_limit&lt;/code&gt;
parameter of the &lt;a href=&quot;https://github.com/Scalingo/php-buildpack/blob/master/conf/php/php.ini#L15&quot;&gt;PHP configuration&lt;/a&gt;,
the used formula is: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;floor(available_memory / php_memory_limit) + 2&lt;/code&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Container Size&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Memory (MB)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Default Concurrency&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;S&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;256&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;512&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;L&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1024&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;XL&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2048&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2XL&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4096&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;concurrency-fine-tuning&quot;&gt;Concurrency Fine Tuning&lt;/h3&gt;

&lt;p&gt;Fine tuning the value of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_CONCURRENCY&lt;/code&gt; environment variable is a bit
tricky and must be handled with care. There is no magic formula and you should
load test your application to find the best value matching your use case. If the
application is swapping, you might need to lower the value of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_CONCURRENCY&lt;/code&gt;
and increase the amount of containers. On the contrary, if your application
does not use all its memory, you can try to slightly increase the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_CONCURRENCY&lt;/code&gt; value and make sure the application does not start swapping.&lt;/p&gt;

&lt;p&gt;Note that if the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_CONCURRENCY&lt;/code&gt; value is too high your application will not
be 100% available. You will see at some point the following error message in
your application logs, multiple times:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;connect() to unix:/tmp/php-fpm.sock failed (11: Resource temporarily
unavailable) while connecting to upstream, client: XXX.XXX.XXX.XXX, server:
localhost, request: &quot;GET / HTTP/1.1&quot;, upstream:
&quot;fastcgi://unix:/tmp/php-fpm.sock:&quot;, host: &quot;example.com&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It happens when the PHP-FPM requests queue is full. Restarting your application
empties this requests queue and makes your application back up. Then you should
improve the value of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEB_CONCURRENCY&lt;/code&gt; value.&lt;/p&gt;

&lt;h3 id=&quot;buildpack-custom-configuration&quot;&gt;Buildpack Custom Configuration&lt;/h3&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;&lt;a href=&quot;/platform/deployment/buildpacks/intro&quot;&gt;&lt;em&gt;What is a buildpack?&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/aside&gt;

&lt;p&gt;The buildpack allows you to configure precisely how your application is
deployed. This configuration is done in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.json&lt;/code&gt; at the &lt;em&gt;root&lt;/em&gt;
of your project.&lt;/p&gt;

&lt;p&gt;All these fields are &lt;strong&gt;optional&lt;/strong&gt;, define them if you need to modify their
default value.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;…&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;Your&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;extra&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;values&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;PaaS&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;specific&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;instructions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;paas&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;document-root&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;index-document&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;index.php&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;engines&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;nginx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;framework&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;php-config&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;php-includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;php-fpm-config&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;php-fpm-includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;nginx-includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;log-files&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;compile&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;new-relic&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;access-log-format&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;extrapaasdocument-root&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.document-root&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;The directory where Nginx will define the root of your app.&lt;/p&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;It is empty by default, it means that Nginx will look at the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;index.php&lt;/code&gt; at
  the root of your project.&lt;/p&gt;
&lt;/aside&gt;

&lt;p&gt;This parameter can also be overridden with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DOCUMENT_ROOT&lt;/code&gt; environment
variable.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasframework&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.framework&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Bypass framework detection by specifying the framework you want. It could also
be useful if you need to specify your application does not use any framework.
This is done by specifying &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default&lt;/code&gt; in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.framework&lt;/code&gt;
configuration.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasindex-document&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.index-document&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Name of the index document of each directory. When accessing a directory
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://example.osc-fr1.scalingo.io/web/&lt;/code&gt;), Nginx looks by default for an
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;index.php&lt;/code&gt; file to execute, if your project is using another name, specify it
here.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasenginescomposer&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.engines.composer&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Define a specific version of Composer to use. By default your application uses
the latest Composer version available. Most of the time, you don’t need to
change this value.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasenginesnginx&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.engines.nginx&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Define a precise version of Nginx to use. By default your application is
reachable through the last stable version of the server. Most of the time, you
don’t need to change this value.&lt;/p&gt;

&lt;p&gt;Scalingo supports the following versions of Nginx:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Nginx version&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-22&lt;/code&gt; (&lt;a href=&quot;/platform/internals/stacks/stacks#stack-end-of-life&quot;&gt;EOL&lt;/a&gt;)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-24&lt;/code&gt;&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-26&lt;/code&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.31&lt;/code&gt;&lt;/strong&gt; (Mainline)&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;Up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.31.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;Up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.31.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;Up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.31.2&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.30&lt;/code&gt;&lt;/strong&gt; (Stable)&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;Up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.30.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;Up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.30.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;Up to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.30.3&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;The &lt;a href=&quot;/platform/internals/stacks/scalingo-22-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-22&lt;/code&gt;&lt;/a&gt; stack is deprecated and will be discontinued on June 1, 2027.
Applications must be migrated to &lt;a href=&quot;/platform/internals/stacks/scalingo-24-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-24&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;/platform/internals/stacks/scalingo-26-stack&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalingo-26&lt;/code&gt;&lt;/a&gt; before this date.&lt;/p&gt;
&lt;/aside&gt;

&lt;h4 id=&quot;extrapaasphp-config&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.php-config&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;List of directives which will be added to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;php.ini&lt;/code&gt;. The default values
used for your application are in the buildpack’s
&lt;a href=&quot;https://github.com/Scalingo/php-buildpack/blob/master/conf/php/php.ini&quot;&gt;php.ini&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;php-config&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;display_errors=off&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;short_open_tag=on&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;extrapaasphp-fpm-config&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.php-fpm-config&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;List of directives which will be added to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;php-fpm.ini&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;php-fpm-config&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;log_level=debug&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;extrapaasphp-includes&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.php-includes&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Extra files which will be included in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;php.ini&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasphp-fpm-includes&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.php-fpm-includes&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Extra files which will be included in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;php-fpm.ini&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasnginx-http-includes&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.nginx-http-includes&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Extra files which will be included in the Nginx configuration of your
application. These files are injected at the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http&lt;/code&gt; scope of the
configuration file.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasnginx-includes&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.nginx-includes&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Extra files which will be included in the Nginx configuration of your
application. These files are injected at the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;server&lt;/code&gt; scope of the
configuration file.&lt;/p&gt;

&lt;h4 id=&quot;extrapaascompile&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.compile&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Commands to run after the dependency installation.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;compile&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;php app/console assetic:dump --env=prod --no-debug&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;extrapaaslog-files&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.log-files&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;If your project is writing in custom log files, you can specify them here and
they will be streamed to the logs of your application.&lt;/p&gt;

&lt;p&gt;Your can read the logs on your dashboard or with the Scalingo CLI utility.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasdatadog&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.datadog&lt;/code&gt;&lt;/h4&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;The Datadog agent must be installed first (&lt;a href=&quot;/platform/app/datadog&quot;&gt;see the documentation&lt;/a&gt;).&lt;/p&gt;
&lt;/aside&gt;

&lt;p&gt;To enable &lt;a href=&quot;https://www.datadoghq.com/&quot;&gt;Datadog&lt;/a&gt; support, set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extra.paas.datadog&lt;/code&gt; property to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt;. It makes the following Datadog products available:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Datadog APM (Application Performance Monitoring)&lt;/li&gt;
  &lt;li&gt;Datadog ASM (Application Security Management)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This automatically installs the latest available version of the Datadog Tracer and enables APM. To disable the tracer, set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DATADOG_TRACER_VERSION&lt;/code&gt; environment variable to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;latest&lt;/code&gt; by default).
Note that disabling the tracer will also disable APM and ASM.&lt;/p&gt;

&lt;p&gt;The Datadog ASM (Application Security Management) extension is disabled by default. To install and enable ASM, set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DATADOG_APPSEC_VERSION&lt;/code&gt; environment variable to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;latest&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt; by default).&lt;/p&gt;

&lt;h4 id=&quot;extrapaasnew-relic&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.new-relic&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;If true, enable New Relic instrumentation tools.&lt;/p&gt;

&lt;p&gt;The environment variable named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NEW_RELIC_LICENSE_KEY&lt;/code&gt; is required.&lt;/p&gt;

&lt;p&gt;It is also &lt;a href=&quot;https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-appname&quot;&gt;highly
recommended&lt;/a&gt;
to include the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NEW_RELIC_APP_NAME&lt;/code&gt; environment variable to specify the name of
the application as displayed in the New Relic UI.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasscout&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.scout&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;If true, enable &lt;a href=&quot;https://scoutapm.com/&quot;&gt;Scout APM&lt;/a&gt; support.&lt;/p&gt;

&lt;p&gt;You may want to use the environment variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SCOUT_APM_VERSION&lt;/code&gt; to install a specific version of the &lt;a href=&quot;https://pecl.php.net/package/scoutapm&quot;&gt;PECL extension&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;extrapaasaccess-log-format&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.extra.paas.access-log-format&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;The format of the logs produced by the proxy Nginx for each request to your
application.&lt;/p&gt;

&lt;p&gt;It is empty by default, it means that Nginx will use the following format:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&apos;$http_x_forwarded_for - &quot;$request&quot; $status $body_bytes_sent &quot;$http_referer&quot; &quot;$http_user_agent&quot;&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;e.g.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;109.26.203.98 - &quot;GET / HTTP/1.1&quot; 200 1761 &quot;https://google.com/search&quot; &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;aside class=&quot;note&quot;&gt;
  &lt;p&gt;Note that the default output doesn’t display any timestamp, as Scalingo log
  aggregation system will prepend it in the global logs of the application. For
  instance:&lt;/p&gt;

  &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2017-01-26 12:02:06.504267001 +0100 CET [web-1] &amp;lt;nginx log output&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/aside&gt;

&lt;p&gt;When defining a custom value for the log format, please refer to the Nginx
&lt;a href=&quot;https://nginx.org/en/docs/http/ngx_http_log_module.html#log_format&quot;&gt;documentation
page&lt;/a&gt;..&lt;/p&gt;

&lt;p&gt;This parameter can also be overridden with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ACCESS_LOG_FORMAT&lt;/code&gt; environment
variable.&lt;/p&gt;

&lt;h2 id=&quot;warning-htaccess-files&quot;&gt;Warning: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; Files&lt;/h2&gt;

&lt;p&gt;Classic PHP applications often use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; file in their project to modify
the configuration of the Apache server. As the buildpack is based on Nginx and
PHP-FPM, these files are ineffective.&lt;/p&gt;

&lt;p&gt;Instead of using these files, you have to write directives for Nginx and
configure the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nginx-includes&lt;/code&gt; part of your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.json&lt;/code&gt;. It can contains
one or more configuration files:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;…&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;extra&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;paas&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;nginx-includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;path/to/nginx_conf_file&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;…&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;example-configuring-rate-limiting&quot;&gt;Example: Configuring Rate Limiting&lt;/h2&gt;

&lt;p&gt;In the following example we will set a rate limit of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;one request per second
per IP&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Create a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nginx-http.conf&lt;/code&gt; file at the root of your project:&lt;/p&gt;

&lt;div class=&quot;language-nginx highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;limit_req_zone&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$binary_remote_addr&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zone=mylimit:10m&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;rate=1r/s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then create a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nginx-app.conf&lt;/code&gt; file at the root of your project:&lt;/p&gt;

&lt;div class=&quot;language-nginx highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;/login&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;limit_req&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zone=mylimit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;try_files&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$uri&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$uri&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;/index.php?&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$query_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then modify your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;composer.json&lt;/code&gt; to add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nginx-http-includes&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nginx-includes&lt;/code&gt; config:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;extra&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;paas&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;nginx-http-includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nginx-http.conf&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;nginx-includes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nginx-app.conf&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;aside class=&quot;warning&quot;&gt;

  &lt;p&gt;This configuration will not work with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;location /&lt;/code&gt; as it can’t be overridden
  in the PHP buildpack. If you want to apply a rate limit on all endpoints of
  your application you need to setup two apps (one web app and one reverse
  proxy app) by using our &lt;a href=&quot;/platform/deployment/buildpacks/nginx&quot;&gt;Nginx buildpack&lt;/a&gt;
  and using this &lt;a href=&quot;/platform/deployment/buildpacks/nginx#setup-throttling-with-a-limit_req_zone&quot;&gt;process&lt;/a&gt;.&lt;/p&gt;

&lt;/aside&gt;

&lt;h2 id=&quot;example-url-rewriting-eg-wordpress&quot;&gt;Example: URL Rewriting (e.g. WordPress)&lt;/h2&gt;

&lt;p&gt;Here is an example of classic &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; which won’t work on Scalingo.
You need to replace it with the Nginx configuration following the example.&lt;/p&gt;

&lt;p&gt;Classic &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; example:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-ApacheConf&quot;&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nginx configuration:&lt;/p&gt;

&lt;div class=&quot;language-nginx highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;try_files&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$uri&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$uri&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;/index.php?&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

</description>
        <pubDate>Tue, 16 Jun 2026 12:00:00 +0000</pubDate>
        <link>
          
          https://doc.scalingo.com/languages/php/start
          
        </link>
        <guid isPermaLink="true">
          
          https://doc.scalingo.com/languages/php/start
          
        </guid>
        
        <category>php</category>
        
        
        <category>languages</category>
        
        <category>php</category>
        
      </item>
    
  </channel>
</rss>
