Category Archives

18 Articles
Konfigurasi CAS 5.1.2
Arsitektur SSO dasar.

Konfigurasi CAS 5.1.2

Apereo CAS (sebelumnya Jasig CAS) banyak dipakai untuk SSO. Cara pemasangannya agak ribet dan sulit. Kebetulan, versi CAS 5.1.2 sekarang sudah menggunakan Spring Boot sebagai dasarnya.

Keuntungan penggunaan Spring Boot adalah Jasig CAS menggunakan banyak keunggulan framework Spring. Misalnya, teknologi Spring Cloud untuk teknologi devops, Spring Web Flow untuk arsitektur layanan mikro (micro service), service discovery, dan konfigurasi melalui YAML. Sehingga, kita bisa memasang infrastruktur SSO melalui CAS tanpa harus mengoding seperti dahulu. Atau, kita bisa mengembangkan layanan yang terpisah dari SSO ala layanan mikro.

Sebelum infrastruktur bertambah rumit, saya ingin memberikan jembatan keledai. Sebab, saya pikir SSO ini agak sulit pada awalnya kalau tidak tahu caranya. Saya harap ketika selesai membaca artikel ini, pembaca ada gambaran bagaimana SSO bisa dikembangkan.

Arsitektur yang dipilih

Arsitektur SSO

Arsitektur SSO dasar.

Ada banyak pilihan, tetapi saya memilih kapabilitas komponen yang bisa diskalakan secara horizontal dan modern. Misalnya, ada banyak pilihan untuk ruang penyimpan tiket (Ticket Storage), tetapi saya memilih Redis karena dia implementasi modern yang banyak dipakai untuk teknologi dewasa ini.

Setiap komponen yang saya pilih ini dapat dikluster. Saya memilih untuk mengembangkan satu layanan per mesin. Nanti kalau sudah mengerti teknologi perawanan, [uhuk colek Utian Ayuba] Anda bisa mengubah setiap ini menjadi konfigurasi devops macam Ansible, Puppet, Chef, Vagrant,  atau apa pun agama Anda.

CAS IdP

CAS IdP adalah mesin utama yang menyediakan profil, otentikasi, dan otorisasi. Semua klien terhubung ke sana.

Cara buat:

CAS IdP Server

CAS Ticket Storage

Secara baku CAS IdP menyimpan tiket sesi pada memori. Namun, untuk arsitektur kluster dan skalabilitas, lebih baik menggunakan Redis. Mengapa Redis? Karena Redis utamanya menggunakan memori.

Untuk peladen Redis tidak perlu dikluster. Lebih baik satu instans Redis yang memakan memori 24 GB dari pada membuat kluster.

Cara buat:

Redis Ticket Storage

CAS Service Storage

Satu situs/sistem/aplikasi yang menggunakan CAS untuk SSO disebut satu layanan (service). Setiap layanan dapat didefinisikan logo, URL, ACL pengguna, dan sebagainya secara granular. Itu semua secara baku disimpan oleh CAS IdP di berkas JSON.

Untuk pengelolaan yang lebih baik, saya memilih PostgreSQL sebagai ruang penyimpan. Pengalaman saya membandingkan PostgreSQL dengan MySQL mengatakan bahwa PostgreSQL rajanya basisdata untuk basisdata perangkat lunak bebas terbuka. Waktu itu saya membandingkan layanan Roundcube Webmail dengan MySQL dan PostgreSQL. Anda sebagai pengguna Webmail UI pasti merasakan bagaimana Webmail UI itu seperti mengakses sistem HTML statik.

Saya, sih, tidak apa kalau ada yang mau menggunakan MongoDB atau yang lainnya. Tetapi saya memilih karena daftar layanan ini tidak perlu kecepatan khusus. Selain itu, daftar layanan butuh untuk tahan banting, saya lebih memilih PostgreSQL. Tentu saja, saya takkan memilih Redis.

Cara buat:

CAS Service Registry

CAS Authentication Provider

Normalnya CAS menggunakan Spring Security dengan login casuser dan sandi Mellon. Tentunya, ini buat yang main-main. Untuk yang lebih serius, gunakan LDAP, basis data, atau bahkan layanan REST.

Penyedia otentikasi CAS dapat lebih dari satu (komposit). Tetapi, untuk kali ini, gunakan saja LDAP.

Cara buat:

CAS Auth LDAP

CAS Service Management Webapp

Aduh, lupa menulis dokumentasi. Silakan simpan URL ini, nanti saya coba tulis. Untuk sementara, langsung saja buat di basisdata. He… he… he….

Studi Kasus: WordPress

Penasaran dengan hasilnya? Langsung saja, buat aplikasi WordPress. Mengapa WordPress? Karena gampang memasangnya. Tinggal pakai plugin WP Cassify, daftarkan URL WP sebagai satu layanan, dan beres!

Cara buat:

WordPress Cassify

TODO:

  • Personalisasi halaman login.
  • Membuat CAS IdP terkluster (lebih dari satu instans)
  • Entahlah….
Akses Dolphin (Manajer Berkas KDE) ke SMBv2 atau SMBv3
About KDE

Akses Dolphin (Manajer Berkas KDE) ke SMBv2 atau SMBv3

Karena WCry 2.0, protokol SMBv1 sudah tidak berlaku lagi. Kebanyakan peladen berkas sudah berjalan di versi 2 ke atas. Masalahnya, banyak penjelajah berkas masih menggunakan SMBv1 secara baku. Untuk itu, perlu diaktifkan klien versi 2 ke atas.

Saya pernah membuat sebuah retasan dengan memasang berkas tersebut menggunakan CIFS. Ternyata ada cara yang lebih baik, yakni dengan mengonfigurasi pustaka klien SMB untuk mengaktifkan sampai versi 3.

Caranya:

Selesai.

Bacaan Lebih Lanjut

Tutorial Lengkap Patroni PostgreSQL
PostgreSQL database

