Skip to content

Latest commit

 

History

History
543 lines (374 loc) · 24.8 KB

valet.md

File metadata and controls

543 lines (374 loc) · 24.8 KB

Laravel Valet

Pengenalan

Laravel Valet adalah lingkungan pengembangan minimalis untuk macOS. Laravel Valet mengonfigurasi Mac Anda untuk selalu menjalankan Nginx pada latar belakang saat mesin Anda dinyalakan. Kemudian, dengan menggunakan DnsMasq, Valet memproksi semua permintaan pada domain *.test untuk mengarahkan ke situs-situs yang terinstal di mesin lokal Anda.

Dengan kata lain, Valet adalah lingkungan pengembangan Laravel yang sangat cepat yang menggunakan RAM sekitar 7 MB. Valet bukanlah pengganti untuk Sail atau Homestead, tetapi menyediakan alternatif yang bagus jika Anda menginginkan dasar-dasar yang fleksibel, lebih suka kecepatan ekstrem, atau bekerja pada mesin dengan jumlah RAM yang terbatas.

Tidak menutup kemungkinan, Valet juga tidak terbatas untuk :

<style> #valet-support > ul { column-count: 3; -moz-column-count: 3; -webkit-column-count: 3; line-height: 1.9; } </style>

Selain itu, Anda dapat memperluas dukungan Valet dengan menggunakan driver khusus Anda sendiri.

Instalasi

Peringatan
Valet memerlukan macOs dan Homebrew. Sebelum melakukan instalasi, sebaiknya Anda memastikan jika tidak ada program seperti Apache atau Nginx yang sedang bertaut pada koneksi lokal dengan port 80.

Untuk memulai, pertama-tama Anda harus memastikan jika Homebrew sudah menggunakan versi terbaru dengan menggunakan perintah update :

brew update

Selanjutnya, Anda harus menggunakan Homebrew untuk menginstal PHP:

brew install php

Setelah menginstal PHP, Anda siap untuk menginstal Composer Package Manager. Perlu diingat, Anda harus memastikan jika direktori ~/.composer/vendor/bin ada di dalam "PATH". Setelah Composer terinstal, Anda dapat menginstal Laravel Valet sebagai paket Composer yang bersifat global:

composer global require laravel/valet

Setelah semua selesai, silahkan jalankan Valet dengan menggunakan valet install. Perintah ini akan mengonfigurasi dan menginstal Valet dan DnsMasq. Daemon-daemon yang diperlukan oleh Valet akan dikonfigurasi untuk berjalan ketika sistem menyala.

valet install

Setelah Valet terinstal, cobalah melakukan ping ke domain *.test yang mana saja pada terminal Anda menggunakan perintah seperti ping foobar.test. Jika Valet telah terinstal dengan sempurna, maka domain akan merespon dengan 127.0.0.1.

Valet akan secara otomatis memulai layanan yang diperlukan setiap kali mesin Anda dinyalakan.

Versi PHP

Valet memungkinkan Anda untuk mengganti versi PHP menggunakan perintah valet use php@version. Valet akan menginstal versi PHP secara spesifik menggunakan Homebrew jika belum terinstal.

valet use [email protected]

valet use php

Anda juga dapat membuat file .valetphprc di dalam direktori akar (root) proyek Anda. File .valetphprc harus berisi versi PHP yang ingin digunakan oleh situs:

Setelah semua file telah dibuat, Anda cukup menjalankan perintah valet use. Perintah tersebut akan menentukan versi PHP yang diinginkan oleh situs dengan membaca berkas tersebut.

Peringatan
Valet hanya akan menjalankan satu versi PHP pada satu waktu, walaupun Anda memiliki beberapa versi PHP yang berbeda.

Basis Data

Jika aplikasi Anda membutuhkan basis data, Silahkan lihat DBngin, yang menyediakan alat manajemen basis data yang lengkap dan gratis yang mencakup MySQL, PostgreSQL, dan Redis. Setelah DBngin terinstal, Anda dapat menyambungkan basis data Anda pada 127.0.0.1 menggunakan nama pengguna root dan string kosong untuk kata sandi.

