Saya sedang mengerjakan projek dengan menggunakan Laravel 5.4 (saya tidak menggunakan Laravel 5.5 karena requirementnya membutuhkan > php 7). ternyata Laravel 5.4 ini membutuhkan php 5.6 dan AMPPS (semacam XAMPP / MAMP) yg saya pakai masih menggunakan php versi 5.5. setelah saya searching versi php dari AMPPS ini tidak bisa diupgrade. akhirnya saya memutuskan menggunakan Docker agar yg menurut saya lebih sederhana dan mudah. Langkah-langkahnya :

  1. buat file docker-compose.yml yg berisi code untuk menjalankan docker. content dari file tersebut :
    version: "2"
    services:
      app:
        build:
          context: ./
          dockerfile: app.dockerfile
        working_dir: /var/www
        volumes:
          - ./app:/var/www
      web:
        build:
          context: ./
          dockerfile: web.dockerfile
        working_dir: /var/www
        volumes_from:
          - app
        ports:
          - 8001:80
      database:
        image: mysql:5.6
        volumes:
          - ./dbdata:/var/lib/mysql
        environment:
          - "MYSQL_DATABASE=app"
          - "MYSQL_USER=homestead"
          - "MYSQL_PASSWORD=secret"
          - "MYSQL_ROOT_PASSWORD=secret"
        ports:
          - "3306:3306"
    volumes:
      dbdata:

    versi docker compose file yg dipakai adalah versi (ada beberapa perbedaan antara versi yg lain).
    services : merupakan blok untuk inisialisasi daftar services / docker container yg akan dipakai
    app : blok inisialisasi untuk laravel
    blok build didalam app merupakan blok untuk memproses file app.dockerfile , app.dockerfile ini berisi proses untuk menginstall requirement dari Laravel. isi dari app.dockerfile

    FROM php:5.6.31-fpm
    
    RUN apt-get update && apt-get install -y libmcrypt-dev \
        libzip-dev mysql-client libmagickwand-dev --no-install-recommends \
        && pecl install imagick \
        && pecl install zip
        && docker-php-ext-enable imagick \
        && docker-php-ext-install zip
        && docker-php-ext-install mcrypt pdo_mysql zip\
        && docker-php-ext-configure zip

    volumes: adalah blok untuk mounting folder yg berisi Laravel di Host ke folder /var/www di Docker container nantinya

  2. Blok Web merupakan blok untuk inisialisasi container nginx.
    web.dockerfile berisi proses untuk menset file vhost.conf. isi dari web.dockerfile adalah :

    FROM nginx:1.10
    
    ADD vhost.conf /etc/nginx/conf.d/default.conf
    

    dan isi dari file vhost.conf adalah :

    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;
        }
    }

    dan untuk mouting folder Laravel ke /var/www diinisialisasikan di blok volumes_from

  3. Blok database adalah blok untuk inisialisasi database mysql
  4. Terakhir agar data dari database-nya tidak hilang ketika container-nya down atau dihapus gunakan blok volume

Folder structure-nya :

Folder Structure

Folder Structure

 

 

 

 

untuk menjalankannya ketikan perintah docker-compose up di Command Prompt dengan posisi di folder yg berisi file docker-compose.yml. Untuk proses pertama kali akan sedikit memakan waktu karena harus mendownload image dari Docker hub dan menginstall paket.

https://github.com/alrifqi/Docker-Compose-File-List/tree/master/laravel5.4

Semoga bermanfaat.

Categories: Code

0 thoughts on “Docker Compose untuk Laravel 5.4”

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts

Code

Facade Design Pattern in Python

Facade design pattern is useful pattern for complexity of a class, then provide an simple interface for user for using that complex class. Facade pattern used to simplify to access a complex class example of implementation : https://github.com/alrifqi/DesignPattern/tree/master/facade Read more…

Code

Login Page UI – React Native

Saya membuat login page menggunakan react native (tentang react native bisa melihat ke https://facebook.github.io/react-native/) login page yang saya buat ini sebenarnya sangat sederhana. Pertama install terlebih dahulu react-native npm install -g create-react-native-app Buat project react native Read more…