• Tidak ada hasil yang ditemukan

Modul Deployment Microsite Menggunakan Framework Laravel 7 dengan Memanfaatkan Docker Compose

N/A
N/A
Protected

Academic year: 2021

Membagikan "Modul Deployment Microsite Menggunakan Framework Laravel 7 dengan Memanfaatkan Docker Compose"

Copied!
35
0
0

Teks penuh

(1)

Modul Deployment Microsite

Menggunakan Framework Laravel 7

dengan Memanfaatkan Docker

Compose

Penulis :

Arum Tri Iswari

Ovan Sunarto Pulu

(2)

Daftar isi

Daftar isi 2 Docker 3 Pengertian 17 Instalasi 17 Perintah Docker 17 Dockerfile 17 Laravel 20

Apa itu Framework 21

Apa itu Laravel 21

2 Tools Andalan Laravel 23

Composer 23

Artisan 23

Fitur-Fitur Laravel Lainnya 24

Persyaratan Server 25 Instalasi 26 Routing 26 View 27 GET Data 28 POST Data 29 Deployment 30 Dockerfile 30 Nginx 32 PHP 33 MySQL 33 Docker Compose 33 3.1.6 Run 35

(3)

1. Docker

1.1. Pengertian

Docker adalah platform perangkat lunak yang memungkinkan membuat, menguji, dan menerapkan aplikasi dengan cepat. Docker mengemas perangkat lunak ke dalam unit standar yang disebut kontainer yang memiliki semua yang diperlukan perangkat lunak agar dapat berfungsi termasuk pustaka, alat sistem, kode, dan waktu proses. Dengan menggunakan Docker, dapat dengan cepat menerapkan dan menskalakan aplikasi ke lingkungan apa pun dan yakin bahwa kode akan berjalan.

Platform Docker

Docker menyediakan kemampuan untuk mengemas dan menjalankan aplikasi dalam lingkungan yang terisolasi yang disebut kontainer. Isolasi dan keamanan memungkinkan untuk menjalankan banyak kontainer secara bersamaan pada host yang diberikan. Kontainer tidak membutuhkan beban ekstra, tetapi berjalan langsung di dalam kernel mesin host. Ini berarti dapat menjalankan lebih banyak kontainer ainer pada kombinasi perangkat keras yang diberikan daripada jika menggunakan mesin virtual (Virtual Machine). Bahkan dapat menjalankan kontainer di dalam mesin host yang sebenarnya adalah mesin virtual.

Disekitar kontainer adalah tools dan platform yang dapat membantu dalam beberapa cara:

● Meletakan aplikasi dan komponen pendukung)ke dalam kontainer Docker.

● Mendistribusikan dan mengirimkan kontainer ke tim untuk pengujian dan pengembangan lebih lanjut.

● Distribusi aplikasi tersebut ke environment production, apakah itu di sebuah data center lokal atau Cloud.

(4)

Definisi Docker Engine

Docker Engine adalah aplikasi client-server dengan komponen-komponen utama:

● Sebuah server dengan jenis program long-running disebut proses daemon.

● Sebuah REST API yang menentukan interface yang dapat digunakan program untuk komunikasi dengan daemon dan menginstruksikan apa yang harus dilakukan.

● Sebuah klien antarmuka baris perintah (Command Line Interface / CLI).

CLI memanfaatkan Docker REST API untuk mengontrol atau berinteraksi dengan docker daemon melalui scripting atau perintah CLI langsung. Banyak aplikasi lain docker memanfaatkan dasar API dan CLI.

Daemon mengkreasikan dan mengelola objek-objek Docker. Yang termasuk Docker object adalah image, kontainer, network, volume data, dan sebagainya.

(5)

Cara kerja Docker

Docker berfungsi dengan menyediakan cara standar untuk menjalankan kode. Docker adalah sistem operasi untuk kontainer. Mirip dengan cara mesin virtual memvirtualisasi (menghilangkan kebutuhan untuk secara langsung mengelola) perangkat keras server, kontainer memvirtualisasi sistem operasi server. Docker diinstal di setiap server dan memberikan perintah sederhana yang dapat digunakan untuk membuat, memulai, atau menghentikan kontainer.

Arsitektur Docker

Docker menggunakan arsitektur client-server. Klien Docker berkomunikasi dengan daemon Docker, yang melakukan pekerjaan berat untuk membangun, menjalankan, dan mendistribusikan wadah Docker. Kedua, klien Docker dan daemon dapat berjalan pada sistem yang sama, atau dapat menghubungkan klien Docker ke daemon Docker secara remote. Klien Docker dan daemon berkomunikasi melalui soket atau melalui REST API.

Docker daemon

Seperti ditunjukkan dalam diagram di atas, daemon Docker berjalan pada mesin host. pengguna tidak langsung berinteraksi dengan daemon, melainkan melalui klien Docker.

(6)

Docker client, dalam bentuk docker biner, adalah antarmuka pengguna utama untuk Docker. Docker client untuk menerima perintah dari pengguna dan berkomunikasi bolak-balik dengan Docker daemon.

Pengenalan Komponen di Dalam Docker

Untuk lebih memahami bagian di dalam Docker, anda perlu memahami tentang tiga istilah dalam pengenalan docker ini:

● Docker Image ● Docker Registry ● Docker Container Docker Image

Sebuah Docker Image adalah template read-only. Sebagai contoh, sebuah Image bisa berisi sistem operasi Ubuntu dengan Apache dan aplikasi web yang anda instal. Image digunakan untuk membuat wadah Docker. Docker menyediakan cara yang mudah untuk membangun Image baru atau memperbarui Image yang ada, atau anda dapat men-download Docker Image yang dibuat oleh orang lain. Docker Image adalah komponen pembangunan di Docker.

Docker Registry