Tutorial Lengkap Patroni PostgreSQL

Masih ingat tutorial saya tentang Patroni dahulu? Saya akan membuat tulisan lengkap dari nol sampai berjalan. Di akhir tutorial ini Anda bisa membuat kluster Patroni secara manual. Kalau Anda devops dan tertarik menulis resep untuk Ansible, Puppet, dan sejenisnya, saya harap artikel ini bisa menjadi acuan untuk mengerti Patroni.

Mesin-mesin yang Ada

Saya membagi setiap mesin yang digunakan dengan dua IP. Satu subnet IP internal yang digunakan untuk setiap mesin dalam kluster berkomunikasi dan satu subnet IP yang digunakan untuk akses luar. Implementasi fisik dengan menggunakan dua kartu jaringan (atau dua bonding fisik)  yang berbeda. Perbedaan jaringan untuk komunikasi internal dan komunikasi dengan klien ini selain menyediakan keamanan dalam isolasi, juga membuat koneksi internal atau pun eksternal tidak saling mengganggu.

Untuk mengurangi kompleksitas tutorial ini, saya hanya menyediakan satu mesin HAProxy dan satu mesin etcd. Fokus tulisan ini adalah untuk ketersediaan PostgreSQL. Untuk membuat ketersediaan HAProxy dan etcd akan dibahas lain kali bila ada waktu [baca: kalau tidak malas].

Agar tidak membingungkan, saya selalu mempraktikkan penamaan kluster ditambah dengan prefiks nama aplikasi. Hal ini penting karena di perawanan yang sudah semakin terotomatisasi, kadang kita suka bingung kalau konfigurasi sudah tidak ada lagi.

konfigurasi

Konfigurasi server yang dipakai

Yak, intinya ada 5 mesin untuk tutorial kali ini. Saya menggunakan GNU/Linux Debian 9 karena itu standar sistem operasi UI. Untuk sistem operasi lain saya rasa tidak ada yang berbeda karena kali ini saya tidak menggunakan paket repositori.

Untuk memudahkan, pastikan kelima mesin ini memiliki berkas /etc/hosts yang berisi kelima host.

Selanjutnya, akan dibuatkan etcd terlebih dahulu sebagai inti yang mengatur kluster.

ETCD

Aplikasi etcd adalah sebuah basisdata konfigurasi yang digunakan status. Aplikasi etcd tidak ada di repositori Debian 9. Saya mengunduh versi terbaru dari CoreOS dan memasang manual.

Konfigurasi

Aplikasi etcd berisi satu binari. Untuk konfigurasi, buat manual.

Layanan

Agar dapat dijalankan secara sistem, perlu dibuatkan layanan systemd secara manual.

Pengaktifan Layanan etcd

Perhatikan bahwa untuk contoh kali ini saya menggunakan akun etcd dan grup etcd. Praktik aman selalu jalankan layanan sebagai pengguna biasa, bukan root. Buat pengguna baru ini.

Bagian terakhir dari etcd adalah mengaktifkan dan menjalankan layanan etcd.

Baris daemon-reload adalah agar systemd membaca konfigurasi yang baru saja dibuat. Baris enable untuk mendaftarkan etcd sebagai layanan yang dijalankan otomatis saat mesin baru mulai. Baris terakhir untuk menjalankan layanan etcd.

PostgreSQL

Berbeda dengan tutorial yang lalu, saya akan membuat konfigurasi per mesin agar lebih menggambarkan apa yang terjadi. Sebelum memulai, saya asumsikan bahwa setiap mesin PostgreSQL pengguna root memiliki kunci SSH sehingga antar mesin bisa masuk tanpa kunci.

Cara paling gampang, di salah satu mesin buat kunci.

Lalu, taruh kunci publik dan privat ke root. Saya asumsikan bahwa kita bekerja di mesin pg1-nyata.

Ini saya pasang secara manual. Biasanya untuk Vagrant, Proxmox, dan sejenisnya sudah menyediakan opsi pemasangan kunci SSH di konfigurasi/plugin mereka. Namun, untuk kelengkapan tutorial ini saya tuliskan saja manual. Saya sendiri sebenarnya hanya memasang satu mesin; memasang PostgreSQL; dan baru diklon menjadi dua mesin lainnya.

Pemasangan PostgreSQL

Saya kali ini menggunakan PostgreSQL yang saya kompilasi sendiri. Mengapa? Karena hasil kompilasi lebih irit dan saya mau ada variasi tulisan. Di blog saya ada kok cara-caranya untuk memasang versi repo.

Pemasangan PostgreSQL setiap mesin sama. Untuk memasang paket ketergantungan di setiap mesin jalankan:

Unduh PostgreSQL. Saya memakai versi stabil terbaru, 10.2. Kebetulan juga, saya ada peladen cermin di samping ruangan:

Saya melakukan optimasi CFLAGS untuk kompilasi. Hal ini karena saya tahu bahwa peladen di tempat saya itu homogen. Tapi, kalau misalnya Anda memasang di penyedia awan, sebaiknya  CFLAGS jangan disertakan.

Selanjutnya pemasangan Patroni.

Patroni

Patroni merupakan skrip Python. Untuk memasang Patroni, pastikan Python PIP dipasang. Saya memilih Python3. Namun, biasanya yang digunakan Python2. Saya memakai Python3 karena saya keren.

Pasang Patroni dan plugin etcd-nya.

Buat pengguna postgres

Buatkan layanan sistem.

Selanjutnya, buat konfigurasi per mesin.

Konfigurasi Per Mesin

Buat konfigurasi per mesin /etc/patroni.yml

Contoh konfigurasi yang tertulis untuk mesin pg1-nyata. Untuk pg2-nyata dan pg3-nyata ubah baris ke-3 name dengan nama mesin, dan setiap baris listen dan connect_address dengan IP per mesin.

Contoh perbedaan pg1-nyata dan pg2-nyata.

