Last Updated:

Bikin Docker Compose Sakti untuk Web Developers

RAKIFSUL
RAKIFSUL Artikel

Saat itu masih dini hari. Saya teringat bahwa saya harus menginstall aplikasi bernama AppSmith karena saya sangat penasaran dengan Low Code.

Istilah Low Code dan No Code sudah saya dengar beberapa waktu yang lalu, namun baru malam itu saya benar-benar ingin merasakannya.

Saya buka website resminya, langsung ke dokumentasinya.

Tidak terlalu sulit rupanya, hanya beberapa baris kode docker-compose seperti ini:

version: "3"
services:
   appsmith:
     image: index.docker.io/appsmith/appsmith-ee
     container_name: appsmith
     ports:
         - "80:80"
         - "443:443"
     volumes:
         - ./stacks:/appsmith-stacks
     restart: unless-stopped

Seperti biasa, saya ubah portnya menjadi sesuatu yang lain dari 80. Begitu juga port 443-nya.

Pulling... pulling... extracting... Beres.

Langsung menuju localhost dan jebret!! AppSmith siap digunakan.

Di window awalnya, saya meregistrasi email dan password saya, kemudian login.

Window selanjutnya, AppSmith mempertanyakan apakah saya ingin menghubungkannya dengan database tertentu. Saya pilih skip saja.

Karena di awal telah dibuatkan project default secara otomatis, saya mengeksplorasinya dan sampai pada pojok kiri bawah saya menemukan tombol untuk mengoneksikan database.

Karena saya telah menginstall WordPress secara non-docker, serta MariaDB dan phpMyAdmin secara docker, saya ingin mencoba untuk mengoneksikan MariaDB tadi.

Dan disinilah masalah dimulai...

Saya coba masukkan host: 127.0.0.1, port: 3306, dan sisanya termasuk username dan password. Ternyata tidak bisa terkoneksi.

Saya coba lagi masukkan host: 172.17.0.1 karena itu adalah alamat dari sistem operasi Ubuntu saya dalam sudut pandang container. Tidak bisa juga.

Beragam cara telah dicoba, tapi gagal.

Akhirnya, saya menyimpulkan bahwa ini mungkin disebabkan parameter --bind-address yang bukan 0.0.0.0, tapi saya tidak ingin memperpanjang masalah.

Saya langsung ambil suatu langkah yang ekstrim.

Idenya adalah Bagaimana jika saya satukan saja docker-compose dari MariaDB, phpMyAdmin, dan AppSmith.

Dasar pemikiran tersebut adalah, jika phpMyAdmin dan MariaDB yang berada dalam satu docker-compose bisa terkoneksi tanpa masalah, berarti AppSmith juga.

Tapi, karena merasa tidak ingin mengulang-ulang langkah serupa, saya sertakan juga WordPress dan Node-Red ke dalamnya.

Yang ujungnya, hasil docker-compose.yml saya seperti ini:

version: '3'

services:
  mariadb:
    image: mariadb:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: user
    ports:
      - "3306:3306"
    volumes:
      - ./mariadb:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    restart: always
    environment:
      PMA_HOST: mariadb
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "8001:80"
    depends_on:
      - mariadb
      
  appsmith:
     image: index.docker.io/appsmith/appsmith-ce
     container_name: appsmith
     ports:
         - "8002:80"
         - "8003:443"
     volumes:
         - ./appsmith-stacks:/appsmith-stacks
     restart: unless-stopped
     depends_on:
       - mariadb
      
  wordpress:
    image: wordpress
    container_name: wordpress
    restart: unless-stopped
    ports:
        - 8004:80
    environment:
      WORDPRESS_DB_HOST: mariadb:3306
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: root
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wordpress:/var/www/html
    depends_on:
      - mariadb
      
  node-red:
    image: nodered/node-red:4.0.9
    container_name: node-red
    restart: unless-stopped
    ports:
        - 8012:1880
    volumes:
      - ./node_red:/data
    depends_on:
      - mariadb

Yang perlu Anda perhatikan pada docker-compose tadi adalah:

  • semua services selain mariadb memiliki depends_on: mariadb
  • beberapa services memiliki volume yang di-mount ke folder tertentu, seperti ./wordpress:/var/www/html. salah satu alasannya adalah agar saya bisa mengeditnya nanti.
  • beberapa port mungkin perlu Anda ganti jika sudah terpakai.

Jika Anda ingin mencobanya, masukkan saja docker-compose.yml tadi ke suatu folder, buka terminal di sana dan jalankan:

docker compose up -d

Setelah container berjalan, Anda bisa mengoneksikan MariaDB dari AppSmith Anda seperti screenshot ini:

Adapun phpMyAdmin otomatis membacanya.

Dalam kasus ini, WordPress jika dibuka alamatnya akan menuju ke halaman penginstallan. Untuk mengisi detailnya serupa dengan AppSmith tadi.

Yang jelas, di WordPress, Anda harus membuatkan 1 database dulu via phpMyAdmin, sedangkan di AppSmith, jika Anda mau Anda bisa menggunakan database WordPress yang sudah jadi atau buat baru lagi.

Dalam hal Node-Red, saya belum tahu cara mengoneksikannya ke MariaDB, jadi skip saja...

Setelah saya lakukan hal tadi, saya jadi menghemat waktu, kopi, dan pikiran saya.

Lumayan.