Docker registry berisi Image. Ini merupakan penyimpanan umum atau pribadi dari Image yang di upload atau di download. registry Docker publik disediakan dengan Docker Hub. Docker Registry melayani koleksi Image yang ada untuk digunakan. Ini dapat merupakan Image yang dibuat sendiri atau dapat menggunakan Image lain yang telah dibuat sebelumnya. Docker registry adalah komponen distribusi Docker.

Docker Container

Docker container mirip dengan direktori. Sebuah kontainer Docker memegang segala sesuatu yang diperlukan untuk menjalankan aplikasi. Setiap kontainer diciptakan dari Docker Image. Kontainer Docker dapat dijalankan, dimulai, berhenti, di pindah, dan dihapus. Setiap kontainer adalah sebuah platform aplikasi terisolasi secara aman. Kontainer Docker adalah komponen untuk menjalankan Docker. Cara Kerja Docker Image

Kita sudah melihat bahwa Docker Image adalah template read-only yang diluncurkan Docker container. Setiap gambar terdiri dari serangkaian lapisan. Docker

(7)

membuat penggunaan sistem berkas union untuk menggabungkan lapisan ini ke dalam satu Image. File sistem union memungkinkan file dan direktori sistem file terpisah, yang dikenal sebagai cabang, harus transparan overlay, membentuk sistem file tunggal yang koheren.

File Sistem Union

Atau sering disebut UnionFS, merupakan file sistem yang beroperasi dengan menciptakan lapisan, sehingga sangat ringan dan cepat. Docker Engine menggunakan file sistem union untuk memberikan blok bangunan pada kontainer. Docker Engine dapat menggunakan beberapa sistem file union seperti: AUFS, btrfs, vfs, dan DeviceMapper.

Salah satu alasan Docker begitu ringan adalah karena lapisan ini. Bila mengubah Docker image, sebagai contoh : memperbarui aplikasi ke versi terbaru maka layer baru juga akan dibangun. Jadi, daripada mengganti seluruh Image atau membangun kembali secara keseluruhan, karena dapat dilakukan dengan mesin virtual, hanya lapisan saja yang ditambahkan atau diperbarui. Sekarang tidak perlu mendistribusikan Image baru, hanya update, membuat penyebaran Docker Image lebih cepat dan sederhana.

Setiap Image dimulai dari basis Image, misalnya ubuntu, basis Image Ubuntu, atau fedora, basis Image Fedora. Docker Image kemudian dibangun dari semua basis Image secara sederhana, set deskriptif langkah kita sebut petunjuk. Setiap instruksi menciptakan lapisan baru di Image kita. Instruksi mencakup tindakan seperti:

● Menjalankan perintah

● Menambahkan file atau direktori ● Membuat variabel lingkungan

● Proses apa saja yang harus dijalankan ketika meluncurkan sebuah wadah dari Image

Instruksi ini disimpan dalam sebuah file yang disebut Dockerfile. Sebuah Dockerfile adalah script berbasis teks yang berisi petunjuk dan perintah untuk membangun Image dari basis Image. Docker membaca Dockerfile ini ketika meminta membangun dari suatu image, mengeksekusi instruksi, dan mengembalikan Image akhir.

(8)

Cara Kerja Docker Registry

Docker registry adalah penyimpanan untuk Docker Image. Setelah membangun Docker Image, dapat mengirimnya ke registry publik seperti Docker Hub atau registri sendiri yang berjalan di belakang firewall.

Menggunakan klien Docker, dapat mencari Image yang sudah diterbitkan dan kemudian menarik mereka ke Host Docker untuk membangun wadahnya.

Docker Hub menyediakan baik penyimpanan publik dan private untuk Image. Penyimpanan publik dapat dicari dan dapat didownload oleh siapa saja. Penyimpanan pribadi dikecualikan dari hasil pencarian dan hanya pengguna tertentu yang dapat menarik Image ke bawah dan menggunakannya untuk membangun wadah atau kontainer.

Cara Kerja Kontainer

Sebuah kontainer terdiri dari sistem operasi, file yang ditambahkan pengguna, dan meta-data. Seperti yang kita ketahui, setiap kontainer dibangun dari sebuah Image. Image yang memberitahu Docker isi container, proses apa yang harus dijalankan ketika kontainer diluncurkan, dan berbagai data konfigurasi lainnya. Docker Image dalam keadaan read-only. Ketika Docker menjalankan container dari sebuah Image, ia menambahkan lapisan read-write di atas Image (menggunakan sistem union file seperti penjelasan diatas) di mana aplikasi berjalan.

1.2. Instalasi

Pada pembahasan perlu diketahui menggunakan sebagai berikut:

1. Sistem operasi Ubuntu 18.04 disiapkan dengan mengikuti panduan pengaturan awal Ubuntu 18.04, termasuk pengguna non-root sudo dan firewall.

2. Akun di Docker Hub untuk membuat image dan meletakannya ke Docker Hub.

Instalasi Docker yang tersedia di repositori resmi ubuntu mungkin bukan versi terbaru. Untuk memastikan mendapatkan versi terbaru pada waktu instal

(9)

Docker sebaiknya menggunakan repositori Docker resmi. Untuk itu, tambahkan sumber paket baru, menambahkan kunci GPG dari Docker untuk memastikan unduhan valid, dan kemudian menginstal paket tersebut.

Pertama, perbarui daftar paket yang ada: $ sudo apt update

Selanjutnya, instal beberapa paket prasyarat yang memungkinkan menggunakan paket melalui HTTPS:

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

Kemudian tambahkan kunci GPG untuk repositori Docker resmi ke sistem Anda: $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key

add -

Tambahkan repositori Docker ke sumber APT: $ sudo add-apt-repository "deb [arch = amd64]

https://download.docker.com/linux/ubuntu bionic stable" Atau