Mengatur Ulang Instalasi Anda

Jika Anda mengalami masalah untuk menjalankan Valet yang sesuai, jalankan perintah composer global require laravel/valet yang diikuti dengan valet install, perintah ini akan mereset instalasi Anda dan dapat menyelesaikan berbagai masalah. Dalam kasus yang jarang terjadi, Anda mungkin perlu untuk melakukan "hard reset" Valet dengan mengeksekusi valet uninstall --force diikuti dengan valet install.

Memperbarui Valet

Anda dapat memperbarui instalasi Valet dengan menjalankan perintah composer global require laravel/valet pada terminal Anda. Setelah melakukan pembaruan, baiknya Anda menjalankan perintah valet install sehingga Valet dapat melakukan pembaruan tambahan pada file konfigurasi Anda jika diperlukan.

Menyediakan Situs

Setelah Valet terinstal, Anda siap untuk mulai membuka aplikasi Laravel Anda. Valet menyediakan dua perintah untuk membantu Anda menyediakan aplikasi-aplikasi Anda: park dan link.

Perintah park

Perintah park akan mendaftarkan sebuah direktori pada mesin Anda yang berisi aplikasi-aplikasi Anda. Setelah direktori tersebut "diparkir" dengan Valet, semua direktori di dalamnya akan dapat diakses di browser web Anda pada http://<nama-direktori>.test:

cd ~/kumpulan-proyek

valet park

Sekarang, aplikasi apa pun yang Anda buat di dalam direktori yang telah "terparkir" tersebut akan secara otomatis tersedia (dapat diakses) dengan menggunakan konvensi http://<nama-direktori>.test. Jadi, jika direktori "terparkir" Anda berisi direktori bernama "laravel", aplikasi di dalam direktori tersebut akan dapat diakses pada http://laravel.test. Selain itu, Valet secara otomatis mengizinkan Anda untuk mengakses situs menggunakan subdomain-subdomain wildcard (http://foo.laravel.test).

Perintah link

Perintah link juga dapat digunakan untuk menyajikan aplikasi Laravel Anda. Perintah ini berguna jika Anda ingin menyajikan satu situs dalam sebuah direktori dan bukan seluruh direktori:

cd ~/kumpulan-proyek/laravel

valet link

Setelah aplikasi berhasil ditautkan ke Valet menggunakan perintah link, Anda dapat mengakses aplikasi tersebut menggunakan nama direktorinya. Jadi, situs yang ditautkan pada contoh di atas dapat diakses pada http://laravel.test. Selain itu, Valet secara otomatis mengizinkan Anda untuk mengakses situs menggunakan subdomain-subdomain wildcard (http://foo.laravel.test).

Jika Anda ingin menyediakan aplikasi dengan nama host yang berbeda, Anda dapat mengoper nama host ke perintah link. Sebagai contoh, Anda dapat menjalankan perintah berikut untuk membuat aplikasi tersedia di http://aplikasi-gue.test:

cd ~/kumpulan-proyek/laravel

valet link aplikasi-gue

Anda juga dapat menyajikan aplikasi pada/menjadi subdomain menggunakan perintah link:

valet link api.aplikasi-gue

Anda juga dapat menjalankan perintah links untuk menampilkan semua daftar direktori yang anda miliki:

valet links

Perintah unlink dapat digunakan untuk menghancurkan tautan simbolis (symbolic link) untuk sebuah situs:

cd ~/kumpulan-proyek/laravel

valet unlink

Mengamankan Situs dengan TLS

Secara default, Valet menyajikan situs melalui (protokol) HTTP. Namun, jika Anda ingin menyajikan situs melalui TLS yang terenkripsi menggunakan HTTP/2, Anda dapat menggunakan perintah secure. Sebagai contoh, jika situs Anda disajkian oleh Valet pada domain laravel.test, Anda harus menjalankan perintah berikut ini untuk mengamankannya:

valet secure laravel

Untuk "tidak mengamankan" sebuah situs dan kembali melayani lalu lintas melalui HTTP biasa, gunakan perintah unsecure. Seperti perintah secure, perintah ini menerima nama host yang tidak ingin diamankan:

valet unsecure laravel

Menampilkan Situs Default

Terkadang, Anda mungkin ingin mengonfigurasi Valet untuk menampilkan situs "default" alih-alih menampilkan 404 saat mengunjungi domain test yang tidak dikenal. Untuk melakukan ini, Anda dapat menambahkan opsi default ke file konfigurasi ~/.config/valet/config.json, yang berisi path ke situs yang akan berfungsi sebagai situs default Anda:

"default": "/Users/Sally/Sites/example-site",

Versi PHP Per-Situs

Secara default, Valet menggunakan instalasi PHP global Anda untuk menyajikan situs-situs Anda. Namun, jika Anda perlu mendukung beberapa versi PHP pada berbagai situs, Anda dapat menggunakan perintah isolate untuk menentukan versi PHP yang harus digunakan oleh situs tertentu. Perintah isolate mengonfigurasi Valet untuk menggunakan versi PHP yang ditentukan untuk situs yang terletak di direktori kerja Anda saat ini:

cd ~/kumpulan-proyek/situs-contoh

valet isolate [email protected]

Jika nama situs anda tidak sesuai dengan direktori tempat aplikasi ada berada, Anda dapat menentukan nama situs dengan opsi --site:

valet isolate [email protected] --site="nama-situs"

Demi kenyamanan, Anda dapat menggunakan perintah valet php, composer, dan which-php untuk menjalankan panggilan secara langsung ke CLI PHP atau alat lain yang sesuai dengan versi PHP yang dikonfigurasikan pada situs tersebut:

valet php
valet composer
valet which-php

Anda dapat menjalankan perintah isolated untuk menampilkan semua daftar situs terisolasi yang Anda miliki serta versi PHP-nya:

valet isolated

Untuk mengembalikan situs ke Versi PHP yang terinstal secara global, Anda dapat menggunakan perintah unisolate dari direktori root situs.

valet unisolate

Membagikan Situs

Valet juga menyertakan perintah untuk membagikan situs lokal anda ke seluruh dunia, gunanya untuk mempermudah pengujian pada perangkat mobile atau dibagikan kepada rekan kerja dan mitra.

Membagikan Situs Melalui Ngrok

Untuk membagikan situs, arahkan ke direktori situs pada terminal Anda dan jalankan perintah share milik Valet. URL yang dapat diakses publik akan dimasukkan ke dalam clipboard Anda dan siap untuk ditempelkan langsung pada browser Anda atau dibagikan kepada tim Anda:

cd ~/kumpulan-proyek/laravel

valet share

Untuk berhenti membagikan situs Anda, Anda dapat menekan Control + C. Membagikan situs Anda menggunakan Ngrok mengharuskan Anda untuk memiliki akun Ngrok dan mengatur sebuah autentikasi.

Note
Anda dapat memberikan parameter Ngrok tambahan pada perintah share, seperti valet share --region=eu. Untuk informasi lebih lanjut, lihat dokumentasi Ngrok.

Membagikan Situs melalui Expose

Jika Expose Anda telah terinstal, Anda bisa membagikan situs anda dengan mengarahkan ke direktori situs pada terminal Anda dan menjalankan perintah expose. Lihat dokumentasi Expose untuk informasi mengenai parameter tambahan yang tersedia untuk perintah. Setelah membagikan situs, Expose akan menampilkan URL yang dapat dibagikan yang dapat Anda gunakan pada perangkat lain atau pada anggota tim yang lain:

cd ~/kumpulan-proyek/laravel

expose

Untuk berhenti membagikan, silahkan tekan Control + C

Membagikan Situs pada Jaringan Lokal

