<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[404D]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>https://blog.uripsub.dev/</link><image><url>https://blog.uripsub.dev/favicon.png</url><title>404D</title><link>https://blog.uripsub.dev/</link></image><generator>Ghost 5.2</generator><lastBuildDate>Mon, 20 Apr 2026 01:22:30 GMT</lastBuildDate><atom:link href="https://blog.uripsub.dev/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Setup PaaS on Your Server with Caprover]]></title><description><![CDATA[<p>Halo guys, jumpa lagi dengan saya iman, kali ini kita akan mencoba menginstall caprover di server. Caprover ini apa sih bang? caprover adalah salah satu platform as a service yang mana dapat membantu kita dalam mendeploy aplikasi ke server.</p><p>Saya yakin temen2 sudah familiar dengan vercel atau heroku. Nah ini</p>]]></description><link>https://blog.uripsub.dev/install-caprover/</link><guid isPermaLink="false">636ec16b4fab33000190a6c9</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Sun, 02 Oct 2022 21:45:00 GMT</pubDate><media:content url="https://blog.uripsub.dev/content/images/2022/11/caprover_thumbnail.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.uripsub.dev/content/images/2022/11/caprover_thumbnail.png" alt="Setup PaaS on Your Server with Caprover"><p>Halo guys, jumpa lagi dengan saya iman, kali ini kita akan mencoba menginstall caprover di server. Caprover ini apa sih bang? caprover adalah salah satu platform as a service yang mana dapat membantu kita dalam mendeploy aplikasi ke server.</p><p>Saya yakin temen2 sudah familiar dengan vercel atau heroku. Nah ini mirip2 dengan vercel dan heroku, cuma ini bisa kita install di server kita sendiri. sehingga kita bisa memanage/menentukan resourcenya sesuai dengan kebutuhan kita.</p><p>oke mungkin segitu aja penjelasan singkatnya. kita langsung aja ke proses instalasinya. Sebelumnya pastikan temen2 punya vps dan domain &#xA0;ya</p><h3 id="install-docker"><u>Install Docker</u></h3><pre><code>sudo apt update &amp;&amp; sudo apt install -y ca-certificates curl gnupg lsb-release

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
 
echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null

## install docker
sudo apt-get update &amp;&amp; sudo apt install docker-ce docker-ce-cli containerd.io -y


## create docker user group
sudo usermod -aG docker $USER &amp;&amp; newgrp docker</code></pre><h3 id="install-caprover"><u>Install Caprover</u></h3><pre><code class="language-bash">docker run -e MAIN_NODE_IP_ADDRESS=&lt;your-ip-public&gt; -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover
</code></pre><h3 id="add-dns-record"><u>Add DNS Record</u></h3><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Type</th>
<th style="text-align:center">Host</th>
<th style="text-align:right">Points To</th>
</tr>
</thead>
<tbody>
<tr>
<td>A record</td>
<td style="text-align:center">*.something</td>
<td style="text-align:right">Public IP of your server</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="install-caprover-cli-on-your-local-mechine"><u>Install Caprover CLI on Your Local Mechine</u></h3><p>Saya asumsikan anda telah menginstall npm di local machine anda (e.g., laptop), kemudian jalankan command berikut (tambahkan <code>sudo</code> jika perlu):</p><pre><code class="language-bash"> npm install -g caprover
</code></pre><p>Lalu jalankan:</p><pre><code class="language-bash"> caprover serversetup</code></pre>]]></content:encoded></item><item><title><![CDATA[Install SpeedTest di OpenWRT]]></title><description><![CDATA[<p>Siapa yang belum pernah melakukan speedtest, saya yakin temen-temen semua pasti pernah melakukannya, entah itu di okla (speedtest.net) atau website lainnya. Tahukah temen-temen kalau okla speedtest (speedtest.net) menyediakan speedtest-cli yang bisa kita install di openWRT (router) kita?.</p><p>Binarinya bisa cek di situsnya Apps &gt; CLI &gt; Download for</p>]]></description><link>https://blog.uripsub.dev/install-speedtest-di-openwrt/</link><guid isPermaLink="false">63042b73af21870001d741a5</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Tue, 23 Aug 2022 01:46:17 GMT</pubDate><media:content url="https://blog.uripsub.dev/content/images/2022/08/Thumbnail.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.uripsub.dev/content/images/2022/08/Thumbnail.png" alt="Install SpeedTest di OpenWRT"><p>Siapa yang belum pernah melakukan speedtest, saya yakin temen-temen semua pasti pernah melakukannya, entah itu di okla (speedtest.net) atau website lainnya. Tahukah temen-temen kalau okla speedtest (speedtest.net) menyediakan speedtest-cli yang bisa kita install di openWRT (router) kita?.</p><p>Binarinya bisa cek di situsnya Apps &gt; CLI &gt; Download for linux, atau langsung bisa <a href="https://www.speedtest.net/apps/cli" rel="noreferrer noopener">disini</a>.</p><figure class="kg-card kg-image-card"><img src="https://radenku.com/wp-content/uploads/2022/03/speedtest-cli-ookla-linux-openwrt.webp?ezimgfmt=rs%3Adevice%2Frscb1-1" class="kg-image" alt="Install SpeedTest di OpenWRT" loading="lazy" title="Cara Install Speedtest CLI Openwrt | RADENKU"></figure><p>Untuk ookla speedtest cli hanya support untuk arsitektur diatas, sesuaikan dengan cpu router kalian. Di bawah contoh beberapa router:</p><ul><li>i386: PC &amp; laptop intel/amd 32 bit</li><li>x86_64: PC &amp; laptop intel/amd 64 bit</li><li>armel</li><li>armhf: Raspberry pi 1, 2, Orange pi zero, Glinet B1300</li><li>aarch64: Raspberry pi 3, 4, Nanopi R2S, Orange pi R1 Plus, STB HG680P, B860H</li></ul><p>Untuk cara install speedtest cli openwrt bisa ikuti berikut.</p><pre><code class="language-bash"># ambil link sesuai arch
wget --no-check-certificate https://install.speedtest.net/app/cli/ookla-speedtest-1.1.1-linux-aarch64.tgz -O /tmp/speedtest.tgz

# extract
tar -xzvf /tmp/speedtest.tgz -C /usr/bin/

# jadikan executable
chmod +x /usr/bin/speedtest

# jalankan
speedtest</code></pre>]]></content:encoded></item><item><title><![CDATA[GetContact API]]></title><description><![CDATA[<p>Pernah gak sih temen-temen diteror melalui telepon/sms dan kita gak tau itu nomor siapa karena tidak ada di kontak hp kita. Tentunya kita akan penasaran dan mencoba mencari tahu siapa pemilik nomor tersebut kan, bisa dengan bertanya ke sodara, kerabat, atau bahkan pacar. Atau bisa juga teman-teman memanfaatkan aplikasi</p>]]></description><link>https://blog.uripsub.dev/getcontact-api/</link><guid isPermaLink="false">62e6afd7886f5900015f78fc</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Sun, 31 Jul 2022 17:04:18 GMT</pubDate><media:content url="https://blog.uripsub.dev/content/images/2022/07/getcontactjpg-20220518111822.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.uripsub.dev/content/images/2022/07/getcontactjpg-20220518111822.jpg" alt="GetContact API"><p>Pernah gak sih temen-temen diteror melalui telepon/sms dan kita gak tau itu nomor siapa karena tidak ada di kontak hp kita. Tentunya kita akan penasaran dan mencoba mencari tahu siapa pemilik nomor tersebut kan, bisa dengan bertanya ke sodara, kerabat, atau bahkan pacar. Atau bisa juga teman-teman memanfaatkan aplikasi caller id seperti getcontact atau truecaller. </p><p>Namun kalau saran saya jangan, kenapa? karena cara kerja aplikasi tersebut adalah dengan mengambil data list kontak di hp kita dan menyimpannya di server (database) mereka untuk nantinya akan mereka gunakan jika ada pengguna mereka melakukan pencarian nomor tertentu yang terdapat di list kontak kita. Namun, kita gak pernah tahu sebenarnya data kita akan dimanfaatkan oleh mereka seperti apa.</p><p>Lalu gimana dong? cara teraman untuk menggunakan layanan mereka adalah dengan memanfaatkan langsung api dari aplikasi mereka tanpa perlu menginstall aplikasinya di hp kita. </p><p>Beberapa waktu lalu saya sempat mencoba mengintip api dari aplikasi getcontact dan membaca beberapa source code dari github, hingga akhirnya berhasil membuat semacam api wrapper sederhana yang dapat kita gunakan untuk mencari tahu pemilik dari suatu nomor telepon.</p><p>Berikut github reponya: <a href="https://github.com/subekti404dev/urip-getcontact">https://github.com/subekti404dev/urip-getcontact</a></p><p>Namun untuk menggunakan api tersebut kita memerlukan token dan finalKey yang bisa kita dapatkan ketika kita login ke aplikasinya. Nah, caranya gimana supaya kita bisa install dan login ke aplikasi getcontact secara aman tanpa harus kecolongan data?</p><p>Simple, kita install aja aplikasi getcontact di android emulator, setelah itu login (buat akun). Lalu dengan menggunakan root explorer buka file <code>/data/data/app.source.getcontact/shared_prefs/GetContactSettingsPref.xml</code></p><p>cari value dari token dan finalKey didalam file tersebut. Terus? baca <a href="https://github.com/subekti404dev/urip-getcontact/blob/main/README.md">readme</a> di reponya ya!</p><p>video:</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/sFuAMxQLVdg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen title="Cara Memanfaatkan Getcontact API"></iframe></figure><p> &#xA0;</p>]]></content:encoded></item><item><title><![CDATA[Setup Trojan-Go server]]></title><description><![CDATA[<p>berikut adalah langkah-langkah untuk membuat server trojan vpn anda sendiri. Semoga bermanfaat.</p><h2 id="buat-docker-compose-configuration-file"><strong>Buat Docker-Compose configuration file</strong></h2><pre><code class="language-bash">mkdir -p ~/trojan-go/
nano ~/trojan-go/docker-compose.yml</code></pre><pre><code class="language-docker-compose.yml">version: &apos;3.5&apos;
services:
  trojan-server:
    container_name: trojan-server
    image: p4gefau1t/trojan-go
    volumes:
      - type: bind
        source: ./config/trojan/config.json
        target: /etc/trojan/config.json</code></pre>]]></description><link>https://blog.uripsub.dev/setup-trojan-go-server/</link><guid isPermaLink="false">62d78b4b886f5900015f7866</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Wed, 20 Jul 2022 05:20:17 GMT</pubDate><media:content url="https://blog.uripsub.dev/content/images/2022/07/5068978.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.uripsub.dev/content/images/2022/07/5068978.jpg" alt="Setup Trojan-Go server"><p>berikut adalah langkah-langkah untuk membuat server trojan vpn anda sendiri. Semoga bermanfaat.</p><h2 id="buat-docker-compose-configuration-file"><strong>Buat Docker-Compose configuration file</strong></h2><pre><code class="language-bash">mkdir -p ~/trojan-go/
