Contoh Konfigurasi Envoy untuk Proyek Laravel

Envoy adalah alat yang dikembangkan oleh Laravel yang memungkinkan Anda menjalankan perintah server langsung dari aplikasi Laravel Anda. Ini sangat berguna ketika Anda ingin menjalankan tugas-tugas seperti deployment atau migrasi database tanpa harus menggunakan ssh ke server.

Untuk menggunakan Envoy, Anda harus menambahkan file bernama Envoy.blade.php

Berikut adalah contoh konfigurasi Envoy untuk proyek Laravel:

@servers(['web' => '[email protected]'])

@task('deploy', ['on' => 'web'])
cd /var/www/my-project
git pull origin master
php artisan migrate
@endtask

@task('rollback', ['on' => 'web'])
cd /var/www/my-project
git revert HEAD
php artisan migrate:rollback
@endtask

Di sini, kita telah menentukan server dengan nama web yang diakses melalui user user dan IP 192.168.10.10. Kemudian, kita telah mendefinisikan dua tugas, yaitu deploy dan rollback. Tugas deploy akan menjalankan perintah git pull untuk mengambil revisi terbaru dari repository, kemudian menjalankan perintah php artisan migrate untuk menjalankan migrasi database. Tugas rollback akan menjalankan perintah git revert untuk mengembalikan revisi sebelumnya, kemudian menjalankan perintah php artisan migrate:rollback untuk mengembalikan database ke revisi sebelumnya.

Untuk menjalankan tugas ini, Anda hanya perlu menjalankan perintah envoy run deploy atau envoy run rollback di terminal. Envoy akan mengakses server yang telah ditentukan dan menjalankan perintah-perintah yang telah ditentukan di file Envoy.blade.php.

Dengan menggunakan Envoy, Anda dapat dengan mudah menjalankan perintah server dari aplikasi Laravel Anda, sehingga proses deployment atau migrasi database menjadi lebih mudah.

Berikut contoh konfigurasi Envoy yang lain:

@setup
$__container->servers([
    'staging' => 'user@ip_address',
    'production' => ['user@ip_address -p 8288'],
]);
@endsetup

@setup
    $repository = '[email protected]:username/awesome_project_ever.git';
    $releases_dir = '/var/www/html/app/awesome_project_ever/releases';
    $app_dir = '/var/www/html/app/awesome_project_ever';
    $release = date('YmdHis');
    $new_release_dir = $releases_dir .'/'. $release;
    $branch = isset($branch) ? $branch : "master";
    if($server == "staging"){
        $branch = "staging";
    }
@endsetup

@story('deploy',['on' => $server,'parallel' => true])
    clone_repository
    run_composer
    update_symlinks
    deployment_migrate
    deployment_cache
    clean_old_releases
    set_permission_folder
    say_finished
@endstory

@task('clone_repository')
    echo 'Cloning repository'
    [ -d {{ $releases_dir }} ] || mkdir {{ $releases_dir }}
    git clone --depth 1 {{ $repository }} --branch={{ $branch }} {{ $new_release_dir }}
@endtask

@task('run_composer')
    echo "Starting deployment ({{ $release }})"
    cd {{ $new_release_dir }}
    composer install --prefer-dist --no-scripts -q -o
@endtask

@task('update_symlinks')
    echo "Linking storage directory"
    cp -R {{ $new_release_dir }}/storage {{ $app_dir }}
    rm -rf {{ $new_release_dir }}/storage
    ln -nfs {{ $app_dir }}/storage {{ $new_release_dir }}/storage

    cp -R {{ $new_release_dir }}/public {{ $app_dir }}
    rm -rf {{ $new_release_dir }}/public/images
    ln -nfs {{ $app_dir }}/public/images {{ $new_release_dir }}/public/images

    echo 'Linking .env file'
    ln -nfs {{ $app_dir }}/.env {{ $new_release_dir }}/.env

    echo 'Linking current release'
    ln -nfs {{ $new_release_dir }} {{ $app_dir }}/current
@endtask

@task('deployment_migrate')
    echo "Migrating..."
    php {{ $new_release_dir }}/artisan migrate --force --no-interaction
@endtask

@task('deployment_cache')
    echo "clearing cache..."
    php {{ $new_release_dir }}/artisan cache:clear --quiet
    php {{ $new_release_dir }}/artisan config:clear
    echo "Cache cleared"
@endtask

@task('clean_old_releases')
  echo "Cleaning old releases ..."
  rm -rf `ls -dt {{ $app_dir }}/releases/* | tail -n +4`
@endtask

@task('set_permission_folder')
    echo "Set permission folder"
    cd {{ $app_dir }}
    sudo chgrp -R www-data storage public
    sudo chmod -R ug+rwx storage public

    cd {{ $app_dir }}/current
    sudo chgrp -R www-data bootstrap/cache
    sudo chmod -R ug+rwx bootstrap/cache
@endtask


@finished
    @slack('https://hooks.slack.com/services/(Kode)', '#gitlab-activities', "Deployed {$server}")
@endfinished

@task('say_finished')
    echo "Finished..."
@endtask



{{--

create .env
create folder storage
create folder public/images

How to run : 
if staging
envoy run deploy --server=staging

if production
envoy run deploy --server=production

--}}

 

 

 













Leave a Reply

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