Skip to content
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

Include steps to include multiple volume instances to Laravel Storage… #1081

Merged
Merged
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
48 changes: 36 additions & 12 deletions laravel/the-basics/laravel-volume-storage.html.markerb
Original file line number Diff line number Diff line change
Expand Up @@ -17,36 +17,56 @@
```cmd
cd <laravel-fly-configured-app>
```
2. [Create a volume](/docs/flyctl/volumes-create/), you'll be attaching this later to your Laravel Fly App's storage directory

2. Then, check the number of machines currently available for your Fly App:

```cmd
fly status
```

In this example today, the app is deployed in the AMS region, and has the [default number of two machines](https://fly.io/docs/reference/app-availability/#two-machines-for-process-groups-with-services) created for it:
```cmd
fly volumes create storage_vol --region ams --size 20

Machines
PROCESS ID VERSION REGION STATE ROLE CHECKS LAST UPDATED
app 5683945bd46448 1 ams started 2023-10-03T09:54:04Z
app e82d922f010908 1 ams started 2023-10-03T09:54:25Z
```

3. Revise your Laravel Fly App's `fly.toml` file to mount the volume created for your storage directory:

3. To mount a volume named `"storage_vol"` to this Fly App, you'll have to create two `"storage_vol"` volumes in the AMS region, [one for each machine](https://fly.io/docs/reference/volumes/#volume-considerations):
```cmd
fly volumes create storage_vol --region ams --count 2
```
Running the command above should create two separate volumes with the name "storage_vol", in the AMS region for your Laravel Fly App.

4. Next, revise your Laravel Fly App's `fly.toml` file to mount the Volumes above to each machine's storage folder:

```
[mounts]
source="storage_vol"
destination="/var/www/html/storage"
```

Mounting a Volume to a folder will initially erase any item it contains during the first time the Volume is mounted for the folder.

For example, Laravel's storage folder contains subfolders: app, framework, and logs.
Mounting the volume to the storage folder erases these directories, and leaves behind a sole item paradoxically named as "lost+found".

But, you wouldn't want to only be left with "lost+found" in your storage folder. You'd want to still have the necessary files and directories in there for successful session, views, caching, and file storage compliance with Laravel's default configuration.
<div class="callout">
Mounting a Volume to a folder will initially erase any item the folder contains during the first time the Volume is mounted for the folder.
<br><br>
For example, Laravel's storage folder contains subfolders: app, framework, and logs.
Mounting a volume to the storage folder erases these directories, and leaves behind a sole item paradoxically named as "lost+found".
<br><br>
But, you wouldn't want to only be left with "lost+found" in your storage folder. You'd want to still have the necessary files and directories in there for successful session, views, caching, and file storage compliance with Laravel's default configuration.
</div>


4. To fix the little storage-content-erasure issue as stated in the callout above, please go ahead and make a copy of your storage folder in a "backup" folder. You can name this directory "storage_".
5. To fix the little storage-content-erasure issue as stated in the callout above, please go ahead and make a copy of your storage folder in a "backup" folder. You can name this directory "storage_".

Check notice on line 61 in laravel/the-basics/laravel-volume-storage.html.markerb

View workflow job for this annotation

GitHub Actions / vale

[vale] laravel/the-basics/laravel-volume-storage.html.markerb#L61

[Fly.Spelling] Is 'storage_' a typo?
Raw output
{"message": "[Fly.Spelling] Is 'storage_' a typo?", "location": {"path": "laravel/the-basics/laravel-volume-storage.html.markerb", "range": {"start": {"line": 61, "column": 191}}}, "severity": "INFO"}

```cmd
cp -r storage storage_
```

You'll later use this folder to copy over its contents to the volumized storage folder.

Check notice on line 67 in laravel/the-basics/laravel-volume-storage.html.markerb

View workflow job for this annotation

GitHub Actions / vale

[vale] laravel/the-basics/laravel-volume-storage.html.markerb#L67

[Fly.Spelling] Is 'volumized' a typo?
Raw output
{"message": "[Fly.Spelling] Is 'volumized' a typo?", "location": {"path": "laravel/the-basics/laravel-volume-storage.html.markerb", "range": {"start": {"line": 67, "column": 67}}}, "severity": "INFO"}

5. Next create a [Startup Script](/docs/laravel/the-basics/customizing-deployments/) that will initialize the volumized storage folder's contents.
6. Next create a [Startup Script](/docs/laravel/the-basics/customizing-deployments/) that will initialize the volumized storage folder's contents.

Check notice on line 69 in laravel/the-basics/laravel-volume-storage.html.markerb

View workflow job for this annotation

GitHub Actions / vale

[vale] laravel/the-basics/laravel-volume-storage.html.markerb#L69

[Fly.Spelling] Is 'volumized' a typo?
Raw output
{"message": "[Fly.Spelling] Is 'volumized' a typo?", "location": {"path": "laravel/the-basics/laravel-volume-storage.html.markerb", "range": {"start": {"line": 69, "column": 112}}}, "severity": "INFO"}
```cmd
touch .fly/scripts/1_storage_init.sh
```
Expand All @@ -66,14 +86,18 @@
```

So what happened above?
- The condition statement checks if the app folder does not exist in the volumized storage folder. If it does not exist, it copies over the contents of the storage_ folder to the volumized storage folder.

Check notice on line 89 in laravel/the-basics/laravel-volume-storage.html.markerb

View workflow job for this annotation

GitHub Actions / vale

[vale] laravel/the-basics/laravel-volume-storage.html.markerb#L89

[Fly.Spelling] Is 'volumized' a typo?
Raw output
{"message": "[Fly.Spelling] Is 'volumized' a typo?", "location": {"path": "laravel/the-basics/laravel-volume-storage.html.markerb", "range": {"start": {"line": 89, "column": 78}}}, "severity": "INFO"}

Check notice on line 89 in laravel/the-basics/laravel-volume-storage.html.markerb

View workflow job for this annotation

GitHub Actions / vale

[vale] laravel/the-basics/laravel-volume-storage.html.markerb#L89

[Fly.Spelling] Is 'storage_' a typo?
Raw output
{"message": "[Fly.Spelling] Is 'storage_' a typo?", "location": {"path": "laravel/the-basics/laravel-volume-storage.html.markerb", "range": {"start": {"line": 89, "column": 161}}}, "severity": "INFO"}

Check notice on line 89 in laravel/the-basics/laravel-volume-storage.html.markerb

View workflow job for this annotation

GitHub Actions / vale

[vale] laravel/the-basics/laravel-volume-storage.html.markerb#L89

[Fly.Spelling] Is 'volumized' a typo?
Raw output
{"message": "[Fly.Spelling] Is 'volumized' a typo?", "location": {"path": "laravel/the-basics/laravel-volume-storage.html.markerb", "range": {"start": {"line": 89, "column": 184}}}, "severity": "INFO"}

6. <b>Finally, deploy your Laravel Fly App!</b>
7. <b>Finally, deploy your Laravel Fly App!</b>

```cmd
fly deploy
```

<div class="callout">
Fly Volume instances do not automatically sync their data with each other. Please remember to create the appropriate data-replication logic if your Fly App will be using more than one volume instance, and if your app requires data available across the volume instances.
</div>

#### **_Possible Errors_**

```output
Expand Down