Melakukan Deployment Aplikasi Laravel pada VPS
09 Mar 2016
Introduction
Framework Laravel merupakan framework yang agak unik dalam hal deployment. Mengapa demikian? Jika kita lihat pada struktur direktori laravel maka kita akan mendapati sebuah folder dengan nama public. Folder public ini merupakan satu-satunya folder yang nantinya akan diletakan di dalam document root pada web server apache (misal: /var/www/html). Mengapa demikian? hal ini dilakukan untuk meningkatkan keamanan dari aplikasi web yang dibuat. Dengan meletakkan folder non-public app, bootstrap, config, database, .env, dll diluar document root apache, maka direktori-direktori tersebut tidak akan dapat diakses secara langsung oleh user melalui web browser mereka.
Lalu, bagaimana cara melakukan deployment aplikasi web berbasis laravel yang baik dan benar? berikut ini adalah langkah-langkah yang harus dilakukan dalam melakukan deployment aplikasi laravel pada server VPS (Virtual Private Server, Non-Cpanel) dimana kita memiliki akses terhadap root user dan terminal melalui ssh. Asumsi yang digunakan adalah bahwa kita menyimpan source code kita di dalam cloud repository seperti gitlab, github atau bitbucket.
Server Requirement
- PHP >= 5.5.9
- OpenSSL Extension
- PDO PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
- Git
- Composer
Deployment
- Clone repository project laravel yang kita buat dengan mengetikkan perintah
git clone(misal:git clone https://server.badr.co.id:8001/salman.farisi/my-web.git). - Masuk kedalam direktori project (misal:
cd my-web). - Jalankan
composer installuntuk menginstall seluruh dependency yang dimiliki. - Pindahkan folder project
my-webkedalam direktori/var/www. - Masuk kedalam direktori
/var/www/my-web. - Copy direktori
publicke dalam direktori document root apache/var/www/html/. -
Edit file
/var/ww/html/public/index.phpdan ubah baris berikut ini:require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php';hingga menjadi:
require __DIR__.'/../../my-web/bootstrap/autoload.php'; $app = require_once __DIR__.'/../../my-web/bootstrap/app.php'; - Ubah permission direktori
/var/www/my-webdengen mengetikkan perintahchown -R apache:apache /var/www/my-web. - Ubah permission direktori
/var/www/html/publicdengan mengetikkan perintahchown -R apache:apache /var/www/html/public. - Jangan lupa untuk mengubah konfigurasi aplikasi pada file
/var/www/my-web/.envagar sesuai dengan konfigurasi server yang sudah disiapkan. - Hapus baris yang mengandung
APP_ENV=localpada file/var/www/my-web/.env. Untuk menjadikan aplikasi kita masuk kedalam mode production. - Sampai pada tahap ini proses deployment aplikasi berbasis laravel sudah selesai dan kita dapat mengakses website yang kita buat pada alamat
http://mydomain.tld/public. - Untuk menghilangkan path
publicpada URL website kita, silahkan merujuk para artikel Menghilangkan Path “public” pada URL Aplikasi Laravel.
Penanganan Permission Denied
Terkadang ada kasus dimana kita diberikan akses user non-root dan direktori document root dari apache mengarah ke direktori yang dimiliki oleh user tertentu seperti misalnya dayat, pulung atau bambolz. Untuk memastikannya kita bisa menggunakan perintah ls -al untuk melihat user dan group permission dari document root yang kita miliki. sebagai contoh, lihat output dari peintah ls -al untuk direktori /var/www/public_html dibawah ini:
[bambolz@dev-badr public_html]$ ls -al
total 20
drwxr-xr-x 4 bambolz apache 4096 Mar 29 18:55 .
drwxr-xr-x 5 bambolz apache 4096 Mar 30 08:43 ..
drwxr-xr-x 2 bambolz apache 4096 Mar 29 19:09 myapp
drwxr-xr-x 2 bambolz apache 4096 Mar 29 19:04 myapp-api
-rw-r--r-- 1 bambolz apache 36 Mar 28 14:24 index.html
Output diatas menunjukkan bahwa file / direktori yang berada di dalam document root kita memiliki owner bernama bambolz dan group apache. Berdasarkan informasi ini kita dapat berasumsi bahwa user bambolz sudah dimasukkan kedalam group apache sehingga user bambolz bisa menulis di dalam direktori tersebut tetapi user apache1 hanya bisa membaca (karena bukan owner). Untuk membuat user apache dapat menulis di dalam direktori tertentu (misal: direktori storage/log pada Laravel), kita harus menambahkan permission write (w) untuk group (g) dengan cara mengetikkan perintah:
chmod g+w storage/log
atau
chmod -R g+w storage/
Dengan menerapkan cara diatas, user apache (web server) sudah memiliki permission untuk menulis di dalam direktori storage sehingga error permission denied tidak akan terjadi lagi.
-
Secara default apache web server berjalan dengan menggunakan user
apache(Centos, RHEL dan turunannya) atauwww-data(Ubuntu, Debian dan turunannya). sehingga setiap operasi yang dilakukan (misal: menulis dan membaca file) akan menggunakan user tersebut. ↩