Senin, 27 Februari 2023

Cara Deploy NodeJs Menggunakan CI/CD gitlab-ci.yml

Ada banyak cara untuk mengupload hasil pekerjaan menggunakan nodejs ke server baik staging atau production. Jika kita menggunakan gitlab untuk mengelola coding bersama team kita bisa menggunakan fiture CI/CD untuk melakukan deployment. Kita hanya perlu menentukan branch sebagai syarat kapan coding kita diperlukan upload ke server. Cara untuk memanfaatkan fiture tersebut cukup mudah. Cukup buat file gitlab-ci.yml di root directory project. Setelah itu copy perintah berikut :


Untuk penjelasan perintah diatas adalah sebagai berikut :
image: totorajo/pm2-node3:18-buster adalah docker image yang akan kita gunakan untukd deploy. Didalam docker images tersebut perlu diinstall apa yang menjadi keperluan apps nodejs berjalan. Kita bisa membuat versi sendiri sesuai kebutuhan. image: totorajo/pm2-node3:18-buster adalah docker image yang siap pakai keperluan build apps nodejs.

poc adalah nama pipeline atau bisa kita sebut sebagai nama proses supaya mudah dipahami. Silahkan rubah menjadi misal : staging, production atau istilah lain sesuai kebutuhan develop.

stage: deploy adalah nama tahapan proses upload. Bisa diganti dengan stage: build atau disesuaikan istilah berdasarkan flow team yang ada.

before_script: adalah proses instalasi service yang diperlukan. Step ini sama seperti kita mempersiapkan laptop kita sebelum mengerjakan project.

script: adalah proses yang kita lakukan dilocal ketika apps kita akan dilakukan testing. Dalam kasus ini kita akan melakukan build coding nodejs menjadi file pada directory dist/

only: kita isi branch mana yang menjadikan trigger deploy. Jika kita isi misal test, staging maka setiap ada push ke branch tersebut makan proses ci/cd akan berjalan.

$private_key_server adalah nama variabel dari private key untuk server yang akan menjadi tujuan upload. untuk melakukan setup variabel ini bisa dilakukan di menu setting CI/CD bagian variabel.



docker@120.226.138.129:/home/apps/ : docker@120.226.138.129 adalah username dan IP untuk login ssh server. Kemudian /home/apps adalah lokasi folder dimana file / coding akan diupload. Bisa sesuaikan dengan lokasi server yang dipakai.

Dengan menggunakan fiture ci/cd pada gitlab akan meningkatkan produktivitas karena kita bisa fokus pada pengembangan apps untuk keperluan upload ke server secara otomatis. Peran DevOps untuk keberhasilan implementasi cara tersebut diperlukan. Meski akan menjadi repot diawal percayalah selanjutnya team bisa lebih produktif. Jika proses pipeline berhenti dan terjadi error permission denied silahkan ikuti https://www.totorajo.web.id/2022/10/cara-mengatasi-key-permission-denied.html
Semoga membantu.

Selasa, 21 Februari 2023

Cara Menjalankan Go Run Main.go Pada Container

https://www.totorajo.web.id/2023/02/cara-menjalankan-golang-pada-docker.html. Silahkan dicoba terlebih dulu supaya bisa mengikuti artikel ini. Sebelumnya kita sudah berhasil membuat container yang didalamnya isinya Golang 1.20.

Selanjutnya bagaimana cara coding project kita bisa terbaca pada container. Sehingga kita bisa menjadikan go run main.go kemudian kita bisa akses hasil melalui browser. Pertama kita perlu melakukan pengecekan dulu apakah container yang kita buat sebelumnya sudah berhasil atau belum. Ketika perintah docker ps pada terminal dan jika berhasil maka akan tampil seperti berikut.



Kotak merah menunjukan ada container bernama golang dan berjalan di port 8060. 8060:8060 mungkin akan menjadikan bingung kenapa ada dua.  8060 pertama adalah port expose port yang kita akses dari browser. 8060 kedua adalah port apps dari golang yang kita buat. Jadi maksud 8060:8060 adalah mengakses port 8060 dari broswer yang diteruskan ke container apps dengan port 8060. Bagaimana jika port aplikasi misal 3000? Jika begitu berarti saat kita membuat container pada tutorial sebelumnya menuliskan portnya 8060:3000.



Perhatikan kotak merah ada list nama container. Kita perlu ingat nama tersebut untuk masuk kedalam container ditutorial ini kita akan masuk atau akses container dengan nama golang. Selanjutnya kita load coding project golang kita ke visual studio code kemudian lihat dimana project tersebut disimpan.



