menu

How - Manage (CRUD) S3 on laravel


Pada tutorial sebelumnya kita sudah membuat bucket S3 AWS, dan kita sudah berhasil mengupload gambar secara langsung ke S3 sekaligus membuka akses globalnya sehingga gambar bisa dibuka secaral global dengan browse path url nya.

Pada tutorial kali ini codedoct akan memberikan tutorial tentang cara memanage bucket S3 kita melalui website yang menggunakan framework Laravel, dalam hal ini kita akan mengintegrasikan S3 dengan Laravel.

Oke sebelum memulai tutorial ini pastikan Anda sudah expert dalam pemrograman PHP on Laravel jika belum silahkan ikuti tutorialnya terlebih dahulu, klik disini.

Pertama, requirement yang akan kita gunakan adalah,
  • PHP => 5.6
  • Laravel => 5.4
Buka project laravel anda, kemudian install package aws pada laravel, package yang akan kita gunakan adalah league/flysystem-aws-s3-v3, jika laravel anda sudah terinstall versi yang lain maka diremove saja terlebih dahulu karena laravel 5.1 keatas support pada flysystem-aws-s3 versi V3.
Berikut cara remove dan install,
//untuk hapus versi lama
composer remove league/flysystem-aws-s3-v2

//install versi V3
composer require league/flysystem-aws-s3-v3:~1.0

Jika sudah berhasil menambahkan package aws selanjutnya, install juga image intervention untuk mengedit image yang di upload dari sisi server,
php composer.phar require intervention/image

Kemudian buat User IAM pada AWS dengan cara,
Masuk ke akun AWS anda terlebih dahulu dan masuk ke service IAM,


Selanjutnya, akan muncul page seperti gambar dibawah,


Klik button Add user untuk membuat user baru yang akan diperuntukan untuk codedoct-bucket1 yang sudah kita buat, dan akan muncul step pembuatan user seperti pada gambar dibawah,


Isi seperti gambar diatas dengan User name* terserah anda, dan jika sudah klik button "Next:Permissions",


Pada gambar diatas klik menu "Attach existing polices directly" dan klik button "Create policy" yang akan redirect halaman baru untuk membuat policy custom khusus untuk bucket codedoct-bucket1,


Pada gambar diatas ini field Service dengan S3 dan centang "All S3 actions (s3:*)", selanjutnya pada field Resources akan muncul seperti gambar dibawah,


Pilih Specific, pada field bucket klik "Add ARN" dan muncul seperti pop up pada gambar diatas,
isi field Bucket name dengan nama bucket yang sudah kita buat yaitu codedoct-bucket1, dan klik button "Add",


Pada field Object klik "Add ARN" kemudian isi pop up nya seperti pada gambar diatas, klik button"Add" sehingga akan tampak seperti gambar dibawah,


Klik button "Review policy",  dan isi field Name dan Description seperti pada gambar dibawah,


Klik button "Create policy", kemudian kembali pada halaman Set permission sebelumnya, cari policy codedoct yang baru dibuat, centang dan klik button "Next: Review" seperti gambar dibawah,


Dan akan muncul page review seperti gambar dibawah,


Klik button "Create user", dan akan muncul seperti gambar dibawah,


Simpan Access key ID dan Secret access key untuk nanti digunakan pada .env Laravel,
Untuk mengetes apakah User IAM sudah terintegrasi dengan bucket S3 atau belum coba buka service S3 dan buka "Permissions" kita akan melihat pada list pertama "Access for your AWS account" terdapat satu akun,


Terakhir kembali pada laravel, tambahkan pada .env parameter AWS dan pendukungnya,
STORAGE_FILE=s3

AWS_KEY= isi dengan Access key ID
AWS_SECRET= isi dengan Secret access key
AWS_REGION=us-east-1
AWS_BUCKET=codedoct-bucket1

Sekarang laravel anda sudah siap mengupload file pada bucket S3 AWS, untuk code laravelnya bisa dicontoh code dibawah,
<?php
namespace App\Http\Services;

use Illuminate\Support\Facades\Storage;
use Intervention\Image\ImageManagerStatic;

class ImageService
{
    public function uploadImage($file, $folder_path, $for, $size)
    {
        $img = ImageManagerStatic::make($file);
        if ($img->getWidth()) {
            $img->resize($size, null, function ($constraint) {
                $constraint->aspectRatio();
            });
        }
        $img->stream();

        if (env('STORAGE_FILE', 'server')=='s3') {
            $path = 'images/'.$folder_path.'/'.$for->hash_id.'-'.str_random(6).'.'.$file->clientExtension();
            Storage::disk('s3')->put($path, $img->__toString());

            return $path;
        }

        return null;
    }

