(Part 2. Setup Docker) Raspberry Pi MQTT Server

92

Pada bagian kedua ini akan difokuskan pada setup raspberry Pi dengan memanfaatkan setup Docker untuk installasi InfluxDB, Mosquitto (MQTT) dan Grafana pada raspberry Server.

Table Of Contents

Setup Docker

Instalasi Docker cukup memiliki proses yang cukup panjang. Selain itu ada beberapa pre-requisite yang harus dipenuhi agar berjalan dengan baik. Inilah tahap pertama installasi Docker pada Raspberry Pi:

sudo apt-get update
###//Prerequisite
sudo apt-get install apt-transport-https ca-certificates software-properties-common –y
curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh

Jika username yang digunakan pada Raspberry Pi adalah “pi”, maka, permission harus diberikan dengan perintah:

sudo usermod -aG docker pi

Proses ini sebenarnya dapat diabaikan. Namun, untuk memastikan software package yang terinstall sudah benar, import Docker CPG key perlu dilakukan untuk verifikasi:

sudo curl https://download.docker.com/linux/raspbian/gpg

Setup Docker Repo

Selanjutnya adalah setup repositories untuk Docker. Bukalah file source.list dengan menggunakan text editor. Lokasi file tersebut dapat di akses pada command line di bawah ini:

nano /etc/apt/sources.list

File tersebut berisi link repositories yang terdapat pada Raspbarry Pi. Pada bagian bawah tambahkan line di bawah ini, kemudian save.

deb https://download.docker.com/linux/raspbian/ stretch stable

Setelah itu update dan upgrade kembali linux package Raspberry Pi, karena sudah ada docker. Sebelum memeriksa apakah docker telah terinstall dengan benar, kita harus kembali update dan upgrade patch tersebut.

sudo apt-get update
sudo apt-get upgrade

Langkah selanjutnya adalah membuat folder baru untuk project ini. Pada folder baru tersebut, tambahkan lah 2 folder dan 1 file yang dapat anda download pada link di bawah ini.

[download_after_email id=437]

Folder dan file yang telah anda download tersebut berisi, diantaranya:

Folder 01-Mosquito

Pada folder ini terdapat konfigurasi file untuk MQTT broker(mosquito) yang meliputi lokasi data yang tersubscribe pada mosquito dari mqtt client dan user files yang berisi user name dan password mqtt. Pada konfigurasi ini user name dan password adalah admin/admin.

Folder 02-Bridge

Pada folder ini terdapat script Python“main.py”. Script tersebut berfungsi untuk menghubungkan antara MQTT topic yang tersubscribe dari MQTT Broker dan lalu menyimpannya pada influxDB database.

setup docker
[setup docker] Isi folder

Hal yang perlu diperhatikan pada script ini adalah: Pastikan memasukkannya dengan benar sesuai dengan perangkat yang digunakan. Pada 4 line pertama berkaitan dengan setup pada Grafana (akan dibahas lebih dalam pada tutorial selanjutnya). Sedangkan 6 line setelahnya adalah setup MQTT yang sesuai coding arduino pada tutorial sebelumnya dan regular expression untuk mengenali message yang tersubscribe pada MQTT broker yang pada akhirnya akan dimasukkan kedalam influxDB database.

INFLUXDB_ADDRESS = '192.168.2.144'
INFLUXDB_USER = 'auftechnique'
INFLUXDB_PASSWORD = 'auftechnique'
INFLUXDB_DATABASE = 'auftechnique_db'

MQTT_ADDRESS = '192.168.2.144'
MQTT_USER = 'admin'
MQTT_PASSWORD = 'admin'
MQTT_TOPIC = 'home/+/+'
MQTT_REGEX = 'home/([^/]+)/([^/]+)'
MQTT_CLIENT_ID = 'MQTTInfluxDBBridge'

Konfigurasi tersebut diperlukan ketika proses setup Grafana.

File docker-compose.yml