Semoga dengan ini tidak ada salah ganti atau terlewat.

Pengaktifan Layanan Patroni

Setelah konfigurasi dan unit layanan Patroni terpasang, layanan Patroni sudah bisa dijalankan. Untuk setiap mesin, jalankan:

Satu langkah lagi.

HAProxy

Bagian yang paling mudah saya salin saja, ya, perintahnya.

Konfigurasi:

Lalu,

Selesai.

Bacaan Lebih Lanjut

Optimasi MySQL: Mematikan Query Cache

Optimasi MySQL: Mematikan Query Cache

Universitas Indonesia banyak menggunakan WordPress sebagai backend situs. Sayangnya, WordPress hanya mendukung basisdata MySQL. Untuk itu, kami memilih menggunakan MariaDB. Ada juga, sih, ingin menggunakan Percona, tetapi itu untuk kisah yang lain.

Saya mendapati bahwa akses WordPress agak lama 1 sampai beberapa detik. Dari hasil baca sana-sini, saya menemukan sepertinya masalahnya ada pada konfigurasi query cache (QCache). Oracle menyarankan QCache dimatikan saja karena tidak mendukung paralelisasi pada mesin multi-core. Bahkan, untuk Oracle versi MySQL 5.6 secara baku mematikan fasilitas ini.

Lalu bagaimana?

Menurut saya, berhubung MariaDB berada di atas ZFS yang sudah ada ZIL dan ARC/L2ARC, mengapa tidak langsung saja pertembolokan diurus oleh sistemberkas?

Akhirnya, saya pun mematikan QCache:

Sehingga:

Indikator kesuksesan saya adalah tabel yang terbuka di MariaDB tidak bertambah atau bertambah dalam jumlah yang sedikit. Hasilnya, situs berjalan dengan baik dan lebih cepat.

Saya tertarik dengan mematikan double buffer pada MariaDB. Fungsi ini dapat digantikan oleh ZFS dengan mekanisme ZIL. Untuk berkas selain ZFS (EXT4) sangat tidak disarankan karena bila MySQL OOM atau mati tiba-tiba, InnoDB bisa langsung rusak. Ya, tapi, berhubung itu untuk situs yang banyak menulis ke basisdata, saya rasa belum perlu.

Bacaan Lebih Lanjut

Perkakas untuk Perangkat Keras Peladen HP

Perkakas untuk Perangkat Keras Peladen HP

Sanggahan

Universitas Indonesia memiliki banyak penyedia (vendor) untuk menyediakan perangkat keras peladen. Ada IBM, HP, dan (Alm.) SUN Microsystem. Kebetulan salah satunya adalah HP. Saya tidak sedang mengiklankan merek tertentu, namun berbagi pengalaman saja.

Penambahan Repo

Perkakas HP yang lama bernama hpacucli. Sekarang berganti nama menjadi ssacli.

Pertama-tama, pasang repo HP MCP:

Tambahkan kunci publik.

Perbaharui daftar aplikasi.

Pemasangan Perkakas

Ada banyak perkakas yang disediakan oleh HP, termasuk juga SNMP. Namun, saya hanya tertarik perkakas untuk saya.

Uji Coba

Kalau berhasil, maka perintah berikut akan bisa dijalankan.

Saya sengaja tidak mengurangi spasi pada parameter untuk membuktikan saya hanya menyalin perintah dari daftar perintah hpacucli.

Sepatah Kata Terakhir

Sejauh saya mencoba, parameter ssacli sepertinya identik dengan hpacucli. HP juga menyediakan SNMP untuk dapat mengakses kesehatan dan akses peramban. Namun, saya tidak membahasnya di sini karena ada di buku manual.

Repositori juga menyediakan untuk distro GNU/Linux lainnya seperti Ubuntu, Redhat, dan sejenisnya. Silakan lihat di daftar repositori. Saya mengubah URL menjadi HTTPS karena blog ini sensitif terhadap konten tidak aman (HTTP).

Bacaan Lebih Lanjut

Sesi PHP dengan Redis pada PHP 7.2

Sesi PHP dengan Redis pada PHP 7.2

Saya menggunakan pwgen untuk membuat sandi:

Pemasangan

Pasang modul PHP Redis dan peladen Redis.

Karena Anda sering bandel dan main salin saja, maka saya tunjukkan pembuatan sandi yang benar:

Saya asumsikan ada sebuah variabel $REDIS_PASSWORD yang berisi sandi yang benar. Untuk contoh saya, saya gunakan perkakas pwgen untuk menghasilkan sandi 32 karakter. Silakan gunakan sandi sendiri.

Selanjutnya, tambahkan sandi pada Redis:

dan PHP 7.2:

Untuk penambahan konfigurasi sebaiknya jangan di berkas php.ini. Gunakan berkas terpisah supaya ketika terjadi pembaharuan Debian tidak menimpa konfigurasi yang sudah dimodifikasi.

Muat ulang Redis dan PHP-FPM:

Selesai.

TIPS #1

Untuk menguji apakah Redis berjalan dengan baik, jalankan:

 

Bacaan Lebih Lanjut

Pemasangan Docker pada Debian Stretch
Docker

Pemasangan Docker pada Debian Stretch

Pasang fitur HTTPS untuk APT:

Impor kunci repo:

Tambahkan repo docker.io:

Perbaharui daftar paket repo dan pasang Docker:

Muat ulang mesin biar aman:

Selesai.

Tips #1 Eskalasi Izin Akun Pengguna Biasa

Supaya tidak perlu menjalankan Docker sebagai root, tambahkan izin untuk mengakses Docker dari login Anda. Caranya dengan menambahkan login Anda ke grup docker.

Tips #2 Pengujian Pemasangan Docker

Uji bila ini semua berhasil:

 

Solusi PostgreSQL dengan Patroni
PostgreSQL database

Solusi PostgreSQL dengan Patroni

