Rabu, 08 Januari 2020

DOCKER-deploy web laravel


Selamat datang di blog Kelompok Linux Arek Suroboyo (KLAS). Kali ini saya ingin berbagi ilmu tentang Docker. Berawal pada saat saya mengisi acara Cangkru’an Lokakarya Docker Fundamental pada hari sabtu kemarin di Ruang Training APJII Jawa Timur, Intiland Tower, Surabaya. Pada saat sesi demo saya mencoba untuk mendeploy aplikasi web menggunakan framework Laravel, saya berulang kali mengalami kegagalan karena masalah permission. Namun, setelah sekian kali mencoba saya berhasil untuk menjalankan aplikasi saya melalui Docker Container. Bagaimana caranya? Disini saya ingin berbagi cara untuk melakukan deploy aplikasi Laravel kita menggunakan Docker.

Apa itu Docker?

Docker merupakan sebuah teknologi virtualisasi yang memungkinkan kita untuk mengemas, membangun dan menjalankan aplikasi yang kita buat di sistem operasi manapun yang diletakkan pada sebuah container (wadah).

Kenapa harus Docker?

Dengan menggunakan Docker, kita jadi lebih mudah untuk proses development dan testing sebuah proyek berbasis websiste yang kita buat. Sebab dengan menggunakan Docker orang lain yang akan melakukan testing aplikasi kita tidak perlu menginstall web server dan dependency satu persatu di masing-masing sistem operasi yang mereka gunakan karena semua kebutuhan untuk aplikasi kita sudah terinstal di Docker Container.

Praktik

Membuat Proyek Laravel

Untuk membuat proyek Laravel kita membutuhkan tool yang bernama Composer. Pastikan kalian sudah menginstallnya di laptop kalian masing-masing. Jika sudah menginstall Composer, lanjut untuk membuat proyek Laravel dengan mengetik perintah berikut :
composer create-project --prefer-dist laravel/laravel my_app
Kemudian jika sudah masuk ke dalam direktori proyek kita dan kemudian kita tes untuk memastikan proyek yang kita buat dapat berjalan
php artisan serve
Gambar 1. Hasil Output Perintah php artisan serve
Jika sudah berhasil harusnya aplikasi kita sudah dapat diakses.

Docker

Pada bagian ini pastikan kalian sudah melakukan instalasi Docker dan Docker Compose pada Ubuntu bisa dengan cara mengetik perintah ini dan kemudian tunggu hingga selesai.
sudo apt-get install -y docker.io docker-compose

Buat berkas-berkas yang dibutuhkan

Pada direktori proyek kita, buat dua berkas yang masing – masing bernama app.dockerfile yang akan kita gunakan untuk menginstall php dan extensi php yang dibutuhkan seperti extensi untuk mysql, web.dockerfile yang akan digunakan untuk menginstal NGINX dengan configurasi virtual host pada berkas laravelVHost.conf, dan `docker-compose.yml` yang berisi layanan yang akan kita jalankan secara bersamaan. Setelah itu isi dari masing – masing berkas tersebut adalah berikut

app.dockerfile

FROM php:7-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev && apt clean
RUN pecl install mcrypt-1.0.2 && docker-php-ext-enable mcrypt
RUN apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev && apt clean
RUN docker-php-ext-install -j$(nproc) iconv pdo_mysql 
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install -j$(nproc) gd 

WORKDIR /var/www

web.dockerfile

FROM nginx:latest

ADD ./laravelVHost.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www

docker-compose.yml

version: '3'

services:
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    volumes:
      - ./:/var/www
    restart: always
    ports:
      - "8080:80"
    links:
      - app

  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    volumes:
      - ./:/var/www
    restart: always
    links:
      - database
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"
  
  database:
    image: mysql:latest
    hostname: database
    restart: always
    command: --default-authentication-plugin=mysql_native_password
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: laravelDB
    ports:
        - "33061:3306"

  cache:
    image: redis:latest
    ports: 
      - "63791:6379"

laravelVHost.conf

server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        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;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

.env

Kita juga perlu untuk mengatur environment pada Laravel agar kita dapat menjalankan perintah untuk melakukan migrasi database.
...
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=33061
DB_DATABASE=laravelDB
DB_USERNAME=root
DB_PASSWORD=secret
...
Setelah berkas-berkas diatas telah siap, kita dapat menjalankan perintah
docker-compose up -d
Kemudian kita dapat mengakses halaman dengan mengunjungi tautan
http://localhost:8080
Harusnya sudah muncul halaman welcome page Laravel seperti pada gambar di bawah ini.
Gambar 2. Welcome Page Laravel
Jika berhasil, kita dapat melakukan migrate menggunakan perintah di bawah. Perintah ini dijalankan melalui terminal kita pada direktori proyek Laravel kita, bukan melalui container docker yang sedang berjalan.
php artisan migrate
Hasil outputnya :
Gambar 3. Hasil Output Menjalankan Perintah Migration Laravel
Jika sudah kita dapat mencoba untuk registrasi di halaman http://localhost:8080/register namun sebelumnya kita harus melakukan generate auth pada Laravel dengan menggunakan perintah :
php artisan make:auth
Perintah diatas akan membuatkan kita tampilan dan route yang dapat kita gunakan untuk autentikas user. Jika berhasil menjalankan perintah diatas, kita sudah dapat melakukan register dan login.
Selamat mencoba, maaf jika ada yang kurang. Terima kasih 🙂
Sumber :
  • https://docs.docker.com
  • https://hub.docker.com/_/php
  • https://hub.docker.com/_/nginx

Tidak ada komentar:

Posting Komentar