File ini berisi Image yang dibutuhkan beserta konfigurasi masing-masing. Sehingga hanya perlu memberi satu perintah ketika melakukan proses installasi image

Kembali pada proses instalasi Docker. Anda dapat mengecek versi dan informasi terkait dengan docker yang telah terinstal dengan perintah:

docker version
docker info

Hal yang terkadang cukup mengesalkan adalah ketika hendak mengesekusi perintah yang berhubungan dengan docker, ada beberapa command yang harus selalu menambahkan kata ‘sudo’ agar tereksekusi dengan baik.

Ada trick yang dapat membantu untuk mengabaikan perintah ‘sudo’ tersebut dengan cara:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Terkadang terdapat error message ketika pertama kali hendak menjalankan Docker.

Sebelum menjalankan docker, ada baiknya untuk me-restart raspberry pi.

Setelah raspberry pi booting kembali, kita dapat menjalankan docker dengan perintah:

docker run hello-world
setup docker
[setup docker] docker hello-world

Notifikasi keberhasilan instalasi docker akan muncul pada terminal windows anda. Langkah selanjutnya adalah setup environment variable “DATA_DIR”.

Anda dapat meng-export variable tersebut ke dalam temporary folder (/temp) jika anda tidak berniat untuk menjadikan project ini pada aktifitas production. Namun, jika anda ingin menyimpan semua data akusisi atau menjadikan project ini di pakai pada production, anda dapat menyimpannya pada folder yang lain.

export DATA_DIR=/tmp
mkdir -p ${DATA_DIR}/mosquitto/data ${DATA_DIR}/mosquitto/log ${DATA_DIR}/influxdb ${DATA_DIR}/grafana

Pada saat membuat raspberry pi sebagai MQTT server menggunakan docker, pastikan bahwa setup direktori untuk menyimpan/mengambil data akusisi yang dilakukan oleh MQTT server dan Grafana pada backend telah memiliki write access untuk menghindari permission issue.

sudo chown -R 1883:1883 ${DATA_DIR}/mosquitto
sudo chown -R 472:472 ${DATA_DIR}/grafana

Langka selanjutnya adalah dengan menginstall docker-compose, sehingga dapat mempermudah proses installasi image yang dibutuhkan.

Ada beberapa cara untuk instalasi docker-compose. Namun, setelah beberapa kali mencobanya pada raspberry pi, cara yang termudah adalah instalasi melalui Pyhton package (PIP).

Ada beberapa dependencies yang harus terpenuhi dengan cara ini sebelum memulai proses instalasi docker-compose, yaitu:

sudo apt-get install -y libffi-dev libssl-dev
sudo apt-get install -y python3 python3-pip
sudo apt-get remove python-configparser
sudo pip3 install docker-compose

Setelah seluruh dependency terpenuhi, navigasikanlah pada parent folder project ini di mana terdapat file docker-compose.yml, lalu eksekusi perintah:

docker-compose up –d

Image pulling/installation proses akan berurutan berdasarkan urutan yang terdapat dalam file ‘docker-compose.yml’. File tersebut berisi seluruh docker image yang dibutuhkan pada project ini. Lalu, docker compose akan mengesekusinya satu per satu.

Pastikan seluruh image yang terdapat pada ‘docker-compose.yml’ terinstall pada container dengan mengeksekusi perintah:

docker container ls –a

Perintah tersebut akan menunjukkan semua list container pada local repository raspberry pi. Container yang tidak dibutuhkan pada project ini misalkan “hello-world”, anda dapat menghapusnya dengan cara:

docker rm containerID

Docker command yang berguna untuk diketahui adalah:

docker run xxx

Docker run akan menarik image dari docker hub repository (online) jika belum terinstall pada local repository, lalu menjalankan container baru. Mengesekusi perintah run pada docker akan membuat container ID yang baru. Sehingga akan terus menambah list container.

“XXX” adalah nama image yang terdapat pada docker, contohnya grafana, influxDB, dll.