nano ~/trojan-go/docker-compose.yml</code></pre><pre><code class="language-docker-compose.yml">version: &apos;3.5&apos;
services:
  trojan-server:
    container_name: trojan-server
    image: p4gefau1t/trojan-go
    volumes:
      - type: bind
        source: ./config/trojan/config.json
        target: /etc/trojan/config.json
      - type: bind
        source: ./config/trojan/cert.pem
        target: /etc/trojan/cert.pem
      - type: bind
        source: ./config/trojan/private.key
        target: /etc/trojan/private.key
    ports:
      - 443:443
    command: [&quot;trojan-go&quot;, &quot;-config&quot;, &quot;/etc/trojan/config.json&quot;]
    restart: unless-stopped
  trojan-nginx:
    container_name: trojan-nginx
    image: nginx:alpine
    volumes:
      - type: bind
        source: ./config/nginx/nginx.conf
        target: /etc/nginx/conf.d/default.conf
    restart: unless-stopped</code></pre><p>Tekan <code>CTRL+X</code>, <code>Y</code>, <code>ENTER</code> untuk save and exit <code>nano</code> text editor.</p><h2 id="buat-nginx-configuration-file"><strong>Buat NGINX configuration file.</strong></h2><pre><code class="language-bash">mkdir -p ~/trojan-go/config/nginx/
