# Αποθήκευση Cloud

Το Chamilo 2.0 υποστηρίζει backends αποθήκευσης σύννεφου για αρχεία που ανεβάζουν οι χρήστες μέσω του **Flysystem**, μιας βιβλιοθήκης αφαίρεσης συστήματος αρχείων PHP ενσωματωμένης στο Symfony. Αυτό σας επιτρέπει να αποθηκεύετε αρχεία σε υπηρεσίες σύννεφου αντί για (ή σε προσθήκη με) το τοπικό σύστημα αρχείων.

## Γιατί να Χρησιμοποιήσετε την Αποθήκευση Σύννεφου;

* **Κλιμάκωση** -- Η αποθήκευση σύννεφου αναπτύσσεται μαζί με την πλατφόρμα σας χωρίς διαχείριση χώρου δίσκου.
* **Αναπτύξεις πολλαπλών εξυπηρετητών** -- Όταν εκτελείτε πολλούς web servers πίσω από έναν load balancer, η αποθήκευση σύννεφου εξασφαλίζει ότι όλοι οι servers έχουν πρόσβαση στα ίδια αρχεία.
* **Ανθεκτικότητα** -- Οι πάροχοι σύννεφου προσφέρουν ενσωματωμένη επανεξασφάλιση και αντιγράφων ασφαλείας.
* **Κόστος** -- Η αποθήκευση αντικειμένων είναι συχνά φθηνότερη ανά gigabyte από την αποθήκευση μπλοκ συνδεδεμένη με servers.

## Υποστηριζόμενοι Πάροχοι

| Πάροχος                   | Flysystem Adapter                          |
| ------------------------- | ------------------------------------------ |
| **Amazon S3**             | `league/flysystem-aws-s3-v3`               |
| **Google Cloud Storage**  | `league/flysystem-google-cloud-storage`    |
| **Azure Blob Storage**    | `league/flysystem-azure-blob-storage`      |
| **MinIO** (S3-compatible) | Uses the S3 adapter with a custom endpoint |
| **Local filesystem**      | Default, no additional packages needed     |

## Εγκατάσταση

Το Chamilo περιλαμβάνει ήδη προεγκατεστημένους τους εξής παρόχους:

```bash
# Amazon S3
league/flysystem-aws-s3-v3

# Google Cloud Storage
league/flysystem-google-cloud-storage

# Azure Blob Storage
league/flysystem-azure-blob-storage
```

## Διαμόρφωση

Το Chamilo χωρίζει τα αρχεία του σε αρκετά mounts του Flysystem — **assets**, **assets cache**, **resources**, **resources cache**, **themes**, και **plugins**. Κάθε mount μπορεί να στοχεύει σε διαφορετικό bucket ή container. Η διαμόρφωση σύννεφου στο `config/packages/oneup_flysystem.yaml` επιλέγεται ανά περιβάλλον χρησιμοποιώντας συνθήκες `when@` και διαβάζει τις μεταβλητές που ορίζετε στο `.env`.

### Amazon S3

```bash
# .env — common credentials
AWS_S3_STORAGE_VERSION=latest
AWS_S3_STORAGE_REGION=eu-central-1
AWS_S3_STORAGE_ACCESS_KEY=your-access-key
AWS_S3_STORAGE_ACCESS_SECRET=your-secret-key

# Per-mount buckets (each mount can be a different bucket)
AWS_S3_STORAGE_ASSET_BUCKET=chamilo-assets
AWS_S3_STORAGE_ASSET_CACHE_BUCKET=chamilo-asset-cache
AWS_S3_STORAGE_RESOURCE_BUCKET=chamilo-resources
AWS_S3_STORAGE_RESOURCE_CACHE_BUCKET=chamilo-resource-cache
AWS_S3_STORAGE_THEMES_BUCKET=chamilo-themes
AWS_S3_STORAGE_PLUGINS_BUCKET=chamilo-plugins

# Optional path prefixes inside a bucket — useful to share buckets across portals
AWS_S3_STORAGE_ASSET_PREFIX=portal1/assets
AWS_S3_STORAGE_RESOURCE_PREFIX=portal1/resources
```

