Deployment Aplikasi Laravel di Server Testing & Production dengan gitlab-ci

Deployment Aplikasi Laravel di Server Testing & Production dengan gitlab-ci – Pertama kita siapkan terlebih dahulu project laravel kosongan.

composer create-project --prefer-dist laravel/laravel laravel-gitlab-ci

Masuk ke directory laravel-gitlab-ci

cd laravel-gitlab-ci

Kemudian buat database dengan nama laravel-gitlab-ci anda dan sesuaikan koneksi database pada file .env anda

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-gitlab-ci
DB_USERNAME=root
DB_PASSWORD=

Kemudian jalankan migration

php artisan migrate

Jika anda menggunakan mysql, di lokal ada kemungkinan error SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

Ubah sedikit di migration anda, pada file /database/migrations/2014_10_12_000000_create_users_table.php dari

$table->string('email')->unique();

menjadi

$table->string('email', 100)->unique();

Juga pada file 2014_10_12_100000_create_password_resets_table.php, menjadi

 $table->string('email', 100)->index();

Setelah migation berhasil jalankan

php artisan serve

Maka akan berjalan applikasi laravel baru dengan database berjalan pada port 8000, anda bisa akses di lokal dengan mengunjungi http://127.0.0.1:8000.

Kemudian kita tambahkan Auth user, fitur bawaan dari laravel dengan langkah berikut.

composer require laravel/ui
php artisan ui vue --auth
npm install && npm run dev

Ketika kita Reload browser, maka akan muncul Menu Login & Register di atas.

Setelah itu, buat project di gitlab anda

Kemudian jalankan :

git init
git remote add origin https://gitlab.com/agung3wi/laravel-gitlab-ci.git
git add .
git commit -m "Initial commit"
git push -u origin master

Setelah itu ssh ke server, lalu siapkan private key dan public key di server.

ssh-keygen -t rsa -f pttas
cat pttas.pub >> ~/.ssh/authorized_keys

Setelah itu kalian jalankan setting Environment Variable di gitlab. Masuk ke Setting => CI/CD. tambahkan berikut:

ROOT_DIR merupakan document Root, dimana letak project laravel di server agar dapat diakses public.

SERVER_HOSTNAME adalah Host dari server

SSH_PRIVATE_KEY didapat dengan

cat pttas

USERNAME_SERVER adalah username yang digunakan untuk koneksi ssh ke server.

Setelah itu tambahkan file .gitlab-ci.yml di root project dan isikan berikut:

dependency:
  image: composer
  stage: build
  script:
    - composer install
  artifacts:
    paths:
      - /builds/agung3wi/laravel-gitlab-ci

