• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

Jaranguda

Belajar Mengajar

  • Home
  • Sponsor/Jasa
  • Tentang

PHP

Install PHP MariaDB di Mac Monterey

Last Updated on 16 October 2022 By tommy Leave a Comment

Menggunakan Mac sebagai komputer untuk coding sama mudahnya dengan menggunakan Linux ataupun Windows, yang perlu diperhatikan adalah perbedaan PATH ataupun cara install. Diluar itu sebagian besar bisa dibilang memiliki kemiripan dari segi penggunaan. Untuk anda yang baru menggunakan Mac, disini akan kita bahas cara cepat untuk menginstall system Mac anda, agar siap tempur untuk develop aplikasi PHP.

Install brew

brew adalah package manager yang paling populer digunakan di Mac, brew ini mirip dengan apt (Debian/Ubuntu) dan dnf/yum (Fedora/CentOS). Cara installnya sangat mudah

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Install PHP

Install PHP versi terbaru

brew install php

output

==> Caveats
==> php
To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
 
    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>
 
Finally, check DirectoryIndex includes index.php
    DirectoryIndex index.php index.html
 
The php.ini and php-fpm.ini file can be found in:
    /opt/homebrew/etc/php/8.1/
 
To restart php after an upgrade:
  brew services restart php
Or, if you don't want/need a background service you can just run:
  /opt/homebrew/opt/php/sbin/php-fpm --nodaemonize

Install PHP brew macos

setelah terinstall, versi PHP bisa diversifikasi

➜  ~ php -v
PHP 8.1.11 (cli) (built: Sep 29 2022 19:44:28) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.11, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.11, Copyright (c), by Zend Technologies

Install composer

Setelah PHP terinstall sekarang install composer, package managernya PHP. Bila anda bekerja dengan framework PHP modern, kemungkinan besar akan menggunakan composer untuk mengelola dependency.

brew install composer

Install MariaDB

Untuk menginstall MariaDB, gunakan perintah

brew install mariadb

output

🍺  /opt/homebrew/Cellar/mariadb/10.8.3_1: 917 files, 174.7MB
==> Running `brew cleanup mariadb`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Caveats
==> mariadb
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.
 
MySQL is configured to only allow connections from localhost by default
 
To restart mariadb after an upgrade:
  brew services restart mariadb
Or, if you don't want/need a background service you can just run:
  /opt/homebrew/opt/mariadb/bin/mysqld_safe --datadir=/opt/homebrew/var/mysql

Mac install mariadb
sesaat instalasi selesai, akan ditampilkan versi MariaDB yang terinstall.

Jalankan MariaDB

brew services start mariadb

MariaDB sekarang bisa diakses dari terminal, dengan menjalankan mysql
menjalankan mysql mariadb mac

Install Laravel

Setelah PHP dan MySQL/MariaDB terinstall, kita akan mencoba untuk menginstall Laravel

mkdir ~/code
cd ~/code
composer create-project laravel/laravel laravel9

install laravel dengan composer

pindah ke folder laravel9 yang baru dibuat, lalu jalankan php artisan serve. Di browser buka http://localhost:8000
php artisan serve
tampilan default install laravel

Text Editor

Sesuaikan dengan pilihan anda
Visual Studio Code

brew install --cask visual-studio-code

atau bisa langsung di download dari situs vscode
Sublime Text

brew install --cask sublime-text

atau bisa langsung di download dari situs Sublime Text

Filed Under: PHP

Mengirim Log Laravel ke Elasticsearch dengan Logstash

Last Updated on 18 February 2022 By tommy Leave a Comment

Secara default Laravel menyimpan log error didalam file storage/logs/laravel.log, nah log ini kita bisa kirim ke Elasticsearch ataupun log agregator lainnya dengan bantuan logstash. Dengan mengirim data lewat aplikasi yang berbeda, kita mengurangi beban Laravel (PHP) untuk memproses log, sehingga kinerja aplikasi bisa lebih optimal.

Logstash adalah aplikasi yang digunakan untuk memproses, filter dan mengirim log. Dalam pengertian sederhana, kita bisa menggunakan Logstash untuk memformat log sesuai dengan kebutuhan. Ada banyak cara untuk memformat dan filter data di logstash, kali ini kita akan menggunakan grok, grok adalah plugin yang dikhususkan untuk memproses log yang tidak beraturan dengan merubahnya sesuai dengan aturan yang kita buat.

