Prepare Docker Compose deployment for Coolify
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user