Pernah gak sih kalian berpikir ingin project laravel yang telah kalian buat diupload ke hosting, agar orang orang bisa mengakses website yang anda buat, saya yakin rata rata pasti menginginkan hal tersebut walaupun itu hanya sekedar demo. Kalo kita telusuri sebenarnya banyak platform-platform yang menyediakan cloud gratis untuk tujuan tertentu, seperti Netlify, Vercel, Heroku, Github, Surge Dll.
Dari sekian banyaknya cloud platform, kenapa menggunakan Heroku ? untuk laravel atau projek-projek lainnya yang terintegrasi dengan database saya sarankan untuk menggunakan Heroku, karena disana terdapat Addon tambahan yaitu paket tambahan pihak ke 3 yang menyediakan resource yang kita butuhkan, salah satunya adalah database, untuk MySQL terdapat JawsDB MySql, ClearDB Mysql, Draxir Dll, dan untuk PostgreSQL sudah disediakan oleh heroku. Berbeda dengan platform lainnya yang rata-rata hanya bisa deploy website statis, atau bisa juga menggunakan dengan vue js.
Untuk menggunakan addon tersebut ada yang free dan ada pula yang berbayar, untungnya PostgreSQL dan MySQL merupakan addon gratis, tetapi untuk menggunakan database MySQL kita harus memverifikasikan diri terlebih dahulu, dengan cara menginputkan kartu kredit ke heroku, kalo saran saya gunakan saja e-card Jenius seperti yang pernah saya lakukan, jadi tidak masalah dan juga aman tidak akan terpotong otomatis saldonya. Berbeda dengan Heroku PostgreSQL bisa langsung digunakan tanpa verifikasi.
Kita bisa menggunakan 2 cara, yaitu deploy lalu setup langsung pada website, atau menggunakan Heroku CLI, ditutorial kali ini akan mencangkup ke 2 nya agar lebih mengerti tentang heroku. Sebelum itu jangan lupa untuk Login, jika belum punya akunnya silahkan register.
Bahan-bahan yang diperlukan (Heroku CLI)
- Daftar akun Heroku di website https://www.heroku.com/
- Heroku CLI (download disini)
- Git (download disini)
- Tentunya sudah ada Projek Laravel (saya asumsikan pasti anda sudah install composer)
Bahan-bahan yang diperlukan (Deploy langsung melalui Heroku Website)
- Daftar akun Heroku di website https://www.heroku.com/
- Persiapan buka https://dashboard.heroku.com/
- Git (download disini)
- Tentunya sudah ada projek Laravel
- Projek Laravel telah dipush ke github
Deploy Laravel Menggunakan Heroku CLI
Setelah anda menyiapkan bahan bahan diatas, anda buka git bash / terminal / CMD / vscode terminal / apapkun pokoknya untuk menjalankan command.
Initialization git
Masuk ke folder projek laravelnya, lalu lakukan commit git untuk tracking projek nya, jika sebelumnya sudah dilakukan, lewati langkah ini
$ git init $ git add . $ git commit -m "your commit"
Login ke akun heroku cli
Jalankan command beriku:
$ heroku login
Kemudian tekan apa saja di keyboard anda kecuali "q" untuk membatalkannya, lalu akan diarahkan ke browser defaultnya, silahkan login ke akun heroku nya, jika sudah "Logged In" brrti berhasil, dan masuk lagi ke terminal
Membuat procfile heroku
Kemudian ketik command:
$ echo web: vendor/bin/heroku-php-apache2 public/ > Procfile
Silahkan ganti sesuai dengan server nya, contoh diatas menggunakan apache. Karena ada pembaharuan baru, yaitu penambahan file Procfile yang tadi kita jalankan, maka anda commit kembali gitnya.
$ git add .
$ git commit "Procfile addedd!"
Membuat aplikasi baru dan deploy di heroku cli
Pada bagian ini anda membuat aplikasi baru di heroku, untuk menyimpan projek laravel kita ke aplikasi heroku tesebut, jadi ketika anda membuat website heroku maka anda dapat melihat, dan mengatur kembali pengaturan-pengaturan yang pada aplikasi tersebut (ganti myapprestfull sesuai dengan projek anda).
$ heroku apps:create myapprestfull
ketika cek remote git nya, sudah ada remote bernama "heroku" untuk push projek nya ke heroku
$ git remote -v heroku https://git.heroku.com/myapprestfull.git (fetch) heroku https://git.heroku.com/myapprestfull.git (push) origin https://github.com/ismynr/Simple-Restfull-Api-Ajax.git (fetch) origin https://github.com/ismynr/Simple-Restfull-Api-Ajax.git (push)
kemudian push project nya dengan git menggunakan remote yang mengarahkan ke heroku app
$ git push heroku master
responnya:
$ git push heroku master Enumerating objects: 217, done. Counting objects: 100% (217/217), done. Delta compression using up to 8 threads Compressing objects: 100% (192/192), done. Writing objects: 100% (217/217), 540.24 KiB | 2.81 MiB/s, done. Total 217 (delta 48), reused 0 (delta 0) remote: Compressing source files... done. remote: Building source: remote: remote: ! Warning: Multiple default buildpacks reported the ability to hande this app. The first buildpack in the list below will be used. remote: Detected buildpacks: PHP,Node.js remote: See https://devcenter.heroku.com/articles/buildpcks#buildpack-detect-order remote: -----> PHP app detected remote: -----> Bootstrapping... remote: -----> Installing platform packages... remote: - php (7.4.11) remote: - ext-mbstring (bundled with php) remote: - apache (2.4.46) remote: - nginx (1.18.0) remote: -----> Installing dependencies... remote: Composer version 1.10.13 2020-09-09 11:46:34 remote: Loading composer repositories with package information remote: Installing dependencies from lock file remote: Package operations: 67 installs, 0 updates, 0 removals remote: - Installing doctrine/inflector (2.0.3): Downloading (connectinDownloading (100%) remote: - Installing doctrine/lexer (1.2.1): Downloading (connecting... Downloading (0%) Downloading (100%) remote: - Installing dragonmantank/cron-expression (v3.0.2): DownloadinDownloading (100%) remote: - Installing voku/portable-ascii (1.5.3): Downloading (connectiDownloading (100%) remote: - Installing symfony/polyfill-php80 (v1.18.1): Downloading (conDownloading (100%) remote: - Installing symfony/polyfill-mbstring (v1.18.1): Downloading (Downloading (100%) remote: - Installing symfony/polyfill-ctype (v1.18.1): Downloading (conDownloading (100%) remote: - Installing phpoption/phpoption (1.7.5): Downloading (connectiDownloading (100%) remote: - Installing graham-campbell/result-type (v1.0.1): Downloading Downloading (100%) remote: - Installing vlucas/phpdotenv (v5.2.0): Downloading (connectingDownloading (100%) remote: - Installing symfony/css-selector (v5.1.7): Downloading (connecDownloading (100%) remote: - Installing tijsverkoyen/css-to-inline-styles (2.2.3): DownloaDownloading (100%) remote: - Installing symfony/var-dumper (v5.1.7): Downloading (connectiDownloading (100%) remote: - Installing symfony/deprecation-contracts (v2.2.0): DownloadinDownloading (100%) remote: - Installing symfony/routing (v5.1.7): Downloading (connecting.Downloading (100%) remote: - Installing symfony/process (v5.1.7): Downloading (connecting.Downloading (100%) remote: - Installing symfony/polyfill-php72 (v1.18.1): Downloading (conDownloading (100%) remote: - Installing paragonie/random_compat (v9.99.100): Downloading (Downloading (100%) remote: - Installing symfony/polyfill-php70 (v1.18.1): Downloading (conDownloading (100%) remote: - Installing symfony/polyfill-intl-normalizer (v1.18.1): DownloDownloading (100%) remote: - Installing symfony/polyfill-intl-idn (v1.18.1): Downloading (Downloading (100%) remote: - Installing symfony/mime (v5.1.7): Downloading (100%) remote: - Installing symfony/polyfill-php73 (v1.18.1): Downloading (conDownloading (100%) remote: - Installing symfony/http-foundation (v5.1.7): Downloading (conDownloading (100%) remote: - Installing symfony/http-client-contracts (v2.3.1): DownloadinDownloading (100%) remote: - Installing psr/event-dispatcher (1.0.0): Downloading (connectDownloading (100%) remote: - Installing symfony/event-dispatcher-contracts (v2.2.0): DownlDownloading (100%) remote: - Installing symfony/event-dispatcher (v5.1.7): Downloading (coDownloading (100%) remote: - Installing psr/log (1.1.3): Downloading (100%) remote: - Installing symfony/error-handler (v5.1.7): Downloading (conneDownloading (100%) remote: - Installing symfony/http-kernel (v5.1.7): Downloading (connectDownloading (100%) remote: - Installing symfony/finder (v5.1.7): Downloading (connecting..Downloading (100%) remote: - Installing symfony/polyfill-intl-grapheme (v1.18.1): DownloadDownloading (100%) remote: - Installing symfony/string (v5.1.7): Downloading (connecting..Downloading (100%) remote: - Installing psr/container (1.0.0): Downloading (100%) remote: - Installing symfony/service-contracts (v2.2.0): Downloading (cDownloading (100%) remote: - Installing symfony/console (v5.1.7): Downloading (connecting.Downloading (100%) remote: - Installing symfony/polyfill-iconv (v1.18.1): Downloading (conDownloading (100%) remote: - Installing egulias/email-validator (2.1.22): Downloading (conDownloading (100%) remote: - Installing swiftmailer/swiftmailer (v6.2.3): Downloading (conDownloading (100%) remote: - Installing ramsey/collection (1.1.1): Downloading (connectingDownloading (100%) remote: - Installing brick/math (0.9.1): Downloading (100%) remote: - Installing ramsey/uuid (4.1.1): Downloading (100%) remote: - Installing psr/simple-cache (1.0.1): Downloading (connecting.Downloading (100%) remote: - Installing opis/closure (3.6.0): Downloading (100%) remote: - Installing symfony/translation-contracts (v2.3.0): DownloadinDownloading (100%) remote: - Installing symfony/translation (v5.1.7): Downloading (connectDownloading (100%) remote: - Installing nesbot/carbon (2.41.4): Downloading (connecting... Downloading (100%) remote: - Installing monolog/monolog (2.1.1): Downloading (connecting..Downloading (100%) remote: - Installing league/mime-type-detection (1.5.1): Downloading (cDownloading (100%) remote: - Installing league/flysystem (1.1.3): Downloading (connecting.Downloading (100%) remote: - Installing league/commonmark (1.5.6): Downloading (connectingDownloading (100%) remote: - Installing laravel/framework (v8.11.2): Downloading (connectiDownloading (100%) remote: - Installing fideloper/proxy (4.4.0): Downloading (connecting..Downloading (100%) remote: - Installing asm89/stack-cors (v2.0.1): Downloading (connectingDownloading (100%) remote: - Installing fruitcake/laravel-cors (v2.0.2): Downloading (connDownloading (100%) remote: - Installing psr/http-message (1.0.1): Downloading (connecting.Downloading (100%) remote: - Installing psr/http-client (1.0.1): Downloading (connecting..Downloading (100%) remote: - Installing ralouphie/getallheaders (3.0.3): Downloading (connDownloading (100%) remote: - Installing guzzlehttp/psr7 (1.7.0): Downloading (connecting..Downloading (100%) remote: - Installing guzzlehttp/promises (1.4.0): Downloading (connectiDownloading (100%) remote: - Installing guzzlehttp/guzzle (7.2.0): Downloading (connectingDownloading (100%) remote: - Installing nikic/php-parser (v4.10.2): Downloading (connectinDownloading (100%) remote: - Installing dnoegel/php-xdg-base-dir (v0.1.1): Downloading (coDownloading (100%) remote: - Installing psy/psysh (v0.10.4): Downloading (100%) remote: - Installing laravel/tinker (v2.4.2): Downloading (connecting..Downloading (100%) remote: - Installing yajra/laravel-datatables-oracle (v9.11.1): DownloaDownloading (100%) remote: Generating optimized autoload files remote: > Illuminate\Foundation\ComposerScripts::postAutoloadDump remote: > @php artisan package:discover --ansi remote: Discovered Package: fideloper/proxy remote: Discovered Package: fruitcake/laravel-cors remote: Discovered Package: laravel/tinker remote: Discovered Package: nesbot/carbon remote: Discovered Package: yajra/laravel-datatables-oracle remote: Package manifest generated successfully. remote: -----> Preparing runtime environment... remote: NOTICE: No Procfile, using 'web: heroku-php-apache2'. remote: -----> Checking for additional extensions to install... remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: Done: 18.1M remote: -----> Launching... remote: Released v3 remote: https://myapprestfull.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/myapprestfull.git * [new branch] master -> master
yeay projek laravel telah di deploy, lalu buka aplikasinya seperti https://myapprestfull.herokuapp.com/ atau ketik perintah $ heroku open
Konfigurasi laravel heroku
Kita perlu definisikan variable environment laravel pada heroku, caranya tinggal samakan saja key yang dibutuhkan pada file .env di heroku cli, seperti pada command berikut:
$ heroku config:add APP_DEBUG=true $ heroku config:add APP_KEY=base64:tbdxNDp4Y/YYtGetBH3g3YQfGWB6myJJbAX1XH9dOh4= $ heroku config:add APP_NAME=RestfullApi $ heroku config:add APP_ENV=production $ heroku config:add APP_URL=https://myapprestfull.herokuapp.com ....
$ heroku addons:create heroku-postgresql:hobby-dev
dan ini kalo menggunakan ClearDB MySQL
$ heroku addons:create cleardb:ignite
Seperti yang saya katakan diawal tutorial bahwa MySQL ini gratis bisa dipakai kapan saja, tetapi syaratnya harus verifikasi dengan memasukan kartu kredit pada heroku, lalu pilih salah satu databasenya. menurut saya mau itu postgree / mysql untuk projek seperti laravel framework tidak masalah karena, framework didesign agar flexible terhadap tool2 yang digunakan termasuk database ini, kecuali projek native selain laravel yang mungkin harus menggunakan MySQL.
Sama seperti sebelumnya setting environment nya di heroku, sebelumnya lihat dulu konfigurasi database yang telah dibuat oleh heroku, (disini sy menggunakan postgreSQL)
$ heroku pg:credentials:url Connection information for default credential. Connection info string: "dbname=db6fld90ms7glb host=ec2-52-72-34-184.compute-1.amazonaws.com port=5432 user=hivbrlmsavxspi password=a06dfc454fd76dcca947a40c7c9cba847b5880afea6f0581e12352b189ef3e3a sslmode=require" Connection URL: postgres://hivbrlmsavxspi:a06dfc454fd76dcca947a40c7c9cba847b5880afea6f0581e12352b189ef3e3a@ec2-52-72-34-184.compute-1.amazonaws.com:5432/db6fld90ms7glb
sesuaikan environmentnya
$ heroku config:add DB_CONNECTION=pgsql $ heroku config:add DB_HOST=ec2-52-72-34-184.compute-1.amazonaws.com $ heroku config:add DB_PORT=5432 $ heroku config:add DB_DATABASE=db6fld90ms7glb $ heroku config:add DB_USERNAME=hivbrlmsavxspi $ heroku config:add DB_PASSWORD=a06dfc454fd76dcca947a40c7c9cba847b5880afea6f0581e12352b189ef3e3a
Akhirnya selesai konfigurasi variable environmentnya, sama juga seperti saat awal install laravel di local pasti ada hal yang dilakukan dengan perintah php artisan, maka ketika kita telah menambahkan konfigurasi database maka hal yang harus dilakukan adalah migrate schema database dan seedernya
$ heroku run php artisan migrate $ heroku run php artisan db:seed
atau ingin reset database dan mengulang migrate seeder lagi
$ heroku run php artisan migrate:fresh --seed
Jika terdapat masalah mengenai migrate dan faker, alternative nya kirim database lokal ke database postgreSQL yang ada diheroku
jika terdapat file uploaded di projek anda, sehingga harus membuat linking ke /public anda bisa saja menggunakan perintah
$ heroku run php artisan storage:link
dst...
dan selesai silahkan buka linknya https://myapprestfull.herokuapp.com/ atau ketik perintah $ heroku open
$ heroku git:remote -a myapprestfull set git remote heroku to https://git.heroku.com/myapprestfull.git
Deploy Laravel Melalui Heroku Dashboard Langsung
Konfigurasi laravel heroku
Lalu tinggal konfigurasi database MySQL atau PostgreSQL di heroku caranya sama seperti diatas hanya saja pertama kita perlu install addon database yang akan kita pakai, kali ini saya akan mencoba mengguanakan ClearDB MySQL.
Selain DlearDB anda bisa menggunakan JawsDB MySQL, diantara addon2 ini terdapat kekurangan2 nya, jadi sebisa mungkin memilih addon yang minim dengan kekurangannya, atau jika terdapat bug pada addon yang digunakan saran saja ganti saja sebagai alternativenya. Selanjutnya klik pada tab "Resources" search nama addon nya
$ heroku run php artisan migrate $ heroku run php artisan db:seed
This comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteBang cara input verifikasi creditcard pakai jenius ke heroku gimana ya? kok aku gagal terus. padahal udah sering aku pakai kayak di paypal, steam, google playstore dll
ReplyDeleteSorry baru baca, jenius nya ada saldo nya ga di kantong utama ? Kalo masih ga bisa pake debit card fisik, tp keknya ga ngaruh soalnya saya pake e card bisa
Delete