tag:blogger.com,1999:blog-1857985627761233042024-03-18T10:02:52.094+07:00Teziger BlogBerbagi Tips Dan Trik Dan Segala Hal Dari Dunia Internet Seperti Ngeblog SEO Adsense, Pemrograman Web, Software, Dan Teknologi Informasi Komunikasi (TIK)Arsanhttp://www.blogger.com/profile/01505898271108224433noreply@blogger.comBlogger395125tag:blogger.com,1999:blog-185798562776123304.post-31748305629031419332023-05-23T22:32:00.001+07:002023-05-23T22:32:26.441+07:004 Alat Yang Dapat Membantu Dalam Penelitian Penulisan<p>Penulisan penelitian adalah aspek fundamental akademisi, yang membutuhkan ketelitian, ketelitian, dan komunikasi ide yang efektif. Untuk membantu para peneliti dalam proses penulisan mereka dan meningkatkan kualitas pekerjaan mereka, berbagai alat telah muncul sebagai sumber daya yang berharga. </p><p>Pada artikel ini, kita akan mengeksplorasi lima alat penting yang dapat membantu dalam penulisan penelitian. Alat-alat ini, seperti alat parafrase, penghitung kata, alat kata ulang, penulis ulang paragraf AI, dan Grammarly, menawarkan fungsionalitas mulai dari meningkatkan orisinalitas hingga meningkatkan tata bahasa dan kejelasan. </p><p>Dengan memanfaatkan alat-alat ini secara efektif, para peneliti dapat merampingkan proses penulisan mereka, menjaga integritas akademik, dan menghasilkan makalah penelitian yang disusun dengan baik yang memberikan dampak berarti di bidangnya masing-masing.</p><div><a href="https://www.paraphrasing.io/id"><b><span style="font-size: large;">Alat Parafrase</span></b></a></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif3sSMOHYruSRYT16zTv-a2eF7n3LfxgkIuEa05nTHgS0L9vdu-T1ZRsIp5EkF8fO7muD2nz74c01xI8TEOf473ssisclu3pGSDcwVBRDNvLVn54CSX2hdVjfF0XI2YM-w7aGhV0OgFc1jzRv3aB9g8v4ZJ55CVIVYxWEBNArNXuZ3lX3QQHmy-w/s1063/alat-paraphrase.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="364" data-original-width="1063" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif3sSMOHYruSRYT16zTv-a2eF7n3LfxgkIuEa05nTHgS0L9vdu-T1ZRsIp5EkF8fO7muD2nz74c01xI8TEOf473ssisclu3pGSDcwVBRDNvLVn54CSX2hdVjfF0XI2YM-w7aGhV0OgFc1jzRv3aB9g8v4ZJ55CVIVYxWEBNArNXuZ3lX3QQHmy-w/w640-h219/alat-paraphrase.jpeg" width="640" /></a></div><div><br /></div><div><div>Alat parafrase adalah sumber yang berharga untuk penulisan penelitian karena membantu mengungkapkan ide dengan cara yang unik sambil mempertahankan makna intinya. Alat ini menyusun ulang kalimat atau paragraf dengan mengganti kata dengan sinonimnya atau mengubah struktur kalimat. </div><div><br /></div><div>Dengan menggunakan alat parafrase, peneliti dapat menghindari plagiarisme dan meningkatkan orisinalitas karya mereka. Namun, penting untuk meninjau keluaran untuk akurasi dan koherensi, karena alat otomatis mungkin tidak menangkap makna yang dimaksud dengan sempurna.</div></div><div><br /></div><div><a href="https://worldwebtool.com/id/word-counter"><b><span style="font-size: large;">Penghitung Kata</span></b></a></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibIm3Pri0AeW0T8xlx-dOypwpfVQQa0-b97UC0T9mDeJ5l2NDFgkIlZa0KmqdnOv0pcEkua9U4w1vj11e68GjpgdpwGXFoz0sEeBEK-jGm7MNPowxQKaIuwJ4-vjt3YDDpomBQ4yv6OGpPlHSFOefp1wtS6ctr93zRJgo5-hFJFbzKZQ5UzL2Ipg/s816/penghitung-kata.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="354" data-original-width="816" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibIm3Pri0AeW0T8xlx-dOypwpfVQQa0-b97UC0T9mDeJ5l2NDFgkIlZa0KmqdnOv0pcEkua9U4w1vj11e68GjpgdpwGXFoz0sEeBEK-jGm7MNPowxQKaIuwJ4-vjt3YDDpomBQ4yv6OGpPlHSFOefp1wtS6ctr93zRJgo5-hFJFbzKZQ5UzL2Ipg/w640-h278/penghitung-kata.jpeg" width="640" /></a></div><div><br /></div><div><div>Alat penghitung kata sangat penting untuk penulisan penelitian karena membantu peneliti melacak jumlah kata, jumlah karakter, dan metrik penting lainnya. Ini memastikan bahwa peneliti memenuhi persyaratan kata tertentu dan mempertahankan panjang yang diinginkan untuk makalah atau artikel penelitian mereka. </div><div><br /></div><div>Penghitung kata juga membantu menyusun dan mengatur konten secara efektif, memungkinkan peneliti untuk menyampaikan ide mereka secara ringkas.</div></div><div><br /></div><div><a href="https://seomagnifier.com/ai-paragraph-rewriter"><b><span style="font-size: large;">Penulis Ulang Paragraf AI</span></b></a></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6l9IXbSzE4VtNbAqXdu4cAMutS2sYa47ibJPVZLzMSbjszz06dmnF27zRywEu5jaSu5kRtisNMcDdkzc2Rz73fbQCwrWW6k_Hx2N6xfxwe9PzEQa0_oahAVYZYT0BEqD38nebecWwXmEUHiiKLGsnd_OqcEGCNhNs5qLcMdw6V4aDqm91oe-lzQ/s775/ai-paragraph-writer.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="338" data-original-width="775" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6l9IXbSzE4VtNbAqXdu4cAMutS2sYa47ibJPVZLzMSbjszz06dmnF27zRywEu5jaSu5kRtisNMcDdkzc2Rz73fbQCwrWW6k_Hx2N6xfxwe9PzEQa0_oahAVYZYT0BEqD38nebecWwXmEUHiiKLGsnd_OqcEGCNhNs5qLcMdw6V4aDqm91oe-lzQ/w640-h280/ai-paragraph-writer.jpeg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div><div><div>Penulis ulang paragraf AI adalah alat canggih yang menggunakan kecerdasan buatan untuk menulis ulang paragraf teks secara otomatis. Alat ini menganalisis teks masukan dan menghasilkan versi alternatif dengan mengubah struktur kalimat, menyusun ulang kalimat, dan memilih sinonim yang sesuai. </div><div><br /></div><div>Penulis ulang paragraf AI dapat bermanfaat bagi peneliti yang perlu menulis ulang atau menyusun ulang bagian tertentu dari makalah penelitian mereka sambil mempertahankan konteks dan maknanya. Namun, penting untuk meninjau output untuk akurasi dan mempertahankan pesan yang dimaksud.</div></div><div><br /></div><div><a href="https://www.grammarly.com/"><b><span style="font-size: large;">Grammarly</span></b></a></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN-TpZ48cZvTc1fcwYbRaXr4GRPIcpWpvr73OPsvC6ERdhntBGaJWL8Bnfz6nfFahN2463EMDQzj3JtPkC1mZMegUFoREk0JAJYD7yZi7Y-DbxD8BBUuPE7x24iS7lasHxx_SPEiPObx-p7s9PjgOkysOX5yLNT1gjuAVigW4Y7ujoSR6TIRRdpg/s1153/grammarly.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="450" data-original-width="1153" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN-TpZ48cZvTc1fcwYbRaXr4GRPIcpWpvr73OPsvC6ERdhntBGaJWL8Bnfz6nfFahN2463EMDQzj3JtPkC1mZMegUFoREk0JAJYD7yZi7Y-DbxD8BBUuPE7x24iS7lasHxx_SPEiPObx-p7s9PjgOkysOX5yLNT1gjuAVigW4Y7ujoSR6TIRRdpg/w640-h250/grammarly.jpeg" width="640" /></a></div><br /><div><br /></div><div><div>Grammarly adalah alat tulis yang banyak digunakan yang membantu peneliti meningkatkan tata bahasa, ejaan, tanda baca, dan gaya penulisan mereka. Ini memberikan saran dan koreksi waktu nyata untuk kesalahan tata bahasa, ungkapan canggung, dan masalah penulisan lainnya. </div><div><br /></div><div>Grammarly juga menawarkan wawasan tentang keterbacaan, keringkasan, dan kejelasan, memastikan bahwa peneliti menghasilkan makalah penelitian yang ditulis dengan baik dan dipoles. Ini sangat membantu bagi penutur bahasa Inggris non-asli dan mereka yang ingin meningkatkan kualitas tulisan mereka secara keseluruhan.</div><div><br /></div><div><b><span style="font-size: large;">Kesimpulan</span></b></div><div>Alat-alat ini memberi para peneliti bantuan yang berharga selama proses penulisan penelitian. Namun, penting untuk menggunakannya sebagai alat bantu dan melatih pemikiran kritis, memastikan bahwa hasilnya sejalan dengan makna yang dimaksudkan dan standar ilmiah.</div><div><br /></div><div>Peneliti juga harus meninjau dan mengedit pekerjaan mereka secara manual untuk memastikan akurasi, koherensi, dan kepatuhan terhadap pedoman gaya dan persyaratan akademik tertentu.</div></div>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-16947043007656810562023-03-27T12:59:00.001+07:002023-03-27T12:59:49.843+07:00Kenapa Jenkins Lebih Powerful Dibanding CI/CD Tool Lainnya?<div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgom5WsdHX9KZGDOZFjDD35P1G3x7F4RQHDF0DapApnhO9-h9comhxI8UwG4WS6QOOuyEuhR_Hf1ZO2zFWsLQ7HMK__c6_KJW377tM6f7Rl9lhCh6ISuNNj0HoxC8pBaBn8FF316yAUeKSmden2PhhR6D5HC-5PDpuVkB106uzWlpBP0wJyWct9OQ/s796/jenkins.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="398" data-original-width="796" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgom5WsdHX9KZGDOZFjDD35P1G3x7F4RQHDF0DapApnhO9-h9comhxI8UwG4WS6QOOuyEuhR_Hf1ZO2zFWsLQ7HMK__c6_KJW377tM6f7Rl9lhCh6ISuNNj0HoxC8pBaBn8FF316yAUeKSmden2PhhR6D5HC-5PDpuVkB106uzWlpBP0wJyWct9OQ/s320/jenkins.png" width="320" /></a></div><b>Jenkins</b> adalah salah satu tool Continuous Integration/Continuous Delivery (CI/CD) yang paling populer di dunia. Tool ini telah dipercaya oleh banyak perusahaan untuk membangun, menguji, dan mengirimkan aplikasi mereka. Jenkins telah menjadi pilihan utama bagi para pengembang aplikasi selama bertahun-tahun karena kemampuannya untuk menyediakan fleksibilitas, keandalan, dan skalabilitas yang luar biasa.<br /><br />Jenkins menawarkan banyak fitur yang membuatnya lebih powerful dibanding CI/CD tool lainnya. Ini termasuk:<br /><br />1. Skalabilitas: Jenkins dapat dengan mudah di skalakan untuk menangani proses pengembangan dan pengiriman yang kompleks. Ini memungkinkan tim untuk mencapai kinerja yang lebih tinggi dengan menggunakan Jenkins daripada menggunakan alat lain.<br /><br />2. Integrasi: Jenkins dapat dengan mudah diintegrasikan dengan berbagai alat pengembangan dan pengiriman yang berbeda, termasuk Git, Docker, Kubernetes, dan banyak lagi. Hal ini memungkinkan tim untuk menggunakan alat yang berbeda untuk mencapai tujuan yang sama.<br /><br />3. Dukungan: Jenkins memiliki komunitas yang luas dan aktif yang dapat membantu para pengembang dengan masalah Jenkins mereka. Komunitas ini juga menyediakan berbagai sumber daya seperti dokumentasi, tutorial, dan banyak lagi untuk membantu para pengembang memulai dengan Jenkins.<br /><br />4. Fleksibilitas: Jenkins dapat dengan mudah dikonfigurasi untuk menangani berbagai proses pengembangan dan pengiriman yang berbeda. Ini memungkinkan tim untuk membuat proses yang sesuai dengan kebutuhan mereka.<br /><br />5. Kontrol: Jenkins memungkinkan tim untuk memiliki kontrol penuh atas proses pengembangan dan pengiriman. Tim dapat mengatur proses dengan menggunakan berbagai plugin atau skrip yang tersedia.<br /><br /><a href="https://teziger.blogspot.com/2023/03/kenapa-jenkins-lebih-powerful-dibanding-cicd-tool-lain.html">Jenkins</a> adalah alat yang sangat powerful dan fleksibel yang dapat membantu tim mencapai tujuan mereka dengan lebih cepat dan efisien. Ini memungkinkan tim untuk membangun, menguji, dan mengirimkan aplikasi mereka dengan mudah dan cepat. Dengan fitur-fitur yang ditawarkannya, Jenkins jelas menjadi pilihan yang lebih baik daripada CI/CD tool lainnya.<br /><br />Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-2647503272541465032023-03-13T15:35:00.005+07:002023-03-13T17:19:27.393+07:00Praktik Terbaik untuk Mengurangi Ukuran File PDF<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD3JFLEeWW4QhsCzkSTn9jnUFRw-7wZ3q7lfjnjWTKyISKkB-aYw4aD5nPJzFHUDXZdHuhNzfFH7d14GMM5w1asJHl-NZHidR534-huJNeGGHewRB6_lVa9w3F-Kuq4R9ubWmvqEn7ZlF_KjLN2FkJGdaP39Q784xP10aXiuSYKUqAKwib-XJLmQ/s1400/Compress-PDF-PDF-Compressor-Full-Cover.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="450" data-original-width="1400" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD3JFLEeWW4QhsCzkSTn9jnUFRw-7wZ3q7lfjnjWTKyISKkB-aYw4aD5nPJzFHUDXZdHuhNzfFH7d14GMM5w1asJHl-NZHidR534-huJNeGGHewRB6_lVa9w3F-Kuq4R9ubWmvqEn7ZlF_KjLN2FkJGdaP39Q784xP10aXiuSYKUqAKwib-XJLmQ/w640-h206/Compress-PDF-PDF-Compressor-Full-Cover.jpg" width="640" /></a></div><div><br /></div><div>PDF sering digunakan untuk menyimpan dokumen teks secara digital dan</div><div>mengirimkannya melalui berbagai media online. Berbagai alasan di balik popularitas</div><div>mereka termasuk kompatibilitas, keserbagunaan, dan keamanan konten. Selain itu,</div><div>format dokumen yang disimpan sebagai PDF tetap sama terlepas dari perangkat</div><div>yang Anda gunakan untuk membukanya. Formatnya akan sesuai dengan layar</div><div>smartphone, tab, laptop, dan layar terbesar. Hal hebat tentang PDF adalah Anda</div><div>dapat membukanya menggunakan browser dan beberapa alat lainnya.</div><div>Meskipun ada berbagai keuntungan menyimpan dan mengirim dokumen dalam PDF</div><div>(Portable Document Format), ada juga beberapa kerugiannya. Salah satunya adalah</div><div>ukuran PDF yang besar dibandingkan dengan format teks lain seperti Word dan</div><div>TXT.</div><div><br /></div><div>Terkadang menjadi sulit bagi pengguna untuk menyimpan terlalu banyak PDF di</div><div>perangkat mereka atau mengirim file besar melalui email. Mungkin sulit bagi</div><div>pengguna untuk menghadapi situasi seperti itu. Satu-satunya solusi untuk masalah</div><div>ini adalah perkecil ukuran PDF secara signifikan.</div><div>Namun, masalah utamanya adalah banyak pengguna tidak mengetahui praktik</div><div>terbaik untuk mengurangi ukuran file PDF.</div><div>Caranya adalah memperkecil ukuran PDF tanpa mempengaruhi kualitasnya; tidak</div><div>mungkin tanpa menggunakan praktik terbaik untuk tujuan ini.</div><div>Kami telah mengumpulkan beberapa detail berharga tentang praktik ini untuk</div><div>membantu Anda dalam hal ini. Baca terus untuk mempelajari lebih lanjut.</div><div><br /></div><div><b><span style="font-size: large;">Kompres Gambar</span></b></div><div>PDF lebih disukai daripada file yang disandikan dalam format lain karena</div><div>kemampuannya menampilkan berbagai jenis media, termasuk gambar. Namun,</div><div>menambahkan banyak gambar dapat meningkatkan ukuran gambar secara</div><div>signifikan. Apalagi jika manual pengguna dengan banyak diagram dikodekan dalam</div><div>PDF, akan sulit bagi pengguna untuk mengirimkannya melalui email.</div><div>Selain itu, ukuran file maksimal yang diperbolehkan melalui email adalah 25 MB.</div><div>Oleh karena itu, menjaga ukuran file jauh di bawah MB yang diizinkan diperlukan.</div><div><br /></div><div>Anda tidak dapat berpikir untuk menghapus gambar yang diperlukan dari manual</div><div>pengguna. Namun, Anda tetap dapat perkecil ukuran PDF dengan mengompresi</div><div>gambar yang ditampilkan dalam PDF tertentu.</div><div>Setelah Anda mengompres gambar dan menambahkannya ke PDF, Anda akan</div><div>menyaksikan pengurangan ukuran file yang signifikan. Ukuran file PDF yang</div><div>diperkecil akan memungkinkan Anda menyimpan beberapa PDF berukuran besar di</div><div>perangkat Anda. Selain itu, Anda dapat mengirim PDF berukuran besar melalui</div><div>email dengan mudah tanpa membaginya menjadi beberapa bagian.</div><div><br /></div><div><b><span style="font-size: large;">Hapus Elemen yang Tidak Perlu</span></b></div><div>Seperti disebutkan sebelumnya, PDF mampu menampilkan berbagai jenis media.</div><div>Anda juga dapat menyertakan elemen seperti lembar Excel dan PPT dalam PDF.</div><div>Namun, elemen ini tidak selalu diperlukan, terutama jika diberi tanggal dan tidak lagi</div><div>diperlukan dalam file. Elemen seperti itu akan memperbesar ukuran file PDF,</div><div>sehingga menyulitkan Anda untuk mengirim dan menyimpannya dengan mudah.</div><div>Solusi terbaik untuk memperkecil ukuran PDF adalah menghapusnya dari file.</div><div>Selain lembar Excel dan file PPT yang tidak relevan dalam file PDF, ada</div><div>kemungkinan elemen seperti gambar yang tidak diinginkan dan font tambahan.</div><div>Umumnya, 3 hingga 4 font cukup untuk memformat file teks. Menggunakan lebih</div><div>dari empat font akan memperbesar ukuran file.</div><div>Selain itu, gambar yang tidak perlu juga akan memperbesar ukuran file PDF. Oleh</div><div>karena itu, penghapusan elemen tersebut dapat banyak membantu Anda dalam</div><div>mengurangi ukuran file PDF.</div><div><br /></div><div><span style="font-size: large;"><b>Gunakan Kompresor PDF</b></span></div><div>Metode lain yang efektif dan cepat untuk perkecil ukuran PDF dengan mudah adalah</div><div>menggunakan kompresor PDF yang andal. Anda akan menemukan alat seperti itu</div><div>secara online. Ini akan meminta Anda untuk memberikan file yang Anda inginkan</div><div><a href="https://www.duplichecker.com/id/compress-pdf.php">kompres ukuran PDF</a>. Anda dapat mengunggahnya langsung dari perangkat Anda,</div><div>mengimpornya dari platform penyimpanan cloud yang didukung, atau memasukkan</div><div>URL ke file PDF. Setelah Anda melakukannya, itu akan mengimpor file PDF untuk</div><div>kompresi. Itu dapat kompres file PDF hingga 500 KB.</div><div>Alat ini akan membantu Anda memperkecil ukuran PDF secara signifikan dengan</div><div>melakukan modifikasi file yang diperlukan tanpa usaha. Ini akan kompres ukuran</div><div>PDF dalam hitungan detik dan memungkinkan Anda mengunduh file dengan ukuran</div><div>yang diperkecil dan menggunakannya sesuai dengan kebutuhan Anda.</div><div><br /></div><div>Setelah proses tersebut di atas, menyimpan dan mengirim PDF ke mana pun Anda</div><div>mau menjadi lebih mudah tanpa menemui kendala.</div><div><br /></div><div><b><span style="font-size: large;">Hapus Ruang yang Tidak Diinginkan</span></b></div><div>Kebanyakan orang berpikir bahwa ruang tidak memengaruhi ukuran dokumen teks,</div><div>apa pun format yang digunakan untuk menyandikannya. Namun, ruang dianggap</div><div>sebagai karakter dalam sistem seperti Unicode dan ASCII, dan penggunaan ruang</div><div>yang sering dalam file PDF dapat meningkatkan ukurannya secara eksponensial.</div><div>Kami tahu ruang adalah elemen penting yang digunakan dalam pemformatan</div><div>dokumen. Namun, itu tidak boleh sering digunakan. Misalnya, mengosongkan</div><div>setengah atau lebih dari setengah halaman akan memperbesar ukuran PDF.</div><div>Cara terbaik untuk menghindari PDF berukuran besar karena sering menggunakan</div><div>ruang dalam dokumen adalah dengan menghapus ruang yang tidak perlu dari file.</div><div>Anda dapat melakukannya dengan meninjau file dan mencari ruang yang tidak</div><div>diperlukan dalam dokumen.</div><div>Kemudian, saat Anda mengetahui contoh di mana ruang digunakan secara tidak</div><div>perlu, hapus dan kurangi ukuran file secara signifikan.</div>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-20737728370235104412022-09-27T11:34:00.005+07:002022-09-27T11:34:40.931+07:00Bagaimana Web Socket Bekerja? Apa Bedanya Dengan Koneksi HTTP?<p><b>cara kerja web socket dan bedanya dengan http</b> - Dalam sebuah website, ada kalanya sebuah fitur memerlukan kinerja real-time untuk menerima request dan respon. Oleh karena itu, digunakanlah sebuah teknologi bernama web socket.</p><p><b><span style="font-size: large;">Apa itu web socket?</span></b></p><p><a href="https://teziger.blogspot.com/2022/09/cara-kerja-web-socket.html">Web socket</a> adalah sebuah koneksi di aplikasi web (ws://) yang berjalan secara paralel dengan koneksi http (http://).</p><p>Jika http memutuskan koneksi ketika request sudah menerima response, koneksi web socket tetap stand by (on) untuk menerima segala request dan dapat mengirim response (hand shake) secara langsung (emit request/response).</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDrSEHmw4D40kMJHubcdjQaRTducBe78loWib5gg42mG6RJxmcywYXvE3L1BxBmHOczWQT_Vqmw9FHWwH2yvoyD3lfHD_NTZvmWK4SjkR8mBQou6TImMUVrj04TKQNOgWU6hvqZZah7mIWAXMtH1h1RqR_loD5QUXvl0ADEbpITku6T_55S6fP3w/s800/617a90ab08641e631353de50_Websocket%20vs%20HTTP.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="800" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDrSEHmw4D40kMJHubcdjQaRTducBe78loWib5gg42mG6RJxmcywYXvE3L1BxBmHOczWQT_Vqmw9FHWwH2yvoyD3lfHD_NTZvmWK4SjkR8mBQou6TImMUVrj04TKQNOgWU6hvqZZah7mIWAXMtH1h1RqR_loD5QUXvl0ADEbpITku6T_55S6fP3w/w640-h384/617a90ab08641e631353de50_Websocket%20vs%20HTTP.png" width="640" /></a></div><p>Jadi kesimpulannya, web socket sangat cocok untuk pembuatan fitur aplikasi realtime.</p><p><b><span style="font-size: large;">Contoh penerapan web socket</span></b></p><p><span>Berikut ini adalah contoh penerapan websocket yang saya tulis dalam bahasa Javascript.</span></p><p><b><span><i>Server</i></span></b></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-keyword" style="color: #a71d5d;">const</span> express = <span class="hljs-keyword" style="color: #a71d5d;">require</span>(<span class="hljs-string" style="color: #df5000;">'express'</span>)
<span class="hljs-keyword" style="color: #a71d5d;">const</span> app = express()
<span class="hljs-keyword" style="color: #a71d5d;">const</span> http = <span class="hljs-keyword" style="color: #a71d5d;">require</span>(<span class="hljs-string" style="color: #df5000;">'http'</span>).Server(app)
<span class="hljs-keyword" style="color: #a71d5d;">const</span> io = <span class="hljs-keyword" style="color: #a71d5d;">require</span>(<span class="hljs-string" style="color: #df5000;">'socket.io'</span>)(http)
http.listen(<span class="hljs-number">3000</span>, ()=>{ <span class="hljs-comment" style="color: #969896;">/* menjalankan koneksi http:// */</span>
console.log(<span class="hljs-string" style="color: #df5000;">'listened on port 3000'</span>)
})
app.<span class="hljs-keyword" style="color: #a71d5d;">use</span>(<span class="hljs-string" style="color: #df5000;">'/'</span>, (req,res)=>{
res.sendFile(__dirname+<span class="hljs-string" style="color: #df5000;">'/index.html'</span>)
})
io.on(<span class="hljs-string" style="color: #df5000;">'connect'</span>, (socket)=>{ <span class="hljs-comment" style="color: #969896;">/* menjalankan koneksi ws:// */</span>
console.log(<span class="hljs-string" style="color: #df5000;">'user conected'</span>)
socket.on(<span class="hljs-string" style="color: #df5000;">'chat'</span>,(data)=>{
io.sockets.emit(<span class="hljs-string" style="color: #df5000;">'chat'</span>,data)
})
})</pre><p><b><i>Client</i></b></p><pre class="hljs" style="display: block; background: rgb(255, 255, 255); padding: 0.5em; color: rgb(51, 51, 51); overflow-x: auto;"><span class="xml"><span class="hljs-tag" style="color: rgb(51, 51, 51);"><<span class="hljs-name" style="color: rgb(99, 163, 92);">script</span> <span class="hljs-attr" style="color: rgb(121, 93, 163);">src</span>=<span class="hljs-string" style="color: rgb(223, 80, 0);">"/socket.io/socket.io.js"</span> <span class="hljs-attr" style="color: rgb(121, 93, 163);">charset</span>=<span class="hljs-string" style="color: rgb(223, 80, 0);">"utf-8"</span>></span><span class="undefined"></span><span class="hljs-tag" style="color: rgb(51, 51, 51);"></<span class="hljs-name" style="color: rgb(99, 163, 92);">script</span>></span>
<span class="hljs-tag" style="color: rgb(51, 51, 51);"><<span class="hljs-name" style="color: rgb(99, 163, 92);">script</span> <span class="hljs-attr" style="color: rgb(121, 93, 163);">type</span>=<span class="hljs-string" style="color: rgb(223, 80, 0);">"text/javascript"</span>></span><span class="javascript">
<span class="hljs-keyword" style="color: rgb(167, 29, 93);">var</span> io = io()
$(<span class="hljs-string" style="color: rgb(223, 80, 0);">"#submit"</span>).click(<span class="hljs-function"><span class="hljs-keyword" style="color: rgb(167, 29, 93);">function</span>(<span class="hljs-params"></span>) </span>{
io.emit(<span class="hljs-string" style="color: rgb(223, 80, 0);">'chat'</span>, {
message: $(<span class="hljs-string" style="color: rgb(223, 80, 0);">"#message"</span>).val()
})
})
</span><span class="hljs-tag" style="color: rgb(51, 51, 51);"></<span class="hljs-name" style="color: rgb(99, 163, 92);">script</span>></span></span></pre><p>Full repository belajar websocket: <a href="https://github.com/mtegarsantosa/learnsocket">https://github.com/mtegarsantosa/learnsocket</a></p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-12059450093100438252022-08-28T04:03:00.002+07:002022-08-28T04:03:40.339+07:00Cara Setting Izin Akses Port Lokal/Container Di VPS<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK_ZKT9EdwuKyZ05rPhS-2pCHiLR0nC6eV0uyO-Pl9ZhPStC4SjbYLON5vDV5ekm7KrzGOD1htVH_pbvYydfciRBG-WlMhLC79yea2IJGDvK4L6JDai1KrLSP9f6ZqeGWZRAx0Rj4zBTeBnI08ZXqr1RFujCb0rgOFVMK29JVicghCGQWv9tflZw/s824/konfigurasi-firewalled.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="312" data-original-width="824" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK_ZKT9EdwuKyZ05rPhS-2pCHiLR0nC6eV0uyO-Pl9ZhPStC4SjbYLON5vDV5ekm7KrzGOD1htVH_pbvYydfciRBG-WlMhLC79yea2IJGDvK4L6JDai1KrLSP9f6ZqeGWZRAx0Rj4zBTeBnI08ZXqr1RFujCb0rgOFVMK29JVicghCGQWv9tflZw/w640-h242/konfigurasi-firewalled.jpg" width="640" /></a></div><p></p><p><b>cara mengatur firewall port vps di lokal maupun container</b> - Artikel kali ini akan membahas tentang cara setting firewall port di vps linux agar bisa diakses melalui internet. Saya akan membaginya menjadi 2 cara, yaitu membuka atau menutup port lokal, maupun di container menggunakan docker.</p><p>Di tutorial kali ini, saya sangat menyarankan kalian untuk menggunakan package bernama <b>firewalld</b>. Untuk menginstallnya di <a href="https://teziger.blogspot.com/2022/08/cara-setting-izin-akses-port.html">vps</a>, silahkan jalankan command berikut ini.</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">sudo apt install firewalld</pre><p><b><span style="font-size: large;">A. Setting Firewall Port Lokal</span></b></p><p><b>- Memberikan izin akses port</b></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">firewall-cmd --<span class="hljs-keyword" style="color: #a71d5d;">add</span>-port PORT_NUMBER/tcp</pre><p><b>- Memberikan izin akses port secara presisten (perlu reboot server)</b></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">firewall-cmd --permanent --<span class="hljs-keyword" style="color: #a71d5d;">add</span>-port PORT_NUMBER/tcp</pre><p><b>- Memberikan izin akses port dengan range</b></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">firewall-cmd --permanent --<span class="hljs-keyword" style="color: #a71d5d;">add</span>-port PORT_NUMBER_1-PORT_NUMBER_2/tcp</pre><p><span style="font-size: large;"><b>B. Setting Firewall Port Container (Docker)</b></span></p><p><b>- Mengubah interface dari public ke docker</b></p><pre class="hljs" style="background: rgb(255, 255, 255); overflow-x: auto; padding: 0.5em;"><span style="color: #333333;">firewall-cmd --permanent --zone=trusted --change-interface=docker0<br /></span></pre><p><b>- Memberikan izin akses port di container</b></p><pre class="hljs" style="background: rgb(255, 255, 255); overflow-x: auto; padding: 0.5em;"><span style="color: #333333;">firewall-cmd --permanent --zone=trusted --add-port=PORT_NUMBER/tcp</span></pre><p><b>- Reload firewald (diperlukan jika baru mengubah interface dari public ke docker)</b></p><pre class="hljs" style="background: rgb(255, 255, 255); overflow-x: auto; padding: 0.5em;"><pre style="background-color: var(--highlight-bg); border-radius: var(--br-md); border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: var(--ff-mono); font-size: var(--fs-body1); font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: var(--lh-md); margin-bottom: 0px; margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: var(--su12); vertical-align: baseline; width: auto;"><code style="background-color: transparent; border-radius: 0px; border: 0px; box-sizing: inherit; color: var(--black-800); font-family: var(--ff-mono); font-size: var(--fs-body1); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;">firewall-cmd --reload</code></pre></pre><p><b><span style="font-size: large;">C. Command Lanjutan</span></b></p><p><b>- List izin akses port</b></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">firewall-cmd --<span class="hljs-keyword" style="color: #a71d5d;">list</span>-ports</pre><p><b>- List firewall zone</b></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">firewall-cmd --<span class="hljs-keyword" style="color: #a71d5d;">get</span>-zones</pre><p><b>- Memberhentikan proses service system</b></p><pre class="hljs" style="background: rgb(255, 255, 255); overflow-x: auto; padding: 0.5em;"><span style="color: #333333;">systemctl stop firewalld</span></pre><p><b>- Memulai proses service system</b></p><pre class="hljs" style="background: rgb(255, 255, 255); overflow-x: auto; padding: 0.5em;"><span style="color: #333333;">systemctl start firewalld</span></pre><p>Oke, itulah beberapa cheatseet command dari firewald yang bisa kalian gunakan untuk <a href="https://teziger.blogspot.com/2022/08/cara-setting-izin-akses-port.html">setting izin akses port atau firewall di vps kalian secara lokal maupun di dalam container</a>. Semoga bermanfaat! Terima kasih!</p><p>--</p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-66784340041578200572022-05-19T13:01:00.002+07:002022-05-19T13:01:43.267+07:00Menghapus Semua Evicted Pod di Kubernetes<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKXr2a4l8tVRmkFCovE3a48BYDKB18B4Kz_lzSb478b-fqYMsbcJX9qEL8R3LfKm687h2zdHWGccG433j7ar5YymI0aA1vDj-igI0easkN_bC8mrNJyjsKao810DEWRniOmj1j93l1ikZeQ__ttsDbnc3Gg3iIswdayZrYSVe9tv4CrExMiLcRIg/s800/kubernetes-pod.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="626" data-original-width="800" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKXr2a4l8tVRmkFCovE3a48BYDKB18B4Kz_lzSb478b-fqYMsbcJX9qEL8R3LfKm687h2zdHWGccG433j7ar5YymI0aA1vDj-igI0easkN_bC8mrNJyjsKao810DEWRniOmj1j93l1ikZeQ__ttsDbnc3Gg3iIswdayZrYSVe9tv4CrExMiLcRIg/s320/kubernetes-pod.png" width="320" /></a></div><b>membersihkan pod evicted di kubernetes</b> - Di dalam kubernetes, terkadang kita akan menemukan pod dengan status <b>Evicted</b>. Hal ini sering terjadi ketika node kehabisan memory atau beberapa aplikasi terjadi error. Pod yang gagal ini tidak akan dihapus secara otomatis. Jika dibiarkan, ini akan menyebabkan network load per dalam setiap pod karena walaupun podnya Evicted, namun sebenarnya mereka tetap terkoneksi dengan jaringan Kubernetes cluster.<p></p><p>Maka dari itu, sebaiknya dihapus secara manual. Menghapusnya satu-satu terkadang akan melelahkan dan membuang-buang waktu. Oleh karena itu, berikut ini adalah perintah untuk menghapusnya sekaligus berdasarkan namespaces nya.</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl <span class="hljs-built_in" style="color: #0086b3;">get</span> pod -n <span class="hljs-symbol" style="color: #990073;"><nama-namespacenya></span> | <span class="hljs-keyword" style="color: #333333; font-weight: 700;">grep</span> Evicted | awk <span class="hljs-string" style="color: #dd1144;">'{print $1}'</span> | xargs kubectl <span class="hljs-keyword" style="color: #333333; font-weight: 700;">delete</span> pod -n <span class="hljs-symbol" style="color: #990073;"><nama-namespacenya></span></pre><p>Perintah ini bisa disimpan sebagai cheatsheets jika Evicted pod terjadi di Kubernetes project kalian!</p><p>Semoga artikel tentang <a href="https://teziger.blogspot.com/2022/05/menghapus-evicted-pod-kubernetes.html">cara menghapus evicted pod di kubernetes</a> ini bermanfaat! Terima kasih!</p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-5644638516403600882022-03-23T10:46:00.004+07:002022-03-23T10:46:43.079+07:00Cara Copy Image GCR Dari Project Lain<p><b>menyalin image dari container registry ke project lain</b> - Artikel kali ini akan membahas tentang cara termudah untuk meng-copy image di google cloud platform dari project satu ke project lain. Untuk melakukan tindakan ini, ada satu hal yang harus diperhatikan, yaitu <b>kita harus memiliki akses ke kedua project tersebut dan bisa mengakses <a href="https://teziger.blogspot.com/2022/03/cara-copy-image-gcr-dari-project-lain.html">GCR</a></b>.</p><p>Berikut perintah yang digunakan.</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">gcloud container images<span class="hljs-built_in"> add-tag </span>\
gcr.io/PROJECT-NAME-SOURCE/IMAGE-NAME-SOURCE:TAG-SOURCE \
gcr.io/PROJECT-NAME-DESTINATION/IMAGE-NAME-DESTINATION:TAG-DESTINATION</pre><p>Sebagai use case dari tutorial yang akan saya jelaskan, saya disini memiliki 2 project bernama <b><span style="color: #3d85c6;">chefchain-staging</span></b> dan <b><span style="color: #6aa84f;">juicychain-staging</span></b>. Saya ingin mengcopy image bernama <b>komodod</b> dari <b><span style="color: #6aa84f;">juicychain-staging</span></b> ke <b><span style="color: #3d85c6;">chefchain-staging</span></b>.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwAE98s1Sl61Ce0b8-FlInY4xa8nJxW6kDkB9CRdxUV_r7HLXXGXDbpmwRuodEKRxIE3rKAHSW9_N8fE972vPbBQbB6gDMG9QrgWw_NjMFZrvFrMuN48Bf4VDbxS5-z3tapSfeBxImUOZBmyKEcMgoUnqxgN2ZE9WHhOZsF7-tVxBPw4eFwyFfzA/s743/Screenshot%20from%202022-03-17%2011-23-21.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="154" data-original-width="743" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwAE98s1Sl61Ce0b8-FlInY4xa8nJxW6kDkB9CRdxUV_r7HLXXGXDbpmwRuodEKRxIE3rKAHSW9_N8fE972vPbBQbB6gDMG9QrgWw_NjMFZrvFrMuN48Bf4VDbxS5-z3tapSfeBxImUOZBmyKEcMgoUnqxgN2ZE9WHhOZsF7-tVxBPw4eFwyFfzA/w640-h132/Screenshot%20from%202022-03-17%2011-23-21.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Hasil:</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVcAiUp_hdzErBZTWDiGB62ck1JMbb1I9s7G9qV1Ct5PqnhZRUY8n39iDZlMKTGa_-hoqPdaMkTxIpIS3sNXhjhChkcN-IL2SMu2y-qSibRtYI-WhnKIs8ewvlcdx8qf69l49BQPuu9Ls0_yrxvxnpQYcqsi1ZhA4euohR5y-AqvsOmd2CrLNI_w/s1920/Screenshot%20from%202022-03-17%2011-25-59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="904" data-original-width="1920" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVcAiUp_hdzErBZTWDiGB62ck1JMbb1I9s7G9qV1Ct5PqnhZRUY8n39iDZlMKTGa_-hoqPdaMkTxIpIS3sNXhjhChkcN-IL2SMu2y-qSibRtYI-WhnKIs8ewvlcdx8qf69l49BQPuu9Ls0_yrxvxnpQYcqsi1ZhA4euohR5y-AqvsOmd2CrLNI_w/w640-h302/Screenshot%20from%202022-03-17%2011-25-59.png" width="640" /></a></div><br /><p><br /></p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com2tag:blogger.com,1999:blog-185798562776123304.post-69858328260601708522022-02-27T14:48:00.005+07:002022-02-27T15:16:20.643+07:00Belajar Kubernetes 7: Replication Controller<p><b>mengenal replication controller</b> - <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-7-replication-controller.html">Replication Controller</a> adalah sebuah fitur yang memastikan pod agar selalu berjalan. Ketika salah satu node mati karena hal tertentu, Replication Controller akan secara otomatis membuat ulang pod yang berada di node mati tersebut kedalam node lain.</p><p>Apapun kesalahannya, fitur ini akan secara pintar me-manage segala kekurangan dari pod tersebut dan memastikan bahwa jumlah dan fungsinya sudah sesuai.</p><p><b><span style="font-size: large;">Membuat Replication Controller</span></b></p><p><span>Template:</span></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> ReplicationController
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nama-replication-controller
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> replicas:</span> jumlah-replica
<span class="hljs-attr" style="color: #795da3;"> selector:</span>
<span class="hljs-attr" style="color: #795da3;"> label-key1:</span> label-value1
<span class="hljs-attr" style="color: #795da3;"> template:</span>
<span class="hljs-attr" style="color: #795da3;"> metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nama-pod
<span class="hljs-attr" style="color: #795da3;"> labels:</span>
<span class="hljs-attr" style="color: #795da3;"> label-key1:</span> label-value1
<span class="hljs-attr" style="color: #795da3;"> spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> container-name
<span class="hljs-attr" style="color: #795da3;"> image:</span> image-name
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> <span class="hljs-number">80</span></pre><p>Contoh:</p><p><i><b>nginx-rc.yaml</b></i></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> ReplicationController
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nginx-rc
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> replicas:</span> <span class="hljs-number">3</span>
<span class="hljs-attr" style="color: #795da3;"> selector:</span>
<span class="hljs-attr" style="color: #795da3;"> app:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> template:</span>
<span class="hljs-attr" style="color: #795da3;"> metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> labels:</span>
<span class="hljs-attr" style="color: #795da3;"> app:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> image:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> <span class="hljs-number">80</span></pre><p>Pada spec.replicas, saya masukan value 3. Yang artinya saya akan menjaga agar nginx selalu berjalan di 3 pod. Meskipun pod dihapus, replication controller akan secara otomatis generate pod baru.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjqZnyE5rdpuFzhAi4c9hv0gR-Dd0Q0IcAJIAhLV826xsyduCrBJIX1HqSHnNVrF6W0Wh9cP88Lnsfs6TgugiW2t8721aQrkpMy9KKKcSLaUiVxaR_SV7tUR6WgdBIObkBDhze4VpNtrs-pkSqPNq60BkoGxJvgdhHtsqGt1JFwffJX73-KobvLjg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="78" data-original-width="762" height="66" src="https://blogger.googleusercontent.com/img/a/AVvXsEjqZnyE5rdpuFzhAi4c9hv0gR-Dd0Q0IcAJIAhLV826xsyduCrBJIX1HqSHnNVrF6W0Wh9cP88Lnsfs6TgugiW2t8721aQrkpMy9KKKcSLaUiVxaR_SV7tUR6WgdBIObkBDhze4VpNtrs-pkSqPNq60BkoGxJvgdhHtsqGt1JFwffJX73-KobvLjg=w640-h66" width="640" /></a></div><br /><b><span style="font-size: large;">Cek Semua Replication dan Pod</span></b><p></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl <span class="hljs-keyword" style="color: #333333; font-weight: 700;">get</span> replicationcontroller
$ kubectl <span class="hljs-keyword" style="color: #333333; font-weight: 700;">get</span> pod</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj32Evsz5gmU9n_pZEXKky7WHNRONS6ghVDrjmYAt3xQrbQnSGIt9F2Zq_gXcgXRIc19iaedMMVZinhqyH4z_weZlkDyr12FeMWpv2aagCyNMITX73RyiCRybiWRoW9ewmVQxZKEKFCuvcQuY7Xs5OlHqI-Q5X8sO7aw64favqo7y66vzUqZ5fj6A" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="174" data-original-width="768" height="146" src="https://blogger.googleusercontent.com/img/a/AVvXsEj32Evsz5gmU9n_pZEXKky7WHNRONS6ghVDrjmYAt3xQrbQnSGIt9F2Zq_gXcgXRIc19iaedMMVZinhqyH4z_weZlkDyr12FeMWpv2aagCyNMITX73RyiCRybiWRoW9ewmVQxZKEKFCuvcQuY7Xs5OlHqI-Q5X8sO7aw64favqo7y66vzUqZ5fj6A=w640-h146" width="640" /></a></div><br /><b><span style="font-size: large;">Menghapus Replication Controller</span></b><p></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl <span class="hljs-keyword" style="color: #333333; font-weight: 700;">delete</span> replicationcontroller nginx-rc<br /></pre><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjNFMuk-z5IVyI7wm_bA2GqiljBIOI0KqDzVltCfCDDee2RXO4RYdSCnHuSWf3QiIGySCfD72JskqfhYTN2c3Ll_0ZzxVlZh575JEUIszYb6GZQIwtulQGnFg7lVw7jP3jT9X4BHhYP6MwgEpyTZCk07pMOp6tfkwSBDEcY_bg2KqRFT8w6PNXyVA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="94" data-original-width="877" height="68" src="https://blogger.googleusercontent.com/img/a/AVvXsEjNFMuk-z5IVyI7wm_bA2GqiljBIOI0KqDzVltCfCDDee2RXO4RYdSCnHuSWf3QiIGySCfD72JskqfhYTN2c3Ll_0ZzxVlZh575JEUIszYb6GZQIwtulQGnFg7lVw7jP3jT9X4BHhYP6MwgEpyTZCk07pMOp6tfkwSBDEcY_bg2KqRFT8w6PNXyVA=w640-h68" width="640" /></a></div><br /></div><div>Setiap membuat pod, saya menyarankan harus selalu membuatnya melalui replication controller. Karena untuk mengantisipasi dan mengatasi pod yang tidak bekerja.</div><div><br /></div><div>Oke, sekian artikel kali ini yang membahas tentang <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-7-replication-controller.html">Replication Controller</a>. Selanjutnya, kita akan belajar tentang <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-8-replication-set.html">Replica Set</a>.</div>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-21415644857565342342022-02-23T11:33:00.000+07:002022-02-23T11:33:59.331+07:00Belajar Kubernetes 6: Probe<p><b>memahami probe</b> - Setelah belajar <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-5-namespace.html">Namespace</a>, selanjutnya kita akan belajar Probe. Probe adalah sistem pengecekan pada kubernetes yang berfungsi untuk me-restart pod jika ada kesalahan. <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-6-probe.html">Probe</a> memiliki 2 jenis pengecekan atau fitur utama yaitu Liveness, Readiness, dan Startup Probe.</p><p></p><ol style="text-align: left;"><li><b>Liveness</b>, yaitu pengecekan ketika ada error di pod, maka pod akan otamatis di-restart.</li><li><b>Readiness</b>, yaitu pengecekan ketika ada error di pod, maka semua traffic akan di-blok.</li><li><b>Startup</b>, yaitu pengecekan yang terjadi hanya di awal up pod. Tujuannya adalah memastikan pod berjalan dengan baik dan siap menerima traffic.</li></ol><p></p><p><b><span style="font-size: large;">Mekanisme Pengecekan Probe</span></b></p><p>Ada 3 cara melakukan pengecekan probe berdasarkan jenis aplikasi dalam pod yang digunakan, yaitu:</p><p></p><ol style="text-align: left;"><li><b>HTTP get, </b>untuk aplikasi web</li><li><b>TCP socket, </b>untuk aplikasi socket server/web</li><li><b>Command Exec, </b>untuk aplikasi general</li></ol><p></p><p><b><span style="font-size: large;">Konfigurasi Pengecekan</span></b></p><p></p><ol style="text-align: left;"><li><b>initialDelaySeconds</b>, yaitu delay di awal ketika pod baru dijalankan.</li><li><b>periodSeconds</b>, seberapa sering pengecekan dilakukan (setiap berapa detik).</li><li><b>timeoutSeconds</b>, seberapa lama respon yang diterima. Jika lebih, maka dianggap error.</li><li><b>successThreshold</b>, seberapa banyak pengecekan agar pod bisa dianggap sehat. </li><li><b>failureThreshold</b>, seberapa banyak pengecekan agar pod dianggap error.</li></ol><p></p><p><span style="font-size: large;"><b>Membuat Pod Dengan Probe Di Dalamnya</b></span></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Pod
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> pod-name
<span class="hljs-attr" style="color: #795da3;"> labels:</span>
<span class="hljs-attr" style="color: #795da3;"> label-key1:</span> label-value1
<span class="hljs-attr" style="color: #795da3;"> annotations:</span>
<span class="hljs-attr" style="color: #795da3;"> annotation-key1:</span> annotation-value
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> container-name
<span class="hljs-attr" style="color: #795da3;"> image:</span> image-name
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> <span class="hljs-number">80</span>
<span class="hljs-attr" style="color: #795da3;"> livenessProbe:</span>
<span class="hljs-attr" style="color: #795da3;"> httpGet:</span>
<span class="hljs-attr" style="color: #795da3;"> path:</span> /health
<span class="hljs-attr" style="color: #795da3;"> port:</span> <span class="hljs-number">80</span>
<span class="hljs-attr" style="color: #795da3;"> initialDelaySeconds:</span> <span class="hljs-number">0</span>
<span class="hljs-attr" style="color: #795da3;"> periodSeconds:</span> <span class="hljs-number">10</span>
<span class="hljs-attr" style="color: #795da3;"> timeoutSeconds:</span> <span class="hljs-number">1</span>
<span class="hljs-attr" style="color: #795da3;"> successThreshold:</span> <span class="hljs-number">1</span>
<span class="hljs-attr" style="color: #795da3;"> failureThreshold:</span> <span class="hljs-number">3</span>
<span class="hljs-attr" style="color: #795da3;"> readinessProbe:</span>
<span class="hljs-attr" style="color: #795da3;"> httpGet:</span>
<span class="hljs-attr" style="color: #795da3;"> path:</span> /
<span class="hljs-attr" style="color: #795da3;"> port:</span> <span class="hljs-number">80</span>
<span class="hljs-attr" style="color: #795da3;"> initialDelaySeconds:</span> <span class="hljs-number">0</span>
<span class="hljs-attr" style="color: #795da3;"> periodSeconds:</span> <span class="hljs-number">10</span>
<span class="hljs-attr" style="color: #795da3;"> timeoutSeconds:</span> <span class="hljs-number">1</span>
<span class="hljs-attr" style="color: #795da3;"> successThreshold:</span> <span class="hljs-number">1</span>
<span class="hljs-attr" style="color: #795da3;"> failureThreshold:</span> <span class="hljs-number">3</span>
<span class="hljs-attr" style="color: #795da3;"> startupProbe:</span>
<span class="hljs-attr" style="color: #795da3;"> httpGet:</span>
<span class="hljs-attr" style="color: #795da3;"> path:</span> /
<span class="hljs-attr" style="color: #795da3;"> port:</span> <span class="hljs-number">80</span>
<span class="hljs-attr" style="color: #795da3;"> initialDelaySeconds:</span> <span class="hljs-number">0</span>
<span class="hljs-attr" style="color: #795da3;"> periodSeconds:</span> <span class="hljs-number">10</span>
<span class="hljs-attr" style="color: #795da3;"> timeoutSeconds:</span> <span class="hljs-number">1</span>
<span class="hljs-attr" style="color: #795da3;"> successThreshold:</span> <span class="hljs-number">1</span>
<span class="hljs-attr" style="color: #795da3;"> failureThreshold:</span> <span class="hljs-number">3</span>
</pre><p>Di dalam konfigurasi probe, kita bisa menambahkan liveness, readiness, dan startup secara bersamaan, atau salah satu sesuai kebutuhan.</p><p>Kita akan membuat pod <b>nginx</b> dengan menerapkan liveness probe. Karena nginx dapat diakses melalui http, kita akan menggunakan metode pengecekan <b>httpGet</b>.</p><p><b><i>pod-nginx.yaml</i></b></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Pod
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> labels:</span>
<span class="hljs-attr" style="color: #795da3;"> label-key1:</span> label-value1
<span class="hljs-attr" style="color: #795da3;"> annotations:</span>
<span class="hljs-attr" style="color: #795da3;"> annotation-key1:</span> annotation-value
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> container-name
<span class="hljs-attr" style="color: #795da3;"> image:</span> image-name
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> <span class="hljs-number">80</span>
<span class="hljs-attr" style="color: #795da3;"> livenessProbe:</span>
<span class="hljs-attr" style="color: #795da3;"> httpGet:</span>
<span class="hljs-attr" style="color: #795da3;"> path:</span> /
<span class="hljs-attr" style="color: #795da3;"> port:</span> <span class="hljs-number">80</span>
<span class="hljs-attr" style="color: #795da3;"> initialDelaySeconds:</span> 5
<span class="hljs-attr" style="color: #795da3;"> periodSeconds:</span> <span class="hljs-number">5</span>
<span class="hljs-attr" style="color: #795da3;"> timeoutSeconds:</span> <span class="hljs-number">1</span>
<span class="hljs-attr" style="color: #795da3;"> successThreshold:</span> <span class="hljs-number">1</span>
<span class="hljs-attr" style="color: #795da3;"> failureThreshold:</span> <span class="hljs-number">3</span></pre><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-string" style="color: #dd1144;">$ </span>kubectl create -f pod-nginx.yaml</pre><p>Selanjutnya, kita akan mencoba mematikan lalu menyalakan kembali minikube agar pod yang kita buat error.</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; overflow-x: auto; padding: 0.5em;"><span class="hljs-string" style="color: #dd1144;">$ </span>minikube stop</pre><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; overflow-x: auto; padding: 0.5em;"><span class="hljs-string" style="color: #dd1144;">$ </span>minikube start</pre><p>Lalu kita cek pod yang kita buat tadi.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEivzVF7krN1ugZvhm4_Y93rTUg5tMHmFv4-t48-nypgyLFbxMuj6vjmEZJqRzDAOwUpNTD2diWd9eYUfGDGTPsOuCfIgT4s0mk1L9fhjjy1hLtcHlaqaj6eJnl6e1AuuhsAmLZB_KambEalDcdDDR0agd-M5_auBkU4D82COFxkoFPtngGyPbiFBQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="88" data-original-width="562" height="100" src="https://blogger.googleusercontent.com/img/a/AVvXsEivzVF7krN1ugZvhm4_Y93rTUg5tMHmFv4-t48-nypgyLFbxMuj6vjmEZJqRzDAOwUpNTD2diWd9eYUfGDGTPsOuCfIgT4s0mk1L9fhjjy1hLtcHlaqaj6eJnl6e1AuuhsAmLZB_KambEalDcdDDR0agd-M5_auBkU4D82COFxkoFPtngGyPbiFBQ=w640-h100" width="640" /></a></div><br />Kolom <b>RESTARTS</b> menunjukan bahwa pod berhasil direstart sebanyak 4 kali (karena saya mencoba berkali-kali). Kita bisa melihat log nya melalui perintah berikut.<p></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; overflow-x: auto; padding: 0.5em;"><span class="hljs-string" style="color: #dd1144;">$ </span>kubectl describe pod nginx</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg3xIAcRGBZxnp2XRpv57wFK3i3c0trlcwDGXcC3UzPjC_5tiptMPjnGlc8TWISgnuWyrYL0mA_uhkG_aKcpTAoAING886lelcnL2Sv3L9xsZdNRyyGVgUC0lf82JRPh9xMbcUiNXTI9MUqcSGV6zkwBYNj3ustAl-mEYUg7_cJnRbFfxH2w5MreQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="131" data-original-width="857" height="98" src="https://blogger.googleusercontent.com/img/a/AVvXsEg3xIAcRGBZxnp2XRpv57wFK3i3c0trlcwDGXcC3UzPjC_5tiptMPjnGlc8TWISgnuWyrYL0mA_uhkG_aKcpTAoAING886lelcnL2Sv3L9xsZdNRyyGVgUC0lf82JRPh9xMbcUiNXTI9MUqcSGV6zkwBYNj3ustAl-mEYUg7_cJnRbFfxH2w5MreQ=w640-h98" width="640" /></a></div><p></p><p>Oke, itulah penjelasan mengenai Prob. Selanjutnya kita akan belajar tentang <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-7-replication-controller.html">Replication Controller</a>.</p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-58413992335873806542022-02-17T19:00:00.006+07:002022-03-16T13:43:51.177+07:00Belajar Kubernetes 5: Namespace<p><b>mengenal namespace di kubernetes</b> - Namespace digunakan untuk mengelompokan seluruh aplikasi dalam kubernetes. Namun namespace berbeda dengan <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-3-label.html">Label</a>. Ketika kita membuat pod dan service lain, sebenarnya kita membuatnya di namespace bernama <b>default</b> yang dibuat otomatis oleh kubernetes. Namun kita bisa membuat namespace baru sesuai keinginan kita. Lalu mengapa kita harus membuat namespace?</p><p><a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-5-namespace.html">Namespace</a> sangat berguna ketika kita memiliki service yang sudah sangat banyak. Biasanya, namespace dinamakan sesuai nama tenant, team, atau environment yang memudahkan kita dalam memisah service. Service dengan nama yang sama boleh berjalan asalkan di namespace yang bereda. Walau begitu, service masih tetap bisa berkomunikasi satu sama lain.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjgvl5TVA_zTKu6xPOIEyXkK5iOh49bJdBQLPoPECZEwWPwxnKZRgXQpcfIbrGAQUog7FywUBNDcm1cO1ivi5K9iC-Ft83F7gPeS60lGS_QZTHTAqc_HLZZABjr5bT-3Ru2ayAUv7neUSF6aGJ2t9x0_yQez_Alqf1q0iRqK6h-8Qfo0pPXcEX59A=s941" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="679" data-original-width="941" height="462" src="https://blogger.googleusercontent.com/img/a/AVvXsEjgvl5TVA_zTKu6xPOIEyXkK5iOh49bJdBQLPoPECZEwWPwxnKZRgXQpcfIbrGAQUog7FywUBNDcm1cO1ivi5K9iC-Ft83F7gPeS60lGS_QZTHTAqc_HLZZABjr5bT-3Ru2ayAUv7neUSF6aGJ2t9x0_yQez_Alqf1q0iRqK6h-8Qfo0pPXcEX59A=w640-h462" width="640" /></a></div><br /><p><b><span style="font-size: large;">Melihat List Namespace</span></b></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl get namespace</pre><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjEs2kNjXQLX4XYpcJPHbeziHkh13YQAmheuj1d-WrVqONWH8UDNuJCbiE80BF6Fri5jFeHfsv-LjW3hTrLZLkY-AcLna0JZDx0L1KaFaIEx2KQjLat9oSLcBMnuv6GdK30LlcRPBEjDRfpjtPHbuKdi6FG2GgyUi8DmJ305dJXcOGFva3PZDCR_A" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="131" data-original-width="350" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjEs2kNjXQLX4XYpcJPHbeziHkh13YQAmheuj1d-WrVqONWH8UDNuJCbiE80BF6Fri5jFeHfsv-LjW3hTrLZLkY-AcLna0JZDx0L1KaFaIEx2KQjLat9oSLcBMnuv6GdK30LlcRPBEjDRfpjtPHbuKdi6FG2GgyUi8DmJ305dJXcOGFva3PZDCR_A=w640-h240" width="640" /></a></div></div><br /><b><span style="font-size: large;">Melihat Semua Pod di Sebuah Namespace</span></b><div><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl get pod -n <nama-namespace></pre><p>Contoh:</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl get pod -n default</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiRBJFYsZdnlQw4dNE8ac3wg0Cv9wLZQq5LfC3sGBibGaJPnn9RA_Z9_DVmkX7_ShdXhjgs-66fwMGabY4SOpiB5vG2GoXk6pcAFCa-Ls6y1lw9s9zEbR8kqVOP4RjeXl8l40HspikpObsRoA1T5rdJpBjAsBlupwgghG1XV7cVbOznbziUox2Ilw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="75" data-original-width="411" height="116" src="https://blogger.googleusercontent.com/img/a/AVvXsEiRBJFYsZdnlQw4dNE8ac3wg0Cv9wLZQq5LfC3sGBibGaJPnn9RA_Z9_DVmkX7_ShdXhjgs-66fwMGabY4SOpiB5vG2GoXk6pcAFCa-Ls6y1lw9s9zEbR8kqVOP4RjeXl8l40HspikpObsRoA1T5rdJpBjAsBlupwgghG1XV7cVbOznbziUox2Ilw=w640-h116" width="640" /></a></div><br /><b><span style="font-size: large;">Membuat Namespace</span></b></div><div><br /></div><div><i>team1-namespace.yaml</i><br /><p></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Namespace
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nama-namespace</pre><p>Selanjutnya, jalankan command ini:</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl create -f team1-namespace.yaml</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjBaUekqCpzfIxjxGQA6ucAkvCsMgzP_3x7B6MIGHGpediHIlRWVye7rDxK6OXCD3hYESc0LvGMCj82KM7X8gWlwGmXncz4mZlB2e-ClOQNfzjsvqJ-iBfnJPetZIQYNMLnQQ6E9muGCfmmedbIXgiXM6twArgHWNS9yw8sJJRTpO01DKSJmE-hmA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="84" data-original-width="810" height="66" src="https://blogger.googleusercontent.com/img/a/AVvXsEjBaUekqCpzfIxjxGQA6ucAkvCsMgzP_3x7B6MIGHGpediHIlRWVye7rDxK6OXCD3hYESc0LvGMCj82KM7X8gWlwGmXncz4mZlB2e-ClOQNfzjsvqJ-iBfnJPetZIQYNMLnQQ6E9muGCfmmedbIXgiXM6twArgHWNS9yw8sJJRTpO01DKSJmE-hmA=w640-h66" width="640" /></a></div><br /><b><span style="font-size: large;">Membuat Pod di Dalam Namespace</span></b><p></p><div style="text-align: left;"><i>pod-nginx.yaml</i></div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Pod
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> annotations:</span>
<span class="hljs-attr" style="color: #795da3;"> foo:</span> bar
<span class="hljs-attr" style="color: #795da3;"> test:</span> bla bla bla
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> image:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> <span class="hljs-number">80</span></pre><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl create -f pod-nginx.yaml --namespace team1</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgo96_HFxpBYmZE99Z2L6ZIcCvdNzOoPrtX4asN01wwMhxO6qXBIEyuBiTDrG0Pjb5aswB73bPTYW9dUkXMB1hLm_DxCykpHfUXl2RJAf2CcwFfrKvtACHzv-qlw5DCAxPWbdL9XyWKMTbZLJhKj6u0SQr029KFIqzxM4TF2ANNT0cY2mer0X2jwg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="126" data-original-width="934" height="86" src="https://blogger.googleusercontent.com/img/a/AVvXsEgo96_HFxpBYmZE99Z2L6ZIcCvdNzOoPrtX4asN01wwMhxO6qXBIEyuBiTDrG0Pjb5aswB73bPTYW9dUkXMB1hLm_DxCykpHfUXl2RJAf2CcwFfrKvtACHzv-qlw5DCAxPWbdL9XyWKMTbZLJhKj6u0SQr029KFIqzxM4TF2ANNT0cY2mer0X2jwg=w640-h86" width="640" /></a></div><br /><p></p><p><b><span style="font-size: large;">Menghapus Namespace dan Seluruh Pod Di Dalamnya</span></b></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl delete namespace team1</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjOjREsvhx7E1LB_wFMx7gR7cfb5L2GcP6o2MrIw6KC-sGB146aDMNJs3Ef0S0GCNfgNVsY3tPE2A2FZv2VorIhneOiV0g_WBytWQV329voR1I6KM2egSdFrlggti_kgNeDz8ukS6vIXd-LBKVYCy0-WFTWGFf5Y8yNjBd7tV-7dYlNteo0RH9JXA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="58" data-original-width="438" height="84" src="https://blogger.googleusercontent.com/img/a/AVvXsEjOjREsvhx7E1LB_wFMx7gR7cfb5L2GcP6o2MrIw6KC-sGB146aDMNJs3Ef0S0GCNfgNVsY3tPE2A2FZv2VorIhneOiV0g_WBytWQV329voR1I6KM2egSdFrlggti_kgNeDz8ukS6vIXd-LBKVYCy0-WFTWGFf5Y8yNjBd7tV-7dYlNteo0RH9JXA=w640-h84" width="640" /></a></div><br />Oke, itulah sedikt pemahaman soal <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-5-namespace.html">Namsepace</a> di kubernetes. Di artikel selanjutnya, kita akan belajar tentang <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-6-probe.html">Probe</a>.<p></p></div>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-26718686165037066202022-02-14T13:56:00.007+07:002022-02-16T11:40:29.479+07:00Belajar Kubernetes 4: Annotation<p><b>memahami annotation di kubernetes</b> - Sebelumnya kit telah belajar tentang, <a href="https://teziger.blogspot.com/2022/01/belajar-kubernetes-3-label.html"><b>Belajar Kubernetes 2: Memahami </b><b>Label</b></a>. Pada dasarnya, annotation sama seperti label. Tetapi, annotation hanya berlaku sebagai informasi tambahan pada sebuah service yang tidak dapat dijadikan filter. Value <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-4-annotation.html">annotation</a> juga deskriptif yang bisa memuat kalimat sampai 256kb.</p><p><b><span style="font-size: large;">Membuat Annotation</span></b></p><p>Kita bisa menyisipkan annotation pada file yaml konfigurasi pod dibawah ini:</p><p><i>pod.yaml</i></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Pod
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nama-pod
<span class="hljs-attr" style="color: #795da3;"> annotations:</span>
....
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-bullet" style="color: #0086b3;"> -</span> .... </pre><p>Contoh:</p><p><i>pod-nginx-.yaml</i></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Pod
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nginx-annotation
<span class="hljs-attr" style="color: #795da3;"> annotations:</span>
<span class="hljs-attr" style="color: #795da3;"> <span class="hljs-attr" style="color: #795da3;">foo:</span><span style="color: #333333;"> bar
</span><span class="hljs-attr" style="color: #795da3;"><span> test</span>:</span><span style="color: #333333;"> bla bla bla</span></span>
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> image:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> <span class="hljs-number">80</span></pre><p>Setelah itu, buat pod nya.</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl create -f pod-nginx.yaml</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiPsSjxs7pkvE5ZIR31WwcyrtglYv7J2ixEh9yLeHJGkI7MbCFa9R9nK81Gf57RpK1q1eemN3BAAeCV3wMmH7E7R7kVMxvUr0Nc7AONC83qP9nDhxRQkNw5GfGMjSdbrfsTkW6fxPxZ4TXw8uPmrwUyt4GC0BSOEdAx-ZLSWpr0bfudQ-MrNmJp5w" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="78" data-original-width="759" height="66" src="https://blogger.googleusercontent.com/img/a/AVvXsEiPsSjxs7pkvE5ZIR31WwcyrtglYv7J2ixEh9yLeHJGkI7MbCFa9R9nK81Gf57RpK1q1eemN3BAAeCV3wMmH7E7R7kVMxvUr0Nc7AONC83qP9nDhxRQkNw5GfGMjSdbrfsTkW6fxPxZ4TXw8uPmrwUyt4GC0BSOEdAx-ZLSWpr0bfudQ-MrNmJp5w=w640-h66" width="640" /></a></div><br /><b><span style="font-size: large;"><br /></span></b><div><b><span style="font-size: large;">Menampilkan Annotation Pod</span></b></div><div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl describe pod nginx</pre></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi6HkbPFppsu081YgsKA19vtG66EL-DrWhFApiJ2rB9PIep554LGUv1M1JDFIr-1pXgay_M2NLGoe2fCLTIAieEzVqoA2bKgFgvHIBFsiXrCWqVFC1vSVaMRfqf19futLZQhTWR5ruX-uMdiHu7j5efkgcxdnUFl6PzR0fLvSqRCx9fUzUHHvJ7sg=s706" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="168" data-original-width="706" height="152" src="https://blogger.googleusercontent.com/img/a/AVvXsEi6HkbPFppsu081YgsKA19vtG66EL-DrWhFApiJ2rB9PIep554LGUv1M1JDFIr-1pXgay_M2NLGoe2fCLTIAieEzVqoA2bKgFgvHIBFsiXrCWqVFC1vSVaMRfqf19futLZQhTWR5ruX-uMdiHu7j5efkgcxdnUFl6PzR0fLvSqRCx9fUzUHHvJ7sg=w640-h152" width="640" /></a></div><div><br /></div><div><div><b><span style="font-size: large;">Menambah Annotation Pada Pod Yang Sedang Berjalan</span></b></div><div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl annotate pod <nama-pod> key=value
$ kubectl annotate pod <nama-pod> key=value --overwrite
</pre></div></div><div>Oke, itulah sedikit penjelasan tentang annotation. Sampai jumpa di pembelajaran selanjutnya, <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-5-namespace.html">Belajar Kubernetes 5: Namespace</a>.</div></div>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-6547574559613332232022-02-14T13:23:00.003+07:002022-02-14T13:23:25.628+07:00Belajar Kubernetes 3: Label<p><b>memahami label di kubernetes</b> - Label adalah kata yang digunakan sebagai tanda tertentu untuk sebuah pod. Label dapat berfungsi untuk memberi informasi tambahan pada pod, atau mengelompokan pod berdasarkan pembagian label nya. Tidak hanya pod, label bisa digunakan untuk seluruh elemen kubernetes seperti Replicaset, Replication Controller, dan lain-lain.</p><p>Pada dasarnya, label mengorganisir setiap service pada kubernetes, yang mana nantinya bisa memudahkan servis lain untuk memilih beberapa servis sesuai label yang telah dibuat.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh0H6_4nQPWQdX5dfmfiukBbKO5wm0d933ynhNo-IQogrt0rqS8zC1Z23Y5batqKIafuSazReBnR5BNGf5xj8UAEMf0G7ZXoTeW-l3yBM4HIpEedaeYO_tU737GXQ2rYBqmFPcRC60R9MsWR1EwkhxvlHc-KfLac9XvlDHAt_UZDr1PqSgMt4cKjw=s1024" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="436" data-original-width="1024" height="272" src="https://blogger.googleusercontent.com/img/a/AVvXsEh0H6_4nQPWQdX5dfmfiukBbKO5wm0d933ynhNo-IQogrt0rqS8zC1Z23Y5batqKIafuSazReBnR5BNGf5xj8UAEMf0G7ZXoTeW-l3yBM4HIpEedaeYO_tU737GXQ2rYBqmFPcRC60R9MsWR1EwkhxvlHc-KfLac9XvlDHAt_UZDr1PqSgMt4cKjw=w640-h272" width="640" /></a></div><p>Kita telah berhasil membuat Pod di artikel sebelumnya, <a href="https://teziger.blogspot.com/2022/01/belajar-kubernetes-2-pod.html"><b>Belajar Kubernetes 2: Memahami Pod</b></a>. Selanjutnya, kita akan coba menambah label pada konfigurasi pod yang sama.</p><p><b><span style="font-size: large;">Membuat Label</span></b></p><p>Kita bisa menyisipkan <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-3-label.html">label</a> pada file yaml konfigurasi pod dibawah ini:</p><p><i>pod.yaml</i></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Pod
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nama-pod
<span class="hljs-attr" style="color: #795da3;"> labels:</span>
....
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-bullet" style="color: #0086b3;"> -</span> .... </pre><p>Contoh:</p><p><i>pod-nginx-.yaml</i></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Pod
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nginx-label
<span class="hljs-attr" style="color: #795da3;"> labels:</span>
<span class="hljs-attr" style="color: #795da3;"> team:</span> developer-one
<span class="hljs-attr" style="color: #795da3;"> version:</span> <span class="hljs-number">0.0</span><span class="hljs-number">.1</span>
<span class="hljs-attr" style="color: #795da3;"> environment:</span> production
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> image:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> <span class="hljs-number">80</span></pre><p>Setelah itu, buat pod nya.</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl create -f pod-nginx.yaml</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiPsSjxs7pkvE5ZIR31WwcyrtglYv7J2ixEh9yLeHJGkI7MbCFa9R9nK81Gf57RpK1q1eemN3BAAeCV3wMmH7E7R7kVMxvUr0Nc7AONC83qP9nDhxRQkNw5GfGMjSdbrfsTkW6fxPxZ4TXw8uPmrwUyt4GC0BSOEdAx-ZLSWpr0bfudQ-MrNmJp5w" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="78" data-original-width="759" height="66" src="https://blogger.googleusercontent.com/img/a/AVvXsEiPsSjxs7pkvE5ZIR31WwcyrtglYv7J2ixEh9yLeHJGkI7MbCFa9R9nK81Gf57RpK1q1eemN3BAAeCV3wMmH7E7R7kVMxvUr0Nc7AONC83qP9nDhxRQkNw5GfGMjSdbrfsTkW6fxPxZ4TXw8uPmrwUyt4GC0BSOEdAx-ZLSWpr0bfudQ-MrNmJp5w=w640-h66" width="640" /></a></div><br /><b><span style="font-size: large;"><br /></span></b><div><b><span style="font-size: large;">Menampilkan Pod Bersama Label</span></b></div><div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl get pods --show-labels</pre><p></p><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjpVqoayxLcj6EkVwuIogwv6MlQlzokQTChAa59SfC0lJ3hcDMx0DRLQIOe5S9UfKnHCypzSOPUXAbzApB5L1_I8pqrIYqemCMUI10BNJ202qkMMyefOigVv9oP4AxCWMUnJnhIufPz8qcChbcJuh8s3m91DZ4pbMnQ-o7tBrsw5jRXCDbhN37JTQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="80" data-original-width="903" height="56" src="https://blogger.googleusercontent.com/img/a/AVvXsEjpVqoayxLcj6EkVwuIogwv6MlQlzokQTChAa59SfC0lJ3hcDMx0DRLQIOe5S9UfKnHCypzSOPUXAbzApB5L1_I8pqrIYqemCMUI10BNJ202qkMMyefOigVv9oP4AxCWMUnJnhIufPz8qcChbcJuh8s3m91DZ4pbMnQ-o7tBrsw5jRXCDbhN37JTQ=w640-h56" width="640" /></a></div><br /><b><span style="font-size: large;"><br /></span></b></div><div><b><span style="font-size: large;">Menampilkan Pod Berdasarkan Label</span></b></div><div><br /></div><div><div>Berdasarkan key label.</div><div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl get pods -l key</pre></div></div><div><div>Berdasarkan key dan value label.</div><div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl get pods -l key=value</pre></div></div><div><div><div><div>Pengecualian key.</div><div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl get pods -l '!key'</pre></div></div><div><div></div></div><div><div>Pengecualian key=value.</div><div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl get pods -l key!=value</pre></div></div><div><div></div></div><div>Kondisioal 'berada di dalam'.</div></div><div><div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl get pods -l 'key in (value1, value2)'</pre></div></div></div><div><div><div>Kondisional 'tidak berada di dalam'.</div><div><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; overflow-x: auto; padding: 0.5em;">$ kubectl get pods -l 'key notin (value1, value2)'</pre></div></div></div><div><br /></div></div><div>Oke, itulah sedikit penjelasan tentang label. Sampai jumpa di pelmbelajaran selanjutnya, <a href="https://teziger.blogspot.com/2022/02/belajar-kubernetes-4-annotation.html">Belajar Kubernetes 4: Annotation</a>.</div>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-50442895296031966402022-01-24T15:32:00.008+07:002022-01-24T15:32:51.831+07:00Menghapus Semua None Image di Docker<p><b>menghapus semua none image di docker</b> - Ketika menjalankan image secara tunggal, sangat memungkinkan image akan terduplikat jika command error. Inilah yang mengakibatkan image bernama <b><none></b> sering muncul. Ini adalah image yang tidak berguna dan harus dihapus karena cukup membuat storage penuh. Berikut ini adalah command untuk menghapus seluruh image <b><none></b> di <a href="https://teziger.blogspot.com/2022/01/menghapus-semua-none-image-di-docker.html">docker</a> image secara otomatis.</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-string" style="color: #df5000;">$ </span>docker rmi <span class="hljs-string" style="color: #df5000;">$(</span>docker images -f <span class="hljs-comment" style="color: #969896;">"dangling=true"</span> -q)</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-EZFEsI4alaM/Ye5j-4dxETI/AAAAAAAAAVk/vtMpAFq6PnIxb9uPZwGg7eUmagDTgbyRQCNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="126" data-original-width="727" height="110" src="https://lh3.googleusercontent.com/-EZFEsI4alaM/Ye5j-4dxETI/AAAAAAAAAVk/vtMpAFq6PnIxb9uPZwGg7eUmagDTgbyRQCNcBGAsYHQ/w640-h110/image.png" width="640" /></a></div><br /><p></p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-37371708621230721702022-01-24T13:25:00.004+07:002022-01-24T13:25:50.475+07:00Push dan Pull Docker Image di Google Container Registry<p><b></b></p><div class="separator" style="clear: both; text-align: center;"><b><a href="https://lh3.googleusercontent.com/-kXAdvZoVw1M/Ye5FuMjjR4I/AAAAAAAAAVc/GdDNXpB9qFsZZwfuDOcw2WdQ0VuSlV2OwCNcBGAsYHQ/docker-ga-gcr.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="738" data-original-width="1470" height="322" src="https://lh3.googleusercontent.com/-kXAdvZoVw1M/Ye5FuMjjR4I/AAAAAAAAAVc/GdDNXpB9qFsZZwfuDOcw2WdQ0VuSlV2OwCNcBGAsYHQ/w640-h322/docker-ga-gcr.png" width="640" /></a></b></div><p></p><p><b>push pull docker image dari google container registry</b> - Artikel ini akan membahas bagaimana cara berinteraksi langsung dengan container registry dari <a href="https://teziger.blogspot.com/2022/01/push-dan-pull-docker-image-di-google.html">google cloud </a>melalui docker.</p><p><span style="font-size: large;"><b><br /></b></span></p><p><span style="font-size: large;"><b>Inisiasi Google Cloud SDK</b></span></p><p>Pertama, pastikan device kalian sudah terinstall google cloud sdk dan ter-init dengan perintah gcloud. Jika belum, jalankan perintah berikut ini.</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ gcloud init</pre><p>Lakukan inisiasi sesuai project yang akan di-manage.</p><p><b><span style="font-size: large;"><br /></span></b></p><p><b><span style="font-size: large;">Autentikasi</span></b></p><p>Selanjutnya, kita akan membuat perintah docker terhubung dengan autentikasi dari gcloud. Jalankan perintah berikut ini.</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ gcloud auth configure-docker</pre><p>Tekan Y jika ada pertanyaan konfirmasi.</p><p>Jika berhasil, akan terbuat secara otomatis file <b>~/.docker/config.json</b> sebagai file konfigurasi docker.</p><p><b><span style="font-size: large;"><br /></span></b></p><p><b><span style="font-size: large;">List Seluruh Container Images di Registry</span></b></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ gcloud container images list</pre><p><b><span style="font-size: large;"><br /></span></b></p><p><b><span style="font-size: large;">Pull Image Dari Container Images di Registry</span></b></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ docker pull HOSTNAME/PROJECT-ID/IMAGE:TAG</pre>
<p><i>Contoh:</i></p>
<pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ docker pull gcr.io/myproject/nginx:latest</pre>
<p><b><span style="font-size: large;"><br /></span></b></p><p><b><span style="font-size: large;">Push Image ke Google Container Registry</span></b></p><p>Untuk push image ke gcr, pastikan kalian telah build image yang ingin kalian push menggunakan <b>docker build </b>seperti biasa.</p><p>Setelah itu, copy image nya dengan perintah berikut.</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ docker image tag myimage:tag HOSTNAME/PROJECT-ID/IMAGE:TAG</pre><p><i>Contoh:</i></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ docker image tag nginxlocal:latest gcr.io/myproject/nginx:latest</pre><p>Setelah itu, jika kita menjalankan <b>docker images</b>, akan ada image baru bernama <span style="background-color: #f8f8f8; color: #333333;"><b>gcr.io/myproject/nginx:latest</b>.</span></p><p><span style="background-color: #f8f8f8; color: #333333;">Selanjutnya, push image tersebut dengan perintah berikut.</span></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ docker image push --all-tags HOSTNAME/PROJECT-ID/IMAGE</pre><p><i>Contoh:</i></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ docker image push --all-tags gcr.io/myproject/nginx</pre><p>Maka seluruh tag dari image <b>gcr.io/myproject/nginx </b>lokal<b> </b>akan ter-push otomatis ke <b>gcr.io/myproject/nginx</b> <a href="https://teziger.blogspot.com/2022/01/push-dan-pull-docker-image-di-google.html">google cloud</a>.</p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-26875741558016044512022-01-19T12:55:00.004+07:002022-01-19T12:57:10.148+07:00Belajar Kubernetes 2: Memahami Pod<p><b>memahami pod dalam kubernetes</b> - Setelah berhasil <a href="https://teziger.blogspot.com/2022/01/belajar-kubernetes-1-minikube.html"><b>menginstall dan menjalankan minikube</b></a>, selanjutnya saya akan membahas tentang Pod. Pod adalah unit terkecil dari kubernetes yang berfungsi sebagai container manager, yaitu ruang penyimpanan untuk mengelompokan satu atau lebih container (misalnya docker container) yang bisa dipakai bersamaan.</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-I4Emk2lOta8/YeeOzgKPg8I/AAAAAAAAAR0/TWD441eUO4Aecc3ogbqhW895suRwGaaSACNcBGAsYHQ/featured-kubernetes.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="324" data-original-width="500" height="414" src="https://lh3.googleusercontent.com/-I4Emk2lOta8/YeeOzgKPg8I/AAAAAAAAAR0/TWD441eUO4Aecc3ogbqhW895suRwGaaSACNcBGAsYHQ/w640-h414/featured-kubernetes.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Ilustrasi Pod dan container di dalamnya</td></tr></tbody></table><p></p><p><br /></p><p>Pod memudahkan kita dalam proses scaling aplikasi. Contohnya adalah ketika kita ingin scale service A yang membutuhkan environment terbaru atau versi scale dari service B. Kita harus scaling kedua service tersebut secara bersamaan, namun hal itu akan membuat aplikasi down. Dengan pod, kita bisa menggabungkan service A dan B kedalam satu Pod, yang kemudian kita bisa dengan mudah scale service B tanpa ada gangguan.</p><p><b><span style="font-size: large;">Membuat Pod</span></b></p><p>Untuk membuat pod, kita harus memiliki file yaml sebagai konfigurasi pod. Berikut ini adalah template nya.</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Pod
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nama-pod
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> nama-container<span class="hljs-bullet" style="color: #0086b3;">-1</span>
<span class="hljs-attr" style="color: #795da3;"> image:</span> image-container<span class="hljs-bullet" style="color: #0086b3;">-1</span>
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> port-container<span class="hljs-bullet" style="color: #0086b3;">-1</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> nama-container<span class="hljs-bullet" style="color: #0086b3;">-2</span>
<span class="hljs-attr" style="color: #795da3;"> image:</span> image-container<span class="hljs-bullet" style="color: #0086b3;">-2</span>
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> port-container<span class="hljs-bullet" style="color: #0086b3;">-2</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> nama-container<span class="hljs-bullet" style="color: #0086b3;">-3</span>
<span class="hljs-attr" style="color: #795da3;"> image:</span> image-container<span class="hljs-bullet" style="color: #0086b3;">-3</span>
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> port-container<span class="hljs-bullet" style="color: #0086b3;">-3</span></pre><p><br /></p><p>Sebagai contoh praktek, kita akan mencoba membuat pod yang berisi 1 container. Kita akan menggunakan nginx sebagai service / image container. Maka, berikut ini adalah file konfigurasinya.</p><p><i><b>pod-nginx.yaml</b></i></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-attr" style="color: #795da3;">apiVersion:</span> v1
<span class="hljs-attr" style="color: #795da3;">kind:</span> Pod
<span class="hljs-attr" style="color: #795da3;">metadata:</span>
<span class="hljs-attr" style="color: #795da3;"> name:</span> nginx
<span class="hljs-attr" style="color: #795da3;">spec:</span>
<span class="hljs-attr" style="color: #795da3;"> containers:</span>
<span class="hljs-attr" style="color: #795da3;"> - name:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> image:</span> nginx
<span class="hljs-attr" style="color: #795da3;"> ports:</span>
<span class="hljs-attr" style="color: #795da3;"> - containerPort:</span> <span class="hljs-number">80</span></pre><p>Untuk menjalankan perintah membuat pod, buka terminal di lokasi file pod-nginx.yaml berada. Kemudian jalankan perintah berikut.</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl create -f pod-nginx.yaml</pre><p><b><span style="font-size: large;"></span></b></p><div class="separator" style="clear: both; text-align: center;"><b><span style="font-size: large;"><a href="https://lh3.googleusercontent.com/-F25CzujwfmE/YeeUyZ9a9cI/AAAAAAAAAR8/CAxu8qtlyDcRjhciE6D-PduIrH2GPdK3QCNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="89" data-original-width="754" height="77" src="https://lh3.googleusercontent.com/-F25CzujwfmE/YeeUyZ9a9cI/AAAAAAAAAR8/CAxu8qtlyDcRjhciE6D-PduIrH2GPdK3QCNcBGAsYHQ/w640-h77/image.png" width="640" /></a></span></b></div><p><b><span style="font-size: large;">Melihat List Pod Yang Sedang Berjalan</span></b></p><p>1. List ringkasan Pod</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl get pod</pre><p>2. List Pod secara lebih detail</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl get pod -o wide</pre><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-MrEURwo8rRQ/YeeWJxmkz5I/AAAAAAAAASM/WwccYP7FEScRkEfFPNlX07wbBXIWKcg8wCNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="146" data-original-width="917" height="102" src="https://lh3.googleusercontent.com/-MrEURwo8rRQ/YeeWJxmkz5I/AAAAAAAAASM/WwccYP7FEScRkEfFPNlX07wbBXIWKcg8wCNcBGAsYHQ/w640-h102/image.png" width="640" /></a></div><br /><b><span style="font-size: large;">Melihat Detail Informasi Pod</span></b><p></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl describe pod <nama-pod></pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-6EzuaG2Afwo/YeeWx3yp69I/AAAAAAAAASU/BmwzVpTUK4sZr62qxLN1xAqQYga54x_bgCNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="921" data-original-width="1094" height="539" src="https://lh3.googleusercontent.com/-6EzuaG2Afwo/YeeWx3yp69I/AAAAAAAAASU/BmwzVpTUK4sZr62qxLN1xAqQYga54x_bgCNcBGAsYHQ/w640-h539/image.png" width="640" /></a></div><br /><b><span style="font-size: large;">Menghapus Pod</span></b><p></p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl delete pod <nama-pod<span class="hljs-string" style="color: #df5000;">></span></pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-pzupSzGmAfs/YeeXRpp5KVI/AAAAAAAAASc/9BZxBVvQGNAycWajGzbMuZ5l5EOykzvngCNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="65" data-original-width="691" height="60" src="https://lh3.googleusercontent.com/-pzupSzGmAfs/YeeXRpp5KVI/AAAAAAAAASc/9BZxBVvQGNAycWajGzbMuZ5l5EOykzvngCNcBGAsYHQ/w640-h60/image.png" width="640" /></a></div><br /><b><span style="font-size: large;">Mengakses Pod</span></b><p></p><p>Untuk mengakses pod, kita harus melakukan port-forwarding dari ip pod ke ip localhost.</p><pre class="hljs" style="background: rgb(255, 255, 255); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ kubectl port-forward <nama-pod> <port-lokal>:<port-pod<span class="hljs-string" style="color: #df5000;">></span></pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-Jtl8_Em7KvU/Yeeh9ESlTKI/AAAAAAAAASk/DoxMkjPm4CMcnSkj8aR_OM-DYGSaNv98gCNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="80" data-original-width="461" height="112" src="https://lh3.googleusercontent.com/-Jtl8_Em7KvU/Yeeh9ESlTKI/AAAAAAAAASk/DoxMkjPm4CMcnSkj8aR_OM-DYGSaNv98gCNcBGAsYHQ/w640-h112/image.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-2H3xcye5va8/YeeiN75FBCI/AAAAAAAAASs/Q8D0IDKB9SEqVuNiqJ-wWXRabPGo9_38QCNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="995" data-original-width="1920" height="332" src="https://lh3.googleusercontent.com/-2H3xcye5va8/YeeiN75FBCI/AAAAAAAAASs/Q8D0IDKB9SEqVuNiqJ-wWXRabPGo9_38QCNcBGAsYHQ/w640-h332/image.png" width="640" /></a></div><br />Itulah keseluruhan mengenai <a href="https://teziger.blogspot.com/2022/01/belajar-kubernetes-2-pod.html">Pod di kubernetes</a>. Selanjutnya, kita akan mencoba <a href="https://teziger.blogspot.com/2022/01/belajar-kubernetes-3-label.html">memahami Label di kubernetes</a>.<p></p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-46750995400247277212022-01-19T10:47:00.004+07:002022-01-19T12:54:29.626+07:00Belajar Kubernetes 1: Menjalankan Simulasi Kubernetes di Lokal<p><b>menjalankan kubernetes di lokal</b> - Untuk menjalankan kubernetes, diperlukan beberapa server untuk menjadikannya node. Namun sebagai pembelajaran, kita bisa membuat kubernetes di lokal dan membagi hardisk kita sendiri untuk dijalankan sebagai node. Yaitu dengan menggunakan minikube.</p><p><a href="https://teziger.blogspot.com/2022/01/belajar-kubernetes-1-minikube.html"><b>Minikube</b></a> adalah program perangkat lunak yang memungkinkan kita untuk menjalankan kubernetes di dalam perangkat/komputer pribadi dengan satu node. Untuk menginstall dan menjalankan minikube, ikuti langkah berikut ini.</p><p><span style="font-size: large;"><b>Requirement sebelum memulai.</b></span></p><p>1. Kubectl. <a href="https://kubernetes.io/id/docs/tasks/tools/" rel="nofollow">Install disini</a>.</p><p>2. Docker. <a href="https://docs.docker.com/get-docker/">Install disini</a>.</p><p><br /></p><p><b><span style="font-size: large;">Menginstall Minikube</span></b></p><p><b>Linux</b></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">curl -LO <span class="hljs-symbol" style="color: #990073;">https:</span>/<span class="hljs-regexp" style="color: #009926;">/storage.googleapis.com/minikube</span><span class="hljs-regexp" style="color: #009926;">/releases/latest</span><span class="hljs-regexp" style="color: #009926;">/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr</span><span class="hljs-regexp" style="color: #009926;">/local/bin</span><span class="hljs-regexp" style="color: #009926;">/minikube</span></pre><p><br /></p><p><b>Mac</b></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">curl -LO <span class="hljs-symbol" style="color: #990073;">https:</span>/<span class="hljs-regexp" style="color: #009926;">/storage.googleapis.com/minikube</span><span class="hljs-regexp" style="color: #009926;">/releases/latest</span><span class="hljs-regexp" style="color: #009926;">/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr</span><span class="hljs-regexp" style="color: #009926;">/local/bin</span><span class="hljs-regexp" style="color: #009926;">/minikube</span></pre><p><br /></p><p><b>Windows</b></p><p>1. Download minikube untuk windows <a href="https://storage.googleapis.com/minikube/releases/latest/minikube-installer.exe" rel="nofollow">disini</a>.</p><p>2. Tambah binary ke path. Jalankan Powershell sebagai Administrator.</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$oldPath = [Environment]::GetEnvironmentVariable(<span class="hljs-string" style="color: #dd1144;">'Path'</span>, [EnvironmentVariableTarget]::Machine)
<span class="hljs-keyword" style="color: #333333; font-weight: 700;">if</span> ($oldPath.Split(<span class="hljs-string" style="color: #dd1144;">';'</span>) -inotcontains <span class="hljs-string" style="color: #dd1144;">'C:\minikube'</span>){ `
[Environment]::SetEnvironmentVariable(<span class="hljs-string" style="color: #dd1144;">'Path'</span>, $(<span class="hljs-string" style="color: #dd1144;">'{0};C:\minikube'</span> -f $oldPath), [EnvironmentVariableTarget]::Machine) `
}</pre><p><br /></p><p><span style="font-size: large;"><b>Menjalankan Cluster Minikube</b></span></p><p>Buka terminal sebagai Admin (tetapi bukan root).</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-string" style="color: #dd1144;">$ </span>minikube start</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-p0cvPoQbLeA/YeeI6EdPKUI/AAAAAAAAARo/b_ldHrLLeKMKEEfNYfQiMC7CQ3vsz1FhACNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="199" data-original-width="879" height="144" src="https://lh3.googleusercontent.com/-p0cvPoQbLeA/YeeI6EdPKUI/AAAAAAAAARo/b_ldHrLLeKMKEEfNYfQiMC7CQ3vsz1FhACNcBGAsYHQ/w640-h144/image.png" width="640" /></a></div><br /><p></p><p><span style="font-size: large;"><b>Menghentikan Cluster Minikube</b></span></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-string" style="color: #dd1144;">$ </span>minikube stop</pre><p><b><span style="font-size: large;"></span></b></p><div class="separator" style="clear: both; text-align: center;"><b><span style="font-size: large;"><a href="https://lh3.googleusercontent.com/-vRaxTAZ0Yrc/YeeIsFKdOEI/AAAAAAAAARg/HodwmdYON3M3rkpikw163dGIwAeKzJ1aQCNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="94" data-original-width="364" height="166" src="https://lh3.googleusercontent.com/-vRaxTAZ0Yrc/YeeIsFKdOEI/AAAAAAAAARg/HodwmdYON3M3rkpikw163dGIwAeKzJ1aQCNcBGAsYHQ/w640-h166/image.png" width="640" /></a></span></b></div><p></p><p><b><span style="font-size: large;"><br /></span></b></p><p><b><span style="font-size: large;">Tambahan</span></b></p><p>Kita juga bisa mengoperasikan minikube melaluli Lens. Salah satu GUI untuk kubernetes.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-qAF_SOY_ho0/YeeIpBuRBRI/AAAAAAAAARc/mtxfFeM3-d0DU2ECcCagRs51djzmvru0ACNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="839" data-original-width="1920" height="280" src="https://lh3.googleusercontent.com/-qAF_SOY_ho0/YeeIpBuRBRI/AAAAAAAAARc/mtxfFeM3-d0DU2ECcCagRs51djzmvru0ACNcBGAsYHQ/w640-h280/image.png" width="640" /></a></div><br />Di artikel kali ini, kita telah berhasil <a href="https://teziger.blogspot.com/2022/01/belajar-kubernetes-1-minikube.html">menginstall dan menjalankan minikube</a>, sebuah program untuk menjalankan kubernetes secara lokal. Semoga bermanfaat dan sampai jumpa di artikel berikutnya, <b><a href="https://teziger.blogspot.com/2022/01/belajar-kubernetes-2-pod.html">Belajar Kubernetes 2: Memahami Pod</a></b>.<p></p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-55917818533280440032022-01-08T17:20:00.002+07:002022-01-08T17:20:57.298+07:00Tingkatkan Performa Belajar dengan 7 Aplikasi Belajar Online Ini<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiYBqm6UhYdysN6oozqXjQVWwLPpMzZ3chPj05MqXoHj05UUo_HJ4ZutuHqXoNVQ4SHI_sAifG_Fe85ovhFczE1N06iZ_XU64jlQFriw8mXCRNkDEpLaTG2uAFE-xUo5AOz_3MV76SoPjffWxt5I65Cyn5X0lSXTPqBP59vdD7a3t5wsEkN_qLsgQ=s500" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="300" data-original-width="500" height="384" src="https://blogger.googleusercontent.com/img/a/AVvXsEiYBqm6UhYdysN6oozqXjQVWwLPpMzZ3chPj05MqXoHj05UUo_HJ4ZutuHqXoNVQ4SHI_sAifG_Fe85ovhFczE1N06iZ_XU64jlQFriw8mXCRNkDEpLaTG2uAFE-xUo5AOz_3MV76SoPjffWxt5I65Cyn5X0lSXTPqBP59vdD7a3t5wsEkN_qLsgQ=w640-h384" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Sumber: Unsplash.com/FatCamera</td></tr></tbody></table><p>Belajar dari rumah sudah menjadi kegiatan sehari-hari bagi para pelajar semenjak berlangsungnya pandemi Covid-19. Makanya, banyak orang tua yang ingin memberi tunjangan lebih seperti memberikan kursus tambahan untuk anak mereka. Walaupun kursus dilakukan secara daring atau online, mereka percaya ini akan lebih membantu anak mereka dalam belajar. Kemudian dengan itu mereka harus mengeluarkan kocek lebih dalam untuk bayaran kursus tambahan.</p><p>Namun jangan khawatir, nyatanya sekarang sudah banyak bermunculan aplikasi belajar online gratis. Ada banyak aplikasi yang tersedia di Google Play Store maupun App Store yang bisa kamu <a href="https://iprice.co.id/ponsel-tablet/smartphone/">download langsung di HP</a> dan pilih berdasarkan kebutuhan.</p><p>Butuh rekomendasi aplikasi belajar online gratis yang bagus? Berikut ulasannya untuk kamu.</p><p><b><span style="font-size: large;">1. Rumah Belajar</span></b></p><p>Aplikasi belajar online gratis ini dikeluarkan oleh pihak Kemdikbud. Hanya perlu log in ke dalam website-nya, kamu sudah bisa langsung mengakses aplikasinya secara gratis. Terdapat beberapa fitur seperti Sumber Belajar, Bank Soal, Kelas Maya, dan Laboratorium Maya. Kamu juga bisa melihat ada beberapa kategori materi yang sudah dikelompokkan sesuai mata pelajaran. Kamu jadi bisa membaca dan belajar kapan saja. Keunggulan lainnya, aplikasi ini terdapat fitur Laboratorium Maya yang bisa digunakan untuk melakukan praktikum secara online. Kamu tidak perlu lagi khawatir praktikum terhalang oleh kebijakan sekolah dari rumah. Aplikasi ini sangat membantu para guru maupun pelajar untuk tetap bisa belajar daring layaknya seperti belajar luring atau offline.</p><p><span style="font-size: large;"><b>2. Zenius</b></span></p><p>Aplikasi gratis online satu ini cukup populer, terutama di kalangan pelajar yang akan mengikuti ujian kelulusan bahkan untuk mendaftar ke perguruan tinggi. Zenius juga memiliki fitur unggulan berupa simulasi UTBK dan Try Out yang setelah mengerjakannya, kamu akan mendapat pembahasan untuk setiap soal sehingga lebih memahami tentang materi pembelajaran. Tersedia pembahasan soal-soal di kanal YouTube-nya yang bisa kamu tonton. Materi pembelajaran yang ada di aplikasi ini bukan hanya untuk anak SMA/K saja, tetapi tingkat pendidikan SD dan SMP juga tersedia.</p><p><b><span style="font-size: large;">3. Brainly Indonesia</span></b></p><p>Pasti aplikasi belajar online gratis satu ini sudah tidak asing lagi, ya. Sudah banyak yang menggunakan aplikasi ini setiap harinya. Kamu bahkan bisa langsung menggunakannya dari website. Keunggulan yang ditawarkan oleh aplikasi ini adalah kamu bebas bertanya tentang soal mata pelajaran apa pun.</p><p>Selanjutnya akan ada banyak jawaban yang bisa membantumu menyelesaikan pertanyaan tersebut. Brainly bisa digunakan oleh pelajar mulai dari tingkat SD sampai dengan SMA/K. Aplikasi ini juga cukup mudah diakses, di aplikasi maupun di website-nya secara langsung.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhYBFcJSy05qGhTr3nGRBnDF4U8MMCGZ0N6xOqkPuNORFF5y1o49t-0ww8ZXbwMzX2d_ssgwsjKoVDCZ7AcDA20X2nth2hiejhFUxUcjywZvsilb8zoM1ymBE7XIIclgWjt8oPvyQzXyHxDNxfG2Lfp1uaUKGef67zPCcC68nk8cIxKegT4a-cPKw=s500" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="300" data-original-width="500" height="384" src="https://blogger.googleusercontent.com/img/a/AVvXsEhYBFcJSy05qGhTr3nGRBnDF4U8MMCGZ0N6xOqkPuNORFF5y1o49t-0ww8ZXbwMzX2d_ssgwsjKoVDCZ7AcDA20X2nth2hiejhFUxUcjywZvsilb8zoM1ymBE7XIIclgWjt8oPvyQzXyHxDNxfG2Lfp1uaUKGef67zPCcC68nk8cIxKegT4a-cPKw=w640-h384" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Sumber : Unspalsh.com/Fly View Production</td></tr></tbody></table><p><b><span style="font-size: large;">4. ICANDO</span></b></p><p>Untuk meningkatkan performa belajar untuk si kecil, aplikasi ini bisa menjadi pilihan. Aplikasi ini mendesain proses pembelajaran semenarik mungkin sehingga anak-anak tidak akan bosan dibuatnya. Bukan hanya memuat materi pembelajaran, aplikasi ini juga menyediakan games edukasi yang sangat cocok untuk pembelajaran anak usia dini.</p><p>Fitur yang bisa kamu temukan dalam aplikasi ini adalah fitur untuk anak, sekolah, dan orang tua juga, lho. ICANDO juga merupakan mitra belajar Kemendikbud, sehingga pembelajaran di dalamnya tentu didesain oleh para profesional terpercaya di bidangnya.</p><p><b><span style="font-size: large;">5. Sekolahmu</span></b></p><p>Jika kamu menyukai penjelasan materi secara langsung, aplikasi satu ini cocok untukmu. Memiliki fitur Live Streaming di mana kamu bisa belajar secara langsung. Kamu tidak perlu khawatir kurikulum yang kamu gunakan saat ini tidak ada, karena di aplikasi ini tersedia video pelajaran dengan berbagai jenis kurikulum. Kamu hanya perlu koneksi internet yang memadai untuk tetap bisa live streaming pelajaran sepuasnya menggunakan ponsel. </p><p>Aplikasi ini juga menggunakan <i><a href="https://hot.liputan6.com/read/4853091/blended-learning-adalah-metode-pembelajaran-campuran-kenali-keuntungannya" rel="nofollow">metode blended learning</a></i> yang mana memuat berbagai metode belajar agar tiap siswa mudah memahami pelajaran sesuai dengan cara belajarnya sendiri. Sekolahmu juga bisa kamu akses kapan saja dan di mana saja juga bisa digunakan oleh semua kalangan.</p><p><b><span style="font-size: large;">6. Ruangguru</span></b></p><p>Aplikasi belajar online gratis satu ini menyediakan berbagai macam fitur yang menarik seperti Ruangbelajar, Digitalbootcamp, Ruangles, Ruanguji, Ruangkelas, dan Ruanglesonline. Semua fiturnya berstandar tinggi dan didesain sekreatif mungkin. </p><p><i><a href="https://teziger.blogspot.com/2018/04/ruangguru-aplikasi-belajar-online.html">Ruangguru merupakan platform edukasi</a></i> yang hingga saat ini memiliki ribuan tutor dengan kualifikasi terbaik. Walaupun aplikasi satu ini tergolong aplikasi berbayar, beberapa fitur masih bisa kamu gunakan secara gratis.</p><p><b><span style="font-size: large;">7. KelasKita</span></b></p><p>Aplikasi ini memiliki keunikannya sendiri, yaitu kamu tidak hanya belajar pelajaran formal tetapi juga terdapat pelajaran non-formal seperti belajar cara membuat desain grafis, dan keahlian digital lainnya yang tentunya sangat berguna untuk melengkapi skill yang kamu miliki. Tersedia juga fitur chat yang memungkinkan kamu untuk bisa berinteraksi dengan pelajar lainnya. Pastinya proses belajar semakin menyenangkan, ya.</p><p>Itulah ulasan mengenai aplikasi belajar online gratis yang bisa kamu gunakan. Setiap aplikasi memiliki fitur unggulnya masing-masing. Tinggal kamu pilih sesuai minatmu, jadi, kamu pilih yang mana?</p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-8015468897972796232021-12-13T07:37:00.004+07:002021-12-13T07:37:45.586+07:00Cara Mengompres PDF Hingga ke 100KB<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhGYE9m8xmpmB-eK7lrUPleZ6xwSrFYqyJCyaHXXgLgCWBA4D-SubePsMjjkdm0ajJVXVBWCJe60WR6RQ3hQYAvotpnlwQetbAxyvshB6CILUTeqev2melgN9cF5ToJUm3xrrk04mugv3kru4AgYateKo5VBAoqBx98iX7-mw_TMYP72kxI4cKd5Q=s1200" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="675" data-original-width="1200" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEhGYE9m8xmpmB-eK7lrUPleZ6xwSrFYqyJCyaHXXgLgCWBA4D-SubePsMjjkdm0ajJVXVBWCJe60WR6RQ3hQYAvotpnlwQetbAxyvshB6CILUTeqev2melgN9cF5ToJUm3xrrk04mugv3kru4AgYateKo5VBAoqBx98iX7-mw_TMYP72kxI4cKd5Q=w640-h360" width="640" /></a></div><p></p><p><b>kompres PDF secara online</b> - Mungkin ada beberapa alasan mengapa kalian ingin mengompres file PDF. Saya juga melihat lonjakan pencarian untuk "kompres pdf ke 100kb, kompres file pdf hingga di bawah 100 kb, kompres file pdf ke 100kb online" dan kata kunci serupa. Saya tidak yakin mengapa orang ingin mengurangi PDF menjadi 100kb atau kurang. Sepertinya ada beberapa form yang batas uploadnya sudah diset 100kb. 100KB adalah ukuran file yang sangat kecil. Jika kalian ingin <a href="https://onlineconverters.org/id/compress-pdf">kompres pdf 100kb</a> di bawah ini, kalian perlu menggunakan alat kompresi PDF yang efektif. Ada banyak alat kompresor PDF. Jika kalian tidak yakin alat apa yang harus digunakan, periksa daftar alat kompresi PDF terbaik ini.</p><p>Sebelum saya mulai, izinkan saya menjelaskan bahwa kompresi PDF tidak menjamin ukuran output. Itu semua tergantung pada input PDF. kalian tidak dapat mengunggah file PDF 500MB dan mengharapkan alat kompresi PDF untuk mengompres PDF ini menjadi 100KB. Semua alat kompresor PDF yang tercantum dalam artikelnya efektif dan pasti akan memberi kalian kompresi terbaik.</p><p>Compress PDF adalah alat online bagus yang secara efektif mengompresi file PDF. Kalian hanya perlu drag-and-drop file PDF ke dalam kotak dan menunggu kompresi. Ini adalah alat online, sehingga dapat digunakan dari platform apa pun termasuk Windows, Mac, Linux, Android, atau iOS. Alat kompres pdf 100kb online ini mengurangi file PDF yang dipindai menjadi 144 dpi. Ini juga memiliki batas 5GB. Saya tidak berpikir kebanyakan orang berurusan dengan file PDF sebanyak ini.</p><p>Dalam versi gratis alat ini, kalian dapat dengan mudah mendapatkan kompresi hingga 40-50%. Alat ini juga menawarkan versi Pro yang menawarkan kompres pdf 100kb. Alat kompresi PDF ini memberi kalian kontrol lebih besar atas kompresi PDF. Alat ini memungkinkan kalian memilih tingkat kompresi. Untuk kompresi terbaik, pilih tingkat kompresi yang mengatakan Kompresi Maksimum. Kalian dapat memilih kualitas gambar dari file PDF target. Jika kalian menginginkan kompresi yang lebih baik, kalian dapat menggunakan kualitas gambar berwarna, gambar abu-abu, dan gambar mini untuk file PDF yang dikompresi. Ada juga opsi pengaturan lanjutan untuk kompres pdf 100kb yang lebih baik.</p><p>Ini juga merupakan alat online, jadi kalian tidak perlu menginstal perangkat lunak apa pun. Ini berfungsi dengan baik di platform apa pun termasuk Windows, Mac, Linux, Android, dan iOS. Alat ini memiliki ukuran unggahan maksimal 24MB.</p><p>Compress PDF adalah alat luar biasa lainnya untuk membuat file PDF lebih kecil dengan mengompresinya. Ini adalah kompresi PDF online yang secara otomatis mengompresi file PDF dengan menggunakan algoritma komputer. Ini mengurangi bit dengan mengidentifikasi dan menghilangkan redundansi statistik untuk kompres pdf 100kb. kalian dapat mengunggah file dari komputer atau langsung mengunggahnya dari Google Drive dan Dropbox.</p><p>Jika kalian menginginkan <a href="https://teziger.blogspot.com/2021/12/cara-mengompres-pdf-hingga-ke-100kb.html">alat kompresor PDF massal</a>, ini untuk kalian. Pdfcompressor.com memungkinkan kalian mengunggah hingga 20 file PDF sekaligus dan mengompresnya secara bersamaan. Kemudian kalian dapat mengunduh file terkompresi satu per satu atau file ZIP. Ini juga merupakan alat yang sangat baik untuk kompresi PDF. Saya suka situs web ini karena ia juga menawarkan beberapa alat konverter dan kompres pdf 100kb.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg65AHWdIGVqsrzLH1l09CRJVrC1H-qo8uUZMcBTEjukmJeckHd359rn7c3o8TAEwlhjvtwvwJIvSuFZjSpryPYkTg9T7mhuwZ9F3ughWD3wzpktw9Yvd5KKqE_7GtUBMCUayOG4etOdonLcl8b8YUcxKEMKxYCB8Mc6ysEAUMIoMGNPvEzp8wkpA=s596" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="335" data-original-width="596" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEg65AHWdIGVqsrzLH1l09CRJVrC1H-qo8uUZMcBTEjukmJeckHd359rn7c3o8TAEwlhjvtwvwJIvSuFZjSpryPYkTg9T7mhuwZ9F3ughWD3wzpktw9Yvd5KKqE_7GtUBMCUayOG4etOdonLcl8b8YUcxKEMKxYCB8Mc6ysEAUMIoMGNPvEzp8wkpA=w640-h360" width="640" /></a></div><p>Jika kalian ingin aplikasi seluler khusus dipasang di ponsel kalian untuk mengompresi file PDF, kalian dapat menginstal aplikasi Kompres PDF. Aplikasi ini tersedia untuk Android dan iOS. kalian dapat mengunggah file PDF dari penyimpanan perangkat udara atau Drive, OneDrive, Box, dan lainnya. Ini akan mengirim file PDF kalian ke server Compress PDF dan mengembalikan file kompres pdf 100kb. kalian kemudian dapat mengunduh file PDF di ponsel kalian.</p><p><b><span style="font-size: large;">Kesimpulan</span></b></p><p>Sekarang kalian memiliki alat online dan aplikasi seluler yang berbeda untuk mengompres file PDF. Jika kalian ingin mengurangi file kompres pdf 100kb, kalian dapat menggunakan salah satu alat ini.</p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-42996263532957421192021-12-09T10:57:00.005+07:002021-12-09T14:25:40.653+07:00Memahami Standarisasi Token ERC-20 (Cryptocurrency)<div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhvLEkC5rVw8b7Wb4_9OmxnFTnagHhSryg1KEc2ajmkVurC4Yue_9VEMIr0PItg9PgWxJ4AMjvtpqN4AgcUt_Z7T9C2vCRJ6pcHbbYhwRCwIDEF2OOv5vM_FnI4LSXU25H1ukAS7akUy7SzLVuLsD6ldwSnRYX5Mq3M_gxcKqSBJxui1FYiVEwW2g=s696" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="385" data-original-width="696" height="354" src="https://blogger.googleusercontent.com/img/a/AVvXsEhvLEkC5rVw8b7Wb4_9OmxnFTnagHhSryg1KEc2ajmkVurC4Yue_9VEMIr0PItg9PgWxJ4AMjvtpqN4AgcUt_Z7T9C2vCRJ6pcHbbYhwRCwIDEF2OOv5vM_FnI4LSXU25H1ukAS7akUy7SzLVuLsD6ldwSnRYX5Mq3M_gxcKqSBJxui1FYiVEwW2g=w640-h354" width="640" /></a></div><br /><b><br /></b></div><b>EIP 20 token</b> - ERC 20 adalah sebuah standarisasi token cryptocurrency. Dengan kata lain, sebuah token bisa dikatakan 'token crypto' jika memiliki sifat dan fungsi yang sesuai dengan ERC 20.<div><br /></div><div>Standarisasi ini ditulis di kode solidity, sebuah bahasa pemrograman universal untuk membuat token dan smart contract. Kali ini, saya akan break down dan menjelaskan satu demi satu tentang setiap public method di <a href="https://teziger.blogspot.com/2021/12/memahami-standarisasi-token-erc-20.html">ERC 20</a>.</div><div><br /></div><div><b><span style="font-size: large;">Method:</span></b></div><div>Public method adalah segala fungsi yang bisa di-trigger di solidity. Ini bisa menjadi semua bentuk sifat token yang akan dibuat. Token bisa dikatakan sebagai token nft, crypto, stablecoin, atau security jika token tersebut memiliki karakter method yang sesuai dengan standarisasi.</div><div><b><br /></b></div><div><b>1. Name</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="kd" style="font-weight: 700;">function</span> <span class="nx">name</span><span class="p">()</span> <span class="kr" style="font-weight: 700;">public</span> <span class="nx">view</span> <span class="nx">returns</span> <span class="p">(</span><span class="nx">string</span><span class="p">)</span></code></pre></div><div>Method ini digunakan untuk menetapkan nama token crypto yang dibuat. Contoh: ArsanCoin.</div><div><br /></div><div><b>2. Symbol</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="kd" style="font-weight: 700;">function</span> <span class="nx">symbol</span><span class="p">()</span> <span class="kr" style="font-weight: 700;">public</span> <span class="nx">view</span> <span class="nx">returns</span> <span class="p">(</span><span class="nx">string</span><span class="p">)</span></code></pre></div><div>Method ini digunakan untuk menetapkan simbol dari token crypto. Contoh: ACN.</div><div><br /></div><div><b>3. Total Supply</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="kd" style="font-weight: 700;">function</span> <span class="nx">totalSupply</span><span class="p">()</span> <span class="kr" style="font-weight: 700;">public</span> <span class="nx">view</span> <span class="nx">returns</span> <span class="p">(</span><span class="nx">uint256</span><span class="p">)</span></code></pre></div><div>Method ini adalah untuk cek berapa banyak total token yang kita produksi. Contoh: 1 juta token ACN.</div><div><br /></div><div><b>4. Decimals</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="kd" style="font-weight: 700;">function</span> <span class="nx">decimals</span><span class="p">()</span> <span class="kr" style="font-weight: 700;">public</span> <span class="nx">view</span> <span class="nx">returns</span> <span class="p">(</span><span class="nx">uint8</span><span class="p">)</span></code></pre></div><div>Method ini menentukan berapa jumlah desimal dari total supply dan transaksi di token yang dibuat. Contohnya, jika kita menetapkan nilai desimal di method ini sebagai <b>18</b>, maka token ini dianggap bernilai <b>x</b> jika nilainya <b>x * (10^18)</b>. Jadi untuk mengirim 1 token, nilai yang dikirim harus sebanyak <b>1000000000000000000</b>. Banyak sekali ya? Hal ini dikarenakan kemungkinan yang bisa saja terjadi ketika swap token. Karena perbandingan harga bisa aja berbeda jauh. </div><div><b><br /></b></div><div><b>5. Balance Of</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="kd" style="font-weight: 700;">function</span> <span class="nx">balanceOf</span><span class="p">(</span><span class="nx">address</span> <span class="nx">_owner</span><span class="p">)</span> <span class="kr" style="font-weight: 700;">public</span> <span class="nx">view</span> <span class="nx">returns</span> <span class="p">(</span><span class="nx">uint256</span> <span class="nx">balance</span><span class="p">)</span></code></pre></div><div>Method ini digunakan untuk cek saldo token dari address tertentu. Method ini memiliki parameter (<i>address _owner)</i>. Yang artinya, kita harus memasukan sebuah address, kemudian method ini akan me-return saldo yang address itu punya.</div><div><br /></div><div><b>6. Transfer</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="kd" style="font-weight: 700;">function</span> <span class="nx">transfer</span><span class="p">(</span><span class="nx">address</span> <span class="nx">_to</span><span class="p">,</span> <span class="nx">uint256</span> <span class="nx">_value</span><span class="p">)</span> <span class="kr" style="font-weight: 700;">public</span> <span class="nx">returns</span> <span class="p">(</span><span class="nx">bool</span> <span class="nx">success</span><span class="p">)</span></code></pre></div><div>Jika kita ingin men-transfer token ke address lain, method inilah yang digunakan. Sebagaimana kita lihat di parameter method ini, kita harus set address penerima, dan juga berapa jumlah token yang ingin kita kirim.</div><div><br /></div><div><div><b>7. Approve</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="kd" style="font-weight: 700;">function</span> <span class="nx">approve</span><span class="p">(</span><span class="nx">address</span> <span class="nx">_spender</span><span class="p">,</span> <span class="nx">uint256</span> <span class="nx">_value</span><span class="p">)</span> <span class="kr" style="font-weight: 700;">public</span> <span class="nx">returns</span> <span class="p">(</span><span class="nx">bool</span> <span class="nx">success</span><span class="p">)</span></code></pre></div><div>Method ini digunakan untuk mengizinkan smart contract lain untuk mengirim saldo dari wallet kita. Ketika kita men-trigger method ini, address kita akan masuk ke data map <b>allowance</b>. Contoh, ada smart contract pihak ketiga bernama XYZ. Disini, smart contract XYZ akan cek apakah user lain telah setuju untuk mengirim token ke address lain melalui smart contract XYZ.</div><div><b><br /></b></div><div><b>8. Allowance</b></div></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="kd" style="font-weight: 700;">function</span> <span class="nx">allowance</span><span class="p">(</span><span class="nx">address</span> <span class="nx">_owner</span><span class="p">,</span> <span class="nx">address</span> <span class="nx">_spender</span><span class="p">)</span> <span class="kr" style="font-weight: 700;">public</span> <span class="nx">view</span> <span class="nx">returns</span> <span class="p">(</span><span class="nx">uint256</span> <span class="nx">remaining</span><span class="p">)</span></code></pre></div><div>Method ini digunakan untuk smart contract lain agar bisa cek apakah address kita telah approve atau belum untuk melakukan transaksi di smart contract pihak ketiga.</div><div><br /></div><div><b>9. Transfer From</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="kd" style="font-weight: 700;">function</span> <span class="nx">transferFrom</span><span class="p">(</span><span class="nx">address</span> <span class="nx">_from</span><span class="p">,</span> <span class="nx">address</span> <span class="nx">_to</span><span class="p">,</span> <span class="nx">uint256</span> <span class="nx">_value</span><span class="p">)</span> <span class="kr" style="font-weight: 700;">public</span> <span class="nx">returns</span> <span class="p">(</span><span class="nx">bool</span> <span class="nx">success</span><span class="p">)</span></code></pre></div><div>Method ini sama seperti method Transfer. Namun disini kita bisa set penerima, jumlah token, dan pengirimnya juga. Method ini juga biasa digunakan oleh smart contract pihak ketiga untuk mengirim token dari seseorang ke orang lain. Dengan syarat, transaksi tersebut sudah di approve.</div><div><b><span style="font-size: large;"><br /></span></b></div><div><b><span style="font-size: large;">Event:</span></b></div><div>Event adalah sebuah fungsi yang harus di-trigger ketika menjalankan method. Dengan di-triggernya event, kita bisa mengirim informasi secara realtime ke DApp jika method tersebut telah selesai dijalankan.</div><div><br /></div><div><b>1. Transfer</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="nx">event</span> <span class="nx">Transfer</span><span class="p">(</span><span class="nx">address</span> <span class="nx">indexed</span> <span class="nx">_from</span><span class="p">,</span> <span class="nx">address</span> <span class="nx">indexed</span> <span class="nx">_to</span><span class="p">,</span> <span class="nx">uint256</span> <span class="nx">_value</span><span class="p">)</span></code></pre></div><div>Di-trigger ketika <b>Transfer</b> dan <b>Transfer From</b> dijalankan.</div><div><b><br /></b></div><div><b>2. Approval</b></div><div><pre class="highlight" style="background: rgb(238, 238, 255); border-radius: 3px; border: 1px solid rgb(232, 232, 232); color: #111111; font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="nx">event</span> <span class="nx">Approval</span><span class="p">(</span><span class="nx">address</span> <span class="nx">indexed</span> <span class="nx">_owner</span><span class="p">,</span> <span class="nx">address</span> <span class="nx">indexed</span> <span class="nx">_spender</span><span class="p">,</span> <span class="nx">uint256</span> <span class="nx">_value</span><span class="p">)</span></code></pre></div><div>Di-trigger ketika method <b>Approve</b> dijalankan.</div><div><br /></div><div>Itulah penjelasan mengenai tiap <a href="https://teziger.blogspot.com/2021/12/memahami-standarisasi-token-erc-20.html">karakteristik dari standarisasi token erc 20</a>. Semoga bermanfaat! <i>Terima kasih!</i></div>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-64646366111732932622021-12-06T21:27:00.001+07:002021-12-06T21:27:18.920+07:00Download SPSS 25 Windows Full Version (Crack) Gratis<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg6GJJgXj5jKYj3Oe7g8Tlr_75vF5Vt7sJlw4BfYIvbOSxVeyFEoPb9W8UyKMxjBzjPPvVp4540EqJeDP2G-fdgeyDIw3rTLcdXFEDLzcBrnJqfGDzoEQNNM4S6khISSDxZ8TF9mqx12pqbTugqPiSZt-cbGIwyNp1bqu_HkhOZUI_yE6nAUgyl3MXX=s801" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="451" data-original-width="801" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEg6GJJgXj5jKYj3Oe7g8Tlr_75vF5Vt7sJlw4BfYIvbOSxVeyFEoPb9W8UyKMxjBzjPPvVp4540EqJeDP2G-fdgeyDIw3rTLcdXFEDLzcBrnJqfGDzoEQNNM4S6khISSDxZ8TF9mqx12pqbTugqPiSZt-cbGIwyNp1bqu_HkhOZUI_yE6nAUgyl3MXX=w640-h360" width="640" /></a></div><b><br /></b><p></p><p><b>download aplikasi spss gratis </b>- SPSS adalah software pengolah data statistik secara interaktif yang dirilis oleh IBM. Aplikasi ini memiliki interface yang memudahkan siapapun dalam bergelut dengan data statistik.</p><p>Aplikasi ini banyak digunakan di penelitian, manajemen keuangan, bisnis, pasar, bahkan ilm sosial. Tak jarang pula, aplikasi ini digunakan sebagai media pembelajaran. Berikut ini, saya akan membagikan aplikasi <a href="https://teziger.blogspot.com/2021/12/download-spss-25-windows-full-version.html">SPSS</a> versi terbaru yang bisa langsung kalian unduh dan jalankan secara gratis dan full tanpa ada limitasi ataupun batas waktu trial.</p><p><b><span style="font-size: large;">System Requirement</span></b></p><p>- OS: Windows 7, 8, 10, 11<br />- System Version: 64 bit<br />- RAM: 2 GB Memory<br />- HDD: 1 GB free space<br />- Processor: Intel Core 2 Duo<br />- GPU: Not Needed</p><p><b><span style="font-size: large;">Cara Crack</span></b></p><p>- Download file software melalui link dibawah artikel ini<br />- Jalankan dan install file <b style="font-style: italic;">SPSS_Statistics_25_win64.exe</b><br />- Setelah instalasi selesai,<b style="font-style: italic;"> </b>pindahkan file <b>Crack/lservrc</b> ke <b>C:\Program Files\IBM\SPSS\Statistics\22</b></p><p> <a href="https://drive.google.com/file/d/139RGz4OZ1P-WI-4BArzvf2gyIX-6gZAA/view?usp=sharing"><b><span style="font-size: large;">Download SPSS 25 Full Version</span></b></a></p><p>Oke, sekian <a href="https://teziger.blogspot.com/2021/12/download-spss-25-windows-full-version.html">artikel</a> kali ini. Semoga bermanfaat! Terima kasih!</p>Arsanhttp://www.blogger.com/profile/01505898271108224433noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-54259849951460398332021-11-27T00:18:00.004+07:002021-11-27T00:18:40.323+07:00Auto Add & Switch Network Wallet Dengan Web3<p><b></b></p><div style="text-align: center;"><b><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgmD8wC9buP53diHs89Kdt6BPzkbLwF0514Lw9Kr_xQeu_sBcdzsIiR4-vG8auqJUGi5pv2xSZ_Uh16_UMB4TIBQ7dzicRCZOBpWPJ2dezyNVe6z1CQckkim8JhtEE3zw-6BXpa5PUZaHPRrSkcZ3UMkvH16ZC8rTxfr2c_0XvYRFJFkRyzzbcEew=s700" imageanchor="1"><img border="0" data-original-height="525" data-original-width="700" height="480" src="https://blogger.googleusercontent.com/img/a/AVvXsEgmD8wC9buP53diHs89Kdt6BPzkbLwF0514Lw9Kr_xQeu_sBcdzsIiR4-vG8auqJUGi5pv2xSZ_Uh16_UMB4TIBQ7dzicRCZOBpWPJ2dezyNVe6z1CQckkim8JhtEE3zw-6BXpa5PUZaHPRrSkcZ3UMkvH16ZC8rTxfr2c_0XvYRFJFkRyzzbcEew=w640-h480" width="640" /></a></b></div><b><br />cara menambah dan mengubah network wallet dengan web3</b> - Di dalam sebuah Dapps, tak jarang setiap user diwajibkan untuk switch network sebelum menggunakan seluruh layanan. Karena biasanya smart contract setiap aplikasi berada di jaringan yang berbeda.<p></p><p>Nah, berikut ini adalah cara otomatisasi atau force switch user ke <a href="https://teziger.blogspot.com/2021/11/auto-add-switch-network-wallet-dengan.html">network</a> yang telah kita tentukan dan juga menambah jaringan secara otomatis.</p><p>Saya akan mencoba switch network user ke jaringan <b>Mumbai Polygon</b>. Jika network belum ada di wallet user, maka akan otomatis ditambah.</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-class">try </span>{
await web3.currentProvider.request({
<span class="hljs-symbol" style="color: #990073;"> method:</span> <span class="hljs-string" style="color: #dd1144;">"wallet_switchEthereumChain"</span>,
<span class="hljs-symbol" style="color: #990073;"> params:</span> [{ chainId: <span class="hljs-string" style="color: #dd1144;">"0x13881"</span> }],
});
} catch () {
<span class="hljs-class">try </span>{
await web3.currentProvider.request({
<span class="hljs-symbol" style="color: #990073;"> method:</span> <span class="hljs-string" style="color: #dd1144;">"wallet_addEthereumChain"</span>,
<span class="hljs-symbol" style="color: #990073;"> params:</span> [
{
<span class="hljs-symbol" style="color: #990073;"> chainId:</span> <span class="hljs-string" style="color: #dd1144;">"0x13881"</span>,
<span class="hljs-symbol" style="color: #990073;"> chainName:</span> <span class="hljs-string" style="color: #dd1144;">"Mumbai"</span>,
<span class="hljs-symbol" style="color: #990073;"> rpcUrls:</span> [<span class="hljs-string" style="color: #dd1144;">"https://matic-mumbai.chainstacklabs.com"</span>],
<span class="hljs-symbol" style="color: #990073;"> nativeCurrency:</span> {
<span class="hljs-symbol" style="color: #990073;"> name:</span> <span class="hljs-string" style="color: #dd1144;">"Matic"</span>,
<span class="hljs-symbol" style="color: #990073;"> symbol:</span> <span class="hljs-string" style="color: #dd1144;">"Matic"</span>,
<span class="hljs-symbol" style="color: #990073;"> decimals:</span> <span class="hljs-number" style="color: teal;">18</span>,
},
<span class="hljs-symbol" style="color: #990073;"> blockExplorerUrls:</span> [<span class="hljs-string" style="color: #dd1144;">"https://explorer-mumbai.maticvigil.com"</span>],
},
],
});
} catch (error) {
alert(error.message);
}
}</pre>
Dalam penggunaan method switch dan add chain, kita menggunakan hex chain id, bukan decimal chain id. Berikut ini cara mendapatkan hex dan decimal current chain id.<pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-keyword" style="color: #333333; font-weight: 700;">const</span> chainIdHex = web3.currentProvider.chainId;
<span class="hljs-keyword" style="color: #333333; font-weight: 700;">const</span> chainIdDec = <span class="hljs-keyword" style="color: #333333; font-weight: 700;">await</span> web3.eth.getChainId();
<span class="hljs-built_in" style="color: #0086b3;">console</span>.log(chainIdHex);
<span class="hljs-built_in" style="color: #0086b3;">console</span>.log(chainIdDec);</pre>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-51399286416976583522021-10-29T12:52:00.004+07:002021-11-10T09:28:10.148+07:00Membuat NFT Marketplace Yang Terkoneksi ke Blockchain<p><b>cara membuat aplikasi marketplace NFT</b> - Non-Fungible Token (NFT) adalah aset digital yang kepemilikannya diverifikasi oleh Blockchain, sebuah open ledger terdesentralisasi yang tersebar di jaringan seluruh dunia.</p><p>NFT dapat berupa media atau program digital yang tersimpan dalam IPFS. Pada umumnya, <a href="https://teziger.blogspot.com/2021/10/membuat-nft-dapps.html">NFT</a> ditampilkan dalam sebuah DApps (Decentralize Apps) yang bisa berlaku sebagai marketplace. </p><p>Di artikel kali ini, saya tidak akan menjelaskan secara dasar tentang NFT atau Blockchain. Tujuan pokoknya adalah, kita akan belajar membuat DApps NFT Marketplace yang akan kita koneksikan ke Blockchain. Sebagaimana kita ketahui, untuk melakukan aksi ke Blockchain, terdapat banyak sekali biaya untuk deploying ataupun gas fee. Tapi tenang, di artikel ini, kita akan bereksperimen di testnet yang sama sekali tidak ada biaya.</p><p><b><span style="font-size: large;">Apa yang akan dipelajari?</span></b></p><p>Di artikel ini, kita akan belajar untuk:</p><p></p><ol style="text-align: left;"><li>Membuat crypto wallet & mendapat ETH coin.</li><li>Membuat NFT Token di blockchain network.</li><li>Menginstall starter pack marketplace DApps yang akan kita buat.</li><li>Mengkoneksikan DApps kita ke token yang telah kita buat di blockchain.</li><li>Upload NFT ke IPFS via DApps.</li><li>Transfer kepemilikian NFT.</li></ol><div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-maKm9JtcXjc/YXkIATXmlBI/AAAAAAAAAGk/-oxhhBk7AkMXab4BuBMXXFBArJ0ORhR_wCLcBGAsYHQ/image.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="439" data-original-width="1053" height="266" src="https://lh3.googleusercontent.com/-maKm9JtcXjc/YXkIATXmlBI/AAAAAAAAAGk/-oxhhBk7AkMXab4BuBMXXFBArJ0ORhR_wCLcBGAsYHQ/w640-h266/image.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Flow NFT Marketplace DApps<br /></td></tr></tbody></table><br /></div><div>Ini adalah flow NFT DApps yang akan kita buat di tutorial kali ini. Kita akan menggunakan Moralis (<a href="https://moralis.io">https://moralis.io</a>) sebagai pihak ketiga, ini akan saya jelaskan detailnya nanti. So, let's start the tutorial!</div><div><b><span style="font-size: large;"><br /></span></b></div><div><b><span style="font-size: large;">A. Membuat Crypto Wallet</span></b></div><p>Dalam kasus ini, saya menggunakan Metamask sebagai crypto wallet.<br />Kita bisa menginstallnya melalui ekstensi browser Google Chrome. Silahkan <b><a href="https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn">install Metamask disini</a></b>.<br />Setelah ekstensi terinstall, buka Metamask lalu daftar.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-v-_G9sJUaVE/YXqm0UEtxkI/AAAAAAAAAHE/ZS8Vlb-25P4ILq8G7XVxMsToS5-WBE0JwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="806" data-original-width="1849" height="278" src="https://lh3.googleusercontent.com/-v-_G9sJUaVE/YXqm0UEtxkI/AAAAAAAAAHE/ZS8Vlb-25P4ILq8G7XVxMsToS5-WBE0JwCLcBGAsYHQ/w640-h278/image.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Jika kalian sudah memiliki wallet di aplikasi selain Metamask, kalian boleh import paraprhase wallet kalian. Jika belum, silahan klik <b>Create a Wallet</b> dan ikuti pendaftaran sampai akhir.</div><p></p><p><b><span style="font-size: large;">B. Meminta Crypto Coin Dari Faucet</span></b></p><p>Pembuatan kontrak , token, dan mint NFT memerlukan biaya menggunakan ETH (Ethereum) coin. Tapi karena kita menggunakan Ropsten testnet, kita bisa mendapatkannya gratis dari Faucet. Kunjungi <a href="https://faucet.ropsten.be/"><b>Ropsten Faucet</b></a> untuk meminta koin ETH yang bisa kita pakai di Testnet.</p><p><b><span style="font-size: large;">C. Mendaftar Moralis</span></b></p><p>Moralis adalah aplikasi pihak ketiga yang sangat penting dalam tutorial ini. Moralis adalah development platform yang menyediakan berbagai layanan terkait Blockchain. Di dalam kasus ini, kita akan menggunakan beberapa layanan moralis, yaitu:</p><p></p><ol style="text-align: left;"><li><b>Server & Database:</b> Untuk menyimpan data user dan NFT</li><li><b>Node:</b> Untuk mengakses data di Blockchain</li><li><b>API Key:</b> Untuk melakukan interaksi ke Blockchain menggunakan Moralis API</li></ol><div>Silahkan daftar terlebih dahulu ke <b><a href="https://moralis.io">https://moralis.io</a></b>.</div><div><br /></div><div>Setelah itu, cobalah untuk membuat server baru dengan klik <b>Create New Server</b> di halaman server, lalu pilih Testnet server dan hubungkan ke <b>ETH (Ropsten)</b>. </div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-oqS1BSkF3Oo/YXqdrP9XCtI/AAAAAAAAAGs/qyscovkyg80tAzY0FMg4Qrd0KweKXJbOgCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1016" data-original-width="1848" height="352" src="https://lh3.googleusercontent.com/-oqS1BSkF3Oo/YXqdrP9XCtI/AAAAAAAAAGs/qyscovkyg80tAzY0FMg4Qrd0KweKXJbOgCLcBGAsYHQ/w640-h352/image.png" width="640" /></a></div></div><p></p><p><b><span style="font-size: large;">D. Membuat NFT DApps</span></b></p><p>Setelah wallet siap dan kita telah berhasil mendapatkan koin ETH, sekarang saatnya menginstall NFT DApps.</p><p><b>1. Clone starterpack NFT DApps.</b><br /></p><p>Kita akan menggunakan starter pack (source code) dari <b><a href="https://github.com/mtegarsantosa/nft-dapps">@mtegarsantosa/nft-dapps</a></b>.</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ git <span class="hljs-built_in" style="color: #0086b3;">clone</span> https://github.com/mtegarsantosa/nft-dapps.git
$ cd nft-dapps
$ npm install</pre><p></p><p><b>2. ENV Setup</b></p><p>Ubah file <b>.env.example</b> menjadi <b>.env</b>, Lalu edit dengan mengikuti pattern ini.</p><pre class="hljs" style="background: rgb(248, 248, 248); display: block; overflow-x: auto; padding: 0.5em;"><span style="color: #333333;">BLOCKCHAIN_NETWORK=ethRopsten
WALLET_MNEMONIC=</span><b><span style="color: red;"><METAMASK-PARAPHRASE></span></b><span style="color: #333333;">
WALLET_ADDRESS=</span><b><span style="color: red;"><METAMASK-ADDRESS></span></b><span style="color: #333333;">
MORALIS_APP_ID=</span><b><span style="color: red;"><APP-ID-MORALIS-KAMU></span></b><span style="color: #333333;">
MORALIS_SERVER_URL=</span><b><span style="color: red;"><SERVER-URL-MORALIS-KAMU></span></b><span style="color: #333333;">
MORALIS_API_KEY=</span><b><span style="color: red;"><API-KEY-MORALIS-KAMU></span></b><span style="color: #333333;">
MORALIS_API_URL=https://deep-index.moralis.io/api/v2
CONTRACT_ADDRESS=</span></pre><p><span style="color: red;"><METAMASK-PARAPHRASE>:</span> Ini adalah secret key yang ada di metamask wallet mu.<br /><span style="color: red;"><i><METAMASK-ADDRESS>:</i> </span>Alamat akun wallet yang telah dibuat dan memiliki ETH koin dari faucet.<br /><i><span style="color: red;"><APP-ID-MORALIS-KAMU>:</span></i> Kalian bisa cek di <b>View Details</b> pada <a href="https://admin.moralis.io/servers">server</a> yang telah dibuat di moralis.<br /><i><span style="color: red;"><SERVER-URL-MORALIS-KAMU>:</span></i> Kalian bisa cek di <b>View Details</b> pada <a href="https://admin.moralis.io/servers">server</a> yang telah dibuat di moralis.<br /><i><span style="color: red;"><API-KEY-MORALIS-KAMU>:</span></i> Kalian bisa mendapatkan API Key melalui halaman <a href="https://admin.moralis.io/web3Api"><b>Moralis Web3API</b></a>.</p><p><b>3. Deploy NFT Token ke Blockchain</b></p><p>Pertama, kita buat dulu NFT Token dengan standar <a href="https://ethereum.org/en/developers/docs/standards/tokens/erc-721/">ERC-721</a>. Saya akan membuat token bernama <i>ArsanNFT (ANFT)</i>. Caranya cukup dengan memasukan perintah.</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ npm run <span class="hljs-keyword" style="color: #333333; font-weight: 700;">generate</span> token</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://camo.githubusercontent.com/cd5df4f5bad8ae9458ca9fdd9ab73ef498ee10751303d02bb65a9622a3d2b203/68747470733a2f2f626c6f676765722e676f6f676c6575736572636f6e74656e742e636f6d2f696d672f612f41567658734567673931465a51374e436f335869357564304d50503663314b6254712d7642486d465a72395f366a6c444765726e67514a37506d61326d2d77635358433074335850594556674a6634784c55304538486b5f54306d44563751524e46796d4b74656f4a796261364270595a426b727933764764614252386d6747646d66544c6e486b72763171517a424478587662643234485f72414374774744656367634e63615176347649376478366450457665624e6154556c42725738" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="472" data-original-width="995" height="304" src="https://camo.githubusercontent.com/cd5df4f5bad8ae9458ca9fdd9ab73ef498ee10751303d02bb65a9622a3d2b203/68747470733a2f2f626c6f676765722e676f6f676c6575736572636f6e74656e742e636f6d2f696d672f612f41567658734567673931465a51374e436f335869357564304d50503663314b6254712d7642486d465a72395f366a6c444765726e67514a37506d61326d2d77635358433074335850594556674a6634784c55304538486b5f54306d44563751524e46796d4b74656f4a796261364270595a426b727933764764614252386d6747646d66544c6e486b72763171517a424478587662643234485f72414374774744656367634e63615176347649376478366450457665624e6154556c42725738" width="640" /></a></div><br />Setelah itu, tinggal deploy token & smart contract address yang telah kita buat dengan perintah:<pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">$ npm <span class="hljs-keyword" style="color: #333333; font-weight: 700;">run</span> <span class="hljs-keyword" style="color: #333333; font-weight: 700;">token</span> deploy</pre><p></p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://camo.githubusercontent.com/85c2c2aa0f4e7e3f70fdf2ce147a1f6854edd5e4fa30ed25a6cc8fe412a002fc/68747470733a2f2f626c6f676765722e676f6f676c6575736572636f6e74656e742e636f6d2f696d672f612f4156765873456a583577756e42444569514a6362657a7858304656316879616a6547414d7a4e33577970704f447242496b6f4d747530757230526c4f4a47412d38676e765036597257744c6e664c484b4c326d5a574130325f45454e3049553165765636322d536d4a457058516230626f6675304274516235496a593077345832524151474b7549445556594556335246685f4243786f3143484e654a4d56344e4233366167337a6e594d493271423158324d6d6d58544a39456c4e547238" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="472" data-original-width="995" height="304" src="https://camo.githubusercontent.com/85c2c2aa0f4e7e3f70fdf2ce147a1f6854edd5e4fa30ed25a6cc8fe412a002fc/68747470733a2f2f626c6f676765722e676f6f676c6575736572636f6e74656e742e636f6d2f696d672f612f4156765873456a583577756e42444569514a6362657a7858304656316879616a6547414d7a4e33577970704f447242496b6f4d747530757230526c4f4a47412d38676e765036597257744c6e664c484b4c326d5a574130325f45454e3049553165765636322d536d4a457058516230626f6675304274516235496a593077345832524151474b7549445556594556335246685f4243786f3143484e654a4d56344e4233366167337a6e594d493271423158324d6d6d58544a39456c4e547238" width="640" /></a></div><br />Setelah token dideploy ke Blockchain, kalian bisa cek kembali file <b>.env </b>di bagian <b>CONTRACT_ADDRESS</b>. Itu adalah alamat smart contract dan token yang kita dapat. Biarkan tetap berada di file .env agar DApps nya nanti terkoneksi ke sana.<div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-aw-nHzwIqFs/YXqkCWwnYGI/AAAAAAAAAG8/2Tp_7k5M9TcAG_ETXIuetSI2Epq7y2qmwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="247" data-original-width="829" height="190" src="https://lh3.googleusercontent.com/-aw-nHzwIqFs/YXqkCWwnYGI/AAAAAAAAAG8/2Tp_7k5M9TcAG_ETXIuetSI2Epq7y2qmwCLcBGAsYHQ/w640-h190/image.png" width="640" /></a></div><p>Kalian bisa akses smart contract & token kalian secara langsung di blockchain Ropsten. Kunjungi <b><span style="color: red;">https://ropsten.etherscan.io/token/<CONTRACT-ADDRESS-MU></span></b>.</p><p><b>3. Menjalankan UI NFT DApps.</b></p><p>Untuk run DApps nya, cukup masukan perintah ini:</p></div><pre class="hljs" style="background: rgb(248, 248, 248); display: block; overflow-x: auto; padding: 0.5em;">$ npm run client</pre><div class="separator" style="clear: both; text-align: center;"><a href="https://camo.githubusercontent.com/71ed25caaffc735c3cf5d1f29799a407ae55b286a318a6980178d596b396742c/68747470733a2f2f626c6f676765722e676f6f676c6575736572636f6e74656e742e636f6d2f696d672f612f4156765873456a3073685445554953623061416d417841714f5a4c624c6f2d77424138414752505f4c35664b71723366427a44414b6c7968704858317a4a655341636f6c70536c524e365448334b4a59414c346d76416e536350396a67717a67776d747664683931524b4f2d59627448706561343070677633764865313149414f4236395f7845627a776f372d774d4d49542d45785f4e726d75444f67794d4541336c653073774844317966472d31693970444c395a6f5a536e4e62414e6f" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="472" data-original-width="995" height="304" src="https://camo.githubusercontent.com/71ed25caaffc735c3cf5d1f29799a407ae55b286a318a6980178d596b396742c/68747470733a2f2f626c6f676765722e676f6f676c6575736572636f6e74656e742e636f6d2f696d672f612f4156765873456a3073685445554953623061416d417841714f5a4c624c6f2d77424138414752505f4c35664b71723366427a44414b6c7968704858317a4a655341636f6c70536c524e365448334b4a59414c346d76416e536350396a67717a67776d747664683931524b4f2d59627448706561343070677633764865313149414f4236395f7845627a776f372d774d4d49542d45785f4e726d75444f67794d4541336c653073774844317966472d31693970444c395a6f5a536e4e62414e6f" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><p><b><span style="font-size: large;">E. Fitur-Fitur NFT DApps</span></b></p><p>Setelah kalian berhasil merilis smart contract & NFT token, terkoneksi dengan Moralis, dan berhasil menjalankan DApps client, maka kalian telah berhasil merilis DApps kalian sendiri. Selamat!!!</p><p>Setelah menjalankan client, kalian akan otomatis di-redirect browser ke <b>http://127.0.0.1:8080</b>. Oh iya, untuk menggunaka keseluruhan fitur DApps, kalian harus mengkoneksikan wallet Metamask melalui tombol <b>Connect to Metamask</b>, pop up akan muncul, lalu tinggal klik <b>connect</b>. Berikut ini beberapa fitur yang bisa kalian gunakan.</p><p><b>1. List NFT</b></p><p>Disini kalian bisa melihat list seluruh NFT yang di-mint di token yang telah kalian rilis.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-T8zocHH_TPg/YXuK6FBpaOI/AAAAAAAAAH0/4xFwiLSH9jQmnrlj2XzzdiSithYbvgRgwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1050" data-original-width="1920" height="350" src="https://lh3.googleusercontent.com/-T8zocHH_TPg/YXuK6FBpaOI/AAAAAAAAAH0/4xFwiLSH9jQmnrlj2XzzdiSithYbvgRgwCLcBGAsYHQ/w640-h350/image.png" width="640" /></a></div><br /><p></p><p><b>2. My NFT</b></p><p>Disini kalian bisa melihat seluruh NFT milik address Metamask yang kalian koneksikan ke DApps. Bisa NFT yang kalian mint, atau NFT yang ditransfer orang lain ke address kalian.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-pKnYpKjVjsM/YXuLZhQBpTI/AAAAAAAAAIE/hujKeHUyOnY94PnG71cM9U4xAi7YEdL1ACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="898" data-original-width="1920" height="300" src="https://lh3.googleusercontent.com/-pKnYpKjVjsM/YXuLZhQBpTI/AAAAAAAAAIE/hujKeHUyOnY94PnG71cM9U4xAi7YEdL1ACLcBGAsYHQ/w640-h300/image.png" width="640" /></a></div><br /><br /><p></p><p><b>2. Mint (Upload) NFT</b></p><p>Di halaman ini, kalian bisa mint atau upload NFT baru. Pop up metamask akan muncul ketika transaksi berlangsung. Jika NFT telah berhasil diupload, Transaction ID beserta link ke block explorer akan muncul.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-XUw-NxHvqyQ/YXuK2pXSU5I/AAAAAAAAAHw/v5ZCH_Qhr2sGpD1Eo2-LNKIWqxchkkizwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="895" data-original-width="1920" height="298" src="https://lh3.googleusercontent.com/-XUw-NxHvqyQ/YXuK2pXSU5I/AAAAAAAAAHw/v5ZCH_Qhr2sGpD1Eo2-LNKIWqxchkkizwCLcBGAsYHQ/w640-h298/image.png" width="640" /></a></div><br /><br /><p></p><p></p><p><b>3. Transfer NFT</b></p><p>Di halaman ini, kalian bisa mengubah kepemilikan NFT yang kalian punya ke address lain secara gratis.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-3rzRiaURxKg/YXuLiF4J7yI/AAAAAAAAAII/mOPrhXDYYJUPnoHSuYvy1_a9Xc5Ck6eqwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="898" data-original-width="1920" height="300" src="https://lh3.googleusercontent.com/-3rzRiaURxKg/YXuLiF4J7yI/AAAAAAAAAII/mOPrhXDYYJUPnoHSuYvy1_a9Xc5Ck6eqwCLcBGAsYHQ/w640-h300/image.png" width="640" /></a></div><br /><br /><p></p><p>Oke, sekian artikel tentang <a href="https://teziger.blogspot.com/2021/10/membuat-nft-dapps.html">cara membuat nft marketplace sendiri yang terkoneksi ke blockchain</a>. Semoga bermanfaat! <i>Terima kasih!</i></p></div>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com3tag:blogger.com,1999:blog-185798562776123304.post-23254421521038579762021-09-02T12:02:00.004+07:002021-09-02T12:02:44.507+07:00Fix Set Up Docker PHP, Nginx, Mysql, PHPMYADMIN<p><b>docker dan docker compose setup untuk membangun web server</b> - Docker telah mempermudah proses scaling aplikasi dan bisa digunakan di dalam proses development maupun deployment. Artikel kali ini akan membahas tentang langkah-langkah membangun web server sendiri seperti XAMPP, LAMP, atau MAMP dengan <a href="https://teziger.blogspot.com/2021/09/docker-webserver-setup.html">docker</a>.</p><p><b><span style="font-size: medium;">1. Struktur Folder</span></b></p><p>Berikut ini adalah struktur folder web server yang kita beri nama <b>localapp</b>.</p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-hku5fi0--DM/YTBWr-HboYI/AAAAAAAAAD8/pZHOwqk54h0D4X-c8Fi_ZJO4WhSNOEUvACLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="229" data-original-width="210" height="240" src="https://lh3.googleusercontent.com/-hku5fi0--DM/YTBWr-HboYI/AAAAAAAAAD8/pZHOwqk54h0D4X-c8Fi_ZJO4WhSNOEUvACLcBGAsYHQ/image.png" width="220" /></a></div><br /><br /><p></p><p><b><span style="font-size: medium;">2. Set up Docker Compose File</span></b></p><p><b><i>/docker-compose.yaml</i></b></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-comment" style="color: #999988; font-style: italic;"># Mendefinisikan Versi Docker Compose</span>
<span class="hljs-attr">version:</span> <span class="hljs-string" style="color: #dd1144;">'3.8'</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Mendefinisikan Voulmes</span>
<span class="hljs-attr">volumes:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Untuk Menyimpan Seluruh Data Dalam Database</span>
<span class="hljs-attr"> localdb:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Mendefinisikan Networks</span>
<span class="hljs-attr">networks:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Untuk Mengkoneksikan Antar Services</span>
<span class="hljs-attr"> localapp:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Mendefinisikan Services Yang Akan Dipakai</span>
<span class="hljs-attr">services:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Nama Service Untuk Web Server (nginx)</span>
<span class="hljs-attr"> nginx:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Gunakan Image Nginx Tag Alpine</span>
<span class="hljs-attr"> image:</span> nginx:alpine
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Kaitkan Folder Lokal Ke Container</span>
<span class="hljs-attr"> volumes:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Folder Web</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> <span class="hljs-string" style="color: #dd1144;">"./htdocs:/var/www"</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Folder Konfigurasi Nginx</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> <span class="hljs-string" style="color: #dd1144;">"./.build/nginx/conf.d:/etc/nginx/conf.d"</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Ekspose Port</span>
<span class="hljs-attr"> ports:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># 80 (http://localhost)</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> <span class="hljs-string" style="color: #dd1144;">"80:80"</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Jalankan Nginx Jika Service php Dan db Sudah Berjalan</span>
<span class="hljs-attr"> depends_on:</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> php
<span class="hljs-bullet" style="color: #990073;"> -</span> db
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Koneksikan Ke Network localapp</span>
<span class="hljs-attr"> networks:</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> localapp
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Nama Service Untuk PHP</span>
<span class="hljs-attr"> php:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Build Image Dengan Dockerfile Di Folder ./.build/php</span>
<span class="hljs-attr"> build:</span> ./.build/php
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Kaitkan Folder Lokal Ke Container</span>
<span class="hljs-attr"> volumes:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Jalankan PHP Di Semua Folder Web</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> <span class="hljs-string" style="color: #dd1144;">"./htdocs:/var/www"</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Koneksikan Ke Network localapp</span>
<span class="hljs-attr"> networks:</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> localapp
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Nama Service Untuk Database </span>
<span class="hljs-attr"> db:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Gunakan Image mysql Tag latest</span>
<span class="hljs-attr"> image:</span> mysql:latest
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Environment Yang Dibutuhkan mysql</span>
<span class="hljs-attr"> environment:</span>
<span class="hljs-attr"> MYSQL_ROOT_PASSWORD:</span> root
<span class="hljs-attr"> MYSQL_PASSWORD:</span> secret
<span class="hljs-attr"> MYSQL_USER:</span> homestead
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Expose Port Agar Dapat Diakses Melalui Aplikasi MYSQL Client (phpmyadmin)</span>
<span class="hljs-attr"> ports:</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> <span class="hljs-string" style="color: #dd1144;">"3306:3306"</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Simpan Semua Data Dalam Volumes localdb</span>
<span class="hljs-attr"> volumes:</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> <span class="hljs-string" style="color: #dd1144;">"localdb:/var/lib/mysql"</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Koneksikan Ke Network localapp</span>
<span class="hljs-attr"> networks:</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> localapp
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Nama Service Untuk PHPMYADMIN</span>
<span class="hljs-attr"> phpmyadmin:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Gunakan Image phpmyadmin</span>
<span class="hljs-attr"> image:</span> phpmyadmin/phpmyadmin
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Expose Port</span>
<span class="hljs-attr"> ports:</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Gunakan Port 8081 Untuk Mengakses phpmyadmin</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> <span class="hljs-string" style="color: #dd1144;">"8081:80"</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># Koneksikan Ke Network localapp</span>
<span class="hljs-attr"> networks:</span>
<span class="hljs-bullet" style="color: #990073;"> -</span> localapp</pre><p><b><span style="font-size: medium;">3. Set up Nginx Config</span></b></p><p><b><i>/.build/nginx/conf.d/localapp.conf</i></b></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-section" style="color: #990000; font-weight: 700;">server</span> {
<span class="hljs-attribute" style="color: navy; font-weight: 400;">listen</span> <span class="hljs-number" style="color: teal;">80</span>;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">index</span> index.php index.html;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">error_log</span> /var/log/nginx/error.log;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">access_log</span> /var/log/nginx/access.log;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">root</span> /var/www;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">location</span> <span class="hljs-regexp" style="color: #009926;">~ \.php$</span> {
<span class="hljs-attribute" style="color: navy; font-weight: 400;">try_files</span> <span class="hljs-variable" style="color: teal;">$uri</span> =<span class="hljs-number" style="color: teal;">404</span>;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">fastcgi_split_path_info</span><span class="hljs-regexp" style="color: #009926;"> ^(.+\.php)(/.+)$</span>;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">fastcgi_pass</span> php:<span class="hljs-number" style="color: teal;">9000</span>;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">fastcgi_index</span> index.php;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">include</span> fastcgi_params;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">fastcgi_param</span> SCRIPT_FILENAME <span class="hljs-variable" style="color: teal;">$document_root</span><span class="hljs-variable" style="color: teal;">$fastcgi_script_name</span>;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">fastcgi_param</span> PATH_INFO <span class="hljs-variable" style="color: teal;">$fastcgi_path_info</span>;
}
<span class="hljs-attribute" style="color: navy; font-weight: 400;">location</span> / {
<span class="hljs-attribute" style="color: navy; font-weight: 400;">try_files</span> <span class="hljs-variable" style="color: teal;">$uri</span> <span class="hljs-variable" style="color: teal;">$uri</span>/ /index.php?<span class="hljs-variable" style="color: teal;">$query_string</span>;
<span class="hljs-attribute" style="color: navy; font-weight: 400;">gzip_static</span> <span class="hljs-literal" style="color: teal;">on</span>;
}
}</pre><p><b><span style="font-size: medium;">4. Buat image PHP</span></b></p><p>/.build/php/Dockerfile</p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-keyword" style="color: #333333; font-weight: 700;">FROM</span> php:<span class="hljs-number" style="color: teal;">7.4</span>-fpm
<span class="hljs-keyword" style="color: #333333; font-weight: 700;">RUN</span> <span class="bash">docker-php-ext-install mysqli</span></pre><p><b><span style="font-size: medium;">5. Jalankan Aplikasi</span></b></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;">docker-compose up --build</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-8UBek_jlWCs/YTBYBcbP8dI/AAAAAAAAAEE/XG6Z_HEfvQAYcUl1cX5hB-hvI5QuUqgiwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="183" data-original-width="1614" height="72" src="https://lh3.googleusercontent.com/-8UBek_jlWCs/YTBYBcbP8dI/AAAAAAAAAEE/XG6Z_HEfvQAYcUl1cX5hB-hvI5QuUqgiwCLcBGAsYHQ/w640-h72/image.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-F6otFK8VCb4/YTBYX9u9mCI/AAAAAAAAAEM/Hr-IQ9mjdoc0CM69a4kIk4EiWOrOAcyJwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="911" data-original-width="1920" height="304" src="https://lh3.googleusercontent.com/-F6otFK8VCb4/YTBYX9u9mCI/AAAAAAAAAEM/Hr-IQ9mjdoc0CM69a4kIk4EiWOrOAcyJwCLcBGAsYHQ/w640-h304/image.png" width="640" /></a></div><br /><p></p><p>Seluruh kode set up ini bisa kalian clone/unduh secara gratis melalui link ini: <b><a href="https://github.com/mtegarsantosa/docker-webserver">Docker Web Server Fix Set Up</a></b></p><p>Oke, itulah <a href="https://teziger.blogspot.com/2021/09/docker-webserver-setup.html">cara membangun web server dengan fix set up di docker</a>. Semoga artikel ini bisa membantu kalian paham tentang docker dan bisa memudahkan kalian meng-improve web server kalian sendiri seperti menambah bahasa perl, python, atau install composer di dalam container misalnya. Semua itu bisa dilakukan hanya dengan membuat service baru di docker-compose.</p><p><i>Terima Kasih!</i></p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-35197742980234808982021-08-31T10:25:00.001+07:002021-08-31T10:25:09.654+07:00Membuat Static Folder di Django Rest Framework<p><b>membuat static file dan image di django</b> - artikel kali ini akan membahas tentang cara membuat folder untuk menampilkan file atau gambar secara statis di django rest framework.</p><p>Django Rest Framework biasa digunakan untuk membangun aplikasi rest API dengan mudah. Namun, tak menutup kemungkinan bahwa framework ini dibuat untuk me-load file didalam apps. Untuk melakukan itu, kita harus membuat folder statis khusus file tersebut di dalam aplikasi <a href="https://teziger.blogspot.com/2021/08/membuat-static-folder-di-django-rest.html">django</a>. Berikut ini tahapannya.</p><p><b><span style="font-size: medium;">1. Buat folder static di apps django</span></b></p><p><span>Berikut ini adalah contoh django milik saya. Intinya adalah, kita buat folder bernama <b>static</b>.</span></p><p><span><br /></span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-HlJDBpEF5zE/YS2erlsi9II/AAAAAAAAADU/FDaLf15wfUYl8OmEgVLgIZUXj3N1qEWKwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="190" data-original-width="727" height="168" src="https://lh3.googleusercontent.com/-HlJDBpEF5zE/YS2erlsi9II/AAAAAAAAADU/FDaLf15wfUYl8OmEgVLgIZUXj3N1qEWKwCLcBGAsYHQ/w640-h168/image.png" width="640" /></a></div><p></p><p><b><span style="font-size: large;">2. Set static url dan static folder</span></b></p><p><i>config/settings.py</i></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-comment" style="color: #999988; font-style: italic;"># url static</span>
STATIC_URL = <span class="hljs-string" style="color: #dd1144;">'/static/'</span>
<span class="hljs-comment" style="color: #999988; font-style: italic;"># nama folder static yang akan diload oleh url static</span>
STATICFILES_DIRS = (
os.path.join(BASE_DIR, <span class="hljs-string" style="color: #dd1144;">'static'</span>),
)</pre><p><b><span style="font-size: medium;">3. Daftarkan url static</span></b></p><p><i>config/urls.py</i></p><pre class="hljs" style="background: rgb(248, 248, 248); color: #333333; display: block; overflow-x: auto; padding: 0.5em;"><span class="hljs-keyword" style="color: #333333; font-weight: 700;">from</span> django.contrib.staticfiles.urls <span class="hljs-keyword" style="color: #333333; font-weight: 700;">import</span> staticfiles_urlpatterns
urlpatterns = [
....
]
urlpatterns += staticfiles_urlpatterns()</pre><p>4. Akses static gambar atau file di static url</p><p><b>http://<host>:<port>/static/<file-atau-gambar-mu></b></p><p><b><br /></b></p><p>Oke, sekian artikel kali ini tentang <a href="https://teziger.blogspot.com/2021/08/membuat-static-folder-di-django-rest.html">cara membuat static folder di django rest framework</a>. Semoga bermanfaat! <i>Terima Kasih!</i></p>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0tag:blogger.com,1999:blog-185798562776123304.post-12032987670307366002021-07-27T21:42:00.001+07:002021-07-27T21:42:57.193+07:00(Download) Aplikasi Form Survey & Angket Khusus Sekolah<p><b>aplikasi survey dan kuisioner untuk sekolah dan lembaga pendidikan</b> - Di era digital saat ini, hampir semua aktivitas dilaksanakan secara online. Termasuk pada bidang pendidikan, khususnya pada pembuatan dan pengisian formulir dan angket sekolah.</p><p>Untuk itu, perlu ada <a href="https://teziger.blogspot.com/2021/07/download-aplikasi-form-survey-angket.html">aplikasi</a> khusus yang bisa membuat formulir untuk survey dan kuisioner dengan berbagai fitur lengkap didalamnya. Termasuk pembuatan formulir, pengisian, manajemen, dan laporan.</p><p>Berikut ini, saya merilis aplikasi untuk survey dan kuisioner khusus sekolah bernama <b>ASKIN</b>. Aplikasi ini digunakan untuk membuat formulir angket untuk disebarkan ke siswa atau guru terdaftar dengan berbagai fitur manajemen data yang ada.</p><p>Dengan aplikasi ini, sekolah akan dengan mudah memanajemen data siswa dan guru, membuat formulir dan mengirim link pengisian ke responden terpilih, kemudian memanajemen laporannya. Aplikasi ini juga bersifat <b>CMS</b>, artinya, informasi dan judul aplikasi dapat diubah menjadi sesuai informasi sekolah.</p><p>Berikut ini fitur yang ada dalam aplikasi.</p><p></p><ul><li>Terdapat 2 hak akses (Manager dan Surveyor)</li><li>Mengatur judul dan deskripsi aplikasi</li><li>Manajemen user dan akses</li><li>Data master (siswa, kelas, guru, kategori angket)</li><li>Membuat angket</li><li>Broadcast link angket ke banyak email siswa, orang tua siswa, atau guru sekaligus</li><li>Rekap responden, laporan, dan analisis (bisa diekspor ke excel)</li><li>Ekspor-Impor data guru dan siswa</li></ul><div><b><span style="font-size: large;">Download ASKIN</span></b></div><div>Saya menawarkan harga untuk aplikasi <b>ASKIN</b>. Setiap pembelian valid, maka seterusnya tidak perlu membayar alias <b>GRATIS</b> jika ada update patch dan bug. Untuk pembelian dan detail harga, silahkan <a href="https://teziger.blogspot.com/p/contact-us_62.html"><b>Hubungi Kami</b></a>, atau telp/wa <b>+6281379947983. </b>(FAST RESPONSE 24 Jam)<b>.</b></div><div><br /></div><div><b>Screenshot:</b></div><div><br /></div><div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-DpgBPDqXTWE/YQAWN9Za0ZI/AAAAAAAALVw/lziWIBXEYlcHskrJfhoh_R2HrZJVRyiEwCLcBGAsYHQ/login.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="563" data-original-width="1166" height="310" src="https://lh3.googleusercontent.com/-DpgBPDqXTWE/YQAWN9Za0ZI/AAAAAAAALVw/lziWIBXEYlcHskrJfhoh_R2HrZJVRyiEwCLcBGAsYHQ/w640-h310/login.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Halaman Login</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-g3EtUxwfCfo/YQAWbvsk6qI/AAAAAAAALWM/D-bC3BbP5WI-zrS6ZeCZjRfthNaatlxkwCLcBGAsYHQ/dasbor.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="564" data-original-width="944" height="382" src="https://lh3.googleusercontent.com/-g3EtUxwfCfo/YQAWbvsk6qI/AAAAAAAALWM/D-bC3BbP5WI-zrS6ZeCZjRfthNaatlxkwCLcBGAsYHQ/w640-h382/dasbor.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Dasbor</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-R8OWk8ljB-Q/YQAWiaOCUTI/AAAAAAAALWU/Fa0Fbs8F_IswSxESidxbYfTG_vlYX3fqgCLcBGAsYHQ/buat-angket.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="710" data-original-width="577" height="640" src="https://lh3.googleusercontent.com/-R8OWk8ljB-Q/YQAWiaOCUTI/AAAAAAAALWU/Fa0Fbs8F_IswSxESidxbYfTG_vlYX3fqgCLcBGAsYHQ/w520-h640/buat-angket.png" width="520" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Buat Angket</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-lQsr7_s1fic/YQAWpJ1NTGI/AAAAAAAALWc/jebOxJAp7EILp5UMpEe0fTT0ADpBJCDTgCLcBGAsYHQ/undangan-mengisi-angket.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="475" data-original-width="1202" height="253" src="https://lh3.googleusercontent.com/-lQsr7_s1fic/YQAWpJ1NTGI/AAAAAAAALWc/jebOxJAp7EILp5UMpEe0fTT0ADpBJCDTgCLcBGAsYHQ/undangan-mengisi-angket.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Undangan Mengisi Angket via Email</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-AD3skdqc4Hc/YQAWxyDIPRI/AAAAAAAALWg/4e4xdpYjL60XMIGRmvxL8pmc3RI4l3dwwCLcBGAsYHQ/submit-angket.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="690" data-original-width="958" height="460" src="https://lh3.googleusercontent.com/-AD3skdqc4Hc/YQAWxyDIPRI/AAAAAAAALWg/4e4xdpYjL60XMIGRmvxL8pmc3RI4l3dwwCLcBGAsYHQ/w640-h460/submit-angket.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Mengisi Angket</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-wlNTb9UNCyw/YQAW3Wg9CvI/AAAAAAAALWk/3F7plI0J2b0MCz1SQHurXBDhparcKM6fACLcBGAsYHQ/respon-angket.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="579" data-original-width="877" height="422" src="https://lh3.googleusercontent.com/-wlNTb9UNCyw/YQAW3Wg9CvI/AAAAAAAALWk/3F7plI0J2b0MCz1SQHurXBDhparcKM6fACLcBGAsYHQ/w640-h422/respon-angket.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Manajemen Respon Angket</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-MSKR9_uQPeM/YQAXbGJK6eI/AAAAAAAALW0/Tx1GKBxh2OsRv7QEnATSdrHjXxyvcP5NwCLcBGAsYHQ/laporan-angket.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="585" data-original-width="1100" height="340" src="https://lh3.googleusercontent.com/-MSKR9_uQPeM/YQAXbGJK6eI/AAAAAAAALW0/Tx1GKBxh2OsRv7QEnATSdrHjXxyvcP5NwCLcBGAsYHQ/w640-h340/laporan-angket.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Laporan Angket</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-wxOk3y24kxg/YQAY3bHA04I/AAAAAAAALXw/81uxaqfbnOAAoEzhq6lQL4COnJj9qhqjwCLcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1080" data-original-width="1920" height="360" src="https://lh3.googleusercontent.com/-wxOk3y24kxg/YQAY3bHA04I/AAAAAAAALXw/81uxaqfbnOAAoEzhq6lQL4COnJj9qhqjwCLcBGAsYHQ/w640-h360/image.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Rekap Respon (Export Excel)</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-wAYR7JkbyZ4/YQAXiG3XteI/AAAAAAAALW4/yKN2KI9nERY15VRbURm_XaC-ypP5r1BXQCLcBGAsYHQ/pengaturan-hak-akses-aplikasi.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="577" data-original-width="969" height="382" src="https://lh3.googleusercontent.com/-wAYR7JkbyZ4/YQAXiG3XteI/AAAAAAAALW4/yKN2KI9nERY15VRbURm_XaC-ypP5r1BXQCLcBGAsYHQ/w640-h382/pengaturan-hak-akses-aplikasi.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Pengaturan Hak Akses</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-ddm6ya_ThQI/YQAXicGAy4I/AAAAAAAALXA/Ne1IBu3g_BsLeStwV5sAZCmUmza_6vVYQCLcBGAsYHQ/pengaturan-aplikasi.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="700" data-original-width="599" height="640" src="https://lh3.googleusercontent.com/-ddm6ya_ThQI/YQAXicGAy4I/AAAAAAAALXA/Ne1IBu3g_BsLeStwV5sAZCmUmza_6vVYQCLcBGAsYHQ/w547-h640/pengaturan-aplikasi.png" width="547" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Pengaturan Aplikasi</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-eoXpd7weZSA/YQAXiJaLF3I/AAAAAAAALW8/29j2t9WGtQkytRTJQ79X5_7p78JtNOEuwCLcBGAsYHQ/pengaturan-akun.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="554" data-original-width="1148" height="308" src="https://lh3.googleusercontent.com/-eoXpd7weZSA/YQAXiJaLF3I/AAAAAAAALW8/29j2t9WGtQkytRTJQ79X5_7p78JtNOEuwCLcBGAsYHQ/w640-h308/pengaturan-akun.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Pengaturan Akun</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-YpY_xuxUUjc/YQAX4ZYa__I/AAAAAAAALXc/HJZqhvW3gdMuxvi5Mv4Gsc3Yra1yg6bUwCLcBGAsYHQ/data-master-siswa.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="706" data-original-width="797" height="567" src="https://lh3.googleusercontent.com/-YpY_xuxUUjc/YQAX4ZYa__I/AAAAAAAALXc/HJZqhvW3gdMuxvi5Mv4Gsc3Yra1yg6bUwCLcBGAsYHQ/w640-h567/data-master-siswa.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Data Master Siswa</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-_arn2tZL10A/YQAX4c7rIrI/AAAAAAAALXU/2KZOVY4-yRE32jTObTXxslSw9Td54goNgCLcBGAsYHQ/data-master-kelas.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="678" data-original-width="764" height="569" src="https://lh3.googleusercontent.com/-_arn2tZL10A/YQAX4c7rIrI/AAAAAAAALXU/2KZOVY4-yRE32jTObTXxslSw9Td54goNgCLcBGAsYHQ/w640-h569/data-master-kelas.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Data Master Kelas</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-QxxsShgiQ7c/YQAX4dieXGI/AAAAAAAALXY/Q3i_XQtHVW4K4nriv0ifPJUpFexlHluOgCLcBGAsYHQ/data-master-kategori.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="577" data-original-width="864" height="428" src="https://lh3.googleusercontent.com/-QxxsShgiQ7c/YQAX4dieXGI/AAAAAAAALXY/Q3i_XQtHVW4K4nriv0ifPJUpFexlHluOgCLcBGAsYHQ/w640-h428/data-master-kategori.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Data Master Kategori Angket</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://lh3.googleusercontent.com/-qBBAAiT_qJI/YQAYdWk5_eI/AAAAAAAALXo/YfC0DRRvp24WlXFd95SpoUgZF9DyYYulwCLcBGAsYHQ/image.png" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="936" data-original-width="1920" height="312" src="https://lh3.googleusercontent.com/-qBBAAiT_qJI/YQAYdWk5_eI/AAAAAAAALXo/YfC0DRRvp24WlXFd95SpoUgZF9DyYYulwCLcBGAsYHQ/w640-h312/image.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Data Master Guru</td></tr></tbody></table><br /><div><b><span style="font-size: large;">Download ASKIN</span></b></div><div>Saya menawarkan harga untuk aplikasi <b>ASKIN</b>. Setiap pembelian valid, maka seterusnya tidak perlu membayar alias <b>GRATIS</b> jika ada update patch dan bug. Untuk pembelian dan detail harga, silahkan <a href="https://teziger.blogspot.com/p/contact-us_62.html"><b>Hubungi Kami</b></a>, atau telp/wa <b>+6281379947983. </b>(FAST RESPONSE 24 Jam)<b>.</b></div></div>Tegar Santosahttp://www.blogger.com/profile/17647853501258724853noreply@blogger.com0