Cara ini bisa digunakan untuk aplikasi Laravel yang menggunakan banyak server, tinggal di install Logstash di masing-masing server dengan config yang sama.

Contoh log Laravel

Berikut ini adalah contoh log Laravel yang akan kita gunakan. Sebaiknya gunakan log dari server production, agar lebih memudahkan melihat hasilnya dan validasi apakah sudah sesuai dengan keinginan

[2021-09-20 15:06:32] local.ERROR: Method App\Http\Controllers\HelloData::() does not exist {"exception":"[object] (ReflectionException(code: 0): Method App\\Http\\Controllers\\BankController::() does not exist at /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php:48)
[stacktrace]
#0 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php(48): ReflectionMethod->__construct()
#1 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php(26): Illuminate\\Routing\\RouteSignatureParameters::fromClassMethodString()
#2 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Route.php(506): Illuminate\\Routing\\RouteSignatureParameters::fromAction()
#3 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php(25): Illuminate\\Routing\\Route->signatureParameters()
#4 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(832): Illuminate\\Routing\\ImplicitRouteBinding::resolveForRoute()
#5 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Router->substituteImplicitBindings()
#6 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#7 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#8 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#9 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#10 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#11 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#12 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#13 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle()
#14 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#15 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#16 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#17 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#18 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#19 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(697): Illuminate\\Pipeline\\Pipeline->then()
#20 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(672): Illuminate\\Routing\\Router->runRouteWithinStack()
#21 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\\Routing\\Router->runRoute()
#22 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\\Routing\\Router->dispatchToRoute()
#23 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(166): Illuminate\\Routing\\Router->dispatch()
#24 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#25 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#26 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#27 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#28 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#29 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#30 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#31 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#33 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#34 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#35 /var/www/project.jaranguda.com/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#36 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()
#37 /var/www/project.jaranguda.com/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#38 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle()
#39 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#40 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(141): Illuminate\\Pipeline\\Pipeline->then()
#41 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#42 /var/www/project.jaranguda.com/vendor/laravel/octane/src/ApplicationGateway.php(36): Illuminate\\Foundation\\Http\\Kernel->handle()
#43 /var/www/project.jaranguda.com/vendor/laravel/octane/src/Worker.php(92): Laravel\\Octane\\ApplicationGateway->handle()
#44 /var/www/project.jaranguda.com/vendor/laravel/octane/bin/swoole-server(117): Laravel\\Octane\\Worker->handle()
#45 [internal function]: {closure}()
#46 /var/www/project.jaranguda.com/vendor/laravel/octane/bin/swoole-server(163): Swoole\\Server->start()
#47 {main}
"} 
[2021-11-23 03:05:51] production.ERROR: Class "Laravel\Octane\Octane" not found {"exception":"[object] (Error(code: 0): Class \"Laravel\\Octane\\Octane\" not found at /var/www/project.jaranguda.com/config/octane.php:71)
[stacktrace]
#0 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php(72): require()
#1 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php(39): Illuminate\\Foundation\\Bootstrap\\LoadConfiguration->loadConfigurationFiles()
#2 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(237): Illuminate\\Foundation\\Bootstrap\\LoadConfiguration->bootstrap()
#3 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(310): Illuminate\\Foundation\\Application->bootstrapWith()
#4 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(127): Illuminate\\Foundation\\Console\\Kernel->bootstrap()
#5 /var/www/project.jaranguda.com/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()
#6 {main}
"}
[2022-02-18 04:27:08] local.ERROR: Connection refused {"exception":"[object] (RedisException(code: 0): Connection refused at /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php:153)
[stacktrace]
#0 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(153): Redis->connect()
#1 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(84): Illuminate\\Redis\\Connectors\\PhpRedisConnector->establishConnection()
#2 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Support/helpers.php(263): Illuminate\\Redis\\Connectors\\PhpRedisConnector->Illuminate\\Redis\\Connectors\\{closure}()
#3 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(121): tap()
#4 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(28): Illuminate\\Redis\\Connectors\\PhpRedisConnector->createClient()
#5 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(32): Illuminate\\Redis\\Connectors\\PhpRedisConnector->Illuminate\\Redis\\Connectors\\{closure}()
#6 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php(112): Illuminate\\Redis\\Connectors\\PhpRedisConnector->connect()
#7 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php(91): Illuminate\\Redis\\RedisManager->resolve()
#8 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php(258): Illuminate\\Redis\\RedisManager->connection()
#9 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php(62): Illuminate\\Cache\\RedisStore->connection()
#10 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cache/Repository.php(97): Illuminate\\Cache\\RedisStore->get()
#11 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php(67): Illuminate\\Cache\\Repository->get()
#12 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Store.php(97): Illuminate\\Session\\CacheBasedSessionHandler->read()
#13 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Store.php(87): Illuminate\\Session\\Store->readFromHandler()
#14 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Store.php(71): Illuminate\\Session\\Store->loadSession()
#15 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(147): Illuminate\\Session\\Store->start()
#16 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Support/helpers.php(263): Illuminate\\Session\\Middleware\\StartSession->Illuminate\\Session\\Middleware\\{closure}()
#17 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(148): tap()
#18 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(116): Illuminate\\Session\\Middleware\\StartSession->startSession()
#19 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#20 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle()
#21 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#22 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#23 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#24 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#25 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#26 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()
#27 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()
#28 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()
#29 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()
#30 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()
#31 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#32 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#34 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#35 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#36 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#37 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#38 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#40 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#42 /var/www/project.jaranguda.com/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()
#44 /var/www/project.jaranguda.com/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#45 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle()
#46 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()
#48 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#49 /var/www/project.jaranguda.com/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#50 /var/www/project.jaranguda.com/server.php(21): require_once('/home/tommy/git...')
#51 {main}
"}

Cara berikut ini bisa dijalankan di server Linux langsung.

1. Download Logstash

Download logstash versi terbaru

mkdir ~/src
cd ~/src
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.0.0-linux-x86_64.tar.gz
tar zxvf logstash-8.0.0-linux-x86_64.tar.gz

struktur file logstash

.
├── bin
├── config
├── CONTRIBUTORS
├── data
├── Gemfile
├── Gemfile.lock
├── jdk
├── lib
├── LICENSE.txt
├── logs
├── logstash-core
├── logstash-core-plugin-api
├── modules
├── NOTICE.TXT
├── tools
├── vendor
└── x-pack
 
12 directories, 5 files

2. Config Logstash

Di dalam folder config, buat file dengan nama laravel.conf, yang berisi

input {
    file {
        path => "/var/www/project.jaranguda.com/storage/logs/laravel.log"
        start_position => "beginning"
        codec => multiline { pattern => "\[[\d]{4}" negate => "true" what => "previous" }
    }
}
 
filter {
    grok {
        match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] %{DATA:env}\.%{DATA:severity}: %{DATA:message}" }
    }
}
 
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "server.elasticsarch.jaranguda.com"
        data_stream => "true"
    }
}

