Prepare Docker Compose deployment for Coolify
This commit is contained in:
@@ -3,6 +3,10 @@ DB_PORT=3306
|
||||
DB_USER=webgis
|
||||
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_DATA_JALAN=data_jalan
|
||||
DB_NAME_WEBGIS=webgis
|
||||
|
||||
@@ -2,13 +2,23 @@
|
||||
|
||||
## 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
|
||||
DB_HOST=mysql
|
||||
DB_PORT=3306
|
||||
DB_USER=webgis
|
||||
DB_PASSWORD=change-this-password
|
||||
DB_USER=${MYSQL_USER}
|
||||
DB_PASSWORD=${MYSQL_PASSWORD}
|
||||
|
||||
DB_NAME_GIS_SPBU=gis_spbu
|
||||
DB_NAME_DATA_JALAN=data_jalan
|
||||
@@ -16,16 +26,24 @@ DB_NAME_WEBGIS=webgis
|
||||
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
|
||||
CREATE USER 'webgis'@'%' IDENTIFIED BY 'change-this-password';
|
||||
GRANT ALL PRIVILEGES ON gis_spbu.* TO 'webgis'@'%';
|
||||
GRANT ALL PRIVILEGES ON data_jalan.* TO 'webgis'@'%';
|
||||
GRANT ALL PRIVILEGES ON webgis.* TO 'webgis'@'%';
|
||||
GRANT ALL PRIVILEGES ON webgisuas.* TO 'webgis'@'%';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON gis_spbu.* TO 'webgis'@'%';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON data_jalan.* TO 'webgis'@'%';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON webgis.* TO 'webgis'@'%';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON webgisuas.* TO 'webgis'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
|
||||
+31
-18
@@ -1,50 +1,63 @@
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
container_name: webgis_app
|
||||
ports:
|
||||
- "8080:80"
|
||||
restart: unless-stopped
|
||||
expose:
|
||||
- "80"
|
||||
environment:
|
||||
SERVICE_FQDN_WEBGIS:
|
||||
DB_HOST: mysql
|
||||
DB_PORT: 3306
|
||||
DB_USER: webgis
|
||||
DB_PASSWORD: webgis_password
|
||||
DB_USER: ${MYSQL_USER:?webgis}
|
||||
DB_PASSWORD: ${MYSQL_PASSWORD:?}
|
||||
DB_NAME_GIS_SPBU: gis_spbu
|
||||
DB_NAME_DATA_JALAN: data_jalan
|
||||
DB_NAME_WEBGIS: webgis
|
||||
DB_NAME_KEMISKINAN: webgisuas
|
||||
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:
|
||||
image: mysql:8.0
|
||||
container_name: webgis_mysql
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root_password
|
||||
MYSQL_USER: webgis
|
||||
MYSQL_PASSWORD: webgis_password
|
||||
ports:
|
||||
- "3307:3306"
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?}
|
||||
MYSQL_DATABASE: gis_spbu
|
||||
MYSQL_USER: ${MYSQL_USER:?webgis}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD:?}
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
- ./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
|
||||
- ./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:
|
||||
image: phpmyadmin/phpmyadmin
|
||||
container_name: webgis_phpmyadmin
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8081:80"
|
||||
expose:
|
||||
- "80"
|
||||
environment:
|
||||
SERVICE_FQDN_PHPMYADMIN:
|
||||
PMA_HOST: mysql
|
||||
PMA_PORT: 3306
|
||||
PMA_USER: webgis
|
||||
PMA_PASSWORD: webgis_password
|
||||
PMA_USER: ${MYSQL_USER:?webgis}
|
||||
PMA_PASSWORD: ${MYSQL_PASSWORD:?}
|
||||
PMA_ABSOLUTE_URI: ${SERVICE_URL_PHPMYADMIN:-}
|
||||
depends_on:
|
||||
- mysql
|
||||
mysql:
|
||||
condition: service_healthy
|
||||
|
||||
volumes:
|
||||
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