# SPOTA Docker Setup ini menjalankan aplikasi legacy SPOTA dengan PHP Apache dan MySQL 8 dalam satu `docker-compose.yml`. `docker-compose.yml` dibuat aman untuk Coolify: app tidak bind host port secara langsung dan hanya expose port internal `80`. Untuk pemakaian lokal, Docker otomatis membaca `docker-compose.override.yml` yang menambahkan port host dan bind mount lokal. ## Jalankan Lokal ```powershell copy .env.example .env docker compose up -d --build ``` Akses aplikasi: ```text http://localhost:8080 http://localhost:8080/admin/login.php http://localhost:8080/dosen/login.php http://localhost:8080/mahasiswa/login.php ``` ## Stop ```powershell docker compose down ``` ## Reset Database Perintah ini menghapus volume DB dan import ulang dump dari `spota_db`. ```powershell docker compose down -v docker compose up -d ``` ## Database Dump diambil dari folder `spota_db` yang dibundel ke image database saat volume DB pertama kali dibuat. Database yang di-import: - `spota_spotadb` - `spota_konsultasi` - `spota_doxid` - `spota_rek_artikel` ## Volume/Data Folder berikut di-mount dari host supaya data upload tidak masuk image: - `./files:/var/www/html/files` - `./img:/var/www/html/img` Bind mount tersebut hanya aktif untuk local development melalui `docker-compose.override.yml`. Di Coolify, compose utama memakai named volume agar tidak bentrok dengan host port/path handling Coolify. Bootstrap database tidak lagi bergantung pada bind mount folder host ke container DB; dump dan script init dibawa oleh image database. Opsional, upload berkas bisa dipindah ke lokasi di luar folder project dengan environment variable: - `FILES_STORAGE_PATH=/absolute/path/to/files` Jika `FILES_STORAGE_PATH` tidak diisi, aplikasi tetap memakai default `files/` di dalam document root. Folder target akan dibuat otomatis saat upload pertama. Jika path tersebut berada di luar `/var/www/html/files`, sesuaikan juga volume mount container ke lokasi yang sama. Untuk Coolify, jadikan path ini persistent storage. ## Coolify Sesuaikan environment berikut di Coolify: - `APP_URL` - `DB_USER` - `DB_PASSWORD` - `MYSQL_ROOT_PASSWORD` - `PHP_DISPLAY_ERRORS=0` untuk production Port internal app adalah `80`. Database internal memakai service name `db` pada port `3306`. Jangan publish `8080:80` di compose utama untuk Coolify, karena Coolify akan mengurus routing sendiri dan bind host port bisa bentrok dengan resource lain. Jangan tambahkan persistent storage ke `/docker-entrypoint-initdb.d` atau `/spota_db` pada service DB.