deploy-ke-server-testing:
  stage: deploy
  image: debian:latest
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y && apt-get install rsync -y  )'
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$SSH_PRIVATE_KEY")
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && ssh-keyscan -H "$SERVER_HOSTNAME" > ~/.ssh/known_hosts'
  script:
    - ssh $USERNAME_SERVER@$SERVER_HOSTNAME 'cd $ROOT_DIR && php artisan down'
    - rsync -avz /builds/agung3wi/laravel-gitlab-ci/ $USERNAME_SERVER@$SERVER_HOSTNAME:$ROOT_DIR/ --exclude=storage/*.key --exclude=.env --delete
    - ssh $USERNAME_SERVER@$SERVER_HOSTNAME 'cd $ROOT_DIR && php artisan up'

Lalu commit and push codingan anda. Selanjutnya jika anda melakukan perubahan dan membuat script migration, kemudian push ke repository akan automatis deploy

Baca juga Cara Installasi Jenkins menggunakan Docker

Cara Install Composer di Windows, MacOS, dan Linux

Apa itu composer? Buat kalian yang baru aja bergabung ke dunia web development pasti baru denger ini kan? Tapi, no problem, semua master berawal dari pemula. Bagi kalian yang udah jago mungkin ga perlu lagi baca tulisan ini , tapi jaga-jaga kalo kalian yang lupa caranya, boleh kok mampir and baca tulisan ini untuk mengulik tutorial install composer baik di Windows, MacOs, maupun Linux.

Dependency Manager

Composer merupakan dependency manager pada bahasa PHP. Apa sih dependency manager ? Secara bahasa, dependency artinya ketergantungan. Nah, ngapain sih ada ketergantungan ? Bukanya lebih baik kalo apa-apa mandiri? Gini guys, aku kasih sedikit rahasia. Zaman now, apa yang kita buat hampir 90% lebih udah pernah dibuat orang. Artinya masalah yang kita hadapi juga udah pernah dihadapi oleh banyak orang. Oleh karena itu, tentunya udah banyak orang yang mendokumentasikan secara rapi. Kita cukup googling aja, and viola. Muncul lah jawabannya. 90% jawaban itu bakal muncul dari web bernama stackoverflow. Biasanya, pilihan jawaban yang sudah verified merupakan jawaban atas masalah yang lagi kamu alami.

Sama halnya dengan dependency manager ini. Ternyata banyak programmer berhati malaikat yang udah bisa resolve masalah dan berbaik hati berbagi dengan programmer lain. Programmer malaikat ini membuat suatu library dan membagikannya dalam repository publik, sehingga orang lain bisa gunain lewat internet. Nah itulah latar belakang adanya dependency, jadi jika kita bikin aplikasi dan membutuh suatu library library yang ternyata library itu udah ada orang lain yang buat, kita tinggal download aja melalui dependency manager. Dependency manager ini ibaratadalah jalan tol untuk memecahkan masalah kita.

Kembali lagi ke Composer. Sebenarnya, apa itu composer? Composer merupakan dependecy manager dalam bahasa PHP. Apa hanya untuk PHP? Of Cuorse. Buat kalian yang terbiasa menggunakan Java, composer ini seperti maven / gradle dan ibarat npm kalau pada NodeJS. Kalau kita ingin install composer sebenarnya gampang banget kok. Tinggal buka composer, lalu ikutin aja step-stepnya.

Nah sekian tutorial kali ini. Wkwkwkw nggak-nggak. Bercanda.

Oke , ga usah panjang lebar langsung kita coba aja install Composer. Nah perlu kalian tahu, instalasi composer ternyata beda-beda sesuai sistem operasinya. Nah perlu kalian tahu, instalasi composer ternyata beda-beda sesuai sistem operasinya. Karena itu, jangan sampai salah memilih tutorial ya.

Instalasi Pada Windows

Untuk kalian yang pake sistem operasi windows, kalian bisa langsung buka halaman Getting Started. Lalu kalian dibawa ke halaman berikut ini

Sumber : Composer

Pilih 4.1 Installation Windows -> Using Installer. Otomatis file installer Composer akan terdownload. Double klik pada installernya, kemudian next-next aja sampai selesai. Jika kalian diminta untuk menunjukan path dari php, maka pilih php.exe pada web server yang kalian install. Jika kalian menggunakan XAMPP (yang paling umum), path php terletak pada C:\Xampp\php\php.exe.

Instalasi Pada MacOs atau Linux

Kalian bisa bisa ikuti daftar command line berikut ini pada Terminal:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '8a6138e2a05a8c28539c9f0fb361159823655d7ad2deecb371b04a83966c61223adc522b0189079e3e9e277cd72b8897') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Composer akan terinstall namun masih dalam bentuk file composer.phar, pindahkan ke /usr/local/bin/ agar dapat menggunakan perintah CLI composer

mv composer.phar /usr/local/bin/composer

Selesai

Nah itulah tutorial boleh kok mampir and baca tulisan ini untuk mengulik tutorial cara install composer baik di Windows, MacOs, maupun Linux. . Jika mengalami masalah kalian bisa tinggalkan komentar ya. See ya in next article !

Implementasi Message Broker dengan RabbitMq dan Laravel

Implementasi Message Broker dengan RabbitMq dan Laravel

Pertama-tama kita buat baru project laravel dengan mengetikan command

composer create-project --prefer-dist laravel/laravel laravel-rabbitmq

Kemudian masuk ke folder laravel-rabbitmq, dan jalankan

composer require vladimir-yuldashev/laravel-queue-rabbitmq

Setelelah itu buka file app/config/queue.php tambahkan konfigurasi driver rabbitmq ke dalam file tersebut,

'connections' => [
    // ...

    'rabbitmq' => [
    
       'driver' => 'rabbitmq',
       'queue' => env('RABBITMQ_QUEUE', 'default'),
       'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
   
       'hosts' => [
           [
               'host' => env('RABBITMQ_HOST', '127.0.0.1'),
               'port' => env('RABBITMQ_PORT', 5672),
               'user' => env('RABBITMQ_USER', 'guest'),
               'password' => env('RABBITMQ_PASSWORD', 'guest'),
               'vhost' => env('RABBITMQ_VHOST', '/'),
           ],
       ],
   
       'options' => [
           'ssl_options' => [
               'cafile' => env('RABBITMQ_SSL_CAFILE', null),
               'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null),
               'local_key' => env('RABBITMQ_SSL_LOCALKEY', null),
               'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
               'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null),
           ],
       ],
   
       /*
        * Set to "horizon" if you wish to use Laravel Horizon.
        */
       'worker' => env('RABBITMQ_WORKER', 'default'),
        
    ],

    // ...    
],