    public function deleteFile($file)
    {
        if (env('STORAGE_FILE', 'server')=='s3') {
            if (Storage::disk('s3')->has($file)) {
                Storage::disk('s3')->delete($file);
            }
        }

        return true;
    }

    public function getFile($file)
    {
        if (env('STORAGE_FILE', 'server')=='s3') {
            return 'https://s3.amazonaws.com/'.env('AWS_BUCKET').'/'.$file;
        }
    }
}


===DONE!===

AWS - Create bucket S3 AWS


Pada tutorial kali ini kita akan kembali bereksperimen dengan salah satu service AWS yang sangat banyak digunakan yaitu layanan penyimpanan cloud S3.

Seperti ini lah kira-kira penampakannya,


Oke langsung saja kita mulai eksperimennya,
Pertama, klik "Services" pada header dan pilih S3 sehingga akan redirect ke halaman S3, klik button "Get started" dan akan tampak seperti gambar dibawah,


Isi field bucket name sesuai dengan nama bucket yang anda inginkan, region biarkan saja default, selanjutnya akan muncul popup kedua seperti gambar dibawah,


Pada tahap diatas lewati saja, klik button "Next" dan akan tampak tahap selanjutnya,


Klik tombol "Next", dan akan tampak seperti gambar dibawah,


Dicek kembali informasi bucket S3 yang akan kita buat, kemudian klik tombol "Create bucket",


Dapat dilihat pada gambar diatas, bucket S3 berhasil dibuat dan kita sudah bisa mencoba memanage (CRUD) gambar di page tersebut, silahkan coba upload gambar jika sudah masuk ke halaman bucket anda sehingga akan tampak seperti gambar dibawah,


Coba buka pada browser url gambar seperti terlihat pada gambar diatas, anda akan mendapatkan informasi halaman seperti pada gambar dibawah,


Hal tersebut terjadi karena bucket yang kita buat belum dibuka akses globalnya, cara membukanya:
buka tab "Permissions" dan klik tombol "Bucket Policy" sehingga akan tampak seperti gambar dibawah,