Jika D:\container\golang\ dalah directory yang kita mount pada saat kita membuat container maka seluruh directory yang ada dibawahnya akan tersedia di container yang sudah kita buat tadi. Untuk membuatkan jalankan perintah :

# docker exec -it golang bash 

Jika muncul root@c8524644d242:/go# selamat kita sudah berhasil akses container. Sampai disini ketika kita lihat directory /go/src maka seluruh file yang ada di D:\container\golang\lab\lab-golang-gin-jwt juga ada di  /go/src

Setelah kita sudah berada dicontainer maka kita bisa melakukan seluruh yang diperlukan dev golang. Sebagai contoh melakukan go run main.go



Disini kita sudah berhasil menjalankan go code di container yang source codenya dari drive D. Cara ini sangat membantu ketika kita sedang melakukan riset. Semua yang kita coba diatas bisa juga kita implementasikan di programming dengan bahasa lain.  Semoga membantu

Cara Membuat Container Golang Pada Docker

Golang saat ini bahasa pemrograman yang menjadi pilihan untuk kebutuhan backend. Golang bisa kita install di berbagi sistem operasi seperti Windows, Linux dan MacOs. Jika kita sedang melakukan riset dan perlu banyak mencoba bahasa pemrograman menginstall pada Host OS terkadang menimbulkan masalah bentrok antar versi. Hal ini mengganggu produktivias kita jika sudah kejar deadline. Berikut cara mudah melakukan develop golang langsung pada docker container. Cara ini akan memberikan banyak kelebihan seperti :

1. Bisa melakukan pengujian source code di banyak versi golang.  Satu versi golang bisa diwakilkan satu container. Kita bisa membuat banyak container dengan versi yang berbeda-beda.

2. Sistem operasi host / laptop menjadi tidak banyak terinstall bahasa pemrograman. Hal ini menjadikan resiko install ulang karena kerusakan config menjadi kecil.

Cara Setup Golang Pada Docker Container
Tentukan directory pada host (laptop/pc) yang akan kita gunakan untuk develop. Jika menggunakan linux misal /home/toto/golang dan jika diwindows misal d:\dev\golang. directory tersebut adalah tempat  kita membuat project golang. Dalam penjelasan selanjutnya kita gunakan directory berdasarkan linux.

Kita cari docker image di docker hub atau bisa akses langsung pada url https://hub.docker.com/_/golang. Kita akan menggunakan versi latest (saat tulisan ini dibuat adalah versi 1.20.0). 

Jalankan perintah berikut pada terminal

Sampai disini kita sudah berhasil membuat container berisi golang yang siap untuk kita develop apps. Untuk bagaimana cara menjalankan docker run didalam container dan hasil bisa akses di browser silahkan baca artikel berikutnya di kategori docker. Semoga membantu.

Minggu, 15 Januari 2023

Solusi error gnupg gnupg2 and gnupg1 do not seem to be installed but one of - them is required for this operation pada Debian 11

Ketika sedang melakukan instalasi service di Debian terkadang kita mendapatkan error gnupg gnupg2 and gnupg1 do not seem to be installed but one of them is required for this operation. Error ini menjadikan proses berhenti. Solusi untuk mengatasi error tersebut cukup jalankan perintah berikut di terminal :

  1. sudo apt-get update
  2. sudo apt-get install -y gnupg

Setelah itu lanjutkan proses install. Semoga membantu

Kamis, 29 Desember 2022

Cara Mengatasi CORS Pada PHP


Cross-origin resource sharing (CORS) adalah fitur keamanan browser yang membatasi permintaan HTTP lintas domain. Sebagai contoh kita memiliki aplikasi pada domain apps.totorajo.web.id kemudian untuk backend menggunakan restapi pada domain api.totorajo.web.id. Ketika kita deploy dan dicoba biasanya akan muncul error CORS. Untuk mengatasi masalah itu kita bisa coba tambahkan script dibawah ini ke file yang selalu diload ketika di eksekusi.

 

Semoga membantu.

Sabtu, 01 Oktober 2022

Cara Mengatasi Key Permission Denied pada CI/CD Gitlab

Menggunakan fiture CI CD Gitlab menjadikan kita lebih mudah dalam proses deployment secara otomatis ketika melakukan commit atau request merge. Dalam beberapa kondisi proses CI/CD menjadi gagal dengan keterangan Permission Denied. 

Jika menemukan kasus tersebut ketika kita proses cicd pada gitlab berikut langkah mudah yang perlu kita dilakukan. Pastikan id_rsa sudah sesuai dengan format yang dibutuhkan. Silahkan ikuti tutorial berikut: 