nano ~/trojan-go/config/nginx/nginx.conf</code></pre><pre><code class="language-nginx.conf">server {
    listen      80 default_server;
    server_name _;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

server {
    listen 8080	http2;
    server_name	_;
    return	400;
}</code></pre><h2 id="buat-trojan-go-configuration-file"><strong>Buat Trojan-Go configuration file.</strong></h2><pre><code class="language-bash">mkdir -p ~/trojan-go/config/trojan/
nano ~/trojan-go/config/trojan/config.json</code></pre><pre><code class="language-config.json">{
  &quot;run_type&quot;: &quot;server&quot;,
  &quot;local_addr&quot;: &quot;0.0.0.0&quot;,
  &quot;local_port&quot;: 443,
  &quot;remote_addr&quot;: &quot;trojan-nginx&quot;,
  &quot;remote_port&quot;: 80,
  &quot;log_level&quot;: 2,
  &quot;log_file&quot;: &quot;&quot;,
  &quot;password&quot;: [
    &quot;your_password_here&quot;
  ],
  &quot;disable_http_check&quot;: false,
  &quot;udp_timeout&quot;: 60,
  &quot;ssl&quot;: {
    &quot;verify&quot;: true,
    &quot;verify_hostname&quot;: false,
    &quot;cert&quot;: &quot;/etc/trojan/cert.pem&quot;,
    &quot;key&quot;: &quot;/etc/trojan/private.key&quot;,
    &quot;key_password&quot;: &quot;&quot;,
    &quot;cipher&quot;: &quot;&quot;,
    &quot;curves&quot;: &quot;&quot;,
    &quot;prefer_server_cipher&quot;: false,
    &quot;sni&quot;: &quot;your-domain.com&quot;,
    &quot;alpn&quot;: [
      &quot;h2&quot;
    ],
    &quot;session_ticket&quot;: true,
    &quot;reuse_session&quot;: true,
    &quot;plain_http_response&quot;: &quot;&quot;,
    &quot;fallback_addr&quot;: &quot;&quot;,
    &quot;fallback_port&quot;: 0,
    &quot;fingerprint&quot;: &quot;firefox&quot;
  },
  &quot;tcp&quot;: {
    &quot;no_delay&quot;: true,
    &quot;keep_alive&quot;: true,
    &quot;prefer_ipv4&quot;: true
  },
  &quot;mux&quot;: {
    &quot;enabled&quot;: true,
    &quot;concurrency&quot;: 64,
    &quot;idle_timeout&quot;: 60
  },
  &quot;router&quot;: {
    &quot;enabled&quot;: false,
    &quot;bypass&quot;: [],
    &quot;proxy&quot;: [],
    &quot;block&quot;: [],
    &quot;default_policy&quot;: &quot;proxy&quot;,
    &quot;domain_strategy&quot;: &quot;as_is&quot;,
    &quot;geoip&quot;: &quot;$PROGRAM_DIR$/geoip.dat&quot;,
    &quot;geosite&quot;: &quot;$PROGRAM_DIR$/geosite.dat&quot;
  },
  &quot;websocket&quot;: {
    &quot;enabled&quot;: true,
    &quot;path&quot;: &quot;/websocket&quot;,
    &quot;host&quot;: &quot;your-domain.com&quot;
  },
  &quot;shadowsocks&quot;: {
    &quot;enabled&quot;: false,
    &quot;method&quot;: &quot;AES-128-GCM&quot;,
    &quot;password&quot;: &quot;&quot;
  },
  &quot;transport_plugin&quot;: {
    &quot;enabled&quot;: false,
    &quot;type&quot;: &quot;&quot;,
    &quot;command&quot;: &quot;&quot;,
    &quot;plugin_option&quot;: &quot;&quot;,
    &quot;arg&quot;: [],
    &quot;env&quot;: []
  },
  &quot;forward_proxy&quot;: {
    &quot;enabled&quot;: false,
    &quot;proxy_addr&quot;: &quot;&quot;,
    &quot;proxy_port&quot;: 0,
    &quot;username&quot;: &quot;&quot;,
    &quot;password&quot;: &quot;&quot;
  },
  &quot;mysql&quot;: {
    &quot;enabled&quot;: false,
    &quot;server_addr&quot;: &quot;localhost&quot;,
    &quot;server_port&quot;: 3306,
    &quot;database&quot;: &quot;&quot;,
    &quot;username&quot;: &quot;&quot;,
    &quot;password&quot;: &quot;&quot;,
    &quot;check_rate&quot;: 60
  },
  &quot;api&quot;: {
    &quot;enabled&quot;: false,
    &quot;api_addr&quot;: &quot;&quot;,
    &quot;api_port&quot;: 0,
    &quot;ssl&quot;: {
      &quot;enabled&quot;: false,
      &quot;key&quot;: &quot;&quot;,
      &quot;cert&quot;: &quot;&quot;,
      &quot;verify_client&quot;: false,
      &quot;client_cert&quot;: []
    }
  }
}</code></pre><p>Beberapa hal yang perlu kalian edit sebagai berikut:</p><h3 id="password">Password</h3><pre><code>&quot;password&quot;: [
  &quot;your_password_here&quot;
],</code></pre><h3 id="sni">SNI</h3><pre><code>&quot;sni&quot;: &quot;your-domain.com&quot;,</code></pre><h3 id="websocket-path-dan-host-name">Websocket path dan host-name</h3><pre><code>&quot;websocket&quot;: {
    &quot;enabled&quot;: true,
    &quot;path&quot;: &quot;/websocket&quot;,
    &quot;host&quot;: &quot;your-domain.com&quot;
  },</code></pre><h2 id="obtain-keys-from-cloudflare"><strong>Obtain keys from Cloudflare</strong></h2><p>Masuk ke Cloudflare. Buka menu <code>SSL/TLS</code> pada halaman domain kalian.</p><p>Pilih <code>Full</code>. </p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/07/2022-07-20_12-02.png" class="kg-image" alt="Setup Trojan-Go server" loading="lazy" width="1197" height="690" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/07/2022-07-20_12-02.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/07/2022-07-20_12-02.png 1000w, https://blog.uripsub.dev/content/images/2022/07/2022-07-20_12-02.png 1197w" sizes="(min-width: 720px) 720px"></figure><p>Pergi ke sub menu <code>Origin Server</code>.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/07/2022-07-20_12-09.png" class="kg-image" alt="Setup Trojan-Go server" loading="lazy" width="1226" height="715" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/07/2022-07-20_12-09.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/07/2022-07-20_12-09.png 1000w, https://blog.uripsub.dev/content/images/2022/07/2022-07-20_12-09.png 1226w" sizes="(min-width: 720px) 720px"></figure><p>Biarkan <code>Authenticated Origin Pulls</code> tetap <code>Off</code>, klik tombol <code>Create Certificate</code> .</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/07/2022-07-20_12-10.png" class="kg-image" alt="Setup Trojan-Go server" loading="lazy" width="970" height="873" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/07/2022-07-20_12-10.png 600w, https://blog.uripsub.dev/content/images/2022/07/2022-07-20_12-10.png 970w" sizes="(min-width: 720px) 720px"></figure><p>Biarkan saja semua. Klik <code>Create</code></p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/07/image-16.png" class="kg-image" alt="Setup Trojan-Go server" loading="lazy" width="829" height="404" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/07/image-16.png 600w, https://blog.uripsub.dev/content/images/2022/07/image-16.png 829w" sizes="(min-width: 720px) 720px"></figure><pre><code class="language-bash">nano ~/trojan-go/config/trojan/cert.pem</code></pre><p>Copy isi dari <code>Origin Certificate</code> ke file <code>cert.pem</code>.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/07/image-17.png" class="kg-image" alt="Setup Trojan-Go server" loading="lazy" width="816" height="176" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/07/image-17.png 600w, https://blog.uripsub.dev/content/images/2022/07/image-17.png 816w" sizes="(min-width: 720px) 720px"></figure><pre><code class="language-bash">nano ~/trojan-go/config/trojan/private.key</code></pre><p>Copy isi dari <code>Private key</code> ke file <code>private.key</code>.</p><h2 id="point-the-domain-name-to-your-server"><strong>Point the domain-name to your server</strong></h2><p>Buka menu <code>DNS</code> .</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/07/2022-07-20_12-07.png" class="kg-image" alt="Setup Trojan-Go server" loading="lazy" width="1233" height="476" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/07/2022-07-20_12-07.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/07/2022-07-20_12-07.png 1000w, https://blog.uripsub.dev/content/images/2022/07/2022-07-20_12-07.png 1233w" sizes="(min-width: 720px) 720px"></figure><p>Klik <code>+ Add record</code> tambahkan 2 record berikut.</p><ul><li>Type <code>A</code>, name <code>@</code>, content <code>SERVER-IP-ADDRESS</code></li><li>Type <code>CNAME</code>, name <code>www</code>, content <code>YOUR-DOMAIN-NAME</code></li></ul><p>Keduanya harus di set ke <code>Proxied</code> agar semua orang hanya melihat IP dari Cloudflare CDN.</p><h2 id="start-trojan-go"><strong>Start Trojan-Go</strong></h2><pre><code class="language-bash">cd ~/trojan-go/
docker-compose up -d</code></pre><figure class="kg-card kg-image-card"><img src="https://thematrix.dev/content/images/2020/08/image-19.png" class="kg-image" alt="Setup Trojan-Go server" loading="lazy"></figure>]]></content:encoded></item><item><title><![CDATA[Sync Google Drive with Github Action]]></title><description><![CDATA[<p>Oke guys, di artikel sebelumnya kita bahas tentang <a href="https://blog.uripsub.dev/download-torrent-via-github-action/">mendownload torrent ke google drive via Github Action</a>, kali ini kita akan menggunakannya untuk synchronize data dari satu akun drive ke akun lainnya. </p><p>Synchronization data ini berguna bagi anda untuk membackup data ke akun google drive yang lain, untuk mengantisipasi data kita</p>]]></description><link>https://blog.uripsub.dev/sync-google-drive-with-github-action/</link><guid isPermaLink="false">62a98d3c60afb10001bd90cc</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Wed, 15 Jun 2022 09:43:02 GMT</pubDate><media:content url="https://blog.uripsub.dev/content/images/2022/06/Thumbnail-Youtube-Makeup-Waktu-Singkat-Kolase-Putih.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.uripsub.dev/content/images/2022/06/Thumbnail-Youtube-Makeup-Waktu-Singkat-Kolase-Putih.png" alt="Sync Google Drive with Github Action"><p>Oke guys, di artikel sebelumnya kita bahas tentang <a href="https://blog.uripsub.dev/download-torrent-via-github-action/">mendownload torrent ke google drive via Github Action</a>, kali ini kita akan menggunakannya untuk synchronize data dari satu akun drive ke akun lainnya. </p><p>Synchronization data ini berguna bagi anda untuk membackup data ke akun google drive yang lain, untuk mengantisipasi data kita hilang atau akun google kita di suspend oleh administrator, seperti pengalaman saya beberapa bulan yang lalu akun google drive kampus saya tiba-tiba tidak dapat diakses lagi karena disuspend oleh adminnya, padahal didalamnya masih terdapat data-data yang lumayan penting.</p><p>Oke ya langsung saja ke caranya:</p><p><strong><u>Siapkan 2 Akun Google Drive</u></strong></p><p>pertama kita perlu siapkan 2 akun google drive ya, akun pertama sebagai source (berisi data yang akan di duplicate/backup) dan akun kedua sebagai target (tempat untuk menyimpan hasil duplication/backup).</p><p><strong><u>Google Drive Project</u></strong></p><p>Selanjutnya buat project di google console seperti pada artikel <a href="https://blog.uripsub.dev/download-torrent-via-github-action/">ini</a> ya (atau gunakan kembali juga sudah buat), jangan lupa tambahkan 2 email dari akun google drive temen2.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/Screen-Shot-2022-06-15-at-16.11.04.png" class="kg-image" alt="Sync Google Drive with Github Action" loading="lazy" width="2000" height="971" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/Screen-Shot-2022-06-15-at-16.11.04.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/Screen-Shot-2022-06-15-at-16.11.04.png 1000w, https://blog.uripsub.dev/content/images/size/w1600/2022/06/Screen-Shot-2022-06-15-at-16.11.04.png 1600w, https://blog.uripsub.dev/content/images/size/w2400/2022/06/Screen-Shot-2022-06-15-at-16.11.04.png 2400w" sizes="(min-width: 720px) 720px"></figure><p> setelah itu kita simpan <code>client_id</code> dan <code>client_secret</code> nya.</p><p><strong><u>Generate Token</u></strong></p><p>Oke setelah kita buat project, langkah selanjutnya adalah generate token. silahkan buka <a href="https://developers.google.com/oauthplayground">https://developers.google.com/oauthplayground</a></p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-29.png" class="kg-image" alt="Sync Google Drive with Github Action" loading="lazy"></figure><p>Klik icon setting &gt; centang <code>Use your own OAuth credentials</code> &gt; masukkan <code>Client ID</code> &amp; <code>Client Secret</code> kalian &gt; klik <code>close</code>.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-33.png" class="kg-image" alt="Sync Google Drive with Github Action" loading="lazy"></figure><p>di bagian API, scroll dan pilih <code>Drive API v3</code> &gt; centang <code>https://googleapis.com/auth/drive</code> &gt; klik tombol <code>Authorize API</code>.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-36.png" class="kg-image" alt="Sync Google Drive with Github Action" loading="lazy"></figure><p>Pilih email yang dimasukkan ke test users tadi ya</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-37.png" class="kg-image" alt="Sync Google Drive with Github Action" loading="lazy"></figure><p>pilih email project kalian &gt; klik <code>Allow</code></p><p>Silahkan copy token seperti yang saya tandai ini ya:</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-15_16-17.png" class="kg-image" alt="Sync Google Drive with Github Action" loading="lazy" width="1744" height="835" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-15_16-17.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-15_16-17.png 1000w, https://blog.uripsub.dev/content/images/size/w1600/2022/06/2022-06-15_16-17.png 1600w, https://blog.uripsub.dev/content/images/2022/06/2022-06-15_16-17.png 1744w" sizes="(min-width: 720px) 720px"></figure><p>buka <a href="https://jsonformatter.org">https://jsonformatter.org</a>, paste kan json tokennya, lalu klik <code>minify</code></p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-16_06-59-1.png" class="kg-image" alt="Sync Google Drive with Github Action" loading="lazy" width="1242" height="970" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-16_06-59-1.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-16_06-59-1.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-16_06-59-1.png 1242w" sizes="(min-width: 720px) 720px"></figure><p>nah, hasil minify inilah yang akan kita gunakan, jadi kita copy dan simpan ya. Lakukan generate token ini ke kedua akun temen2 ya.</p><p><strong><u>Buat Github Actions</u></strong></p><p>Buat new project, pastikan visibility nya public ya. lalu buat file dengan path <code>.github/workflows/sync-drivc.yml</code>. lalu isikan code berikut:</p><pre><code>name: Drive Sync
on:
  workflow_dispatch:
env:
  SCRIPT_URL: https://gist.githubusercontent.com/subekti404dev/3297651428c31b813c06857f88f19365/raw/7c9b1d0bf75536c2acf9ec852ec67a38d7d021ef/drive_init_config
  SOURCE_DIR: &quot;design-code&quot;
  TARGET_DIR: &quot;&quot;
jobs:
  download:
    runs-on: ubuntu-latest
    steps:
       
        - name: Write .env File
          run: echo &apos;${{ secrets.DOTENV_DRIVE_SYNC }}&apos; &gt;&gt; .env &amp;&amp; cat .env
          
        - name: Download Script &amp;&amp; Install
          run: curl &quot;$SCRIPT_URL&quot; | bash
          
        - name: Mount Drive
          run:  bash mount.sh
          
        - run: cd drive1 &amp;&amp; ls -lah
        - run: cd drive2 &amp;&amp; ls -lah
        
        - run: rsync -auvr --progress drive1/&quot;$SOURCE_DIR&quot; drive2/&quot;$TARGET_DIR&quot;
</code></pre><p>ganti <code>SOURCE_DIR</code> nama folder yang akan di sync (dari drive 1) dan <code>TARGET_DIR</code> isi dengan nama folder tempat untuk menyimpan data (dari drive 2), isi dengan empty string (&quot;&quot;) jika mau menaruhnya di root directory.</p><p>Setelah itu pergi ke tab <code>Setting</code> &gt; pilih menu <code>Secrets</code> &gt; Pilih sub menu <code>Actions</code> &gt; klik tombol <code>New Repository secret</code>.</p><p>di field <code>Name</code> isikan <code>DOTENV_DRIVE_SYNC</code> , lalu di field <code>Value</code> isikan variable berikut:</p><pre><code>CLIENT_ID=
CLIENT_SECRET=
TOKEN_1=
TOKEN_2=</code></pre><p>isi <code>Client ID</code> dan <code>Client Secret</code>dengan punya kalian ya (yang didapat dari langkah sebelumnya). Untuk <code>TOKEN_1</code> isi dengan token yang sudah di minify dari akun google drive 1 (source), <code>TOKEN_2</code> isi dengan minify token dari akun google 2 (target).</p><p><strong><u>Running Workflow</u></strong></p><p>Untuk menjalankan workflow, masuk ke tab <code>Actions</code> &gt; Pilih <code>Drive Sync</code> &gt; Klik Dropdown <code>Run Workflow</code> &#xA0;lalu terakhir klik tombol <code>Run workflow</code>.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-15_16-40.png" class="kg-image" alt="Sync Google Drive with Github Action" loading="lazy" width="1243" height="830" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-15_16-40.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-15_16-40.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-15_16-40.png 1243w" sizes="(min-width: 720px) 720px"></figure><p>Tinggal pantau lognya ya guys</p>]]></content:encoded></item><item><title><![CDATA[Download Torrent via Github Action]]></title><description><![CDATA[<p>Torrent merupakan salah satu cara berbagi file yang bersifat P2P (Peer to Peer), yang artinya ketika kita mendownload file melalui torrent kita membuka koneksi dengan komputer lain (peers) yang dalam hal ini cukup beresiko bagi komputer kita. Untuk menghindari resiko tersebut ada beberapa cara yang dapat kita lakukan seperti menggunakan</p>]]></description><link>https://blog.uripsub.dev/download-torrent-via-github-action/</link><guid isPermaLink="false">62a470873cb4210001d2485a</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Sat, 11 Jun 2022 14:46:44 GMT</pubDate><media:content url="https://blog.uripsub.dev/content/images/2022/06/Thumbnail-YouTube-Bertahan-Hidup-Pemain-Game-Hijau-Gelap.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.uripsub.dev/content/images/2022/06/Thumbnail-YouTube-Bertahan-Hidup-Pemain-Game-Hijau-Gelap.png" alt="Download Torrent via Github Action"><p>Torrent merupakan salah satu cara berbagi file yang bersifat P2P (Peer to Peer), yang artinya ketika kita mendownload file melalui torrent kita membuka koneksi dengan komputer lain (peers) yang dalam hal ini cukup beresiko bagi komputer kita. Untuk menghindari resiko tersebut ada beberapa cara yang dapat kita lakukan seperti menggunakan VPN atau dengan menggunakan virtual komputer (cloud computer).</p><p>Nah, pada kesempatan ini saya akan bagikan cara download torrent melalui cloud computer dengan memanfaatkan fitur dari Github Action. Untuk sistem kerjanya kurang lebih akan seperti berikut:</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/Untitled-2022-06-08-2332.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="678" height="292" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/Untitled-2022-06-08-2332.png 600w, https://blog.uripsub.dev/content/images/2022/06/Untitled-2022-06-08-2332.png 678w"></figure><p>Penjelasannya gini: Github action akan menjalankan docker container dari image <code>subekti13/torrent-downloader</code> yang mana didalamnya sudah terinstall transmission (torrent client) dan script untuk mendownload torrent ke dalam container lalu kemudian ketika proses download itu selesai, kita eksekusi script untuk mengunggahnya ke google drive dengan memanfaatkan API dari google drive. Jika teman2 penasaran dengan scriptnya bisa di cek di github saya (<a href="https://github.com/subekti404dev/torrent-downloader">https://github.com/subekti404dev/torrent-downloader</a>) </p><p>Oke tanpa basa-basi langsung saja kita persiapkan terlebih dahulu project di google console karena kita akan menggunakan API dari google drive.</p><p><strong><u>Buat Google Drive Project</u></strong></p><p>buka url berikut: <a href="https://console.cloud.google.com">https://console.cloud.google.com</a>, kemudian buat project baru </p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-40.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1231" height="907" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_19-40.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_19-40.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-40.png 1231w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-48.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="671" height="545" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_19-48.png 600w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-48.png 671w"></figure><p>masukkan nama project, lalu klik tombol <code>CREATE</code>.</p><p>Setelah itu pilih project yang sudah kita buat barusan, klik icon menu &gt; API &amp; Services &gt; Enabled API &amp; Services</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-44.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1249" height="937" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_19-44.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_19-44.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-44.png 1249w" sizes="(min-width: 720px) 720px"></figure><p>Setelah itu akan muncul tampilan berikut:</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-47.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1238" height="463" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_19-47.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_19-47.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-47.png 1238w" sizes="(min-width: 720px) 720px"></figure><p>Klik tombol <code>+ ENABLE APIS AND SERVICES</code>, kemudian kita akan diarahkan ke halaman berikut:</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-49.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1243" height="746" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_19-49.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_19-49.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-49.png 1243w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-52.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="796" height="366" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_19-52.png 600w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_19-52.png 796w" sizes="(min-width: 720px) 720px"></figure><p>ketikan <code>drive</code> di serach bar, lalu pilih <code>Google Drive API</code>. kemudian klik tombol <code>Enable</code></p><p>Selanjutnya kita setting oauth screen-nya, ikuti seperti gambar berikut ya guys:</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-13-1.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="805" height="528" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-13-1.png 600w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-13-1.png 805w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-15.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="620" height="835" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-15.png 600w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-15.png 620w"></figure><p>masukkan app name (terserah) dan email kalian ya.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-16.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="716" height="779" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-16.png 600w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-16.png 716w"></figure><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_23-42.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1271" height="811" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_23-42.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_23-42.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_23-42.png 1271w" sizes="(min-width: 720px) 720px"></figure><p>tambahkan test users email, gunakan email yang google drive-nya mau dipakai ya. </p><p>selanjutnya kita buat credentials..</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-18.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="743" height="480" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-18.png 600w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-18.png 743w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-19.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="778" height="810" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-19.png 600w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-19.png 778w" sizes="(min-width: 720px) 720px"></figure><p>Pilih <code>Web application</code> , masukkan <code>name</code> (terserah), tambahkan redirect url ke &#xA0;<a href="https://developers.google.com/oauthplayground"><code>https://developers.google.com/oauthplayground</code></a> lalu klik <code>CREATE</code></p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-20.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1231" height="790" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-20.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_20-20.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-20.png 1231w" sizes="(min-width: 720px) 720px"></figure><p>Simpan <code>Client ID</code> dan <code>Client Secret</code> kalian ya guys. nanti akan kalian butuhkan.</p><p><strong><u>Generate Token</u></strong></p><p>Oke setelah kita buat project, langkah selanjutnya adalah generate token. silahkan buka <a href="https://developers.google.com/oauthplayground">https://developers.google.com/oauthplayground</a></p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-29.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1213" height="886" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-29.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_20-29.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-29.png 1213w" sizes="(min-width: 720px) 720px"></figure><p>Klik icon setting &gt; centang <code>Use your own OAuth credentials</code> &gt; masukkan <code>Client ID</code> &amp; <code>Client Secret</code> kalian &gt; klik <code>close</code>.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-33.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="704" height="859" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-33.png 600w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-33.png 704w"></figure><p>di bagian API, scroll dan pilih <code>Drive API v3</code> &gt; centang <code>https://googleapis.com/auth/drive</code> &gt; klik tombol <code>Authorize API</code>.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-36.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1049" height="860" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-36.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_20-36.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-36.png 1049w" sizes="(min-width: 720px) 720px"></figure><p>Pilih email yang dimasukkan ke test users tadi ya</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-37.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1100" height="795" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-37.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_20-37.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-37.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>pilih email project kalian &gt; klik <code>Allow</code></p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-40.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1226" height="801" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-40.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_20-40.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-40.png 1226w" sizes="(min-width: 720px) 720px"></figure><p>klik tombol <code>Exchange authorization code for tokens</code> &gt; lalu akan muncul refresh token. kemudian copy dan simpan refresh token anda karena akan kita butuhkan nanti.</p><p><strong><u>Buat Github Repo Baru</u></strong></p><p>langkah selanjutnya silahkan buat repository baru di github anda dengan settingan public aja ya guys (workflow untuk repo public itu unlimited free hehe suka yang gratisan kan?).</p><p>tambahkan satu file baru di repo tersebut dengan path <code>.github/workflows/torrent.yml</code>. Isi file tersebut dengan code berikut:</p><pre><code class="language-yml">name: Docker Torrent Download
on:
  workflow_dispatch:
    inputs:
      url:
        description: &apos;Torrent file URL&apos;
        required: true