Tahun baru dan Universitas Indonesia kedatangan peladen baru. Berhubung tim pengembang DSTI UI membuat pengembangan berbasis pelayan-mikro (microservice) dan ada pengembang yang iseng menantang saya menuju Kubernetes, saya pun tertantang membuat tutorial yang mendukung arsitektur tersebut. Kubernetes menyediakan fasilitas skalabilitas untuk menambah dan mengurangi peladen suatu layanan secara otomatis atau bisa diprogram manual.

Cara yang paling mudah untuk menyiapkan infrastruktur adalah dengan mengambil resep dari Ansible Playbook, menggunakan Juju, menggunakan helm, atau pemaket awan menurut keyakinan dan kepercayaan masing-masing. Namun, sebelum itu, saya tertarik untuk membahas bagaimana seandainya bila semua itu dibuat secara manual. Hal ini agar setiap kita dapat memahami bagaimana cara kerja masing-masing komponen yang nantinya diterbitkan dengan satu baris kode.

Tulisan ini sebenarnya mengikuti tutorial dari Linode. Hanya saja, saya menyesuaikan dengan lingkungan UI, Debian Stretch. Sehingga, ada yang saya modifikasi untuk keperluan dan keyakinan saya.

Arsitektur

PostgreSQL HA

PostgreSQL HA dengan 3 node dibalik haproxy

Untuk lingkungan ujicoba, saya membuat 5 mesin VM di VirtualBox dengan menggunakan 2 kartu jaringan (NIC). Satu NIC tipe NAT untuk keluar (standar VirtualBox) dengan DHCP. Satu lagi NIC tipe Jaringan Internal yang digunakan untuk setiap VM berkomunikasi satu sama lain.

pg1:

  • hostname: pg1
  • NIC: 192.0.2.11
  • Memori: 1GB

pg2:

  • hostname: pg2
  • NIC: 192.0.2.12
  • Memori: 1GB

pg3:

  • hostname: pg3
  • NIC: 192.0.2.13
  • Memori: 1GB

haproxy0:

  • hostname: haproxy0
  • NIC: 192.0.2.22
  • Memori: 512MB

etcd0:

  • hostname: etcd0
  • NIC: 192.0.2.21
  • Memori: 1GB

Berhubung komputer saya memiliki memori 32GB, saya agak royal mengalokasikan memori. Untuk keperluan pembelajaran, bisa, kok, dikurangi menjadi 512MB. Tapi, saya belum mencoba.

Sekedar tips untuk pengerjaan pg1 s.d. pg3. Sebaiknya kerjakan saja dulu pg1 lalu setelah rampung, klon dan ubah konfigurasi IP dan hostname sesuai dengan masing-masing mesin.

Konfigurasi Jaringan

Ada dua hal yang perlu dikerjakan:

  1. Konfigurasi IP pada NIC yang digunakan untuk berkomunikasi
  2. Tambahkan daftar hostname.

Konfigurasi IP

Pertama-tama kita perlu tahu NIC yang perlu dikonfigurasi. Debian Stretch sudah tidak lagi menyediakan ifconfig. Cara yang sahih sekarang untuk mengetahui ada antarmuka NIC apa saja yang tersedia:

Pada konfigurasi VM saya, yang NIC yang perlu dikonfigurasi adalah enp0s8 — punya Anda bisa beda. Untuk menambahkan konfigurasi IP statik umpanya untuk mesin pg1:

Gunakan penyunting teks favorit Anda, tapi saya menggunakan cara heker. 😛

Lakukan ini untuk pg2, pg3, haproxy0, dan etcd0 dengan IP mereka masing-masing.

Untuk langsung mengaktifkan konfigurasi jaringan:

Lakukan ini di semua mesin.

Konfigurasi Hostname

Untuk VM, sebaiknya untuk setiap VM yang berhubungan dimasukkan namanya ke daftar /etc/hosts. Lakukan ini di semua mesin:

Ganti nama hostname, umpanya untuk mesin pg1:

Keluar dari SSH lalu masuk kembali. Kalau tidak, nama sudah berganti tetapi shell Anda masih bernama yang lama.

Pemasangan etcd

TIPS: Pengerjaan yang saya lakukan adalah saya mematikan pg1. Lalu, saya klon dan saya ubah IP dan hostname.

Aplikasi etcd adalah sebuah repositori konfigurasi yang bisa diakses dari jaringan. Dia bisa dibuat kluster, tetapi untuk contoh kali ini dibuatkan satu saja. Saya asumsikan jaringan dan nama sudah terbuat.

Cara terbaik saat ini untuk lingkungan awan adalah menggunakan pemaket snapcraft untuk mendapatkan perangkat lunak terbaru yang stabil. Debian Stretch tidak memasang pemaket ini secara baku. Pasang dulu:

Lalu, pasang etcd menggunakan snapcraft:

Konfigurasi aplikasi berbasis snapcraft ada di /var/snap. Berhubung konfigurasinya panjang, saya sudah sediakan unduhan. Saya jelaskan properti yang penting saja nanti. Cara pasang:

Beberapa properti yang penting:

  • name: ‘etcd0’ — memberi nama mesin ini. Kalau ada lebih dari satu mesin etcd, pastikan masing-masing unik.
  • data-dir: /var/lib/etcd/data — tempat data etcd. Saya sesuaikan dengan FHS.
  • wal-dir: /var/lib/etcd/wal — tempat penampungan untuk jurnal etcd.
  • listen-peer-urls: http://192.0.2.21:2380 — Alamat TCP/IP untuk mendengarkan permintaan bergabung.
  • listen-client-urls: http://localhost:2379,http://192.0.2.21:2379 — Alamat TCP/IP untuk aplikasi ini beroperasi.
  • initial-advertise-peer-urls: http://192.0.2.21:2380 — Alamat TCP/IP untuk mengiklankan diri sendiri ke etcd yang lain. Saat ini tidak terpakai karena hanya ada satu saja.
  • advertise-client-urls: http://192.0.2.21:2379 — Alamat TCP/IP yang diberitahukan kepada yang lainnya.
  • initial-cluster: etcd0=http://192.0.2.21:2380, — Sejumlah alamat TCP/IP peladen etcd yang tergabung dalam kluster. Kali ini hanya satu.
  • initial-cluster-token: ‘etcd-cluster’ — Nama kluster etcd kita. Maaf kalau kurang kreatif.
  • initial-cluster-state: ‘new’ — Kondisi awal saat pertama kali etcd nanti dijalankan.