https://www.totorajo.web.id/2022/05/membuat-ssh-keys-pada-linux.html.

Jika setelah melakukan langkah 1 belum berhasil dan masih Permission Denied. 

Silahkan coba ulangi proses CI/CD Gitlab semoga berhasil.

Kamis, 02 Juni 2022

Cara Mudah Install Library GD Pada Docker

 

Pada saat kita membuat aplikasi menggunakan PHP dan membutuhkan fungsi manipulasi gambar. Maka kita perlu menambahkan atau mengaktifkan library bernama gd ini. Jika kita mengguakan docker bagaimana cara untuk menambahkan library gd ? Berikut adalah langkah yang harus kita lakukan ketika kita menggunakan OS turunan debian.

1. Akses bash container yang ingin kita tambahkan. Untuk caranya silahkan baca di tulisan :
https://www.totorajo.web.id/2021/12/cara-akses-terminal-container-pada.html

2. Jalankan perintah berikut :
Semoga membantu

Kamis, 12 Mei 2022

Membuat SSH Keys Pada Linux

SSH Key digunakan untuk mengotorisasi login tanpa perlu menggunakan password server.  Sehingga ketika ingin melakukan koneksi SSH pada server kita tidak perlu menggunakan username dan password.  

Ketika kita menggunakan google cloud, gitlab, github SSH key bisa memudahkan kita dalam keperluan akses. Berikut adalah cara membuat SSH Key pada linux.

Silahakan login SSH ke server kemudian ketikan : ssh-keygen  Jika muncul pertanyaan cukup tekan enter saja pada pertanyaan berikut :

Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:

Silahkan gunakan diserver yang ingin kita login tanpa password. Semoga membantu

Update : Jika hasil private_key dalam bentuk openssh dan  tidak bisa dipakai yang dibutuhkan bentuk RSA silahkan jalankan perintah :

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa

Install Moodle Pada Container Docker

Moodle adalah aplikasi berbasis web yang biasa digunakan untuk LMS atau Learning Management System. Ketika kita menggunakan hosting dan akan melakukan upload moodle supaya bisa diakses dari internet cukup melakukan upload file dan setup database. Berikut adalah langkah ketika ingin melakukan deployment Moodle pada Docker. 



Semoga membantu

Rabu, 11 Mei 2022

Cara Mengelola Container Docker Dengan GUI



Untuk mengelola container yang sudah kita buat pada docker kita bisa menggunakan CLI Docker pada terminal. Untuk beberapa container kita masih bisa dengan mudah mengelola dengan CLI. Ketika container terus bertambah mengelola dengan CLI terkadang membuat kita bingung. Solusinya adalah gunakan Portainer. Aplikasi berbasis docker image yang bisa kita akses melalui browser. Sehingga apa yang kita ketikan pada terminal untuk mengelola container bisa digantikan dengan tampilan GUI yang bisa kita klik. Berikut adalah cara installnya.
Login ssh ke vm atau vps yang sudah terinstall docker.
contoh : ssh toto@147.88.112.79


Setelah selesai misal IP vps kita 147.88.112.79. Untuk akses Portainer http://147.88.112.79:9000.
Jika kita akses pertama kali nanti akan diminta membuat user baru dengan username admin dan password kita buat sendiri sesuai instruksi. Semoga bermanfaat.

Selasa, 19 April 2022

Mengatasi FTP Error Connection Reset By Peer


Untuk mengakses FTP (vsftpd) kita biasanya menggunakan FileZilla. Tidak seperti biasanya tiba-tiba muncul error Connection Reset By Peer. Server FTP mendadak tidak bisa diakses untuk koneksi tertentu. Terjadi secara random sehingga sulit kita melakukan diagnosa salahnya ada dimana. Secara default ketika kita mencoba mengakses FTP menggunakan mode Active. Ketika server menggunakan firewall maka mode ini banyak terjadi kasus blokir sehingga server mengalihkan menjadi mode Passive.

Connection Reset By Peer terjadi ketika akses mode Passive belum kita aktifkan pada server. Maka solusi sederhana nya adalah aktifkan mode Passive pada vsftpd dengan cara berikut :


Jika dengan cara diatas masih belum teratasi ada kemungkinan provider cloud yang kita pakai menggunakan firewall yang melakukan close connection. Biasanya kasus ini terjadi ketika internet yang kita gunakan ip publicnya dinamis. Solusinya silahkan akses menggunakan VPN dan Connection Reset By Peer tidak terjadi lagi.
Semoga membantu

