Dump dan Backup MySQL ke S3 DigitalOcean Spaces

Alur untuk backup otomatis database langsung ke S3 services, salah satunya ke DigitalOcean (DO) Spaces

Integrasi s3cmd

Download sesuai platform dari https://s3tools.org/s3cmd kemudian jalankan comman untuk konfigurasi :

s3cmd --configure

Lengkapi credentials sehingga dapat terhubung dengan S3 service

s3cmd lists

s3cmd lists

Script untuk Dump and Push

Buat sebuah file dengan nama do.sh berisi perintah berikut (sesuaikan variabel)

#!/bin/bash
DB_HOST={{db_name}}
DB_NAME={{db_name}}
DB_USER={{db_user}}
DB_PASS={{db_pass}}
S3_PATH=path/to/app/
FILE_NAME=mysql-$(date +%Y%m%d-%H_%M_%S)
echo "dump db..."
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > $FILE_NAME.sql
echo "compress..."
tar -czvf $FILE_NAME.tar.gz $FILE_NAME.sql
echo "put to s3..."
s3cmd put $FILE_NAME.tar.gz s3://$S3_PATH
echo "clean up..."
rm -f $FILE_NAME*
view raw do.sh hosted with ❤ by GitHub

Atur Penjadwalan

Buka crontab mode edit dan tambahkan command berikut (waktu bisa disesuaikan) :

0 0 * * * /bin/sh ~/do.sh

Logging Report PHP pada Web Server Apache ke Telegram

Sistem atau aplikasi yang baik adalah yang memiliki tingkat error yang minim, bahkan jika memungkinkan tidak terdapat error sekecil apapun. Namun seperti yang dikatakan banyak orang, tidak ada sistem yang sempurna, yang ada hanya bagaimana meminimalisir error tersebut.

Log membantu developer untuk melakukan identifikasi jika ada hal yang tidak sesuai antara design dengan output, sehingga proses perbaikan dapat dilakukan dengan cepat.

Sistem log sangat penting, baik pada development stage maupun di production. Saat masih berada pada development stage kita umumnya mengembangkan dan memantau log pada saat yang bersamaan. Hal yang berbeda terjadi pada production stage, dimana kita tidak memantau lagi log yang dihasilkan. Salah satu opsi yang bisa dimanfaatkan untuk monitoring log di server adalah dengan menggunakan Telegram.

Kita biasanya lebih peka terhadap notifikasi yang masuk pada aplikasi chat seperti telegram.

Apache Log Telegram Notif

Apache Log Telegram Notif

Untuk mewujudkan alur diatas setidaknya ada beberapa tools dan script yang perlu dikonfigurasi.

Simple Event Correlator

Jika menggunakan basis sistem operasi Ubuntu, kita bisa langsung install Simple Event Correlator (SEC) dari repository Ubuntu.

sudo apt install sec

Konfigurasi Script

Berikutnya kita perlu membuat konfigurasi untuk sec dan simpan dalam direktori yang diinginkan

