Cara Mengunggah File dengan FTP: Panduan Teknis Lengkap
File Transfer Protocol (FTP) adalah protokol jaringan yang beroperasi pada model klien-server yang memungkinkan transfer file dua arah antara mesin lokal dan host jarak jauh melalui TCP/IP. Protokol ini menggunakan dua saluran terpisah — saluran kontrol (port 21) untuk perintah dan saluran data (port 20 atau port sementara yang dinegosiasikan) untuk muatan file aktual, yang merupakan detail arsitektur mendasar yang menjelaskan sebagian besar masalah firewall dan mode pasif yang dihadapi para praktisi.
Bagi siapa pun yang mengelola server web, men-deploy kode aplikasi, atau mengelola lingkungan VPS Hosting, menguasai FTP dan penerusnya yang aman adalah hal yang tidak bisa ditawar. Panduan ini mencakup alur kerja lengkap: pemilihan protokol, konfigurasi klien, navigasi direktori, transfer batch, manajemen izin, dan pemecahan masalah tingkat produksi — termasuk kasus-kasus khusus yang diabaikan oleh tutorial umum.
Memahami Arsitektur FTP dan Varian Protokol
Sebelum menyentuh klien, memahami varian protokol mana yang sebenarnya Anda gunakan dapat mencegah berjam-jam debugging di kemudian hari.
Mode Aktif vs. Mode Pasif
Desain saluran ganda FTP menciptakan pemisahan perilaku yang kritis:
- Mode aktif: Server memulai koneksi data kembali ke klien pada port yang ditentukan klien. Ini hampir selalu gagal melalui router NAT atau firewall ketat karena koneksi masuk dari server diblokir.
- Mode pasif (PASV): Klien memulai kedua koneksi. Server membuka port tinggi acak dan memberi tahu klien untuk terhubung ke sana. Ini adalah default yang benar untuk hampir setiap deployment modern.
Sebagian besar kegagalan koneksi dalam produksi berasal dari mode aktif yang digunakan terhadap server yang dilindungi firewall, atau server yang rentang port pasifnya tidak terbuka dalam aturan firewallnya sendiri.
Tabel Perbandingan Protokol
| Fitur | FTP | FTPS (FTP over TLS) | SFTP (SSH File Transfer) | SCP |
|---|---|---|---|---|
| — | — | — | — | — |
| Enkripsi | Tidak ada | TLS/SSL | SSH | SSH |
| Port saluran kontrol | 21 | 21 (eksplisit) / 990 (implisit) | 22 | 22 |
| Saluran data | Terpisah (20/sementara) | Terpisah (dibungkus TLS) | Saluran multipleks tunggal | Saluran tunggal |
| Keramahan firewall | Buruk | Buruk | Sangat baik | Sangat baik |
| Lanjutkan transfer | Ya (perintah REST) | Ya | Ya | Tidak |
| Daftar direktori | Ya | Ya | Ya | Tidak |
| Sertifikat diperlukan | Tidak | Ya (minimum sisi server) | Tidak (kunci atau kata sandi) | Tidak |
| Direkomendasikan untuk produksi | Tidak | Situasional | Ya | Ya (salinan massal) |
Kesimpulan praktis: Gunakan SFTP secara default. Gunakan FTPS hanya ketika sistem lama secara eksplisit memerlukannya. Hindari FTP biasa sepenuhnya pada server yang menghadap internet — kredensial dan konten file berjalan dalam teks biasa dan mudah dicegat.
Prasyarat dan Pengumpulan Kredensial
Sebelum membuka klien apa pun, kumpulkan informasi berikut dari penyedia hosting atau administrator server Anda:
- Nama host atau alamat IP — misalnya,
ftp.yourdomain.comatau203.0.113.45 - Protokol — FTP, FTPS (eksplisit atau implisit), atau SFTP
- Port — 21 untuk FTP/FTPS-eksplisit, 990 untuk FTPS-implisit, 22 untuk SFTP
- Nama pengguna dan kata sandi — atau kunci privat SSH untuk autentikasi berbasis kunci SFTP
- Jalur root jarak jauh — umumnya
/public_html,/var/www/html, atau/home/username/public_htmltergantung pada tumpukan server
Jika Anda bekerja dengan VPS dengan cPanel, kredensial FTP Anda dibuat di bawah cPanel > FTP Accounts, di mana Anda juga dapat membatasi setiap akun ke direktori tertentu — praktik keamanan yang membatasi dampak jika kredensial dikompromikan.
Langkah 1: Instal dan Konfigurasi FileZilla
FileZilla tetap menjadi klien FTP lintas platform yang paling banyak digunakan karena dukungannya untuk FTP, FTPS, dan SFTP, Site Manager bawaannya, dan antrean transfer dengan kemampuan lanjutan.
Unduh: Dapatkan FileZilla Client (bukan Server) dari filezilla-project.org. Verifikasi checksum SHA-512 yang diterbitkan di halaman unduhan sebelum menjalankan penginstal — ini adalah langkah yang dilewati sebagian besar tutorial, tetapi serangan rantai pasokan pada utilitas populer telah terdokumentasi.
Setelah instalasi, buka FileZilla dan navigasikan ke Edit > Settings > Transfers > File Types. Atur jenis transfer default ke Binary, bukan Auto. Deteksi otomatis dapat merusak file biner secara diam-diam (gambar, arsip, file yang dapat dieksekusi) dengan menerapkan konversi akhir baris ketika heuristik salah mengklasifikasikan file.
Langkah 2: Buat Entri Site Manager
Menggunakan bilah Quickconnect dapat diterima untuk tugas satu kali, tetapi menyimpan kredensial dalam teks biasa di recentservers.xml. Untuk koneksi berulang apa pun, gunakan Site Manager sebagai gantinya.
- Buka File > Site Manager (atau tekan
Ctrl+S). - Klik New Site dan beri nama yang deskriptif.
- Konfigurasi tab General:
- Protocol: Pilih SFTP untuk server berbasis SSH, atau FTP dengan TLS eksplisit untuk FTPS.
- Host: Masukkan nama host atau IP server.
- Port: Biarkan kosong untuk menggunakan default protokol, atau tentukan secara eksplisit.
- Logon Type: Pilih Normal untuk autentikasi kata sandi, atau Key file untuk SFTP berbasis kunci SSH.
- User / Password: Masukkan kredensial.
- Pada tab Advanced, atur Default remote directory ke root web Anda (misalnya,
/public_html) dan Default local directory ke folder proyek Anda. Ini menghilangkan waktu navigasi di setiap sesi. - Klik Connect.
Untuk SFTP dengan autentikasi berbasis kunci — pendekatan yang direkomendasikan untuk Dedicated Servers — arahkan kolom Key file ke kunci privat Anda (format .pem atau .ppk). FileZilla menggunakan format kuncinya sendiri; konversi kunci OpenSSH dengan PuTTYgen jika diperlukan.
Langkah 3: Navigasi Antarmuka Dua Panel
Setelah terhubung, FileZilla menampilkan tampilan terpisah:
- Panel kiri (Local Site): Sistem file lokal Anda. Navigasikan ke direktori yang berisi file yang ingin Anda unggah.
- Panel kanan (Remote Site): Sistem file server. Navigasikan ke direktori target — biasanya
/public_htmluntuk konten web. - Panel antrean bawah: Menampilkan transfer yang diantrekan, transfer yang gagal, dan transfer yang berhasil dengan cap waktu dan jumlah byte.
Pohon direktori di bagian atas setiap panel dan daftar file di bawahnya bersifat independen — mengklik folder di pohon tidak secara otomatis menggulir daftar file. Hal ini membingungkan pengguna baru yang bertanya-tanya mengapa daftar file mereka tampak kosong.
Langkah 4: Unggah File
File Tunggal atau Pemilihan Manual
Klik kanan file apa pun di panel lokal dan pilih Upload, atau seret ke panel jarak jauh. Untuk pemilihan multi-file, gunakan Ctrl+Click (Windows/Linux) atau Cmd+Click (macOS) untuk pemilihan tidak berurutan, atau Shift+Click untuk rentang.
Unggah Seret-dan-Lepas
Pilih file di panel lokal dan seret ke folder target di panel jarak jauh. FileZilla mengantrekan semua item dan mulai mentransfer segera.
Unggah Direktori Tersinkronisasi
Untuk men-deploy seluruh direktori proyek, klik kanan folder lokal dan pilih Upload. FileZilla secara rekursif mengunggah semua konten, mempertahankan struktur direktori di sisi jarak jauh.
Memantau Kemajuan Transfer
Antrean transfer di bagian bawah menampilkan:
- Nama file dan ukuran
- Kecepatan transfer (byte/detik)
- Waktu yang telah berlalu dan perkiraan waktu
- Jalur tujuan jarak jauh
Transfer yang selesai tetapi menampilkan 0 byte yang ditransfer adalah kegagalan diam — file dibuat tetapi kosong. Ini biasanya menunjukkan masalah izin pada direktori tujuan atau pelanggaran kuota disk di server.
Langkah 5: Atur Izin File yang Benar Setelah Unggah
Ini adalah langkah yang paling sering dilewati dan menjadi sumber persentase signifikan tiket dukungan “situs web saya rusak setelah unggah”.
Setelah mengunggah, klik kanan file atau direktori di panel jarak jauh dan pilih File permissions. Representasi numerik dipetakan langsung ke oktet izin Unix:
- 644 — Standar untuk file web (pemilik baca/tulis, grup/lainnya hanya baca)
- 755 — Standar untuk direktori dan skrip yang dapat dieksekusi
- 600 — File privat yang tidak boleh dapat diakses web (misalnya, file konfigurasi dengan kredensial)
- 777 — Jangan pernah gunakan ini dalam produksi; ini memberikan akses tulis untuk semua orang
Untuk perbaikan izin rekursif pada seluruh pohon direktori yang diunggah, centang Recurse into subdirectories dan terapkan 644 ke file dan 755 ke direktori secara terpisah. FileZilla tidak membedakan file dari direktori dalam satu proses rekursif — Anda harus menjalankannya dua kali dengan filter yang sesuai dipilih.
Atau, setelah terhubung melalui SSH, perbaiki izin secara massal:
find /public_html -type f -exec chmod 644 {} ;
find /public_html -type d -exec chmod 755 {} ;Langkah 6: Verifikasi Unggahan
Jangan berasumsi bahwa antrean transfer yang selesai berarti deployment sudah benar. Lakukan langkah-langkah verifikasi berikut:
- Di FileZilla: Segarkan direktori jarak jauh (
F5atau klik kanan > Refresh) dan konfirmasi ukuran file sesuai dengan aslinya di lokal. Ketidaksesuaian ukuran menunjukkan transfer yang terpotong. - Melalui browser: Muat halaman yang diperbarui dan lakukan hard refresh (
Ctrl+Shift+R) untuk melewati cache browser. - Melalui SSH: Untuk verifikasi sisi server, bandingkan checksum:
md5sum /public_html/index.htmlBandingkan output dengan checksum file lokal. Ketidaksesuaian berarti file rusak dalam transit — jarang terjadi dengan SFTP tetapi mungkin terjadi dengan FTP biasa pada koneksi yang tidak stabil.
Teknik Lanjutan dan Pola Produksi
Melanjutkan Transfer yang Gagal
Jika transfer file besar terganggu, FileZilla menggunakan perintah FTP REST (atau ekuivalen SFTP) untuk melanjutkan dari offset byte terakhir yang dikonfirmasi. Di tab Failed transfers, klik kanan item yang gagal dan pilih Reset and requeue failed files, lalu mulai antrean lagi. Ini bekerja dengan andal dengan SFTP; resume FTP biasa bergantung pada dukungan server untuk perintah REST.
Mengecualikan File dari Unggahan
Edit > Filename Filters FileZilla memungkinkan Anda mendefinisikan aturan untuk mengecualikan file yang cocok dengan pola — misalnya, mengecualikan direktori .git, node_modules, .DS_Store, atau file .env dari unggahan yang tidak disengaja. Ini adalah pengamanan kritis: mengunggah file .env yang berisi kredensial database atau kunci API ke root web publik adalah insiden keamanan serius.
Transfer FTP Berbasis Skrip/Otomatis
Untuk pipeline CI/CD atau deployment terjadwal, GUI FileZilla tidak sesuai. Gunakan utilitas baris perintah lftp sebagai gantinya:
lftp -u username,password sftp://your-server.com << 'EOF'
set sftp:auto-confirm yes
mirror --reverse --delete --verbose /local/project/ /public_html/
EOFFlag --reverse mengunggah (lokal ke jarak jauh), --delete menghapus file jarak jauh yang tidak ada secara lokal (gunakan dengan hati-hati), dan --verbose mencatat setiap operasi. Pola ini cocok untuk deployment otomatis pada lingkungan VPS Hosting di mana akses SSH tersedia.
Menggunakan rsync Melalui SSH sebagai Alternatif FTP
Untuk deployment besar atau sinkronisasi inkremental, rsync melalui SSH jauh lebih efisien daripada FTP karena hanya mentransfer blok yang berubah dalam file, bukan seluruh file:
rsync -avz --progress --delete /local/project/ user@your-server.com:/public_html/-a — Mode arsip (mempertahankan izin, cap waktu, symlink)
-v — Output verbose
-z — Kompres data selama transfer
--delete — Hapus file jarak jauh yang dihapus secara lokal
rsync memerlukan akses SSH dan tidak tersedia melalui panel kontrol shared hosting, tetapi ini adalah alat yang tepat untuk lingkungan apa pun di mana Anda mengontrol tumpukan server.
Pemecahan Masalah FTP dan SFTP yang Umum
Koneksi Timeout atau Ditolak
Verifikasi nama host diselesaikan dengan benar: nslookup ftp.yourdomain.comtelnet your-server.com 21 atau nc -zv your-server.com 22iptables -L atau ufw status akan menampilkan apakah port diizinkansystemctl status sshd530 Login Authentication Failed
- Konfirmasi nama pengguna tepat — nama pengguna FTP peka huruf besar-kecil pada sistem Linux
- Verifikasi akun tidak terkunci:
passwd -S usernamedi server - Periksa
/var/log/auth.logatau/var/log/secureuntuk alasan penolakan - Jika menggunakan cPanel, konfirmasi akun FTP belum kedaluwarsa atau ditangguhkan
550 Permission Denied saat Unggah
Direktori jarak jauh tidak memberikan akses tulis kepada pengguna FTP yang terautentikasi. Periksa kepemilikan dan izin:
ls -la /public_html/Jika direktori dimiliki oleh pengguna yang berbeda, sesuaikan kepemilikan (chown) atau berikan izin tulis grup (chmod g+w). Pada shared hosting, ini ditangani melalui file manager panel kontrol hosting.
Kegagalan Koneksi Mode Pasif
Jika Anda melihat “Could not retrieve directory listing” setelah login yang berhasil, rentang port pasif server tidak dapat dijangkau. Di FileZilla, buka Edit > Settings > FTP > Passive mode dan coba Fall back to active mode. Di sisi server, pastikan rentang port pasif (umumnya 49152–65534) terbuka di firewall dan dikonfigurasi dengan benar dalam pengaturan daemon FTP (misalnya, pasv_min_port dan pasv_max_port di vsftpd.conf).
Kerusakan Transfer Binary vs. ASCII
File PHP yang diunggah dalam mode ASCII pada klien Windows mungkin memiliki akhir baris gaya Windows (rn) yang dikonversi, yang dapat merusak parser tertentu. Konfirmasi FileZilla diatur ke mode Binary di bawah Transfer > Transfer Type > Binary.
Metode Unggah Alternatif
FTP tidak selalu menjadi alat yang tepat. Alternatif berikut layak untuk diketahui:
cPanel / Plesk File Manager: Tersedia melalui panel kontrol berbasis web pada Shared Web Hosting dan VPS Control Panels. Cocok untuk pengeditan kecil dan unggahan file tunggal. Memiliki batas ukuran file 2 GB pada sebagian besar implementasi dan tidak cocok untuk transfer massal.
SCP (Secure Copy): Alat salin berbasis SSH yang sederhana dan dapat di-skrip. Tidak ada kemampuan lanjutan, tidak ada daftar direktori, tetapi sangat andal untuk transfer satu kali:
scp -r /local/project/ user@your-server.com:/public_html/Deployment berbasis Git: Push ke repositori bare di server dan gunakan hook post-receive untuk memeriksa file ke dalam root web. Ini adalah pola deployment paling bersih untuk kode — menyediakan riwayat versi, kemampuan rollback, dan menghilangkan manajemen file manual sepenuhnya.
Sinkronisasi object storage / CDN: Untuk aset statis, menyinkronkan ke bucket yang kompatibel dengan S3 dan menyajikan melalui CDN lebih skalabel daripada deployment berbasis FTP dan menghapus server web dari jalur pengiriman aset statis sepenuhnya.
Matriks Keputusan Cepat: Memilih Metode Transfer yang Tepat
| Skenario | Metode yang Direkomendasikan |
|---|---|
| — | — |
| Pengeditan file satu kali pada shared hosting | cPanel File Manager |
| Deployment website reguler, tanpa SSH | SFTP via FileZilla |
| Deployment pipeline CI/CD otomatis | `lftp` atau `rsync` melalui SSH |
| File biner besar, transfer satu kali | `scp` |
| Deployment kode inkremental | `rsync` atau hook Git post-receive |
| Sistem lama yang memerlukan FTP | FTPS (TLS eksplisit) minimum |
| Deployment aset statis massal | Sinkronisasi object storage yang kompatibel dengan S3 |
Daftar Periksa Teknis Utama Sebelum Tayang
- Protokol: Hanya SFTP atau FTPS — jangan pernah FTP biasa pada server produksi
- Kredensial: Gunakan akun FTP/SFTP khusus yang dibatasi ke direktori minimum yang diperlukan, bukan root atau pengguna sistem utama
- Mode transfer: Binary, bukan Auto atau ASCII
- Izin file: 644 untuk file, 755 untuk direktori — diverifikasi setelah unggah
- File sensitif: Konfirmasi
.env,.git/,node_modules/, dan file konfigurasi dengan kredensial dikecualikan dari unggahan melalui filter nama file - Verifikasi checksum: Perbandingan MD5 atau SHA-256 untuk file kritis setelah transfer
- Mode pasif: Diaktifkan secara default di klien FTP
- Kunci SSH: Gunakan autentikasi berbasis kunci untuk SFTP pada server apa pun yang Anda kendalikan; nonaktifkan autentikasi kata sandi di
sshd_configjika memungkinkan
Pertanyaan yang Sering Diajukan
Apa perbedaan antara FTP dan SFTP?
FTP mentransmisikan data dan kredensial dalam teks biasa melalui dua saluran TCP terpisah (kontrol pada port 21, data pada port 20 atau sementara). SFTP adalah protokol yang sepenuhnya berbeda yang dibangun di atas SSH yang memultipleks semuanya melalui satu saluran terenkripsi pada port 22. Keduanya berbagi nama tetapi tidak berbagi kode protokol apa pun.
Mengapa FileZilla menampilkan “Connection timed out” meskipun kredensial sudah benar?
Timeout sebelum autentikasi biasanya berarti port server tidak dapat dijangkau — diblokir oleh firewall, layanan tidak berjalan, atau nama host tidak diselesaikan ke IP yang benar. Timeout setelah autentikasi biasanya menunjukkan masalah mode pasif di mana rentang port saluran data diblokir oleh firewall. Periksa aturan firewall sisi server dan konfirmasi rentang port pasif terbuka.
Bisakah saya menggunakan FTP untuk mengunggah file ke VPS tanpa panel kontrol?
Ya. Instal daemon SSH yang mendukung SFTP (OpenSSH, yang standar pada semua distribusi Linux) — tidak diperlukan perangkat lunak server FTP tambahan. Hubungkan dengan FileZilla menggunakan protokol SFTP pada port 22 dan kredensial SSH atau pasangan kunci Anda. Ini adalah pendekatan yang direkomendasikan untuk lingkungan VPS Hosting apa pun.
Izin file apa yang harus dimiliki file WordPress setelah unggah FTP?
File inti WordPress harus 644, direktori 755, dan wp-config.php harus 600 (hanya pemilik baca/tulis). Direktori wp-content/uploads memerlukan 755 atau 775 agar server web dapat menulis media yang diunggah. Jangan pernah mengatur direktori WordPress apa pun ke 777.
Apakah ada batas ukuran file saat mengunggah melalui FTP?
FTP dan SFTP sendiri tidak memiliki batas ukuran file yang melekat — transfer dialirkan. Batas praktis berasal dari kuota disk sisi server, PHP upload_max_filesize (tidak relevan untuk FTP, yang melewati PHP sepenuhnya), atau batas sistem file (ext4 mendukung file hingga 16 TB). Untuk Shared Web Hosting, penyedia hosting mungkin memberlakukan kuota disk yang membatasi total penyimpanan daripada ukuran file individual.