Keterangan :
path : lokasi log laravel
codec : untuk mendapatkan error beserta stacktrace-nya

agar logstash mengenali config laravel.conf diatas, tambahkan baris berikut di pipelines.yml

- pipeline.id: laravel
  path.config: "~/src/logstash-8.0.0/config/laravel.conf"

terakhir jalankan logstash dari terminal

~/src/logstash-8.0.0/bin/logstash

tunggu beberapa saat sampai muncul output, itu adalah format yang akan dikirim ke elasticsearch, bisa juga dicek di elasticsearch/kibana anda
logstash output parsing

Catatan

Ada cara yang lebih baik digunakan untuk memproses log dari Laravel ini, dengan catatan dari Laravel sendiri sudah menyimpan lognya dengan format json.

Filed Under: PHP

Solusi Fix PHP Failed to enable crypto in

Last Updated on 24 November 2021 By tommy Leave a Comment

Beberapa hari ini salah satu script PHP yang saya gunakan error, setelah pindah server. Scriptnya seperti dibawah ini

<?php
$url = file_get_contents("https://xxx-prod.domain.com");
var_dump($url);

output dari script diatas

PHP Warning:  file_get_contents(): Peer certificate CN=`xxx-prod-v1.domain.com' did not match expected CN=`xxx-prod.domain.com' in /home/tommy/getIp.php on line 3
PHP Warning:  file_get_contents(): Failed to enable crypto in /home/tommy/getIp.php on line 3
PHP Warning:  file_get_contents(https://xxx-prod.domain.com): Failed to open stream: operation failed in /home/tommy/getIp.php on line 3
bool(false)

Error tersebut menyatakan bahwa SSL Common Name (CN) tidak sesuai dengan nama domain yang sedang saya akses, biasanya hal ini terjadi bisa di server salah setting untuk SSL yang digunakan. Saya coba buka dari beberapa browser, tidak ada masalah dan semuanya menampilkan SSL yang cocok.

Cek dengan curl dari server, hasilnya sama, jadi ini bukan masalah di PHP

curl: (60) SSL: no alternative certificate subject name matches target host name 'xxx-prod.domain.com'
More details here: https://curl.haxx.se/docs/sslcerts.html
 
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Coba telusuri lebih lanjut dengan ping

$ ping xxx-prod.domain.com
PING xxx-prod.domain.com(XXXX:XXXX:c0c:20ff::1 (XXXX:XXXX:c0c:20ff::1)) 56 data bytes
64 bytes from XXXX:XXXX:c0c:20ff::1 (XXXX:XXXX:c0c:20ff::1): icmp_seq=1 ttl=64 time=0.092 ms
64 bytes from XXXX:XXXX:c0c:20ff::1 (XXXX:XXXX:c0c:20ff::1): icmp_seq=2 ttl=64 time=0.073 ms
64 bytes from XXXX:XXXX:c0c:20ff::1 (XXXX:XXXX:c0c:20ff::1): icmp_seq=3 ttl=64 time=0.099 ms

dengan curl juga bisa dicek, dengan curl namadomain -k -v, hasilnya harusnya sama. Dengan hasil ping tersebut bisa di pastikan bahwa server tersebut salah mengkonfigurasi SSL untuk IPv6-nya, jadi yang valid hanya untuk IPv4, karena dari komputer saya yang tidak ada IPv6 tidak ada masalah.

Karena sudah menemukan masalahnya, jadi kita buatkan solusinya, masalah ini bisa di atasi dari dua sisi, baik dari client ataupun server.

1. Dari Client

Bila domain tersebut punya orang lain, dan kita tidak punya akses ke servernya, maka dari script PHP yang sudah dibuat sebelumnya, kita tambahkan parameter untuk memaksa PHP menggunakan IPv4, karena tidak ada masalah disitu, jadi scriptnya berubah menjadi

<?php
$url = file_get_contents("https://xxx-prod.domain.com", false, stream_context_create(['socket' => ['bindto' => '0:0']]));
var_dump($url);

0:0 pada nilai diatas adalah IPv4, untuk IPv6 gunakan [::]:0

2. Dari Server

Bila server/domain tersebut anda yang mengelolanya, bisa di fix dengan menggunakan certificate yang benar untuk domain tersebut, contoh untuk Nginx ubah pada bagian

ssl_certificate /root/.acme.sh/xxx-prod.domain.com/fullchain.cer;
ssl_certificate_key /root/.acme.sh/xxx-prod.domain.com/xxx-prod.domain.com.key;

jangan lupa restart service nginx setelah melakukan perubahan.

Filed Under: PHP

Cara Menggunakan Sentry di Laravel 8

Last Updated on 31 January 2021 By tommy 3 Comments

Monitoring aplikasi Laravel yang dibuat sangat penting untuk mengetahui apa yang terjadi di aplikasi anda, seperti error, timeout dan lain sebagainya. Salah satu yang banyak digunakan adalah Sentry, dengan adanya fasilitas free member untuk aplikasi kecil sudah mencukupi untuk log data errornya.

Install Laravel

Bila anda memulai dari awal, install Laravel terlebih dahulu

composer create-project --prefer-dist laravel/laravel aplikasi-monitoring

kalo Laravelnya sudah ada anda bisa langsung lompat ke tahap selanjutnya.

Buat Project Baru

Dari halaman dashboard sentry.io buat project baru
create new project sentry
Akhiri dengan mengklik Create Project

tunggu beberapa saat akan muncul cara konfigurasi Sentry. Bagian yang penting disini adalah

php artisan sentry:publish --dsn=https://7d3104fac49061111ccf85cf111853@o3111774.ingest.sentry.io/56112376

bagian ini nanti akan kita jalankan

Install Sentry

Dengan bantuan composer, cara install sentry menjadi jauh lebih mudah. Pindah ke folder project anda, lalu jalankan

composer require sentry/sentry-laravel

jika proses tersebut tidak berhasil dan muncul error

Using version ^2.3 for sentry/sentry-laravel
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
PHP Fatal error:  Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in /usr/share/php/Composer/DependencyResolver/RuleWatchGraph.php on line 52
 
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in /usr/share/php/Composer/DependencyResolver/RuleWatchGraph.php on line 52

ubah perintah install composer tersebut menjadi

COMPOSER_MEMORY_LIMIT=-1 composer require sentry/sentry-laravel

Konfigurasi Sentry

Disini kita akan perlu merubah konfigurasi Exception untuk Laravel, bisa Exception muncul akan langsung ditangkap dan dikirim ke Sentry.io. Walaupun dikirim ke Sentry, di aplikasi Laravel error tersebut tetap bisa dilihat di folder logs (storage/logs)
Buka file app/Exceptions/Handler.php, pada bagian

public function register()
{
    $this->reportable(function (Throwable $e) {
        //
    });
}

ubah menjadi

public function register()
{
    $this->reportable(function (Throwable $e) {
        if (app()->bound('sentry') && $this->shouldReport($e)) {
            app('sentry')->captureException($e);
        }
 
        parent::report($e);
    });
}

Sekarang daftarkan aplikasi Laravel ke project Sentry yang baru dibuat tadi

php artisan sentry:publish --dsn=https://7d3104fac49061111ccf85cf111853@o3111774.ingest.sentry.io/56112376

pada pilihan

Enable Performance Monitoring? (yes/no) [yes]: # isi no
Want to send a test Event? (yes/no) [yes]: # isi yes

Tunggu sekitar 1 menit, buka kembali halaman sentry, dibagian Issue
sentry project issue

Filed Under: PHP

Cara Nonaktif HTTP Session dan CSRF di Laravel 8

Last Updated on 28 January 2021 By tommy Leave a Comment

Setiap url yang dibuka akan membuat session baru di Laravel. File session tersebut disimpan di folder storage/framework/sessions, contohnya

$ ls storage/framework/sessions
0cOPowo6PFw8DSEhKJlByzQaehNOeSxVIVQEbK5p  nvRkhQDonKQbdmgpQtgJFMMmUpMyzZJKu93AxghI
DNwXYwqnEmxN0UNYjFDAPmWfi07CGzbrBcOk5H6U  SORPKlAs2oNnWIgKA9ujUbGTBLRf9p40KC6xPexw
KjNQmP7t0d5XVcfLRWK9iG5D4pVrzx4Em3VvROrQ

makin banyak pengunjung anda makin banyak pula session yang dibuat.

CSRF (Cross-site request forgery) sendiri digunakan untuk mencegah user menjalankan aksi yang tidak diingikan, dengan CSRF ini juga melindungi aplikasi dari bot karena di setiap FORM yang dikirim harus mengikutkan token CSRF yang sudah digenerate oleh server sebelumnya.
penampakan session dan csrf laravel
Bila anda menggunakan Laravel untuk SPA dan authentikasinya ditangani oleh aplikasi lainnya, fitur SESSION dan CSRF ini bisa dinonaktifkan untuk mengurangi beban server dan mempercepat aplikasi Laravel.

Penyimpanan Session Laravel

Bila anda menggunakan bawaan Laravel dan tidak ada merubah konfigurasi SESSION_DRIVER akan default menggunakan file. Beberapa alternative yang bisa digunakan adalah database, memcached, redis dan dynamodb.

Dari alternative tersebut yang paling banyak digunakan adalah redis karena stabilitas dan kecepatannya. Jika aplikasi anda tidak membutuhkan HTTP Session maka solusi ini tidak diperlukan karena tetap menggunakan resource server.

Disable HTTP Session

Konfigurasi Session di Laravel disimpan di Kernel.php (app/Http/Kernel.php), ubah baris

\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\VerifyCsrfToken::class

menjadi

// \App\Http\Middleware\EncryptCookies::class,
// \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
// \Illuminate\Session\Middleware\StartSession::class,
// \App\Http\Middleware\VerifyCsrfToken::class

dengan begitu ke empat file tersebut tidak akan dipanggil di Laravel.

Filed Under: PHP

Cara Menggunakan Guzzle PHP untuk POST dan GET

Last Updated on 20 January 2021 By tommy 1 Comment

Bagi developer PHP yang familiar dengan API, mungkin tidak asing lagi dengan Guzzle. Guzzle adalah http client yang bisa digunakan untuk mengirim dan mengambil data dari suatu server, bisa dibilang juga sebagai browsernya developer.

Banyak framework PHP yang menggunakan guzzle seperti Laravel, CodeIgniter tetapi jangan salah kaprah karena Guzzle tetap bisa digunakan di PHP. Disini contoh yang akan dibuat tanpa bergantung ke framework

Folder project yang saya gunakan disini adalah /home/tommy/git/restapi

Install Guzzle

Cara paling mudah menginstall Guzzle adalah dengan composer, karena dependencynya langsung diurus oleh composer tersebut. Pindah ke folder project anda lalu jalankan

composer require guzzlehttp/guzzle

Menggunakan Guzzle

Cara menggunakan guzzle setelah menginstall dengan composer, pindah ke folder project anda, buat file index.php (bisa dinamai apa pun), tambahkan

<?php
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;

dengan dua baris code tersebut Guzzle sudah bisa mulai digunakan.

GET Method dengan Guzzle

Metode GET biasa digunakan untuk mengambil data dari server, sebagai contoh kita akan mengambil data user dari API reqres.in

<?php
// index.php
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
 
$client = new Client([
    'base_uri' => 'https://reqres.in',
    // default timeout 5 detik
    'timeout'  => 5,
]);
 
$response = $client->request('GET', '/api/users');
$body = $response->getBody();
$body_array = json_decode($body);
print_r($body_array);

response get guzzle php

cara diatas, bisa dipersingkat menjadi

<?php
// index.php
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
 
$client = new Client();
$response = $client->request('GET', 'https://reqres.in/api/users');
$body = $response->getBody();
$body_array = json_decode($body);
print_r($body_array);

tetapi cara kedua ini tidak direkomendasikan, karena code menjadi lebih sudah dibaca. Contoh dari response GET tersebut memiliki dua halaman, untuk mengambil data dari halaman kedua

<?php
// index.php
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
 
$client = new Client([
    'base_uri' => 'https://reqres.in',
    // default timeout 5 detik
    'timeout'  => 5,
]);
 
$response = $client->request('GET', '/api/users', [
    'query' => [
        'page' => '2'
    ]
]);
$body = $response->getBody();
$body_array = json_decode($body);
print_r($body_array);

POST Method dengan Guzzle

Metode POST biasa digunakan untuk mengirim data ke server, contoh yang biasa digunakan dengan POST adalah mengirim data login, mengupload gambar dan lain sebagainya.

<?php
// index.php
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
 
$client = new Client([
    'base_uri' => 'https://reqres.in',
    // default timeout 5 detik
    'timeout'  => 5,
]);
 
$response = $client->request('POST', '/api/login', [
    'json' => [
        'email' => '[email protected]',
        'password' => 'cityslicka'
    ]
]);
$body = $response->getBody();
$body_array = json_decode($body);
print_r($body_array);

Filed Under: PHP

  • Go to page 1
  • Go to page 2
  • Go to page 3
  • Interim pages omitted …
  • Go to page 38
  • Go to Next Page »

Primary Sidebar

Pencarian

Tanya Jawab tentang DevOps SRE CPE, gabung di https://t.me/devopsindonesia

Terbaru

  • Cara Menonaktifkan Pager di macOS
  • Cara Mengupdate Nama Apple silicon-as-a-Service Scaleway
  • Cara Force Delete Namespace di Kubernetes
  • Install PHP MariaDB di Mac Monterey
  • MacOS Minta Install Git

Komentar

  • Ari on Cara Mematikan SSID Molecool Balifiber
  • kiki anarki on Mengambil Data dari Situs BPJS Ketenagakerjaan dengan PHP cURL
  • musgan on Password Router Huawei HG8245H5 Indihome
  • ghabily on Mengambil Informasi Router Alcatel Lucent G-241W-A dengan PHP
  • nea on Mencari urutan angka yang hilang di PHP

Tulisan Populer

  • Password Router Huawei HG8245H5 Indihome 1.1m views
  • Password Terbaru ZTE F609 Indihome 784k views
  • Password Superadmin Huawei HG8245A 314k views
  • Cara Setting Manual Modem GPON ZTE F609 Indihome 272.2k views
  • Cara Setting Wireless ZTE F609 Indihome 256k views
  • Mengaktifkan Port LAN di Huawei HG8245 Indihome 169k views
  • Akses UseeTV Indihome via Wireless ZTE F609 156.5k views
  • Kemana Menghilangnya Saldo BCA 50 ribu 150.1k views
  • Cara Reset Password ZTE F609 Indihome 147.2k views
  • Cara Setting DHCP Server Modem/Router ZTE F609 112.8k views

Kategori

  • Delphi
  • dll
  • Gambas
  • Internet
  • Java
  • Lazarus
  • Linux
  • PHP
  • Review
  • Teknologi

Sponsor

kadal.id
carakami.com
kuotabisa.com
Untuk jadi sponsor, hubungi kita lewat halaman sponsor
© 2021. Jaranguda
  • Linux
  • PHP
  • Internet
  • Teknologi
  • Delphi
  • Gambas
  • Java