Kalau tutorial Linode memuat semua ini dalam variabel lingkungan. Sayangnya, Debian Stretch tidak ada etcd sehingga kita terpaksa memasangnya dari snapcraft.

Sebelum menjalankan etcd, jangan lupa membuat direktori yang dibutuhkan.

TIPS #1: Kalau mau mencoba dulu, sebelum menggunakan snap start, gunakan snap run untuk menjalankan etcd langsung. Apabila sudah selesai diagnosis, tekan CTRL+C untuk selesai.

Bila sudah benar, maka akan terlihat:

Bila statusnya sudah aktif, sekarang saatnya memasang PostgreSQL beserta Patroni.

Pemasangan PostgreSQL (pg1, pg2, dan pg3)

Kecuali hostname dan IP, semua pemasangan PostgreSQL identik. Selain itu, saya menggunakan pwgen untuk membuat sandi. Mohon sandi Anda berbeda dengan tutorial ini!

Pasang PostgreSQL

Pasang seperti biasa.

Saya sengaja memilih versi 10. Lebih baru dan keren.

Matikan layanan PostgreSQL karena kita mau menjalankannya dari Patroni:

Pasang Patroni

Patroni tersedia di Python PIP. Pasang PIP:

Baru pasang Patroni dan Python-etcd:

Selanjutnya, buat konfigurasi Patroni:

Jangan lupa mengganti IP pada setiap baris listen dan connect_address pada mesin pg2 dan pg3 dengan IP masing-masing. Jangan lupa mengganti sandi (password) agar tidak sama dengan tutorial ini!

Siapkan direktori data untuk PostgreSQL versi Patroni:

Terakhir, pasang unit pelayan systemd Patroni:

Daftarkan dan jalankan Patroni:

Kalau sudah benar, maka Patroni akan menjalankan PostgreSQL versinya.

Lakukan ini di pg2 dan pg3. Jangan lupa mengganti IP pada berkas /etc/patroni.yml.

Oh, iya, kalau menggunakan klon, jangan lupa /etc/network/interfaces.d/enp0s8 diubah sesuai dengan IP mesin. Jangan lupa juga ganti hostname.

Terus, kalau misalnya pg2 dan pg3 diklon dari pg1 saat Patroni sudah terkonfigurasi, jangan lupa kosongkan terlebih dahulu direktori data Patroni.

Kalau tidak, bisa aneh nanti.

Pemasangan HAProxy

Komponen terakhir yang hendak kita pasang adalah HAProxy. Untungnya, sudah ada paket Debian untuk HAProxy. Pasang seperti biasa:

Konfigurasi HAProxy untuk menjadi proksi ketiga mesin  PostgreSQL kita.

Setelah itu, muat ulang HAProxy untuk memuat konfigurasi baru.

Saya mengikuti Tutorial Linode untuk membuat port PostgreSQL pada port 5000. Anda bisa saja membuat port 5432. Kebetulan PC saya ada layanan PostgreSQL lain yang jalan pada port itu.

Untuk memonitor, silakan buka peramban Anda pada port 7000.

HAProxy interfacing Patriani's PostgreSQL nodes

HAProxy interfacing Patriani’s PostgreSQL nodes

Hanya ada satu yang hijau/aktif. Kalau tiga-tiganya, kemungkinan Anda mengklon tanpa mengubah konfigurasi dan mengosongkan direktori data PostgreSQL terlebih dahulu.

Selesai.

(Kulshekhar Kabra, 2017)

Daftar Pustaka

Kulshekhar Kabra (2017, September 19). Create a Highly Available PostgreSQL Cluster Using Patroni and HAProxy. Retrieved January 26, 2018 from https://linode.com/docs/databases/postgresql/create-a-highly-available-postgresql-cluster-using-patroni-and-haproxy/.^
Memasang Python 3.6.4 pada Debian dan Turunannya
ID Python

Memasang Python 3.6.4 pada Debian dan Turunannya

Cara sebelumnya menggunakan pyenv, sebuah perkakas yang membantu untuk memasang Python 3. Python 3.6 menyatakan bahwa paket pyenv sudah kedaluwarsa, alias sudah tidak akan dipakai lagi. Ya, sudah, dari pada ada masalah, mari memasang dengan mengompilasi dari kode sumber. Sekalian saja, mengoptimasi pemasangan.

Seperti yang lain, pasang paket yang dibutuhkan:

Unduh kode sumber, ekstraksi, dan masuk ke direktori:

Konfigurasi dengan optimasi menyeluruh:

Kompilasi:

Ada sekitar 406 tes yang harus dilewati. Untuk itu, sebaiknya saat kompilasi Anda menyapa keluarga Anda, gebetan Anda, atau pun rekan di sebelah Anda. Ingat! Anda tidak sendirian di dunia ini.

Pasang dengan nama alternatif agar tidak bentrok dengan Python yang telah terpasang di sistem:

Konfigurasi Sebuah Lingkungan Python versi 3.6.4

Cara untuk membuat sebuah lingkungan terisolasi yang didukung oleh Python adalah dengan menggunakan perkakas venv. Perkakas pyenv sudah kedaluwarsa dan tidak disarankan pengembang Python.

Pasang sebuah lingkungan baru:

Masukan direktori lingkungan lokal tersebut ke PATH dan simpan di ~/.bashrc agar tersimpan PATH baru tersebut.