$ sudo add-apt-repository "deb [arch=amd64]

https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Selanjutnya, perbarui database paket dengan paket Docker dari repo yang baru ditambahkan:

$ sudo apt update

Pastikan menginstal dari repo Docker daripada repo Ubuntu: $ sudo docker-ce policy apt-cache

Tampilan output seperti ini, meskipun nomor versi untuk Docker mungkin berbeda: docker-ce: Installed: (none) Candidate: 18.03.1~ce~3-0~ubuntu Version table: 18.03.1~ce~3-0~ubuntu 500

(10)

500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages

Perhatikan bahwa docker-ce tidak diinstal, tetapi untuk instalasi berasal dari repositori Docker Ubuntu 18.04 (bionic).

Instal Docker:

$ sudo apt install docker-ce

Sekarang Docker sudah terinstal, daemon sudah berjalan, dan proses aktif memulai pada saat boot. Periksa apakah itu berjalan:

$ sudo systemctl status docker

Outputnya harus serupa dengan yang berikut, menunjukkan bahwa layanan ini aktif dan berjalan:

Output

● docker.service - Docker Application Container Engine

Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)

Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago

Docs: https://docs.docker.com Main PID: 10096 (dockerd)

Tasks: 16

CGroup: /system.slice/docker.service ├─10096 /usr/bin/dockerd -H fd:// └─10113 docker-containerd --config

/var/run/docker/containerd/containerd.toml

Setelah Docker diinstal, yang perlu dilakukan adalah menggunakan test image untuk memeriksa apakah semuanya berfungsi sebagaimana mestinya. Lakukan lah dengan command berikut:

$ sudo docker run hello-world

Sekarang, jika ingin mencari image yang tersedia, hanya perlu menggunakan command berikut:

(11)

$ sudo docker search [search_query]

Ganti saja query dengan teks yang dikurung. Misalnya, jika Anda ingin mencari image yang berhubungan dengan Debian, command dan output akan terlihat seperti ini:

$ sudo docker search debian

Kemudian, untuk mendownload image ke komputer, menggunakan nama image bersama dengan command berikut:

$ sudo docker pull [image_name]

Aslinya, command tersebut akan terlihat seperti ini:

$ sudo docker pull debian

Umumnya, user akan memiliki beberapa image pada sistemnya dan dapat melihat daftarnya dengan command:

$ sudo docker images

Daftarnya akan terlihat seperti ketika memasukkan search query.

Setelah itu dapat mengeksekusi image menggunakan command pull dan ID image.

$ sudo docker run -i -t [image]

Ada opsi yang memperluas fungsionalitas dari command itu sendiri. Misalnya, opsi –i membuat eksekusi image menjadi interaktif. Atau opsi -d yang mengeksekusi di latar belakang. Setelah menjalankan image, dapat mengakhiri eksekusi dengan menggunakan kombinasi tombol CTRL+D.

(12)

Langkah terakhir, jika ingin menggunakan Docker tanpa hak akses root, dapat menjalankan command berikut:

$ sudo usermod -aG docker $(whoami)

Lalu, restart sistem, dan segera setelah itu, perubahan akan diterapkan.

1.3. Perintah Docker

Untuk pertama kali, lakukan login dengan akun yang telah dibuat di https://hub.docker.com/

$ sudo docker login

Pertama, coba perintah untuk menjalankan simple hello-world app yang ada di repo hub.docker.com, pertama docker akan mengecek ada tidaknya images ini di dalam local device, bila tidak ada akan melakukan pull (kegunaan mirip dengan git: pull & push) terlebih dahulu.

$ docker run tutum/hello-world

Setelah images terdownload, karena langsung menggunakan perintah docker run, web server akan langsung berjalan di port 80. Untuk mengetahui container apa saja yang sedang berjalan gunakan

$ docker ps

Tetapi port ini tidak dapat langsung dibuka di localhost. Untuk dapat membukanya kita perlu melakukan port forwarding dari default port 80 ke port lain (misalnya 8900) dengan perintah docker run ditambah parameter -p(parameter port)

(13)

Beberapa parameter tambahan dalam docker run untuk mempermudah:

● --name 1, untuk memberi nama container dengan nama my-app-1 (biasanya digunakan untuk keperluan delete container dan lainnya) ● -p 8090:80 Untuk port forwarding, 8090 port tujuan, 80 adalah port asal

aplikasi (forward port 80 ke port 8090)

● -d tanpa isian parameter, digunakan untuk menjalankan perintah sebagai daemon (background service, tanpa log di terminal)

● -it Nah ini kebalikan dari -d digunakan untuk menjalankan container pada mode interactive di terminal

● -rm untuk menjalankan container secara benar-benar bersih. Jika container ini sedang berjalan, akan di stop dan di start ulang (agar tidak terjadi conflict)

Sekarang web bisa dilihat melalui http://localhost:8900

dengan Docker, bisa run sekaligus beberapa container dari images yang sama, caranya hanya jalankan docker run berbeda-beda port. Lalu preview di browser. Detailnya:

$ docker run -p 8901:80 --name web1 tutum/hello-world $ docker run -p 8902:80 --name web2 tutum/hello-world

Lihat di browser http://localhost:8901 dan http://localhost:8902

untuk melihat list images yang ada di local device

$ docker images

untuk menghapus images yang ada di local device

$ docker rmi nama-images -f

-f berarti force, untuk menghentikan container yang sedang berjalan

$ docker rm id-container atau

(14)

1.4. Dockerfile

Jika pernah membuat server untuk sebuah website berbasis html atau php yang dilakukan dengan melakukan instalasi web server (contoh: nginx) di server dan kemudian memasukan file website anda di directory /var/www/html . Saat ini akan migrasi ke container. Lalu bagaimana caranya membuat supaya container image anda berisi semua file website anda yang ada di directory /var/www/html tersebut? Caranya adalah dengan membuat custom image sendiri menggunakan

