menggunakan .env variable pada codeigniter 3
Di codeigniter 3, secara default konfigurasi untuk credential dan konfigurasi lainnya disimpan dibeberapa file (database.php, constants.php dan config.php, dll). Menurut 12 factor app metode seperti itu kurang bagus karena konfigurasi tersebar dimana-mana. Akan kesulitan jika aplikasi dideploy diberbagai environment (dev, staging, production) karena semua file konfigurasi harus dilist dan direplace satu-persatu disetiap environment.
12 factor app menyarankan untuk menggabungkan konfigurasi dalam 1 file saja, yaitu di environment variables (bisa disebut juga env vars atau env). Environment variables berada di 3 level:
- di level OS (
env OS
), - level webserver (
env webserver
) - level file
.env
.
Disini saya lebih prefer untuk menggunakan environment variable di file .env dibandingkan env OS dan env webserver. Karena jika konfigurasi ditaruh di env OS, jika ada penambahan konfigurasi harus di relogin OSnya supaya konfigurasi barunya bisa terbaca (yang saya tahu), begitu juga di env webserver harus reload / restart webservernya, sementara di file .env tidak.
Untuk menggunakan file .env kita bisa memanfaatkan phpdotenv
https://github.com/vlucas/phpdotenv. Disini saya akan menggunakan spesifikasi sebagai berikut:
- codeigniter versi 3.1.0
- phpdotenv versi 2.1
- php 7.4
- composer
Pastikan versi diatas sesuai, jika tidak kemungkinan scriptnya tidak akan bisa jalan.
Install phpdotenv
Pastikan composer sudah terinstall di komputer kalian. Masuk ke root folder project kalian, dan jalankan command berikut:
composer require vlucas/phpdotenv:^2.1
Setelah itu composer akan mendownload phpdotenv, tunggu sekitar 1 menitan
./composer.json has been updated
Running composer update vlucas/phpdotenv
Loading composer repositories with package information
Updating dependencies
Lock file operations: 3 installs, 0 updates, 0 removals
- Locking mikey179/vfsstream (v1.1.0)
- Locking symfony/polyfill-ctype (v1.27.0)
- Locking vlucas/phpdotenv (v2.6.9)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Downloading mikey179/vfsstream (v1.1.0)
- Downloading symfony/polyfill-ctype (v1.27.0)
- Downloading vlucas/phpdotenv (v2.6.9)
- Installing mikey179/vfsstream (v1.1.0): Extracting archive
- Installing symfony/polyfill-ctype (v1.27.0): Extracting archive
- Installing vlucas/phpdotenv (v2.6.9): Extracting archive
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
2 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found
Jika sudah terinstall, maka akan ada folder vlucas didalam folder vendor
Setup konfigurasi phpdotenv
Selanjutnya kita akan:
- buat file .env di root project,
- kemudian load file .env ke file the_env.php
- kemudian load file the_env.php ke dalam index.php
- panggil env variable di database.php
Buat file .env
Buat sebuah file .env diroot project kalian. Contoh disini kita akan membuat konfigurasi untuk database, bisa kita isikan seperti ini:
DB_HOST=localhost
DB_USERNAME=test
DB_PASSWORD=567
DB_DATABASE=db_test
Load file .env ke the_env.php
Script dibawah ini tidak langsung saya copas ke index.php, karena konfigurasi path dan nama filenya bisa berubah-ubah. Jadi saya buat 1 file baru dengan nama the_env.php.
Buat file the_env.php diroot project, lalu copy script berikut
<?php
require_once 'vendor/autoload.php';
try {
$dotenv = new Dotenv\Dotenv('./', '.env');
$dotenv->load();
} catch (Exception $e) {
echo "cannot load env";
}
?>
Penjelasan:
- kita load file autoload.php dari folder vendor.
- setelah itu jalankan phpdotenv dengan memanggil class Dotenv
- masukkan parameter pertama ./ artinya set path ke root project, dan .env artinya load file .env dari root project (./)
- jika file .env tidak ada di root project, maka masuk ke exception dan tampilkan pesan “cannot load env”
Load file the_env.php ke dalam index.php
Selanjutnya load the_env.php ke index.php.
Buka file index.php di root project. Lalu tambahkan script berikut pada baris awal:
<?php
require_once "the_env.php";
Panggil env variable di database.php
Sekarang kita tinggal setting di database.php. Biasanya konfigurasi database.php seperti ini:
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'test',
'password' => '567',
'database' => 'db_test',
'dbdriver' => 'mysqli',
Kita tinggal ganti saja dengan
$db['default'] = array(
'dsn' => '',
'hostname' => getenv('DB_HOST'),
'username' => getenv('DB_USERNAME'),
'password' => getenv('DB_PASSWORD'),
'database' => getenv('DB_DATABASE'),
'dbdriver' => 'mysqli',
Penjelasan:
- semua variable yang kita panggil di getenv(‘<variable>’) berasal dari file .env yang sudah kita buat sebelumnya
Tips menggunakan .env di production
Pada tahap diatas kita menaruh file .env di root project. Cara tersebut tidak boleh dilakukan di production, karena orang lain bisa membukanya lewat browser
http://<yourapp_in_production>.env
File .env harus disimpan di tempat yang aman diserver, misal di /var/.env. Jadi kita bisa sesuaikan file the_env.php menjadi seperti ini:
<?php
require_once 'vendor/autoload.php';
try {
$dotenv = new Dotenv\Dotenv('/var/', '.env');
$dotenv->load();
} catch (Exception $e) {
echo "cannot load env";
}
?>
Pastikan juga file /var/.env mendapatkan cukup akses supaya php bisa membacanya.
—-
Demikianlah tutorial menggunakan .env variable pada codeigniter 3. Semoga bermanfaat!