Application parameters

The YAML keys you set per application (vhost) - domain, certificate, runtime, code deployment, proxying and per-application tuning.

Every key on this page is set per application, under system_users[].vhosts[]. A GUI key has a field in the interface; a YAML only key is set in the Source (YAML) view, which accepts the same configuration.

Domain and application type

Every application needs at least a domain and a certificate. The application type tells TurboStack which software to provision and configure.

Example - every key in this section, with realistic values:

system_users:
  - username: prod
    vhosts:
      - server_name: example.com www.example.com
        app_type: wordpress       # leave empty for a plain PHP site
        app_install: true         # run the installer, not just prepare the config
        app_name: shop            # only for a second app under the same user
        monitoring_url: /health    # what uptime monitoring requests

server_name

string GUI required

The domain names this application answers on, separated by spaces. This is the application's address. Without it the application is not reachable.

Note: required. Must be unique across the host.

app_type

string GUI

For example wordpress, magento2, shopware, laravel, odoo, generic - the GUI dropdown lists the values available now.

Tells TurboStack which application to provision, so it applies the right web server rules, caching and file layout. Saves you from configuring the stack by hand for a known application.

Note: leave it empty for a plain PHP site. The GUI dropdown lists the currently supported types.

app_install

boolean YAML only

Default false.

Actually runs the installer for the chosen application type, instead of only preparing the configuration. Get a working installation without downloading and installing the software yourself.

app_name

string GUI

Names a secondary application under the same system user, in its own subfolder. Run several applications under one account, for example a shop and a separate blog.

Note: lowercase letters and digits, starting with a letter, at most 33 characters. Only one application per user may leave this empty.

monitoring_url

string GUI

The URL that uptime monitoring requests for this application. Point monitoring at a health-check endpoint instead of the homepage.

Certificates

Every application gets HTTPS through a Transport Layer Security (TLS) certificate. The certificate source is set per application. See TLS certificates for the full explanation.

Example - every key in this section, with realistic values:

system_users:
  - username: prod
    vhosts:
      - server_name: example.com www.example.com
        cert_type: letsencrypt         # letsencrypt | selfsigned | custom
        cert_challenge: dns            # http | dns (dns is needed for wildcards)
        cert_provider: cloudflare      # hostedpower | cloudflare
        cert_cloudflare_api_token: "cf_xxxxxxxxxxxx"
        # For a certificate you bought instead of Let's Encrypt:
        # cert_type: custom
        # cert_fullchain: |
        #   -----BEGIN CERTIFICATE-----
        # cert_pvk: |
        #   -----BEGIN PRIVATE KEY-----

cert_type

enum GUI required

One of letsencrypt, selfsigned, custom.

Selects where the certificate comes from - issued automatically, self-signed, or supplied by you. Choose letsencrypt for free automatic HTTPS that renews itself, or custom for a certificate you bought.

Note: required once server_name is set.

cert_fullchain

string GUI

The certificate chain, in PEM format, for a certificate you supply yourself. Use a certificate from your own supplier, for example an extended-validation certificate.

Note: only with cert_type: custom. Must match cert_pvk, which is verified before deployment.

cert_pvk

string GUI

The private key, in PEM format, belonging to cert_fullchain. Required alongside your own certificate.

Note: only with cert_type: custom.

cert_challenge

enum GUI

One of http, dns. Default http.

How ownership of the domain is proven when a certificate is issued. Domain Name System (DNS) validation is the only way to get a wildcard certificate, and it works before the domain points at the server.

cert_provider

enum GUI

One of hostedpower, cloudflare.

Which DNS provider is used for DNS validation. Lets the platform create the validation record for you automatically.

Note: only with cert_challenge: dns.

cert_cloudflare_api_token

string GUI advanced

The API token used to create the DNS validation record. Needed when your domain is managed at Cloudflare and you use DNS validation.

Note: only with cert_provider: cloudflare.

Runtimes

Each application picks its own runtime and version, so applications on one host can run different versions side by side. Setting the version key is what enables that runtime - there is no separate "enable" key.

Prefer a version that is still supported. Older versions keep working if your application needs them, but they may no longer receive security updates, so plan to upgrade one application at a time. The GUI dropdown always lists the versions available now.

Example - every key in this section, with realistic values:

system_users:
  - username: prod
    vhosts:
      - server_name: example.com
        php_version: "8.4"           # one runtime per application
        # nodejs_version: "24"       # Node.js app (usually with proxy_enabled)
        # python_version: "3.13"     # Python app
        # ruby_version: "3.4"        # Ruby app
        # ruby_start_cmd: bundle exec puma -C config/puma.rb
        # ruby_sidekiq: true
        # ruby_sidekiq_cmd: bundle exec sidekiq -q default
        # dotnet_version: "10.0"     # .NET app
        docker_enabled: false        # run a containerized app
        k8s_enabled: false           # run Kubernetes workloads
        rabbitmq_enabled: false      # give this app a message broker

php_version

string GUI

For example 8.2, 8.3, 8.4 - the GUI dropdown lists the values available now.

The PHP version this application runs on, with its own process pool. Match the version your application supports, and upgrade one application at a time.

Note: quote the value, for example "8.4". The GUI dropdown lists the installed versions.

nodejs_version

string GUI

For example 22, 24 - the GUI dropdown lists the values available now.

Installs the given Node.js major version for this application. Run a Node.js application. Setting this key is what enables the runtime.

Note: quote the value, for example "24". Usually combined with proxy_enabled.

python_version

string GUI

For example 3.12, 3.13 - the GUI dropdown lists the values available now.

Installs the given Python version for this application. Run a Python application.

ruby_version

string GUI advanced

For example 3.3, 3.4 - the GUI dropdown lists the values available now.

Installs the given Ruby version for this application. Run a Ruby application such as Rails.

ruby_start_cmd

string GUI advanced

Default: A standard Puma start command.

The command used to start the Ruby application server. Use a different application server than the default.

ruby_sidekiq

boolean GUI advanced

Default false.

Runs a Sidekiq background-worker service for this application. Process background jobs for a Ruby application.

ruby_sidekiq_cmd

string GUI advanced

Overrides the command used to start Sidekiq. Pass your own queue or concurrency options.

dotnet_version

string GUI advanced

For example 8.0, 10.0 - the GUI dropdown lists the values available now.

Installs the given .NET version and runs your application as a service behind the web server. Run a .NET application.

docker_enabled

boolean GUI

Default false.

Allows this application's system user to run containers. Run a containerized application, with the web server proxying to the container.

Note: usually combined with proxy_enabled and proxy_upstream_port.

k8s_enabled

boolean GUI advanced

Default false.

Installs a lightweight Kubernetes orchestrator on the host. Run container workloads that need orchestration.

rabbitmq_enabled

boolean GUI

Default false.

Provisions a message-broker account for this application, and installs the broker on the host if needed. Applications that process work in the background, such as OroCommerce, need a message broker.

Application code from a Git repository

TurboStack can clone a Git repository for an application and update it on every publish, so the code on the server always matches the branch or tag you chose. Add repositories in the interface under Configure application, on the GIT tab.

Example - every key in this section, with realistic values:

system_users:
  - username: prod
    vhosts:
      - server_name: example.com
        git:
          - repo: git@github.com:example/shop.git
            version: main            # branch, tag or commit
            path: public_html        # relative to the account's own folder

git

list GUI

Default empty.

The repositories that are cloned and kept up to date for this application. Deploy from your own repository instead of copying files to the server by hand.

Note: the clone runs as the account that owns the application, so the files get the right owner straight away.

git.repo

string GUI required

The address of the repository to clone, either an HTTPS or an SSH address. Tells the platform where your code lives.

Note: required for every entry. An entry without it is skipped.

git.version

string GUI

Default main.

Which branch, tag or commit is checked out. Follow a branch on a staging host, and pin a production host to a released tag.

git.path

string GUI

Default: The account's own folder.

Where the repository is placed, relative to the account's folder. Put the code straight into the folder the application is served from, for example public_html.

Note: the path is read as relative to the account's folder, so a leading slash is ignored. Leave it empty to clone into the account's folder itself.

Caching and proxying

Use these to put a cache in front of an application, or to publish an application that runs as its own process such as Node.js, Python or a container.

Example - every key in this section, with realistic values:

system_users:
  - username: prod
    vhosts:
      - server_name: example.com
        varnish_enabled: true        # full-page cache (PHP storefronts)
        # For a Node.js/Python/.NET/container app instead:
        # proxy_enabled: true
        # proxy_upstream_port: 3000   # local port your app listens on
        # proxy_upstream_host: 127.0.0.1