Sebagai best practice untuk saya pribadi, daripada selalu menambah container baru yang pada akhirnya sulit untuk memaintainnya, perintah “start” lebih saya sukai, ketika telah memiliki container berisi image yang dibutuhkan.

docker start containerID

Dengan perintah ini, docker hanya akan menjalankan container berdasarkan IDnya tanpa ada penambahan container yang baru.

Perintah penting lainnya yg sangat diperlukan adalah adalah memastikan semua container yang dibutuhkan telah berjalan dengan baik sesuai perintah:

docker ps
setup docker
[setup docker] docker ps

Jika ada salah satu container yang dibutuhkan memiliki status “stopped” (dapat di lihat setelah eksekusi “docker container –ls –a”) atau tidak terdapat pada list setelah eksekusi “docker ps”. Maka, container tersebut harus dijalankan terlebih dahulu dengan perintah:

docker start containerID

Setelah memastikan status container yang diperlukan “up”, buka lah web browser pada raspberry pi ataupun pada semua perangkat yang terhubung dengan router yang sama dengan alamat IP address raspberry Pi serta port: 3000. Contoh: http://192.168.2.144:8000

Setelah itu tampilan login Grafana dashboard akan terlihat. Secara default, userID dan password adalah admin/admin

setup docker
[setup docker] grafana dashboard

Bagian di bawah ini hanyalah tambahan, tidak termasuk dalam tahapan-tahapan tutorial bagian ke-2 ini.

Mengganti default password mosquitto (optional)

cd 01-mosquitto
echo -n "" > users
docker run --rm -v `pwd`/mosquitto.conf:/mosquitto/config/mosquitto.conf -v `pwd`/users:/mosquitto/config/users eclipse-mosquitto mosquitto_passwd -b /mosquitto/config/users [USER] [PASSWORD] 

###Ubahlah kata yang terdapat dalam tanda kurung.
###contoh password: [USER]= auftechnique ; [PASSWORD] = auftechnique

Alternatif install docker image (tidak menggunakan docker compose)

cd -
cd 01-mosquitto
docker run -d -p 1883:1883 -v PWD/mosquitto.conf:/mosquitto/config/mosquitto.conf -v PWD/users:/mosquitto/config/users -v DATA_DIR/mosquitto/data:/mosquitto/data -v $DATA_DIR/mosquitto/log:/mosquitto/log --name mosquitto eclipse-mosquitto:1.5

cd -
docker run -d -p 8086:8086 -v $DATA_DIR/influxdb:/var/lib/influxdb --name influxdb influxdb:1.7

cd 02-bridge
docker build -t auftechnique/mqttbridge .
docker run -d --name mqttbridge auftechnique/mqttbridge

cd -
docker run -d -p 3000:3000 -v $DATA_DIR/grafana:/var/lib/grafana --name=grafana grafana/grafana:5.4.3

Jika anda tertarik untuk melihat video tutorial bagian ke-2 ini, anda dapat menyimak di sini:

[setup docker]

Kesimpulan

Pada tutorial ini telah di bahas mengenai setup docker, docker-compose, pull docker image, docker container serta beberapa command penting docker pada raspberry pi yang dijadikan sebagai MQTT server.

Keuntungan menggunakan docker ini adalah karena kemudahannya dalam membuat, mengembangkan dan menjalankan aplikasi di dalam container. Container ini memiliki library dan dependency yang independen di mana kesemuanya telah tersedia dalam satu paket.

Sekian tutorial pada bagian yang kedua ini. Pada bagian terakhir akan di bahas mengenai setup Grafana dashboard secara lebih dalam.
Link bagian terakhir klik disini

Terima kasih telah mengunjungi postingan ini, semoga membawa manfaat dan jangan lupa untuk terus mengikuti rangkaian tutorial-tutorial berikutnya.

Wassalamu alaikum wr wb

error: Konten ini di proteksi. Anda dapat menyalin ulang melalui ketik manual. Terima Kasih

Tutorial Python dan IoT

Silahkan berkunjung ke youtube channel ini