Deploy dengan Docker Compose
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?
Salin templat produksi:
Terminalcp .env.production.example .envAtur minimal kunci berikut di
.env:Kunci Keterangan APP_URLAlamat publik lewat reverse proxy, termasuk https://APP_KEYBuat dengan php artisan key:generate --showdi mesin yang memiliki PHPDB_DATABASE,DB_USERNAME,DB_PASSWORDDatabase dan user aplikasi SUPER_ADMIN_NAME,SUPER_ADMIN_EMAIL,SUPER_ADMIN_PASSWORDAkun pertama APP_PORTOpsional. Port host, bawaan 8080Sediakan
DB_ROOT_PASSWORDsebagai environment di host atau container manager. Ekspor di shell deployment, atau atur lewat secret manager host.Jalankan perintah Compose dari direktori proyek yang berisi
.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?
docker compose up -d db
docker compose run --rm app php artisan pondok:install --no-interaction
docker compose up -d app
docker compose psInstaller membaca konfigurasi database dari environment container, menjalankan migrasi dan seeder instalasi, lalu menyiapkan storage.
Data disimpan di dua named volume:
| Volume | Isi |
|---|---|
pondok_storage | Unggahan aplikasi |
mysql_data | Data MySQL |
Setelah berhasil login, hapus SUPER_ADMIN_PASSWORD dari .env. Aplikasi tetap berjalan; simpan kata sandi akun dengan aman.
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(bawaan8080). Sajikan lewat HTTPS dengan reverse proxy.Periksa status dengan
docker compose ps. Layananappmenunggu MySQL sehat, dan healthcheckappmemakai endpoint/up.Compose tidak menjalankan worker atau scheduler sebagai daemon. Jadwalkan perintah berikut dari cron host atau platform setiap menit:
Terminaldocker compose exec -T app php artisan schedule:runLaravel 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.
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.gzBagaimana 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:
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 appBagaimana upgrade versi? Tautan ke bagian Bagaimana upgrade versi?
Backup database dan volume
pondok_storage.Ambil versi kode baru, lalu bangun image:
Terminaldocker compose build appJalankan pembaruan:
Terminaldocker compose run --rm app php artisan pondok:upgrade --forceTerapkan image baru:
Terminaldocker compose up -d app
Jangan menghapus named volume saat upgrade. Perintah upgrade tidak menjalankan migrate:fresh, jadi data tetap utuh.