Files
filegator/docs/configuration/storage.md
Andrei Telteu 27310f9d48 Added chmod perm, modal to change, api with local/ftp/sftp (#399)
Read a fill current permissions for local driver

Finished permissions for ftp driver, read and change

Read permissions for sftp adapter

Created FilegatorFtp for a cleaner permissions integration

Implemented recursive chmod options for files/folders

Modified tests to cover permissions

Lint frontend permissions component
2024-04-17 17:23:21 +02:00

231 lines
8.0 KiB
Markdown

---
currentMenu: storage
---
## Adapters
Different storage adapters are provided through the awesome [Flysystem](https://github.com/thephpleague/flysystem) library.
You can use local filesystem (default), FTP, SFTP, Amazon S3, DigitalOcean Spaces, Microsoft Azure Blob, Dropbox and many others.
Please check the Flysystem [docs](https://flysystem.thephpleague.com/v1/docs/) for the exact setup required for each adapter.
Notes: Some adapters do not support folder operations or their support is limited.
Requiring additional libraries with [composer](https://getcomposer.org/download/) requires root access.
## Default Local Disk Adapter
With default adapter you just need to configure where your `repository` folder is. This folder will serve as a root for everything else.
```
'Filegator\Services\Storage\Filesystem' => [
'handler' => '\Filegator\Services\Storage\Filesystem',
'config' => [
'separator' => '/',
'config' => [],
'adapter' => function () {
return new \League\Flysystem\Adapter\Local(
__DIR__.'/repository'
);
},
],
],
```
## FTP Adapter
See official [documentation](https://flysystem.thephpleague.com/v1/docs/adapter/ftp/).
Sample configuration:
```
'Filegator\Services\Storage\Filesystem' => [
'handler' => '\Filegator\Services\Storage\Filesystem',
'config' => [
'separator' => '/',
'config' => [],
'adapter' => function () {
return new \Filegator\Services\Storage\Adapters\FilegatorFtp([
'host' => 'example.com',
'username' => 'demo',
'password' => 'password',
'port' => 21,
'timeout' => 10,
]);
},
],
],
```
## SFTP Adapter
You must require additional library `composer require league/flysystem-sftp:^1.0 -W`
For more advanced options like using your private key or changing the document root see official [documentation](https://flysystem.thephpleague.com/v1/docs/adapter/sftp/).
Sample configuration:
```
'Filegator\Services\Storage\Filesystem' => [
'handler' => '\Filegator\Services\Storage\Filesystem',
'config' => [
'separator' => '/',
'config' => [],
'adapter' => function () {
return new \League\Flysystem\Sftp\SftpAdapter([
'host' => 'example.com',
'port' => 22,
'username' => 'demo',
'password' => 'password',
'timeout' => 10,
]);
},
],
],
```
## Dropbox Adapter
You must require additional library `composer require spatie/flysystem-dropbox`
See official [documentation](https://flysystem.thephpleague.com/v1/docs/adapter/dropbox/).
Sample configuration:
```
'Filegator\Services\Storage\Filesystem' => [
'handler' => '\Filegator\Services\Storage\Filesystem',
'config' => [
'separator' => '/',
'config' => [
'case_sensitive' => false,
],
'adapter' => function () {
$authorizationToken = '1234';
$client = new \Spatie\Dropbox\Client($authorizationToken);
return new \Spatie\FlysystemDropbox\DropboxAdapter($client);
},
],
],
```
## Amazon S3 Adapter (v3)
You must require additional library `composer require league/flysystem-aws-s3-v3:^1.0 -W`
See official [documentation](https://flysystem.thephpleague.com/v1/docs/adapter/aws-s3-v3/).
Sample configuration:
```
'Filegator\Services\Storage\Filesystem' => [
'handler' => '\Filegator\Services\Storage\Filesystem',
'config' => [
'separator' => '/',
'config' => [],
'adapter' => function () {
$client = new \Aws\S3\S3Client([
'credentials' => [
'key' => '123456',
'secret' => 'secret123456',
],
'region' => 'us-east-1',
'version' => 'latest',
]);
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($client, 'my-bucket-name');
},
],
],
```
## DigitalOcean Spaces
You must require additional library `composer require league/flysystem-aws-s3-v3:^1.0 -W`
The DigitalOcean Spaces API are compatible with those of S3.
See official [documentation](https://flysystem.thephpleague.com/v1/docs/adapter/digitalocean-spaces/).
Sample configuration:
```
'Filegator\Services\Storage\Filesystem' => [
'handler' => '\Filegator\Services\Storage\Filesystem',
'config' => [
'separator' => '/',
'config' => [],
'adapter' => function () {
$client = new \Aws\S3\S3Client([
'credentials' => [
'key' => '123456',
'secret' => 'secret123456',
],
'region' => 'us-east-1',
'version' => 'latest',
'endpoint' => 'https://nyc3.digitaloceanspaces.com',
]);
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($client, 'my-bucket-name');
},
],
],
```
## Microsoft Azure Blob Storage
You must require additional library `composer require league/flysystem-azure-blob-storage:^1.0 -W`
See official [documentation](https://flysystem.thephpleague.com/v1/docs/adapter/azure/).
Sample configuration:
```
'Filegator\Services\Storage\Filesystem' => [
'handler' => '\Filegator\Services\Storage\Filesystem',
'config' => [
'separator' => '/',
'config' => [],
'adapter' => function () {
$accountName = 'your_storage_account_name';
$accountKey = '123456';
$containerName = 'my_container';
$client = \MicrosoftAzure\Storage\Blob\BlobRestProxy::createBlobService(
"DefaultEndpointsProtocol=https;AccountName=${accountName};AccountKey=${accountKey};"
);
return new \League\Flysystem\AzureBlobStorage\AzureBlobStorageAdapter($client, $containerName);
},
],
],
```
## Replicate Adapter
You must require additional library `composer require league/flysystem-replicate-adapter`
The ReplicateAdapter facilitates smooth transitions between adapters, allowing an application to stay functional and migrate its files from one adapter to another. The adapter takes two other adapters, a source and a replica. Every change is delegated to both adapters, while all the read operations are passed onto the source only.
See official [documentation](https://flysystem.thephpleague.com/v1/docs/adapter/replicate/).
Sample configuration:
```
'Filegator\Services\Storage\Filesystem' => [
'handler' => '\Filegator\Services\Storage\Filesystem',
'config' => [
'separator' => '/',
'config' => [
'case_sensitive' => false,
],
'adapter' => function () {
$authorizationToken = '1234';
$client = new \Spatie\Dropbox\Client($authorizationToken);
$source = new \Spatie\FlysystemDropbox\DropboxAdapter($client);
$replica = new \League\Flysystem\Adapter\Local(__DIR__.'/repository');
return new League\Flysystem\Replicate\ReplicateAdapter($source, $replica);
},
],
],
```