Dockerfile. Jika sudah terbentuk image, image tersebut bisa anda upload di

docker hub untuk kemudian bisa digunakan dimana saja dan ketika anda menjalankan image tersebut, aplikasi anda akan berjalan dan bisa digunakan.

Apa itu docker file?

Dockerfile adalah sebuah file yang digunakan untuk membuat container image. Lalu bagaimana caranya membuat custom image dengan Dockerfile ? Ikuti langkah-langkah yang akan dibahas dibawah.

Apa itu docker hub?

Docker Hub merupakan registry tempat penyimpanan docker image. Setelah membuat custom image dengan nama yang dinginkan, selanjutnya adalah bisa push image tersebut ke registry, salah satunya Docker Hub. Selanjutnya jika ingin menggunakan image tersebut, hanya perlu pull image tersebut ke server dari Docker Hub.

(15)

1. MacOS or Linux 2. docker installed 3. port open 80

Tutorial

Langkah-1: Pastikan server atau komputer sudah terinstall docker. Untuk

mengeceknya bisa ketikan perintah docker -v

$ sudo docker -v output

Docker version 18.09.7, build 2d0083d

Langkah-2: Buat folder dengan nama sample dengan

$ mkdir sample

Langkah-3: masuk ke folder sample

$ cd sample

Langkah-4: buat file dengan nama Dockerfile dan isikan dengan code berikut:

#image base

FROM nginx:alpine #copy application file

COPY html /usr/share/nginx/html

Langkah-5: Buat folder html

(16)

Langkah-6: masuk ke folder html dan buat file index.html , isikan dengan kode html berikut: <!DOCTYPE html> <html> <body> <h1>Hello World</h1> </body> </html>

Langkah-7: masuk ke directory dimana file Dockerfile berada, kemudian ketikan

perintah berikut untuk build image

$ sudo docker build -t application:versi-1 .

Langkah-8: Cek image yang telah terbentuk dengan perintah $sudo docker

images dan akan muncul seperti berikut: $ sudo docker images

output

REPOSITORY TAG IMAGE ID CREATED SIZEapplication versi-1 b5132100360e About a minute ago 21.1MB

Langkah-9: Jalankan image yang sudah anda buat dengan perintah berikut

$ sudo docker run -d -p 80:80 application:versi-1

Langkah-10: Lihat container yang berjalan

$ sudo docker ps output

(17)

CONTAINER ID IMAGE COMMAND

CREATED STATUS PORTS NAMESf7ecdffdc1fe application:versi-1 "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds

0.0.0.0:80->80/tcp ecstatic_antonelli

Langkah-11: Uji coba akses localhost port 80, jika berhasil akan tampil aplikasi

yang anda buat pada langkah-6. $curl -XGET localhost

output <!DOCTYPE html> <html> <body> <h1>Hello World</h1> </body> </html>

Jika mengakses dari browser, maka aplikasi akan muncul seperti gambar dibawah ini.

1.5. Docker Compose

Apa itu docker-compose?

(18)

Docker-compose adalah sebuah alat dari docker yang digunakan untuk mendefinisikan dan menjalankan aplikasi multi kontainer. Dengan docker-compose dapat menjalankan kontainer 1 dengan yang lainya dengan 1 perintah. Docker-compose juga menggunakan yaml file untuk menyimpan konfigurasi dari service yang dibuat.

Membuat docker-compose.yaml

Membuat config docker-compose.yaml agar kontainer dari aplikasi yang di buat dapat terintegrasi dengan kontainer mongoDB.

version: '3.7' services: mongo: image: mongo:latest container_name: mongodb hostname: mongo volumes: - mongo:/data/db restart: always networks: - app app: build : . ports: - 3006:3006 depends_on: - mongo environment: WAIT_HOSTS: mongo:27017 networks: - app

(19)

networks: app: volumes: Mongo:

Disini penjelaskan sedikit tentang keyword yang ada di docker-compose.

● service : digunakan untuk mendefinisikan service yang ada

● image: digunakan untuk mendefinisikan image dari sebuah service

● hostname: digunakan untuk mendefinisikan hostname dari sebuah service ● container_name : digunakan untuk mendefinisikan nama container

● build : digunakan untuk membuild images aplikasi di berdasarkan Dockerfile yang ada pada direktori yang telah di definisikan

● networks : digunakan untuk membuat network dan mendefinisikan network dari kontainer , apabila networks yang di definisikan belum ada maka otomatis akan dibuat

● volumes : digunakan untuk membuat volumes dan mendefinisikan volumes dari kontainer , apabila volumes yang di definisikan belum ada maka otomatis akan dibuat

● environment: digunakan untuk mendefinisikan env variable ke dalam container

● ports: digunakan untuk mengexpose port keluar dari container

Menjalankan Aplikasi dengan perintah docker-compose

Sebelum kita menjalankan aplikasi kita pastikan konfigurasi aplikasi kita sudah tepat sesuai dengan apa yang kita definisikan di docker-compose.

APP_PORT=3006

MONGOURI="mongodb://mongo:27017/kitten" .env

Setelah semua siap kita dapat menjalankan aplikasi kita dengan perintah : docker-compose up --build

(20)

Perintah ini juga dapat digunakan apabila ada pembaharuan code di aplikasi kita, yang mana akan membuild ulang images dari aplikasi kita.

log docker-compose

2. Laravel

2.1. Pengantar Laravel

Pengembangan website akan terasa lebih mudah jika menggunakan tool yang tepat. Contohnya pemilihan framework php yang akan digunakan, Framework yang baik adalah framework yang sesuai dengan kebutuhan aplikasi web yang akan Anda bangun. Tidak hanya itu, framework juga harus bisa menyederhanakan proses pembuatan dan menghasilkan performa aplikasi web yang lebih maksimal.

