Cara Deploy Project Laravel Ke Heroku Dengan Database MySQL dan PostgreSQL (Sub Domain, Cloud Hosting Gratis) ~ Coding IsmyNR - Cara Dan Contoh Pemrograman

Cara Deploy Project Laravel Ke Heroku Dengan Database MySQL dan PostgreSQL (Sub Domain, Cloud Hosting Gratis)

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.

Cara Deploy Project Laravel Ke Heroku Dengan Database MySQL dan PostgreSQL (Sub Domain, Cloud Hosting Gratis)

Dalam tutorial ini, saya ingin membagikan ilmu tentang bagaimana cara deploy projek laravel ke heroku dengan mudah. Sebelum itu apa sih Heroku ? sebuah cloud platform yang mendukung bahasa pemrorgaman seperti Node.js, PHP, Ruby, Python, Java. Apa sih kelebihannya ? Heroku dapat terintegrasi dengan database, serta dapat terhubung langsung dengan Github, jadi ketika projek telah dipush ke github, heroku dapat langsung mendeploynya, kita hanya setting variable environment nya saja. mudah kan ?

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)

  1. Daftar akun Heroku di website https://www.heroku.com/
  2. Heroku CLI (download disini)
  3. Git (download disini)
  4. Tentunya sudah ada Projek Laravel (saya asumsikan pasti anda sudah install composer)

Bahan-bahan yang diperlukan (Deploy langsung melalui Heroku Website)

  1. Daftar akun Heroku di website https://www.heroku.com/
  2. Persiapan buka https://dashboard.heroku.com/
  3. Git (download disini)
  4. Tentunya sudah ada projek Laravel 
  5. 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

Login heroku cli, Deploy laravel heroku cli mysql

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

Membuat aplikasi baru di heroku, Deploy laravel heroku cli mysql

Buka https://dashboard.heroku.com/ maka akan ditambahkan otomatis applikasi yang telah kita buat di heroku cli
Membuat aplikasi baru di heroku, Deploy laravel heroku cli mysql

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
....
sesuai kebutuhan. Lalu tinggal konfigurasi database MySQL datau PostgreSQL di heroku caranya sama seperti diatas hanya saja pertama kita perlu install addon database yang akan kita pakai, contohnya ketika menggunakan PostgreeSQL  

$ 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 

Konfigurasi laravel variable environment, Deploy laravel heroku cli mysql
kalo ingin mengetahui lebih banyak printah cli https://devcenter.heroku.com/articles/git dan kalo anda ingin masuk ke aplikasi heroku yang sudah ada ketik

$ heroku git:remote -a myapprestfull
set git remote heroku to https://git.heroku.com/myapprestfull.git

Deploy Laravel Melalui Heroku Dashboard Langsung

Pastikan anda telah menyiapkan bahan bahan yang telah disebutkan sebelumnya, yaitu projek harus sudah dicommit, dan dipush ke github, buka dashboard heroku dashboard.heroku.com 

buat aplikasi, Deploy laravel heroku mysql

Masuk ke monu "Deploy" pilih github kemudian cari repository project di github yang akan dihubungkan dengan heroku, lalu klik "Connect"
Deploy laravel heroku mysql

Selanjutnya anda klik deploy branch nya sesuai yang diinginkan

Deploy branch laravel heroku mysql

Pastikan hasilnya seperti berikut

Deploy branch laravel heroku mysql

Konfigurasi laravel heroku

Sama seperti pada heroku cli, Kita perlu definisikan variable environment laravel pada heroku, bedanya kita akan menambahkannya di dashboard heroku, tinggal samakan saja key yang dibutuhkan pada file .env laravel, caranya masuk ke tab "Settings", pada Config Vars klik tombol "Reveal Config Vars", samakan seperti yang ada pada .env sesuaikan kebutuhan saja.

Konfigurasi laravel, Deploy heroku mysql


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 


Konfigurasi laravel, Deploy heroku mysql

Setelah telah ditambahkan, akan ada addon baru yaitu ClearDB MySQL, lalu kembali lagi ke tab "Settings" dan ke "Config Vars" disitu terdapat database URL yang akan kita pakai untuk mengkonfigurasikan variabel environment db laravelnya.

Konfigurasi laravel, Deploy heroku mysql

Terkhir run console untuk migrate datanya sama seperti pada heroku cli

Konfigurasi laravel, Deploy heroku mysql

Muncul tampilan seperti ini

heroku console, Deploy heroku mysql

Lalu ketik command berikut, *hilangkan kata heroku run, karena sudah ada di consolenya:
$ heroku run php artisan migrate
$ heroku run php artisan db:seed
Tunggu prosesnya, dan selesai, silahkan jalankan applikasinya, klik button "Open app" 

Deploy heroku mysql

cara membuat database di heroku
cara deploy laravel di heroku
heroku adalah 
cara mengonlinekan website gratis
hosting gratis laravel
cara deploy laravel ke heroku
cloud platform gratis
cara upload projek laravel ke heroku cli
heroku larvel mysql
laravel crud heroku
cara deploy php ke heroku
deploy existing laravel app in heroku 
heroku cleardb mysql 
heroku jaws mysql 
heroku laravel procfile
logoblog

Share :

4 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Bang 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

    ReplyDelete
    Replies
    1. Sorry 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

Berkomentarlah jika ada pertanyaan, Kesan pembaca atau saran yang membangun blog ini.
> Gunakan akun google dan ceklis kolom (Notify Me) agar mendapat notifikasi balasan komentar

 
Back to Top