Tutorial Instalasi Laravel + Docker (Laradock)
Cara mudah membuat environment coding di local semakin baik dengan tools Devops yang lagi ngehits dikalangan developer!
Haloooooo gengs! Mumpung masih anget + inget gue mau berbagi insight tentang salah satu ilmu di Devops nih gengs!
Sebelum mulai bentar ya gue dongeng dulu, jadi gue baru saja dapet claps dari agan Ihwan ID pada artikel gue yang ngebahas Fastify. Nah jujur aja gue suka Kepo sama yang ngefollow gue dan ngasih claps serta response ke artikel gue. Kebetulan mas Ihwan ini ternyata nulis tentang Laradock di blognya. Gue yang juga lagi pengen move on dari Homestead penasaran sama Laradock. Akhirnya gue kulik dan selesai, gue bisa instalasi dan troubleshoot masalah yang kemungkinan ada dan akan gue jelasin di artikel ini.
Bagi yang gatau apa itu pengertian Devops yaudah singkat aja nih ya.
DevOps is a software engineering culture and practice that aims at unifying software development and software operation.
Atau yang kalo di terjemahin artinya adalah ilmu mengenai software engineering yang berhubungan langsung sama development dan operational sebuah software. Ya bisa dibilang si Devops ini biasanya udah erat main dengan sistem operasi dan software-software pendukungnya kaya Server Apache, Nginx, Tomcat, terus juga software redis, beanstalk, rabbitmq dll yang berhubungan dengan operasi sebuah software. Selain itu Devops juga harus paham trouble shooting yang akan dipake sebuah software, misalnya Laravel 5.7 harus pake PHP 7.2 terus nanti pake FPM atau FastCGI yang cocok sama environment tuh server. Devops juga harus bisa nyiapin server buat development. Nah oleh karena itu bisa dibilang ini orang bakalan puyeng banget di server, karena kalo salah setting ya bisa ga jalan aplikasinya HEHEHE.
Nah seorang backend developer juga sebenernya harus punya ilmu tentang Devops, ya sikit-sikit paling nggak bisa lah setting Laravel pake Nginx, MySQL / Maria DB / MongoDB dan semuanya harus manual tanpa CPANEL (sekali lagi… tanpa CPANEL). Jadi buat kamu yang masih ngandelin CPANEL ya maap-maap aja nih ngga bisa buat jadi Devops hehehe.
Oke next setelah ngebahas Devops gue mau bahas lagi kenapa pake Docker.
Docker itu ibarat sebuah kontainer, bedanya sama Homestead apasih docker? Homestad itu adalah sebuah VM (Virtual Machine).
Dari gambar diatas bisa dijelasin dengan gampang, docker itu sebelah kanan dan VM sebelah kiri. Docker bisa dibilang sebagai engine yang udah siap dipake dengan cara numpang ke si OS. Sedangkan si VM itu adalah OS yang numpang kedalam sebuah OS itu sendiri (OS tamu).
Pandangan saya ke docker kurang lebih sih kaya gini, ibarat rumah kos dengan kamar mandi dalam masing-masing, nah si A B C D adalah VM atau OS tamu yang diibaratkan sebagai kamar. VM butuh ruang sendiri untuk jalanin apa yang mereka mau dan mereka butuhkan. VM juga butuh ruang yang nggak kecil loh dibanding sama Docker. Jadi bisa dibilang lebih expensive lah buat jalanin sebuah OS tamu. Tapi ya itu tergantung kebutuhan kalian.
Sedangkan Docker itu ibarat rumah kos yang kamar mandinya, ruang tamunya, kamar jemurannya bisa dipake bareng-bareng. Jadi si A B C D ini adalah aplikasinya yang langsung bisa ngakses resource yang sama yang telah si docker siapkan.
Nah semoga ga bingung ya gambaran awalnya wkwkwk. Lanjottt!
Jadi si Laradock ini bisa dibilang ya mirip kaya Laravel Homestead loh, kenapa gitu? Karena si Laradock ini punya software daleman yang ajib gila mirip coy sama Homestead.
- Redis
- MySQL
- MariaDB
- Postgre SQL
- Jenkins
- RabbitMQ
- Laravel Echo
- Mongo (Bahkan ada MongoDB)
- Mailu
- Gitlab
- Beanstalk
- MsSQL
- Apache
- Nginx
Dah segitu aja deh masih banyak padahal takut kepenuhan gue wkwkw bagus banget pokoknya. Mantapu lah!
Kelebihan dari Docker vs Vagrant sendiri adalah Docker bisa menentukan apa yang sebenernya aplikasi kita butuhkan, bukan menyediakan hal yang (mungkin aja) kamu butuhkan. Jadi pola pikirnya adalah, dengan Docker kita tau apa yang kita butuhin dan kita install yang kita butuhkan saja. Sedangkan dengan Vagrant kita disediain apa aja secara otomatis baik kita butuh atau enggak.
Nah oke kita siap mulai ya! WKWKWK kebanyakan ngoceh daritadi.
Untuk Windows silahkan download dimari.
Untuk Linux kalian paling ajib, tinggal jalanin aja command dibawah
sudo apt-get install docker
sudo apt-get install docker-compose
Syaratnya harus ada docker dan docker-compose.
Oke kalo udah lanjut. Buat sebuah folder dimanapun, kalo bisa sih windows di C:/ aja hehe terus kasih nama docker.
Kalo udah, silahkan masuk ke dalam folder docker terus jalanin di command prompt kalian.
git clone https://github.com/Laradock/laradock.git
Kita akan ngeclone isi file laradock yang telah berisi environment lengkap untuk developer PHP.
Kalo udah silahkan masuk ke dalam folder laradock terus lakukan command berikut untuk linux. Kita copy file env-example untuk jadi environment filenya.
cp env-example .env
Untuk windows ya pake notepad++ aja huehehe.
Kalo sudah langsung kita build nyok container kita.
Pada selanjutnya kita akan mendownload kontainer kita, kecepatan download ini tergantung kecepatan internet dan menggunakan kuota yang tidak sedikit (lebih dari 200MB) tapi ngga akan sebanyak Vagrant sih karena kita gaperlu download OS.
Sebelum dijalankan monggo di cek bagi yang windows apakah XAMPP nya masih nyala dan bagi linux apakah LAMPP nya masih nyala, karena apabila masih nyala port 3306 aka default MySQL akan ketabrak sama instalasi si docker. Monggo dimatiin dulu atau agan-agan bisa ganti port si Docker MySQL di file .env didalam folder Laradock.
sudo docker-compose up --build -d nginx mysql phpmyadmin redis workspace
Docker harus menggunakan sudo karena kita docker akan sedikit merubah isi dalam sistem linux kita untuk membuat container. Apabila kamu ingin tanpa menggunakan sudo bisa dibaca disini https://docs.docker.com/install/linux/linux-postinstall/ #Thanks to Refda
Notes: nginx mysql phpmyadmin redis workspace adalah tools yang akan kita bangun, kamu dapat menggantinya sesuai dengan kebutuhan kamu seperti rabbitmq, postgre, laravel echo. Semua yang ada di ENV bisa kamu gunakan untuk di build. Tinggal tambahin nama foldernya saat kamu melakukan compose up. Tambahan command Build digunakan kalo kita pertama kali ngebuild dan belum ada data mysql, nginx,phpmyadmin, redis sama sekali. Bisa tanpa command tersebut sih, tapi tadi saya error sehingga saya harus nambahin command tersebut.
Seperti yang saya bilang diatas, kita hanya membutuhkan nginx mysql phpmyadmin dan redis. Workspace adalah tempat kerja bawaan si laradock, jadi harus ditulis. Sedangkan kalo aplikasi kalian ngga butuh phpmyadmin karena udah ada GUI Tools dan gapake redis karena gaada kebutuhan database dengan redis ya gaperlu ditulis. Jadi agan hanya akan install nginx dan mysql. Be a smart developer, install what do you need, not what do you maybe need in the further.
Nah kalo udah kelar semuanya, berarti kita udah punya
- MySQL
- Redis
- Beanstalk
Ketiga tools ini bisa dipake di Project Laravel kalian.
Sekarang saatnya masuk kedalam si container, dengan cara
sudo docker-compose exec --user=laradock workspace bash
Nah kalo udah berhasil kalian akan masuk kedalam sistem seperti ini.
Kalo udah masuk berarti sekarang kita tinggal ngebuat projek aja nih. Pastiin internet lancar ya! Langsung aja jalanin command dibawah.
composer create-project laravel/laravel blog --prefer-dist
Otomatis akan mendownload Laravel 5.7 (Terbaru) karena Laradock ini defaultnya menggunakan PHP 7.2, apabila kamu mau ubah tinggal ubah aja di .env dalam folder Laradock.
Kalo udah selesai saatnya kita nyetting dulu nih konfigurasi si projek baru kita.
Masih didalam si container laradock, silahkan masuk ke folder laradock/nginx/sites
cd laradock/nginx/sites
Apabila udah masuk didalamnya kalian bisa tulis command
ls -l
Untuk cek ada file apa saja didalamnya, nah tentunya kalian juga akan melihat file .conf yang sudah ada didalamnya. Beruntungnya Laradock baik bgt udah nyiapin configuration laravel buat kita.
Caranya gampang banget, tinggal copy file laravel.conf.example ke blog.conf
cp laravel.conf.example blog.conf
Nah akan terbuat file blog.conf, setelah itu edit file blog.conf dengan cara
nano blog.conf
Maka akan muncul settingan lengkap khas NGINX untuk ngatur lokasi dari project kita. Emang agak ribet sih dibanding Homestead, tapi lumayan loh nambah insight biar pas disuruh nginstall pake NGINX sendiri gak bingung hehehe. Jadi developer kan emang harus belajar hal baru setiap harinya ^^.
Lanjot! Silahkan ubah dibagian ini aja.
server_name laravel.test;
root /var/www/laravel/public;
menjadi
server_name blog.test;
root /var/www/blog/public;
Nah kalo udah sip banget, kita bisa keluar dari container dengan menuliskan command
exit
Kalo udah berarti kita harus ngedit file hosts di OS kita, untuk windows silahkan pergi ke
C:\windows\system32\drivers\etc\hosts
untuk linux
cd /etc/
sudo nano hosts
Tambahkan baris dibawah ini.
127.0.0.1 blog.test
Nah sampai juga di penghujung artikel, karena kita udah ngubah konfigurasi di nginx, maka kita perlu ngerestart si nginx untuk ngebaca konfigurasi baru kita. Silahkan masukkan command dibawah.
docker-compose restart nginx
Nah kalo sudha direstart kaya begini.
Kalo udah direstart silahkan jalankan browser kalian buka http://blog.test dan silahkan cek sendiri magic yang telah berjalan.
Sudah berjalan kan? mantap lah mantap. Eits kita belum selesai gan, ada sesuatu yang harus saya sampaikan.
Kalo silahkan agan buka file .env didalam docker. Cari bagian MySQL
### MYSQL #################################################MYSQL_VERSION=latest
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
Nah untuk yang belum paham, ini adalah settingan yang bisa kalian ganti untuk MySQL. Karena kita menggunakan latest saat defaultnya, berarti MySQL kalian menggunakan versi terbaru yaitu 8.0.
MySQL ini akan jadi masalah untuk kalian karena default account dari MySQL menggunakan plugin caching_sha2_password sehingga dapat dipastikan project Laravel kalian bakalan error pas konek ke database. Hal ini umum terjadi pada MySQL versi > 5.6 seperti 5.7 dan 8.0. Tapi tenang saya punya solusinya. Bahkan project Node JS saya aja pada error karena masalah ini wkwkwk.
Pertama konek dulu ke database kalian dengan MySQL GUI di laptop kalian dengan data sbb:
host: 127.0.0.1
username: root
password: root
Kalo gagal bisa nyoba dibawah ini
host: 127.0.0.1
username: default
password: secret
Nah setelah masuk silahkan masukkan query dibawah ini, kita akan ngebuat user dengan kredibel username homestead dan password secret.
use mysql;
CREATE USER ‘homestead’@’%’ IDENTIFIED WITH mysql_native_password BY ‘secret’;
GRANT ALL PRIVILEGES ON *.* TO ‘homestead’@’%’;
FLUSH PRIVILEGES;
Kalo misalnya agan-agan pada males buat user baru juga bisa kok ngubah tipe plugin si root dengan cara:
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'homestead'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
Nah mantap kalo sudah silahkan di test dengan akun homestead atau akun root yang telah agan ubah, pasti tokcer bisa connect lagi Laravelnya ke database.
Q: Bisa gak gan kalo saya pake versi 5.6 aja MySQLnya?
A: Bisa banget, tinggal ganti aja versi MySQL nya di .env si Laradock, tapi sebelum ganti jangan lupa dihapus dulu folder mysql didalam folder .laradock, untuk Linux dia ada di Home folder kalian. Untuk windows setau saya adanya di folder C:. Setelah dihapus tinggal jalanin
docker-compose up --build -d mysql
Jadi deh mysql agan siap digunakan!
Okeh mungkin itu aja yang bisa saya sampaikan ya untuk Docker. Selain lebih ringan, lebih worth it juga menurut saya karena agan gaperlu Booting lama saat mulai docker kedua kalinya abis install. Bahkan lebih cepet dari Homestead loh bootingnya hahaha.
Semoga bermanfaat dan happy coding ^^!