Saturday, June 21, 2025

Perhatikan Volume Docker dan Jangan dihapus!

Sertifikat yang diterbitkan oleh Let's Encrypt disimpan di dalam volume Docker. Jika Anda membangun ulang nginx-proxy atau nginx-proxy-acme dengan docker-compose down -v, semua volume yang tidak didefinisikan sebagai external: true akan dihapus, termasuk volume tempat sertifikat disimpan. Ini akan menyebabkan sertifikat Anda hilang dan Anda harus meminta ulang, berpotensi menabrak rate limit lagi.




Memahami Cara Kerja Volume dan Sertifikat

Dalam konfigurasi docker-compose.yml Anda, ada bagian volumes di bagian paling bawah:

YAML
volumes:
  certs:
  vhost.d:
  html:
  # ... volume lain

Ini adalah volume bernama (named volumes) yang dibuat dan dikelola oleh Docker.

  • certs: Volume inilah tempat nginx-proxy-acme menyimpan semua sertifikat SSL yang berhasil diterbitkan oleh Let's Encrypt.
  • vhost.d: Digunakan oleh nginx-proxy untuk konfigurasi tambahan per virtual host.
  • html: Digunakan oleh nginx-proxy untuk halaman default atau custom.

Kapan Volume Ini Dihapus?

Volume bernama seperti certs tidak akan dihapus secara otomatis ketika Anda menjalankan docker-compose down (tanpa -v). Mereka hanya akan dihapus jika Anda secara eksplisit menambahkan -v (yaitu docker-compose down -v) atau jika Anda menghapusnya secara manual (docker volume rm <volume_name>).


Strategi yang Benar Saat Membangun Ulang

Jika Anda hanya mengubah kode aplikasi (PHP, Flask, React) atau konfigurasi spesifik aplikasi Anda (seperti Dockerfile di php/, backend/, frontend/, atau nginx.conf internal mereka), Anda tidak perlu menghapus volume certs.

Begini cara yang benar untuk membangun ulang tanpa kehilangan sertifikat:

  1. Jika Anda hanya mengubah source code aplikasi atau Dockerfile spesifik untuk service tersebut (misalnya backend, frontend, php-app):

    • Anda bisa menargetkan hanya service tersebut untuk dibangun ulang dan dijalankan:
      Bash
      docker-compose up -d --build <nama_service_yang_berubah>
      
      Contoh: docker-compose up -d --build backend Ini akan membangun ulang image backend dan me-restart container ebook_backend.
  2. Jika Anda mengubah konfigurasi docker-compose.yml yang memengaruhi service tertentu (misalnya, menambahkan variabel lingkungan di backend):

    • Anda bisa me-recreate service tersebut tanpa membangun ulang image (jika Dockerfile tidak berubah) atau membangun ulang image jika Dockerfile juga berubah:
      Bash
      docker-compose up -d --build <nama_service_yang_berubah> --force-recreate
      
      Contoh: docker-compose up -d --build backend --force-recreate
  3. Jika Anda mengubah konfigurasi nginx-proxy atau nginx-proxy-acme (misalnya menambahkan subdomain baru di VIRTUAL_HOST atau LETSENCRYPT_HOST):

    • Anda perlu me-restart kedua service ini agar mereka membaca konfigurasi baru dan memicu permintaan sertifikat jika diperlukan. Anda tidak perlu menghapus volumenya.
      Bash
      docker restart nginx-proxy-acme
      docker restart nginx-proxy
      
    • Kemudian, pantau log nginx-proxy-acme untuk memastikan sertifikat diterbitkan atau diperbarui tanpa masalah.
  4. Kapan Menggunakan docker-compose down -v (Menghapus Volume)?

    • Hanya jika Anda ingin menghapus semua data persisten dan memulai dari nol (misalnya, saat debugging masalah inisialisasi database atau jika volume sertifikat korup).
    • Jika Anda menggunakan docker-compose down -v, siapkan diri untuk menghadapi rate limit Let's Encrypt lagi jika Anda segera mencoba meminta sertifikat untuk domain yang sama. Ini harus menjadi opsi terakhir setelah semua troubleshooting lain.

Kesimpulan

Strategi terbaik adalah tidak pernah menggunakan docker-compose down -v kecuali Anda benar-benar ingin menghapus semua data persisten. Untuk perubahan kode atau konfigurasi, cukup targetkan service yang relevan untuk dibangun ulang atau di-restart saja.

Dengan demikian, sertifikat Let's Encrypt Anda akan tetap aman di volume certs, dan Anda tidak perlu khawatir tentang terhapusnya sertifikat saat Anda melakukan perubahan pada aplikasi atau Docker Compose.