Cara Melakukan CHMOD Masal Pada Linux




CHMOD pada linux merupakan aturan bagaimana file kita bisa di baca dan edit oleh user yang ada. Terkadang kita tanpa sadar melakukan set chmod 777 pada file untuk kepentingan tertentu. Permission tersebut cukup bahasa karena semua bisa melakukan apapun terhadap folder atau file yang ada. Maka kita perlu melakukan setup default dimana folder seharusnya memiliki permission 644 sedangkan 755 untuk folder. Berikut adalah cara mudah melakukan chmod tersebut secara masal pada sebuah direktori.

Untuk mengubah seluruh direktori menjadi 755, perintahnya adalah: 

$ sudo find folder_project/ -type d -exec chmod 755 {} \;


Untuk mengubah seluruh file menjadi 644, perintahnya adalah: 

sudo find folder_project/ -type f -exec chmod 644 {} \;

Cara Menemukan Lokasi File Besar Pada Linux

Disk atau hardisk penuh sering terjadi pada server yang kita kelola. Meskipun masalah sederhana namun memiliki efek fatal yaitu server menjadi down atau tidak bisa diakses. Ketika sedang terjadi transaksi kejadian tersebut dapat menimbulkan kerugian. Yang jadi masalah adalah kita sudah mengetahui hardisk habis tetapi kita tidak mengetahui penyebabnya apa sedangkan sistem kita misal tidak ada fiture upload file. 

Jika kita mengalami masalah tersebut berikut adalah langkah yang perlu menjadi perhatian.

  1. Cari file ukuran besar yang menjadi penyumbang hardisk penuh.
  2. Jika file tersebut adalah log maka hapus yang memiliki umur lama misal 180 hari.
  3. Jika file dihapus menjadikan error cukup kosongkan isinya tanpa perlu menghapus file.
Berikut adalah contoh sintak untuk melakukan 3 point diatas.
- Mencari file besar
find / -type f -size +20M -exec ls -lh {} \; | awk '{ print $NF ": " $5 }'

- Hapus Log yang sudah 180 hari
find /var/log/ -type f -mtime +180 -delete

- Menghapus isi log
cat /dev/null > /var/log/exim/main.log

Cara Mengatasi Got permission denied Docker daemon socket

 

Setelah kita menginstall docker pada server selanjutnya kita akan membuat container. Untuk melakukan pengecekan container yang pernah kita buat bisa kita mengetikan perintah $ docker ps. Tetapi muncul notifikasi gagal menampilkan list container seperti ini :  Got permission denied while trying to connect to the Docker daemon socket.

Untuk mengatasi error tersebut ketikan berikut pada terminal : 
sudo chmod 666 /var/run/docker.sock

Kembali ketikan $ docker ps seharusnya error Got permission denied while trying to connect to the Docker daemon socket sudah tidak muncul lagi. Semoga membantu

Minggu, 27 Maret 2022

Cara Mudah Install Docker Pada Ubuntu



Docker merupakan software untuk melakukan pembuatan vm berbasis container. Kita bisa dengan mudah menyiapkan environment baik untuk staging, demo atau production dengan cepat. Dengan adanya Docker proses developtment bisa dilakukan dengan cepat dan murah. Karena 1 vps bisa kita pakai untuk membuat beberapa container. 

Jika setiap container mewakili service maka ketika kita membuat microservice hanya membutuhkan 1 VPS saja dengan environment pemrograman yang beragam. Berikut adalah langkah langkah bagaimana menginstall Docker pada sistem operasi Ubuntu 20

Semoga membantu.

Rabu, 23 Maret 2022

Cara Setting SSL Pada Docker


SSL saat ini menjadi kebutuhan standart development aplikasi. Ketika kita menggunakan container dan ingin melakukan setup domain dengan reverse proxy caranya bisa dipelajari disini. Setelah domain berhasil terhubung dengan server dan kita ingin menambahkan https berikut adalah cara mudah setup https pada container docker.

Sebelum kita melakukan setup pada server pastikan kita order SSL baik gratis ataupun premium. Setelah kita melakukan order SSL pastikan kita sudah memiliki :
1. Certificate / CRT contoh : domain.crt
2. Private Key  contoh : domain.key
3. CA Bundle contoh : ca-bundle.crt

3 file tersebut kita simpan dalam directory /home/toto/ssl/

Selanjutnya lakukan ini untuk membuat file .pem
/home/toto/ssl/ $ cat domain.crt ca-bundle.crt > domain.pem