Pada text editor diatas masukan code berikut,
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::codedoct-bucket1/*"
        }
    ]
}

Dan coba lagi browse url path gambar yang anda upload tadi dan gambar akhirnya bisa diakses secara global seperti pada gambar dibawah,


===DONE!===

DevOps - Integration server with cloudflare


Pada tutorial sebelumnya kita sudah membuat server dengan menggunakan layanan cloud server AWS yaitu EC2.

Tutorial kali ini, kita akan bereksperimen untuk memetakan beberapa site yang kita buat pada server EC2 menjadi beberapa subdomain menggunakan CDN (cloudflare). sebelum memulai tutorial ini silahkan buat setting cloudflare dulu dengan cara lihat disini,

Oke langsung saja kita mulai tutorialnya,
Pertama, install dulu server webnya, dalam hal ini kita akan menggunakan apache yang bisa diinstall pada ubuntu caranya mudah
sudo apt-get update
sudo apt-get install apache2

Jika sudah coba cari pada browser IP public server anda yang dapat dilihat pada Public DNS (IPv4) jika anda menggunakan AWS,


Maka akan muncul seperti gambar berikut pada browser Anda,


Jika muncul berarti Apache sudah berhasil diinstall, selanjutnya masuk ke server AWS dan masuk ke path /var/www pada folder www buat folder baru dengan nama website_1 dan website_2, pada masing-masing folder tersebut buat file index.html dan isi dengan text terserah anda tapi berbeda satu sama lain, misal file index.html pada folder website_1 kita isi dengan "test 1" dan file index.html pada folder website_2 kita isi dengan "test 2".

Jika sudah sekarang masuk ke path /etc/apache2/site-available/ buat file baru dengan nama website1.conf dan website2.conf dan isi dengan code berikut,

website1.conf
<VirtualHost *:80>

ServerAdmin webmaster@
ServerName website1.codedoct.com
ServerAlias www.website1.codedoct.com
DocumentRoot /var/www/website_1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

website2.conf
<VirtualHost *:80>

ServerAdmin webmaster@
ServerName website2.codedoct.com
ServerAlias www.website2.codedoct.com
DocumentRoot /var/www/website_2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Setelah itu enable config site yang baru dan reload apache dengan cara,
sudo a2ensite website1.conf
sudo a2ensite website2.conf
sudo service apache2 reload

Selanjutnya maping IP public di hosts server dengan cara masukan code berikut pada file /etc/hosts,
123.123.123.123 webiste1.codedoct.com
123.123.123.123 website2.codedoct.com

Terakhir mapping subdomain pada CDN (cloudflare) dengan cara, silahkan buka terlebih dahulu akun cloudflare anda dan masuk ke menu DNS yang terletak pada atas halaman sehingga akan tampak seperti ini,


Dan sekarang masukan nama subdomain dan IPv4 address (IP Public) anda sehingga akan tampak seperti gambar dibawah,


Lakukan hal yang sama untuk website2 seperti pada gambar diatas, jika sudah silahkan buka di browser anda kedua website tadi sehingga akan tampak seperti pada gambar dibawah,

website 1


website 2


===DONE!===

AWS - Create cloud server with (EC2)


Pada tutorial kali ini kita akan mengulas tentang salah satu service Amazon Web Services(AWS), yes EC2.

EC2 atau Elastic Compute Cloud merupakan sebuah server virtual yang memiliki layanan scalable computing yang dapat memudahkan anda untuk mengatur ulang spesifikasi dari server yang anda inginkan, misal pada service server biasa kita harus memilih spesifikasi server diawal setting untuk kebutuhan yang akan kita gunakan yang mana hal ini tidak bisa diubah karena bersifat permanen, sedangkan dengan menggunakan EC2 kita bisa mengatur ulang spesifikasi dari server yang kita gunakan pada kemudian hari.

Terlebih lagi semua layanan EC2 ini bersifat cloud dimana kita bisa memilih region mana tempat kita akan meletakkan data center server kita, jadi tunggu apalagi untuk pindah ke cloud server ini haha..

Oke, sebelum mempraktekan tutorial ini pastikan anda sudah memiliki akun AWS yang sudah aktif, jika sudah langsung saja kita buat server cloud nya.

Pertama, pada halaman home dari AWS klik submenu services yang ada diatas halaman, sehingga akan muncul seperti pada gambar dibawah ini,


Dan dapat dilihat pada gambar diatas pada tab Compute klik EC2 untuk masuk ke service EC2 yang akan tampak seperti pada gambar dibawah ini,


Klik button "Launch Instances" pada gambar diatas, dan akan muncul pilihan OS yang akan kita install pada server,


Dari pilihan diatas codedoct memilih OS ubuntu yang akan diinstall ke server, klik button "Select" dan akan muncul gambar dibawah,


Untuk testing codedoct akan memilih t2.micro dengan virtual CPU 1 core, memory 1 GiB bisa dilihat pada gambar diatas untuk harga lihat disini, Selanjutnya klik button "Next Configure Instance Details" dan akan muncul halaman seperti pada gambar dibawah,


Klik button "Next: Add Storage", dan akan muncul halaman seperti pada gambar dibawah,


Masukan Size penyimpanan server anda, kemudian klik button "Next: Add Tags",


Masukan tags jika diperlukan, misal pada contoh diatas kita memasukan tags "Name" dengan value "codedoct_testing", setelah itu klik button "Next: Configure Security Group",


Isikan seperti pada gambar diatas, dan klik button "Review and Launch",


Silahkan review kembali server yang ingin anda buat, dan klik button "Launch",


Isikan Key pair name dan klik button "Download Key Pair" yang berfungsi untuk access ke server yang anda buat, Terakhir klik button "Launch Instance" tunggu beberapa saat kemudian kembali ke halaman service EC2 dan klik link "Instance" pada sidebar terlihat seperti pada gambar dibawah ini,


Pada bagian bawah halaman EC2 anda bisa lihat public DNS,


Public DNS dapat anda yang gunakan untuk access masuk ke server dengan cara, buka terminal dan masuk ke directory tempat anda menyimpan Key Pair yang tadi sudah kita download, dan masukan sintaks terminal berikut:
//ditulis tanpa kutip
ssh -i "name pair key" ubuntu@"Public DNS (IPv4)"
// contoh => ssh -i codedoct-testing.pem ubuntu@ec2-12-123-123-123.us-east-2.compute.amazonaws.com

Sehingga akan tampak gambar seperti dibawah ini saat anda berhasil masuk ke server yang baru dibuat,



===DONE!===