Prepare Docker Compose deployment for Coolify

This commit is contained in:
2026-06-11 16:24:28 +07:00
parent ab5f5541fb
commit 9c1bf32cfe
4 changed files with 77 additions and 28 deletions
+4
View File
@@ -3,6 +3,10 @@ DB_PORT=3306
DB_USER=webgis DB_USER=webgis
DB_PASSWORD=change-this-password DB_PASSWORD=change-this-password
MYSQL_ROOT_PASSWORD=change-this-root-password
MYSQL_USER=webgis
MYSQL_PASSWORD=change-this-password
DB_NAME_GIS_SPBU=gis_spbu DB_NAME_GIS_SPBU=gis_spbu
DB_NAME_DATA_JALAN=data_jalan DB_NAME_DATA_JALAN=data_jalan
DB_NAME_WEBGIS=webgis DB_NAME_WEBGIS=webgis
+28 -10
View File
@@ -2,13 +2,23 @@
## Konfigurasi Database Coolify ## Konfigurasi Database Coolify
Project ini membaca konfigurasi database dari environment variable. Di Coolify, isi environment pada aplikasi PHP seperti contoh berikut: Project ini bisa dideploy di Coolify dengan Docker Compose. Pilih build pack **Docker Compose**, base directory `/`, dan compose file `docker-compose.yml`.
Di Coolify, isi environment stack seperti contoh berikut:
```env
MYSQL_ROOT_PASSWORD=change-this-root-password
MYSQL_USER=webgis
MYSQL_PASSWORD=change-this-password
```
Compose akan mengisi koneksi aplikasi PHP ke service MySQL internal:
```env ```env
DB_HOST=mysql DB_HOST=mysql
DB_PORT=3306 DB_PORT=3306
DB_USER=webgis DB_USER=${MYSQL_USER}
DB_PASSWORD=change-this-password DB_PASSWORD=${MYSQL_PASSWORD}
DB_NAME_GIS_SPBU=gis_spbu DB_NAME_GIS_SPBU=gis_spbu
DB_NAME_DATA_JALAN=data_jalan DB_NAME_DATA_JALAN=data_jalan
@@ -16,16 +26,24 @@ DB_NAME_WEBGIS=webgis
DB_NAME_KEMISKINAN=webgisuas DB_NAME_KEMISKINAN=webgisuas
``` ```
`DB_HOST` harus memakai hostname service MySQL internal di Coolify, bukan `localhost`. Nama host biasanya mengikuti nama service/resource MySQL yang dibuat di Coolify. `DB_HOST` harus memakai hostname service MySQL internal di Compose, yaitu `mysql`, bukan `localhost`.
Disarankan membuat user database khusus untuk aplikasi: Saat volume MySQL masih kosong, file SQL berikut otomatis dijalankan:
- `01/database_01.sql`
- `02/database_02.sql`
- `05/webgis_uas_FIXED_v2/webgis_uas_FIXED/database_LENGKAP.sql`
- `docker/mysql/init/99-grants.sh`
Script `99-grants.sh` memberi user `${MYSQL_USER}` akses tulis ke semua database project.
Jika database Coolify sudah pernah dibuat sebelum perubahan Compose ini, init script tidak berjalan ulang. Jalankan grant manual sekali lewat phpMyAdmin atau terminal MySQL:
```sql ```sql
CREATE USER 'webgis'@'%' IDENTIFIED BY 'change-this-password'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON gis_spbu.* TO 'webgis'@'%';
GRANT ALL PRIVILEGES ON gis_spbu.* TO 'webgis'@'%'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON data_jalan.* TO 'webgis'@'%';
GRANT ALL PRIVILEGES ON data_jalan.* TO 'webgis'@'%'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON webgis.* TO 'webgis'@'%';
GRANT ALL PRIVILEGES ON webgis.* TO 'webgis'@'%'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON webgisuas.* TO 'webgis'@'%';
GRANT ALL PRIVILEGES ON webgisuas.* TO 'webgis'@'%';
FLUSH PRIVILEGES; FLUSH PRIVILEGES;
``` ```
+31 -18
View File
@@ -1,50 +1,63 @@
services: services:
web: web:
build: . build: .
container_name: webgis_app restart: unless-stopped
ports: expose:
- "8080:80" - "80"
environment: environment:
SERVICE_FQDN_WEBGIS:
DB_HOST: mysql DB_HOST: mysql
DB_PORT: 3306 DB_PORT: 3306
DB_USER: webgis DB_USER: ${MYSQL_USER:?webgis}
DB_PASSWORD: webgis_password DB_PASSWORD: ${MYSQL_PASSWORD:?}
DB_NAME_GIS_SPBU: gis_spbu DB_NAME_GIS_SPBU: gis_spbu
DB_NAME_DATA_JALAN: data_jalan DB_NAME_DATA_JALAN: data_jalan
DB_NAME_WEBGIS: webgis DB_NAME_WEBGIS: webgis
DB_NAME_KEMISKINAN: webgisuas DB_NAME_KEMISKINAN: webgisuas
depends_on: depends_on:
- mysql mysql:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "php -r \"exit(@fsockopen('127.0.0.1', 80) ? 0 : 1);\""]
interval: 30s
timeout: 10s
retries: 5
mysql: mysql:
image: mysql:8.0 image: mysql:8.0
container_name: webgis_mysql
restart: unless-stopped restart: unless-stopped
environment: environment:
MYSQL_ROOT_PASSWORD: root_password MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?}
MYSQL_USER: webgis MYSQL_DATABASE: gis_spbu
MYSQL_PASSWORD: webgis_password MYSQL_USER: ${MYSQL_USER:?webgis}
ports: MYSQL_PASSWORD: ${MYSQL_PASSWORD:?}
- "3307:3306"
volumes: volumes:
- mysql_data:/var/lib/mysql - mysql_data:/var/lib/mysql
- ./01/database_01.sql:/docker-entrypoint-initdb.d/01_database_01.sql:ro - ./01/database_01.sql:/docker-entrypoint-initdb.d/01_database_01.sql:ro
- ./02/database_02.sql:/docker-entrypoint-initdb.d/02_database_02.sql:ro - ./02/database_02.sql:/docker-entrypoint-initdb.d/02_database_02.sql:ro
- ./05/webgis_uas_FIXED_v2/webgis_uas_FIXED/database_LENGKAP.sql:/docker-entrypoint-initdb.d/05_database_lengkap.sql:ro - ./05/webgis_uas_FIXED_v2/webgis_uas_FIXED/database_LENGKAP.sql:/docker-entrypoint-initdb.d/05_database_lengkap.sql:ro
- ./docker/mysql/init/99-grants.sh:/docker-entrypoint-initdb.d/99-grants.sh:ro
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"]
interval: 10s
timeout: 5s
retries: 10
phpmyadmin: phpmyadmin:
image: phpmyadmin/phpmyadmin image: phpmyadmin/phpmyadmin
container_name: webgis_phpmyadmin
restart: unless-stopped restart: unless-stopped
ports: expose:
- "8081:80" - "80"
environment: environment:
SERVICE_FQDN_PHPMYADMIN:
PMA_HOST: mysql PMA_HOST: mysql
PMA_PORT: 3306 PMA_PORT: 3306
PMA_USER: webgis PMA_USER: ${MYSQL_USER:?webgis}
PMA_PASSWORD: webgis_password PMA_PASSWORD: ${MYSQL_PASSWORD:?}
PMA_ABSOLUTE_URI: ${SERVICE_URL_PHPMYADMIN:-}
depends_on: depends_on:
- mysql mysql:
condition: service_healthy
volumes: volumes:
mysql_data: mysql_data:
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
set -e
docker_process_sql --database=mysql <<-EOSQL
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP
ON gis_spbu.* TO '${MYSQL_USER}'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP
ON data_jalan.* TO '${MYSQL_USER}'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP
ON webgis.* TO '${MYSQL_USER}'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP
ON webgisuas.* TO '${MYSQL_USER}'@'%';
FLUSH PRIVILEGES;
EOSQL