### Azure Blob Storage

```bash
# .env
AZURE_STORAGE_CONNECTION_STRING='DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...'
AZURE_STORAGE_ASSET_CONTAINER=asset-container
AZURE_STORAGE_ASSET_CACHE_CONTAINER=asset-cache-container
AZURE_STORAGE_RESOURCE_CONTAINER=resources-container
AZURE_STORAGE_RESOURCE_CACHE_CONTAINER=resources-cache-container
AZURE_STORAGE_THEMES_CONTAINER=themes-container
# Optional prefixes
AZURE_STORAGE_ASSET_PREFIX=optional/prefix
```

### Google Cloud Storage

Διαμορφώστε το GCS με τον ίδιο τρόπο όπως το S3, χρησιμοποιώντας μεταβλητές περιβάλλοντος ειδικές για το GCS και ένα bucket ανά mount. Ανατρέξτε στο `oneup_flysystem.yaml` που συνοδεύει την έκδοσή σας για τα ακριβή ονόματα μεταβλητών — είναι επίσης τεκμηριωμένες στο `.env`.

### MinIO (S3-Compatible)

Το MinIO λειτουργεί μέσω του S3 adapter με προσαρμοσμένο endpoint και path-style addressing — ορίστε `AWS_S3_STORAGE_*` όπως για το S3 και προσθέστε το endpoint του MinIO και τις σημαίες path-style που υποστηρίζονται από το bundle.

> Το πλήρες σύνολο ονομάτων μεταβλητών παρατίθεται στο αρχείο `.env.dist` που συνοδεύει το Chamilo. Αντιγράψτε μόνο τις γραμμές για τον πάροχο που χρησιμοποιείτε πραγματικά στο `.env` σας και καταργήστε τα σχόλιά τους.

## Μεταφορά Υπάρχοντων Αρχείων

Αν μεταβαίνετε από τοπική αποθήκευση σε αποθήκευση σύννεφου σε μια υπάρχουσα πλατφόρμα, πρέπει να μεταφέρετε τα υπάρχοντα αρχεία:

1. Διαμορφώστε τον νέο storage adapter όπως περιγράφεται παραπάνω.
2. Αντιγράψτε τα υπάρχοντα αρχεία από τον τοπικό κατάλογο `var/upload/` στο bucket αποθήκευσης σύννεφου, διατηρώντας τη δομή καταλόγου.
3. Επαληθεύστε ότι τα αρχεία είναι προσβάσιμα μέσω της πλατφόρμας μετά τη μεταφορά.

## Δικαιώματα και Πρόσβαση

Βεβαιωθείτε ότι το bucket αποθήκευσης σύννεφου σας **δεν είναι δημόσια προσβάσιμο** εκτός αν χρειάζεστε ρητά δημόσιες URLs αρχείων. Το Chamilo παρέχει αρχεία μέσω του δικού του στρώματος ελέγχου πρόσβασης, οπότε η άμεση δημόσια πρόσβαση στο bucket είναι περιττή και κίνδυνος ασφαλείας.

Για το S3, χρησιμοποιήστε μια bucket policy που περιορίζει την πρόσβαση στα IAM credentials που διαμορφώσατε παραπάνω.

## Συμβουλές

* **Δοκιμάστε με MinIO τοπικά** πριν την ανάπτυξη σε πάροχο σύννεφου -- Το MinIO είναι ένας δωρεάν, S3-compatible server που μπορείτε να εκτελέσετε στο δικό σας μηχάνημα.
* **Χρησιμοποιήστε ένα αποκλειστικό bucket** για το Chamilo αντί να μοιραστείτε bucket με άλλες εφαρμογές.
* **Ρυθμίστε lifecycle policies** στο cloud bucket σας για τη διαχείριση κόστους αποθήκευσης (π.χ., μετακίνηση παλιών αρχείων σε φθηνότερα tiers αποθήκευσης).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chamilo.org/2.x-el/odigos-diaxeirisis/admin-guide/installation/cloud-storage.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