Langkah Selanjutnya adalah menginstall RabbitMq, Anda bisa mengunjungi halaman berikut https://www.rabbitmq.com/download.html untuk Installasinya. Kali ini kita gunakan docker untuk install rabbitmq di lokal, maka tingga jalankan command berikut:

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

Setelelah itu Buat Template Email SendMailTemplate.php di app/Mail/SendMailTemplate.php dengan code berikut:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class SendMailTemplate extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * The content instance.
     *
     * @var content
     */
    protected $content;


    public function __construct($content)
    {
        $this->content = $content;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('templateEmail')
            ->with([
                'content' => $this->content
            ]);
    }
}

Setelah itu, buat viewnya pada folder resources/views dengan nama templateEmail.blade.php Isikan sebagai berikut:

{{ $content }}

Lalu buat MailController.php pada folder app/Http/Controllers dengan nama MailController.php

<?php

namespace App\Http\Controllers;

use App\Mail\SendMailTemplate;
use Illuminate\Support\Facades\Mail;

class MailController extends Controller
{
    public function sendEmail()
    {
        $email = request("email");
        Mail::to($email)->send(new SendMailTemplate("Halo"));
    }

    public function sendEmailQueue()
    {
        $email = request("email");
        Mail::to($email)->queue(new SendMailTemplate("Halo"));
    }
}

Tambahkan pada file routes/web.php. Routing atas adalah mengirim email secara syncronous tanpa menggunakan message broker, sedangkan yang bawah menggunakan message broker dengan queue driver yang kita set dengan rabbitmq.

Route::post('/mail', 'MailController@sendEmail');
Route::post('/mail-queue', 'MailController@sendEmailQueue');

Kemudian setting file .env pada bagian MAIL config, sesuaikan dengan mail server yang anda punya, saat ini kita gunakan smtp gmail , maka konfigurasinya sebagai berikut

MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=GMAIL KAMU
MAIL_PASSWORD=PASSWORD GMAIL KAMU
MAIL_ENCRYPTION=ssl

Setelah itu jalankan “php artisan serve“. dan jalankan pula “php artisan queue:work”

Kemudian kita buka postman untuk mengetest kedua route tersebut.

Nampak perbedaan yang sangat signifikan antara post pertama dengan post kedua, karena post kedua menggunakan queue karena proses pengiriman email secara paralel. Sehingga ketika kita melakukan request belum tentu setelah mendapatkan response email berhasil terkirim.

Kalian bisa melihat hasil kodenya di https://github.com/agung3wi/laravel-rabbitmq

Demikian Merupakn artikel mengenai Implementasi Message Broker dengan RabbitMq dan Laravel.

Baca Artikel Kami Lainnya : Skill Set yang kalian harus pelajari jika ingin menjadi fullstack enginer zaman now