type=Single
ptype=RegExp
pattern=\[php7\:
desc=$0
action=shellcmd /path/to/dir/tg-send.sh "$0"
view raw php7err.conf hosted with ❤ by GitHub

Selanjutnya kita perlu membuat script untuk mengirim pesan ke Telegram menggunakan Telegram API, tapi sebelumnya kita perlu melakukan integrasi melalui BotFather yang telah disediakan telegram untuk mendapatkan Chat ID dan Token

#!/bin/bash
CHAT_ID={{channel-id}}
TOKEN={{telegram-token}}
curl -s "https://api.telegram.org/bot$TOKEN/sendMessage?chat_id=$CHAT_ID" --data-urlencode "text=[domain.com] $1"
view raw tg-send.sh hosted with ❤ by GitHub

Agar script dapat dieksekusi kita perlu merubah permission -nya

chmod +x tg-send.sh

Untuk memastikan semua sudah terkonfigurasi dengan baik, kita bisa coba kirim notif ke Telegram dengan perintah berikut

./tg-send.sh "tes pesan notif"

Jika notif pesan berhasil masuk ke Telegram, selanjutnya kita bisa menjalankan sec dengan menentukan config dan path ke apache log di web server. Untuk memudahkan eksekusi kita bisa membuat script agar mudah untuk dijalankan.

#!/bin/bash
sec -conf=/path/to/dir/php7err.conf -input=/path/to/apache2/error.log -detach
view raw run.sh hosted with ❤ by GitHub

Kita perlu merubah permission -nya lagi agar dapat dijalankan

chmod +x run.sh

Terakhir tinggal menjalankan script -nya

./run.sh

Upload File Sederhana ke AWS S3 dengan PHP

AWS telah menyediakan SDK untuk memudahkan transaksi terhadap beberapa servicenya secara program, salah satu yang disediakan adalah untuk PHP. Namun terkadang kebutuhan tidak sesuai dengan usaha yang harus dikeluarkan. Untuk sekedar upload file ke S3 milik AWS kita perlu load/download paket lengkap dari SDK nya, rasanya agak berlebihan.

Setelah googling beberapa waktu akhirnya ketemu library dalam bentuk single file, yang dapat digunakan untuk beberapa kegiatan di S3, salah satunya untuk upload file.

Library nya ada di repository https://github.com/23Pstars/simple-php-s3-upload

Menggunakannya cukup sederhana, hanya perlu menyesuaikan script index.php dan melengkapi credentials untuk akun yang digunakan

<?php
include 'S3.php';
define('S3_ENDPOINT', 's3.amazonaws.com');
define('S3_BUCKET', 'bucket');
define('S3_DIR', 'path/to/dir');
define('S3_KEY', '*****');
define('S3_SECRET', '*****');
// submitted form
$_stored_filename = 'file.txt';
$_file_tmp_name = $_FILES['tmp_name'];
new S3(S3_KEY, S3_SECRET, false, S3_ENDPOINT);
S3::putObjectFile($_file_tmp_name, S3_BUCKET, S3_DIR . DS . $_stored_filename, S3::ACL_PUBLIC_READ);
$_uploaded_file = 'https://' . S3_ENDPOINT . DS . S3_BUCKET . DS . S3_DIR . DS . $_stored_filename;
view raw index.php hosted with ❤ by GitHub

SMS Gateway Android Sebagai Alternatif Gammu

Media komunikasi SMS saat ini memang cenderung sepi pengguna, saya sendiri termasuk user yang sudah jarang sekali menggunakan fasilitasi SMS. Dengan banyaknya aplikasi chat online yang ditawarkan, dan tentunya free, membuat user lebih memilih untuk menggunakan aplikasi chat online tersebut sebagai alat komunikasi sehari-hari.

SMS

SMS

SMS Masih Dibutuhkan

Sudah menjadi hal umum jika berkomunikasi melalui aplikasi chat online memilihi banyak sekali kelebihan dibandingkan dengan fasilitas SMS konvensional.

Satu-satunya kelebihan SMS yang saat ini masih dirasakan, yakni tidak memerlukan koneksi internet. Dengan begitu, coverage jenis perangkat yang dapat menggunakan fasilitas SMS bisa lebih luas. Continue reading

Mengirm pesan WhatsApp ke kontak yang belum disimpan

WhatsApp web akhir-akhir ini menjadi fasilitas favorit saya untuk berkomunikasi melalui aplikasi WA. Meskipun WA sesungguhnya dirancang untuk mobile, namun dalam hal mengetik text pesan keyboard fisik tetap juara dibandingkan virtual keyboard pada smartphone.

Satu fitur yang saya rasa penting namun belum ada di WA adalah mengirim pesan kepada nomor yang belum tersimpan dalam kontak kita, baik untuk versi mobile maupun web. Mungkin sudah menjadi prinsip dari WA untuk tidak mengizinkan hal tersebut, namun bagi sebagian orang justru fitur tersebut akan sangat bermanfaat.

Buat pesan baru WA

Buat pesan baru WA

Continue reading

Fetching photo berdasarkan tags di Instagram

Sidebar instagram tags

Sidebar instagram tags

Beberapa waktu yang lalu Dwohoo.com menambahkan fitur untuk menampilkan daftar foto yang berkaitan dengan destinasi yang sedang dibahas dalam suatu artikel. Foto-foto tersebut diambil secara langsung dari Instagram.

Instagram memiliki API bagi para developer yang hendak mengembangkan aplikasi lanjutan, tapi kali ini saya tidak menggunakan API tersebut. Selain ribet, tahapannya juga cukup banyak (auth, token, dll) sehingga memerlukan beban waktu yang lebih untuk memuat foto-foto yang diinginkan.

Continue reading

Update Source otomatis dari Bitbucket dan GitHub

Bitbucket and GitHub

Bitbucket and GitHub

Siapa yang tidak kenal kedua GIT repository tersebut, dengan semua fasilitas yang disediakan oleh Bitbucket dan GitHub membuat para developer nyaman untuk menitipkan source project mereka disana.

Saya menggunakan Bitbucket cukup lama, hanya baru-baru ini mulai menggunakan GitHub. Mengingat kebijakan pricing yang diterapkan kedua layanan tersebut sedikit berbeda, untuk versi free Bitbucket memungkinkan user menyimpan beberapa repository secara private (selebihnya musti bayar), sedangkan GitHub hanya membolehkan repository public. Continue reading

Membuat Booking Form Widget di WordPress

Fastboat Booking

Kali ini saya akan coba membuat Booking Form Widget untuk Fastboat di WordPress, secara konsep sebetulnya hampir sama untuk penggunaan pada booking platform yang lain. Hanya saja untuk Fastboat kali ini menggunakan API dari Fastboat System yang sudah ada.

Pertama-tama adalah membuat class untuk Widget yang akan dibuat didalam file functions.php theme yang akan digunakan, format penulisan nama class sebaiknya menggunakan Camel Case. Class ini merupakan turunan (Extend) dari class WP_Widget yang sudah disediakan WordPress untuk memudahkan kita dalam membuat dan mengelola Widget di WorPress.

class Fastboat_Booking_Form extends WP_Widget {

   function __construct() {
      parent::__construct(
         'fastboat_booking_form',
         'Fastboat Booking Form',
         array(
            'description' => 'Fastboat Booking form'
         )
      );
   }
}

Inisialisasi dilakukan pada konstruktor, dimana parameter pertama merupakan ID dari widget yang akan dibuat (harus unique), parameter kedua merupakan title dari widget, dan parameter ketiga merupakan opsi pendukung lainnya dalam bentuk array. Continue reading

Perihal mengembangkan CMS

Dashboard | LRS Engine versi-2.1.0

Dashboard | LRS Engine versi-2.1.0

Mengembangkan CMS sendiri? Kenapa tidak!

Bagi advanced developer, khususnya dibidang web, tidak ada kata lelah untuk inovasi. Selalu saja ada hal-hal baru yang ingin dibuat atau dikembangkan. Saya masih ingat ketika pertama kali belajar tentang pemrograman web, mudah dan banyak referensi. Meskipun lambat laun ternyata menyadari bahwa prospek bisnis dan tingkat penetrasi terhadap web saat ini sangat tinggi.

Dalam konteks website, setiap website mestinya dibangun dengan menjalani beberapa tahapan, mulai dari analyst, design, sampai production. Hal tersebut berlaku untuk 1 website, bisa dibayangkan jika anda akan mengembangkan 5 project website atau lebih dengan terus menerus menggunakan tahapan yang sama? Dari situlah muncul ide untuk membuat sebuah framework (kerangka kerja) dengan tujuan untuk memudahkan seseorang yang ingin mengembangkan website atau web system lebih dari satu kali, atau yang saat ini lebih kita kenal dengan CMS (Content Management System). Continue reading

PHP : Menggunakan fungsi shuffle dalam perulangan

$arr = array(
    '2012'      => array(
        array(
            'no'        => 1,
            'nama'      => 'satu',
            'ket'       => '...'
        ),
        array(
            'no'        => 2,
            'nama'      => 'dua',
            'ket'       => '...'
        ),
        array(
            'no'        => 3,
            'nama'      => 'tiga',
            'ket'       => '...'
        ),
    ),
    '2014'      => array(
        array(
            'no'        => 11,
            'nama'      => 'sebelas',
            'ket'       => '...'
        ),
        array(
            'no'        => 12,
            'nama'      => 'dua belas',
            'ket'       => '...'
        ),
        array(
            'no'        => 13,
            'nama'      => 'tiga belas',
            'ket'       => '...'
        ),
    )
);

foreach( $arr as $k => $a )
    shuffle( $arr[ $k ] );

print_r( $arr );

Continue reading