From 1ceaad7d94695c7779b3d2626286101135d3dad1 Mon Sep 17 00:00:00 2001 From: Power BI Dev Date: Sat, 2 May 2026 10:32:46 +0700 Subject: [PATCH] Fix Coolify compose networking and local Docker override --- DOCKER.md | 9 ++++++++- docker-compose.override.yml | 16 ++++++++++++++++ docker-compose.yml | 18 +++++++++--------- 3 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 docker-compose.override.yml diff --git a/DOCKER.md b/DOCKER.md index 572620c..45619d5 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -1,6 +1,9 @@ # SPOTA Docker -Setup ini menjalankan aplikasi legacy SPOTA dengan PHP 7.4 Apache dan MySQL 8 dalam satu `docker-compose.yml`. +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 @@ -51,6 +54,9 @@ 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. + Opsional, upload berkas bisa dipindah ke lokasi di luar folder project dengan environment variable: - `FILES_STORAGE_PATH=/absolute/path/to/files` @@ -72,3 +78,4 @@ Sesuaikan environment berikut di Coolify: - `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. diff --git a/docker-compose.override.yml b/docker-compose.override.yml new file mode 100644 index 0000000..3344029 --- /dev/null +++ b/docker-compose.override.yml @@ -0,0 +1,16 @@ +services: + app: + ports: + - "${APP_PORT:-8080}:80" + volumes: + - ./files:/var/www/html/files + - ./img:/var/www/html/img + + db: + ports: + - "${DB_PORT:-3307}:3306" + volumes: + - db_data_local:/var/lib/mysql + +volumes: + db_data_local: diff --git a/docker-compose.yml b/docker-compose.yml index e3c5016..c624b10 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,10 +3,10 @@ services: build: . container_name: spota-app restart: unless-stopped - ports: - - "${APP_PORT:-8080}:80" + expose: + - "80" environment: - APP_URL: ${APP_URL:-http://localhost:8080} + APP_URL: ${APP_URL:-http://localhost} DB_HOST: ${DB_HOST:-db} DB_USER: ${DB_USER:-spota_user} DB_PASSWORD: ${DB_PASSWORD:-spota_password} @@ -19,8 +19,8 @@ services: PHP_DISPLAY_ERRORS: ${PHP_DISPLAY_ERRORS:-1} FILES_STORAGE_PATH: ${FILES_STORAGE_PATH:-/var/www/html/files} volumes: - - ./files:/var/www/html/files - - ./img:/var/www/html/img + - spota_files:/var/www/html/files + - spota_img:/var/www/html/img depends_on: db: condition: service_healthy @@ -35,10 +35,8 @@ services: MYSQL_USER: ${DB_USER:-spota_user} MYSQL_PASSWORD: ${DB_PASSWORD:-spota_password} MYSQL_DATABASE: ${DB_NAME:-spota_spotadb} - ports: - - "${DB_PORT:-3307}:3306" volumes: - - db_data:/var/lib/mysql + - spota_db_data:/var/lib/mysql - ./docker/mysql-init:/docker-entrypoint-initdb.d:ro - ./spota_db:/spota_db:ro healthcheck: @@ -48,4 +46,6 @@ services: retries: 20 volumes: - db_data: + spota_db_data: + spota_files: + spota_img: