Skip to content

Update single-runtime-image.md #4580

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions sites/platform/src/create-apps/app-reference/composable-image.md
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,60 @@ much like you would plug a hard drive into your computer to transfer data.

{{% /note %}}

### Mount types

Each mount type has a specific use case and understanding how to use each type effectively will help optimize your application.

#### `storage` mount

The `storage` mount is a shared network storage that is automatically added by the platform. It is required for applications that need to share files across multiple instances—such as user-uploaded media or shared assets. You can configure the size of this mount via the {{% vendor/name %}} UI.

Pros:
- Shared across all app instances.
- Configurable size via the UI.
- Persistent across restarts and redeployments.

Cons:
- Not suitable for high-throughput temporary operations.

#### `tmp` mount

The `tmp` mount uses the ephemeral disk of an instance and is intended for non-persistent, high-speed temporary storage. Data here may be lost during redeployments or infrastructure updates. Like `instance`, it is limited to 8GB and not configurable.

Pros:
- Fastest available storage—ideal for caches or intermediate data.
- Great for temporary files that can be regenerated.

Cons:
- Non-persistent data can be cleared at any time.
- Not shared across instances or with workers.
- Fixed size (8GB).

#### `service` mount

A `service` mount allows you to explicitly define and use a Network Storage service that can be shared between different apps or workers. Unlike the default `storage` mount, which is automatically provisioned per app, a service-based mount gives you greater flexibility and control over how shared storage is configured and accessed across your project.

This is useful when multiple apps or services need access to the same set of files or data—for example, a frontend app and a background worker both reading from a shared media directory.

Pros:
- Enables cross-app and cross-worker shared storage.
- Centralized configuration via a defined service.
- More control over lifecycle and visibility of the storage.

Cons:
- Requires explicit setup and service configuration.
- Slightly more complex than default `storage` mounts.

For setup instructions and more information, see the [Network Storage service documentation](/add-services/network-storage).

#### Scaling

When horizontally scaling your app (multiple instances of the same app), using the appropriate mount type is critical. For shared data, a `storage` or `service` mount is recommended. For local-only data, use `tmp` mounts.

#### Sharing mounts

If you need to share a mount between different apps, consider using a `service` mount. This must be added explicitly and is distinct from the default `storage` mount. Mounts can be shared with workers as well, provided the configuration includes them.

### Define a mount

To define a mount, use the following configuration:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,76 @@ much like you would plug a hard drive into your computer to transfer data.

{{% /note %}}

### Mount types

Each mount type has a specific use case and understanding how to use each type effectively will help optimize your application.

#### `storage` mount

The `storage` mount is a shared network storage that is automatically added by the platform. It is required for applications that need to share files across multiple instances—such as user-uploaded media or shared assets. You can configure the size of this mount via the {{% vendor/name %}} UI.

Pros:
- Shared across all app and worker instances.
- Configurable size via the UI.
- Persistent across restarts and redeployments.

Cons:
- Lower performance due to network-based access.
- Not suitable for high-throughput temporary operations.


#### `instance` mount (`local`)

The `instance` mount (also called `local`) provides dedicated local storage per instance. It's backed by a Ceph-mounted volume and is not shared across horizontally scaled instances. This is ideal for logs or intermediate files that are instance-specific.

Pros:
- Lower latency than network storage.
- Persistent across redeployments (per instance).
- Suitable for app logs or instance-specific data.

Cons:
- Not shared across instances.
- Fixed size (8GB).
- Unsuitable for applications that require shared state across scaled instances.

#### `tmp` mount

The `tmp` mount uses the ephemeral disk of an instance and is intended for non-persistent, high-speed temporary storage. Data here may be lost during redeployments or infrastructure updates. Like `instance`, it is limited to 8GB and not configurable.

Pros:
- Fastest available storage—ideal for caches or intermediate data.
- Great for temporary files that can be regenerated.

Cons:
- Non-persistent data can be cleared at any time.
- Not shared across instances or with workers.
- Fixed size (8GB).

#### `service` mount

A `service` mount allows you to explicitly define and use a Network Storage service that can be shared between different apps or workers. Unlike the default `storage` mount, which is automatically provisioned per app, a service-based mount gives you greater flexibility and control over how shared storage is configured and accessed across your project.

This is useful when multiple apps or services need access to the same set of files or data—for example, a frontend app and a background worker both reading from a shared media directory.

Pros:
- Enables cross-app and cross-worker shared storage.
- Centralized configuration via a defined service.
- More control over lifecycle and visibility of the storage.

Cons:
- Requires explicit setup and service configuration.
- Slightly more complex than default `storage` mounts.

For setup instructions and more information, see the [Network Storage service documentation](/add-services/network-storage).

#### Scaling

When horizontally scaling your app (multiple instances of the same app), using the appropriate mount type is critical. For shared data, a `storage` or `service` mount is recommended. For local-only data, use `instance` or `tmp` mounts.

#### Sharing mounts

If you need to share a mount between different apps, consider using a `service` mount. This must be added explicitly and is distinct from the default `storage` mount. Mounts can be shared with workers as well, provided the configuration includes them.