(21)

Salah satu framework yang sangat populer saat ini adalah Laravel. Framework ini terkenal kesederhanaannya dan menghasilkan aplikasi web yang powerful. Apa itu Laravel? Sebelum Anda mengetahui pengertian Laravel, ada baiknya jika Anda sedikit mengetahui tentang bahasa pemrograman PHP. PHP adalah salah satu bahasa pemrograman yang paling banyak digunakan. Dengan semakin populernya bahasa ini, maka banyak framework PHP yang muncul, salah satunya adalah Laravel.

Laravel ini menyediakan berbagai fitur unik yang menjadikan Laravel menjadi framework PHP dengan performa yang hebat. Tidak heran jika banyak pengembang website yang mengandalkan Laravel untuk meningkatkan produktivitas serta memudahkan tugas-tugas mereka. Jika Anda adalah pengembang website dan belum pernah menggunakan Laravel, mungkin sudah saatnya Anda mulai mempelajarinya.

2.1.1.

Apa itu Framework

Framework adalah seperangkat struktur dan pedoman konseptual, yang digunakan untuk membangun sesuatu yang bermanfaat. Jadi bisa dikatakan framework merupakan software untuk memudahkan para programer untuk membuat sebuah aplikasi web.

Dalam framework terdapat software, Software Framework adalah struktur yang dapat kamu gunakan dalam membangun sesuatu. Software Framework memungkinkan kamu untuk menggunakan jenis komponen yang berbeda, berkomunikasi dengan API eksternal dan menentukan struktur aplikasi.

Software framework memungkinkan kamu untuk:

Reduce Complexity : Software framework memudahkan kamu dalam menghadapi situasi yang kompleks dan memecahnya menjadi beberapa bagian. Clean Code : Software Framework dapat membantu kamu dalam menulis kode yang bersih dan dapat digunakan dengan baik.

Testing and Debugging : software framework dapat membuat pengujian lebih mudah dan proses debugging menjadi lebih menyenangkan.

Coding Guidelines : Software Framework memaksamu menjalankan panduan ketat untuk mengikuti rekan tim kamu yang sedang mempromosikan basis kode yang konsisten dengan lebih sedikit bug.

Scaling : Framework Software membantu kamu dalam meningkatkan permintaan. Tidak peduli seberapa cepat aplikasi kamu berkembang, Framework membuatnya lebih mudah untuk mengukur pada permintaan.

(22)

Anda pasti tahu bahasa pemrograman PHP? Laravel adalah satu-satunya framework yang membantu Anda untuk memaksimalkan penggunaan PHP di dalam proses pengembangan website.

PHP menjadi bahasa pemrograman yang sangat dinamis, tapi semenjak adanya Laravel, dia menjadi lebih powerful, cepat, aman, dan simpel. Setiap rilis versi terbaru, Laravel selalu memunculkan teknologi baru di antara framework PHP lainnya.

Laravel diluncurkan sejak tahun 2011 dan mengalami pertumbuhan yang cukup eksponensial. Di tahun 2015, Laravel adalah framework yang paling banyak mendapatkan bintang di Github. Sekarang framework ini menjadi salah satu yang populer di dunia, tidak terkecuali di Indonesia.

Laravel fokus di bagian end-user, yang berarti fokus pada kejelasan dan kesederhanaan, baik penulisan maupun tampilan, serta menghasilkan fungsionalitas aplikasi web yang bekerja sebagaimana mestinya. Hal ini membuat developer maupun perusahaan menggunakan framework ini untuk membangun apa pun, mulai dari proyek kecil hingga skala perusahaan kelas atas.

Laravel mengubah pengembangan website menjadi lebih elegan, ekspresif, dan menyenangkan, sesuai dengan jargonnya “The PHP Framework For Web Artisans”. Selain itu, Laravel juga mempermudah proses pengembangan website dengan bantuan beberapa fitur unggulan, seperti Template Engine, Routing, dan Modularity.

Laravel juga merupakan sebuah framework PHP yang dirilis dibawah lisensi MIT, dibangun dengan konsep MVC (model view controller). Laravel adalah pengembangan website berbasis MVP yang ditulis dalam PHP yang dirancang untuk meningkatkan kualitas perangkat lunak dengan mengurangi biaya pengembangan awal dan biaya pemeliharaan, dan untuk meningkatkan pengalaman bekerja dengan aplikasi dengan menyediakan sintaks yang ekspresif, jelas dan menghemat waktu.

MVC adalah sebuah pendekatan perangkat lunak yang memisahkan aplikasi logika dari presentasi. MVC memisahkan aplikasi berdasarkan komponen- komponen aplikasi, seperti : manipulasi data, controller, dan user interface. 1. Model, Model mewakili struktur data. Biasanya model berisi fungsi-fungsi yang

membantu seseorang dalam pengelolaan basis data seperti memasukkan data ke basis data, pembaruan data dan lain-lain.

2. View, View adalah bagian yang mengatur tampilan ke pengguna. Bisa dikatakan berupa halaman web.

(23)

2.1.3.

2 Tools Andalan Laravel

Selain itu, ada dua tools Laravel yang jarang dimiliki oleh framework lain (kecuali Symphony), yaitu Composer dan Artisan. Apa kegunaan masing-masing dari tool tersebut?

2.1.3.1.

Composer

Composer merupakan tool yang di dalamnya terdapat dependencies dan kumpulan library. Seluruh dependencies disimpan menggunakan format file composer.json sehingga dapat ditempatkan di dalam folder utama website. Inilah mengapa composer terkadang dikenal dengan dependencies management.

Pertanyaannya lain, apa itu dependencies management?

Misalnya Anda mempunyai sebuah website yang membutuhkan sebuah library. Saya ambil contoh library untuk mengimplementasikan validasi dan proteksi untuk spamming, yaitu Google reCaptcha.

