Otomatisasi Multi-Aplikasi CodeIgniter4 Dengan Bash
By Harjito
Mengelola banyak aplikasi Codeigniter4 jika kita menggunakan Composer, akan mengakibatkan banyak file yang sebenarnya sama, tetapi dipakai berulang di dalam vendor. Sebenarnya kita bisa menggunakan satu vendor untuk berbagi pakai banyak aplikasi. Dalam tutorial ini kita akan memanfaatkan perinah bash untuk otomatisasi.
Menyiapkan Aplikasi CodeIgniter4
Dalam tutorial ini, asumsinya kita belum melakukan instalasi CodeIgniter4, tetapi kita sudah menginstall composer. dananda menggunakan linux. Di contoh ini kita menggunakan distro debian atau turunannya. Untuk distro lain, bisa disesuaikan.
- instalasi appstarter di dalam dengan project-root CodeIgniter4
- pastikan requirement sudah terpenuhi
composer create-project codeigniter4/appstarter CodeIgniter4
- masuk ke dalam project-root
cd CodeIgniter4
- mambuat file bash dengan nama build menggunakan nano (bisa dengan editor lain)
nano build
- Salin script berikut
#!/bin/bash
clear #membersihkan tampilan
read -p "Nama Aplikasi (ex: MyApp): " app
read -p "User aplikasi (ex: Tito): " usr
read -p "Database aplikasi (ex: Tito): " db
read -p "Password aplikasi (ex: 123456): " psw
dir=$PWD;
echo "Menyiapkan Directory kerja $app ..."
if [ -e $app ]; then
echo "Directory $app sudah tersedia ... Silahkan pilih nama yang lain..."
exit;
else
mkdir $app
echo "Menyalin directory app ke dalam directory $app ..."
rsync -az "app/" "$app/app/"
echo "Menyalin directory writable ke dalam directory $app ..."
rsync -az "writable/" "$app/writable/"
echo "Menyalin directory public ke dalam directory $app ..."
rsync -az "public/" "$app/public/"
echo "Menyalin berkas spark ke dalam directory $app ..."
rsync -az "spark" "$app/spark"
echo "Menyalin berkas env ke dalam directory $app ..."
rsync -az "env" "$app/.env"
sed -i 's/# CI_ENVIRONMENT = production/CI_ENVIRONMENT = development/g' "${app}/.env"
sed -i 's/# app./app./g' "${app}/.env"
sed -i "s/ci4/${db}/g" "${app}/.env"
sed -i 's/# database./database./g' "${app}/.env"
sed -i "s/username = root/username = ${usr}/g" "${app}/.env"
sed -i "s/password = root/password = ${psw}/g" "${app}/.env"
sed -i "s/ci_session/${app}_session/g" "${app}/.env"
echo "Mengatur ulang path vendor di $app/app/Config/Constants.php"
sed -i "s/'vendor\/autoload.php'/'..\/vendor\/autoload.php'/" "$app/app/Config/Constants.php"
sed -i "s/..\/vendor/..\/..\/vendor/" "$app/app/Config/Paths.php"
chmod 777 "$app/writable/" -R
echo " Directory kerja $app sudah siap..."
fi
clear
echo "menyiapkan database ..."
echo "Note: password tidak ditampilkan saat diketik"
read -p "User Database (ex: root): " usrdb
read -sp "Input password MySQL untuk user root: " rootpasswd
mysql -u${usrdb} -p${rootpasswd} -e "CREATE DATABASE IF NOT EXISTS ${db} /*\!40100 DEFAULT CHARACTER SET utf8 */;"
mysql -u${usrdb} -p${rootpasswd} -e "CREATE USER IF NOT EXISTS ${usr}@localhost IDENTIFIED BY '${psw}';"
mysql -u${usrdb} -p${rootpasswd} -e "GRANT ALL PRIVILEGES ON ${app}.* TO '${usr}'@'localhost';"
mysql -u${usrdb} -p${rootpasswd} -e "FLUSH PRIVILEGES;"
cd "$app"
php spark serve
- simpan
- jalankan dengan perintah ./build
- begitu dijalankan, kita akan dibimbing (schaffolding) untuk melengkapi konfigurasi
Struktur Direktory
Nantinya apliaksi CodeIgniter kita seua terkumpul dalam satu direktory yaitu di project-root, di dalamnya ada beberapa folder seperti struktur berikut.
- CodeIgniter4
- app/ (dari appstarter, jangan digunakan karena ini sebagai master aplikasi)
- vendor/
- writable/
- public/ (dari appstarter)
- env
- spark
- build
- MyApp1/ (aplikasi yang dibangun dengan perintah build)
- app/
- public/
- writable/
- .env
- spark
- MyApp2/ (aplikasi yang dibangun dengan perintah build)
- app/
- public/
- writable/
- .env
- spark
Jika kita perhatikan folder vendor hanya satu, dan digunakan oleh MyApp1, MyApp2, dst.
Dalam tutorial ini, user database untuk aplikasi bisa sama atau beda dengan user root, disarankan setiap aplikasi memiliki user berbeda dengan aplikasi lain agar kalau ada permasalahan terkait db bisa dilokalisasi. Misalkan password aplikasi bocor, maka penyerang hanya bisa masuk di database aplikasi tersebut, sedangkan adtabase lain aman. Script ini sudah diujocoba di di komputer dengan spesifikasi sebagai berikut
- OS Linux Mint 19.3
- PHP versi 8.0.3
- Datamase mariadb10
Tags:
Ikuti terus tutorial saya di e-Project dan channel
saya di