### Define a mount

To define a mount, use the following configuration:
Expand Down
54 changes: 54 additions & 0 deletions sites/upsun/src/create-apps/app-reference/composable-image.md
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,60 @@ much like you would plug a hard drive into your computer to transfer data.

{{% /note %}}

### Mount types

Each mount type has a specific use case and understanding how to use each type effectively will help optimize your application.

#### `storage` mount

The `storage` mount is a shared network storage that is automatically added by the platform. It is required for applications that need to share files across multiple instances—such as user-uploaded media or shared assets. You can configure the size of this mount via the {{% vendor/name %}} UI.

Pros:
- Shared across all app instances.
- Configurable size via the UI.
- Persistent across restarts and redeployments.

Cons:
- Not suitable for high-throughput temporary operations.

#### `tmp` mount

The `tmp` mount uses the ephemeral disk of an instance and is intended for non-persistent, high-speed temporary storage. Data here may be lost during redeployments or infrastructure updates. Like `instance`, it is limited to 8GB and not configurable.

Pros:
- Fastest available storage—ideal for caches or intermediate data.
- Great for temporary files that can be regenerated.

Cons:
- Non-persistent data can be cleared at any time.
- Not shared across instances or with workers.
- Fixed size (8GB).

#### `service` mount

A `service` mount allows you to explicitly define and use a Network Storage service that can be shared between different apps or workers. Unlike the default `storage` mount, which is automatically provisioned per app, a service-based mount gives you greater flexibility and control over how shared storage is configured and accessed across your project.

This is useful when multiple apps or services need access to the same set of files or data—for example, a frontend app and a background worker both reading from a shared media directory.

Pros:
- Enables cross-app and cross-worker shared storage.
- Centralized configuration via a defined service.
- More control over lifecycle and visibility of the storage.

Cons:
- Requires explicit setup and service configuration.
- Slightly more complex than default `storage` mounts.

For setup instructions and more information, see the [Network Storage service documentation](/add-services/network-storage).

#### Scaling

When horizontally scaling your app (multiple instances of the same app), using the appropriate mount type is critical. For shared data, a `storage` or `service` mount is recommended. For local-only data, use`tmp` mounts.

#### Sharing mounts

If you need to share a mount between different apps, consider using a `service` mount. This must be added explicitly and is distinct from the default `storage` mount. Mounts can be shared with workers as well, provided the configuration includes them.

### Define a mount

To define a mount, use the following configuration:
Expand Down
83 changes: 77 additions & 6 deletions sites/upsun/src/create-apps/app-reference/single-runtime-image.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ Console or the `{{% vendor/cli %}} resources:set` command.

For more information, see how to [manage resources](/manage-resources.md).


## Relationships

To allow containers in your project to communicate with one another,
Expand Down Expand Up @@ -359,15 +360,13 @@ You can decrease the size of an existing disk for an app. If you do so, be aware

## Mounts

After your app is built, its file system is read-only.
To make changes to your app's code, you need to use Git.
After your app is built, its file system is read-only. To make changes to your app's code, you need to use Git.

For enhanced flexibility, {{% vendor/name %}} allows you to define and use writable directories called "mounts".
Mounts give you write access to files generated by your app (such as cache and log files)
and uploaded files without going through Git.

When you define a mount, you are mounting an external directory to your app container,
much like you would plug a hard drive into your computer to transfer data.
When you define a mount, you are mounting an external directory to your app container, much like you would plug a hard drive into your computer to transfer data.

{{% note %}}

Expand All @@ -376,6 +375,76 @@ much like you would plug a hard drive into your computer to transfer data.

{{% /note %}}

### Mount types

Each mount type has a specific use case and understanding how to use each type effectively will help optimize your application.

#### `storage` mount

The `storage` mount is a shared network storage that is automatically added by the platform. It is required for applications that need to share files across multiple instances—such as user-uploaded media or shared assets. You can configure the size of this mount via the {{% vendor/name %}} UI.

Pros:
- Shared across all app and worker instances.
- Configurable size via the UI.
- Persistent across restarts and redeployments.

Cons:
- Lower performance due to network-based access.
- Not suitable for high-throughput temporary operations.


#### `instance` mount (`local`)

The `instance` mount (also called `local`) provides dedicated local storage per instance. It's backed by a Ceph-mounted volume and is not shared across horizontally scaled instances. This is ideal for logs or intermediate files that are instance-specific.

Pros:
- Lower latency than network storage.
- Persistent across redeployments (per instance).
- Suitable for app logs or instance-specific data.

Cons:
- Not shared across instances.
- Fixed size (8GB).
- Unsuitable for applications that require shared state across scaled instances.

#### `tmp` mount

The `tmp` mount uses the ephemeral disk of an instance and is intended for non-persistent, high-speed temporary storage. Data here may be lost during redeployments or infrastructure updates. Like `instance`, it is limited to 8GB and not configurable.

Pros:
- Fastest available storage—ideal for caches or intermediate data.
- Great for temporary files that can be regenerated.

Cons:
- Non-persistent data can be cleared at any time.
- Not shared across instances or with workers.
- Fixed size (8GB).

#### `service` mount

A `service` mount allows you to explicitly define and use a Network Storage service that can be shared between different apps or workers. Unlike the default `storage` mount, which is automatically provisioned per app, a service-based mount gives you greater flexibility and control over how shared storage is configured and accessed across your project.

This is useful when multiple apps or services need access to the same set of files or data—for example, a frontend app and a background worker both reading from a shared media directory.

Pros:
- Enables cross-app and cross-worker shared storage.
- Centralized configuration via a defined service.
- More control over lifecycle and visibility of the storage.

Cons:
- Requires explicit setup and service configuration.
- Slightly more complex than default `storage` mounts.

For setup instructions and more information, see the [Network Storage service documentation](/add-services/network-storage).

#### Scaling

When horizontally scaling your app (multiple instances of the same app), using the appropriate mount type is critical. For shared data, a `storage` or `service` mount is recommended. For local-only data, use `instance` or `tmp` mounts.

#### Sharing mounts

If you need to share a mount between different apps, consider using a `service` mount. This must be added explicitly and is distinct from the default `storage` mount. Mounts can be shared with workers as well, provided the configuration includes them.

### Define a mount

To define a mount, use the following configuration:
Expand All @@ -398,7 +467,7 @@ See how to [troubleshoot the warning](../troubleshoot-mounts.md#overlapping-fold

| Name | Type | Required | Description |
| ------------- | -------------------- | -------- | ----------- |
| `source` | `storage`, `instance`, `tmp` (also called `temporary`), or `service` | Yes | Specifies the type of the mount:<br/><br/>- By design, `storage` mounts can be shared between instances of the same app. You can also configure them so they are [shared between different apps](#share-a-mount-between-several-apps).<br/><br/>-`instance` mounts are local mounts. Unique to your app, they are useful to store files that remain local to the app instance, such as application logs.<br/><br/>- `tmp` (or `temporary`) mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.<br/>The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.<br/>Note that the `/tmp` directory has **a maximum allocation of 8 GB**.<br/><br/>- `service` mounts can be useful if you want to explicitly define and use a [Network Storage](/add-services/network-storage.md) service to share data between different apps (instead of using a `storage` mount).|
| `source` | `storage`, `instance`, `tmp`, or `service` | Yes | Specifies the type of the mount:<br/><br/>- `storage` mounts can be shared between instances of the same app. You can also configure them so they are [shared between different apps](#share-a-mount-between-several-apps).<br/><br/>-`instance` mounts are local mounts. **They are only available for [Single-runtime image](/create-apps/app-reference/single-runtime-image).** Unique to your app, they are useful to store files that remain local to the app instance, such as application logs.<br/><br/>- `tmp` mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.<br/>The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.<br/>Note that the `/tmp` directory has **a maximum allocation of 8 GB**.<br/><br/>- `service` mounts can be useful if you want to explicitly define and use a [Network Storage](/add-services/network-storage.md) service to share data between different apps (instead of using a `storage` mount).|
| `source_path` | `string` | No | Specifies where the mount points **inside the [external directory](#mounts)**.<br/><br/> - If you explicitly set a `source_path`, your mount points to a specific subdirectory in the external directory. <br/><br/> - If the `source_path` is an empty string (`""`), your mount points to the entire external directory.<br/><br/> - If you don't define a `source_path`, {{% vendor/name %}} uses the {{< variable "MOUNT_PATH" >}} as default value, without leading or trailing slashes.</br>For example, if your mount lives in the `/web/uploads/` directory in your app container, it will point to a directory named `web/uploads` in the external directory. </br></br> **WARNING:** Changing the name of your mount affects the `source_path` when it's undefined. See [how to ensure continuity](#ensure-continuity-when-changing-the-name-of-your-mount) and maintain access to your files. |
| `service` | `string` | | The purpose of the `service` key depends on your use case.</br></br> In a multi-app context where a `storage` mount is shared between apps, `service` is required. Its value is the name of the app whose mount you want to share. See how to [share a mount between several apps](#share-a-mount-between-several-apps).</br></br> In a multi-app context where a [Network Storage service](/add-services/network-storage.md) (`service` mount) is shared between apps, `service` is required and specifies the name of that Network Storage. |

Expand Down Expand Up @@ -1336,6 +1405,7 @@ Run the following command:

{{< /codetabs >}}


## Runtime

The following table presents the various possible modifications to your PHP or Lisp runtime:
Expand Down Expand Up @@ -1403,6 +1473,7 @@ The following table shows the properties that can be set in `sizing_hints`:

See more about [PHP-FPM workers and sizing](/languages/php/fpm.md).


## Source

The following table shows the properties that can be set in `source`:
Expand Down Expand Up @@ -1445,4 +1516,4 @@ applications:
web.example.com: "203.0.113.42"
```

This is equivalent to adding the mapping to the `/etc/hosts` file for the container.
This is equivalent to adding the mapping to the `/etc/hosts` file for the container.
Loading