jobs:
  download:
    runs-on: ubuntu-latest
    container: subekti13/torrent-downloader:latest
    steps:
       
        - name: Write .env File
          run: |
              echo &apos;${{ secrets.DOTENV }}&apos; &gt;&gt; .env
        
          
        - name: Dowload File
          run: node /app/download.js ${{ github.event.inputs.url }}
      
        - name: LS
          run: cd /data &amp;&amp; ls -la
          
        - name: Upload to Drive
          run: node /app/upload.js</code></pre><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-51.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1228" height="705" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-51.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_20-51.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-51.png 1228w" sizes="(min-width: 720px) 720px"></figure><p>Setelah itu pergi ke tab <code>Setting</code> &gt; pilih menu <code>Secrets</code> &gt; Pilih sub menu <code>Actions</code> &gt; klik tombol <code>New Repository secret</code>.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-53.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1150" height="633" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-53.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_20-53.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-53.png 1150w" sizes="(min-width: 720px) 720px"></figure><p>di field <code>Name</code> isikan <code>DOTENV</code> , lalu di field <code>Value</code> isikan variable berikut:</p><pre><code>GA_DRIVE_CLIENT_ID=
GA_DRIVE_CLIENT_SECRET=
GA_DRIVE_REDIRECT_URL=https://developers.google.com/oauthplayground
GA_DRIVE_REFRESH_TOKEN=</code></pre><p>isi <code>Client ID</code>, <code>Client Secret</code>, dan <code>Refresh Token</code> dengan punya kalian ya (yang didapat dari langkah sebelumnya).</p><p>kemudian klik <code>Add Secret</code></p><p><strong><u>Running Workflow (Download Torrent)</u></strong></p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-59.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1215" height="525" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_20-59.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_20-59.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_20-59.png 1215w" sizes="(min-width: 720px) 720px"></figure><p>Untuk menjalankan workflow, masuk ke tab <code>Actions</code> &gt; Pilih <code>Docker Torrent Downloader</code> &gt; Klik Dropdown <code>Run Workflow</code> &gt; masukkan <code>Torrent file url</code> yang mau temen2 download &gt; lalu terakhir klik tombol <code>Run workflow</code>.</p><p>Tinggal pantau lognya ya guys</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_21-02.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1242" height="786" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_21-02.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_21-02.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_21-02.png 1242w" sizes="(min-width: 720px) 720px"></figure><p>Jika sudah selesai, silahkan teman2 masuk ke google drive dan lihat filenya disana</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/06/2022-06-11_21-04.png" class="kg-image" alt="Download Torrent via Github Action" loading="lazy" width="1239" height="699" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/06/2022-06-11_21-04.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/06/2022-06-11_21-04.png 1000w, https://blog.uripsub.dev/content/images/2022/06/2022-06-11_21-04.png 1239w" sizes="(min-width: 720px) 720px"></figure><p>Oke, segitu aja tutorial kali ini ya ... </p><p>See you :)</p><p>Video:</p><figure class="kg-card kg-embed-card"><iframe width="200" height="150" src="https://www.youtube.com/embed/mCNFhRvtyh8?start=530&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Yuk Hosting Sendiri ngrok-mu]]></title><description><![CDATA[<p>Siapa sih yang ga kenal ngrok? aku rasa semua developer khususnya web dev baik itu frontend atau backend pasti pernah menggunakan ngrok atau service semacamnya.</p><p>Singkatnya ngrok itu adalah service tunnel yang mana mampu meng-expose service dari local komputer (device) kita ke internet. sehingga kita bisa mengakses service kita dari</p>]]></description><link>https://blog.uripsub.dev/yuk-hosting-sendiri-ngrok-mu/</link><guid isPermaLink="false">624217083cb4210001d24842</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Thu, 28 Apr 2022 20:15:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1530212486532-d957d9c01d3e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fHR1bm5lbHxlbnwwfHx8fDE2NDg0OTQyNjk&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1530212486532-d957d9c01d3e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fHR1bm5lbHxlbnwwfHx8fDE2NDg0OTQyNjk&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Yuk Hosting Sendiri ngrok-mu"><p>Siapa sih yang ga kenal ngrok? aku rasa semua developer khususnya web dev baik itu frontend atau backend pasti pernah menggunakan ngrok atau service semacamnya.</p><p>Singkatnya ngrok itu adalah service tunnel yang mana mampu meng-expose service dari local komputer (device) kita ke internet. sehingga kita bisa mengakses service kita dari manapun dan kapanpun asalkan ada jaringan internet.</p><p>Biasanya service semacam ini kita gunakan untuk demo app atau service ke client sehingga client bisa langsung mencoba sendiri tanpa kita harus ribet deploy app kita ke VPS. </p><p>ngrok sendiri sebenarnya mempunyai fitur gratis yang kita bisa gunakan dengan mudah, tetapi seperti halnya service gratis lainnya ngrok gratis mempunyai beberapa limitasi seperti diantaranya, kita tidak bisa mengganti domain name, subdomain akan dipilih secara random, 1 online process, maksimal 4 tunnel, serta 40 connections per minutes.</p><p>Kalau untuk 1 service saja sih masih oke lah, tapi kalau kita ada banyak service gimana? </p><p>Eits, santuy brader. Kita bisa self hosted sendiri ngrok kita, walaupun kita harus agak effort dan modal dikit sih. tapi worth it sih menurutku. Oke langsung saja ya ke bahan-bahan yang kita perlukan.</p><ol><li>VM (Saran saya gunakan OS ubuntu, karena tutorial ini untuk OS ubuntu ya ... hehe)</li><li>Domain (bisa daftar domain gratis di freenom, kemudian transfer domain tersebut ke cloudflare ya biar mudah manage DNS-nya)</li><li>Kopi (Opsional sih, kalau aku teh tjatoet anget tawar hehe)</li><li>Niat</li></ol><p>Setelah semua bahan-bahan tersebut kalian siapkan, langsung saja kalian masuk ke VM kalian melalui ssh (as root) lalu lakukan update dan upgrade package ya</p><pre><code class="language-bash">apt update &amp;&amp; apt upgrade -y</code></pre><p>install beberapa package penunjang</p><pre><code class="language-bash">apt install git make automake autoconf gcc wget software-properties-common -y</code></pre><p> download dan install golang</p><pre><code>wget https://dl.google.com/go/go1.13.8.linux-amd64.tar.gz &amp;&amp;\
 tar -C /usr/local -xzf go1.13.8.linux-amd64.tar.gz &amp;&amp;\
 echo &apos;export PATH=$PATH:/usr/local/go/bin&apos; &gt;&gt; $HOME/.profile &amp;&amp;\
 source $HOME/.profile &amp;&amp; mkdir -p $HOME/go</code></pre><p>masuk ke DNS management kalian (saranku di cloudflare), lalu tambahkan dua record type A (@ dan *) lalu pointing ke IP address VM kalian ya</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.uripsub.dev/content/images/2022/04/2022-04-09_06-23.png" class="kg-image" alt="Yuk Hosting Sendiri ngrok-mu" loading="lazy" width="937" height="453" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/04/2022-04-09_06-23.png 600w, https://blog.uripsub.dev/content/images/2022/04/2022-04-09_06-23.png 937w" sizes="(min-width: 720px) 720px"><figcaption>DNS Management</figcaption></figure><p>setelah itu, kita install certbot untuk membuat sertifikat SSL kita.</p><pre><code class="language-bash">add-apt-repository universe
