> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/on-premises/id/pemeliharaan/s3-migration.md).

# Migrasi S3

## Migrasi S3

{% hint style="info" %}
Instruksi ini untuk v5.x dan yang lebih baru. Jika Anda mengikuti panduan ini untuk versi sebelumnya, silakan gunakan `sharelatex` alih-alih `overleaf` dalam nama path dan `SHARELATEX_` awalan sebagai pengganti `OVERLEAF_` untuk variabel lingkungan.
{% endhint %}

{% hint style="warning" %}
Pelanggan Server Pro: Silakan hubungi dukungan sebelum Anda memigrasikan data Anda ke S3.
{% endhint %}

{% hint style="success" %}
**Kami ingin mendengar dari Anda!** Jika Anda ingin berbagi dengan kami berapa banyak file yang Anda migrasikan, total volumenya, dan berapa lama waktu migrasinya, kirim email ke [`support@overleaf.com`](mailto:support@overleaf.com) .
{% endhint %}

Panduan ini akan memandu Anda melalui migrasi dari penyimpanan di disk ke penyimpanan objek yang kompatibel dengan S3. Panduan ini merujuk ke bagian-bagian dari dokumen pengantar pada [Penyiapan S3](/on-premises/id/konfigurasi/overleaf-toolkit/s3.md).

### Persyaratan