Tentu saja untuk menyediakan Google reCaptcha tidak bisa menggunakan satu library saja, tapi membutuhkan beberapa library. Anda tidak mungkin menginstall satu per satu library, kan?

Nah! Composer membantu Anda untuk menginstall library yang dibutuhkan oleh library Google reCaptcha. Jadi jika menggunakan composer Anda tinggal menginstall library Google reCaptcha dan secara otomatis library lain akan terinstall.

2.1.3.2. Artisan

Sudah pernah mendengar ini? Artisan merupakan command line interface yang dimiliki oleh Laravel. Artisan mencakup sekumpulan perintah yang membantu Anda untuk membangun sebuah website atau aplikasi web. Kumpulan perintah Artisan juga termasuk penggabungan dengan framework Symphony yang menghasilkan fitur add-on di Laravel 5.1 (sekarang sudah masuk ke versi Laravel 7). Dengan adanya fitur add-on, Anda bisa menambahkan berbagai macam fitur baru ke Laravel.

Begitu pun ketika ingin memperbarui library, Anda cukup menggunakan perintah “$ composer update” dan satu per satu library akan diperbarui secara otomatis.

(24)

2.1.3.3.

Fitur-Fitur Laravel Lainnya

Laravel mempunyai berbagai macam fitur yang tidak semua framework menyediakannya. Apalagi Laravel adalah framework yang modern sehingga Anda dapat melakukan berbagai hal menggunakan framework ini seperti proses otentifikasi terbaru.

Berikut ini beberapa fitur Laravel yang perlu Anda ketahui.

Fitur Deskripsi

Blade Template Engine

Laravel menggunakan Blade. Blade merupakan template engine untuk mendesain layout yang unik. Layout yang didesain dapat digunakan di tampilan lain sehingga menyediakan konsistensi desain dan struktur selama proses pengembangan.. Dibandingkan dengan template engine lain, Blade mempunyai kelebihan: tidak membatasi pengembang untuk menggunakan kode PHP biasa di dalam tampilan; desain tampilan blade akan tetap di-cache sampai dengan ada modifikasi.

Routing Di Laravel, semua request dipetakan dengan bantuan rute. Dasar dari routing adalah merutekan request ke kontroler terkait. Routing ini dianggap dapat mempermudah pengembangan website dan meningkatkan performanya. Setidaknya ada tiga kategori routing di Laravel, yaitu basic routing, route parameters, dan named routes.

Modularity Seperti yang sudah dibahas di bagian sebelumnya, di dalam Laravel terdapat kumpulan modul dan library yang terkait dengan composer. Fitur ini membantu Anda untuk menyempurnakan dan meningkatkan fungsionalitas dari website yang dibangun, serta mempermudah proses update.

Authentication Laravel membuat pengimplementasian otentikasi menjadi sangat sederhana. Seluruh proses konfigurasi otentikasi sudah berjalan secara otomatis. Anda bisa menemukan file konfigurasi otentikasi ini di ‘config/auth.php’. Di dalam file ini terdapat beberapa opsi otentifikasi yang sudah terdokumentasikan dengan baik dan sewaktu-waktu dapat Anda sesuaikan dengan kebutuhan sistem.

(25)

Query Builder and ORM

Laravel database query builder menyediakan antarmuka yang lancar untuk membuat dan menjalankan database query. Fitur ini dapat digunakan untuk menjalankan berbagai operasi database di dalam website dan mendukung berbagai sistem database.

Schema Builder

Class Laravel Schema menyediakan database agnostic untuk memanipulasi tabel. Schema ini berjalan baik di berbagai tipe database yang didukung Laravel dan mempunyai API yang sama di seluruh sistem.

Configuration Management Features

Seluruh file konfigurasi Laravel disimpan di dalam direktori config. Setiap opsi didokumentasikan dengan baik. Jadi Anda tidak perlu khawatir untuk mengubah setiap konfigurasi yang tersedia.

E-mail Class Laravel menyediakan API beberapa library SwiftMailer yang cukup populer dengan koneksi ke SMTP, Postmark, Mailgun, SparkPost, Amazon SES, dan sendmail. Fitur ini memungkinkan Anda untuk mengirimkan email dengan cepat melalui aplikasi lokal maupun layanan cloud.

Redis Laravel menggunakan Redis untuk menghubungkan antara sesi yang sudah ada dengan cache general-purpose. Redis terkoneksi dengan session secara langsung. Redis merupakan aplikasi open source yang menyimpan key-value. Redis juga sering dikenal dengan server struktur data yang dapat menyimpan key dengan tipe strings, hashes, lists, sets, dan sorted sets.

2.2. Instalasi

2.2.1. Persyaratan Server

Untuk menginstal framework Laravel, dibutuhkan web server sebagai media operasinya dengan memperhatikan kebutuhan berikut ini.

● PHP >= 7.2.5 ● BCMath PHP Extension ● Ctype PHP Extension ● Fileinfo PHP extension ● JSON PHP Extension ● Mbstring PHP Extension ● OpenSSL PHP Extension ● PDO PHP Extension ● Tokenizer PHP Extension ● XML PHP Extension

(26)

Library diatas perlu disiapkan sebelum melakukan instalasi framework Laravel pada web server.

2.2.2. Instalasi

Instalasi framework Laravel bisa dilakukan dengan 2 cara, yaitu via Laravel Installer dan yang kedua via Composer create project. Berikut ini penjelasan dari kedua cara tersebut.

Via Laravel Installer,

composer global require laravel/installer Via composer create project,

composer create-project --prefer-dist laravel/laravel:^7.0 blog

2.3. Konfigurasi