add-apt-repository ppa:certbot/certbot # untuk ubuntu dibawah 21.04
apt update &amp;&amp; apt install certbot -y</code></pre><p>setelah terinstal certbot yuk kita generate setifikatnya</p><pre><code class="language-bash">certbot -d tunnel.domain-saya.com -d *.tunnel.domain-saya.com --manual --preferred-challenges dns certonly</code></pre><p>ganti <code>domain-saya.com</code> dengan domain kalian sendiri ya. Nanti kalian akan diminta untuk memverifikasi dengan menambahkan new record di DNS kalian dengan type <code>TXT</code> dan value isi dengan yang muncul di terminal kalian ya.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/03/2022-03-29_02-53-3.png" class="kg-image" alt="Yuk Hosting Sendiri ngrok-mu" loading="lazy" width="882" height="284" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/03/2022-03-29_02-53-3.png 600w, https://blog.uripsub.dev/content/images/2022/03/2022-03-29_02-53-3.png 882w" sizes="(min-width: 720px) 720px"></figure><p>Jika sudah ditambahkan di DNS, lalu klik enter di terminal guys.</p><p>Jika benar, maka file sertifikat kalian akan berada di <code>/etc/letsencrypt/live/&lt;domain-saya.com&gt;/</code></p><p>Sekarang kita build binary ngrok untuk server yuk guys.</p><pre><code>git clone https://github.com/inconshreveable/ngrok.git &amp;&amp;\
 cd ngrok &amp;&amp; make release-server &amp;&amp;\
 cp bin/ngrokd /usr/local/bin &amp;&amp;\
 cd .. &amp;&amp; rm -rf ngrok</code></pre><p>Oke sekarang binary ngrok server (`ngrokd`) udah ada di <code>/usr/local/bin</code> , selanjutnya kita buat service yuk biar ngrok server nya autostart ketika VM kita restart</p><pre><code>cat &lt;&lt;EOF &gt;&gt; /etc/systemd/system/ngrokd.service
[Unit]
Description=ngrokd service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/local/bin/ngrokd -tlsKey=&quot;/etc/letsencrypt/live/domain-saya.com/privkey.pem&quot; -tlsCrt=&quot;/etc/letsencrypt/live/domain-saya.com/fullchain.pem&quot; -domain=&quot;domain-saya.com&quot;

[Install]
WantedBy=multi-user.target
EOF</code></pre><p>jangan lupa ganti <code>domain-saya.com</code> ya. setelah itu tinggal kita start dan enable deh</p><pre><code>systemctl start ngrokd
systemctl enable ngrokd</code></pre><p>Sampai disini ngrok server kita sudah running. terakhir kita tinggal build ngrok client di local komputer kita guys</p><pre><code>git clone https://github.com/inconshreveable/ngrok.git &amp;&amp;\
 cd ngrok/assets/client/tls &amp;&amp;\
 wget https://letsencrypt.org/certs/trustid-x3-root.pem.txt &amp;&amp;\
 echo $(cat trustid-x3-root.pem.txt) &gt; ngrokroot.crt &amp;&amp;\
 cd ../../../ &amp;&amp;\
 make release-client</code></pre><p>nah kalian akan temukan file binary ngrok client (`ngrok`) di dalam folder <code>bin</code>. kalian copy ke path sesuai env kalian ya. karena aku pakai linux aku copy ke <code>/usr/local/bin</code> lalu buat executable <code>chmod +x /usr/local/bin/ngrok</code></p><p>setelah itu kita buat file config untuk ngrok ya</p><pre><code>cat &lt;&lt;EOF &gt;&gt; $HOME/.ngrok
