generated from shuding/nextra-docs-template
-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
165 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
import { Callout } from "nextra-theme-docs"; | ||
|
||
# Volumes | ||
|
||
Volumes provide persistent disk storage for applications. | ||
|
||
They also support remote access with any S3 compatible client. | ||
|
||
|
||
<Callout type="warning"> | ||
In the current initial implementation, volumes are restricted to a single | ||
[Edge region](/edge/learn/regions). | ||
|
||
Volumes also at the moment only provide *read-write-many* semantics. | ||
Due the automatic auto-scaling for apps, this means that volumes are not currently | ||
well-suited for databases or other more complex use cases that require a single writer. | ||
|
||
Keep in mind that volumes can be accessed concurrently, and even from different | ||
nodes. | ||
|
||
These restrictions (including the single-region restriction) will be lifted | ||
in the future. | ||
</Callout> | ||
|
||
## Using Volumes With rclone | ||
|
||
* Every app may have multiple volumes. | ||
* Each volume has a name, which must be unique for the application. | ||
* Volumes can be mounted at a chosen path. | ||
* Each volume can be mounted multiple times. | ||
|
||
Simply extend your [app configuration](/edge/configuration) with a `volumes` | ||
section: | ||
|
||
```yaml filename="app.yaml" copy | ||
# ... | ||
|
||
volumes: | ||
# A name for your volume. | ||
# Must be unique for the given app. | ||
- name: data | ||
# Where to mount the volume into the filesystem. | ||
# You can specify multiple mounts with optional subpaths. | ||
mounts: | ||
# Mount the volume to `/data`. | ||
- mount_path: /data | ||
# Optional: the subdirectory of the volume to mount. | ||
# subpath: /subpath | ||
``` | ||
|
||
This will create a new "data" volume, which will be mounted at `/data`. | ||
|
||
Now just re-deploy your app with `wasmer deploy`. | ||
The volume will be automatically created. | ||
|
||
Your application can now use the mount path and treat it as persistent storage. | ||
|
||
<Callout type="warning"> | ||
The name of a volume acts as a unique identifier. | ||
If you change the name the old volume - including it's data - will be deleted! | ||
</Callout> | ||
|
||
### Deleting Volumes | ||
|
||
To delete a volume, simply remove it from your app configuration and re-deploy. | ||
The data will be purged, and your app will not have access to the volume anymore. | ||
|
||
<Callout type="warning"> | ||
If you rename or remove a volume from the `app.yaml` configuration, | ||
all data will be deleted when you deploy, and can not be recovered. | ||
|
||
Make sure this is what you want before deploying! | ||
</Callout> | ||
|
||
## Inspecting Volumes | ||
|
||
You can inspect volumes in two ways: | ||
|
||
* in the web frontend on your app dashboard: | ||
Go to the "Storage" tab - you will see a list of volumes with their size. | ||
* using the CLI: | ||
Run `wasmer app volumes list [app]` to list all volumes and their sizes. | ||
|
||
## Remotely Accessing Volumes | ||
|
||
Volumes are not only available to your apps, but can also be remotely accessed | ||
through the standard S3 API, or through a builtin web UI. | ||
|
||
You can use the CLI to retrieve S3 credentials: | ||
|
||
```bash | ||
wasmer app volumes s3-credentials | ||
``` | ||
|
||
This will print the S3 API URL, access key and secret key. | ||
|
||
|
||
<Callout type="info"> | ||
You can visit the above URL in your browser to access a builtin web UI! | ||
</Callout> | ||
|
||
### Configuring rclone | ||
|
||
[rclone](https://rclone.org/) is a popular CLI client that allows full access | ||
to your volumes. It even allows mounting a volume to your local machine! | ||
|
||
You can get an rclone configuration snippet through the CLI: | ||
|
||
```bash | ||
wasmer app volumes s3-credentials --rclone-print | ||
``` | ||
|
||
This will print out a configuration snippet that can be added to the rclone | ||
configuration file. | ||
|
||
<Callout type="info"> | ||
The config file is usually located at `~/.config/rclone/rclone.conf`, but you | ||
can retrieve the active path with `rclone config file`. | ||
</Callout> | ||
|
||
|
||
Some examples of using rclone: | ||
|
||
(Note: replace `<target>` with the name of the rclone target) | ||
|
||
```bash | ||
# List all volumes in this app: | ||
rclone lsd <target>: | ||
|
||
# List files in a given volume: | ||
rclone lsd <target>:<volume-name> | ||
|
||
# Copy a file to a volume: | ||
rclone copy ./local-filename <target>:<volume-name>/remote-filename | ||
|
||
# Mount a volume to a local directory | ||
mkdir my-volume | ||
rclone mount <target>:<volume-name> ./my-volume | ||
``` |