Sabtu, 27 Agustus 2016

Script Backup untuk Wordpress Apache dan MySQL

Berikut ini adalah script yang bisa digunakan untuk melakukan backup dari Apache, Wordpress dan MySQL. Backup akan dilakukan di penyimpanan lokal, lalu dipindahkan ke Amazon S3 sebagai media backup.

#!/bin/sh  
  
service apache2 stop  
  
mysqldump -u <mysql_user> -p<mysql_pass> <mysql_dbname> | gzip -9 > mysqlbackup-`date +%Y%m%d`.sql.gz  
chown ubuntu:ubuntu mysqlbackup-`date +%Y%m%d`.sql.gz  
s3cmd put mysqlbackup-`date +%Y%m%d`.sql.gz s3://<s3_bucket_name>/`date +%Y%m`/  
  
tar -zcvf wordpress-`date +%Y%m%d`.tar.gz /var/www  
chown ubuntu:ubuntu wordpress-`date +%Y%m%d`.tar.gz  
s3cmd put wordpress-`date +%Y%m%d`.tar.gz s3://<s3_bucket_name>/`date +%Y%m`/  
 
tar -zcvf apache2config-`date +%Y%m%d`.tar.gz /etc/apache2  
chown ubuntu:ubuntu apache2config-`date +%Y%m%d`.tar.gz  
s3cmd put apache2config-`date +%Y%m%d`.tar.gz s3://<s3_bucket_name>/`date +%Y%m`/  
 
service apache2 start  

Hasil backup juga menyimpan Private Key dari Apache HTTPS. Oleh karena itu disarankan untuk melakukan enkripsi menggunakan GPG. Script di bawah ini adalah modifikasi script di atas dengan menambahkan enkripsi GPG
1:  #!/bin/sh  
2:    
3:  service apache2 stop  
4:    
5:  mysqldump -u <mysql_user> -p<mysql_pass> <mysql_dbname> | gzip -9 > mysqlbackup-`date +%Y%m%d`.sql.gz  
6:  gzip -9 > mysqlbackup-`date +%Y%m%d`.sql.gz  
7:  chown ubuntu:ubuntu mysqlbackup-`date +%Y%m%d`.sql.gz  
8:  gpg --output mysqlbackup-`date +%Y%m%d`.sql.gz.gpg --encrypt --recipient <gpg_keyname> mysqlbackup-`date +%Y%m%d`.sql.gz  
9:  s3cmd put mysqlbackup-`date +%Y%m%d`.sql.gz.gpg s3://<s3_bucket_name>/`date +%Y%m`/  
10:    
11:  tar -zcvf wordpress-`date +%Y%m%d`.tar.gz /var/www  
12:  chown ubuntu:ubuntu wordpress-`date +%Y%m%d`.tar.gz  
13:  gpg --output wordpress-`date +%Y%m%d`.tar.gz.gpg --encrypt --recipient <gpg_keyname> wordpress-`date +%Y%m%d`.tar.gz  
14:  s3cmd put wordpress-`date +%Y%m%d`.tar.gz.gpg s3://<s3_bucket_name>/`date +%Y%m`/  
15:    
16:  tar -zcvf apache2config-`date +%Y%m%d`.tar.gz /etc/apache2  
17:  chown ubuntu:ubuntu apache2config-`date +%Y%m%d`.tar.gz  
18:  gpg --output apache2config-`date +%Y%m%d`.tar.gz.gpg --encrypt --recipient <gpg_keyname> apache2config`date +%Y%m%d`.tar.gz  
19:  s3cmd put apache2config-`date +%Y%m%d`.tar.gz.gpg s3://<s3_bucket_name>/`date +%Y%m`/  
20:    
21:  service apache2 start  
22:    

Minggu, 24 April 2016

Wordpress on t2.nano: Penggunaan Memory

Berikut catatan penggunaan RAM pada AWS t2.nano untuk Wordpress. Recipe CHEF yang digunakan ada di tautan GitHub ini.

Penggunaan RAM pada saat t2.nano baru dibuat:
        total    used    free   shared  buffers   cached  
 Mem:    500244   261104   239140    340    8116   206420  
 -/+ buffers/cache:   46568   453676  
 Swap:      0     0     0  
Setelah knife-bootstrap
        total    used    free   shared  buffers   cached  
 Mem:    500244   369252   130992    348   18448   271336  
 -/+ buffers/cache:   79468   420776  
 Swap:      0     0     0  
Setelah instalasi NGINX, MySQL, PHP-FPM dan Wordpress
        total    used    free   shared  buffers   cached  
 Mem:    500244   205392   294852    5428    6672   132240  
 -/+ buffers/cache:   66480   433764  
 Swap:   1048572    6264  1042308  
Karena RAM pada t2.nano hanya 512 MB, maka penggunaan disk cache menjadi penting

Minggu, 17 April 2016

IP Statis Di Raspbian

Caranya ternyata cukup sederhana. Cukup edit berkas /etc/dhcpcd.conf, dan tambahkan baris ini di bagian akhir:
# Define static IP address for eth0
static
interface eth0
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
Baris di atas cukup jelas. Tapi, untuk yang memerlukan penjelasan lebih lanjut bisa dibaca di manpage dhcpcd.conf. Untuk kembali menggunakan dhcp, baris tersebut tinggal dihapus.

Rabu, 07 Oktober 2015

Mengenal Chef.io

Bila anda mengira Chef ini adalah koki yang bisa memasak makanan yang enak, anda salah besar. Chef yang dimaksud dalam artikel ini adalah Chef.io, perangkat otomasi manajemen komputer. Pada umumnya Chef.io digunakan untuk pemeliharaan server.