Jalankan Python versi 3.6.4

Untuk menjalankan Python yang sudah terpasang:

Untuk mematikan — mengembalikan ke Python versi sistem:

Selesai.

Memasang Python 3 Terbaru di Debian dan Turunannya
ID Python

Memasang Python 3 Terbaru di Debian dan Turunannya

Debian menyertakan Python 3 versi 3.5 yang sebenarnya cukup untuk digunakan. Namun, untuk menambah khasanah dan tulisan di blog ini, saya berusaha menulis cara memasang Python versi terbaru. Siapa tahu ada yang berminat. Apalagi, Python menjadi seksi semenjak banyak pustaka seperti Numpy dan Pandas untuk pengolahan data besar.

Paket yang Diperlukan

Pasang pengembangan paket yang diperlukan:

Pasang paket GIT karena perkakas untuk memasang memerlukan akses GIT:

Perkakas pyenv

Perkakas pyenv adalah sebuah perkakas yang bisa memasang berbagai versi Python dan mengaktifkannya sesuai selera.

Perkakas pyenv akan memasang skrip yang dibutuhkan untuk memasang Python. Setelah memasang pyenv, tambahkan tiga baris berikut ke ~/.bashrc dengan penyunting teks favorit Anda.

Untuk bisa langsung mengaktifkan, langsung jalankan:

Pemasangan Python

Setelah perkakas pemasang selesai dipasang, langsung saja pasang Python 3 terbaru:

Setelah selesai pemasangan, kasih nama lingkungan Python versi 3.6.4 itu agar nanti kalau butuh versi ini gampang diaktifkan.

Versi Global

Sampai baris ini, bila kita mengetik:

akan terlihat versi baku untuk pengguna yang aktif adalah Python 2.7.13 (Debian Stretch). Agar versi yang telah dikompilasi menjadi versi yang baku, jalankan:

Selesai.

Bacaan Lebih Lanjut

WordPress 4.9.1 dengan PHP 7.2

WordPress 4.9.1 dengan PHP 7.2

Saya biasanya kalau mau memperbaharui WordPress selalu menunggu versi minor .1 atau lebih. Soalnya, suka ada perilaku tak terduga kalau versi mayor baru terbit. Kali ini, WordPress 4.9.1 sudah terbit.

Menurut situsnya, WordPress merekomendasikan penggunaan PHP 7.2. Saya sendiri baru tahu kalau sudah ada PHP 7.2. Pantas saja WordPress berhenti di versi 4.8.4 pada beberapa peladen.

Saatnya memasang PHP 7.2!

Pemasangan PHP 7.2

Saya pernah membahas tentang PHP 7.1+ di artikel terdahulu. Jadi, ini sekedar mengulang saja.

Aktifkan modul APT untuk mengakses repo berbasis HTTPS dan beberapa paket lainnya.

Aktifkan repo Suri.

Lalu, pasang PHP 7.2 untuk menggantikan PHP 5.

Kalau hanya sekedar php-fpm, yang terpasang bakal versi 7.1. Harus secara eksplisit disebutkan versi 7.2.

Selanjutnya, menyalin konfigurasi fpm dari /etc/php5/fpm/pool.d ke /etc/php/7.2/fpm/pool.d untuk setiap pool.

Saya sejauh ini tidak ada masalah.

Fungsi Yang Mulai Ditinggalkan

Nampaknya PHP7 dan terbaru hendak dibuat menjadi domain yang ketat (strict typecast). Mungkin pengembang PHP ingin menjadikan PHP sebagai bahasa yang lebih aman. Kalau saya melihat log, biasanya akan diprotes bentuk akses senarai (array). Saya mendapati fungsi count() terutama yang paling sering dicatat.

Ada orang-orang yang memutuskan untuk kembali ke PHP 7.1. Tapi saya tidak! Agar sesuai dengan PHP7.2 dan terbaru, misalnya ada variabel:

count($elements[‘#value’])

Diubah dengan menambahkan uji tipe senarai :

Atau, saat diubah menjadi tipe senarai:

Penyebab ini semua kalau saya lihat di kode sumber WordPress adalah biasanya karena penggunaan variabel global.

Untung saja, untuk yang lain pun WordPress dan plugin-nya sudah cukup bersahabat.

Bacaan Lebih Lanjut

Memainkan Shadowverse di GNU/Linux
Shadowverse

Memainkan Shadowverse di GNU/Linux

Sebenarnya tulisan ini bisa terbagi menjadi dua artikel; artikel tentang memasang Steam dan artikel tentang memasang Shadowverse. Mengingat Shadowverse tidak butuh apa-apa, tulisan ini malah hanya terfokus untuk memasang Steam dengan menggunakan WINE versi terbaru. Saya menggunakan KDE Neon, sebuah sistem operasi berbasis Ubuntu 16.04.

Pengaktifan Repositori WINE Terbaru

Untuk WINE versi terbaru, tambahkan PPA WINE dari Ubuntu.

Jangan jalankan pembaharuan repositori dulu. Nanti saja di saat penambahan arsitektur 32-bit.

Pengaktifan Arsitektur 32-bit

Hasil terbaik untuk menjalankan aplikasi Steam dengan WINE didapatkan dengan menjalankannya di arsitektur 32-bit.

Konfigurasi WINE Mode 32-bit

Tetapkan WINE untuk menggunakan arsitektur 32-bit:

Supaya Hayati tidak lelah, taruh baris tersebut pada berkas konfigurasi mula:

Berkas ini akan selalu dijalankan setiap kali BASH/login memulai sesi baru.

Penambahan Arsitektur 32-bit

Tambahkan arsitektur 32-bit sistem operasi Anda bila Anda menggunakan arsitektur 64-bit.

Langkah penambahan arsitektur dilakukan kalau Anda masih memasang arsitektur 64-bit murni. Tidak ada salahnya dijalankan. Jangan lupa juga menjalankan pembaharuan daftar repositori.

Pemasangan S3 Texture Compression

Puji Tuhan negara kita tercinta tidak memiliki hukum paten perangkat lunak seperti beberapa (Uhuk AS uhuk) negara pencilan. Untuk berjaga-jaga siapa tahu sudah terpasang, buang pustaka kompresi tekstur yang lama:

Ini hanya berjaga-jaga saja. Takutnya sudah pernah terpasang untuk aplikasi lain.

Selanjutnya, pasang pustaka tekstur yang tanpa embel-embel.

Sebenarnya Shadowverse tidak S3TC yang aneh-aneh. Satu bagian ini bisa dilewati. Namun, saya pikir mungkin nanti ini dibutuh untuk aplikasi Steam yang lainnya.

Pemasangan WINE

Pasang WINE.

Aplikasi WINE secara aneh terpasang di direktori /opt/wine-staging. Terpaksa harus ditambahkan ke PATH agar bisa dieksekusi.

Jangan lupa menyimpan baris ini agar nanti selalu dijalankan.

Selanjutnya winetricks.

Pemasangan winetricks

Untuk pemasangan Steam yang baik, digunakan perkakas winetricks. Perkakas ini sebenarnya tersedia di repositori Ubuntu. Sayangnya, untuk memasang Steam diperlukan versi terbaru perkakas ini. Mari pasang versi terbaru winetricks:

Saya sengaja menjalankan wget tanpa sudo. Siapa tahu di antara pembaca ada yang menggunakan proksi dengan menggunakan variabel lingkungan.

Pemasangan Steam

Sebelum memasang Steam, pastikan bahwa aplikasi Steam dijalankan oleh WINE dengan mode WinXP. Pada WINE versi terbaru, WINE dijalankan dengan mode Windows 7. Hal ini wajar, sih, mengingat banyak permainan yang membutuhkan minimal sistem operasinya Windows 7.

Mari tandai Steam.

Pasang Steam, namun jangan dijalankan dulu. Pastikan tanda centang untuk menjalankan Steam pada langkah pemasangan terakhir dihilangkan. Steam belum dapat dijalankan karena ada galat pada implementasi WINE. WINE masih belum bisa menjalankan CEF, pustaka Chrome yang menjalankan langsung web di sistem dasar.

Untuk memperbaiki hal tersebut, harus ditambahkan “-no-cef-sandbox” pada saat menjalankan Steam. WINE memasang dua berkas peluncur untuk menjalankan WINE. Satu untuk ditaruh di menu dan satu ditaruh di destop.

Nah, selesai sudah. Jalankan Steam dengan klik ikon Steam di destop/menu. Atau jalankan langsung di terminal:

Selanjutnya tinggal memasang Shadowverse seperti biasa.

Pemasangan Shadowverse

Bisa saja membuka Steam lalu menjelajah Steam Store dan memasang Shadowverse. Atau, jalankan Steam untuk memasang Shadowverse.

Selesai.

Bacaan Lebih Lanjut

Memasang Enterprise Single Sign-On – CAS  (Sebelumnya Jasig CAS)

Memasang Enterprise Single Sign-On – CAS (Sebelumnya Jasig CAS)

SSO merupakan sebuah konsep yang sebenarnya digunakan di portal korporasi. Namun, pada perkembangannya, justru organisasi pendidikan tinggi mengadopsinya juga untuk login yang terfederasi. Contoh pengguna SSO yang terfederasi untuk perguruan tinggi adalah eduroam.

Saya mau membuat sebuah solusi SSO menggunakan Jasig CAS. Ada, sih, versi lain seperti SUN CAS, Google Accounts, atau WSO2 Identity Provider. Tapi, saya memilih CAS karena sudah lama digunakan di UI dan saya malas mencari yang lain.

Berhubung tulisan ini panjang, langsung saja saya berikan asumsi berikut:

  • Debian Strecth masih kosong.
  • CAS berdiri sendiri (standalone) dengan Jetty.
  • Sertifikat SSL sudah ditandatangani oleh pihak ketiga.
  • Iman yang teguh.

Langsung saja persiapan sistem.

Persiapan Sistem

Sebelum memasang CAS, persiapkan sistem terlebih dahulu.

Memasang JDK 8

Saya percaya isi lisensi, lebih baik dilewati saja:

Agar dapat memasang sertifikat dari Webupd8, pastikan untuk memasang dirmgr (khusus Stretch):

Tambahkan repo Pemasang Oracle Java.

Pasang Oracle JDK8 dan paket unlimited JCE. Paket JCE berfungsi untuk mengaktifkan fungsi enkripsi yang lebih tinggi dari standar enkripsi yang disediakan oleh Oracle Java.

Selesai untuk Java.

Menyiapkan Direktori yang Perlu

Sayangnya, sebelum CAS terpasang, ada yang harus dipersiapkan. Hal ini karena konfigurasi CAS masih terkode langsung dan tersebar di konfigurasi sehingga lebih baik untuk pemula mengikuti direktori konfigurasi standar.

Yang saya maksud adalah membuat direktori /etc/cas yang dimiliki oleh pengguna. Bisa saja dijalankan sebagai root langsung. Namun, lebih baik Anda berhenti membaca tulisan ini dan cari pekerjaan yang lebih cocok daripada sysadmin.

Penambahan ekstra keamanan sehingga hanya bisa diakses oleh pengguna yang menjalankan CAS.

Memasang Sertifikat SSL

Untuk sertifikat yang ditandatangani sendiri, silakan baca panduan yang sudah disediakan pada Daftar Bacaan. Serius, deh. Pelit sekali Anda untuk bahkan  tidak mau menyediakan waktu untuk membuat sertifikat SSL Let’s Encrypt dengan certbot.

Hal yang perlu dilakukan adalah mengonversi PEM menjadi PKCS12 yang siap untuk diimpor ke dalam format keystore Java.

Ubah format PEM ke format PKCS12. Buat sembarang sandi karena keytool Java (JKS) tidak bisa mengimpor kunci tanpa sandi.

Terakhir, ubah dari PKCS12 ke JKS. Lihat, berkas dan kunci masing-masing saya buat dengan sandi yang berbeda. Jangan lupa disesuaikan pada berkas konfigurasi.

Ubah perizinan berkas thekeystore dan pindahkan ke direktori /etc/cas.

Selanjutnya memasang CAS.

Memasang Overlay CAS

CAS versi terbaru (5.1.x) memecah paket-paket modulnya dalam banyak modul. CAS menggunakan perkakas pembangun Java untuk membungkus dan memaket modul sesuai dengan kebutuh pengguna. Jenis pemaketan tersebut dinamakan overlays. Ada dua jenis yang didukung yakni Maven dan Gradle. Saya memilih Gradle karena Maven lebih gampang dipasang.

Mengunduh Overlay CAS

Unduh dan ekstraksi overlay untuk Gradle:

Mengonfigurasi Overlay CAS

Pada gradle.properties saya mengubah versi Spring Boot ke yang terbaru:

Pada etc/cas/config/application.yml tambahkan:

Pada baris ke-5 etc/cas/config/log4j2.xml ubah direktori log ke standar FHS (/var/log):

Pada cas/build.gradle ubah tomcat menjadi jetty:

Selanjutnya, jalankan perintah berikut untuk membangun paket yang dibutuhkan.

Menjalankan CAS

Berkas yang dihasilkan dari hasil konfigurasi ada di cas/build/libs/cas.war. Berkas ini merupakan sebuah paket aplikasi Web Java yang bisa dijalankan oleh kontainer Servlet apa pun. Namun, untuk keperluan kali ini, jalankan perintah:

Kalau sukses akan muncul di port 8443. Gunakan login casuser dan sandi Mellon untuk masuk.

Berhubung hari sudah subuh, saya berhenti di sini. Nanti selanjutnya tutorial akan lanjut kepada konfigurasi CAS.

Bacaan Lebih Lanjut

Repositori Suri untuk PHP 7.1+

Repositori Suri untuk PHP 7.1+

Plessis mengumumkan bahwa dia sudah tidak mau lagi mengelola pemaketan PHP terbaru di Dotdeb. Dia kemudian menyarankan untuk menggunakan repositori dari Sury, seorang pengelola resmi pemaketan PHP dari Debian.

Karena Sury menggunakan HTTPS, jangan lupa pasang dulu transportasi HTTPS untuk APT:

Cara menambahkan:

Selesai. Secara baku, paket PHP yang dipilih adalah 7.1. Namun, Sury menyediakan juga untuk paket PHP 7.0.

Create A Database and Its Owner on PostgreSQL
PostgreSQL database

Create A Database and Its Owner on PostgreSQL

In MySQL, these are the chants:

On PostgreSQL, the chants are:

Very simple actually and Debian by default listen at localhost. Users can connect to its database via port 5432.

Of course, these chants are useful for developing apps. In Production, you should supply a user that can only Read/Write/Update a database. In fact, several frameworks like Laravel could setup another user just to Read the database.

Memasang Laravel pada Debian Jessie

Memasang Laravel pada Debian Jessie

Laravel bisa dengan PHP 5.6, tetapi lebih baik gunakan versi 7 saja. Versi 7 ada di DotDeb.

Persiapan

Pemasangan repo DotDeb dengan membuat /etc/apt/sources.list.d/dotdeb.list

Daftarkan kunci  repositori DotDeb dan kemudian perbaharui daftar paket.

Pasang Perkakas

Pasang hal-hal remeh.

Pasang PHP7.

Pasang Composer.

Tambahkan PATH untuk Composer.

Tak perlu keluar:

Pasang Laravel.

Selesai.

Memasang Golang Terbaru

Memasang Golang Terbaru

Debian Jessie memiliki Go versi lawas di repositorinya. Hal ini membuat beberapa aplikasi Go seperti Hydra SSO tidak bisa berjalan. Untuk itu, harus dipasang Go versi manual.

Pertama-tama, pergi ke laman unduh di situs resmi Go. Saat penulisan versi Go yang terbaru adalah 1.8.3. Lalu, salin tautan unduhan untuk dipakai.

Unduh dan taruh Go ke direktori tertentu. Kalau saya, lebih suka di /opt

Go memerlukan direktori Go untuk pengguna dan direktori Go sendiri untuk bisa dieksekusi. Maka, buatlah berkas /etc/profiles.d/golang.sh yang berisi:

Selesai.

Oh, iya, supaya tidak usah keluar, langsung saja eksekusi:

 

Galera dengan Galera Arbitrator (GARB)

Galera dengan Galera Arbitrator (GARB)

Galera with Galera Arbitrator for conflict resolution.

Pada implementasi terdahulu, digunakan tiga basisdata agar tercapai kuorum. Kuorum ditujukan agar tidak tercapai konflik penulisan (split brain). Namun, sebenarnya untuk dua basisdata saja sudah cukup. Pasang saja Galera Arbritator (GARB) pada kepala kluster dan matikan saja salah satu node supaya terjadi kuorum.

GARB adalah sebuah layanan khusus untuk memilih (voting) di Galera. Dia tidak ada ada data di dalamnya.

Pasang GARB

Supaya sama, saya asumsikan kita memasang repositori resmi dari MariaDB.

Mari memasang GARB:

Selesai.

Konfigurasi GARB

Ubah berkas /etc/default/garb sebelum memulai GARB.

Jangan lupa untuk menyertakan port! Ada galat dikonfigurasi GARB bila kita tidak secara spesifik menyebutkan port Galera.

Jalankan GARB

Bila sudah benar, seharusnya saat menguji jumlah node dalam kluster tetap tiga.

Selesai.