server_addr: domain-saya.com:4443
trust_host_root_certs: true
EOF</code></pre><p>terakhir tinggal kita gunakan deh ngroknya, misal kita mau expose service kita di port 3000 ke <code>contoh-backend.tunnel.domain-saya.com</code></p><pre><code>ngrok -subdomain contoh-backend 3000</code></pre>]]></content:encoded></item><item><title><![CDATA[Minimalkan size docker image-mu]]></title><description><![CDATA[<p>Mungkin ini terdengar remeh dan receh, tapi percayalah guys dengan meminimalkan size docker image kita akan menikmati kemudahan ke depannya. Serta akan terhindar dari error2 yang sering kali terjadi dikarenakan docker image yang mengalami obesitas.</p><p>Adapun error yang sering kita alami antara lain seperti berikut:</p><ul><li>Pipeline timeout ketika build docker</li></ul>]]></description><link>https://blog.uripsub.dev/minimalkan-size-docker-image-mu/</link><guid isPermaLink="false">623837b261ba960001221c57</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Mon, 21 Mar 2022 09:11:02 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1605745341112-85968b19335b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGRvY2tlcnxlbnwwfHx8fDE2NDc4NTMzNzg&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1605745341112-85968b19335b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGRvY2tlcnxlbnwwfHx8fDE2NDc4NTMzNzg&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Minimalkan size docker image-mu"><p>Mungkin ini terdengar remeh dan receh, tapi percayalah guys dengan meminimalkan size docker image kita akan menikmati kemudahan ke depannya. Serta akan terhindar dari error2 yang sering kali terjadi dikarenakan docker image yang mengalami obesitas.</p><p>Adapun error yang sering kita alami antara lain seperti berikut:</p><ul><li>Pipeline timeout ketika build docker image.</li><li>Deployment ke orchestrator failed karena waktu download terlalu lama.</li><li>Storage VM penuh karena banyak app yang docker imagenya bengkak</li></ul><p>Nah, gimana sih cara meminimalkan size docker image?. Oke dari pengalaman dan hasil googling sana-sini, berikut tips yang mungkin bisa temen2 coba untuk meminimalkan size docker image:</p><ul><li>Gunakan base image dengan size seminim mungkin. jika app kalian adalah nodejs, silahkan gunakan image versi alpine linux. karena alpine ini ukurannya sangatlah kecil.</li></ul><p>	 coba kalian bandingin deh, pasti terlihat perbedaannya</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.uripsub.dev/content/images/2022/03/Screen-Shot-2022-03-23-at-09.11.31.png" class="kg-image" alt="Minimalkan size docker image-mu" loading="lazy" width="2000" height="427" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/03/Screen-Shot-2022-03-23-at-09.11.31.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/03/Screen-Shot-2022-03-23-at-09.11.31.png 1000w, https://blog.uripsub.dev/content/images/size/w1600/2022/03/Screen-Shot-2022-03-23-at-09.11.31.png 1600w, https://blog.uripsub.dev/content/images/size/w2400/2022/03/Screen-Shot-2022-03-23-at-09.11.31.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>node:latest image size</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.uripsub.dev/content/images/2022/03/Screen-Shot-2022-03-23-at-09.11.54.png" class="kg-image" alt="Minimalkan size docker image-mu" loading="lazy" width="2000" height="430" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/03/Screen-Shot-2022-03-23-at-09.11.54.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/03/Screen-Shot-2022-03-23-at-09.11.54.png 1000w, https://blog.uripsub.dev/content/images/size/w1600/2022/03/Screen-Shot-2022-03-23-at-09.11.54.png 1600w, https://blog.uripsub.dev/content/images/size/w2400/2022/03/Screen-Shot-2022-03-23-at-09.11.54.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>node:alpine image size</figcaption></figure><ul><li>Gunakan multi-stage build, ketika temen2 perlu build app didalam docker. hal ini untuk menghindari residu (sisa-sisa dari proses build).</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.uripsub.dev/content/images/2022/03/Screen-Shot-2022-03-23-at-09.17.31.png" class="kg-image" alt="Minimalkan size docker image-mu" loading="lazy" width="1022" height="1006" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/03/Screen-Shot-2022-03-23-at-09.17.31.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/03/Screen-Shot-2022-03-23-at-09.17.31.png 1000w, https://blog.uripsub.dev/content/images/2022/03/Screen-Shot-2022-03-23-at-09.17.31.png 1022w" sizes="(min-width: 720px) 720px"><figcaption>example multistage build docker</figcaption></figure><ul><li>Sebisa mungkin kurangi jumlah line/layer di Dockerfile temen2, kalau ada process yang bisa dijadiin 1 line, jadikanlah 1 line (walaupun ini tidak signifikan tapi boleh dicoba).</li></ul><p>contohnya begini: kalau bisa digabung seperti dockerfile 1 (atas)</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.uripsub.dev/content/images/2022/03/Screen-Shot-2022-03-23-at-09.19.41.png" class="kg-image" alt="Minimalkan size docker image-mu" loading="lazy" width="1566" height="1000" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/03/Screen-Shot-2022-03-23-at-09.19.41.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/03/Screen-Shot-2022-03-23-at-09.19.41.png 1000w, https://blog.uripsub.dev/content/images/2022/03/Screen-Shot-2022-03-23-at-09.19.41.png 1566w" sizes="(min-width: 720px) 720px"><figcaption>example docker layer</figcaption></figure><ul><li>Jangan lupa tambahkan <em>.dockerignore</em> supaya file-file yang tidak kita harapkan tidak ter-copy ke app image kita ya.</li><li>Usahakan hapus dependencies yang cuma kita butuhin ketika development, semisal nodemon. </li></ul><p> </p>]]></content:encoded></item><item><title><![CDATA[Manfaat lain Github Actions]]></title><description><![CDATA[<p>untuk temen2 programmer pastinya tidak asing dong dengan yang namanya Github Actions. Untuk yang belum tahu apa itu github actions, singkatnya Github Actions adalah CI/CD yang disediakan oleh github yang bisa digunakan oleh para developer untuk membantu mempercepat proses delivery produk mereka, seperti misalnya men-deploy web app ke server,</p>]]></description><link>https://blog.uripsub.dev/manfaat-lain/</link><guid isPermaLink="false">6236fb5661ba960001221bb6</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Sun, 20 Mar 2022 10:25:32 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1618401471353-b98afee0b2eb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGdpdGh1YnxlbnwwfHx8fDE2NDc3NzA1MzU&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1618401471353-b98afee0b2eb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGdpdGh1YnxlbnwwfHx8fDE2NDc3NzA1MzU&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Manfaat lain Github Actions"><p>untuk temen2 programmer pastinya tidak asing dong dengan yang namanya Github Actions. Untuk yang belum tahu apa itu github actions, singkatnya Github Actions adalah CI/CD yang disediakan oleh github yang bisa digunakan oleh para developer untuk membantu mempercepat proses delivery produk mereka, seperti misalnya men-deploy web app ke server, build apk dan pubish ke playstore atau yang lainnya.</p><p>Namun selain hal-hal tersebut kita juga bisa memanfaatkan Github Actions untuk membuat tools unik yang mungkin tidak terpikirkan seperti yang pernah saya buat berikut.</p><p>Sebelum kesitu, apakah Github Actions ini gratis selamanya?. Jawabannya adalah Ya, namun ada tapinya. Jika kita gunakan di private repo kita akan dibatasi 2.000 menit per bulan. tetapi akan unlimited jika kita gunakan di public repo. <a href="https://github.com/pricing">https://github.com/pricing</a></p><ul><li><strong>Scheduler / Pengingat</strong></li></ul><p>Siapa nih diantara temen2 yang kalau pagi ga ada yang ngebanunin? wkwk. bisa nih temen2 buat scheduler untuk ngucapin selamat pagi dengan github action hehehe.</p><p>Atau kalau mau yang lebih bermanfaat, kalian bisa buat scheduler untuk mengirim perkembangan saham yang kalian punya setiap harinya.</p><ul><li><strong>Torrent Downloader</strong></li></ul><p>Mendownload file melalui torrent merupakan hal yang cukup beresiko, karena secara langsung kita memberikan akses kepada orang lain untuk mengakses file di komputer kita juga. Namun kita bisa meminimalisir resiko tersebut dengan cara menggunakan perantara komputer lain (atau virtual komputer), hal tersebut bisa dilakukan dengan kita menggunakan VPN sebagai tunnel.</p><p>Tetapi kita juga bisa memanfaatkan Github Actions sebagai perantara kita untuk mendownload torrent kemudian meng-upload-nya ke google drive. sehingga kita bisa aman mendownloadnya melalui google drive. </p><ul><li><strong>Scrapper</strong></li></ul><p>Selain itu untuk temen2 yang suka ngambil atau ngumpulin data dari web tertentu secara berkala, temen2 juga bisa nih gunain Github Actions.</p><p>#</p>]]></content:encoded></item><item><title><![CDATA[Ganti DNS Ubuntu secara Permanen]]></title><description><![CDATA[<p>Install dan jalankan service resolvconf :</p><pre><code>sudo apt install resolvconf 
sudo systemctl enable --now resolvconf.service</code></pre><p>edit file <code>/etc/resolvconf/resolv.conf.d/head</code>, tambahkan :</p><pre><code>nameserver 8.8.8.8 
nameserver 8.8.4.4
</code></pre><p>update DNS dengan perintah berikut:</p><pre><code>sudo resolvconf -u</code></pre><p>terakhir cek DNS:</p><pre><code>cat /etc/resolv.conf</code></pre>]]></description><link>https://blog.uripsub.dev/change-ubuntu-dns-permanently/</link><guid isPermaLink="false">62a4af063cb4210001d24a13</guid><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Tue, 01 Feb 2022 15:09:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1520869562399-e772f042f422?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDl8fG5ldHdvcmt8ZW58MHx8fHwxNjU0OTU5MTUz&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1520869562399-e772f042f422?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDl8fG5ldHdvcmt8ZW58MHx8fHwxNjU0OTU5MTUz&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Ganti DNS Ubuntu secara Permanen"><p>Install dan jalankan service resolvconf :</p><pre><code>sudo apt install resolvconf 
sudo systemctl enable --now resolvconf.service</code></pre><p>edit file <code>/etc/resolvconf/resolv.conf.d/head</code>, tambahkan :</p><pre><code>nameserver 8.8.8.8 
nameserver 8.8.4.4
</code></pre><p>update DNS dengan perintah berikut:</p><pre><code>sudo resolvconf -u</code></pre><p>terakhir cek DNS:</p><pre><code>cat /etc/resolv.conf</code></pre>]]></content:encoded></item><item><title><![CDATA[Ayo Siapkan Servermu Sendiri !]]></title><description><![CDATA[<p>Oke guys, dikesempatan kali ini ane mau share nih gimana caranya setup server kamu sendiri dari nol sampai bener-bener ready untuk deploy aplikasi kita.</p><p>Untuk membuat sebuah server kita perlu siapkan komputer yang terkoneksi ke jaringan internet, bisa menggunakan komputer fisik seperti laptop atau raspberry pi, bisa juga menggunakan virtual</p>]]></description><link>https://blog.uripsub.dev/setup-your-own-server/</link><guid isPermaLink="false">61f58b2d8e61380001af1032</guid><category><![CDATA[server]]></category><category><![CDATA[VPS]]></category><category><![CDATA[linux]]></category><category><![CDATA[docker]]></category><category><![CDATA[portainer]]></category><category><![CDATA[ghost]]></category><dc:creator><![CDATA[Urip Subekti]]></dc:creator><pubDate>Sat, 29 Jan 2022 18:50:26 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1581092919535-7146ff1a590b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE3fHxzZXJ2ZXJ8ZW58MHx8fHwxNjQzNDg1Mjcw&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1581092919535-7146ff1a590b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE3fHxzZXJ2ZXJ8ZW58MHx8fHwxNjQzNDg1Mjcw&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Ayo Siapkan Servermu Sendiri !"><p>Oke guys, dikesempatan kali ini ane mau share nih gimana caranya setup server kamu sendiri dari nol sampai bener-bener ready untuk deploy aplikasi kita.</p><p>Untuk membuat sebuah server kita perlu siapkan komputer yang terkoneksi ke jaringan internet, bisa menggunakan komputer fisik seperti laptop atau raspberry pi, bisa juga menggunakan virtual komputer (VPS). &#xA0;Pada kesempatan kali ini ane pilih menggunakan VPS.</p><p>Ada banyak sekali VPS provider yang bisa kita pilih, namun ada beberapa hal yang harus kita pertimbangkan ketika akan memilih provider, diantaranya adalah lokasi dan harga. Saran ane sih kalau target pasar dari aplikasi kita nantinya adalah dalam negeri, pilih VPS provider dalam negeri aja atau provider luar yang punya data center di Indonesia seperti Alibaba Cloud. Hal tersebut akan berkaitan dengan latency ketika kita mengakses aplikasi. Lalu hal selanjutnya yang gak kalah penting adalah kita harus pinter-pinter bandingin tuh pricing di setiap provider, mulai dari harga, besarnya RAM, besarnya storage, jenis storage (SSD/HDD), serta Bandwidth yang diberikan perbulannya berapa. Sesuaikan dengan kebutuhan aplikasi kita ya.</p><p>Oke disini ane pilih menggunakan VPS dari idcloudhost.com dengan pertimbangan lokasi data centernya di Jakarta dan harga yang ditawarkan cukup menarik yaitu:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.uripsub.dev/content/images/2022/01/2022-01-30_03-14.png" class="kg-image" alt="Ayo Siapkan Servermu Sendiri !" loading="lazy" width="803" height="734" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/01/2022-01-30_03-14.png 600w, https://blog.uripsub.dev/content/images/2022/01/2022-01-30_03-14.png 803w" sizes="(min-width: 720px) 720px"><figcaption>Pricing IDHC per Jan 2022</figcaption></figure><p>Selain itu untuk sistem pembayarannya juga tidak perlu menggunakan kartu kredit, kita bisa menggunakan transfer bank atau bisa juga scan QR melalui e-wallet seperti (gopay, ovo, dana, shopeepay, dll).</p><p>Langsung saja kita buat dulu Virtual Machine (VM) nya, pilih OS (Saran ane pilih Ubuntu aja gan), lalu masukkan username, password, dan resource name (nama VM) lalu create. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.uripsub.dev/content/images/2022/01/2022-01-30_03-22.png" class="kg-image" alt="Ayo Siapkan Servermu Sendiri !" loading="lazy" width="801" height="594" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/01/2022-01-30_03-22.png 600w, https://blog.uripsub.dev/content/images/2022/01/2022-01-30_03-22.png 801w" sizes="(min-width: 720px) 720px"><figcaption>Form create new VM</figcaption></figure><p>Ketika VM berhasil di create akan muncul informasi seperti berikut:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.uripsub.dev/content/images/2022/01/2022-01-30_03-27.png" class="kg-image" alt="Ayo Siapkan Servermu Sendiri !" loading="lazy" width="796" height="297" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/01/2022-01-30_03-27.png 600w, https://blog.uripsub.dev/content/images/2022/01/2022-01-30_03-27.png 796w" sizes="(min-width: 720px) 720px"><figcaption>VM Information</figcaption></figure><p>Oke, nextnya tinggal kita login melalui SSH, jika kalian menggunakan windows kalian perlu menginstall putty atau WSL, sedangkan untuk pengguna linux dan macos cukup menggunakan terminal. </p><p>Karena ane masih setia pake linux, hehe. untuk loginnya cukup menggunakan perintah berikut:</p><pre><code class="language-bash">ssh username@103.xxx.xxx.xxx</code></pre><p>ganti <code>103.xxx.xxx.xxx</code> dengan ip public dari VM kamu ya, lalu masukkan password dan enter.</p><p>lakukan update dan install common package di ubuntu</p><pre><code class="language-bash">sudo apt update &amp;&amp; sudo apt install -y ca-certificates curl gnupg lsb-release</code></pre><p>selanjutnya kita install docker (kenapa docker? karena dengan docker semua jadi mudah hehe). Aplikasi kita akan lebih terorganisir dan terisolasi, serta akan mudah dimantaince jika berjalan di docker container ini. Oke langsung aja kita install ya</p><pre><code>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
 
echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null

## install docker
sudo apt-get update &amp;&amp; sudo apt install docker-ce docker-ce-cli containerd.io -y


## create docker user group
sudo usermod -aG docker $USER &amp;&amp; newgrp docker</code></pre><p>Selanjutnya kita akan install portainer, singkatnya portainer ini adalah aplikasi untuk me-manage docker container seperti create, edit, delete, stop, serta restart container dari setiap aplikasi kita melalui web ui. tidak hanya itu sebenarnya masih banyak lagi fitur portainer yang bisa kita gunakan secara gratis.</p><pre><code>## create volume to store portainer data
docker volume create portainer_data

## run portainer
docker run -d -p 9000:9000 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    portainer/portainer-ce
</code></pre><p>nah silahkan buka browser ke <code>http://your-ip-address:9000</code> untuk set username dan password</p><p>Balik lagi ke terminal, lalu install nginx-proxy-manager via docker</p><pre><code class="language-bash">docker volume create nginx_data

docker run -d \
    --name=nginx-proxy-manager \
    -p 81:8181 \
    -p 80:8080 \
    -p 443:4443 \
    -v nginx_data:/config:rw \
    jlesage/nginx-proxy-manager</code></pre><p>buka <code>http://your-ip-address:81</code> login pakai email <code>admin@example.com</code> dan password <code>changeme</code> , langsung ganti email dan passwordnya ya.</p><p>Selanjutnya siapkan domain kalian, kalau mau yang free temen-temen bisa buat di <a href="https://www.freenom.com/">freenom.com</a>, disana kita bisa buat domain <code>.tk</code> <code>.ml</code> <code>.ga</code> <code>.cf</code> dan <code>.gq</code> secara gratis. </p><p>Saranku biar mudah melakukan configurationnya silahkan transfer domain temen2 ke cloudflare ya. untuk caranya temen-temen bisa baca <a href="https://dev.to/hieplpvip/get-a-free-domain-with-freenom-and-cloudflare-k1j">disini</a>. Jangan lupa tambahkan DNS record ke IP VPS kalian ya.</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/02/2022-02-25_11-03.png" class="kg-image" alt="Ayo Siapkan Servermu Sendiri !" loading="lazy" width="1240" height="598" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/02/2022-02-25_11-03.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/02/2022-02-25_11-03.png 1000w, https://blog.uripsub.dev/content/images/2022/02/2022-02-25_11-03.png 1240w" sizes="(min-width: 720px) 720px"></figure><p>Oke sekarang tinggal kita siapkan project kita. kita buat simple express js aja ya. reponya disini: <a href="https://github.com/subekti404dev/simple-express">https://github.com/subekti404dev/simple-express</a></p><p>dengan memanfaatkan Github Action kita buat CI/CD seperti berikut:</p><ul><li><strong>Build and Push Docker Image </strong></li></ul><pre><code>build-and-push-docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: &apos;Get Previous tag&apos;
        id: previoustag
        uses: &quot;WyriHaximus/github-action-get-previous-tag@v1&quot;
        with:
          fallback: 1.0.0 

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to DockerHub
        uses: docker/login-action@v1 
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build and Push Docker to DockerHub
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: subekti13/simple-express:${{ steps.previoustag.outputs.tag }}</code></pre><ul><li><strong>Deploy to Portainer</strong></li></ul><pre><code> deploy-to-portainer:
    needs: build-and-push-docker 
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2


      - name: &apos;Get Previous tag&apos;
        id: previoustag
        uses: &quot;WyriHaximus/github-action-get-previous-tag@v1&quot;
        with:
          fallback: 1.0.0 

      - name: Deploy Stack
        uses: subekti404dev/portainer-stack-deployment@v1
        with:
          portainer-url: ${{ secrets.PORTAINER_HOST }}
          portainer-username: ${{ secrets.PORTAINER_USERNAME }}
          portainer-password: ${{ secrets.PORTAINER_PASSWORD }}
          portainer-endpoint: 2
          name: simple-express
          file: stackfile.yml.mustache
          variables: &apos;{&quot;image&quot;: &quot;subekti13/simple-express:${{ steps.previoustag.outputs.tag }}&quot;}&apos;
</code></pre><p>untuk stackfilenya menggunakan syntax docker-compose ya, seperti berikut: <a href="https://github.com/subekti404dev/simple-express/blob/main/stackfile.yml.mustache">https://github.com/subekti404dev/simple-express/blob/main/stackfile.yml.mustache</a></p><ul><li><strong>Configure Nginx Proxy Manager</strong></li></ul><pre><code>configure-nginx-proxy:
    needs: deploy-to-portainer
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Configure Nginx Proxy Manager
        uses: subekti404dev/nginx-proxy-manager-action@v1
        with:
          npm-url:  ${{ secrets.NGINX_PM_URL }}
          npm-email:  ${{ secrets.NGINX_PM_EMAIL }}
          npm-password:  ${{ secrets.NGINX_PM_PASSWORD }}
          domain-name:  ${{ secrets.APP_DOMAIN }}
          forward-scheme: http
          forward-host:  ${{ secrets.APP_HOST }}
          forward-port:  ${{ secrets.APP_PORT }}
          cache-assets: true
          block-exploits: true
          websocket-support: true
          force-ssl: true
          http2-support: true</code></pre><p>maka jadilah seperti yang ada di file berikut: <a href="https://github.com/subekti404dev/simple-express/blob/main/.github/workflows/deploy.yml">https://github.com/subekti404dev/simple-express/blob/main/.github/workflows/deploy.yml</a></p><p>Setelah itu semua jangan lupa set secrets reponya ya. ke <code>setting</code> &gt; <code>secrets</code> &gt; <code>actions</code> lalu buat variable yang dibutuhkan</p><figure class="kg-card kg-image-card"><img src="https://blog.uripsub.dev/content/images/2022/02/2022-02-25_11-19.png" class="kg-image" alt="Ayo Siapkan Servermu Sendiri !" loading="lazy" width="1145" height="796" srcset="https://blog.uripsub.dev/content/images/size/w600/2022/02/2022-02-25_11-19.png 600w, https://blog.uripsub.dev/content/images/size/w1000/2022/02/2022-02-25_11-19.png 1000w, https://blog.uripsub.dev/content/images/2022/02/2022-02-25_11-19.png 1145w" sizes="(min-width: 720px) 720px"></figure><p>Terakhir tinggal bikin tag version (contoh <code>1.0.0</code>), push tag tersebut. dan biarkan Github melakukan tugasnya hehe... </p><p>Selamat mencoba guys :)</p>]]></content:encoded></item></channel></rss>