Kenapa Chef.io dibutuhkan? Kenapa tidak melakukan pemeliharaan sendiri saja?

Saya juga berpikir hal sama, karena toh selama ini sebagai system administrator amatir paling hanya menangani 1-5 server. Untuk jumlah ini masih bisa deh ssh ke masing-masing server untuk melakukan pemeliharaan.

Tetapi, ketika diminta menangani ratusan server, mulai deh kepala cenat cenut. Bagaimana caranya memastikan kalau server-server yang berfungsi sama memiliki konfigurasi sama? Ketika ada website update, tidak lucu dong kalau misalnya halaman di web server yang satu berbeda dengan yang lain? Atau misalnya ada update MySQL yang berbeda antara server satu dengan yang lain? Lagipula, mau ssh ke masing-masing dari ratusan server ini hanya untuk menjalankan "sudo apt-get upgrade"?

Tantangan ini yang coba diselesaikan oleh Chef.io. Seriap server yang dikelola oleh Chef.io, disebut Chef Client, akan terhubung dengan Chef Server. Chef Client akan secara rutin memberikan data terbaru kepada Chef Server, sekaligus meminta konfigurasi terbaru yang dalam dunia Chef.io disebut run-list. Chef client lalu membandingkan antara konfigurasi terbaru dengan konfigurasi saat ini, dan akan menjalankan perintah-perintah pada sistem operasi di Chef Client sehingga konfigurasi Chef Client sesuai dengan konfigurasi terbaru.

Dengan mekanisme ini, setiap update pada server cukup dimasukkan ke dalam run-list. Selanjutnya semua Chef Client yang terhubung dengan Chef Server akan melakukan update sehingga semuanya akan memiliki konfigurasi yang sama.

Lha, terus, kalau saya punya 100 server, semua server itu akan punya konfigurasi yang sama dong? Padahal kan ada server untuk web, ada yang untuk database, ada juga yang untuk pengolahan data. Gimana caranya kalau mau punya server yang berbeda?

Jawabannya, Chef.io mengenal yang terminologi role, atau peran. Setiap server bisa memiliki peran yang berbeda-beda, dan oleh karena itu, di dalam Chef Server, setiap Chef Client bisa diberikan peran yang berbeda. Setiap peran/role bisa memiliki satu atau lebih run-list, dan peran/role yang berbeda bisa memiliki run-list yang berbeda.

Lalu, bagaimana melakukan konfigurasi run-list ini? Nantikan posting selanjutnya yang akan membahas lebih jauh tentang run-list ini. Selamat memasak.

Minggu, 02 Agustus 2015

Cara Mematikan InnoDB di MySQL

Buka berkas /etc/mysql/my.cnf, lalu tambahkan baris dibawah ini

 [mysqld]  
 innodb=OFF  
 default_storage_engine=MyISAM  
 loose-innodb-trx=0   
 loose-innodb-locks=0   
 loose-innodb-lock-waits=0   
 loose-innodb-cmp=0   
 loose-innodb-cmp-per-index=0  
 loose-innodb-cmp-per-index-reset=0  
 loose-innodb-cmp-reset=0   
 loose-innodb-cmpmem=0   
 loose-innodb-cmpmem-reset=0   
 loose-innodb-buffer-page=0   
 loose-innodb-buffer-page-lru=0   
 loose-innodb-buffer-pool-stats=0   
 loose-innodb-metrics=0   
 loose-innodb-ft-default-stopword=0   
 loose-innodb-ft-inserted=0   
 loose-innodb-ft-deleted=0   
 loose-innodb-ft-being-deleted=0   
 loose-innodb-ft-config=0   
 loose-innodb-ft-index-cache=0   
 loose-innodb-ft-index-table=0   
 loose-innodb-sys-tables=0   
 loose-innodb-sys-tablestats=0   
 loose-innodb-sys-indexes=0   
 loose-innodb-sys-columns=0   
 loose-innodb-sys-fields=0   
 loose-innodb-sys-foreign=0   
 loose-innodb-sys-foreign-cols=0  
Pastikan hasilnya dengan menjalankan perintah di bawah. Baris yang berisi InnoDB akan terlihat seperti hasil di bawah ini:
 mysql -u root -p  
 show engines;  
 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+  
 | Engine       | Support | Comment                            | Transactions | XA  | Savepoints |  
 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+  
 | PERFORMANCE_SCHEMA | YES   | Performance Schema                       | NO      | NO  | NO     |  
 | MRG_MYISAM     | YES   | Collection of identical MyISAM tables             | NO      | NO  | NO     |  
 | MEMORY       | YES   | Hash based, stored in memory, useful for temporary tables   | NO      | NO  | NO     |  
 | BLACKHOLE     | YES   | /dev/null storage engine (anything you write to it disappears) | NO      | NO  | NO     |  
 | MyISAM       | DEFAULT | MyISAM storage engine                     | NO      | NO  | NO     |  
 | CSV        | YES   | CSV storage engine                       | NO      | NO  | NO     |  
 | ARCHIVE      | YES   | Archive storage engine                     | NO      | NO  | NO     |  
 | FEDERATED     | NO   | Federated MySQL storage engine                 | NULL     | NULL | NULL    |  
 | InnoDB       | NO   | Supports transactions, row-level locking, and foreign keys   | NULL     | NULL | NULL    |  
 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+  
Referensi: https://dev.mysql.com/doc/refman/5.6/en/innodb-turning-off.html