Setelah berhasil melakukan instalasi Laravel pada web server, langkah selanjutnya adalah melakukan konfigurasi aplikasi yang akan digunakan sesuai dengan kebutuhannya. Konfigurasi tersebut antara lain database, mail server, status development dan lainnya. Namun yang paling utama adalah konfigurasi database. Konfigurasi pada laravel disimpan dalam sebuah file yang bernama .env, file ini terdapat pada root direktori dari laravel tersebut. Berikut ini adalah contoh konfigurasi database pada laravel

DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=

2.4. Routing & View

2.4.1. Routing

Routing pada Laravel mempunyai peranan penting dalam menangani permintaan dari sisi klien/user. Laravel menyediakan file routing yang sangat fleksibel dan bisa di kustom sesuai dengan kebutuhan dari aplikasi yang akan dibuat. Semua request ke dalam aplikasi pasti akan melewati

(27)

routing terlebih dahulu sebulm akhirnya diproses oleh controller. Berikut ini adalah contoh file routing yang digunakan dalam microsite ini.

$router->get('/list', ['uses' => 'HomeController@getList']);

$router->get('/detail', ['uses' => 'HomeController@getDetail']);

$router->get('/category', ['uses' => 'HomeController@getCategory']);

$router->get('/sub-category', ['uses' => 'HomeController@getSubCategory']);

$router->get('/highlight', ['uses' => 'HomeController@getHighlight']);

$router->post('/feedback', ['uses' => 'HomeController@postFeedback']);

2.4.2. View

Tampilan aplikasi yang digunakan dalam Laravel mempunyai kode sumber yang disimpan di dalam folder yang bernama View. Folder ini menangani berbagai macam asset yang digunakan dalam tampilan aplikasi selain dari kode sumber dalam format html, js, maupun css. Berikut ini adalah contoh file view pada framework Laravel

<!DOCTYPE html> <html lang="en"> <head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Microsite</title>

<link rel="stylesheet"

href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/ css/bootstrap.min.css" integrity

="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRx T2MZw1T" crossorigin="anonymous">

<link rel="stylesheet"

(28)

<link rel="stylesheet"

href="{{url('')}}/themecode/lib/codemirror.css">

<link rel="stylesheet"