Valet membatasi lalu lintas yang masuk ke antarmuka internal 127.0.0.1 secara default sehingga mesin pengembangan Anda tidak terpapar risiko keamanan dari Internet.

Jika Anda ingin mengizinkan perangkat lain pada jaringan lokal Anda untuk mengakses situs Valet pada mesin Anda melalui alamat IP mesin Anda (misalnya: 192.168.1.10/aplikasi-gue.test), Anda perlu memodifikasi file konfigurasi Nginx secara manual yang sesuai untuk situs tersebut untuk menghapus pembatasan pada direktif listen. Anda harus menghapus awalan 127.0.0.1: pada direktif listen untuk port 80 dan 443.

Jika Anda belum menjalankan valet secure pada proyek, Anda dapat membuka akses jaringan untuk semua situs non-HTTPS dengan memodifikasi file /usr/local/etc/nginx/valet/valet.conf. Namun, jika Anda menyediakan situs proyek melalui HTTPS (Anda telah menjalankan valet secure untuk situs tersebut) maka Anda harus memodifikasi file ~/.config/valet/Nginx/nama-aplikasi.test.

Setelah Anda memperbarui konfigurasi Nginx, jalankan perintah valet restart untuk menerapkan perubahan konfigurasi.

Variabel Lingkungan Khusus Situs

Beberapa aplikasi yang menggunakan kerangka kerja lain mungkin bergantung pada variabel lingkungan server tetapi tidak menyediakan cara mengonfigurasi variabel tersebut untuk proyek Anda. Valet memungkinkan Anda untuk mengonfigurasi variabel lingkungan spesifik/khusus situs tersebut dengan menambahkan file .valet-env.php di dalam root proyek Anda. File ini akan mengembalikan sebuah larik pasangan situs-variabel lingkungan yang akan ditambahkan ke larik $_SERVER global untuk setiap situs yang ditentukan dalam larik tersebut:

<?php

return [
    // Set $_SERVER['key'] to "value" for the laravel.test site...
    'laravel' => [
        'key' => 'value',
    ],

    // Set $_SERVER['key'] to "value" for all sites...
    '*' => [
        'key' => 'value',
    ],
];

Melakukan Proksi Layanan

Terkadang, Anda mungkin ingin memproksi domain Valet ke layanan lain pada mesin lokal Anda. Sebagai contoh, Anda mungkin terkadang perlu menjalankan Valet sembari menjalankan situs terpisah di Docker; namun, Valet dan Docker tidak dapat menautkan port 80 secara bersamaan.

Untuk mengatasi hal ini, Anda dapat menggunakan perintah proxy untuk menghasilkan proksi. Sebagai contoh, Anda dapat memproksi semua lalu lintas dari http://elasticsearch.test ke http://127.0.0.1:9200:

# Proxy melalui HTTP...
valet proxy elasticsearch http://127.0.0.1:9200

# Proxy melalui TLS + HTTP/2...
valet proxy elasticsearch http://127.0.0.1:9200 --secure

Anda dapat menghapus sebuah proksi dengan menggunakan perintah unproxy:

valet unproxy elasticsearch

Anda juga dapat menggunakan perintah proxies untuk menampilkan daftar semua konfigurasi situs yang telah dilakukan proksi:

valet proxies

Driver Valet Kustom

Anda dapat menulis "driver" Valet Anda sendiri untuk menyediakan aplikasi-aplikasi PHP yang berjalan pada sebuah kerangka kerja atau CMS yang tidak didukung oleh Valet. Ketika Anda menginstal Valet, direktori ~/.config/valet/Drivers dibuat yang berisi file SampleValetDriver.php. File ini berisi contoh implementasi driver untuk mendemonstrasikan cara menulis driver yang kustom. Menulis driver hanya memerlukan implementasi tiga metode: serves, isStaticFile, dan frontControllerPath.