* Penyimpanan objek yang kompatibel dengan S3 untuk digunakan, lihat [S3](/on-premises/id/konfigurasi/overleaf-toolkit/s3.md#s3-setup) untuk opsi
* Ruang disk kosong untuk memigrasikan data yang ada, sekitar ukuran disk saat ini
* Jendela pemeliharaan untuk melakukan migrasi sebenarnya
* Cadangan penuh, termasuk konfigurasi, untuk memungkinkan pemulihan darinya

### Perkirakan ukuran disk yang dibutuhkan untuk migrasi

Kita dapat menggunakan `du` untuk menghitung penggunaan disk saat ini:

```shell
docker exec sharelatex \
  du --human-readable --max-depth=0 /var/lib/overleaf/data/user_files

docker exec sharelatex \
  du --human-readable --max-depth=0 /var/lib/overleaf/data/template_files
```

Jika Anda tidak memiliki ruang disk yang cukup di server saat ini, coba sambungkan disk lain ke server.

{% hint style="info" %}
Direktori histori sudah memiliki tata letak yang benar. Anda dapat mengunggah langsung dari folder sumber yang di-bind-mount, yang tidak memerlukan ruang disk tambahan.
{% endhint %}

### Langkah-langkah migrasi

#### Langkah 0 matikan instans

Kami perlu memastikan bahwa semua file pengguna/template akan dimigrasikan. Sebaiknya matikan instans untuk menghindari file yang baru diunggah terlewat.

Silakan lihat panduan kami tentang melakukan cadangan yang konsisten untuk prosedur penonaktifan.

#### Langkah 1 tulis ulang tata letak direktori

Kami perlu menulis ulang tata letak direktori file proyek untuk mengunggahnya ke S3. Tata letak direktori untuk penyimpanan lokal di filestore adalah `<project-id>_<file-id>` dan tata letak direktori di S3 adalah `<project-id>/<file-id>`.

Pada langkah berikut, `/srv/overleaf-s3-migration` digunakan untuk menyimpan file dalam tata letak direktori baru.

Kita dapat memanfaatkan `tar` untuk menulis ulang tata letak:

```shell
mkdir -p /srv/overleaf-s3-migration/user_files \
         /srv/overleaf-s3-migration/template_files
docker exec sharelatex \
  tar --create --directory /var/lib/overleaf/data/user_files . \
| tar --extract --directory /srv/overleaf-s3-migration/user_files \
  --transform=sx_x/x
docker exec sharelatex \
  tar --create --directory /var/lib/overleaf/data/template_files . \
| tar --extract --directory /srv/overleaf-s3-migration/template_files \
  --transform=sx_x/xg
```

#### Langkah 2 unggah file

Tergantung pada preferensi Anda, Anda dapat menggunakan klien S3 minio mc atau aws cli untuk mengunggah file ke penyimpanan objek yang kompatibel dengan S3 Anda.

**aws cli**

{% hint style="info" %}

* Di sini Anda harus mengganti `overleaf-user-files`, `overleaf-template-files`, `overleaf-project-blobs` dan `overleaf-chunks` dengan nama bucket S3 Anda.
* Juga ganti `/srv/overleaf-bind-mount` dengan path lokal dari `/var/lib/overleaf` bind-mount. Secara bawaan, ini adalah `~/overleaf_data` dalam deployment docker-compose.yml dan `<toolkit-checkout>/data/overleaf` saat menggunakan Toolkit.
  {% endhint %}

{% code overflow="wrap" %}

```shell
aws s3 sync /srv/overleaf-s3-migration/user_files s3://overleaf-user-files
aws s3 sync /srv/overleaf-s3-migration/template_files s3://overleaf-template-files

aws s3 sync /srv/overleaf-bind-mount/data/history/overleaf-project-blobs s3://overleaf-project-blobs
aws s3 sync /srv/overleaf-bind-mount/data/history/overleaf-chunks s3://overleaf-chunks
```

{% endcode %}

**minio mc**

Kami menggunakan alias server "s3" di sini, Anda mungkin memilih nama lain.

{% code overflow="wrap" %}

```shell
mc mirror /srv/overleaf-s3-migration/user_files s3/overleaf-user-files
mc mirror /srv/overleaf-s3-migration/template_files s3/overleaf-template-files

mc mirror /srv/overleaf-bind-mount/data/history/overleaf-project-blobs s3/overleaf-project-blobs
mc mirror /srv/overleaf-bind-mount/data/history/overleaf-chunks s3/overleaf-chunks
```

{% endcode %}

#### Langkah 3 mulai instans yang mengarah ke S3

Tambahkan semua variabel terkait S3 ke konfigurasi Anda, seperti dijelaskan secara rinci di [Ikhtisar variabel](/on-premises/id/konfigurasi/overleaf-toolkit/s3.md#overview-of-variables) bagian di [S3](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/s3) panduan penyiapan.

Untuk deployment Docker Compose, Anda juga dapat menghapus bind-mount untuk direktori data dari bagian volumes.

{% hint style="success" %}
Tetap pertahankan [bind-mount disk scratch untuk file sementara](/on-premises/id/dukungan/troubleshooting.md#running-overleaf-with-an-nfs-filesystem) tetap ada.
{% endhint %}

Sekarang Anda dapat memulai instans dan memvalidasi migrasi:

* dapat melihat pratinjau file biner di editor
* dapat mengompilasi PDF dengan gambar
* dapat mengunggah file baru

### Rollback

Anda dapat melakukan rollback migrasi dengan mulus dengan membalik urutan langkah-langkah:

1. Matikan instans
2. Cerminkan kembali file dengan membalik urutan sumber/tujuan
3. Tulis kembali file baru ke direktori lokal menggunakan transformasi invers `transformasi`
4. Mulai ulang instans dengan konfigurasi lama

{% code overflow="wrap" %}

```shell
# Saat menggunakan aws cli
aws s3 sync s3://overleaf-user-files /srv/overleaf-s3-migration/user_files
aws s3 sync s3://overleaf-template-files /srv/overleaf-s3-migration/template_files
aws s3 sync s3://overleaf-project-blobs /srv/overleaf-bind-mount/data/history/overleaf-project-blobs
aws s3 sync s3://overleaf-chunks /srv/overleaf-bind-mount/data/history/overleaf-chunks

# Saat menggunakan minio mc
mc mirror s3/overleaf-user-files /srv/overleaf-s3-migration/user_files
mc mirror s3/overleaf-template-files /srv/overleaf-s3-migration/template_files
mc mirror s3/overleaf-project-blobs /srv/overleaf-bind-mount/data/history/overleaf-project-blobs
mc mirror s3/overleaf-chunks /srv/overleaf-bind-mount/data/history/overleaf-chunks
```

{% endcode %}

```shell
# Tulis file ke Server CE/Server Pro lokal
tar --create --directory /srv/overleaf-s3-migration/user_files . \
| docker exec --interactive sharelatex \
    tar \
      --extract \
      --keep-old-files \
      --directory /var/lib/overleaf/data/user_files \
      --transform=sx./xx --transform=sx/x_x \
      --wildcards '*/*/*'

tar --create --directory /srv/overleaf-s3-migration/template_files . \
| docker exec --interactive sharelatex \
    tar \
      --extract \
      --keep-old-files \
      --directory /var/lib/overleaf/data/template_files \
      --transform=sx./xx --transform=sx/x_xg \
      --wildcards '*/*/*/*/pdf-converted-cache/*' \
      --wildcards '*/*/*/*/pdf' \
      --wildcards '*/*/*/*/zip'
```

{% hint style="info" %}
Transform pertama menghapus folder tingkat teratas. Transform kedua mengubah tata letak direktori menjadi datar. Wildcard memastikan bahwa hanya file yang diekstrak, bukan folder induknya (proyek).
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/on-premises/id/pemeliharaan/s3-migration.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