href="{{url('')}}/themecode/theme/dracula.css"> <script src="{{url('')}}/themecode/lib/codemirror.js"></script> <script src="{{url('')}}/themecode/mode/javascript/javascript.js" ></script> </head> <body> <style> textarea{

background: url(http://i.imgur.com/2cOaJ.png); background-attachment: local; background-repeat: no-repeat; padding-left: 35px; padding-top: 10px; border-color:#ccc; } </style>

2.5. Controller

Setelah melewati file routing, request dari user akan diteruskan ke dalam controller, file controller ini berada di dalam directory app/Http/Controller. Semua file controller dalam Laravel ada di directory tersebut. Controller

2.5.1. GET Data

Untuk menangani request data dari user yang menggunakan metode GET pada laravel berikut ini adalah contoh fungsi yang digunakan pada controller

public function getListData(Request $request) {

$static = StaticPage::whereType('faq') ->whereIsActive(1);

(29)

$static = $static->whereHas('category', function($q) use ($request){

$q->whereParentId($request->faqCategoryId); });

$static = $static->get();

return $static; }

2.5.2. POST Data

Untuk menangani request data dari user yang menggunakan metode POST pada laravel berikut ini adalah contoh fungsi yang digunakan pada controller

public function postSave(Request $request) {

$static = new StaticPage;

$static->title = $request->title; $static->intro = $request->intro;

$static->description = $request->description; $static->category = 'static-page';

$static->save();

return $static; }

2.6. Model

Model adalah file yang digunakan oleh framework laravel untuk mendefinisikan table pada database yang digunakan dalam aplikasi tersebut. Berbagai macam manipulasi data ke dan dari database bisa dilakukan di file ini, berikut ini adalah contoh definisi model pada aplikasi microsite

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model; use App\Models\Category;

(30)

class StaticPage extends Model {

protected $table = 'static_pages'; public function category()

{

return $this->belongsTo(Category::class); }

}

3. Deployment

Untuk melakukan deployment ke server menggunakan Docker, hal yang harus disiapkan adalah File Manifest yang akan dijalankan secara otomatis oleh docker compose.

3.1. Manifest File

Manifest file yang akan digunakan dalam deployment microsite ini menggunakan web server Nginx, bahasa pemrograman PHP versi 72 dan database menggunakan MySQL versi 5.7

3.1.1. Dockerfile

Dockerfile digunakan untuk mendefinisikan konfigurasi serta service apa saja yang akan digunakan oleh microsite ini agar bisa berjalan sesuai dengan yang semestinya. Berikut ini adalah dockerfile yang akan digunakan dalam proses deployment microsite yang sudah dibuat pada bab sebelumnya.

FROM php:7.2-fpm

# Copy composer.lock and composer.json COPY composer.lock composer.json /var/www/

# Set working directory WORKDIR /var/www

(31)

# Install dependencies

RUN apt-get update && apt-get install -y \ build-essential \ libpng-dev \ libjpeg62-turbo-dev \ libfreetype6-dev \ locales \ zip \

jpegoptim optipng pngquant gifsicle \ vim \

unzip \ git \ curl # Clear cache

RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions

RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/

RUN docker-php-ext-install gd

# Install composer

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Add user for laravel application RUN groupadd -g 1000 www

RUN useradd -u 1000 -ms /bin/bash -g www www

# Copy existing application directory contents COPY . /var/www

# Copy existing application directory permissions COPY --chown=www:www . /var/www

# Change current user to www USER www

(32)

# Expose port 9000 and start php-fpm server EXPOSE 9000

CMD ["php-fpm"]

Deskripsi :

From php:7.2-fpm merupakan perintah untuk menginformasikan bahwa image yang akan digunakan adalah image php versi 7.2-fpm. Image ini akan didownload langsung dari docker hub jika belum tersedia dalam cache ketika proses deployment berlangsung

COPY composer.lock … perintah ini digunakan untuk melakukan copy file yang ada di direktori host ke dalam folder tujuan yang ada di dalam container

WORDKIR /var/www merupakan perintah untuk menentukan posisi direktori aktif selama proses deployment berlangsung

RUN apt-get update... Perintah ini digunakan untuk mengeksekusi perintah server lewat console. Pada perintah tersebut dilakukan update paket dan instalasi paket php yang digunakan dalam microsite tersebut

USER www digunakan untuk merubah kepemilikan direktori aktif ke user www agar bisa dieksekusi oleh nginx

3.1.2. Nginx

Web server yang digunakan dalam deployment ini adalah Nginx. Web server nginx yang digunakan adalah rilis docker image dengan tag alpine yang ada di docker hub. Berikut ini adalah konfigurasi nginx yang diterapkan dalam deployment ini.

server { listen 80;

index index.php index.html;

error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/public; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

(33)

}

location / {

try_files $uri $uri/ /index.php?$query_string; gzip_static on;

} }

3.1.3. PHP

Konfigurasi PHP yang digunakan dalam manifes file ini bertujuan untuk mengoverwrite konfigurasi PHP yang ada pada web server setelah dilakukan deployment karena pada dasarnya konfigurasi PHP yang ada pada web server masih menggunakan konfigurasi standar, sehingga perlu dilakukan perubahan config sesuai dengan kebutuhan aplikasi yang akan digunakan. Berikut ini adalah konfigurasi yang diterapkan dalam proses deployment ini

upload_max_filesize=40M post_max_size=40M

3.1.4. MySQL

Sama halnya dengan konfigurasi PHP pada sub bab sebelumnya, MySQL juga menggunakan file manifest untuk memperbaharui konfigurasi standar MySQL yang ada di server dengan konfigurasi yang dibutuhkan oleh lingkungan aplikasi. Berikut ini adalah manifest file untuk konfigurasi MySQL

[mysqld]

general_log = 1

general_log_file = /var/lib/mysql/general.log

3.1.5. Docker Compose

Docker compose adalah sebuah perangkat yang mendefinisikan dan menjalankan multiple kontainer aplikasi pada docker. Kita menggunakan manifest ini untuk mengatur konfigurasi dari service yang akan digunakan serta bisa menjalankan semua service tersebut hanya dengan menggunakan satu baris perintah

(34)

services: #PHP Service app: build: context: . dockerfile: ./setup/Dockerfile image: kirik.com/php container_name: kirik_app restart: unless-stopped tty: true environment: SERVICE_NAME: app SERVICE_TAGS: dev working_dir: /var/www volumes: - .:/var/www - ./setup/php/local.ini:/usr/local/etc/php/conf.d/local.ini networks: - app-network #Nginx Service webserver: image: nginx:alpine container_name: kirik_webserver restart: unless-stopped tty: true ports: - "8002:80" - "4443:443" volumes: - ./:/var/www - ./setup/nginx/conf.d/:/etc/nginx/conf.d/ - ./setup/nginx/ssl/:/etc/nginx/ssl/ networks: - app-network #MySQL Service db: image: mysql:5.7.22 container_name: kirik_db restart: unless-stopped

(35)

tty: true ports: - "13301:3306" environment: MYSQL_DATABASE: kirik_website MYSQL_ROOT_PASSWORD: root123 SERVICE_TAGS: dev SERVICE_NAME: mysql volumes: - ./dbdata:/var/lib/mysql - ./setup/mysql/my.cnf:/etc/mysql/my.cnf networks: - app-network #Docker Networks networks: app-network: driver: bridge #Volumes volumes: dbdata: driver: local

3.1.6 Run

Untuk menjalankan aplikasi microsite ini hanya perlu menjalankan perintah berikut ini pada document root aplikasinya

$ docker-compose up

Setelah perintah tersebut dijalankan maka docker daemon akan segera mengeksekusi perintah yang ada di file docker-compose.yml yang sudah didefinisikan sebelumnya, jika berjalan sesuai dengan harapan maka web microsite akan tampil pada alamat http://localhost:8002

Referensi

Dokumen terkait

(2011) yang menemukan bahwa aplikasi formula pakan dengan bahan baku lokal dan pakan komersil pada ikan lele juga memberikan hasil pertumbuhan yang tidak berbeda nyata.. Hasil

En este caso, son los temas sociales y jurídicos los que cuentan tanto con un mayor número de fuentes (175 en total, que se corresponde con un 29% de todas las fuentes citadas por

Näiden vaikutukset liittyvät pääosin keräimien ja paneeleiden valmistuk- sessa käytettävien raaka-aineiden tuotantoon ja hankintaan, joista ilmastonmuutos,

Wanita pelaku samen leven sudah melanggar aturan dan norma-norma yang berlaku dalam masayarakat, sehingga dianggap telah mencoreng nama baik keluarga, dianggap

1. Implementasi prinsip Pelayanan Publik yang sesuai dengan PP Nomor 96 Tahun 2012 Tentang Pelayanan Publik di Kelurahan Tasikmadu yang mengacu pada

Berdasarkan tinjauan masalah yang ada, salah satu alternatif untuk memperbaiki kemampuan pemecahan masalah matematika siswa kelas VII semester ganjil SMP

(2016b) menguji hubungan pengungkapan risiko terhadap biaya modal ekuitas di sektor perbankan Bangladesh hasilnya menunjukkan bahwa pengungkapan risiko perusahaan dapat

„Saya hanya seorang yang pernah mndengar darinya, sejauh yang saya bias katakan.‟ Dari hasil identifikasi dan klasifikasi konjungsi subordinatif, kami akan memaparkan