Ketiga metode tersebut menerima nilai $sitePath, $siteName, dan $uri sebagai argumennya. $sitePath adalah path lengkap (fully qualified path) ke situs yang ingin disajikan pada mesin Anda, seperti /Users/Lisa/kumpulan-proyek/aplikasi-gue. $siteName adalah bagian "host"/"nama situs" dari domain (aplikasi-gue). $uri adalah URI untuk permintaan yang masuk (/foo/bar).

Setelah Anda menyelesaikan driver Valet khusus Anda, letakkan pada direktori ~/.config/valet/Drivers dengan menggunakan konvensi penamaan FrameworkValetDriver.php. Sebagai contoh, jika Anda menulis driver valet khusus untuk WordPress, maka nama file Anda akan menjadi WordPressValetDriver.php.

Sekarang, kita coba mengimplementasikan setiap metode dari kustom Valet yang perlu Anda tulis.

Metode serves

Metode services harus mengembalikan true jika driver Anda harus menangani permintaan yang masuk. Jika tidak, metode tersebut akan mengembalikan nilai false. Jadi, di dalam metode ini, Anda harus mencoba menentukan apakah $sitePath yang diberikan berisi proyek dengan tipe tertuntu yang Anda coba sajikan.

Sebagai contoh, bayangkan kita sedang menulis WordPressValetDriver. Metode services kita mungkin akan terlihat seperti ini:

/**
 * Tentukan apakah driver melayani permintaan.
 *
 * @param  string  $sitePath
 * @param  string  $siteName
 * @param  string  $uri
 * @return bool
 */
public function serves($sitePath, $siteName, $uri)
{
    return is_dir($sitePath.'/wp-admin');
}

Metode isStaticFile

Metode isStaticFile harus menentukan apakah permintaan yang masuk adalah file "statis", seperti gambar atau stylesheet. Jika file tersebut besifat statis, metode ini harus mengembalikan path lengkap ke file statis yang terdapat pada disk. Jika permintaan yang masuk bukan untuk file statis, metode harus mengembalikan false:

/**
 * Tentukan apakah permintaan yang masuk adalah untuk berkas statis.
 *
 * @param  string  $sitePath
 * @param  string  $siteName
 * @param  string  $uri
 * @return string|false
 */
public function isStaticFile($sitePath, $siteName, $uri)
{
    if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
        return $staticFilePath;
    }

    return false;
}

Peringatan
Metode isStaticFile hanya akan dipanggil jika metode serves mengembalikan nilai true untuk permintaan yang masuk dan URI permintaan bukan /.

Metode frontControllerPath

Metode frontControllerPath harus mengembalikan path lengkap ke "pengendali depan" milik aplikasi Anda, yang biasanya berupa file "index.php" atau yang sejenisnya:

/**
 * Dapatkan jalur yang sepenuhnya terselesaikan ke pengontrol depan aplikasi.
 *
 * @param  string  $sitePath
 * @param  string  $siteName
 * @param  string  $uri
 * @return string
 */
public function frontControllerPath($sitePath, $siteName, $uri)
{
    return $sitePath.'/public/index.php';
}

Driver Lokal

Jika Anda ingin mendefinisikan driver Valet khusus untuk satu aplikasi, buat file LocalValetDriver.php di dalam direktori root milik aplikasi tersebut. Driver kustom Anda perlu melakukan extend terhadap kelas driver dasar ValetDriver atau melakukan extend terhadap driver untuk aplikasi spesifik yang sudah ada seperti LaravelValetDriver:

use Valet\Drivers\LaravelValetDriver;

class LocalValetDriver extends LaravelValetDriver
{
    /**
     * Determine if the driver serves the request.
     *
     * @param  string  $sitePath
     * @param  string  $siteName
     * @param  string  $uri
     * @return bool
     */
    public function serves($sitePath, $siteName, $uri)
    {
        return true;
    }

    /**
     * Get the fully resolved path to the application's front controller.
     *
     * @param  string  $sitePath
     * @param  string  $siteName
     * @param  string  $uri
     * @return string
     */
    public function frontControllerPath($sitePath, $siteName, $uri)
    {
        return $sitePath.'/public_html/index.php';
    }
}