Kemudian edit 
$ sudo /etc/nginx/sites-available/default

Dan tambahkan atau sesuaikan seperti berikut 


simpan kemudian restart nginx dengan cara $ sudo service nginx restart. Kemudian akses https://container1.totorajo.web.id:4443 jika setup sesuai maka domain tersebut sudah bisa diakses menjadi https. Semoga membantu.

Selasa, 22 Maret 2022

Cara Mudah Mematikan Service Pada Ubuntu



Semua service yang berjalan pada Linux memiliki nomor PID. Terkadang ada service yang menjadikan load CPU dan RAM menjadi tinggi sehingga kita memerlukan stop terhadap service tersebut. Untuk beberapa kasus kita mengetahui nomor PID tetapi kita tidak tahu service dari PID tersebut apa.

Ketika kita asal melakukan kill bisa menjadi menjadi masalah baru. Cara mudah untuk mengetahui service apa berdasarkan nomor PID lakukan berikut pada terminal :
ps aux | grep 973

973 kita anggap sebagai nomor PID yang ingin kita lihat nomor tersebut service apa.
setelah kita tahu dan yakin ingin dilakukan stop atau kill jalankan perintah berikut :

sudo kill -9 973

Semoga membantu.

Rabu, 16 Maret 2022

Cara Install RabbitMQ Menggunakan Docker

Dalam proses development aplikasi kita membutuhkan proses broadcast. Contoh mengirikam email ketika selesai registrasi atau pemberitahuan yang terkirim ke whatsapp secara berkala. Untuk keperluan tersebut biasanya kita menggunakan cron service yang kita jalankan kemudian melakukan eksekusi file untuk melakukan proses broadcast tersebut. Jika user atau target kita sedikit cara tersebut tidak menjadi masalah. Tetapi ketika kita ingin melakukan brodcast ke 10.000 user maka muncul masalah berapa lama waktu yang dibutuhkan. Misal saja kita melakukan cronjob per 1 menit dan dalam satu menit bisa mengirim 10 user. Maka perlu 1000 menit untuk menyelesaikan proses broadcast tersebut.

Messaging broker adalah service untuk solusi kasus diatas.  Kita menggunakan RabbitMQ. Kita hanya perlu mengirimkan data dalam bentuk json ke RabbitMQ. RabbitMQ yang akan mengatur jadwal pengiriman broadcast tersebut. Berikut adalah cara mudah menyiapkan RabbitMQ pada server menggunakan docker tanpa harus ribet.



5672 adalah port RabbitMQ client connections
15672 adalah port RabbitMQ management website

Jika port tersebut sudah digunakan diserver bisa diganti disesuikan di port yang masih kosong.
Contoh: 15672:15672
Port sebelum tanda titik dua adalah port yang diakses dari browser / client
Port setelah titik dua adalah port default RabbitMQ

Untuk login management website bisa menggunakan user default yaitu :
User : guest
Pass : guest

Semoga membantu

Selasa, 08 Maret 2022

Cara Mengatasi Inode Penuh Pada Server


Inode adalah struktur data yang digunakan untuk menyimpan semua informasi file pada server. Inodes bisa berisi folder, file, image dan apapun file yang kita upload. Ketika server sudah mencapai 100% maka server akan kehabisan ruang penyimpanan. Jika aplikasi kita membuat log maka kondisi ini mengakibatkan webiste atau aplikasi kita tidak bisa diakses. Silahkan ketikan perintah df -i jika hasilnya /dev/sda menunjukan 100 % maka dipastikan server kehabisan ruang penyimpanan karena inode sudah mencapai batas maksimal.

Untuk mencari dimana lokasi folder yang menyebabkan inode penuh ketikan perintah berikut : 
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
Selanjutkan silahkan lakukan penghapusan file sesuai hasil pengecekan tersebut. Semoga membantu.

Kamis, 03 Maret 2022

Cara Setup Laravel Pada Docker Container



Ketika kita sudah membuat container pada docker selanjutnya kita harus menyiapkan service apa saja yang dibutuhkan untuk menjalankan aplikasi atau framework yang digunakan. Pada kasus Laravel berikut adalah service minimal yang harus kita siapkan.

1. Driver PDO
2. Composer

Untuk membuat container pada docker silahkan baca artikel ini. Dan berikut langkah yang harus dilakukan supaya container kita bisa untuk menjalankan Laravel. Pastikan kita sudah akses ssh pada container yang sudah dibuat sebelumnya. Untuk caranya silahkan baca artikel ini


Semoga membantu