Deploy dengan Docker Compose

  • Diperbarui
  • 3 menit baca
  • Untuk pengelola server / devops
  • Waktu pengerjaan 30 menit

RingkasnyaDocker Compose menjalankan aplikasi Laravel dan MySQL. Isi .env, set DB_ROOT_PASSWORD di environment host, jalankan pondok:install di container, lalu jadwalkan schedule:run setiap menit dari cron host.

Daftar isi

Compose menjalankan dua layanan: aplikasi Laravel (app) dan MySQL (db). Port MySQL tidak dipublikasikan ke host. Gunakan reverse proxy dengan TLS di host produksi. Memakai Easypanel? Lihat Deploy dengan Easypanel.

Apa yang dibutuhkan untuk Docker Compose? Tautan ke bagian Apa yang dibutuhkan untuk Docker Compose?

  • Docker Engine dan Docker Compose v2.
  • Mesin dengan PHP untuk membuat APP_KEY, atau cara lain untuk menghasilkan kunci Laravel.
  • Reverse proxy untuk HTTPS.

Bagaimana konfigurasi awalnya? Tautan ke bagian Bagaimana konfigurasi awalnya?

  1. Salin templat produksi:

    Terminal
    cp .env.production.example .env
  2. Atur minimal kunci berikut di .env:

    KunciKeterangan
    APP_URLAlamat publik lewat reverse proxy, termasuk https://
    APP_KEYBuat dengan php artisan key:generate --show di mesin yang memiliki PHP
    DB_DATABASE, DB_USERNAME, DB_PASSWORDDatabase dan user aplikasi
    SUPER_ADMIN_NAME, SUPER_ADMIN_EMAIL, SUPER_ADMIN_PASSWORDAkun pertama
    APP_PORTOpsional. Port host, bawaan 8080
  3. Sediakan DB_ROOT_PASSWORD sebagai environment di host atau container manager. Ekspor di shell deployment, atau atur lewat secret manager host.

  4. Jalankan perintah Compose dari direktori proyek yang berisi .env.

Jangan taruh DB_ROOT_PASSWORD di .env

.env juga dipasang ke layanan aplikasi. Password root hanya boleh diteruskan ke layanan MySQL. .env juga tidak boleh dimasukkan ke Git.

Bagaimana instalasi pertama? Tautan ke bagian Bagaimana instalasi pertama?

Terminal
docker compose up -d db
docker compose run --rm app php artisan pondok:install --no-interaction
docker compose up -d app
docker compose ps

Installer membaca konfigurasi database dari environment container, menjalankan migrasi dan seeder instalasi, lalu menyiapkan storage.

Data disimpan di dua named volume:

VolumeIsi
pondok_storageUnggahan aplikasi
mysql_dataData MySQL

Setelah berhasil login, hapus SUPER_ADMIN_PASSWORD dari .env. Aplikasi tetap berjalan; simpan kata sandi akun dengan aman.

Jangan pakai down -v

Jangan menjalankan docker compose down -v pada instalasi yang datanya ingin dipertahankan. Opsi -v menghapus named volume beserta database dan unggahan.

Apa saja operasi rutinnya? Tautan ke bagian Apa saja operasi rutinnya?

  • Aplikasi tersedia di http://HOST:APP_PORT (bawaan 8080). Sajikan lewat HTTPS dengan reverse proxy.

  • Periksa status dengan docker compose ps. Layanan app menunggu MySQL sehat, dan healthcheck app memakai endpoint /up.

  • Compose tidak menjalankan worker atau scheduler sebagai daemon. Jadwalkan perintah berikut dari cron host atau platform setiap menit:

    Terminal
    docker compose exec -T app php artisan schedule:run

    Laravel Scheduler lalu menjalankan worker database singkat untuk memproses antrean.

Bagaimana backup volume? Tautan ke bagian Bagaimana backup volume?

Named volume bukan backup. Tulis backup ke lokasi di luar direktori proyek, lalu enkripsi dan salin ke lokasi terpisah sesuai kebijakan lembaga.

Terminal
docker compose exec -T db sh -c \
  'MYSQL_PWD="$MYSQL_PASSWORD" mysqldump --single-transaction --no-tablespaces -u "$MYSQL_USER" "$MYSQL_DATABASE"' \
  > /path/backup-aman/pondok-db.sql
docker compose exec -T app tar -czf - -C /var/www/html/storage . \
  > /path/backup-aman/pondok-storage.tar.gz

Bagaimana restore backup? Tautan ke bagian Bagaimana restore backup?

Hentikan aplikasi, lalu pulihkan database ke database kosong yang telah dibuat MySQL. Restore bisa dialirkan lewat user aplikasi:

Terminal
docker compose stop app
cat /path/backup-aman/pondok-db.sql | docker compose exec -T db sh -c \
  'MYSQL_PWD="$MYSQL_PASSWORD" mysql -u "$MYSQL_USER" "$MYSQL_DATABASE"'
cat /path/backup-aman/pondok-storage.tar.gz | docker compose run --rm -T --no-deps app tar -xzf - -C /var/www/html/storage
docker compose run --rm --no-deps app chown -R www-data:www-data /var/www/html/storage
docker compose up -d app

Bagaimana upgrade versi? Tautan ke bagian Bagaimana upgrade versi?

  1. Backup database dan volume pondok_storage.

  2. Ambil versi kode baru, lalu bangun image:

    Terminal
    docker compose build app
  3. Jalankan pembaruan:

    Terminal
    docker compose run --rm app php artisan pondok:upgrade --force
  4. Terapkan image baru:

    Terminal
    docker compose up -d app

Jangan menghapus named volume saat upgrade. Perintah upgrade tidak menjalankan migrate:fresh, jadi data tetap utuh.

Langkah berikutnya Tautan ke bagian Langkah berikutnya

Perbaiki halaman ini di GitHub