Perintah Valet Lainnya

Perintah Deskripsi
valet list Menampilkan daftar semua perintah Valet.
valet forget Jalankan perintah ini dari direktori "terparkir" untuk menghapusnya dari daftar direktori terparkir.
valet log Melihat daftar log yang ditulis oleh layanan milik Valet.
valet paths Melihat semua path yang "terparkir" milik Anda.
valet restart Memulai ulang daemon Valet.
valet start Memulai daemon Valet.
valet stop Menghentikan daemon Valet.
valet trust Menambahkan file sudoers untuk Brew dan Valet agar perintah Valet dapat dijalankan tanpa meminta kata sandi Anda.
valet uninstall Copot pemasangan Valet: menampilkan instruksi untuk pencopotan pemasangan manual. Berikan opsi --force untuk menghapus semua sumber daya Valet secara agresif.

Direktori & File Valet

Anda mungkin memerlukan informasi mengenai direktori dan file berikut ini saat memecahkan masalah dengan lingkungan Valet Anda:

~/.config/valet

Berisi semua konfigurasi Valet. Anda mungkin ingin menyimpan cadangan direktori ini.

~/.config/valet/dnsmasq.d/

Direktori ini berisi konfigurasi DNSMasq.

~/.config/valet/Drivers/

Direktori ini berisi driver-driver Valet. Driver menentukan bagaimana sebuah framework / CMS tertentu dilayani.

~/.config/valet/Extensions/

Direktori ini berisi ekstensi/perintah khusus Valet.

~/.config/valet/Nginx/

Direktori ini berisi semua konfigurasi situs Nginx milik Valet. file-file ini dibangun/ditulis ulang saat menjalankan perintah install dan secure.

~/.config/valet/Sites/

Direktori ini berisi semua tautan simbolik untuk proyek yang ditautkan.

~/.config/valet/config.json

File ini adalah file konfigurasi utama mililk Valet.

~/.config/valet/valet.sock

This file is the PHP-FPM socket used by Valet's Nginx installation. This will only exist if PHP is running properly.

~/.config/valet/Log/fpm-php.www.log

This file is the user log for PHP errors.

~/.config/valet/Log/nginx-error.log

This file is the user log for Nginx errors.

/usr/local/var/log/php-fpm.log

This file is the system log for PHP-FPM errors.

/usr/local/var/log/nginx

Direktori ini berisi semua log akses dan eror pada Nginx.

/usr/local/etc/php/X.X/conf.d

File ini berisi file-file .ini untuk berbagai pengaturan konfigurasi PHP.

/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf

File ini adalah file konfigurasi PHP-FPM pool.

~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf

File ini adalah konfigurasi default Nginx yang digunakan untuk membangun sertifikat SSL untuk situs Anda.

Akses Disk

Sejak macOS 10.14, akses ke beberapa file dan direktori telah dibatasi secara default. Pembatasan ini termasuk direktori Desktop, Dokumen, dan Unduhan. Selain itu, akses volume jaringan dan volume removable juga dibatasi. Oleh karena itu, Valet merekomendasikan folder situs Anda berada di luar lokasi yang dilindungi ini.

Namun, jika Anda ingin menyajikan situs dari dalam salah satu lokasi tersebut, Anda harus memberikan "Akses Disk Penuh" kepada Nginx. Jika tidak, Anda mungkin akan mengalami eror server atau perilaku tak terduga lainnya dari Nginx, terutama saat melayani aset statis. Biasanya, macOS akan secara otomatis meminta Anda untuk memberikan akses penuh kepada Nginx ke lokasi-lokasi ini. Atau, Anda dapat melakukannya secara manual melalui Preferensi Sistem > Keamanan & Privasi > Keprivasian dan memilih Akses Disk Penuh. Selanjutnya, aktifkan entri nginx pada panel jendela utama.