Files
drive-migrator/README.md
Othman Hendy Suseno 04f97885e9 initial commit
2025-09-09 23:22:13 +07:00

255 lines
6.9 KiB
Markdown

# drive-migrator
Cloud drive migration tools - Simple, powerful, and automated
## Fitur
- **Single Command Migration**: Migrasi lengkap dalam satu perintah tanpa setup manual
- **Auto Remote Creation**: Otomatis membuat konfigurasi rclone remote jika belum ada
- **Multi-Cloud Support**: Google Drive, OneDrive, NextCloud, WebDAV, dan lainnya
- **Progress Tracking**: Menyimpan status migrasi dalam database lokal (BoltDB)
- **Resume Capability**: Melanjutkan migrasi yang terputus
- **File Filtering**: Filter file/folder dengan pola include/exclude
- **Comprehensive Logging**: Log ke file atau stdout dengan level debug
## Instalasi
### Prasyarat
- [rclone](https://rclone.org/downloads/) harus terinstall dan ada di PATH
- Go 1.20+ (untuk build dari source)
### Build dari Source
```bash
git clone https://github.com/cloudmigration/drive-migrator
cd drive-migrator
go build -buildvcs=false
```
## Penggunaan
### 🚀 Single Command Migration (Recommended)
Migrasi lengkap tanpa perlu setup rclone manual:
#### Nextcloud → Google Drive
```bash
./drive-migrator migrate \
--source-name nextcloud_avt \
--source-type nextcloud \
--source-url "https://files.avt.data-center.id/remote.php/dav/files/username" \
--source-user "your-username" \
--source-pass "your-password" \
--dest-name gdrive_personal \
--dest-type gdrive \
--dest-sa-file "/path/to/service-account.json" \
--log-file migration.log
```
#### Google Drive → OneDrive (contoh)
```bash
./drive-migrator migrate \
--source-name gdrive_source \
--source-type gdrive \
--source-sa-file "/path/to/source-sa.json" \
--dest-name onedrive_dest \
--dest-type onedrive \
--dest-client-id "your-client-id" \
--dest-client-secret "your-client-secret" \
--include "Documents/**"
```
### 📁 Migrasi dengan Filter
#### Hanya file tertentu
```bash
./drive-migrator migrate \
--source-name nextcloud_avt \
--source-type nextcloud \
--source-url "https://files.avt.data-center.id/remote.php/dav/files/username" \
--source-user "username" \
--source-pass "password" \
--dest-name gdrive_personal \
--dest-type gdrive \
--dest-sa-file "/path/to/sa.json" \
--include "*.pdf" --include "*.docx" --include "*.xlsx"
```
#### Kecualikan folder tertentu
```bash
./drive-migrator migrate \
--source-name nextcloud_avt \
--source-type nextcloud \
--source-url "https://files.avt.data-center.id/remote.php/dav/files/username" \
--source-user "username" \
--source-pass "password" \
--dest-name gdrive_personal \
--dest-type gdrive \
--dest-sa-file "/path/to/sa.json" \
--exclude "temp/**" --exclude "*.tmp" --exclude ".DS_Store"
```
#### Migrasi folder spesifik
```bash
./drive-migrator migrate \
--source-name nextcloud_avt \
--source-type nextcloud \
--source-url "https://files.avt.data-center.id/remote.php/dav/files/username" \
--source-user "username" \
--source-pass "password" \
--dest-name gdrive_personal \
--dest-type gdrive \
--dest-sa-file "/path/to/sa.json" \
--include "Documents/**" --include "Photos/**"
```
### 🔄 Resume Migrasi
Jika migrasi terputus, lanjutkan dengan flag `--resume`:
```bash
./drive-migrator migrate \
--source-name nextcloud_avt \
--source-type nextcloud \
--source-url "https://files.avt.data-center.id/remote.php/dav/files/username" \
--source-user "username" \
--source-pass "password" \
--dest-name gdrive_personal \
--dest-type gdrive \
--dest-sa-file "/path/to/sa.json" \
--resume
```
### 📊 Monitoring Status
```bash
# Cek status job tertentu
./drive-migrator status <job-id>
# List semua job (coming soon)
./drive-migrator list
```
### 🛠️ Manual Remote Management (Opsional)
Jika ingin membuat remote secara terpisah:
```bash
# Buat remote Nextcloud
./drive-migrator remote create \
--name nextcloud_avt \
--type nextcloud \
--url "https://files.avt.data-center.id/remote.php/dav/files/username" \
--user "username" \
--pass "password"
# Buat remote Google Drive
./drive-migrator remote create \
--name gdrive_personal \
--type gdrive \
--sa-file "/path/to/service-account.json"
# Lalu jalankan migrasi
./drive-migrator migrate --source-name nextcloud_avt --dest-name gdrive_personal
```
## Supported Remote Types
| Type | Description | Required Flags |
|------|-------------|----------------|
| `nextcloud` | Nextcloud via WebDAV | `--*-url`, `--*-user`, `--*-pass` |
| `webdav` | Generic WebDAV | `--*-url`, optional: `--*-user`, `--*-pass` |
| `gdrive` | Google Drive | `--*-sa-file` (service account JSON) |
| `onedrive` | Microsoft OneDrive | `--*-client-id`, `--*-client-secret` |
## Contoh Konfigurasi
Buat file `~/.drive-migrator.yaml`:
```yaml
debug: false
log-file: "/var/log/drive-migrator.log"
# Default excludes
default-excludes:
- "*.tmp"
- "*.temp"
- ".DS_Store"
- "Thumbs.db"
- "desktop.ini"
# Rclone additional options
rclone-options:
- "--transfers=4"
- "--checkers=8"
- "--retries=3"
- "--low-level-retries=10"
```
## Pola Include/Exclude
Menggunakan sintaks glob pattern yang sama dengan rclone:
- `*.jpg` - Semua file JPG
- `Documents/**` - Semua file dalam folder Documents dan subfolder
- `**/*.pdf` - Semua file PDF di semua level folder
- `Photos/2023/**` - Semua file dalam folder Photos/2023
- `!important.txt` - Kecualikan file tertentu (gunakan --exclude)
## Troubleshooting
### Error: rclone not found
```bash
# Windows
winget install Rclone.Rclone
# atau download dari https://rclone.org/downloads/
# Linux/macOS
curl https://rclone.org/install.sh | sudo bash
```
### Error: service account file not found
Pastikan path ke service account JSON benar dan file dapat diakses:
```bash
ls -la /path/to/service-account.json
```
### Error: failed to create remote
- Periksa URL, username, dan password
- Untuk Nextcloud, pastikan URL menggunakan format: `https://domain.com/remote.php/dav/files/username`
- Test koneksi manual: `curl -u username:password "https://domain.com/remote.php/dav/files/username"`
### Database locked
Jika tracking database terkunci:
```bash
# Tutup semua instance drive-migrator yang berjalan
pkill drive-migrator
# Atau hapus lock file
rm migration.db.lock
```
### Debug Mode
Untuk troubleshooting detail:
```bash
./drive-migrator migrate --debug --log-file debug.log [other-flags...]
```
## Tips & Best Practices
1. **Test dengan folder kecil dulu**: Gunakan `--include "test-folder/**"` untuk test
2. **Gunakan service account untuk Google Drive**: Lebih stabil daripada OAuth
3. **Monitor log file**: Gunakan `tail -f migration.log` untuk monitoring real-time
4. **Backup tracking database**: File `migration.db` berisi history semua migrasi
5. **Resume otomatis**: Flag `--resume` akan skip file yang sudah ada di tujuan
## Kontribusi
1. Fork repository
2. Buat feature branch (`git checkout -b feature/amazing-feature`)
3. Commit changes (`git commit -m 'Add amazing feature'`)
4. Push ke branch (`git push origin feature/amazing-feature`)
5. Buat Pull Request
## License
Distributed under the MIT License. See `LICENSE` for more information.