varnish_enabled

boolean GUI

Default false.

Puts this application behind the full-page cache. The single biggest speed win for PHP storefronts such as Magento and Shopware.

Note: nothing at host level - turning this on is what installs Varnish on the host, and the platform picks the version. The host keys under Caching and queues only tune it. Do not use this for Node.js applications.

proxy_enabled

boolean GUI

Default false.

Makes the web server forward requests to an application running on a local port. The standard way to publish a Node.js, Python, .NET or containerized application.

proxy_upstream_port

integer port GUI required

Default 3000.

The local port your application listens on. Tells the web server where to send the requests.

Note: required when proxy_enabled is true.

proxy_upstream_host

string GUI advanced

Default 127.0.0.1.

The address the web server forwards to. Only change it when the application runs somewhere other than this server.

PHP tuning

These override the automatically tuned PHP process pool for one application. The defaults suit almost every site - change them only with measured evidence.

Example - every key in this section, with realistic values:

system_users:
  - username: prod
    vhosts:
      - server_name: example.com
        php_version: "8.4"
        # Override the auto-tuned PHP-FPM pool only with evidence:
        php_fpm_pm_max_children: 40
        php_fpm_pm_start_servers: 8
        php_fpm_pm_min_spare_servers: 5
        php_fpm_pm_max_spare_servers: 12
        php_fpm_pm_max_requests: 500
        php_enhance: true            # skip file-change checks (reload after deploy)
        php_opcache_preload_script: /var/www/prod/example.com/config/preload.php
        php_user_tmp_dir: true       # dedicated temp folder for this app

php_fpm_pm_max_children

integer count YAML only advanced

Default: Inherited from the host.

The maximum number of PHP processes this application may run at once. Raise it for a busy application, lower it to stop one application using all the memory.

php_fpm_pm_start_servers

integer count GUI advanced

Default: Inherited from the host.

How many PHP processes are started immediately. Reduces warm-up delay after a restart on a busy application.

php_fpm_pm_min_spare_servers

integer count GUI advanced

Default: Inherited from the host.

The minimum number of idle PHP processes kept ready. Absorbs traffic spikes without waiting for new processes.

php_fpm_pm_max_spare_servers

integer count GUI advanced

Default: Inherited from the host.

The maximum number of idle PHP processes kept ready. Frees memory again after a spike.

php_fpm_pm_max_requests

integer count YAML only advanced

Default: Inherited from the host.

How many requests a PHP process handles before it is recycled. Recycling limits the impact of memory leaks in application code.

php_enhance

boolean YAML only advanced

Default false.

Stops PHP from checking whether source files changed on disk. A real speed gain on production applications that are deployed, not edited live.

php_opcache_preload_script

string GUI advanced

Loads your framework into memory once at startup, instead of on every request. A large speed gain for frameworks that support preloading, such as Symfony and Laravel.

Note: only one application per PHP version may set this, and the file must exist. Otherwise the deployment fails.

php_user_tmp_dir

boolean YAML only advanced

Default false.

Gives this application its own temporary folder instead of the shared one. Keeps sessions and uploads separated between applications on the same host.

Performance monitoring

Connect an external application-performance monitoring product to a single application.

Example - every key in this section, with realistic values:

system_users:
  - username: prod
    vhosts:
      - server_name: example.com
        newrelic_appname: "Example production"
        newrelic_license: "nr_xxxxxxxxxxxx"
        # Tideways instead of, or next to, New Relic:
        tideways_apikey: "tw_xxxxxxxxxxxx"
        tideways_service: web
        tideways_sample_rate: 25

newrelic_appname

string GUI advanced

The name this application reports under in New Relic. Recognise the application in your monitoring dashboard.

newrelic_license

string GUI advanced

The licence key used to send performance data. Enables application performance monitoring for this application only.

tideways_apikey

string GUI advanced

The key used to send profiling data to Tideways. Find slow code paths in a PHP application.

tideways_service

string GUI advanced

The service name this application reports under. Separate several applications in the same Tideways account.

tideways_sample_rate

integer GUI advanced

What percentage of requests is profiled. Lower it to reduce the overhead of profiling on a busy site.