<?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[Vi Nguyen Blog]]></title><description><![CDATA[My Thoughts, My Sharing]]></description><link>https://vinguyen.blog/</link><image><url>https://vinguyen.blog/favicon.png</url><title>Vi Nguyen Blog</title><link>https://vinguyen.blog/</link></image><generator>Ghost 5.26</generator><lastBuildDate>Tue, 07 Apr 2026 16:08:24 GMT</lastBuildDate><atom:link href="https://vinguyen.blog/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Rails - Resolve .env conflicts between development and Kamal deploy]]></title><description><![CDATA[<h3 id="problem">Problem</h3><p>We often use the gem <a href="https://github.com/bkeepers/dotenv">Dotenv</a> to handle environment variables on development machine or gem <a href="https://github.com/ddollar/foreman">Foreman</a> also automatic load ENV from .env file (<a href="https://github.com/ddollar/foreman/wiki/Per-Process-Environment-Variables">Forceman - Per Process Environment Variables</a>)</p><p>The problems is <a href="https://kamal-deploy.org/"><em>Kamal-deploy</em></a><em> </em>use .env too, for the deployment on target service. The command `<em>kamal envify</em>` will &#xA0; build</p>]]></description><link>https://vinguyen.blog/resolve-env-conflicts-dev-kamal-deploy/</link><guid isPermaLink="false">66f0e0eb4529380001b53d19</guid><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Mon, 23 Sep 2024 03:58:07 GMT</pubDate><content:encoded><![CDATA[<h3 id="problem">Problem</h3><p>We often use the gem <a href="https://github.com/bkeepers/dotenv">Dotenv</a> to handle environment variables on development machine or gem <a href="https://github.com/ddollar/foreman">Foreman</a> also automatic load ENV from .env file (<a href="https://github.com/ddollar/foreman/wiki/Per-Process-Environment-Variables">Forceman - Per Process Environment Variables</a>)</p><p>The problems is <a href="https://kamal-deploy.org/"><em>Kamal-deploy</em></a><em> </em>use .env too, for the deployment on target service. The command `<em>kamal envify</em>` will &#xA0; build the .env file from env.erb file, and use that .env as input for other command</p><h3 id="solution">Solution</h3><p>Use &#xA0;gem <a href="https://github.com/bkeepers/dotenv">Dotenv</a> in your development repo, then create an .env.development or .env.development.local file to store ENV for development, <em><strong>don&apos;t use .env file</strong></em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2024/09/rails-gem-dot-env.png" class="kg-image" alt loading="lazy" width="1786" height="512" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/rails-gem-dot-env.png 600w, https://vinguyen.blog/content/images/size/w1000/2024/09/rails-gem-dot-env.png 1000w, https://vinguyen.blog/content/images/size/w1600/2024/09/rails-gem-dot-env.png 1600w, https://vinguyen.blog/content/images/2024/09/rails-gem-dot-env.png 1786w" sizes="(min-width: 720px) 720px"><figcaption>Rails: Gem dotenv v3.1</figcaption></figure><pre><code>group :development, :test do
  gem &apos;dotenv&apos;, &apos;~&gt; 3.1&apos;
end
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-23-at-10.49.04.png" class="kg-image" alt loading="lazy" width="887" height="514" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/CleanShot-2024-09-23-at-10.49.04.png 600w, https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-23-at-10.49.04.png 887w" sizes="(min-width: 720px) 720px"><figcaption>Dotenv file loading priority</figcaption></figure><p>Then in application.rb, add an config to ignore .env file</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2024/09/dotenv-kamal-application-rb--1.png" class="kg-image" alt loading="lazy" width="1440" height="754" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/dotenv-kamal-application-rb--1.png 600w, https://vinguyen.blog/content/images/size/w1000/2024/09/dotenv-kamal-application-rb--1.png 1000w, https://vinguyen.blog/content/images/2024/09/dotenv-kamal-application-rb--1.png 1440w" sizes="(min-width: 720px) 720px"><figcaption>resolve conflict .env between development env and Kamal deploy</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-ruby"># application.rb
module Launchpad
  class Application &lt; Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 8.0
    # ....

    Dotenv::Rails.files.delete(&apos;.env&apos;) if defined?(Dotenv::Rails)
  end
end</code></pre><figcaption>Ignore .env content with Dotenv</figcaption></figure><p>Dotenv will load variable from other .env file and ignore all content from .env.</p>]]></content:encoded></item><item><title><![CDATA[Deploy Multiple Rails Apps on a Single Server with Kamal 1]]></title><description><![CDATA[Deploy multiple Rails apps on a single server with Kamal 1: 
Configure Traefik and all accessories in a single deploy.yml file & use a private Docker bridge network]]></description><link>https://vinguyen.blog/deploy-multiple-rails-apps-on-a-single-server-with-kamal-1/</link><guid isPermaLink="false">66e149584529380001b53bd8</guid><category><![CDATA[Kamal]]></category><category><![CDATA[kamal-deploy]]></category><category><![CDATA[Rails]]></category><category><![CDATA[Kamal-1]]></category><category><![CDATA[single-server-deployment]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Fri, 20 Sep 2024 17:00:00 GMT</pubDate><content:encoded><![CDATA[<p>Here&apos;s one way to deploy multiple Rails Application (and their back service: Database, Redis) on a Single Server:</p><h2 id="what-is-kamal">What is Kamal?</h2><p><a href="https://kamal-deploy.org/">Kamal-deploy</a> &#xA0;is a lightweight, Rub-based deployment tool, designed to simplify process of deploying and managing Dockerized Rails application. It streamlines server setup, configuration and deployment with minimal overhead.</p><p>Kamal automates comon Devops tasks, allowing developers to forcus more on building applications and less on infrastructure management.</p><h3 id="why-kamal-1-and-how-about-kamal-2">Why Kamal 1 and how about Kamal 2?</h3><p>At the time I&apos;m writing this tutorial, DHH &amp; his team is deveploment Kamal version with built-in feature to support deployment multiple apps on same server &amp; replaced Traefik with <a href="https://x.com/dhh/status/1836922738721673657">Kamal Proxy</a></p><h3 id="pre-requisities">Pre-requisities</h3><ul><li>Already have experiment deploy single rails application on single server, you can check tutorial from <a href="https://nts.strzibny.name/deploying-rails-single-server-kamal/">https://nts.strzibny.name/deploying-rails-single-server-kamal/</a></li></ul><h2 id="solution">Solution</h2><p>For deployment multiple Rails apps on single server with Kamal 1, Let try the solution bellow: </p><ul><li>Config Traefik and Accessories on a single deploy.yml file ( on a single app)</li><li>Use private docker bridge to communicate between application and traefik, accessories</li></ul><h3 id="configuration">Configuration</h3><p><strong>1. Docker private network</strong></p><p>Create a new docker network on server before deployment</p><pre><code class="language-bash">docker network create private_nw</code></pre><p><em>Notes: You can create and use multiple Docker networks, assigning each application its own network to achieve better isolation and improve security.</em></p><p><strong>2. Traefik and Accessories</strong></p><p>Configure<strong> Traefik and Accessories in a single deploy.yml file</strong>. Place all accessories in this file and ensure they are connected to the Docker network created earlier. </p><figure class="kg-card kg-code-card"><pre><code class="language-yml"># config/deploy.yml
accessories:
  redis:
    image: redis:alpine
    hosts:
      - 192.168.10.12
    options:
      network: &quot;private_nw&quot;
# Configure custom arguments for Traefik
traefik:
  options:
    publish:
      - 443:443
    volume:
      - &quot;/letsencrypt/acme.json:/letsencrypt/acme.json&quot;
    network: &quot;private_nw&quot;
  args:
    api.dashboard: true
    entryPoints.web.address: &quot;:80&quot;
    entryPoints.websecure.address: &quot;:443&quot;
    entryPoints.web.http.redirections.entryPoint.to: websecure
    entryPoints.web.http.redirections.entryPoint.scheme: https
    entryPoints.web.http.redirections.entrypoint.permanent: true
    certificatesResolvers.letsencrypt.acme.email: &quot;email@example.com&quot;
    certificatesResolvers.letsencrypt.acme.storage: &quot;/letsencrypt/acme.json&quot; 
    certificatesResolvers.letsencrypt.acme.httpchallenge: true
    certificatesResolvers.letsencrypt.acme.httpchallenge.entrypoint: web
# ....</code></pre><figcaption>Kamal config.yml, treafik &amp; accessory</figcaption></figure><p></p><p><strong>3. Application</strong></p><p>With the deploy.yml file for each Rails application, configure your application, build, and other sections without duplicating the Traefik and accessories configurations across multiple files.</p><p><strong>Example:</strong></p><ul><li>For Application 1, include the full configuration: server, accessories, traefik, etc.</li><li>For Application 2, <strong>omit the accessories and traefik sections</strong>, as they are already handled by the first configuration.</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-yml"># appication
# config/deploy.yml
service: app1
servers:
  web:
    hosts:
      - 192.168.10.12
    labels:
      traefik.enable: true
      traefik.http.routers.app1-web.rule: Host(`app1.example.com`)
      traefik.http.routers.app1-web.entrypoints: websecure
      traefik.http.routers.app1-web.tls: true
      traefik.http.routers.app1.tls.certresolver: letsencrypt
    options:
      network: &quot;private_nw&quot;

volumes:
  - /local/storage/path:/rails/storage
# ... other config section except accessories &amp; traefik</code></pre><figcaption>Kamal config.yml on each application</figcaption></figure><p><strong>Deployment command</strong></p><p>On application 1 ( full configuration)</p><figure class="kg-card kg-code-card"><pre><code>kamal envify
kamal env push
kamal accessory boot all
kamal traefik boot
kamal deploy</code></pre><figcaption>On application 1 ( full configuration)</figcaption></figure><p>On other application</p><pre><code>kamal envify
kamal env push
kamal deploy
## Go back to application 1
kamal treafik reboot -y #if need</code></pre>]]></content:encoded></item><item><title><![CDATA[Secure Website Hosting Without Open Ports: Cloudflare Tunnel & Kamal-deploy]]></title><description><![CDATA[<p>Hosting a website traditionally involves exposing certain ports ( 80, 443, ...) to the public internet. However, this approach often brings security risk, such as DDoS attacks and unauthorized access attempts. Or, simply put, there may be other reasons why you don&#x2019;t want or can&#x2019;t expose ports to</p>]]></description><link>https://vinguyen.blog/secure-website-hosting-without-open-ports-cloudflare-tunnel-and-kamal-deploy/</link><guid isPermaLink="false">66e062254529380001b53a97</guid><category><![CDATA[Kamal]]></category><category><![CDATA[kamal-deploy]]></category><category><![CDATA[DevOps]]></category><category><![CDATA[Cloudflare]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Wed, 11 Sep 2024 01:23:27 GMT</pubDate><content:encoded><![CDATA[<p>Hosting a website traditionally involves exposing certain ports ( 80, 443, ...) to the public internet. However, this approach often brings security risk, such as DDoS attacks and unauthorized access attempts. Or, simply put, there may be other reasons why you don&#x2019;t want or can&#x2019;t expose ports to the internet.</p><p>In this post, I&#x2019;ll guide you through an alternative method to host your website securely <strong>without opening 80/443 ports</strong>. We&#x2019;ll be using <strong>Cloudflare Tunnel</strong>, a service that connects your server to Cloudflare&#x2019;s network securely, and <strong>Kamal-deploy</strong>, a deployment tool that simplifies the process of managing applications. By the end, you&#x2019;ll have a fully deployed, secure website that doesn&#x2019;t rely on open ports.</p><p>Let consider the diagram below first: </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2024/09/cloudflared-kamal.drawio.png" class="kg-image" alt="Secure Website Hosting Without Open Ports: Cloudflare Tunnel &amp; Kamal" loading="lazy" width="1001" height="764" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/cloudflared-kamal.drawio.png 600w, https://vinguyen.blog/content/images/size/w1000/2024/09/cloudflared-kamal.drawio.png 1000w, https://vinguyen.blog/content/images/2024/09/cloudflared-kamal.drawio.png 1001w" sizes="(min-width: 720px) 720px"><figcaption>Diagram Secure Website Hosting Without Open Ports: Cloudflare Tunnel &amp; Kamal</figcaption></figure><h3 id="components">Components</h3><p><strong><a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/">Cloudflare Tunnel</a></strong> is the key component in this setup. It creates a secure tunnel that allows public access to your web service without the need to open any ports.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2024/09/image.png" class="kg-image" alt loading="lazy" width="1768" height="1102" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/image.png 600w, https://vinguyen.blog/content/images/size/w1000/2024/09/image.png 1000w, https://vinguyen.blog/content/images/size/w1600/2024/09/image.png 1600w, https://vinguyen.blog/content/images/2024/09/image.png 1768w" sizes="(min-width: 720px) 720px"><figcaption>Image from: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/</figcaption></figure><p><strong><a href="https://kamal-deploy.org/">Kamal-deploy</a></strong> simplifies the deployment process, allowing you to deploy applications to any Linux server in just a few minutes. It automates key tasks such as pulling code, building and running containers, and managing environment variables, networking, and SSL certificates.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2024/09/image-1.png" class="kg-image" alt loading="lazy" width="909" height="652" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/image-1.png 600w, https://vinguyen.blog/content/images/2024/09/image-1.png 909w" sizes="(min-width: 720px) 720px"><figcaption>Image from: https://semaphoreci.com/blog/mrsk</figcaption></figure><h3 id="prerequisite">Prerequisite</h3><ul><li>A domain configurate to manage on Cloudflare, you can follow the guide <a href="https://developers.cloudflare.com/fundamentals/setup/manage-domains/add-site/">here</a></li><li>A &#xA0;linux server that pre-setup docker and allow to access from your local machine</li><li>Kamal already install on your project (assume that a Rails project, but you can use with any application that can be containerized.</li></ul><h3 id="setup-a-cloudflare-tunnel">Setup a Cloudflare tunnel</h3><p>Setup an tunnel to your linux server, follow the official guide from Cloudflare &#xA0;<a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/get-started/create-remote-tunnel/">https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/get-started/create-remote-tunnel/</a></p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-10-at-23.45.56.png" class="kg-image" alt loading="lazy" width="1278" height="688" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/CleanShot-2024-09-10-at-23.45.56.png 600w, https://vinguyen.blog/content/images/size/w1000/2024/09/CleanShot-2024-09-10-at-23.45.56.png 1000w, https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-10-at-23.45.56.png 1278w" sizes="(min-width: 720px) 720px"></figure><p><em>Copy full token and put in in safeplace, we&apos;ll use it to config on kamal</em></p><p>then, add new tunnel config to map domain into this tunnel.</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-10-at-23.59.30.png" class="kg-image" alt loading="lazy" width="1194" height="465" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/CleanShot-2024-09-10-at-23.59.30.png 600w, https://vinguyen.blog/content/images/size/w1000/2024/09/CleanShot-2024-09-10-at-23.59.30.png 1000w, https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-10-at-23.59.30.png 1194w" sizes="(min-width: 720px) 720px"></figure><h3 id="setup-kamal-deploy-config-application">Setup Kamal Deploy &amp; Config application</h3><p>the content of deploy.yml as the code bellow:</p><figure class="kg-card kg-code-card"><pre><code class="language-yml">service: miningboard

ssh:
  user: ubuntu

image: private-registry/miningboard.com

servers:
  web:
    hosts:
      - 136.20.33.21
    labels:
      traefik.enable: true
      traefik.http.routers.miningboard-web.rule: Host(`miningboard.com`)
      traefik.http.routers.miningboard-web.entrypoints: web
    options:
      network: &quot;pff&quot;
# Credentials for your image host.
registry:
  server: registry.gitlab.com
  username:
    - DOCKER_REGISTRY_USERNAME
  password:
    - DOCKER_REGISTRY_TOKEN

env:
  clear:
    RAILS_LOG_TO_STDOUT: 1
    PORT: 3000
    HOST_PRIVATE_IP: 136.20.33.21
  secret:
    - RAILS_MASTER_KEY
    - RAILS_ENV

builder:
  secrets:
    - RAILS_MASTER_KEY

# Use accessory services (secrets come from .env).
accessories:
  cloudflared:
    image: cloudflare/cloudflared:2024.6.0
    host: 136.20.33.21
    env:
      secret:
        - TUNNEL_TOKEN
    cmd: tunnel run
    options:
      network: &quot;pff&quot;

# Configure custom arguments for Traefik
traefik:
  options:
    network: &quot;pff&quot;
  args:
    accesslog: true
    entryPoints.web.address: &quot;:80&quot;
  labels:
    traefik.enable: true
# Configure a custom healthcheck (default is /up on port 3000)
healthcheck:
  path: /up
  port: 3000

asset_path: /rails/public/assets
primary_role: web
</code></pre><figcaption><strong>h</strong>kamal: deploy.yml</figcaption></figure><p>In this Kamal deployment configuration, the <strong>Cloudflared</strong> Docker container is set up as an accessory of Kamal and connected to an external Docker network named &quot;pff&quot;. This explains why, in the earlier tunnel configuration, we were able to point the domain to traefik:80.</p><p>If you don&#x2019;t use an external network configuration, you would need to expose the Traefik port and change the tunnel config to point the domain to host_ip:&lt;traefik_host_port&gt;</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-11-at-00.00.14@2x.png" class="kg-image" alt loading="lazy" width="950" height="780" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/CleanShot-2024-09-11-at-00.00.14@2x.png 600w, https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-11-at-00.00.14@2x.png 950w" sizes="(min-width: 720px) 720px"></figure><p><strong>Config the tunnel token in .env.rb</strong></p><figure class="kg-card kg-code-card"><pre><code>RAILS_ENV=production
TUNNEL_TOKEN=put/the/cloudflare/tunnel/token/here
# Other variables
# ....

</code></pre><figcaption>.env.rb</figcaption></figure><p><strong> Config/environments/production.rb</strong></p><p>Update assume_ssl = true &amp;&amp; force_ssl = false &#xA0;to allow application can access with <a href="https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/flexible/">Cloudflare SSL/TLS Flexible</a> mode, ssl terminating buy Cloudflare/&amp; Cloudlfare tunnel</p><pre><code class="language-ruby">  # Assume all access to the app is happening through a SSL-terminating reverse proxy.
  # Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.
  config.assume_ssl = true

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  config.force_ssl = false
</code></pre><p><strong>Deploy with kamal</strong></p><pre><code>kamal envify
kamal env push
kamal traefik boot
kamal accessory boot cloudflared 
kamal deploy
kamal traefik reboot -y
</code></pre><h3 id="output">Output</h3><p>Here&#x2019;s my hobby project: hosting on my local miniPC (Asus x300) using Cloudflare Tunnel:: <a href="https://miningboard.com/">https://miningboard.com/</a></p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-11-at-00.01.53@2x.png" class="kg-image" alt loading="lazy" width="1784" height="270" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/CleanShot-2024-09-11-at-00.01.53@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2024/09/CleanShot-2024-09-11-at-00.01.53@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2024/09/CleanShot-2024-09-11-at-00.01.53@2x.png 1600w, https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-11-at-00.01.53@2x.png 1784w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-11-at-00.02.38.png" class="kg-image" alt loading="lazy" width="1407" height="684" srcset="https://vinguyen.blog/content/images/size/w600/2024/09/CleanShot-2024-09-11-at-00.02.38.png 600w, https://vinguyen.blog/content/images/size/w1000/2024/09/CleanShot-2024-09-11-at-00.02.38.png 1000w, https://vinguyen.blog/content/images/2024/09/CleanShot-2024-09-11-at-00.02.38.png 1407w" sizes="(min-width: 720px) 720px"><figcaption>https://miningboard.com/</figcaption></figure>]]></content:encoded></item><item><title><![CDATA[Earn extra income from available computer resources and benefit beyond it.]]></title><description><![CDATA[<blockquote>The best way to learn something is to get your hands dirty and make it fun</blockquote><h3 id="prerequisite">Prerequisite</h3><ul><li>Have s&#x1A1;m available resources like Old PC, Raspberry PI, NAS, HDD, with public internet access</li><li>Can run it 24/7</li><li>Have skills related to programming, deploying and operating application</li></ul><h3 id="what-are-the-benefits-of-doing-this">What are</h3>]]></description><link>https://vinguyen.blog/earn-extra-income-from-available-computer-resources-and-benefit-beyond-it/</link><guid isPermaLink="false">63bfccbe8120730001bdb059</guid><category><![CDATA[Sharing]]></category><category><![CDATA[crypto]]></category><category><![CDATA[Storj]]></category><category><![CDATA[Cryptocurrency]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Thu, 12 Jan 2023 09:22:41 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2023/01/CleanShot-2023-01-13-at-08.18.43@2x.png" medium="image"/><content:encoded><![CDATA[<blockquote>The best way to learn something is to get your hands dirty and make it fun</blockquote><h3 id="prerequisite">Prerequisite</h3><ul><li>Have s&#x1A1;m available resources like Old PC, Raspberry PI, NAS, HDD, with public internet access</li><li>Can run it 24/7</li><li>Have skills related to programming, deploying and operating application</li></ul><h3 id="what-are-the-benefits-of-doing-this">What are the benefits of doing this?</h3><ul><li>A little monthly income, probably enough for one or a few cups of coffee for fun</li><li>Take advantage and optimize the available resources that you do not use up, as my opinion: with paid things, using it to create as much value as possible is the right thing to do.</li><li>Learned skills to operate systems that need to operate stably and continuously, which can be used to practice SRE</li><li>Have the opportunity to practice skills related to networking, system configuration, deployment, maintenance</li><li>Learn &amp; understand how blockchain &amp; crypto currency can apply into product development</li></ul><h3 id="what-resources-can-be-used">What resources can be used?</h3><h4 id="1-public-ip-network-bandwidth">1. Public IP &amp; Network bandwidth:</h4><img src="https://vinguyen.blog/content/images/2023/01/CleanShot-2023-01-13-at-08.18.43@2x.png" alt="Earn extra income from available computer resources and benefit beyond it."><p>There are many needs related to sharing IP or bandwidth for others to do their work, for example using a VPN service to access services that are blocked in a geographical area, or emulating some access from other geographies, and Uber-ization products in this area are also heavily created to take advantage of the large amount of unused IP/bandwidth from users.<br><strong> Caution</strong><br>Sharing public IP have a risk that the client an use your IP to do something dirty: botnet, crawling resource, fake traffic, .. <em><strong>then your ip address can be added to blacklist and prevent to access some website</strong>, i</em>t is not a problem if you use dynamic IP because IP will be changed after a period of time, but for static IP (especially corporate/company IP) so I strongly oppose to use non-personal resources to do this.</p><h4 id="2-free-hddnas-space">2. Free HDD/NAS Space:</h4><p>If you have some HDD or free Space on your home NAS ( more than 550GB or at least 1TB), you can offer it for rent in storage sharing platform then earn income from it. From my view, 1TB HDD can earn up tp $4/TB every month if you setting up with store, read more at my <a href="https://vinguyen.blog/review-storj-node-operator-revenue-and-profit-2022/">Storj Review for 2022</a><br><strong> Caution</strong><br> As my opinion: sharing Storage space is have a lower Risk than sharing IP/Bandwidth<br>But make sure that if your current HDD/NAS is storage important data, never make it as a sharable disk and alway make sure that your data have the backup.</p><h4 id="3-cpu-power">3. CPU Power:</h4><p>CPU power is a crucial resource for all computer tasks, and in the decentralized trend, many products aim to share and mine together to leverage the distributed power of multiple CPUs. However, currently, there is no fully functional application that can effectively share computing power from CPUs. <a href="https://www.golem.network/">Golem</a>, for example, is still in its beta phase. Other products like <a href="https://dfinity.org/">Dfinity</a> and Aleo require professional-level infrastructure and may not be suitable for the context of this article. Another use of CPU power is mining cryptocurrencies, but this can be inefficient and energy-consuming, leading to high depreciation costs. It is more cost-effective to set up professional mining systems with low electricity costs for cryptocurrency mining.</p><h4 id="4-gpu-power">4. GPU Power:</h4><p>It the same with CPU Power, your can trying to sharing with to do do some render task with <a href="https://rendertoken.com/">https://rendertoken.com/</a> or try to setup crypto mining with it, but I don&#x2019;t recommence you do that ( crypto mining)s</p><h3 id="how-can-we-earn-from-it">How can we earn from it?</h3><h4 id="public-ip-network-bandwidth">Public IP &amp; Network bandwidth:</h4><p>To sharing Public IP &amp; Network bandwidth, you will need a PC/ mini PC/ Raspberry PI that online almost time, then select some tools and setup on it. Here&#x2019;re 2 tool that I already test by myself:</p><p><strong><a href="https://r.honeygain.me/SMTEA64AA1">Honeygain</a></strong>: a bandwidth sharing tool that easy to setup and Run, it&#x2019;ll use your bandwidth &amp; and IP tool to do some internet task form there customer, user can receive payout via PayPal Or Jumptask Crypto. As the estimation from their dashboard, user can earn uptown $1 for every 1Gb data share.</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2023/01/CleanShot-2023-01-12-at-15.49.49@2x.png" class="kg-image" alt="Earn extra income from available computer resources and benefit beyond it." loading="lazy"></figure><p><strong><a href="%20https://www.mysterium.network/">Mysterium network</a></strong>: a Decentralize VPN built and roll-out production, it provide a platform &amp; facilitate to connect the VPN provider and user to provide VPN service, you can earn 3-5Myst token ( 1-1.5USD) per month with one Myst Node ( then Myst will take 20% commission from it as the network fee).</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2023/01/CleanShot-2023-01-12-at-15.47.53@2x.png" class="kg-image" alt="Earn extra income from available computer resources and benefit beyond it." loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2023/01/CleanShot-2023-01-12-at-15.48.14@2x.png" class="kg-image" alt="Earn extra income from available computer resources and benefit beyond it." loading="lazy"></figure><h4 id="hdd">HDD</h4><p><strong>Setup a Node:</strong></p><p>I have a the detail guide to setup new Storj node, you can check it <a href="[https://vinguyen.blog/storj-guide-to-setup-a-high-avaibilility-node/]">here</a> and you can also check the income that I collect <a href="https://vinguyen.blog/review-storj-node-operator-revenue-and-profit-2022/">here</a></p><p>As my opinion, setup this one help me learn a lot of things about how to maintain a system that need to high availability, it it also inspired me to setup &amp; operate the monitoring &amp; alerting system, that&#x2019;ll give you a lot of experience if your job related to System Operation or DevOps</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2023/01/CleanShot-2023-01-12-at-15.57.32@2x.png" class="kg-image" alt="Earn extra income from available computer resources and benefit beyond it." loading="lazy"></figure><h4 id="sharing-cpugpu-power">Sharing CPU/GPU Power:</h4><p><strong>For CPU power</strong>, you can become a Golem Provider, you can try to setup it with the tutorial bellow</p><p><a href="https://handbook.golem.network/provider-tutorials/provider-tutorial">https://handbook.golem.network/provider-tutorials/provider-tutorial</a></p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2023/01/CleanShot-2023-01-12-at-16.00.21@2x.png" class="kg-image" alt="Earn extra income from available computer resources and benefit beyond it." loading="lazy"></figure><p>But in my experience, the efficiency of this is not high, because Golem is still in beta testing stage and has not built an effective mining community, so the number of providers is much more. compared to the number of tasks the user executes.</p><p><strong>For Crypto Mining</strong> if you ready want to try, you can try some tool support for end user like Cudominer Or MinerGate. It&#x2019;ll support GUI to setup &amp; configuration that help you choose coin, num of CPU/GPU power use for mining</p><h4 id="conclusion">Conclusion</h4><p>By this way, you can maximize available resources to acquire and sharpen the necessary skills for your desired job, utilize context and motivation to delve into relevant technologies and industry trends. Stay committed and earn a reward for your efforts through financial gain</p>]]></content:encoded></item><item><title><![CDATA[Các việc nên làm sau khi setup server Ubuntu (Linux) mới trên Cloud.]]></title><description><![CDATA[<h3 id="context">Context:</h3><p>B&#xE0;i vi&#x1EBF;t n&#xE0;y m&#xEC;nh chia s&#x1EBB; m&#x1ED9;t s&#x1ED1; &#x111;i&#x1EC3;m m&#xEC;nh th&#x1EA5;y c&#x1EA7;n l&#xE0;m v&#xE0; l&#xFD; do c&#x1EA7;n l&#xE0;m khi setup</p>]]></description><link>https://vinguyen.blog/cac-viec-nen-lam-sau-khi-setup-server-ubuntu-linux-moi-tren-cloud/</link><guid isPermaLink="false">63b447b18120730001bdaffe</guid><category><![CDATA[ubuntu]]></category><category><![CDATA[linux]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[DevOps]]></category><category><![CDATA[Sharing]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Tue, 03 Jan 2023 15:33:36 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2023/01/ubuntu--1--1.png" medium="image"/><content:encoded><![CDATA[<h3 id="context">Context:</h3><img src="https://vinguyen.blog/content/images/2023/01/ubuntu--1--1.png" alt="C&#xE1;c vi&#x1EC7;c n&#xEA;n l&#xE0;m sau khi setup server Ubuntu (Linux) m&#x1EDB;i tr&#xEA;n Cloud."><p>B&#xE0;i vi&#x1EBF;t n&#xE0;y m&#xEC;nh chia s&#x1EBB; m&#x1ED9;t s&#x1ED1; &#x111;i&#x1EC3;m m&#xEC;nh th&#x1EA5;y c&#x1EA7;n l&#xE0;m v&#xE0; l&#xFD; do c&#x1EA7;n l&#xE0;m khi setup m&#x1ED9;t ubuntu server m&#x1EDB;i theo kinh nghi&#x1EC7;m c&#xE1; nh&#xE2;n v&#xE0; d&#x1EF1;a tr&#xEA;n c&#xE1;c l&#x1ED7;i l&#x1EB7;p &#x111;i l&#x1EB7;p l&#x1EA1;i trong team m&#xEC;nh</p><p>C&#xF3; r&#x1EA5;t nhi&#x1EC1;u d&#x1EA1;ng b&#xE0;i vi&#x1EBF;t nh&#x1B0; v&#x1EA7;y &#x111;&#x1B0;&#x1EE3;c &#x111;&#x1B0;&#x1EE3;c vi&#x1EBF;t v&#xE0; t&#x1EEB; nh&#x1EEF;ng cloud v&#xE0; c&#xE1;c trang web n&#x1ED5;i ti&#x1EBF;ng, b&#x1EA1;n c&#xF3; th&#x1EC3; tham kh&#x1EA3;o th&#xEA;m tr&#xEA;n &#x111;&#x1EC3; l&#x1EA5;y th&#xEA;m c&#xE1;c scope kh&#xE1;c ph&#xF9; h&#x1EE3;p v&#x1EDB;i m&#xF4;i tr&#x1B0;&#x1EDD;ng l&#xE0;m vi&#x1EC7;c v&#xE0; ti&#x1EC3;u chu&#x1EA9;n setup c&#x1EE7;a c&#xE1;c b&#x1EA1;n.</p><p>M&#xEC;nh quen l&#xE0;m vi&#x1EC7;c v&#x1EDB;i m&#xF4;i tr&#x1B0;&#x1EDD;ng Ubuntu Server nh&#x1B0;ng c&#xE1;c vi&#x1EC7;c n&#xE0;y h&#x1EA7;u h&#x1EBF;t &#x111;&#x1EC1;u l&#xE0; chung cho m&#xF4;i tr&#x1B0;&#x1EDD;ng Linux kh&#xE1;c.</p><h4 id="n%E1%BB%99i-dung-ch%C3%ADnh">N&#x1ED9;i dung ch&#xED;nh:</h4><ol><li>T&#x1EA1;o user &amp; c&#x1EA5;u h&#xEC;nh cho user m&#x1EDB;i.</li><li>C&#x1EA5;u h&#xEC;nh ssh:</li><li>C&#x1EA5;u h&#xEC;nh Swap file</li><li>C&#x1EA5;u h&#xEC;nh firewall</li><li>C&#x1EA5;u h&#xEC;nh DNS</li><li>&#x110;&#x1EA3;m b&#x1EA3;o h&#x1EC7; th&#x1ED1;ng &#x111;&#x1B0;&#x1EE3;c update</li></ol><h3 id="i-t%E1%BA%A1o-user-c%E1%BA%A5u-h%C3%ACnh-cho-user-m%E1%BB%9Bi">I. T&#x1EA1;o user &amp; c&#x1EA5;u h&#xEC;nh cho user m&#x1EDB;i.</h3><h4 id="why">Why:</h4><p>Th&#xF4;ng th&#x1B0;&#x1EDD;ng m&#x1ED9;t server m&#x1EDB;i khi &#x111;&#x1B0;&#x1EE3;c init s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c setup v&#x1EDB;i 1 user m&#x1EB7;c &#x111;&#x1ECB;nh, c&#xF3; th&#x1EC3; l&#xE0; <strong>root</strong> ( vd Digital Ocean), ho&#x1EB7;c user m&#x1EB7;c &#x111;&#x1ECB;nh theo linux distro ( vd Aws <strong>ubuntu</strong> cho Ubuntu ho&#x1EB7;c <strong>ec2-user</strong> cho Amazon Linux), ch&#x1EC9; c&#xF3; 1 s&#x1ED1; &#xED;t cloud cho ph&#xE9;p &#x111;i&#x1EC1;n user mong mu&#x1ED1;n khi kh&#x1EDF;i t&#x1EA1;o/ provisioning server.</p><p><strong>V&#x1EAD;y n&#x1EBF;u s&#x1EED; d&#x1EE5;ng user m&#x1EB7;c &#x111;&#x1ECB;nh th&#xEC; c&#xF3; r&#x1EE7;i ro g&#xEC;?</strong></p><ul><li><strong>N&#x1EBF;u l&#xE0; Root:</strong> vi&#x1EC7;c n&#xE0;y c&#x1EF1;c k&#xEC; kh&#xF4;ng n&#xEA;n, v&#xEC; root user l&#xE0; user t&#x1ED1;i th&#x1B0;&#x1EE3;ng c&#xF3; quy&#x1EC1;n cao nh&#x1EA5;t c&#x1EE7;a system. n&#xEA;n vi&#x1EC7;c h&#x1EA1;n ch&#x1EBF; t&#x1ED1;i &#x111;a c&#xE1;c t&#xE1;c v&#x1EE5; th&#xF4;ng th&#x1B0;&#x1EDD;ng v&#x1EDB;i root user l&#xE0; b&#x1EAF;t bu&#x1ED9;c, s&#x1EED; d&#x1EE5;ng root v&#x1EEB;a kh&#xF3; cho vi&#x1EC7;c qu&#x1EA3;n l&#xFD; m&#xE0; v&#x1EEB;a t&#x1EA1;o ra nhi&#x1EC1;u r&#x1EE7;i ro v&#x1EC1; security.</li><li><strong>N&#x1EBF;u l&#xE0; non-root user:</strong> Tr&#xE1;nh c&#xE1;c l&#x1ED7;i zero-day ho&#x1EB7;c b&#x1ECB; khai kh&#xE1;c b&#x1EDF;i c&#xE1;c bot script t&#x1EA5;n c&#xF4;ng theo ph&#x1B0;&#x1A1;ng ph&#xE1;p v&#xE9;t c&#x1EA1;n &amp; t&#xEC;m c&#xE1;c config m&#x1EB7;c &#x111;&#x1ECB;nh &#x111;&#x1EC3; khai th&#xE1;c.</li></ul><h4 id="what">What:</h4><ul><li><strong>T&#x1EA1;o user &amp; group m&#x1EDB;i:</strong> &#x111;&#x1EC3; gi&#x1EA3;i quy&#x1EBF;t why b&#xEA;n tr&#xEA;n.</li><li><strong>Group m&#x1EDB;i (t&#xF9;y ch&#x1ECD;n)</strong>: t&#x1B0;&#x1A1;ng t&#x1EF1; v&#x1EDB;i user, n&#x1EBF;u th&#xF4;ng th&#x1B0;&#x1EDD;ng cloud &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o ra v&#x1EDB;i account root th&#xEC; c&#x169;ng ch&#x1EC9; c&#xF3; group root &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o m&#x1EB7;c &#x111;&#x1ECB;nh, v&#xE0; khi user &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o th&#xEC; m&#x1ED9;t group m&#x1EDB;i &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o ra c&#xF9;ng t&#xEA;n v&#x1EDB;i user, nh&#x1B0;ng theo m&#xEC;nh th&#xEC; c&#x1EE9; t&#x1EA1;o th&#xEA;m 1 group m&#x1EB7;c &#x111;&#x1ECB;nh kh&#xE1;c ( vd t&#xEA;n product c&#x1EE7;a b&#x1EA1;n)</li><li><strong>Cho user m&#x1EDB;i quy&#x1EC1;n truy c&#x1EAD;p sudo ( t&#xF9;y ch&#x1ECD;n v&#xE0; c&#xE2;n nh&#x1EAF;c)</strong>: vi&#x1EC7;c n&#xE0;y s&#x1EBD; gi&#xFA;p cho user c&#xF3; quy&#x1EC1;n th&#x1EF1;c hi&#x1EC7;n t&#xE1;c t&#xE1;c v&#x1EE5; li&#xEA;n quan &#x111;&#x1EBF;n quy&#x1EC1;n root ( m&#xEC;nh th&#xED;ch thu&#x1EAD;t ng&#x1EEF; m&#x1B0;&#x1EE3;n tay root), nh&#x1B0;ng c&#x1EA7;n c&#xE2;n nh&#x1EAF;c v&#x1EC1; vi&#x1EC7;c n&#xEA;n hay kh&#xF4;ng t&#xF9;y thu&#x1ED9;c v&#xE0;o nhu c&#x1EA7;u c&#x1EE7;a b&#x1EA1;n, v&#xEC; nhi&#x1EC1;u quy&#x1EC1;n h&#x1A1;n th&#xEC; nhi&#x1EC1;u r&#x1EE7;i ro v&#xE0; tr&#xE1;ch nhi&#x1EC7;m h&#x1A1;n, &#x111;&#xFA;ng ng&#x1B0;&#x1EDD;i &#x111;&#xFA;ng vi&#x1EC7;c m&#x1EDB;i l&#xE0; h&#x1EE3;p l&#xFD;.</li><li><strong>Cho ph&#xE9;p s&#x1EED; d&#x1EE5;ng sudo m&#xE0; kh&#xF4;ng c&#x1EA7;n nh&#x1EAD;p password ( t&#xF9;y ch&#x1ECD;n &amp; c&#xE2;n nh&#x1EAF;c)</strong>: vi&#x1EC7;c n&#xE0;y gi&#xFA;p t&#x103;ng t&#xED;nh ti&#x1EC7;n d&#x1EE5;ng, nh&#x1B0;ng gi&#x1EA3;m kh&#x1EA3; n&#x103;ng b&#x1EA3;o m&#x1EAD;t, n&#x1EBF;u c&#xE1;c b&#x1EA1;n c&#x1EA7;n th&#xEC;</li></ul><h4 id="how">How:</h4><p>Create new user &amp; group</p><pre><code class="language-bash"># Create new user &amp; group
sudo adduser newuser
sudo addgroup newgroup
sudo usermod -g newgroup newuser

</code></pre><p>Add user to sudo group</p><pre><code class="language-bash">sudo usermod -aG sudo newuser
</code></pre><p>Use sudo without password</p><pre><code class="language-bash">sudo cp /etc/sudoers /root/sudoers.bak
sudo visudo
### Add this line to end of the file
newuser ALL=(ALL) NOPASSWD: ALL
</code></pre><h3 id="ii-c%E1%BA%A5u-h%C3%ACnh-ssh">II. C&#x1EA5;u h&#xEC;nh ssh:</h3><h4 id="why-1">Why:</h4><p>Ssh l&#xE0; c&#x1ED5;ng v&#xE0;o c&#x1EE7;a h&#x1EA7;u h&#x1EBF;t c&#xE1;c server Linux, n&#xEA;n vi&#x1EC7;c &#x111;&#x1EA3;m b&#x1EA3;o c&#xE1;c th&#xF4;ng s&#x1ED1; &#x111;&#x1B0;&#x1EE3;c c&#x1EA5;u h&#xEC;nh &#x111;&#xFA;ng v&#xE0; &#x111;&#x1EE7; l&#xE0; c&#x1EF1;c k&#xEC; c&#x1EA7;n thi&#x1EBF;t &#x111;&#x1EC3; c&#xE2;n b&#x1EB1;ng gi&#x1EEF;a t&#xED;nh ti&#x1EC7;n d&#x1EE5;ng v&#xE0; t&#xED;nh b&#x1EA3;o m&#x1EAD;t c&#x1EE7;a server.</p><h4 id="what-1">What:</h4><p><strong>C&#x1EA5;u h&#xEC;nh truy c&#x1EAD;p ssh s&#x1EED; d&#x1EE5;ng ssh-key:</strong> theo m&#xEC;nh th&#x1EA5;y th&#xEC; s&#x1EED; d&#x1EE5;ng ssh key &#x111;&#x1EA3;m b&#x1EA3;o t&#xED;nh b&#x1EA3;o m&#x1EAD;t t&#x1ED1;t h&#x1A1;n (tr&#x1EEB; khi n&#xE0;o b&#x1EA1;n &#x111;&#x1EC3; leak private key), v&#xE0; c&#x169;ng ti&#x1EC7;n d&#x1EE5;ng h&#x1A1;n nhi&#x1EC1;u. N&#x1EBF;u b&#x1EA1;n c&#xF3; 1 server th&#xEC; m&#x1ED7;i l&#x1EA7;n ssh g&#xF5; password kh&#xF4;ng th&#xE0;nh v&#x1EA5;n &#x111;&#x1EC1;, nh&#x1B0;ng 100 servers th&#xEC; c&#x1EF1;c k&#xEC; m&#x1EC7;t m&#x1ECF;i, v&#xE0; c&#x169;ng r&#x1EA5;t kh&#xF3; &#x111;&#x1EC3; th&#x1EF1;c hi&#x1EC7;n c&#xE1;c t&#xE1;c v&#x1EE5; automation.</p><p>Tham kh&#x1EA3;o th&#xEA;m:</p><ul><li><a href="https://www.sharetru.com/blog/why-use-ssh-key-authentication-for-sftp-instead-of-password-authentication">https://www.sharetru.com/blog/why-use-ssh-key-authentication-for-sftp-instead-of-password-authentication</a></li><li><a href="https://www.hostwinds.com/tutorials/ssh-password-vs-key-based-authentication">https://www.hostwinds.com/tutorials/ssh-password-vs-key-based-authentication</a></li></ul><p><strong>C&#x1EA5;u h&#xEC;nh m&#x1ED9;t s&#x1ED1; tham s&#x1ED1; c&#x1EE7;a ssh service &#x111;&#x1EC3; t&#x103;ng t&#xED;nh b&#x1EA3;o m&#x1EAD;t:</strong></p><ul><li>&#x110;&#x1ED5;i port ssh</li><li>Disable root login</li><li>Disable ssh login with password</li><li>Whitelist IP c&#xF3; th&#x1EC3; truy c&#x1EAD;p server th&#xF4;ng qua SSH</li></ul><h4 id="how-1">How:</h4><p><strong>1. C&#x1EA5;u h&#xEC;nh truy c&#x1EAD;p ssh s&#x1EED; d&#x1EE5;ng ssh-key.</strong></p><p>T&#x1EEB; may local ho&#x1EB7;c bastion host c&#x1EE7;a b&#x1EA1;n</p><p><strong>Gen ssh key m&#x1EDB;i</strong></p><pre><code class="language-bash">ssh-keygen
</code></pre><p><strong>Copy ssh key l&#xEA;n server</strong></p><p><code>ssh-copy-id -i &lt;path/to/private/key&gt; username@serverip</code></p><p><strong>2. C&#xE0;i &#x111;&#x1EB7;t c&#xE1;c th&#xF4;ng s&#x1ED1; ssh</strong></p><p>Edit file <code>/etc/ssh/sshd_config</code> t&#x1B0;&#x1A1;ng &#x1EE9;ng v&#x1EDB;i c&#xE1;c n&#x1ED9;i dung d&#x1B0;&#x1EDB;i &#x111;&#xE2;y</p><pre><code class="language-bash">sudo vi /etc/ssh/ssd_config
</code></pre><pre><code class="language-bash"># Change value as the content bellow
#Port 22
Port 2349
#PermitRootLogin yes
PermitRootLogin no
# PasswordAuthentication yes
PasswordAuthentication no

ListenAddress 0.0.0.0
</code></pre><p>L&#x1B0;u &#xFD; v&#x1EDB;i listen address <code>0.0.0.0</code> cho ph&#xE9;p truy c&#x1EAD;p t&#x1EEB; m&#x1ECD;i &#x111;&#x1ECB;a ch&#x1EC9; ip, n&#x1EBF;u mu&#x1ED1;n ch&#x1EC9; &#x111;&#x1ECB;nh m&#x1ED9;t v&#xE0; IP ri&#xEA;ng bi&#x1EC7;t th&#xEC; c&#xF3; th&#x1EC3; th&#xEA;m nhi&#x1EC1;u d&#xF2;ng</p><pre><code>ListenAddress &lt;IP1&gt;
ListenAddress &lt;IP2&gt;
ListenAddress &lt;IP...&gt;
</code></pre><p><strong>Restart ssh service &#x111;&#x1EC3; apply c&#xE1;c config</strong></p><pre><code>sudo service ssh restart
</code></pre><p><strong>3. (Optional) C&#x1EA5;u h&#xEC;nh th&#xF4;ng tin ssh &#x1EDF; m&#xE1;y local &#x111;&#x1EC3; d&#x1EC5; truy c&#x1EAD;p</strong></p><pre><code>Host server_group.server1
    hostname server_1
    port 2349
    user newuser
    identityfile &lt;/path/to/private key&gt;
</code></pre><h3 id="iii-c%E1%BA%A5u-h%C3%ACnh-swap-file">III. C&#x1EA5;u h&#xEC;nh Swap file</h3><h4 id="why-2">Why:</h4><p>Vi&#x1EC7;c swap partition/ swap file m&#xEC;nh th&#x1EA5;y &#xED;t &#x111;&#x1B0;&#x1EE3;c nh&#x1EAF;c &#x111;&#x1EBF;n trong c&#xE1;c tutorial setup server ubuntu/linux m&#x1EDB;i, c&#xF3; th&#x1EC3; l&#xE0; m&#x1EB7;c &#x111;&#x1ECB;nh c&#xE1;c server physical &#x111;&#xE3; setup s&#x1EB5;n trong l&#xFA;c ph&#xE2;n v&#xF9;ng v&#xE0; c&#xE0;i &#x111;&#x1EB7;t OS r&#x1ED3;i n&#xEA;n th&#x1B0;&#x1EDD;ng &#x111;&#x1B0;&#x1EE3;c b&#x1ECF; qua.</p><p>Nh&#x1B0;ng v&#x1EDB;i c&#xE1;c VPS, theo kinh nghi&#x1EC7;m VPS setup t&#x1EEB; c&#xE1;c cloud m&#xE0; c&#xF3; dung l&#x1B0;&#x1EE3;ng ram d&#x1B0;&#x1EDB;i 4G &amp; ch&#x1B0;a c&#xF3; swap partition th&#xEC; setup th&#xEA;m 1 ph&#xE2;n v&#xF9;ng swapfile nh&#x1ECF; l&#xE0; c&#x1EA7;n thi&#x1EBF;t theo kinh nghi&#x1EC7;m c&#xE1; nh&#xE2;n c&#x1EE7;a m&#xEC;nh</p><ul><li>Khi c&#xE1;c &#x1EE9;ng d&#x1EE5;ng trong server c&#xF3; nhu c&#x1EA7;u s&#x1EED; d&#x1EE5;ng Ram cao trong th&#x1EDD;i gian ng&#x1EAF;n h&#x1EA1;n. ( v&#xED; d&#x1EE5; upload file, export excel file, &#x2026;) th&#xEC; c&#xF3; th&#x1EC3; c&#xF3; tr&#x1B0;&#x1EDD;ng h&#x1EE3;p Ram &#x111;&#x1B0;&#x1EE3;c s&#x1EED; d&#x1EE5;ng to&#xE0;n b&#x1ED9;, d&#x1EAB;n &#x111;&#x1EBF;n t&#xEC;nh tr&#x1EA1;ng freeze to&#xE0;n b&#x1ED9; server, th&#x1B0;&#x1EDD;ng ph&#x1EA3;i &#x111;&#x1EE3;i r&#x1EA5;t l&#xE2;u &#x111;&#x1EC3; OS c&#xF3; th&#x1EC3; kill b&#x1EDB;t m&#x1ED9;t v&#xE0;i program &#x111;&#x1EC3; gi&#x1EA3;i ph&#xF3;ng b&#x1ED9; nh&#x1EDB; &#x111;&#x1EC3; server c&#xF3; th&#x1EC3; serve request tr&#x1EDF; l&#x1EA1;i, ho&#x1EB7;c t&#x1EC7; h&#x1A1;n th&#xEC; sever v&#xE0; ph&#x1EA3;i hard reboot th&#x1EE7; c&#xF4;ng ( v&#xE0; c&#xF3; th&#x1EC3; crash to&#xE0;n b&#x1ED9; &#x1ED5; c&#x1EE9;ng v&#xEC; chuy&#x1EC7;n n&#xE0;y :D )</li><li>V&#x1EDB;i c&#xE1;c server c&#xF3; dung l&#x1B0;&#x1EE3;ng Ram cao th&#xEC; m&#xEC;nh th&#x1EA5;y chuy&#x1EC7;n n&#xE0;y &#xED;t x&#x1EA3;y ra h&#x1A1;n, v&#xEC; kh&#xF4;ng gian Ram tr&#x1ED1;ng c&#xF3; v&#x1EBB; &#x111;&#x1EE7; nhi&#x1EC1;u &#x111;&#x1EC3; kh&#xF4;ng r&#x1A1;i v&#xE0;o c&#xE1;c worst case n&#xE0;y</li></ul><h4 id="what-2">What:</h4><p><strong>V&#x1EAD;y n&#xEA;n c&#x1EA5;u h&#xEC;nh Swapfile bao nhi&#xEA;u th&#xEC; &#x111;&#x1EE7;?</strong></p><ul><li>Theo m&#xEC;nh th&#xEC; ch&#x1EC9; n&#xEA;n c&#x1EA5;u h&#xEC;nh kho&#x1EA3;n t&#x1EEB; 25% &#x111;&#x1EBF;n 50% dung l&#x1B0;&#x1EE3;ng Ram. V&#xEC; n&#xF3; ch&#x1EC9; n&#xEA;n &#x111;&#xF3;ng vai tr&#xF2; l&#xE0; b&#x1ED9; nh&#x1EDB; t&#x1EA1;m th&#x1EDD;i, n&#x1EBF;u c&#xF3; nhu c&#x1EA7;u s&#x1EED; d&#x1EE5;ng memory nhi&#x1EC1;u h&#x1A1;n th&#xEC; n&#xEA;n c&#xE2;n nh&#x1EAF;c s&#x1EED; d&#x1EE5;ng m&#xE1;y c&#xF3; dung l&#x1B0;&#x1EE3;ng ram cao h&#x1A1;n.</li><li>N&#x1EBF;u setup dung l&#x1B0;&#x1EE3;ng swap qu&#xE1; cao th&#xEC; c&#xF3; th&#x1EC3; d&#x1EAB;n &#x111;&#x1EBF;n t&#xEC;nh tr&#x1EA1;ng swap ch&#x1B0;a c&#x1EA1;n m&#xE0; cpu b&#x1ECB; block v&#xEC; ph&#x1EA3;i &#x111;&#x1EE3;i t&#xE1;c v&#x1EE5; IO &#x111;&#x1EC3; lu&#xE2;n chuy&#x1EC3;n d&#x1EEF; li&#x1EC7;u gi&#x1EEF;a Ram vs Disk. M&#x1ED9;t case kinh &#x111;i&#x1EC3;n c&#xF3; th&#x1EC3; g&#x1EB7;p khi s&#x1EED; d&#x1EE5;ng Aws EC2 v&#x1EDB;i EBS GP2 l&#xE0; khi s&#x1EED; d&#x1EE5;ng nhi&#x1EC1;u swap, m&#xE0; t&#xE1;c v&#x1EE5; io tr&#xEA;n disk c&#x1EE7;a EBS b&#x1ECB; gi&#x1EDB;i h&#x1EA1;n theo c&#x1EA5;u h&#xEC;nh c&#x1EE7;a GP2, th&#xEC; m&#x1ED9;t t&#xEC;nh tr&#x1EA1;ng r&#x1EA5;t kh&#xF3; ch&#x1ECB;u x&#x1EA3;y ra l&#xE0; CPU th&#xEC; r&#x1EA3;nh, ( load th&#x1EA5;p, nh&#x1B0;ng io l&#x1EA1;i c&#x1EF1;c k&#xEC; cao) v&#xEC; CPU th&#xEC; &#x111;&#x1EE3;i Disk tr&#x1EA3; d&#x1EEF; li&#x1EC7;u &#x111;&#x1EC3; swap ra/v&#xE0;o ram, Disk th&#xEC; l&#x1EA1;i b&#x1ECB; gi&#x1EDB;i h&#x1EA1;n n&#x103;ng l&#x1EF1;c IOPS do gi&#x1EDB;i h&#x1EA1;n c&#x1EE7;a lo&#x1EA1;i &#x1ED5; &#x111;&#x129;a, v&#xE0; request t&#x1EEB; client th&#xEC; app ko serve &#x111;&#x1B0;&#x1EE3;c</li></ul><h4 id="how-2">How:</h4><pre><code>sudo fallocate -l 4G /swapfile &amp;&amp; \
sudo chmod 600 /swapfile &amp;&amp; \
sudo mkswap /swapfile &amp;&amp; \
sudo swapon /swapfile &amp;&amp; \
sudo swapon -s &amp;&amp; \
sudo cp /etc/fstab /etc/fstab.bak &amp;&amp; \
echo &apos;/swapfile none swap sw 0 0&apos; | sudo tee -a /etc/fstab
</code></pre><p>Tham kh&#x1EA3;o th&#xEA;m: <a href="https://gist.github.com/ngtrieuvi92/033de7ea8c880a9a500bf8df234ca6d2">https://gist.github.com/ngtrieuvi92/033de7ea8c880a9a500bf8df234ca6d2</a></p><h3 id="iv-c%E1%BA%A5u-h%C3%ACnh-firewall-ch%E1%BB%89-%C4%91%E1%BB%83-m%E1%BB%9F-c%C3%A1c-common-ports">IV. C&#x1EA5;u h&#xEC;nh firewall ch&#x1EC9; &#x111;&#x1EC3; m&#x1EDF; c&#xE1;c common ports</h3><h4 id="why-3">Why:</h4><p>Firewall l&#xE0; m&#x1ED9;t ch&#x1EE7; &#x111;&#x1EC1; kinh &#x111;i&#x1EC3;n r&#x1ED3;i v&#xE0; ch&#x1EAF;c m&#xEC;nh c&#x169;ng kh&#xF4;ng c&#x1EA7;n gi&#x1EA3;i th&#xED;ch nhi&#x1EC1;u, nguy&#xEA;n t&#x1EAF;c l&#xE0; m&#x1EDF; public c&#xE0;ng &#xED;t port c&#xE0;ng t&#x1ED1;t.</p><h4 id="what-3">What:</h4><p>Th&#x1B0;&#x1EDD;ng th&#xEC; m&#xEC;nh ch&#x1EC9; m&#x1EDF; c&#xE1;c port ssh, http, https v&#xE0; m&#x1EDF; th&#xEA;m c&#xE1;c port kh&#xE1;c khi th&#x1EAD;t s&#x1EF1; c&#xF3; nhu c&#x1EA7;u</p><ul><li>Tr&#xEA;n ubuntu th&#xEC; c&#xF3; th&#x1EC3; s&#x1EED; d&#x1EE5;ng <strong>ufw</strong>, ho&#x1EB7;c tr&#xEA;n c&#xE1;c server linux kh&#xE1;c ho&#x1EB7;c c&#xE1;c config ph&#x1EE9;c t&#x1EA1;p h&#x1A1;n th&#xEC; c&#xF3; th&#x1EC3; c&#xE0;i &#x111;&#x1EB7;t v&#xE0; s&#x1EED; d&#x1EE5;ng iptables</li><li>Tr&#xEA;n c&#xE1;c cloud th&#xEC; b&#x1EA1;n c&#xF3; th&#x1EC3; l&#x1B0;&#x1EDD;i config c&#xE1;c b&#x1B0;&#x1EDB;c n&#xE0;y v&#xE0; s&#x1EED; d&#x1EE5;ng c&#xE1;c concept setup inbound/oubound/security group do cloud cung c&#x1EA5;p &#x111;&#x1EC3; setup, v&#xED; d&#x1EE5; Aws: <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html">https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html</a></li></ul><h4 id="how-3">How:</h4><p><strong>V&#x1EDB;i server ubuntu:</strong></p><pre><code>sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22 # or custom ssh port
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

</code></pre><p>Tham kh&#x1EA3;o th&#xEA;m: <a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04">https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04</a></p><h3 id="v-c%E1%BA%A5u-h%C3%ACnh-dns">V. C&#x1EA5;u h&#xEC;nh DNS</h3><h4 id="why-4">Why:</h4><p>Vi&#x1EC7;c n&#xE0;y c&#xF3; th&#x1EC3; kh&#xF4;ng c&#x1EA7;n thi&#x1EBF;t tr&#xEA;n m&#x1ED9;t s&#x1ED1; cloud n&#x1ED5;i ti&#x1EBF;ng ( Aws, GCP, Azure, &#x2026;) nh&#x1B0;ng tr&#xEA;n m&#x1ED9;t s&#x1ED1; n&#x1EC1;n t&#x1EA3;ng cung c&#x1EA5;p VPS kh&#xE1;c. N&#x1EBF;u &#x111;&#x1EC3; v&#x1EDB;i DNS resolver m&#x1EB7;c &#x111;&#x1ECB;nh do OS setup, th&#xEC; vi&#x1EC7;c Ph&#xE2;n gi&#x1EA3;i c&#xE1;c domain kh&#xE1; t&#x1EC7; v&#xE0; ch&#x1EAD;p ch&#x1EDD;n, ( tr&#x1EA3;i nghi&#x1EC7;m th&#x1EF1;c t&#x1EBF; c&#x1EE7;a m&#xEC;nh v&#x1EDB;i <a href="https://www.time4vps.com/?affid=6225">Time4vps</a> ho&#x1EB7;c <a href="https://clients.servarica.com/aff.php?aff=611">Servarica</a></p><h4 id="what-4">What:</h4><p>N&#xEA;n s&#x1EED; d&#x1EE5;ng m&#x1ED9;t s&#x1ED1; DNS server ph&#x1ED5; bi&#x1EBF;n nh&#x1B0;:</p><ul><li>Google: 8.8.8.8</li><li>Cloudflare: 1.1.1.1</li><li>&#x2026;.</li></ul><h4 id="how-4">How:</h4><p><strong>C&#xE1;ch &#x111;&#x1A1;n gi&#x1EA3;n</strong></p><p><code>sudo vi /etc/resolv.conf</code></p><p>Add new line</p><pre><code>nameserver 8.8.8.8
nameserver 8.8.4.4
</code></pre><p>Restart service</p><pre><code>service systemd-resolved restart
</code></pre><p><strong>S&#x1EED; d&#x1EE5;ng netplan</strong></p><p>Netplan l&#xE0; m&#x1ED9;t ti&#x1EC7;n &#xED;ch m&#x1EDB;i &#x111;&#x1B0;&#x1EE3;c ubuntu gi&#x1EDB;i thi&#x1EC7;u t&#x1EEB; Ubuntu 17, Netplan cung c&#x1EA5;p nhi&#x1EC1;u t&#xF9;y ch&#x1ECD;n &#x111;&#x1EC3; config h&#x1A1;n v&#xE0; c&#xF3; th&#x1EC3; apply cho t&#x1EEB;ng network interface ri&#xEA;ng bi&#x1EC7;t, t&#xF9;y nhu c&#x1EA7;u b&#x1EA1;n c&#xF3; th&#x1EC3; tham kh&#x1EA3;o c&#xE1;ch s&#x1EED; d&#x1EE5;ng:</p><ul><li><a href="https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-configure-networking-in-ubuntu-20-04-with-netplan/">https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-configure-networking-in-ubuntu-20-04-with-netplan/</a></li><li><a href="https://www.linode.com/docs/guides/systemd-networkd/">https://www.linode.com/docs/guides/systemd-networkd/</a></li></ul><h3 id="vi-c%E1%BA%ADp-nh%E1%BA%ADp-c%C3%A1c-b%E1%BA%A3n-update">VI. C&#x1EAD;p nh&#x1EAD;p c&#xE1;c b&#x1EA3;n update</h3><h4 id="why-5">Why:</h4><p>&#x110;&#x1A1;n gi&#x1EA3;n: &#x111;&#x1EC3; &#x111;&#x1EA3;m b&#x1EA3;o c&#xE1;c package trong h&#x1EC7; th&#x1ED1;ng &#x111;&#x1B0;&#x1EE3;c update &#x111;&#x1EA7;y &#x111;&#x1EE7;</p><h4 id="what-5">What:</h4><p>C&#x1EE9; Theo package management do OS cung c&#x1EA5;p ch&#x1EA1;y l&#xE0; &#x111;&#x1B0;&#x1EE3;c</p><h4 id="how-5">How:</h4><pre><code>sudo apt update 
</code></pre><h3 id="m%E1%BB%99t-s%E1%BB%91-b%C3%A0i-vi%E1%BA%BFt-tham-kh%E1%BA%A3o-kh%C3%A1c">M&#x1ED9;t s&#x1ED1; b&#xE0;i vi&#x1EBF;t tham kh&#x1EA3;o kh&#xE1;c:</h3><ul><li><a href="https://www.liquidweb.com/kb/things-to-do-after-installing-a-ubuntu-server/">https://www.liquidweb.com/kb/things-to-do-after-installing-a-ubuntu-server/</a></li><li><a href="-%20https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-22-04">https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-22-04 </a></li><li><a href="https://www.makeuseof.com/tag/5-things-right-installing-ubuntu/">https://www.makeuseof.com/tag/5-things-right-installing-ubuntu/ </a></li><li><a href="-%20https://linuxhint.com/40_things_after_installing_ubuntu/">https://linuxhint.com/40<em>things</em>after<em>installing</em>ubuntu/</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Storj Node Operator -Setup and monitor node use docker-compose / systemd]]></title><description><![CDATA[<p>In this post, I&apos;ll share a guide to help you quick setup &amp; run a new Storj Node to take take use free HDD space and you can make some money from it.</p><blockquote>Important: <em>This is not investment advise; hosting and running a Storj node is a personal</em></blockquote>]]></description><link>https://vinguyen.blog/storj-guide-to-setup-a-high-avaibilility-node/</link><guid isPermaLink="false">63a1e0b1dbc2fb0001bc451e</guid><category><![CDATA[Storj]]></category><category><![CDATA[Storj-Node]]></category><category><![CDATA[Storage-solution]]></category><category><![CDATA[Node-as-a-service]]></category><category><![CDATA[DevOps]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Tue, 27 Dec 2022 16:09:28 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/12/storj-node-operator-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://vinguyen.blog/content/images/2022/12/storj-node-operator-1.png" alt="Storj Node Operator -Setup and monitor node use docker-compose / systemd"><p>In this post, I&apos;ll share a guide to help you quick setup &amp; run a new Storj Node to take take use free HDD space and you can make some money from it.</p><blockquote>Important: <em>This is not investment advise; hosting and running a Storj node is a personal choice, and each individual is fully accountable for that choice.</em></blockquote><p>About revenue of Storj Node, &#xA0;you quick can check at my review here: <a href="https://vinguyen.blog/review-storj-node-operator-revenue-and-profit-2022/">https://vinguyen.blog/review-storj-node-operator-revenue-and-profit-2022/</a></p><h2 id="i-what-is-storj">I. What is Storj?</h2><p>Storj is a decentralized cloud storage platform that uses a network of distributed nodes to store data. It is designed to be secure, scalable, and low-cost.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/storj-network.png" class="kg-image" alt="Storj Node Operator -Setup and monitor node use docker-compose / systemd" loading="lazy" width="1066" height="548" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/storj-network.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/storj-network.png 1000w, https://vinguyen.blog/content/images/2022/12/storj-network.png 1066w" sizes="(min-width: 720px) 720px"><figcaption>Source storj.io</figcaption></figure><p>In the Storj network, users can rent out their spare disk space to store data for other users. The data is encrypted and divided into smaller pieces, called shards, which are distributed across the network and stored on multiple nodes. This decentralized approach to storage makes it more secure and resilient than traditional cloud storage platforms, which rely on a single centralized server or data center to store data.</p><p>For more information: <a href="https://www.storj.io/">https://www.storj.io</a></p><h2 id="ii-what-is-storj-node">II. What is Storj Node?</h2><p>A Storj node is a computer &#xA0;that participates in the Storj Network by storing data for other users. When a user uploads data to the Storj network, the data is encrypted and divided into smaller pieces, called shards, which are distributed and stored across multiple nodes.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/6037d4618c3781500cdd99ab_6022e020b0be1565bd8da0f0_audit-image-1.png" class="kg-image" alt="Storj Node Operator -Setup and monitor node use docker-compose / systemd" loading="lazy" width="1356" height="698" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/6037d4618c3781500cdd99ab_6022e020b0be1565bd8da0f0_audit-image-1.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/6037d4618c3781500cdd99ab_6022e020b0be1565bd8da0f0_audit-image-1.png 1000w, https://vinguyen.blog/content/images/2022/12/6037d4618c3781500cdd99ab_6022e020b0be1565bd8da0f0_audit-image-1.png 1356w" sizes="(min-width: 720px) 720px"><figcaption>Source from: storj.io</figcaption></figure><h3 id="1-how-much-does-the-storj-node-get-paid">1. How much does the Storj node get paid?</h3><p>Storj nodes are paid based on the amount of data they store and the amount of bandwidth they use. The more data a node stores and the more bandwidth it uses, the more it will be paid.</p><p><strong>Average Payout Per Month:</strong></p><ul><li>Egress Bandwidth $20/TB</li><li>Repair Egress Bandwidth $10/TB</li><li>Disk Space $1.50/TB</li><li>Audit Bandwidth $10/TB</li></ul><p>The actual profit of some node that I summary for 2022: <a href="https://vinguyen.blog/review-storj-node-operator-revenue-and-profit-2022/">link</a></p><h3 id="2-what-is-the-minimum-requirement-to-become-a-storj-node-operator"><strong>2. What is the minimum requirement to become a Storj Node Operator?</strong></h3><p><em><em>Source From: <a href="https://docs.storj.io/node/before-you-begin/prerequisites">https://docs.storj.io/node/before-you-begin/prerequisites</a></em></em></p><p><strong>Node uptime:</strong></p><ul><li>Minimum uptime (online and operational) of 99.3% per month, max total downtime of 5 hours monthly</li></ul><p><strong>HDD: </strong></p><ul><li>Minimum of <strong>550 GB</strong> with no maximum of available space per node</li></ul><p><strong>Network</strong></p><ul><li>Public IP or a publish domain setup use DDNS service (example: <a href="https://www.noip.com?fpr=5pu8l">No-ip</a>) with port <strong><strong>28967</strong> </strong>open<strong>.</strong></li><li>Bandwidth: Minimum of <strong>2 TB</strong> of bandwidth available per month<a href="https://docs.storj.io/node/before-you-begin/prerequisites/#hardware-requirements-recommended" rel="nofollow noreferrer noopener">&#xFEFF;</a> with a public IP</li></ul><h2 id="iii-prepare-identity-key-to-setup-new-node">III. Prepare Identity key to setup new node</h2><h3 id="1-get-auth-token">1. Get Auth Token</h3><p>Go to <a href="https://www.storj.io/host-a-node">https://www.storj.io/host-a-node</a> and input your email and to generate auth token.</p><p><em><strong>If you want to setup multiple node use one email address, please complete setup a node before generate auth token for another node, if not, token is duplicated.</strong></em></p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-27-at-22.21.13@2x.png" class="kg-image" alt="Storj Node Operator -Setup and monitor node use docker-compose / systemd" loading="lazy" width="2000" height="965" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-27-at-22.21.13@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-27-at-22.21.13@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-27-at-22.21.13@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/CleanShot-2022-12-27-at-22.21.13@2x.png 2400w" sizes="(min-width: 720px) 720px"></figure><h3 id="2-create-identity-for-new-node">2. Create Identity for new node</h3><p>Check the detail of this step at the official document: <a href="https://docs.storj.io/node/dependencies/identity">https://docs.storj.io/node/dependencies/identity</a></p><p><em>For Linux quick command:</em></p><p><strong>Download identity tool</strong></p><pre><code>
curl -L https://github.com/storj/storj/releases/latest/download/identity_linux_amd64.zip -o identity_linux_amd64.zip
unzip -o identity_linux_amd64.zip
chmod +x identity
sudo mv identity /usr/local/bin/identity
</code></pre><p><strong>Create an Identity &amp; authorize identity file</strong></p><pre><code>identity create storagenode
identity authorize storagenode &lt;email:characterstring&gt;
grep -c BEGIN ~/.local/share/storj/identity/storagenode/ca.cert
grep -c BEGIN ~/.local/share/storj/identity/storagenode/identity.cert</code></pre><h3 id="iv-setup-a-node">IV. Setup a Node</h3><h3 id="1setup-new-node">1.Setup new Node</h3><p>Run the command bellow to setup a new node</p><p><em><strong>Replace the &lt;identity-dir&gt; and &lt;storage-dir&gt; with the directory in your node</strong></em></p><pre><code>docker run --rm -e SETUP=&quot;true&quot; \
    --user $(id -u):$(id -g) \
    --mount type=bind,source=&quot;&lt;identity-dir&gt;&quot;,destination=/app/identity \
    --mount type=bind,source=&quot;&lt;storage-dir&gt;&quot;,destination=/app/config \
    --name storagenode storjlabs/storagenode:latest</code></pre><h3 id="2-run-storj-node">2. Run Storj Node</h3><p><strong>Option 1: Run Node with docker-compose</strong></p><p>Create the docker-compose &amp; .env file as the content bellow and make sure that <em><strong>&lt;identity-dir&gt; </strong>and<strong> &lt;storage-dir&gt; </strong>is the same value with step a bove</em></p><p><em>docker-compose.yml</em></p><figure class="kg-card kg-code-card"><pre><code class="language-docker-compose.yml">version: &quot;3.5&quot;
services:
  storjnode:
    image: storjlabs/storagenode:latest
    container_name: storj
    ports:
      - &quot;28968:28967/tcp&quot;
      - &quot;28968:28967/udp&quot;
      - &quot;127.0.0.1:14003:14002&quot;
    volumes:
      - type: bind
        source: &lt;identity-dir&gt;
        target: /app/identity
      - type: bind
        source: &lt;storage-dir&gt;
        target: /app/config
    env_file:
      - .env
    restart: always
  auto_update:
    image: containrrr/watchtower:latest-dev
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    # Update check interval in seconds.
    command: --schedule &quot;0 0 * ? * *&quot; --label-enable --cleanup
    restart: always
    depends_on:
      - storjnode
    environment:
      - WATCHTOWER_LIFECYCLE_HOOKS=true
  # Storj Node Exporter
  storj_exporter:
    image: anclrii/storj-exporter:latest
    restart: always
    environment:
      - STORJ_HOST_ADDRESS=storjnode
    ports:
      - &quot;9651:9651&quot;</code></pre><figcaption>docker-compose Storj node with auto_update and storj_exporter</figcaption></figure><p>.env file</p><pre><code>WALLET=&quot;&lt;ERC-20 Token Address&gt;&quot;
EMAIL=&quot;&lt;email-register-node&gt;&quot;
ADDRESS=&quot;&lt;public-ip/domain&gt;:28968&quot;
STORAGE=&quot;1TB&quot; #Storage Space</code></pre><p><strong>Run command</strong></p><pre><code>docker-compose up -d
</code></pre><p>after run this command, your node will up &amp; run with:</p><ul><li>a Node container running, and serve the request on the Storj network</li><li>Automatic update &#xA0;to make sure that your node is always up to date</li><li>A Storj Exporter container to export all the node metric, your can collect &amp; visualize it on the prometheus &amp; grafana stack</li></ul><h3 id="option-2-setup-with-systemd">Option 2: Setup with systemd</h3><p>(to be update)</p><h3 id="3-optional-monitor-storj-node-with-grafana-prometheus">3. (Optional) Monitor Storj Node with Grafana &amp; Prometheus</h3><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-27-at-22.52.44@2x.png" class="kg-image" alt="Storj Node Operator -Setup and monitor node use docker-compose / systemd" loading="lazy" width="2000" height="925" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-27-at-22.52.44@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-27-at-22.52.44@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-27-at-22.52.44@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/CleanShot-2022-12-27-at-22.52.44@2x.png 2400w" sizes="(min-width: 720px) 720px"></figure><ul><li>Repository to setup Grafana, Prometheus: <a href="https://github.com/stefanprodan/dockprom">https://github.com/stefanprodan/dockprom</a></li><li>Storj Exporter Source: <a href="https://github.com/anclrii/Storj-Exporter">https://github.com/anclrii/Storj-Exporter</a></li><li>Grafana Storj Exporter Dashboard: <a href="https://github.com/anclrii/Storj-Exporter-dashboard">https://github.com/anclrii/Storj-Exporter-dashboard</a></li><li>Prometheus Collector Config:</li></ul><pre><code># prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s

# A scrape configuration containing exactly one endpoint to scrape.
scrape_configs:
  - job_name: storj
    scrape_interval: 60s
    metrics_path: /metrics
    static_configs:
      - targets: [&apos;&lt;node-ip&gt;:9651&apos;]

</code></pre><h3 id="4-optional-monitor-storj-node-uptime-with-use-uptimerobot">4. (Optional) Monitor Storj Node Uptime with use Uptimerobot</h3><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-27-at-22.58.50@2x.png" class="kg-image" alt="Storj Node Operator -Setup and monitor node use docker-compose / systemd" loading="lazy" width="2000" height="1297" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-27-at-22.58.50@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-27-at-22.58.50@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-27-at-22.58.50@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-27-at-22.58.50@2x.png 2264w" sizes="(min-width: 720px) 720px"></figure><p>Another option to monitor &amp; receive alert if your node is down with <a href="https://uptimerobot.com/?rid=cc2ec86737103e">Uptime Robot </a>by monitoring port 28967, but this approach can only help you receive the alert if node down, No any additional metrics is collect with this approach</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-27-at-23.00.04@2x.png" class="kg-image" alt="Storj Node Operator -Setup and monitor node use docker-compose / systemd" loading="lazy" width="2000" height="1114" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-27-at-23.00.04@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-27-at-23.00.04@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-27-at-23.00.04@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-27-at-23.00.04@2x.png 2040w" sizes="(min-width: 720px) 720px"></figure><p>For the detail guide to setup, please check my solution to monitor the </p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://vinguyen.blog/blog-development-series-setup-health-check-ghost-blog-with-uptime-robot/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Blog development series - Setup health check Ghost Blog with Uptime Robot</div><div class="kg-bookmark-description">TLDR; This is a series of post-recording &amp; sharing the progress setup of my blog from the beginning of development to meet the needs for stable and reliable blog operation Series * Blog development series - Setup MVP Blog with Ghost and Docker * Blog development series - Setup health check Ghos&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://vinguyen.blog/content/images/size/w256h256/2022/11/logo-v1---no-bg.png" alt="Storj Node Operator -Setup and monitor node use docker-compose / systemd"><span class="kg-bookmark-author">Vi Nguyen Blog</span><span class="kg-bookmark-publisher">V&#x129; Nguy&#x1EC5;n</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://vinguyen.blog/content/images/2022/11/CleanShot-2022-11-21-at-13.14.30@2x.png" alt="Storj Node Operator -Setup and monitor node use docker-compose / systemd"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Một ứng dụng của Blockchain và cryptocurrency trong xây dựng product -  micropayments (thanh toán vi mô)]]></title><description><![CDATA[<p>Trong b&#xE0;i n&#xE0;y m&#xEC;nh s&#x1EBD; n&#xF3;i v&#x1EC1; g&#xF3;c nh&#xEC;n m&#xE0; m&#xEC;nh th&#x1EA5;y cryptocurrency c&#xF3; th&#x1EC3; &#x1EE9;ng d&#x1EE5;ng &#x111;&#x1B0;&#x1EE3;c trong product sau khi m&</p>]]></description><link>https://vinguyen.blog/mot-ung-dung-cua-blockchain-va-cryptocurrency-trong-xay-du-product-micropayments-thanh-toan-vi-mo/</link><guid isPermaLink="false">637505890f5f3e0001df8c5b</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Cryptocurrency]]></category><category><![CDATA[micropayment]]></category><category><![CDATA[payment-gateway]]></category><category><![CDATA[Solution]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Mon, 26 Dec 2022 16:33:47 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/12/-MeatBlog--Blockchain---Micropayments-cyrptocurrency---micropayment.drawio.png" medium="image"/><content:encoded><![CDATA[<img src="https://vinguyen.blog/content/images/2022/12/-MeatBlog--Blockchain---Micropayments-cyrptocurrency---micropayment.drawio.png" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)"><p>Trong b&#xE0;i n&#xE0;y m&#xEC;nh s&#x1EBD; n&#xF3;i v&#x1EC1; g&#xF3;c nh&#xEC;n m&#xE0; m&#xEC;nh th&#x1EA5;y cryptocurrency c&#xF3; th&#x1EC3; &#x1EE9;ng d&#x1EE5;ng &#x111;&#x1B0;&#x1EE3;c trong product sau khi m&#xEC;nh th&#x1EED; nghi&#x1EC7;m qua m&#x1ED9;t v&#xE0;i product li&#xEA;n quan &#x111;&#x1EBF;n cung c&#x1EA5;p c&#xE1;c d&#x1ECB;ch v&#x1EE5; VPN, l&#x1B0;u tr&#x1EEF;, chia s&#x1EBB; t&#xE0;i nguy&#xEA;n t&#xED;nh to&#xE1;n ( compute power) ph&#xE2;n t&#xE1;n ( decentralize) &#x111;&#xF3; l&#xE0; s&#x1EED; d&#x1EE5;ng cho c&#xE1;c <strong>micropayments</strong>.</p><p><em>L&#x1B0;u &#xFD;: trong b&#xE0;i vi&#x1EBF;t n&#xE0;y m&#xEC;nh c&#xF3; nh&#x1EAF;c &#x111;&#x1EBF;n m&#x1ED9;t s&#x1ED1; product th&#x1EF1;c t&#x1EBF; m&#xE0; m&#xEC;nh c&#xF3; tr&#x1EA3;i nghi&#x1EC7;m &#x111;&#x1EC3; l&#xE0;m v&#xED; d&#x1EE5;, nh&#x1B0;ng m&#xEC;nh s&#x1EBD; kh&#xF4;ng x&#xE9;t &#x111;&#x1EBF;n m&#x1EE9;c &#x111;&#x1ED9; th&#xE0;nh c&#xF4;ng ho&#x1EB7;c t&#x1ED3;n t&#x1EA1;i c&#x1EE7;a product n&#xE0;y trong th&#x1EDD;i gian t&#x1EDB;i, v&#xEC; &#x111;&#x1A1;n gi&#x1EA3;n l&#xE0; build &#x111;&#x1B0;&#x1EE3;c m&#x1ED9;t product th&#xE0;nh c&#xF4;ng th&#xEC; kh&#xF3; m&#xE0; :D. Tr&#x1EA3;i nghi&#x1EC7;m c&#x1EE7;a l&#xE0;m vi&#x1EC7;c m&#xEC;nh trong c&#xF4;ng ty partnership v&#x1EDB;i c&#xE1;c &#x111;&#x1ED1;i t&#xE1;c c&#xF3; th&#x1EC3; &#x111;&#x1ED3;ng h&#xE0;nh t&#x1EA1;o ra c&#xE1;c impactful product cho th&#x1EA5;y v&#x1EAD;y. Qu&#xE1; nhi&#x1EC1;u bi&#x1EBF;n s&#x1ED1; t&#xE1;c &#x111;&#x1ED9;ng &#x111;&#x1EBF;n th&#xE0;nh c&#xF4;ng c&#x1EE7;a n&#xF3;. M&#xEC;nh ch&#x1EC9; b&#xE0;n &#x111;&#x1EBF;n ph&#x1EA7;n kh&#x1EA3; n&#x103;ng &#x1EE9;ng d&#x1EE5;ng thanh to&#xE1;n trong c&#xE1;c product n&#xE0;y s&#x1EED; d&#x1EE5;ng cryptocurrency th&#xF4;i.</em></p><h2 id="v%E1%BA%ADy-micropayment-l%C3%A0-g%C3%AC"><strong>V&#x1EAD;y micropayment l&#xE0; g&#xEC;?</strong></h2><blockquote>A micropayment is a small transaction, often carried out online, that can be as small as a fraction of a cent.</blockquote><p>Micropayment l&#xE0; m&#x1ED9;t giao d&#x1ECB;ch t&#xE0;i ch&#xED;nh li&#xEA;n quan &#x111;&#x1EBF;n m&#x1ED9;t kho&#x1EA3;n ti&#x1EC1;n r&#x1EA5;t nh&#x1ECF; v&#xE0; th&#x1B0;&#x1EDD;ng l&#xE0; m&#x1ED9;t kho&#x1EA3;n ti&#x1EC1;n di&#x1EC5;n ra tr&#x1EF1;c tuy&#x1EBF;n, v&#xE0; gi&#xE1; tr&#x1ECB; n&#xE0;y nh&#x1ECF; h&#x1A1;n m&#x1ED9;t s&#x1ED1; nh&#x1EA5;t &#x111;&#x1ECB;nh, c&#xF3; th&#x1EC3; ch&#x1EC9; l&#xE0; 1 ph&#x1EA7;n c&#x1EE7;a cent, ho&#x1EB7;c v&#xE0;i Viet Nam &#x111;&#x1ED3;ng.</p><h2 id="c%C3%A1c-product-c%C3%B3-th%E1%BB%83-%E1%BB%A9ng-d%E1%BB%A5ng-micropayment-ra-sao">C&#xE1;c product c&#xF3; th&#x1EC3; &#x1EE9;ng d&#x1EE5;ng micropayment ra sao?</h2><p>M&#xEC;nh th&#x1EA5;y trong c&#xE1;c product build theo d&#x1EA1;ng platform, &#x111;&#x1EC3; cung c&#x1EA5;p c&#x1A1; ch&#x1EBF; cho c&#xE1;c b&#xEA;n c&#xF9;ng &#x111;&#xF3;ng g&#xF3;p v&#xE0;o product v&#xE0; t&#x1EA1;o ra gi&#xE1; tr&#x1ECB; s&#x1EBD; th&#xED;ch h&#x1EE3;p cho c&#xE1;c d&#x1EA1;ng thanh to&#xE1;n n&#xE0;y.</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/-MeatBlog--Blockchain---Micropayments-Page-4.drawio--1-.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="721" height="201" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/-MeatBlog--Blockchain---Micropayments-Page-4.drawio--1-.png 600w, https://vinguyen.blog/content/images/2022/12/-MeatBlog--Blockchain---Micropayments-Page-4.drawio--1-.png 721w" sizes="(min-width: 720px) 720px"></figure><p>V&#xED; d&#x1EE5; v&#x1EC1; m&#x1EA3;ng VPN phi t&#x1EAD;p trung, 2 product trong m&#x1EA3;ng n&#xE0;y m&#xEC;nh c&#xF3; s&#x1EED; d&#x1EE5;ng qua, d&#x1B0;&#x1EDB;i c&#x1EA3; 2 g&#xF3;c &#x111;&#x1ED9; l&#xE0; Ng&#x1B0;&#x1EDD;i d&#xF9;ng &amp; Provider ( cung c&#x1EA5;p c&#xE1;c &#x111;&#x1ECB;a ch&#x1EC9; VPN cho ng&#x1B0;&#x1EDD;i d&#xF9;ng cu&#x1ED1;i) l&#xE0; <a href="https://www.mysterium.network/">Mysterium</a> v&#xE0; <a href="https://sentinel.co/">Sentinel</a>. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/how-myst-work-bold.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="1080" height="876" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/how-myst-work-bold.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/how-myst-work-bold.png 1000w, https://vinguyen.blog/content/images/2022/12/how-myst-work-bold.png 1080w" sizes="(min-width: 720px) 720px"><figcaption>Ngu&#x1ED3;n: https://docs.mysterium.network/about-mysterium</figcaption></figure><p>Nh&#x1B0; tr&#xEA;n h&#xEC;nh, b&#x1EA1;n c&#xF3; th&#x1EC3; th&#x1EA5;y c&#xF3; 3 b&#xEA;n tham gia v&#xE0;o vi&#x1EC7;c cung c&#x1EA5;p v&#xE0; s&#x1EED; d&#x1EE5;ng VPN.</p><ul><li><strong>Broker</strong>: &#x110;&#xF3;ng v&#xE0;i tr&#xF2; nh&#x1B0; m&#xF4; gi&#x1EDB;i &#x111;&#x1EC3; t&#x1ED5; ch&#x1EE9;c v&#xE0; &#x111;i&#x1EC1;u ph&#x1ED1;i vi&#x1EC7;c cho thu&#xEA; v&#xE0; thu&#xEA; VPN, v&#xE0; nh&#x1EAD;n kho&#x1EA3;n ph&#xED; t&#x1EEB; c&#xE1;c transaction &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o ra tr&#xEA;n n&#x1EC1;n t&#x1EA3;ng c&#x1EE7;a m&#xEC;nh </li><li><strong>Provider</strong> ( ho&#x1EB7;c Node Operator): l&#xE0; b&#xEA;n cung c&#x1EA5;p t&#xE0;i nguy&#xEA;n VPN &amp; c&#xF3; nhu c&#x1EA7;u cho b&#xEA;n &#xA0;Consumer thu&#xEA; &#x111;&#x1EC3; s&#x1EED; d&#x1EE5;ng v&#xE0; nh&#x1EAD;n v&#x1EC1; benefit cho m&#xEC;nh.</li><li><strong>Consumer</strong>: l&#xE0; b&#xEA;n c&#xF3; nhu c&#x1EA7;u t&#xEC;m ki&#x1EBF;m v&#xE0; thu&#xEA; VPN &#x111;&#x1EC3; s&#x1EED; d&#x1EE5;ng v&#xE0; s&#x1EB5;n s&#xE0;ng tr&#x1EA3; ti&#x1EC1;n cho vi&#x1EC7;c &#x111;&#xF3;, vd nh&#x1B0; m&#xEC;nh c&#x1EA7;n v&#xE0;o &#x111;&#x1ECD;c Medium ( ch&#x1EB3;ng hi&#x1EC3;u sao network nh&#xE0; m&#xEC;nh l&#x1EA1;i Medium b&#x1ECB; Medium ch&#x1EB7;n :D)</li></ul><p><strong>M&#x1ED9;t v&#xED; d&#x1EE5; kh&#xE1;c l&#x1EA5;y t&#x1EEB; Golem Network :</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-00.27.51.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="746" height="598" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-26-at-00.27.51.png 600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-00.27.51.png 746w" sizes="(min-width: 720px) 720px"><figcaption>Ngu&#x1ED3;n: Golem Whitepaper</figcaption></figure><p>V&#x1EDB;i m&#xF4; h&#xEC;nh c&#x1EE7;a Golem c&#x169;ng t&#x1B0;&#x1A1;ng t&#x1EF1; nh&#x1B0; Mysterium hay Sentinel, ch&#x1EC9; kh&#xE1;c &#x1EDF; ph&#x1EA7;n d&#x1ECB;ch v&#x1EE5; m&#xE0; product cung c&#x1EA5;p, thay v&#xEC; cung c&#x1EA5;p VPN th&#xEC; Golem t&#x1EAD;p trung v&#xE0;o gi&#x1EA3;i ph&#xE1;p cung c&#x1EA5;p t&#xE0;i nguy&#xEA;n t&#xED;nh to&#xE1;n cho requestor, th&#xF4;ng qua 1 giao th&#x1EE9;c chu&#x1EA9;n do Golem define ra &#x111;&#x1EC3; &#x111;&#x1EA3;m b&#x1EA3;o c&#xE1;c application c&#xF3; th&#x1EBB; ch&#x1EA1;y &#x111;&#x1B0;&#x1EE3;c tr&#xEA;n c&#xE1;c provider machine v&#xE0; tr&#x1EA3; v&#x1EC1; k&#x1EBF;t qu&#x1EA3; mong mu&#x1ED1;n cho Requestor.</p><p><strong>Chi ti&#x1EBF;t h&#x1A1;n v&#x1EC1; c&#xE1;ch apply micropayments trong d&#x1EA1;ng product n&#xE0;y:</strong></p><p>Nh&#xEC;n v&#x1EC1; kh&#xED;a c&#x1EA1;nh product, th&#xEC; m&#x1ED9;t platform d&#x1EA1;ng nh&#x1B0; n&#xE0;y s&#x1EBD; c&#xF3; 2 scope ch&#xED;nh c&#x1EA7;n quan t&#xE2;m: </p><ul><li>Cung c&#x1EA5;p gi&#x1EA3;i ph&#xE1;p &#x111;&#x1EB7;c th&#xF9; c&#x1EE7;a product: H&#x1EA1; t&#x1EA7;ng k&#x1EBF;t n&#x1ED1;i VPN ho&#x1EB7;c s&#x1EE9;c m&#x1EA1;nh t&#xED;nh to&#xE1;n, kh&#xF4;ng gian l&#x1B0;u tr&#x1EEF;, ... n&#xF3;i th&#x1EB3;ng ra l&#xE0; b&#x1EA5;t c&#x1EE9; t&#xE0;i nguy&#xEA;n g&#xEC; c&#xF3; th&#x1EC3; m&#xF4; gi&#x1EDB;i trung gian &#x111;&#x1B0;&#x1EE3;c tr&#xEA;n n&#x1EC1;n t&#x1EA3;ng internet, t&#xF9;y v&#xE0;o target v&#xE0; v&#x1EA5;n &#x111;&#x1EC1; m&#xE0; product mu&#x1ED1;n gi&#x1EA3;i quy&#x1EBF;t</li><li>X&#x1EED; l&#xFD; ph&#x1EA7;n thanh to&#xE1;n cho c&#xE1;c giao d&#x1ECB;ch gi&#x1EEF;a requestor v&#xE0; provider, v&#xE0; tr&#xED;ch hoa h&#x1ED3;ng cho broker.</li><li>C&#xE1;c scope kh&#xE1;c &#x111;&#x1EC3; ph&#x1EE5;c v&#x1EE5; cho nhu c&#x1EA7;u product m&#xEC;nh t&#x1EA1;m kh&#xF4;ng b&#xE0;n &#x111;&#x1EBF;n.</li></ul><p><strong>1.Cung c&#x1EA5;p gi&#x1EA3;i ph&#xE1;p &#x111;&#x1EB7;c th&#xF9; c&#x1EE7;a product (h&#x1EA1; t&#x1EA7;ng k&#x1EBF;t n&#x1ED1;i VPN, s&#x1EE9;c m&#x1EA1;nh t&#xED;nh to&#xE1;n, ...): </strong></p><p>Ph&#x1EA7;n n&#xE0;y th&#xEC; kh&#xF4;ng li&#xEA;n quan g&#xEC; t&#x1EDB;i crypto ho&#x1EB7;c blockchain. </p><p>V&#xED; d&#x1EE5; trong VPN solution th&#xEC; v&#x1EAB;n l&#xE0; c&#xE1;c v&#x1EA5;n &#x111;&#x1EC1; k&#x129; thu&#x1EAD;t c&#x1EE7;a c&#x1EE7;a networking v&#xE0; setup VPN, v&#x1EC1; c&#x1A1; b&#x1EA3;n th&#xEC; m&#xEC;nh th&#x1EA5;y n&#xF3; kh&#xF4;ng kh&#xE1;c g&#xEC; c&#xE1;c app VPN kh&#xE1;c: cung c&#x1EA5;p gi&#x1EA3;i ph&#xE1;p k&#x1EBF;t n&#x1ED1;i d&#x1EF1;a tr&#xEA;n m&#x1ED9;t s&#x1ED1; giao th&#x1EE9;c chu&#x1EA9;n nh&#x1B0; WireGaurd, OpenVPN, v&#xE0; vi&#x1EBF;t c&#xE1;c app &#x111;&#x1EA7;u cu&#x1ED1;i abstract c&#xE1;c giao th&#x1EE9;c n&#xE0;y th&#xE0;nh giao di&#x1EC7;n tr&#xEA;n UI &#x111;&#x1EC3; user c&#xF3; th&#x1EC3; ti&#x1EC7;n s&#x1EED; d&#x1EE5;ng.</p><p>Vd giao di&#x1EC7;n c&#x1EE7;a app <strong>Sentinel Lite</strong> v&#xE0; <strong>Mysterium </strong>tr&#xEA;n mobile:</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/mysql--dvpn--app.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="553" height="501"></figure><p>ho&#x1EB7;c nh&#x1B0; trong Golem th&#xEC; l&#xE0; vi&#x1EC7;c chu&#x1EA9;n h&#xF3;a c&#xE1;c t&#xE1;c v&#x1EE5; th&#xF4;ng qua c&#xE1;c gi&#x1EA3;i ph&#xE1;p &#x1EA3;o h&#xF3;a, vd <a href="https://github.com/bytecodealliance/wasmtime">wasmtime</a>, chi ti&#x1EBF;t h&#x1A1;n c&#xF3; th&#x1EC3; tham kh&#x1EA3;o &#x1EDF; <a href="https://handbook.golem.network/">link</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/golem-network.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="300" height="168"><figcaption>Golem Wamstime</figcaption></figure><p><em>V&#x1EC1; ph&#x1EA7;n solution &#x111;&#x1EC3; gi&#x1EA3;i quy&#x1EBF;t b&#xE0;i to&#xE1;n trong product m&#xEC;nh s&#x1EBD; kh&#xF4;ng &#x111;i s&#xE2;u trong b&#xE0;i vi&#x1EBF;t n&#xE0;y, c&#xE1;c b&#x1EA1;n c&#xF3; th&#x1EC3; &#x111;&#x1ECD;c th&#xEA;m &#x1EDF; document c&#x1EE7;a c&#xE1;c product</em></p><p><strong>2. X&#x1EED; l&#xFD; ph&#x1EA7;n thanh to&#xE1;n cho c&#xE1;c giao d&#x1ECB;ch: </strong> </p><p>&#x110;&#xE2;y m&#x1EDB;i ch&#xED;nh l&#xE0; ph&#x1EA7;n m&#xEC;nh mu&#x1ED1;n nh&#x1EA5;n m&#x1EA1;nh vi&#x1EC7;c apply cryptocurrency &#x111;&#x1EC3; th&#x1EF1;c hi&#x1EC7;n c&#xE1;c to&#xE1;n cho c&#xE1;c transaction trong product. </p><p>V&#xEC; &#x111;&#xE2;y l&#xE0; c&#xE1;c micropayments, m&#x1ED9;t giao d&#x1ECB;ch c&#xF3; gi&#xE1; tr&#x1ECB; r&#x1EA5;t nh&#x1ECF;, v&#xED; d&#x1EE5; trong tr&#x1B0;&#x1EDD;ng h&#x1EE3;p c&#x1EE7;a m&#xEC;nh s&#x1EED; d&#x1EE5;ng Myst &#x111;&#x1EC3; truy c&#x1EAD;p Medium trong 15-30 ph&#xFA;t, &#x1B0;&#x1EDB;c ch&#x1EEB;ng 10-15MB d&#x1EEF; li&#x1EC7;u, v&#x1EAD;y gi&#xE1; tr&#x1ECB; c&#x1EE7;a 1 giao d&#x1ECB;ch kh&#xE1; th&#x1EA5;p, c&#xF3; th&#x1EC3; th&#x1EA5;p h&#x1A1;n nhi&#x1EC1;u so v&#x1EDB;i gi&#xE1; tr&#x1ECB; nh&#x1ECF; nh&#x1EA5;t c&#x1EE7;a 1 lo&#x1EA1;i ti&#x1EC1;n ti&#x1EC7;n fiat c&#xF3; th&#x1EC3; c&#xF3; ( vd 1 cent) v&#xE0; &#xA0;t&#x1EA5;t nhi&#xEA;n s&#x1EBD; th&#x1EA5;p h&#x1A1;n nhi&#x1EC1;u so v&#x1EDB;i chi ph&#xED; &#x111;&#x1EC3; x&#x1EED; l&#xFD; 1 giao d&#x1ECB;ch.</p><p>N&#x1EBF;u approach theo c&#xE1;ch b&#xEC;nh th&#x1B0;&#x1EDD;ng m&#xE0; Web2 hay s&#x1EED; d&#x1EE5;ng th&#xEC; gi&#x1EA3;i ph&#xE1;p theo m&#xEC;nh s&#x1EBD; l&#xE0; ghi s&#x1ED5; &#xA0;c&#xE1;c gi&#xE1; tr&#x1ECB; giao d&#x1ECB;ch, v&#xE0; summary l&#x1EA1;i v&#xE0;o cu&#x1ED1;i k&#x1EF3; thanh to&#xE1;n. sau &#x111;&#xF3; &#x111;&#x1EBF;n k&#xEC; thanh to&#xE1;n th&#xEC; s&#x1EBD; ti&#x1EC1;n h&#xE0;nh th&#x1EF1;c hi&#x1EC7;n giao d&#x1ECB;ch v&#x1EDB;i c&#xE1;c b&#xEA;n li&#xEA;n quan. n&#x1EBF;u v&#x1EAD;y th&#xEC; s&#x1EBD; c&#xF3; 1 s&#x1ED1; r&#x1EE7;i ro c&#xF3; th&#x1EC3; k&#x1EC3; &#x111;&#x1EBF;n:</p><p><strong>R&#x1EE7;i ro v&#x1EC1; thanh to&#xE1;n c&#x1EE7;a Requestor/Broker/Provider: </strong></p><ul><li>N&#x1EBF;u ch&#x1ECD;n c&#xE1;ch y&#xEA;u Requestor/Consumer deposit tr&#x1B0;&#x1EDB;c khi s&#x1EED; d&#x1EE5;ng ( tr&#x1EA3; tr&#x1B0;&#x1EDB;c) v&#xE0; ti&#x1EC1;n n&#xE0;y do Broker gi&#x1EEF;. Th&#xEC; s&#x1EBD; c&#xF3; nguy c&#x1A1; Broker lock ti&#x1EC1;n v&#xE0; kh&#xF4;ng thanh to&#xE1;n cho Provider, ho&#x1EB7;c th&#xF4;ng tin thanh to&#xE1;n k&#xE9;m minh b&#x1EA1;ch do Broker l&#xE0;m sai l&#x1EC7;ch s&#x1ED5; s&#xE1;ch l&#x1B0;u tr&#x1EEF;, t&#x1EC7; nh&#x1EA5;t l&#xE0; Broker &#xF4;m ti&#x1EC1;n b&#x1ECF; tr&#x1ED1;n ( nh&#x1B0; gi&#x1EAD;t h&#x1EE5;i &#x1EDF; vi&#x1EC7;t nam v&#x1EAD;y)</li><li>N&#x1EBF;u ch&#x1ECD;n c&#xE1;ch k&#x1EBF;t to&#xE1;n v&#xE0; y&#xEA;u c&#x1EA7;u Requester thanh to&#xE1;n h&#xF3;a &#x111;&#x1A1;n ( tr&#x1EA3; sau) th&#xEC; c&#xF3; nguy d&#x1A1; Requestor s&#x1EBD; kh&#xF4;ng thanh to&#xE1;n &amp; x&#xF9; ti&#x1EC1;n sau khi s&#x1EED; d&#x1EE5;ng d&#x1ECB;ch v&#x1EE5;, l&#xFA;c &#x111;&#xF3; ng&#x1B0;&#x1EDD;i b&#xEA;n ch&#x1ECB;u r&#x1EE7;i ro s&#x1EBD; l&#xE0; Broker v&#xE0; Provider. </li></ul><p><strong>R&#x1EE7;i ro c&#x1EE7;a c&#xE1;c b&#xEA;n trung gian kh&#xE1;c:</strong> </p><p>Trong c&#xE1;c giao d&#x1ECB;ch trong m&#xF4;i tr&#x1B0;&#x1EDD;ng Web2, s&#x1EF1; giao d&#x1ECB;ch c&#x1EA7;n c&#xF3; c&#xE1;c b&#xEA;n kh&#xE1;c tham gia v&#xE0;o qu&#xE1; tr&#xEC;nh thanh to&#xE1;n ( Bank, Payment Gateway, ...). v&#x1EDB;i m&#x1ED7;i b&#xEA;n trung gian &#x111;&#x1B0;&#x1EE3;c th&#xEA;m v&#xE0;o, th&#xEC; ph&#x1EA7;n ph&#x1EE9;c t&#x1EA1;p v&#xE0; chi ph&#xED;, r&#x1EE7;i ro c&#x169;ng s&#x1EBD; th&#xEA;m v&#xE0;o ph&#x1EE5; thu&#x1ED9;c v&#xE0;o c&#xE1;c b&#xEA;n trung gian tham gia v&#xE0;o giao d&#x1ECB;ch. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/-MeatBlog--Blockchain-payment-with-middle-layer---Micropayments-payment-with-middle-layer.jpg" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="671" height="361" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/-MeatBlog--Blockchain-payment-with-middle-layer---Micropayments-payment-with-middle-layer.jpg 600w, https://vinguyen.blog/content/images/2022/12/-MeatBlog--Blockchain-payment-with-middle-layer---Micropayments-payment-with-middle-layer.jpg 671w"><figcaption>Minh h&#x1ECD;a v&#x1EC1; c&#xE1;c layer c&#xF3; th&#x1EC3; &#x1EA3;nh h&#x1B0;&#x1EDF;ng t&#x1EDB;i ph&#x1EA7;n thanh to&#xE1;n</figcaption></figure><h2 id="v%E1%BA%ADy-cryptocurrency-c%C3%B3-th%E1%BB%83-gi%C3%BAp-gi%E1%BA%A3i-quy%E1%BA%BFt-b%C3%A0i-to%C3%A1n-n%C3%A0y-nh%C6%B0-th%E1%BA%BF-n%C3%A0o">V&#x1EAD;y Cryptocurrency c&#xF3; th&#x1EC3; gi&#xFA;p gi&#x1EA3;i quy&#x1EBF;t b&#xE0;i to&#xE1;n n&#xE0;y nh&#x1B0; th&#x1EBF; n&#xE0;o?</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/-MeatBlog--Blockchain---Micropayments-crytocurrency-va--smartcontract-trong-micropayment.drawio--1-.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="892" height="682" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/-MeatBlog--Blockchain---Micropayments-crytocurrency-va--smartcontract-trong-micropayment.drawio--1-.png 600w, https://vinguyen.blog/content/images/2022/12/-MeatBlog--Blockchain---Micropayments-crytocurrency-va--smartcontract-trong-micropayment.drawio--1-.png 892w" sizes="(min-width: 720px) 720px"><figcaption>&#xC1;p d&#x1EE5;ng blockchain l&#xE0;m layer thanh to&#xE1;n trong product</figcaption></figure><p><strong>Theo m&#xEC;nh th&#xEC; c&#xF3; 3 &#x1B0;u &#x111;i&#x1EC3;m:</strong></p><ul><li>Lo&#x1EA1;i b&#x1ECF; c&#xE1;c b&#xEA;n trung gian.</li><li>T&#x1EF1; &#x111;&#x1ED9;ng h&#xF3;a vi&#x1EC7;c x&#x1EED; l&#xFD; giao d&#x1ECB;ch th&#xF4;ng qua SmartContract.</li><li>Cryptocurrency c&#xF3; &#x111;&#x1A1;n v&#x1ECB; thanh to&#xE1;n t&#x1ED1;i thi&#x1EC3;u r&#x1EA5;t nh&#x1ECF;.</li></ul><p><strong>Nh&#x1B0;&#x1EE3;c &#x111;i&#x1EC3;m:</strong></p><ul><li>Transaction fee ch&#x1B0;a &#x111;&#x1EE7; th&#x1EA5;p &#x111;&#x1EC3; thanh to&#xE1;n t&#x1EEB;ng micropayments transaction</li></ul><p><strong>Lo&#x1EA1;i b&#x1ECF; b&#xEA;n trung gian</strong> v&#xE0; th&#x1EF1;c hi&#x1EC7;n c&#xE1;c giao d&#x1ECB;ch m&#x1ED9;t c&#xE1;ch t&#x1EF1; &#x111;&#x1ED9;ng b&#x1EB1;ng c&#xE1;ch <strong>s&#x1EED; d&#x1EE5;ng SmartContract</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/smart-contract-1-1.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="1600" height="999" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/smart-contract-1-1.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/smart-contract-1-1.png 1000w, https://vinguyen.blog/content/images/2022/12/smart-contract-1-1.png 1600w" sizes="(min-width: 720px) 720px"><figcaption>Ngu&#x1ED3;n: cystack.net</figcaption></figure><ul><li>B&#x1EB1;ng c&#xE1;ch s&#x1EED; d&#x1EE5;ng SmartContract, v&#xE0; v&#xED; c&#x1EE7;a user &#x111;&#x1B0;&#x1EE3;c k&#x1EBF;t n&#x1ED1;i tr&#x1EF1;c ti&#x1EBF;p &#x111;&#x1EBF;n SmartContract trong l&#xFA;c th&#x1EF1;c hi&#x1EC7;n giao d&#x1ECB;ch, vi&#x1EC7;c n&#xE0;y s&#x1EBD; gi&#xFA;p lo&#x1EA1;i b&#x1ECF; ho&#xE0;n to&#xE0;n c&#xE1;c b&#xEA;n trung gian kh&#xF4;ng c&#x1EA7;n thi&#x1EBF;t, ti&#x1EC1;n s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c chuy&#x1EC3;n tr&#x1EF1;c ti&#x1EBF;p t&#x1EEB; Requestor &#x111;&#x1EBF;n Provider m&#x1ED9;t c&#xE1;ch t&#x1EF1; &#x111;&#x1ED9;ng v&#xE0; tu&#xE2;n th&#x1EE7; c&#xE1;c &#x111;i&#x1EC1;u kho&#x1EA3;n &#x111;&#xE3; &#x111;&#x1B0;&#x1EE3;c &#x111;&#x1ECB;nh ngh&#x129;a trong SmartContract, kh&#xF4;ng c&#xF3; gian l&#x1EAD;n hay lock giao d&#x1ECB;ch, ph&#x1EE5; thu&#x1ED9;c v&#xE0;o b&#xEA;n n&#xE0;o trong h&#x1EC7; th&#x1ED1;ng c&#x1EA3;.</li></ul><p><strong>&#x110;&#x1A1;n v&#x1ECB; thanh to&#xE1;n t&#x1ED1;i thi&#x1EC3;u r&#x1EA5;t nh&#x1ECF;:</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/btc-eth-micropayment-logic.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="1450" height="801" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/btc-eth-micropayment-logic.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/btc-eth-micropayment-logic.png 1000w, https://vinguyen.blog/content/images/2022/12/btc-eth-micropayment-logic.png 1450w" sizes="(min-width: 720px) 720px"><figcaption>Ngu&#x1ED3;n: cointelegraph.com</figcaption></figure><p>H&#xE3;y x&#xE9;t qua &#x111;&#x1A1;n v&#x1ECB; thanh to&#xE1;n nh&#x1ECF; nh&#x1EA5;t c&#x1EE7;a BTC v&#xE0; ETH nh&#x1B0; h&#xEC;nh. m&#x1ED9;t &#x111;&#x1A1;n v&#x1ECB; thanh to&#xE1;n mang gi&#xE1; tr&#x1ECB; c&#x1EF1;c k&#xEC; nh&#x1ECF; n&#xEA;n s&#x1EBD; c&#x1EF1;c k&#xEC; ph&#xF9; h&#x1EE3;p cho c&#xE1;c giao d&#x1ECB;ch nh&#x1ECF; nh&#x1B0; m&#xEC;nh n&#xF3;i &#x1EDF; b&#xEA;n tr&#xEA;n. </p><p>L&#x1EA5;y v&#xED; d&#x1EE5; v&#x1EC1; gi&#xE1; c&#x1EE7;a Mysterium:</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-22.37.32@2x.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="1362" height="998" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-26-at-22.37.32@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-26-at-22.37.32@2x.png 1000w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-22.37.32@2x.png 1362w" sizes="(min-width: 720px) 720px"></figure><p>1.99 USD cho 75GiB, t&#x1B0;&#x1A1;ng &#x111;&#x1B0;&#x1A1;ng v&#x1EDB;i kho&#x1EA3;ng 0.000026USD/MiB d&#x1EEF; li&#x1EC7;u k&#x1EBF;t n&#x1ED1;i qua VPN. s&#x1ED1; n&#xE0;y ho&#xE0;n to&#xE0;n c&#xF3; th&#x1EC3; &#x111;&#x1B0;&#x1EE3;c x&#x1EED; l&#xFD; v&#xE0; g&#x1EDF;i qua m&#x1EA1;ng l&#x1B0;&#x1EDB;i crypto v&#xEC; gi&#xE1; tr&#x1ECB; n&#xE0;y l&#x1EDB;n h&#x1A1;n nhi&#x1EC1;u l&#x1EA7;n so v&#x1EDB;i gi&#xE1; tr&#x1ECB; nh&#x1ECF; nh&#x1EA5;t (sub-unit) c&#x1EE7;a 1 Token.</p><p><strong>Nh&#x1B0;&#x1EE3;c &#x111;i&#x1EC3;m: Ph&#xED; giao d&#x1ECB;ch v&#x1EAB;n qu&#xE1; &#x111;&#x1EAF;t</strong></p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-23.01.16@2x.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="2000" height="373" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-26-at-23.01.16@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-26-at-23.01.16@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-26-at-23.01.16@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-23.01.16@2x.png 2308w" sizes="(min-width: 720px) 720px"></figure><p>L&#x1EA5;y v&#xED; d&#x1EE5; &#x111;&#xE2;y l&#xE0; ph&#xED;a giao d&#x1ECB;ch hi&#x1EC7;n t&#x1EA1;i tr&#xEA;n m&#x1EA1;ng Polygon ( 26/12/2022). m&#x1EE9;c ph&#xED; n&#xE0;y( 0.0071USD/trans) v&#x1EAB;n &#x111;&#x1EAF;t h&#x1A1;n ~27 l&#x1EA7;n s&#x1ED1; ti&#x1EC1;n ph&#x1EA3;i chi tr&#x1EA3; cho 10MB d&#x1EEF; li&#x1EC7;u s&#x1EED; d&#x1EE5;ng trong &#x1EE9;ng d&#x1EE5;ng.</p><p>V&#xEC; v&#x1EAD;y m&#x1EB7;c d&#xF9; ti&#x1EC1;m n&#x103;ng c&#x1EE7;a cryptocurrency &#x111;&#x1EC3; &#xE1;p d&#x1EE5;ng thanh to&#xE1;n micropayment l&#xE0; r&#x1EA5;t l&#x1EDB;n, nh&#x1B0;ng n&#xF3; ch&#x1EC9; th&#x1EAD;t s&#x1EF1; kh&#x1EA3; thi khi n&#xE0;o c&#xE1;c network th&#x1EAD;t s&#x1EF1; ho&#xE0;n thi&#x1EC7;n c&#xE1;c gi&#x1EA3;i ph&#xE1;p m&#x1EDF; r&#x1ED9;ng &#x111;&#x1EC3; &#x111;&#x1B0;a m&#x1EE9;c ph&#xED; giao d&#x1ECB;ch v&#x1EC1; c&#x1EF1;c th&#x1EA5;p, th&#xEC; c&#xE1;c micropayments m&#x1EDB;i th&#x1EAD;t s&#x1EF1; b&#xF9;ng n&#x1ED5; &#x111;&#x1B0;&#x1EE3;c.</p><h3 id="review-trong-3-product-sentinel-golem-mysteriumnetwork">Review trong 3 product: Sentinel, Golem, Mysterium.network,</h3><p><strong>Golem</strong>:</p><p>Trong 3 product m&#xEC;nh s&#x1EED; d&#x1EE5;ng qua th&#xEC; Golem l&#xE0; product duy nh&#x1EA5;t m&#xEC;nh th&#x1EA5;y &#x111;&#xE3; apply ho&#xE0;n thi&#x1EC7;n c&#x1A1; ch&#x1EBF; payment per transaction, t&#x1EE9;c l&#xE0; giao d&#x1ECB;ch &#x111;&#x1B0;&#x1EE3;c th&#x1EF1;c hi&#x1EC7;n gi&#x1EEF; Requestor v&#xE0; Producer ngay sau khi job &#x111;&#x1B0;&#x1EE3;c ho&#xE0;n t&#x1EA5;t. nh&#x1B0;ng c&#xE1;c th&#x1EF1;c hi&#x1EC7;n n&#xE0;y v&#x1EAB;n g&#x1EB7;p nh&#x1B0;&#x1EE3;c &#x111;i&#x1EC3;m l&#x1EDB;n nh&#x1B0; m&#xEC;nh nh&#x1EAF;c &#x111;&#x1EBF; ph&#xED;a tr&#xEA;n, ph&#xED; giao d&#x1ECB;ch qu&#xE1; cao.</p><p>B&#x1EA1;n c&#xF3; th&#x1EC3; th&#x1EA5;y trong kho&#x1EA3;ng 1 n&#x103;m tr&#x1B0;&#x1EDB;c Golem s&#x1EED; d&#x1EE5;ng zkSync( gi&#x1EA3;i ph&#xE1;p layer 2) &#x111;&#x1EC3; th&#x1EF1;c hi&#x1EC7;n giao d&#x1ECB;ch. nh&#x1B0;ng ph&#xED;a giao d&#x1ECB;ch l&#x1EA1;i cao g&#x1EA5;p 34 l&#x1EA7;n gi&#xE1; tr&#x1ECB; c&#x1EE7;a giao d&#x1ECB;ch &#x111;&#xF3;. g&#x1EA7;n &#x111;&#xE2;y th&#xEC; Golem &#x111;&#xE3; chuy&#x1EC3;n network sang s&#x1EED; d&#x1EE5;ng gi&#x1EA3;i ph&#xE1;p tr&#xEA;n m&#x1EA1;ng Polygon, nh&#x1B0;ng ph&#xED; giao d&#x1ECB;ch v&#x1EAB;n c&#xF2;n cao g&#x1EA5;p 6 l&#x1EA7;n gi&#xE1; tr&#x1ECB; c&#x1EE7;a job th&#x1EF1;c thi, cho t&#x1EDB;i th&#x1EDD;i &#x111;i&#x1EC3;m m&#xEC;nh vi&#x1EBF;t b&#xE0;i th&#xEC; kh&#xF4;ng r&#xF5; th&#x1EAD;t s&#x1EF1; Golem &#x111;&#xE3; ra d&#x1B0;&#x1EE3;c gi&#x1EA3;i ph&#xE1;p &#x111;&#x1EC3; kh&#x1EAF;c ph&#x1EE5;c &#x111;&#x1B0;&#x1EE3;c vi&#x1EC7;c n&#xE0;y ch&#x1B0;a.</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-22.40.46@2x.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="1824" height="1398" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-26-at-22.40.46@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-26-at-22.40.46@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-26-at-22.40.46@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-22.40.46@2x.png 1824w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-22.42.36@2x.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="2000" height="984" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-26-at-22.42.36@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-26-at-22.42.36@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-26-at-22.42.36@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/CleanShot-2022-12-26-at-22.42.36@2x.png 2400w" sizes="(min-width: 720px) 720px"></figure><p><strong>Sentinel</strong></p><ul><li> &#x1EE8;ng d&#x1EE5;ng n&#xE0;y v&#x1EAB;n c&#xF2;n trong giai &#x111;o&#x1EA1;n testing v&#xE0; ki&#x1EC3;m th&#x1EED;, nh&#x1B0;ng m&#xEC;nh th&#x1EA5;y gi&#xE1; tr&#x1ECB; giao d&#x1ECB;ch &amp; m&#x1EE9;c ph&#xED; c&#x1EE7;a n&#xF3; kh&#xE1; h&#x1EE3;p l&#xFD; khi s&#x1EED; d&#x1EE5;ng m&#x1EA1;ng Cosmos &#x111;&#x1EC3; giao d&#x1ECB;ch. h&#xEC;nh b&#xEA;n d&#x1B0;&#x1EDB;i l&#xE0; giao d&#x1ECB;ch update status c&#x1EE7;a node &#x111;&#x1EC3; cho sentinelhub bi&#x1EBF;t l&#xE0; node c&#x1EE7;a provider v&#x1EAB;n &#x111;ang online v&#xE0; c&#x1EAD;p nh&#x1EAD;p gi&#xE1; m&#x1EDB;i nh&#x1EA5;t c&#x1EE7;a node.</li></ul><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-22.44.28@2x.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="1864" height="852" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-26-at-22.44.28@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-26-at-22.44.28@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-26-at-22.44.28@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-22.44.28@2x.png 1864w" sizes="(min-width: 720px) 720px"></figure><p><strong>Mysterium</strong></p><p>Myst l&#xE0; product ho&#xE0;n thi&#x1EC7;n nh&#x1EA5;t v&#xE0; product ready, cung c&#x1EA5;p gi&#x1EA3;i ph&#xE1;p &#x1ED5;n &#x111;&#x1ECB;nh nh&#x1EA5;t trong 3 product n&#xE0;y ( x&#xE9;t v&#x1EC1; g&#xF3;c nh&#xEC;n cung c&#x1EA5;p d&#x1ECB;ch v&#x1EE5;)</p><p>Tuy nhi&#xEA;n c&#xF3; l&#x1EBD; v&#xEC; ph&#xED; giao d&#x1ECB;ch per transaction c&#xF2;n qu&#xE1; &#x111;&#x1EAF;t n&#xEA;n Myst v&#x1EAB;n ch&#x1EC9; &#xE1;p d&#x1EE5;ng c&#x1A1; ch&#x1EBF; Deposit &#x111;&#x1ED1;i v&#x1EDB;i user, v&#xE0; <a href="https://docs.mysterium.network/for-node-runners/payout-guide">Settlement</a> cho provider - m&#x1ED9;t c&#x1A1; ch&#x1EBF; payment khi gi&#xE1; tr&#x1ECB; t&#xED;ch l&#x169;y &#x111;&#x1EA1;t &#x111;&#x1EBF;n s&#x1ED1; d&#x1B0; t&#x1ED1;i thi&#x1EC3;u. v&#xEC; v&#x1EAD;y c&#xF3; th&#x1EC3; th&#x1EA5;y l&#xE0; Myst v&#x1EAB;n &#x111;ang duy tr&#xEC; invoice b&#xEA;n trong m&#x1EA1;ng n&#x1ED9;i b&#x1ED9; c&#x1EE7;a m&#xEC;nh thay v&#xEC; l&#x1B0;u tr&#x1EEF; to&#xE0;n b&#x1ED9; data on-chain cho ph&#x1EA7;n thanh to&#xE1;n.</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-22.45.39@2x.png" class="kg-image" alt="M&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a Blockchain v&#xE0; cryptocurrency trong x&#xE2;y d&#x1EF1;ng product -  micropayments (thanh to&#xE1;n vi m&#xF4;)" loading="lazy" width="936" height="1240" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-26-at-22.45.39@2x.png 600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-22.45.39@2x.png 936w" sizes="(min-width: 720px) 720px"></figure><h2 id="t%E1%BA%A1m-k%E1%BA%BFt">T&#x1EA1;m k&#x1EBF;t</h2><p>Ti&#x1EC1;m n&#x103;ng &#x111;&#x1EC3; c&#xF3; th&#x1EC3; &#xE1;p d&#x1EE5;ng cryptocurrency v&#xE0;o trong vi&#x1EC7;c th&#x1EF1;c hi&#x1EC7;n c&#xE1;c giao d&#x1ECB;ch thanh to&#xE1;n c&#x1EE7;a product th&#x1EF1;c t&#x1EBF; l&#xE0; r&#x1EA5;t l&#x1EDB;n, &#x111;i&#x1EC1;u n&#xE0;y c&#xF3; th&#x1EC3; cho th&#x1EA5;y Cryptocurrency c&#xF3; th&#x1EC3; m&#x1EDF; r&#x1ED9;ng ra &#x111;&#x1EC3; apply trong b&#x1EA5;t product n&#xE0;o ch&#x1EE9; kh&#xF4;ng ch&#x1EC9; gi&#x1EDB;i h&#x1EA1;n trong c&#xE1;c product li&#xEA;n quan t&#x1EDB;i m&#x1EA3;ng &#x111;&#x1EA7;u t&#x1B0;, ho&#x1EB7;c c&#xE1;c game t&#xE0;i ch&#xED;nh, ho&#x1EB7;c GameFI, .... nh&#x1EDD; c&#xE1;c &#x1B0;u &#x111;i&#x1EC3;m v&#x1B0;&#x1EE3;t tr&#x1ED9;i c&#x1EE7;a n&#x1EC1;n t&#x1EA3;ng n&#xE0;y.</p><p>Nh&#x1B0;ng &#x111;i&#x1EC3;m y&#x1EBF;u nh&#x1EA5;t c&#x1EE7;a Cryptocurrency m&#xE0; c&#xE1;c gi&#x1EA3;i ph&#xE1;p h&#x1EA1; t&#x1EA7;ng c&#x1EA7;n ph&#x1EA3;i x&#x1EED; l&#xFD; &#x111;&#x1B0;&#x1EE3;c l&#xE0; ph&#xED; giao d&#x1ECB;ch ph&#x1EA3;i th&#x1EA5;p h&#x1A1;n n&#x1EEF;a, th&#xEC; m&#x1EDB;i th&#x1EAD;t s&#x1EF1; t&#x1EA1;o th&#xE0;nh &#x111;i&#x1EC3;m m&#x1EA1;nh v&#xE0; &#x111;i&#x1EC3;m c&#x1ED9;ng thu h&#xFA;t c&#xE1;c b&#xEA;n ph&#xE1;t tri&#x1EC3;n product c&#xF3; th&#x1EC3; t&#x1EF1; tin apply v&#xE0; t&#x1EA1;o ra innovative product cho m&#xEC;nh v&#xE0; user.</p><p><strong>Reference:</strong></p><ul><li><a href="https://cointelegraph.com/news/blockchain-technology-can-make-micropayments-finally-functional">https://cointelegraph.com/news/blockchain-technology-can-make-micropayments-finally-functional</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Tản mạn về đào coin - crypto mining - phần 2]]></title><description><![CDATA[<p> Ch&#xE0;o m&#x1ECD;i ng&#x1B0;&#x1EDD;i, trong ph&#x1EA7;n n&#xE0;y m&#xEC;nh s&#x1EBD; ti&#x1EBF;p t&#x1EE5;c chia s&#x1EBB; c&#xE1;c quan &#x111;i&#x1EC3;m c&#x1EE7;a m&#xEC;nh v&#x1EC1; &#x111;&#xE0;o</p>]]></description><link>https://vinguyen.blog/tan-man-ve-dao-coin-crypto-mining-phan-2/</link><guid isPermaLink="false">639e8f76dbc2fb0001bc4505</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[crypto-mining]]></category><category><![CDATA[miner]]></category><category><![CDATA[Sharing]]></category><category><![CDATA[vi]]></category><category><![CDATA[crypto]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Sat, 24 Dec 2022 04:07:53 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-23.39.55@2x.png" medium="image"/><content:encoded><![CDATA[<img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-23.39.55@2x.png" alt="T&#x1EA3;n m&#x1EA1;n v&#x1EC1; &#x111;&#xE0;o coin - crypto mining - ph&#x1EA7;n 2"><p> Ch&#xE0;o m&#x1ECD;i ng&#x1B0;&#x1EDD;i, trong ph&#x1EA7;n n&#xE0;y m&#xEC;nh s&#x1EBD; ti&#x1EBF;p t&#x1EE5;c chia s&#x1EBB; c&#xE1;c quan &#x111;i&#x1EC3;m c&#x1EE7;a m&#xEC;nh v&#x1EC1; &#x111;&#xE0;o coin, d&#x1B0;&#x1EDB;i d&#x1EA1;ng h&#x1ECF;i &#x111;&#xE1;p.</p><p>Link ph&#x1EA7;n 1: <a href="https://vinguyen.blog/crypto-mining-dao-coin-nen-hay-khong-va-diem-thu-vi-la-gi-goc-nhin-khac-ngoai-loi-nhuan-phan-1/">https://vinguyen.blog/crypto-mining-dao-coin-nen-hay-khong-va-diem-thu-vi-la-gi-goc-nhin-khac-ngoai-loi-nhuan-phan-1</a></p><p><strong>Question 6: C&#xF3; nh&#x1EEF;ng c&#xE1;ch n&#xE0;o &#x111;&#x1EC3; &#x111;&#xE0;o coin n&#x1EBF;u &#x111;&#xE3; mua m&#xE1;y?</strong></p><p><strong>Answer:</strong></p><ul><li><strong>&#x110;&#xE0;o coin ch&#xED;nh/coin c&#xF3; thanh kho&#x1EA3;n cao:</strong> &#x111;&#xE2;y l&#xE0; c&#xE1;ch b&#x1EC1;n v&#x1EEF;ng v&#xE0; &#x1ED5;n &#x111;&#x1ECB;nh nh&#x1EA5;t trong vi&#x1EC7;c mining, chi&#x1EBF;n l&#x1B0;&#x1EE3;c &#x111;&#x1A1;n gi&#x1EA3;n l&#xE0; trang b&#x1ECB; d&#xE0;n m&#xE1;y, ch&#x1ECD;n c&#xE1;c coin c&#xF3; volume cao, &#xA0;coin ch&#x1EE7; &#x111;&#x1EA1;o c&#x1EE7;a m&#x1ED9;t d&#xF2;ng thu&#x1EAD;t to&#xE1;n ( vd BTC, ETH, LTC, DASH), ch&#x1ECD;n pool, c&#x1EAF;m v&#xE0; &#x111;&#xE0;o. Theo m&#xEC;nh th&#xEC; ph&#x1EA7;n l&#x1EDB;n c&#xE1;c miner &#x111;&#x1EC1;u &#x111;&#xE0;o ho&#x1EB7;c ph&#xE2;n b&#x1ED5; 80-90% l&#x1B0;&#x1EE3;ng m&#xE1;y c&#x1EE7;a m&#xEC;nh theo chi&#x1EBF;n l&#x1B0;&#x1EE3;c n&#xE0;y. &#x1B0;u &#x111;i&#x1EC3;m l&#xE0; &#x1ED5;n &#x111;&#x1ECB;nh, d&#x1EC5; ki&#x1EC3;m so&#xE1;t v&#xE0; coin &#x111;&#xE0;o ra d&#x1EC5; thanh kho&#x1EA3;n, nh&#x1B0;ng nh&#x1B0;&#x1EE3;c &#x111;i&#x1EC3;m l&#xE0; l&#x1EDD;i kh&#xF4;ng qu&#xE1; nhi&#x1EC1;u. </li><li><strong>Cho thu&#xEA; hash:</strong> C&#xE1;ch n&#xE0;y c&#x169;ng t&#x1B0;&#x1A1;ng &#x111;&#x1ED1;i hi&#x1EC7;u qu&#x1EA3; v&#x1EDB;i l&#x1B0;&#x1EE3;ng m&#xE1;y nh&#x1ECF;, ho&#x1EB7;c mini farm, c&#xE1;ch ti&#x1EBF;p c&#x1EAD;n th&#xEC; gi&#x1ED1;ng nh&#x1B0; c&#xE1;ch &#x111;&#xE0;o coin ch&#xED;nh, nh&#x1B0;ng thay v&#xEC; c&#x1EAF;m v&#xE0;o pool &#x111;&#xE0;o coin th&#xEC; mang l&#xEA;n c&#xE1;c s&#xE0;n trao &#x111;&#x1ED5;i hash cho ng&#x1B0;&#x1EDD;i mua, Theo kinh nghi&#x1EC7;m c&#x1EE7;a m&#xEC;nh th&#xEC; l&#x1EE3;i nhu&#x1EAD;n s&#x1EBD; cao h&#x1A1;n l&#x1EE3;i nhu&#x1EAD;n c&#x1EE7;a &#x111;&#xE0;o coin ch&#xED;nh m&#x1ED9;t ch&#xFA;t.</li><li><strong>S&#x103;n Altcoin (coin r&#xE1;c):</strong> c&#xE1;ch n&#xE0;y &#x111;&#xF2;i h&#x1ECF;i th&#x1EDD;i gian v&#xE0; c&#xF4;ng s&#x1EE9;c nhi&#x1EC1;u h&#x1A1;n, th&#x1B0;&#x1EDD;ng c&#x1EA7;n ph&#x1EA3;i c&#xF3; &#x111;&#x1ED9;i nh&#xF3;m &#x111;&#x1EC3; c&#xF9;ng ph&#x1ED1;i h&#x1EE3;p, nh&#x1B0;ng b&#xF9; l&#x1EA1;i l&#x1EE3;i nhu&#x1EAD;n thu l&#x1EA1;i c&#x169;ng cao h&#x1A1;n nhi&#x1EC1;u n&#x1EBF;u t&#xEC;m &#x111;&#x1B0;&#x1EE3;c coin t&#x1ED1;t. coin r&#xE1;c &#x1EDF; &#x111;&#xE2;y l&#xE0; nh&#x1EEF;ng coin m&#xE0; volume th&#x1EA5;p, &#xED;t ng&#x1B0;&#x1EDD;i &#x111;&#xE0;o ho&#x1EB7;c v&#xF4; t&#xEC;nh b&#x1ECB; b&#x1ECF; qu&#xEA;n. ho&#x1EB7;c nh&#x1EEF;ng coin v&#x1EEB;a m&#x1EDB;i &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o ra, ch&#x1B0;a &#x111;&#x1B0;&#x1EE3;c list s&#xE0;n, ch&#x1B0;a c&#xF3; nhi&#x1EC1;u hash &#x111;&#x1ED5; v&#xE0;o &#x111;&#x1EC3; &#x111;&#xE0;o, v&#x1EDB;i d&#x1EA1;ng coin n&#xE0;y th&#xEC; y&#x1EBF;u t&#x1ED1; then ch&#x1ED1;t l&#xE0; th&#x1EDD;i gian, c&#xF3; hai th&#x1EDD;i &#x111;i&#x1EC3;m quan tr&#x1ECD;ng nh&#x1EA5;t: v&#xE0;o &#x111;&#xE0;o s&#x1EDB;m nh&#x1EA5;t &#x111;&#x1EC3; thu &#x111;&#x1B0;&#x1EE3;c nhi&#x1EC1;u coin nh&#x1EA5;t c&#xF3; th&#x1EC3;, tr&#x1B0;&#x1EDB;c khi hash t&#x1EEB; th&#x1ECB; tr&#x1B0;&#x1A1;ng tr&#xE0;n v&#xE0;o c&#xE0;n qu&#xE9;t coin n&#xE0;y, tr&#x1B0;&#x1EDB;c &#x111;&#xE2;y th&#xEC; <a href="https://bitcointalk.org/">https://bitcointalk.org</a> l&#xE0; di&#x1EC5;n &#x111;&#xE0;n m&#xE0; anh em n&#xE0;o mu&#x1ED1;n ch&#x1A1;i theo h&#x1B0;&#x1EDB;ng n&#xE0;y th&#xEC; &#x111;&#x1EC1;u ph&#x1EA3;i l&#xEA;n canh v&#xE0; check th&#x1B0;&#x1EDD;ng xuy&#xEA;n. thu hai l&#xE0; canh th&#x1EDD;i &#x111;i&#x1EC3;m list s&#xE0;n, khi coin v&#x1EEB;a &#x111;&#x1B0;&#x1EE3;c list tr&#xEA;n m&#x1ED9;t s&#xE0;n th&#xEC; c&#x1EA7;n ph&#x1EA3;i x&#x1EA3; nhanh nh&#x1EA5;t c&#xF3; th&#x1EC3; tr&#x1B0;&#x1EDB;c khi c&#xE1;c miner kh&#xE1;c x&#x1EA3; v&#xF4; &#x111;&#x1EA7;u m&#xEC;nh. th&#x1B0;&#x1EDD;ng c&#xE1;c anh em ch&#x1A1;i theo chi&#x1EBF;n thu&#x1EAD;t n&#xE0;y s&#x1EBD; c&#xF3; v&#xE0;i ba &#x1ED5; c&#x1EE9;ng ch&#x1EE9;a &#x111;&#x1EA7;y v&#xED; ch&#x1B0;a coin r&#xE1;c, ch&#x1EC9; c&#x1EA7;n 1 trong s&#x1ED1; &#x111;&#xF3; list th&#xE0;nh c&#xF4;ng tr&#xEA;n s&#xE0;n &amp; b&#xE1;n th&#xE0;nh c&#xF4;ng, th&#xEC; c&#xF4;ng s&#x1EE9;c thu v&#x1EC1; &#x111;&#xE1;ng &#x111;&#x1EC3; cover cho &#x111;&#x1ED1;ng coin r&#xE1;c c&#xF2;n l&#x1EA1;i trong &#x1ED5; c&#x1EE9;ng.</li></ul><p><strong>Question 7: Ng&#x1B0;&#x1EDD;i mua hash th&#x1B0;&#x1EDD;ng mua &#x111;&#x1EC3; l&#xE0;m g&#xEC; v&#xEC; ng&#x1B0;&#x1EDD;i b&#xE1;n b&#xE1;n hash th&#x1B0;&#x1EDD;ng gi&#xE1; s&#x1EBD; cao h&#x1A1;n gi&#xE1; &#x111;&#xE0;o coin ch&#xED;nh m&#x1ED9;t &#xED;t?</strong></p><p><strong>Answer: &#xA0;</strong>S&#x103;n nh&#x1EEF;ng coin c&#xF3; l&#x1EE3;i nhu&#x1EAD;n cao h&#x1A1;n d&#xF2;ng coin ch&#xED;nh v&#xE0; &#xED;t th&#xF4;ng tin public, &#x111;i&#x1EC3;n h&#xEC;nh nh&#x1B0; c&#xE1;ch s&#x103;n coin Altcoin m&#xEC;nh nh&#x1EAF;c &#x111;&#x1EBF;n &#x1EDF; tr&#xEA;n.</p><p><strong>Question 8: c&#xF3; nh&#x1EEF;ng d&#x1EA1;ng cho th&#xEA; &#xA0;hash n&#xE0;o v&#xE0; nh&#x1EEF;ng s&#xE0;n trao &#x111;&#x1ED5;i n&#xE0;o ph&#x1ED5; bi&#x1EBF;n?</strong></p><p><strong>Answer: </strong>Theo m&#xEC;nh c&#xF3; 2 d&#x1EA1;ng:</p><ul><li>Cho thu&#xEA; c&#x1ED1; &#x111;&#x1ECB;nh, theo ki&#x1EC3;u Central, Miner b&#xE1;n hash cho s&#xE0;n v&#x1EDB;i gi&#xE1; do s&#xE0;n &#x111;&#x1B0;a ra, s&#xE0;n s&#x1EBD; b&#xE1;n l&#x1EA1;i cho b&#xEA;n mua v&#x1EDB;i gi&#xE1; do s&#xE0;n &#x111;&#x1B0;a ra. &#x111;i&#x1EC3;n h&#xEC;nh nh&#x1EA5;t c&#x1EE7;a d&#x1EA1;ng n&#xE0;y l&#xE0; <a href="https://www.nicehash.com">Nicehash</a></li><li>T&#x1EF1; ch&#x1EE7; &#x111;&#x1ED9;ng set gi&#xE1; b&#xE1;n, v&#xE0; ng&#x1B0;&#x1EDD;i mua s&#x1EBD; mua, k&#xED; contract mua trong 1 kho&#x1EA3;n th&#x1EDD;i gian nh&#x1EA5;t &#x111;&#x1ECB;nh v&#xE0; ch&#x1ECD;n ng&#x1B0;&#x1EDD;i b&#xE1;n c&#xF3; gi&#xE1; h&#x1EE3;p l&#xFD; nh&#x1EA5;t m&#xE0; m&#xEC;nh ng&#x1B0;&#x1EDD;i mua th&#x1EA5;y ph&#xF9; h&#x1EE3;p v&#x1EDB;i m&#xEC;nh, &#x111;i&#x1EC3;n h&#xEC;nh c&#x1EE7;a d&#x1EA1;ng n&#xE0;y l&#xE0; <a href="https://www.miningrigrentals.com/">MiningRigRentals</a></li></ul><p><strong>Question 9: t&#xF4;i c&#xF3; th&#x1EC3; t&#xEC;m hi&#x1EC3;u v&#x1EC1; c&#xE1;c ch&#x1EC9; s&#x1ED5; c&#x1EE7;a miner &#x1EDF; &#x111;&#xE2;u?</strong></p><p><strong>Answer: </strong> m&#x1ED9;t trong nh&#x1EEF;ng trang cung c&#x1EA5;p ch&#x1EC9; s&#x1ED1; t&#x1ED1;t nh&#x1EA5;t m&#xE0; ch&#xFA;ng ta c&#xF3; th&#x1EC3; tham kh&#x1EA3;o l&#xE0; <a href="https://studio.glassnode.com/dashboards/btc-miners">Glassnode</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-23.43.19@2x.png" class="kg-image" alt="T&#x1EA3;n m&#x1EA1;n v&#x1EC1; &#x111;&#xE0;o coin - crypto mining - ph&#x1EA7;n 2" loading="lazy" width="1826" height="922" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-26-at-23.43.19@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-26-at-23.43.19@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-26-at-23.43.19@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-26-at-23.43.19@2x.png 1826w" sizes="(min-width: 720px) 720px"><figcaption>Ngu&#x1ED3;n: Glassnode.com</figcaption></figure><ul><li>Trang n&#xE0;y cung c&#x1EA5;p r&#x1EA5;t nhi&#x1EC1;u c&#xE1;c ch&#x1EC9; s&#x1ED1; t&#x1EEB; gi&#xE1;, &#x111;&#x1ED9; kh&#xF3;, hashrate, l&#x1EE3;i nhu&#x1EAD;n li&#xEA;n quan &#x111;&#x1EBF;n miner</li><li>Tuy nhi&#xEA;n c&#x1EA7;n l&#x1B0;u &#xFD; r&#x1EB1;ng c&#xE1;c s&#x1ED1; li&#x1EC7;u n&#xE0;y mang &#xFD; ngh&#x129;a th&#x1ED1;ng k&#xEA; v&#xE0; c&#xF3; t&#xED;nh trung b&#xEC;nh, n&#xEA;n c&#x169;ng ch&#x1EC9; mang t&#xED;nh ch&#x1EA5;t tham kh&#x1EA3;o l&#xE0; ch&#xED;nh, v&#xEC; l&#xE0; ch&#x1EC9; s&#x1ED1; trung b&#xEC;nh n&#xEA;n s&#x1EBD; c&#xF3; 1 t&#x1EAD;p miner &#x1EDF; tr&#xEA;n ng&#x1B0;&#x1EE1;n trung b&#xEC;nh, v&#xE0; 1 t&#x1EAD;p miner kh&#xE1;c &#x1EDF; d&#x1B0;&#x1EDB;i ng&#x1B0;&#x1EE1;ng trung b&#xEC;nh c&#x1EE7;a c&#xE1;c ch&#x1EC9; s&#x1ED1;</li><li>L&#x1EA5;y v&#xED; d&#x1EE5; ch&#x1EC9; s&#x1ED1; v&#x1EC1; chi ph&#xED; &#x111;&#x1EC3; mine 1BTC ( theo m&#xEC;nh nh&#x1EDB; kh&#xF4;ng nh&#x1EA7;m th&#xEC; &#x1EDF; th&#x1EDD;i &#x111;i&#x1EC3;m hi&#x1EC7;n t&#x1EA1;i 26/12/2022. chi ph&#xED; &#x111;&#x1EC3; mine 1 BTC r&#x1A1;i v&#xE0;o kho&#x1EA3;ng 16k-18k usd. nh&#x1B0;ng v&#x1EDB;i nh&#x1EEF;ng t&#x1EAD;p miner &#x1EDF; t&#x1EAD;p d&#x1B0;&#x1EDB;i c&#x1EE7;a ch&#x1EC9; s&#x1ED1; trung b&#xEC;nh, h&#x1ECD; t&#x1EF1; tin c&#xF3; th&#x1EC3; miner v&#x1EDB;i chi ph&#xED; ch&#x1EC9; r&#x1A1;i v&#xE0;o kho&#x1EA3;ng 10k-11k/BTC, v&#x1EDB;i gi&#xE1; &#x111;i&#x1EC7;n r&#x1A1;i vao t&#x1EA7;m 0.05-0.06USD/Kwh, n&#xEA;n gi&#xE1; BTC c&#xF3; th&#x1EA5;p t&#x1EDB;i m&#x1EE9;c n&#xE0;y ho&#x1EB7;c th&#x1EA5;p h&#x1A1;n n&#x1EEF;a, th&#xEC; v&#x1EAB;n lu&#xF4;n c&#xF3; 1 t&#x1EAD;p miner ki&#x1EBF;m l&#x1EDD;i &#x111;&#x1B0;&#x1EE3;c t&#x1EEB; vi&#x1EC7;c mining. &#x111;&#x1EEB;ng tin qu&#xE1; nhi&#x1EC1;u v&#xE0;o c&#xE1;c ch&#x1EC9; s&#x1ED1; th&#x1ED1;ng k&#xEA;</li></ul><p><strong>Question 10: chi ph&#xED; c&#x1EE7;a miner g&#x1ED3;m nh&#x1EEF;ng ph&#x1EA7;n ch&#xED; ph&#xED; n&#xE0;o?</strong></p><p><strong>Answer: </strong></p><ul><li><strong>Chi ph&#xED; &#x111;i&#x1EC7;n:</strong> &#x110;&#xE2;y l&#xE0; ph&#x1EA7;n chi ph&#xED; l&#x1EDB;n nh&#x1EA5;t v&#xE0; quy&#x1EBF;t &#x111;&#x1ECB;nh xem m&#x1ED9;t d&#xF2;ng m&#xE1;y c&#xF3; kh&#x1EA3; n&#x103;ng ho&#xE0;n v&#x1ED1;n hay kh&#xF4;ng khi quy&#x1EBF;t &#x111;&#x1ECB;nh nh&#x1EA3;y v&#xE0;o l&#x129;nh v&#x1EF1;c mining. n&#x1EBF;u &#x1EDF; Vi&#x1EC7;t Nam, v&#xE0; mining v&#x1EDB;i gi&#xE1; &#x111;i&#x1EC7;n kinh doanh do EVN cung c&#x1EA5;p ( 3500vnd/kwh ~ 0.15 usd/kwh) b&#x1EA1;n s&#x1EBD; kh&#xF4;ng th&#x1EC3; n&#xE0;o c&#x1EA1;nh tranh &#x111;&#x1B0;&#x1EE3;c v&#x1EDB;i c&#xE1;c farm c&#xF4;ng nghi&#x1EC7;p &#x1EDF; v&#xF9;ng b&#x1EAF;c trung qu&#x1ED1;c s&#x1EED; d&#x1EE5;ng gi&#xE1; &#x111;i&#x1EC7;n t&#x1EEB; th&#x1EE7;y &#x111;i&#x1EC7;n ch&#x1EC9; r&#x1A1;i v&#xE0;o t&#x1EA7;m 0.05-0.06usd/kwh v&#xE0;o m&#xF9;a m&#x1B0;a. kh&#x1EE7;ng khi&#x1EBF;p ch&#x1B0;a.</li><li><strong>Chi ph&#xED; mua m&#xE1;y: </strong>&#x111;&#xE2;y l&#xE0; chi ph&#xED; l&#x1EDB;n th&#x1EE9; hai &#x1EA3;nh h&#x1B0;&#x1EDF;ng &#x111;&#x1EBF;n h&#xF2;a v&#x1ED1;n v&#xE0; l&#x1EE3;i nhu&#x1EAD;n, m&#xEC;nh nh&#x1EDB; th&#x1EDD;i &#x111;i&#x1EC3;m Antminer S9 ra m&#x1EAF;t va s&#x1ED1;t x&#xEC;nh x&#x1ECB;ch &#x1EDF; VN, gi&#xE1; b&#x1ECB; &#x111;&#x1EA9;y l&#xEA;n t&#x1EDB;i g&#x1EA7;n 100tr/m&#xE1;y, nh&#x1B0;ng ch&#x1EC9; sau &#x111;&#xF3; 1 n&#x103;m th&#xEC; gi&#xE1; c&#xF2;n b&#xE1;n v&#x1EDB;i gi&#xE1; s&#x1EAF;t v&#x1EE5;n ( 3-4Tr/m&#xE1;y). N&#xEA;n theo m&#xEC;nh ph&#x1EA7;n l&#x1EDB;n c&#xE1;c farm l&#x1EDB;n &#x111;&#x1EC1;u ch&#x1ECD;n th&#x1EDD;i &#x111;i&#x1EC3;m down trend, m&#xF9;a &#x111;&#xF4;ng &#x111;&#x1EC3; gom h&#xE0;ng v&#x1EC1; ch&#x1EA1;y. ch&#x1EC9; c&#xF3; c&#xE1;c anh em ch&#x1A1;i nh&#x1ECF; l&#x1EBB; ho&#x1EB7;c thi&#x1EBF;u kinh nghi&#x1EC7;m, th&#xEC; m&#x1EDB;i fomo &#x111;i mua m&#xE1;y &#x1EDF; &#x111;&#x1EC9;nh v&#xE0; mong ch&#x1EA1;y ki&#x1EBF;m l&#x1EDD;i th&#xF4;i. </li><li><strong>Chi ph&#xED; v&#x1EAD;n h&#xE0;nh: </strong>&#x111;&#x1EC3; mine &#x111;&#x1B0;&#x1EE3;c th&#xEC; b&#x1EA1;n c&#x1EA7;n nh&#xE0; x&#x1B0;&#x1EDF;ng, n&#x1A1;i &#x111;&#x1EB7;t m&#xE1;y , chi ph&#xED; nh&#xE2;n c&#xF4;ng v&#x1EAD;n h&#xE0;nh, ph&#x1EA7;n n&#xE0;y n&#x1EBF;u b&#x1EA1;n mine v&#x1EDB;i s&#x1ED1; l&#x1B0;&#x1EE3;ng c&#xE0;ng l&#x1EDB;n th&#xEC; chi ph&#xED; &#x111;&#x1EA7;u &#x111;&#x1EA7;u t&#x1B0; cho 1 m&#xE1;y s&#x1EBD; c&#xE0;ng nh&#x1ECF;.</li><li><strong>Chi ph&#xED; b&#x1EA3;o tr&#xEC;/b&#x1EA3;o d&#x1B0;&#x1EE1;ng: </strong>&#x111;&#xE2;y c&#x169;ng l&#xE0; 1 ph&#x1EA7;n &#x111;&#xE1;ng c&#xE2;n nh&#x1EAF;c, v&#xEC; h&#x1EA7;u h&#x1EBF;t l&#xE0; c&#xE1;c linh ki&#x1EC7;n &#x111;i&#x1EC7;n t&#x1EED;, ch&#x1EA1;y li&#xEA;n t&#x1EE5;c 24/7 v&#x1EDB;i nhi&#x1EC7;t &#x111;&#x1ED9; cao, n&#xEA;n vi&#x1EC7;c h&#x1B0; h&#x1ECF;ng, thay th&#x1EBF;, s&#x1EEF;a ch&#x1EEF;a l&#xE0; 1 nhu c&#x1EA7;u t&#x1EA5;t y&#x1EBF;u v&#xE0; ph&#xE1;t sinh chi ph&#xED; l&#x1EDB;n n&#x1EBF;u kh&#xF4;ng b&#x1EA3;o tr&#xEC; v&#xE0; duy tr&#xEC; &#x111;&#x1B0;&#x1EE3;c m&#xF4;i tr&#x1B0;&#x1EDD;ng &#x111;&#x1EE7; &#x1ED5;n &#x111;&#x1ECB;nh ( v&#x1EC1; nhi&#x1EC7;t &#x111;&#x1ED9;, &#x111;&#x1ED9; &#x1EA9;m, b&#x1EE5;i, ...)</li></ul><p><strong>T&#x1EA1;m k&#x1EBF;t: </strong> m&#xEC;nh d&#x1EEB;ng ph&#x1EA7;n chia s&#x1EBB; c&#x1EE7;a m&#xEC;nh &#x1EDF; &#x111;&#xE2;y, hi v&#x1ECD;ng s&#x1EBD; c&#xF3; ph&#x1EA7;n 3 s&#x1EDB;m, c&#x1EA3;m &#x1A1;n m&#x1ECD;i ng&#x1B0;&#x1EDD;i &#x111;&#xE3; ki&#xEA;n nh&#x1EAB;n &#x111;&#x1ECD;c h&#x1EBF;t ch&#x1EE7; &#x111;&#x1EC1; t&#x1EA3;n m&#x1EA1;n lan man c&#x1EE7;a m&#xEC;nh. </p>]]></content:encoded></item><item><title><![CDATA[Review Storj Node Operator -   Revenue and Profit 2022]]></title><description><![CDATA[<blockquote><strong>TDLR; </strong>This essay analyses the revenue generated by a Storj Node in 2022 using actual data that I have gathered. It is not investment advise; hosting and running a Storj node is a personal choice, and each individual is fully accountable for that choice.</blockquote><h2 id="what-is-storj">What is Storj?</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/6037d4d4231904480ddccd40_6022e005fee0125a69593c4f_how-decentralized-cloud-storage-works.png" class="kg-image" alt loading="lazy" width="1600" height="917" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/6037d4d4231904480ddccd40_6022e005fee0125a69593c4f_how-decentralized-cloud-storage-works.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/6037d4d4231904480ddccd40_6022e005fee0125a69593c4f_how-decentralized-cloud-storage-works.png 1000w, https://vinguyen.blog/content/images/2022/12/6037d4d4231904480ddccd40_6022e005fee0125a69593c4f_how-decentralized-cloud-storage-works.png 1600w" sizes="(min-width: 720px) 720px"><figcaption>Source from: https:</figcaption></figure>]]></description><link>https://vinguyen.blog/review-storj-node-operator-revenue-and-profit-2022/</link><guid isPermaLink="false">637f8eca0f5f3e0001df8fab</guid><category><![CDATA[Storj]]></category><category><![CDATA[Node-as-a-service]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[Review]]></category><category><![CDATA[Decentralize]]></category><category><![CDATA[Storage-solution]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Thu, 22 Dec 2022 16:41:26 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/12/prometheus-dashboard.png" medium="image"/><content:encoded><![CDATA[<blockquote><strong>TDLR; </strong>This essay analyses the revenue generated by a Storj Node in 2022 using actual data that I have gathered. It is not investment advise; hosting and running a Storj node is a personal choice, and each individual is fully accountable for that choice.</blockquote><h2 id="what-is-storj">What is Storj?</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/6037d4d4231904480ddccd40_6022e005fee0125a69593c4f_how-decentralized-cloud-storage-works.png" class="kg-image" alt="Review Storj Node Operator -   Revenue and Profit 2022" loading="lazy" width="1600" height="917" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/6037d4d4231904480ddccd40_6022e005fee0125a69593c4f_how-decentralized-cloud-storage-works.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/6037d4d4231904480ddccd40_6022e005fee0125a69593c4f_how-decentralized-cloud-storage-works.png 1000w, https://vinguyen.blog/content/images/2022/12/6037d4d4231904480ddccd40_6022e005fee0125a69593c4f_how-decentralized-cloud-storage-works.png 1600w" sizes="(min-width: 720px) 720px"><figcaption>Source from: https://www.storj.io/blog/what-is-decentralized-cloud-storage</figcaption></figure><img src="https://vinguyen.blog/content/images/2022/12/prometheus-dashboard.png" alt="Review Storj Node Operator -   Revenue and Profit 2022"><p><a href="https://www.storj.io/">Storj</a> is a cryptocurrency blockchain platform powering a decentralized system for digital file storage. It&apos;s one of the first decentrialize cloud storage (DCS) network in the world, was launched in 2017 on the <a href="https://ethereum.org/vi/">Ethereum Network</a> as a secure place to storage data. Storj wants to create a most cost-effective, transparent, and secure platform alternatives such as Google, Amazon, Microsoft, ..., as well as give a solution so that end users have complete control over their data. To archive this, storj develop a platform that allow individual could rent out space on their computer, Then, the platform would take a user&apos;s file, data, encrypt it and storing the separate particles across multiple compute. In that way the data is secure and nobody can access the central server &amp; stolen the file and and space lessors can also make a profit from storing users&apos; data on their computers. In simple terms, <strong>Storj can be called Uber in the field of data storage</strong>, but is built on the blockchain platform.</p><ul><li>For the detail information, check the Storj Docs <a href="https://docs.storj.io/">https://docs.storj.io/</a></li><li>As an example of Storj DCS, you can use it to backlog the data: <a href="https://vinguyen.blog/blog-development-series-backup-ghost-blog-data-with-storj/">https://vinguyen.blog/blog-development-series-backup-ghost-blog-data-with-storj/</a></li></ul><h2 id="what-is-storj-node-operator">What is Storj Node Operator?</h2><p>Storage Node Operators contribute unused hard drive capacity to the network, enabling the storage network to be distributed around the world and earn profit from it.</p><h3 id="what-got-me-the-idea-of-wanting-to-be-a-storj-node-operator">What got me the idea of wanting to be a Storj node operator?</h3><ul><li>Inspired by the article: <a href="https://www.storj.io/blog/sharing-storage-space-for-fun-and-profit">https://www.storj.io/blog/sharing-storage-space-for-fun-and-profit</a></li><li>Want to contribute to blockchain platforms and decentralize solution</li><li>Be operated and feel the fun of operating a server that requires high stability and avaibility</li></ul><h3 id="how-to-become-storj-node-operator">How to become Storj Node Operator?</h3><ul><li>Full document: <a href="https://docs.storj.io/node">https://docs.storj.io/node</a></li></ul><h3 id="what-is-the-minimum-requirement-to-become-a-storj-node-operator">What is the minimum requirement to become a Storj Node Operator?</h3><p><em>Source From: <a href="https://docs.storj.io/node/before-you-begin/prerequisites">https://docs.storj.io/node/before-you-begin/prerequisites</a></em></p><ul><li>One (1) processor core dedicated to each node service</li><li>Minimum of 550 GB with no maximum of available space per node</li><li>Minimum of 2 TB of bandwidth available per month<a href="https://docs.storj.io/node/before-you-begin/prerequisites/#hardware-requirements-recommended" rel="nofollow noreferrer noopener">&#xFEFF;</a> with a public IP</li><li>Minimum of 5 Mbps bandwidth upstream</li><li>Minimum of 25 Mbps bandwidth downstream</li><li>Minimum uptime (online and operational) of 99.3% per month, max total downtime of 5 hours monthly</li></ul><h2 id="review-of-a-storj-nodes-revenue-and-profit">Review of a Storj Node&apos;s Revenue and profit:</h2><h3 id="i-estimated-revenue-for-the-current-month">I. Estimated revenue for the current month:</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.07.04.png" class="kg-image" alt="Review Storj Node Operator -   Revenue and Profit 2022" loading="lazy" width="1852" height="761" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-22-at-23.07.04.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-22-at-23.07.04.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-22-at-23.07.04.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.07.04.png 1852w" sizes="(min-width: 720px) 720px"><figcaption>Storj Node Operator - Grafana Dashboard</figcaption></figure><ul><li>Time range of the data on the dashboard: <strong>22 days, f</strong>rom Dec 01 to Dec 22,2022.</li><li>Total 8 online nodes is running, and none of theme have the <a href="https://docs.storj.io/node/resources/faq/held-back-amount">Held back</a></li></ul><p><strong>Disk Space Information: </strong></p><ul><li>Total Diskspace: 12.1TB </li><li>Disk used: 10.1TB - <strong> Revenue is paid for this part</strong></li><li>Disk Free: 2.07TB - No revenue for this part</li></ul><p><strong>Bandwidth:</strong> &#xA0;</p><ul><li>Ingress: 1.09TB - No revenue for this part</li><li>Egress: 986,52BG - <strong>Revenue is paid for this part</strong></li></ul><p><strong>Income</strong> </p><ul><li><strong>For 22 days:</strong> 27.43USD</li><li><strong>Estimation for 30 Day:</strong> 27.43/22*30 = 37.4USD</li><li><strong>Average income per day per filled disk:</strong> ~1.24Usd/day/10TB ~ <strong>0.12USD/Day/TB</strong></li></ul><h3 id="ii-review-a-node">II. Review a Node</h3><p><strong>Node Context:</strong></p><ul><li>Location: Canada</li><li>Disk Space: 1.8TB</li><li>Disk Used: 1.775TB</li><li>Free Space: 25GB</li><li>Uptime: more than 12 months</li></ul><p><strong>Estimation payout Dec 2022:</strong></p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.33.29@2x.png" class="kg-image" alt="Review Storj Node Operator -   Revenue and Profit 2022" loading="lazy" width="1686" height="1122" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-22-at-23.33.29@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-22-at-23.33.29@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-22-at-23.33.29@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.33.29@2x.png 1686w" sizes="(min-width: 720px) 720px"></figure><p><strong>Payout history by Satellite last month (November, 2022)</strong></p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.34.18@2x.png" class="kg-image" alt="Review Storj Node Operator -   Revenue and Profit 2022" loading="lazy" width="1676" height="1012" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-22-at-23.34.18@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-22-at-23.34.18@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-22-at-23.34.18@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.34.18@2x.png 1676w" sizes="(min-width: 720px) 720px"></figure><p><strong>Last 12 Month Payout Summary</strong></p><p>Time range: Dec 2021 to Nov 2022</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.38.15@2x.png" class="kg-image" alt="Review Storj Node Operator -   Revenue and Profit 2022" loading="lazy" width="1728" height="1266" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-22-at-23.38.15@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-22-at-23.38.15@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-22-at-23.38.15@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.38.15@2x.png 1728w" sizes="(min-width: 720px) 720px"></figure><p><strong>Heldback:</strong></p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.34.46@2x.png" class="kg-image" alt="Review Storj Node Operator -   Revenue and Profit 2022" loading="lazy" width="1730" height="1254" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-22-at-23.34.46@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-22-at-23.34.46@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-22-at-23.34.46@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-22-at-23.34.46@2x.png 1730w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[Blog development series - 
Setup MVP Blog with Ghost and Docker]]></title><description><![CDATA[<p><em>In this post, we&apos;ll setup a MVP Blog using Ghost and Docker on Linux environment, full setup script could be founded at: </em><a href="https://github.com/ngtrieuvi92/mvp-ghost-blog-docker">https://github.com/ngtrieuvi92/mvp-ghost-blog-docker</a></p><blockquote><strong>TLDR; </strong>This is a series of post-recording &amp; sharing the progress setup of my blog from the beginning of development to</blockquote>]]></description><link>https://vinguyen.blog/blog-development-series-setup-mvp-ghost-blog-with-docker/</link><guid isPermaLink="false">637b95630f5f3e0001df8e1d</guid><category><![CDATA[blog-development-series]]></category><category><![CDATA[blog-infrastructure-series]]></category><category><![CDATA[en]]></category><category><![CDATA[Ghost]]></category><category><![CDATA[Docker]]></category><category><![CDATA[DevOps]]></category><category><![CDATA[Product]]></category><category><![CDATA[Product-type]]></category><category><![CDATA[Product-mindset]]></category><category><![CDATA[Post]]></category><category><![CDATA[Solution]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Sat, 17 Dec 2022 14:18:18 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-17-at-23.42.08@2x.png" medium="image"/><content:encoded><![CDATA[<img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-17-at-23.42.08@2x.png" alt="Blog development series - 
Setup MVP Blog with Ghost and Docker"><p><em>In this post, we&apos;ll setup a MVP Blog using Ghost and Docker on Linux environment, full setup script could be founded at: </em><a href="https://github.com/ngtrieuvi92/mvp-ghost-blog-docker">https://github.com/ngtrieuvi92/mvp-ghost-blog-docker</a></p><blockquote><strong>TLDR; </strong>This is a series of post-recording &amp; sharing the progress setup of my blog from the beginning of development to meet the needs for stable and reliable blog operation</blockquote><h3 id="context">Context</h3><p>This blog is a simple monolithic application deployed with docker &amp; managed by docker-compose running 2 containers: <a href="https://hub.docker.com/_/ghost">Ghost 5.3</a> &amp; <a href="https://hub.docker.com/_/mysql">Mysql 8.0</a> as the diagram bellow</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg" class="kg-image" alt="Blog development series - 
Setup MVP Blog with Ghost and Docker" loading="lazy" width="1161" height="641" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1000w, https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1161w" sizes="(min-width: 720px) 720px"></figure><p><strong>Series</strong></p><ul><li><a href="https://vinguyen.blog/blog-development-series-setup-mvp-ghost-blog-with-docker/">Blog development series - Setup MVP Blog with Ghost and Docker</a></li><li><a href="https://vinguyen.blog/blog-development-series-setup-health-check-ghost-blog-with-uptime-robot/">Blog development series - &#xA0;Setup health check Ghost Blog with Uptime Robot</a></li><li><a href="https://vinguyen.blog/blog-development-series-backup-ghost-blog-data-with-storj/">Blog development series - Backup Ghost Blog with Storj</a></li></ul><h2 id="why-ghost">Why Ghost?</h2><p><a href="https://ghost.org/">Ghost</a> is one of the most popular open source blogging platforms. It provide powerful features for almost everything related to blogging, such as: editing, publishing, email newsletters, and offer paid solutions for the publisher with a few click to setup. </p><p>Ghost offer pre-made themes that you can use to setup it quickly, but it also support extensive API, so you can use it as a headless CMS and build your custom frontend</p><p>You can use the cloud version of Ghost with a lot of support &amp; feature offer from Ghost, check more at: <a href="https://ghost.org/pricing/">https://ghost.org/pricing</a>, ready to use and forcus in the content without any effort for operation. that will the best option for non-tech guy only want to have a blog to write &amp; publish content. </p><h3 id="why-self-host-ghost">Why Self-Host Ghost?</h3><p>If you don&apos;t want to use solution from ghost Ghost, you can also host a blog by yourself, on that way:</p><ul><li>you can learn a lot of thing when operation your blog &#xA0;and it infrastructure, and you can get the source code</li><li>you can to make the blog fulfill all your wishes by customizing it yourself.</li></ul><h3 id="why-host-ghost-blog-with-docker">Why Host Ghost blog with Docker?</h3><p>You can install Ghost in <a href="https://ghost.org/docs/install/">several ways</a>, one of which is <a href="https://www.docker.com/">Docker</a>.</p><p>Deploying Ghost with Docker has many advantages ( with me). </p><ul><li>Docker/Container is a popular and standard solution to hosting everything from development to production, small scale to large scale</li><li>With Docker, you can get a flexible and portable way to run your blog anywhere, you can spin up on another instance quickly when you need</li><li>Your can learn a lot of things about Docker, Container, Operation, DevOps when you operation your blog in the long time.</li></ul><p>This post will guide you through the entire process of setting up a minimal, ready to use Ghost blog with docker (MVP) to help you can start to writing your content, The guide to make Blog more reliable and high availability will mention in this series</p><p>For the full features of Ghost, check more at: <a href="https://ghost.org/">https://ghost.org</a></p><h2 id="technical-stack-deployment-diagram">Technical Stack &amp; Deployment Diagram</h2><p><strong>Technical Stack</strong></p><p>In this guide, we&apos;ll use:</p><ul><li>Ubuntu server 22.04 LTS as the based OS with firewall already setup for allow ssh, http and https.</li><li>Cloudflare as the DNS server and SSL (reverse proxy).</li><li>Docker &amp; Docker-Compose: main stack for deployment</li><li>Ghost Image:</li><li>Mysql as the primary Database</li></ul><p><strong>Deployment diagram</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin-1.jpg" class="kg-image" alt="Blog development series - 
Setup MVP Blog with Ghost and Docker" loading="lazy" width="1161" height="641" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/MeatBlog-deployment-diagram-blog-origin-1.jpg 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/MeatBlog-deployment-diagram-blog-origin-1.jpg 1000w, https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin-1.jpg 1161w" sizes="(min-width: 720px) 720px"><figcaption>Setting up Ghost blog with docker</figcaption></figure><h3 id="why-i-call-this-a-mvp-blog-and-what-is-the-known-limitation">Why I call this a MVP Blog and what is the known limitation?</h3><p><strong>MVP </strong>stand for<strong> M</strong>inimum <strong>V</strong>iable <strong>P</strong>roduct. In my opinion and my insight, the goal of the blog is help the publisher to writing the content the publish it to audience, that is the key feature of a blog, with the MVP scope, we need to priority this first &#xA0;to release it on production, bring content to use, the receive the fast feedback from audience to improve the content, the blog UI/UX, ....</p><p><strong>Known limitation:</strong></p><ul><li>Backup/Restore:</li><li>High Performance &amp; High Availability:</li><li>Fulfill the UI/UX:</li><li>Fulfill the Operation:</li></ul><h2 id="setting-up-ghost-with-docker">Setting Up Ghost with Docker</h2><p><strong>Step 1. Setup docker &amp; docker-compose</strong></p><p><em>If you have already installed Docker and Docker-Compose, then you can start with Step 2.<br></em><strong>1.1 Install Docker</strong></p><p>This can vary depending on the Linux distribution used. </p><p><strong>You can use the util script provide by Docker at </strong><a href="https://get.docker.com/">https://get.docker.com</a></p><pre><code class="language-bash">curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh</code></pre><p><strong>Or installation by the package for specific Operating System, example is for Ubuntu:</strong></p><pre><code class="language-bash">
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Depending on Version:

# Ubuntu 18.04:
sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable&quot;

# Ubuntu 20.04
sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable&quot;

sudo apt update
sudo apt upgrade -y
sudo apt install docker-ce -y</code></pre><p><strong>1.2 Non-root user access</strong></p><p><em>Run when logged in as the user that should also be allowed to run docker:</em></p><pre><code class="language-bash">sudo usermod -aG docker ${USER}su - ${USER}</code></pre><p><strong>1.3 Install Docker-Compose:</strong></p><pre><code class="language-bash">sudo curl -L &quot;https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose</code></pre><p><strong>Step 2. Running the Ghost with Docker</strong></p><p><em>Full script setup can be founded at: <a href="https://github.com/ngtrieuvi92/mvp-ghost-blog-docker">https://github.com/ngtrieuvi92/mvp-ghost-blog-docker</a></em></p><p>Create new docker-compose.yml with content bellow:</p><figure class="kg-card kg-code-card"><pre><code class="language-docker-compose.yml">version: &apos;3&apos;

services:
  ghost:
    image: ghost:5.22.9
    container_name: blog_ghost
    volumes:
      - ./ghost/content:/var/lib/ghost/content:z
    ports:
      - ${PUBLIC_PORT:-2368}:2368
    restart: always
    env_file:
      - ./.env
    links:
      - mysql

  mysql:
    image: mysql:8
    container_name: blog_database
    volumes:
       - ./dbdata:/var/lib/mysql  # Persist storage
    env_file:
      - ./.env
    expose:
      - &quot;3306&quot;
    restart: always</code></pre><figcaption>docker-compose.yml file for Ghost with Mysql</figcaption></figure><p>Then create and input variable for .env</p><figure class="kg-card kg-code-card"><pre><code class="language-.env">###################################################
#          Ghost configuration                    #
#          All Ghost config should be put here    #
################################################### 

# GHOST BLOG 
NODE_ENV=production # set either production or development, then it will load the respective config
PUBLIC_PORT=80
database__client=mysql
database__connection__host=mysql
database__connection__user=a-mysql-user
database__connection__password=a-password-of-mysql-user
database__connection__database=blogdatabase

###################################################
#          Mysql configuration                    #
#          All Mysql config should be put here    #
###################################################

MYSQL_ROOT_PASSWORD=mysql-admin-password
MYSQL_USER=a-mysql-user
MYSQL_PASSWORD=a-password-of-mysql-user
MYSQL_DATABASE=blogdatabase</code></pre><figcaption>Environment variables</figcaption></figure><p>Run command bellow to start the blog</p><pre><code class="language-bash">docker-compose up -d
docker-compose logs -f</code></pre><p>At &#xA0;the end of this step, Ghost blog up &amp; running at the port 80 of the server, go to the browser and access it via the server IP</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-17-at-23.11.40@2x.png" class="kg-image" alt="Blog development series - 
Setup MVP Blog with Ghost and Docker" loading="lazy" width="2000" height="1020" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-17-at-23.11.40@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-17-at-23.11.40@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-17-at-23.11.40@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/CleanShot-2022-12-17-at-23.11.40@2x.png 2400w" sizes="(min-width: 720px) 720px"></figure><p><strong>Step 3. Exposing and Securing the Ghost Blog</strong></p><p>To make sure that the blog is easy to access by mapping a domain &amp; secure by setup SSL:</p><p>The simple solution is use the <a href="https://www.cloudflare.com/">Cloudflare</a> service with proxied mode, mapping your domain with the server ip and it done. </p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-17-at-23.12.59@2x.png" class="kg-image" alt="Blog development series - 
Setup MVP Blog with Ghost and Docker" loading="lazy" width="2000" height="576" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-17-at-23.12.59@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-17-at-23.12.59@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-17-at-23.12.59@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/CleanShot-2022-12-17-at-23.12.59@2x.png 2400w" sizes="(min-width: 720px) 720px"></figure><p><strong>Other Solutions:</strong></p><p><em>You can choose any solution that familiar with you to setup SSL for the blog:</em></p><p><strong>Examples:</strong></p><ul><li>Setup reverse proxy use Nginx and SSL with Let&apos;s encrypt: &#xA0;<a href="https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-22-04">https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-22-04</a></li><li>Ghost with Traefik: <a href="https://tech.aufomm.com/deploy-ghost-with-docker-and-traefik-2/">https://tech.aufomm.com/deploy-ghost-with-docker-and-traefik-2/</a></li></ul><p><strong>Step 4. Setting up the Ghost blog</strong></p><p>Now you can go to the ghost admin at: https://&lt;your-blog-domain&gt;/ghost and starting to setup the Blog:</p><p><strong>Init Admin Account, Site Title:</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-17-at-23.23.24@2x.png" class="kg-image" alt="Blog development series - 
Setup MVP Blog with Ghost and Docker" loading="lazy" width="2000" height="1609" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-17-at-23.23.24@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-17-at-23.23.24@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-17-at-23.23.24@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-17-at-23.23.24@2x.png 2088w" sizes="(min-width: 720px) 720px"><figcaption>Init Admin Account, Site Name</figcaption></figure><p>Explore the Ghost Admin &amp; Setting up</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-17-at-23.24.51@2x.png" class="kg-image" alt="Blog development series - 
Setup MVP Blog with Ghost and Docker" loading="lazy" width="2000" height="1007" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-17-at-23.24.51@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-17-at-23.24.51@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-17-at-23.24.51@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/CleanShot-2022-12-17-at-23.24.51@2x.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Ghost blog dashboard</figcaption></figure><p>Some suggestion that we should consider top setup: </p><ul><li>General information</li><li>Ghost theme</li><li>Navigation</li><li>Membership setting</li></ul><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-17-at-23.28.16@2x.png" class="kg-image" alt="Blog development series - 
Setup MVP Blog with Ghost and Docker" loading="lazy" width="2000" height="1036" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-17-at-23.28.16@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-17-at-23.28.16@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-17-at-23.28.16@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/CleanShot-2022-12-17-at-23.28.16@2x.png 2400w" sizes="(min-width: 720px) 720px"></figure><p></p><p>Create your first post and publish: click the <strong>+</strong> button next to <strong>Posts</strong>, which will take you to the post editor.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-17-at-23.34.10@2x.png" class="kg-image" alt="Blog development series - 
Setup MVP Blog with Ghost and Docker" loading="lazy" width="2000" height="1039" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-17-at-23.34.10@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-17-at-23.34.10@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-17-at-23.34.10@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/CleanShot-2022-12-17-at-23.34.10@2x.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Create your first post and publish</figcaption></figure><p>Check more at: <a href="https://ghost.org/tutorials/">https://ghost.org/tutorials/</a></p><h2 id="conclusion"><strong>Conclusion</strong></h2><p>In this post, you guided to quick setup a new Ghost blog by docker, that help you can easy to start, maintain &amp; extend your blog on the feature.</p><p>Next post on this series, I make it more reliable, safe, trackable, and give the data to improve the blog. thanks for read this.</p>]]></content:encoded></item><item><title><![CDATA[Blog development series - 
Backup Ghost Blog with Storj]]></title><description><![CDATA[<blockquote><strong>TLDR; </strong>This is a series of post-recording &amp; sharing the progress setup of my blog from the beginning of development to meet the needs for stable and reliable blog operation</blockquote><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg" class="kg-image" alt loading="lazy" width="1161" height="641" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1000w, https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1161w" sizes="(min-width: 720px) 720px"></figure><p><strong>Series</strong></p><ul><li><a href="https://vinguyen.blog/blog-development-series-setup-mvp-ghost-blog-with-docker/">Blog development series - Setup MVP Blog with Ghost and Docker</a></li><li><a href="https://vinguyen.blog/blog-development-series-setup-health-check-ghost-blog-with-uptime-robot/">Blog development series - &#xA0;Setup health check</a></li></ul>]]></description><link>https://vinguyen.blog/blog-development-series-backup-ghost-blog-data-with-storj/</link><guid isPermaLink="false">6374f6cd0f5f3e0001df8bcc</guid><category><![CDATA[Ghost]]></category><category><![CDATA[Backup]]></category><category><![CDATA[Docker]]></category><category><![CDATA[Storj]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[Solution]]></category><category><![CDATA[Technical]]></category><category><![CDATA[blog-infrastructure-series]]></category><category><![CDATA[Deployment]]></category><category><![CDATA[en]]></category><category><![CDATA[blog-development-series]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Tue, 13 Dec 2022 17:28:16 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/12/storj-banner.png" medium="image"/><content:encoded><![CDATA[<blockquote><strong>TLDR; </strong>This is a series of post-recording &amp; sharing the progress setup of my blog from the beginning of development to meet the needs for stable and reliable blog operation</blockquote><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="1161" height="641" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1000w, https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1161w" sizes="(min-width: 720px) 720px"></figure><img src="https://vinguyen.blog/content/images/2022/12/storj-banner.png" alt="Blog development series - 
Backup Ghost Blog with Storj"><p><strong>Series</strong></p><ul><li><a href="https://vinguyen.blog/blog-development-series-setup-mvp-ghost-blog-with-docker/">Blog development series - Setup MVP Blog with Ghost and Docker</a></li><li><a href="https://vinguyen.blog/blog-development-series-setup-health-check-ghost-blog-with-uptime-robot/">Blog development series - &#xA0;Setup health check Ghost Blog with Uptime Robot</a></li><li><a href="https://vinguyen.blog/blog-development-series-backup-ghost-blog-data-with-storj/">Blog development series - Backup Ghost Blog with Storj</a></li></ul><h3 id="i-context">I. Context</h3><p>This blog is a simple monolithic application deployed with docker &amp; managed by docker-compose running 2 containers: <a href="https://hub.docker.com/_/ghost">Ghost 5.3</a> &amp; <a href="https://hub.docker.com/_/mysql">Mysql 8.0</a> as the diagram bellow</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/11/MeatBlog-deployment-diagram.drawio.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="1161" height="641" srcset="https://vinguyen.blog/content/images/size/w600/2022/11/MeatBlog-deployment-diagram.drawio.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/11/MeatBlog-deployment-diagram.drawio.png 1000w, https://vinguyen.blog/content/images/2022/11/MeatBlog-deployment-diagram.drawio.png 1161w" sizes="(min-width: 720px) 720px"><figcaption>Ghost Blog deployment use docker without backup</figcaption></figure><h3 id="why-we-need-backup-the-data">Why we need backup the data?</h3><blockquote>The world is divided into 2 types of people, one who has backed up the data and the other who will the backup data</blockquote><p>Data backup is an important and urgent task that any data system must have to ensure that we have the opportunity to preserve our data in the event of any failure. happen (hacked, ransomware, hardware-corrupted, human mistake, ...)</p><h2></h2><h2 id="ii-backup-ghost-blog-using-bash-script-and-storj">II. Backup Ghost blog using Bash script and Storj</h2><h3 id="why-storj">Why Storj?</h3><ul><li>I want to use Storj DCS as a storage solution for backup tool so that I can test the effectiveness of Storj DCS by myself and I am also a Storj Node Operator so I want to have the most complete view from both sides users and node operator.</li><li>If you don&apos;t want to use Storj, you can choose any remote source that Rclone support: S3, S3 compatible solution ( <a href="https://min.io/">MINIO</a>, <a href="filebase.com">Filebase</a>), Google Drive, check more at: <a href="https://rclone.org/overview/">https://rclone.org/overview/</a></li></ul><h3 id="why-bash">Why Bash?</h3><ul><li>Just Simple, Bash is the glue to connect everything &amp; it a great tool for interactive in command line environment </li></ul><h3 id="what-should-i-backup">What should I backup?</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-with-backup-with-storj-backup.jpg" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="1441" height="641" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/MeatBlog-deployment-diagram-blog-with-backup-with-storj-backup.jpg 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/MeatBlog-deployment-diagram-blog-with-backup-with-storj-backup.jpg 1000w, https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-with-backup-with-storj-backup.jpg 1441w" sizes="(min-width: 720px) 720px"><figcaption>Backup ghost blog with Storj and bash script</figcaption></figure><p><strong>Two things:</strong></p><ul><li>Ghost content <em>/content</em>: which includes my blog content in JSON, member CSV export, images, themes and some configurations</li><li>Database: major blog database, </li><li>(Optional) Application Versioning, docker-compose file </li></ul><p><strong>Overview step to backup:</strong></p><ul><li>Register an account &amp; setup new bucket on <a href="https://ap1.storj.io/signup">Storj</a></li><li>Install some requirements tool: Rclone, Restic</li><li>Setup Restic repo to work with Rclone and Storj</li><li>Implement backup script</li><li>&#x2003;Copy &amp; Zip Ghost Blog Content</li><li>&#x2003;Export Database to sql or sql.gz file</li><li>&#x2003;Backup content to remote destination with Restic &amp; Reclone</li><li>Setup Schedule for automation Backup</li><li>Prepare recovery Plan &amp; rehearsal for restoration</li></ul><h2 id="iii-how-to-setup-backup-use-storj-and-bash-script">III. How to setup backup use Storj and Bash script</h2><h3 id="step-1-create-an-account-setup-new-bucket-on-storj">Step 1. Create an account &amp; setup new bucket on <a href="https://ap1.storj.io/signup">Storj</a></h3><p>First one, register new account on <a href="https://ap1.storj.io/signup">Storj</a> and create new bucket to storage backup content.</p><p><strong>Register new account: <a href="https://www.storj.io/">https://www.storj.io/</a></strong></p><p>Currently, Storj is free 150GB for each account after register ( 3 project &amp; 50GB for each project). It enough for me to storage backup data right now.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/register-new-account.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="2000" height="1276" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/register-new-account.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/register-new-account.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/register-new-account.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/register-new-account.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Register new Storj account</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/register-new-account-start-with-web.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="2000" height="1061" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/register-new-account-start-with-web.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/register-new-account-start-with-web.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/register-new-account-start-with-web.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/register-new-account-start-with-web.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Starting with web browser</figcaption></figure><p><strong>Create new S3 Credential:</strong></p><p>Storj DCS provide a S3 compatible Gateway MT to help us use it with S3 Interface, so we&apos;ll create a new Credentials and setup Rclone to use it.</p><p>For detail: <a href="https://docs.storj.io/dcs/api-reference/s3-compatible-gateway">https://docs.storj.io/dcs/api-reference/s3-compatible-gateway</a></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/12/create-new-S3-credential.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="2000" height="728" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/create-new-S3-credential.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/create-new-S3-credential.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/create-new-S3-credential.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/create-new-S3-credential.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Setup new Storj S3 Credentials</figcaption></figure><p><strong>The important note here is: write down &amp; storage your passphrase carefully, if you lost it, you may lose your data permanently </strong>because the data you upload on Storj will be encrypt &amp; spit to small piece before distribution one storage nodes ( read more at: <a href="https://www.storj.io/how-it-works">How Storj Works</a>)</p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-22.34.37@2x.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="1534" height="1402" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-15-at-22.34.37@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-15-at-22.34.37@2x.png 1000w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-22.34.37@2x.png 1534w" sizes="(min-width: 720px) 720px"></figure><h3 id="step-2-install-requirements-tools">Step 2: Install requirements tools</h3><p><strong>Install Rlone &amp; Restic</strong></p><p>For Ubuntu based:</p><pre><code class="language-bash">sudo apt install -y rclone restic</code></pre><p>For Linux Distro, please check:</p><ul><li>Rclone: <a href="https://rclone.org/install/">https://rclone.org/install</a></li><li>Restic: <a href="https://restic.readthedocs.io/en/stable/020_installation.html">https://restic.readthedocs.io/en/stable/020_installation.html</a></li></ul><h3 id="step-3-setup-restic-repo-to-work-with-rclone-and-storj">Step 3: Setup Restic repo to work with Rclone and Storj</h3><p><strong>Config Rclone sync files to Storj bucket</strong></p><p>For shortcut: create new rclone config and put it in: <strong>$HOME/config/rclone/rclone.conf</strong> with the content bellow</p><figure class="kg-card kg-code-card"><pre><code class="language-rclone.conf">[storj]
type = s3
provider = Other
env_auth = false
access_key_id = &lt;s3-credential-access-key-created-in-step-1&gt;
secret_access_key = &lt;s3-credential-secret-access-key-created-in-step-1&gt;
endpoint = https://gateway.storjshare.io
acl = private
chunk_size = 64M</code></pre><figcaption>Rclone&apos;s conguration sync file with Storj Bucket</figcaption></figure><p>For detail guide: &#xA0;<a href="https://docs.storj.io/dcs/how-tos/sync-files-with-rclone/rclone-with-hosted-gateway">https://docs.storj.io/dcs/how-tos/sync-files-with-rclone/rclone-with-hosted-gateway</a></p><p><strong>Init new Storj Bucket with rclone</strong></p><pre><code class="language-bash">rclone mkdir storj:my-backup-bucket</code></pre><p><strong>Init Restic Repo</strong></p><pre><code># Init Restic repo
restic --repo rclone:storj:my-backup-bucket/blog-backup init
</code></pre><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-22.55.16@2x.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="1628" height="856" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-15-at-22.55.16@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-15-at-22.55.16@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-15-at-22.55.16@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-22.55.16@2x.png 1628w" sizes="(min-width: 720px) 720px"></figure><p></p><p>For detail guide: <a href="https://docs.storj.io/dcs/how-tos/backup-with-restic">https://docs.storj.io/dcs/how-tos/backup-with-restic</a></p><h3 id="step-4-implement-the-backup-script">Step 4. Implement the backup script</h3><ol><li><strong>Create a folder and import application environment into current shell</strong></li></ol><p>This just a temporary folder to collect everything before store it into Storj Bucket</p><pre><code># Create temporary folder
DAY=$(date +%A)
FULLDATE=$(date -I)
BACKUP_DIR=/tmp/backup/blog-backup-$FULLDATE
# Create temporary backup directory
mkdir -p $BACKUP_DIR</code></pre><p>Import current .env config: this will help we load all current configuration ( database username, password, database name) into the current shell.</p><pre><code>
# Import current .env config
. .env</code></pre><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-22.59.12@2x.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="2000" height="735" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-15-at-22.59.12@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-15-at-22.59.12@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-15-at-22.59.12@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-22.59.12@2x.png 2362w" sizes="(min-width: 720px) 720px"></figure><p><strong>2. Copy &amp; Zip Ghost Blog Content</strong></p><p>Go to blog deployment repository then archive the ghost folder, it contain all most important information of our blog</p><pre><code class="language-bash">
tar -zcvf $BACKUP_DIR/ghost-content.tar.gz ghost</code></pre><p><strong>3. Export Database to sql or sql.gz file</strong></p><p>General command to export database from a Mysql container:</p><pre><code class="language-bash">docker exec &lt;mysql-containername&gt; /usr/bin/mysqldump --no-tablespaces -u &lt;db-user&gt; --password=&lt;db-password&gt; &lt;ghost-blog-database-name&gt; &gt; $BACKUP_DIR/blog-db.sql</code></pre><p>In case that the setup following my blog development series, the variable is loaded from .env file, so we can use this command with pre-fill enough information</p><pre><code class="language-bash">docker exec blog_database /usr/bin/mysqldump --no-tablespaces -u $database__connection__user --password=$database__connection__password $database__connection__database &gt; $BACKUP_DIR/blog-db.sql</code></pre><p><strong>4. Backup docker-compose &#xA0;&amp; .env file</strong></p><p>(Optional) In case that the setup following my blog development series</p><pre><code class="language-bash">cp docker-compose.yml $BACKUP_DIR/
cp .env $BACKUP_DIR/env</code></pre><p><strong>5. Backup content to remote destination with Restic &amp; Rclone</strong></p><p>General command:</p><pre><code class="language-bash">restic --repo rclone:&lt;s3-compatible-config-name&gt;:&lt;bucket&gt;&lt;folder&gt; backup $BACKUP_DIR</code></pre><p>In case that the setup following my blog development series</p><ul><li>Make sure that RESTIC_BACKUP_REPO &amp; RESTIC_PASSWORD_FILE declared on .env file</li></ul><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-23.01.46@2x-2.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="2000" height="717" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-15-at-23.01.46@2x-2.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-15-at-23.01.46@2x-2.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-15-at-23.01.46@2x-2.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-23.01.46@2x-2.png 2058w" sizes="(min-width: 720px) 720px"></figure><ul><li>Create a file at the path $RESTIC_PASSWORD_FILE and put the Restic repo password into that file</li></ul><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-23.03.18@2x.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="2000" height="771" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-15-at-23.03.18@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-15-at-23.03.18@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-15-at-23.03.18@2x.png 1600w, https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-23.03.18@2x.png 2086w" sizes="(min-width: 720px) 720px"></figure><ul><li>Run the command bellow to backup</li></ul><pre><code class="language-bash">restic --password-file=$RESTIC_PASSWORD_FILE --repo $RESTIC_BACKUP_REPO backup $BACKUP_DIR</code></pre><p><strong>6. &#xA0;Wrap-up into bash script</strong></p><pre><code class="language-bash">#!/bin/bash
set -e

echo &quot;#########################################################################&quot;
echo &quot;# BACKUP GHOST BLOG - `date +%A` - `date +%Y-%m-%d_%Hh%Mm%Ss`          #&quot;
echo &quot;#########################################################################&quot;

# Import application configuration
. ../.env

# Declare variables
DAY=$(date +%A)
FULLDATE=$(date -I)
BACKUP_DIR=/tmp/backup/blog-backup-$FULLDATE
# Create temporary backup directory
mkdir -p $BACKUP_DIR

# Extract Mysql Database
# https://anothercoffee.net/how-to-fix-the-mysqldump-access-denied-process-privilege-error/
echo &quot;Backing up database &quot;
docker exec blog_database /usr/bin/mysqldump --no-tablespaces -u $database__connection__user --password=$database__connection__password $database__connection__database &gt; $BACKUP_DIR/blog-db.sql

# Copy Ghost Blog Content Driectory
echo &quot;Backing up Ghost Data directory...&quot;
tar -zcvf $BACKUP_DIR/ghost-content.tar.gz ../ghost


# Copy docker-compose &amp; application configuration
echo &quot;Backing docker-compose &amp; application configuration...&quot;
cp ../docker-compose.yml $BACKUP_DIR/
cp ../.env $BACKUP_DIR/env

# Backup data to  Storj bucket
echo &quot;Backing data to Storj bucket&quot;
restic --password-file=$RESTIC_PASSWORD_FILE --repo $RESTIC_BACKUP_REPO backup $BACKUP_DIR
 
# Clean up temporary forder
rm -rvf $BACKUP_DIR

echo &quot;Backup completed&quot;</code></pre><p><strong>7. &#xA0;Verify backup status</strong></p><ul><li></li></ul><pre><code>restic --repo $RESTIC_BACKUP_REPO snapshots
enter password for repository:
repository a5cf4e77 opened successfully, password is correct
ID        Time                 Host                   Tags        Paths
----------------------------------------------------------------------------------------------------
cb5c1de7  2022-12-13 08:48:34  4aqz.l.vinguyen.blog              /tmp/backup/blog-backup-2022-12-13
----------------------------------------------------------------------------------------------------
1 snapshots</code></pre><ul><li> Your can login into the Storj Dashboard and login into the bucket with the passphase created in Step 1 to view the file uploaded to Storj Bucket</li></ul><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-15-at-23.14.37@2x.png" class="kg-image" alt="Blog development series - 
Backup Ghost Blog with Storj" loading="lazy" width="2000" height="465" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/CleanShot-2022-12-15-at-23.14.37@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/CleanShot-2022-12-15-at-23.14.37@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/12/CleanShot-2022-12-15-at-23.14.37@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/12/CleanShot-2022-12-15-at-23.14.37@2x.png 2400w" sizes="(min-width: 720px) 720px"></figure><h3 id="step-5-setup-schedule-for-automation-backup">Step 5: Setup Schedule for automation Backup</h3><p>Input new rule in crontab to schedule run the backup script.</p><pre><code class="language-cron">5 1 * * * &lt;path/to/backup.sh/file 2&gt;&amp;1</code></pre><h3 id="step-6-prepare-recovery-plan-rehearsal-for-restoration">Step 6. Prepare recovery Plan &amp; Rehearsal for restoration</h3><p>In-case that we need to restore from backup, follow <strong>Step 2</strong> and <strong>Step 3</strong> to install rclone, restic, then config the rclone with S3</p><pre><code>[storj]
type = s3
provider = Other
env_auth = false
access_key_id = &lt;s3-credential-access-key-created-in-step-1&gt;
secret_access_key = &lt;s3-credential-secret-access-key-created-in-step-1&gt;
endpoint = https://gateway.storjshare.io
acl = private
chunk_size = 64M</code></pre><p>then run the restore.sh script</p><p><strong>Restore script</strong></p><pre><code>#!/bin/bash
set -e

echo &quot;#########################################################################&quot;
echo &quot;# RESTORE GHOST BLOG - `date +%A` - `date +%Y-%m-%d_%Hh%Mm%Ss`          #&quot;
echo &quot;#########################################################################&quot;

read -p &quot;Restore directory ( default: ./restore): &quot; INPUT_RESTORE_DIRECTORY
read -p &quot;Restic repository name ( rclone:&lt;S3-bucket-compatibility&gt;:&lt;directory&gt;): &quot; INPUT_RESTIC_BACKUP_REPO

if [[ -z &quot;$INPUT_RESTIC_BACKUP_REPO&quot; ]]; then
   printf &apos;%s\n&apos; &quot;Restic repository name is required&quot;
   exit 1
fi

RESTORE_DIRECTORY=${INPUT_RESTORE_DIRECTORY:-&quot;$PWD/restore&quot;}
RESTIC_BACKUP_REPO=$INPUT_RESTIC_BACKUP_REPO

echo &quot;Thanks for input, Restoring the latest backup from $RESTIC_BACKUP_REPO into $RESTORE_DIRECTORY ...&quot;
restic --repo $RESTIC_BACKUP_REPO restore latest --target $RESTORE_DIRECTORY

echo &quot;Re-create running environment&quot;
mv -f $RESTORE_DIRECTORY/tmp/backup/blog-backup-*/* $RESTORE_DIRECTORY
mv $RESTORE_DIRECTORY/env $RESTORE_DIRECTORY/.env
tar -xvf ghost-content.tar.gz .
cd $RESTORE_DIRECTORY
docker-compose up -d
sleep 20 # Waiting for application boot
. .env
cat blog-db.sql.sql | docker exec -i blog_database /usr/bin/mysql -u $database__connection__user --password=$database__connection__password $database__connection__database

echo &quot;Restore completed, please check your blog up and run at: http://localhost:$PUBLIC_PORT&quot;

</code></pre><h3 id="conclusion">Conclusion</h3><ul><li>With this approach, your blog data is safe and recoveriable.</li><li>Three things need to save at the safe place to make sure that you restore the data</li><li><strong>1) Storj S3 Credential</strong></li><li><strong>2) Storj S3 &#xA0;Passphase</strong></li><li><strong>3) &#xA0;Restic Repo Password</strong></li></ul><p>On the next post, I&apos;ll do some improvement to help us monitor schedule ( crontab) and a backup policy to help us maintain the versioning of backup better</p><p></p>]]></content:encoded></item><item><title><![CDATA[Crypto mining - Đào coin - nên hay không và điểm thú vị là gì? góc nhìn khác ngoài lợi nhuận - phần 1?]]></title><description><![CDATA[<p>Trong b&#xE0;i vi&#x1EBF;t n&#xE0;y m&#xEC;nh chia s&#x1EBB; m&#x1ED9;t s&#x1ED1; g&#xF3;c nh&#xEC;n, c&#xE1;ch hi&#x1EC3;u c&#x1EE7;a m&#xEC;nh v&#x1EC1; ng&#xE0;nh crypto mining &amp; &#xA0;c&#xE1;</p>]]></description><link>https://vinguyen.blog/crypto-mining-dao-coin-nen-hay-khong-va-diem-thu-vi-la-gi-goc-nhin-khac-ngoai-loi-nhuan-phan-1/</link><guid isPermaLink="false">637507990f5f3e0001df8c82</guid><category><![CDATA[Sharing]]></category><category><![CDATA[crypto]]></category><category><![CDATA[crypto-mining]]></category><category><![CDATA[miner]]></category><category><![CDATA[vi]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Sun, 11 Dec 2022 17:32:49 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-12-at-00.32.12@2x.png" medium="image"/><content:encoded><![CDATA[<img src="https://vinguyen.blog/content/images/2022/12/CleanShot-2022-12-12-at-00.32.12@2x.png" alt="Crypto mining - &#x110;&#xE0;o coin - n&#xEA;n hay kh&#xF4;ng v&#xE0; &#x111;i&#x1EC3;m th&#xFA; v&#x1ECB; l&#xE0; g&#xEC;? g&#xF3;c nh&#xEC;n kh&#xE1;c ngo&#xE0;i l&#x1EE3;i nhu&#x1EAD;n - ph&#x1EA7;n 1?"><p>Trong b&#xE0;i vi&#x1EBF;t n&#xE0;y m&#xEC;nh chia s&#x1EBB; m&#x1ED9;t s&#x1ED1; g&#xF3;c nh&#xEC;n, c&#xE1;ch hi&#x1EC3;u c&#x1EE7;a m&#xEC;nh v&#x1EC1; ng&#xE0;nh crypto mining &amp; &#xA0;c&#xE1;c g&#xF3;c nh&#xEC;n, th&#xF4;ng tin m&#xEC;nh thu th&#x1EAD;p &#x111;&#x1B0;&#x1EE3;c v&#x1EC1; th&#x1ECB; tr&#x1B0;&#x1EDD;ng n&#xE0;y, m&#xEC;nh s&#x1EBD; vi&#x1EBF;t d&#x1B0;&#x1EDB;i d&#x1EA1;ng Q&amp;A &#x111;&#x1EC3; chia s&#x1EBB; nh&#x1EEF;ng suy ngh&#x129; c&#x1EE7;a m&#xEC;nh.</p><h2 id="context">Context</h2><p>M&#xEC;nh l&#xE0; m&#x1ED9;t ng&#x1B0;&#x1EDD;i c&#xF3; &#x1EA5;n t&#x1B0;&#x1EE3;ng &amp; &#x111;am m&#xEA; v&#x1EDB;i ng&#xE0;nh ph&#x1EA7;n m&#x1EC1;m c&#xF3; t&#x1B0;&#x1A1;ng t&#xE1;c s&#xE2;u v&#x1EDB;i ph&#x1EA7;n c&#x1EE9;ng , n&#xEA;n crypto mining l&#xE0; m&#x1ED9;t ng&#xE0;nh m&#xEC;nh th&#x1EA5;y r&#x1EA5;t th&#xFA; v&#x1ECB;, v&#xEC; b&#x1EA3;n ch&#x1EA5;t c&#x1EE7;a n&#xF3; l&#xE0; t&#x1EAD;n d&#x1EE5;ng c&#xE1;c kh&#x1EA3; n&#x103;ng c&#x1EE7;a ph&#x1EA7;n m&#x1EC1;m &#x111;&#x1EC3; t&#x1ED1;i &#x1B0;u h&#xF3;a n&#x103;ng l&#x1EF1;c c&#x1EE7;a ph&#x1EA7;n c&#x1EE9;ng, &#xA0;ho&#x1EB7;c level cao h&#x1A1;n l&#xE0; custom ph&#x1EA7;n c&#x1EE9;ng &#x111;&#x1EC3; gia t&#x103;ng n&#x103;ng l&#x1EF1;c c&#x1EA1;nh tranh nh&#x1EB1;m thu v&#x1EC1; l&#x1EE3;i nhu&#x1EAD;n cao h&#x1A1;n cho m&#xEC;nh.</p><p>M&#xEC;nh tham gia v&#xE0;o th&#x1ECB; tr&#x1B0;&#x1EDD;ng mining kh&#xE1; tr&#x1EC5;, cu&#x1ED1;i 2016 &#x111;&#x1EBF;n &#x111;&#x1EA7;u 2018 th&#xEC; r&#xFA;t h&#x1EB3;n, ch&#x1EC9; c&#xF2;n theo d&#xF5;i &#xA0;th&#x1ECB; tr&#x1B0;&#x1EDD;ng cho vui, l&#xFD; do kh&#xF4;ng mine n&#x1EEF;a c&#x169;ng d&#xE0;i, m&#xEC;nh s&#x1EBD; k&#x1EC3; sau, c&#xF3; th&#x1EC3; g&#xF3;c nh&#xEC;n c&#x1EE7;a m&#xEC;nh c&#xF3; th&#x1EC3; &#x111;&#xE3; ph&#x1EA7;n l&#x1EDB;n outdated so v&#x1EDB;i t&#xEC;nh h&#xEC;nh chung hi&#x1EC7;n nay (2022), kh&#xF4;ng d&#xE0;i d&#xF2;ng n&#x1EEF;a, v&#xE0;o b&#xE0;i th&#xF4;i, c&#xE1;c b&#x1EA1;n c&#xF3; th&#x1EAF;c m&#x1EAF;c ho&#x1EB7;c g&#xF3;p &#xFD; th&#xEC; contact m&#xEC;nh nh&#xE9;:</p><h2 id="qa">Q&amp;A</h2><p><strong>Question 1:</strong> &#x110;&#xE0;o coin c&#xF3; mang l&#x1EA1;i l&#x1EE3;i nhu&#x1EAD;n kh&#xF4;ng?</p><p><strong>Answer 1</strong>:<strong> </strong>C&#xF3;, nhi&#x1EC1;u hay &#xED;t th&#xEC; t&#xF9;y k&#x129; n&#x103;ng v&#xE0; n&#x103;ng l&#x1EF1;c c&#x1EE7;a t&#x1EEB;ng &#x111;&#x1ED9;i &#x111;&#xE0;o, kh&#x1EA3; n&#x103;ng ch&#x1ED1;t l&#x1EDD;i, ch&#x1ECD;n lo&#x1EA1;i coin c&#x1EA7;n mine, kinh nghi&#x1EC7;m qu&#x1EA3;n l&#xFD;, t&#x1ED1;i &#x1B0;u n&#x103;ng l&#x1EF1;c ph&#x1EA7;n c&#x1EE9;ng, ph&#x1EA7;n m&#x1EC1;m, t&#x1ED1;i &#x1B0;u chi ph&#xED;.</p><p><strong>Question 2</strong>: ETH &#x111;&#xE3; chuy&#x1EC3;n sang PoS v&#xE0; PoW th&#xEC; lu&#xF4;n b&#x1ECB; th&#x1EBF; gi&#x1EDB;i l&#xEA;n &#xE1;n v&#xEC; s&#x1EED; d&#x1EE5;ng qu&#xE1; nhi&#x1EC1;u n&#x103;ng l&#x1B0;&#x1EE3;ng, v&#x1EAD;y trong t&#x1B0;&#x1A1;ng lai ng&#xE0;nh n&#xE0;y c&#xF2;n ph&#xE1;t tri&#x1EC3;n kh&#xF4;ng?</p><p><strong>Answer 2: </strong></p><ul><li>Theo m&#xEC;nh th&#xEC; v&#x1EAB;n s&#x1EBD; ph&#xE1;t tri&#x1EC3;n, m&#x1EB7;c d&#xF9; PoS &#x111;ang l&#xE0; xu h&#x1B0;&#x1EDB;ng hi&#x1EC7;n nay, nh&#x1B0;ng PoW v&#x1EAB;n s&#x1EBD; t&#x1ED3;n t&#x1EA1;i theo th&#x1EDD;i gian, c&#xF3; th&#x1EC3; s&#x1EBD; kh&#xF4;ng ph&#xE1;t tri&#x1EC3;n v&#xE0; dominate th&#x1ECB; tr&#x1B0;&#x1EDD;ng n&#x1EEF;a, &#xA0;nh&#x1B0;ng ngh&#xE0;nh n&#xE0;y v&#x1EAB;n r&#x1EA5;t ph&#xE1;t tri&#x1EC3;n v&#xE0; nhi&#x1EC1;u c&#x1ED9;ng &#x111;&#x1ED3;ng h&#x1ED7; tr&#x1EE3;, &#x111;&#x1EE9;ng sau nh&#x1EEF;ng &#x111;&#x1ED3;ng coin l&#x1EDB;n tr&#xEA;n th&#x1ECB; tr&#x1B0;&#x1EDD;ng l&#xE0; nh&#x1EEF;ng company l&#x1EDB;n, c&#xF3; th&#x1EC3; l&#xE0;m maker &#x111;&#x1EC3; ki&#x1EBF;n t&#x1EA1;o th&#x1ECB; tr&#x1B0;&#x1EDD;ng. m&#xEC;nh l&#x1EA5;y v&#xED; d&#x1EE5; nh&#x1B0; Bitman/Antpool - M&#x1ED9;t &#xF4;ng l&#x1EDB;n trong ng&#xE0;nh s&#x1EA3;n xu&#x1EA5;t m&#xE1;y &#x111;&#xE0;o coin, sau khi ETH chuy&#x1EC3;n sang PoS th&#xE0;nh c&#xF4;ng th&#xEC; &#x111;&#xE3; &#x111;&#x1EA7;u t&#x1B0; r&#x1EA5;t nhi&#x1EC1;u v&#xE0;o <a href="https://finbold.com/antpool-invested-10m-to-support-ethereum-classic-developers-ceo-says/">ETC</a> &#x111;&#x1EC3; ki&#x1EBF;n t&#x1EA1;o th&#x1ECB; tr&#x1B0;&#x1EDD;ng m&#x1EDB;i cho c&#xE1;c m&#xE1;y &#x111;&#xE0;o c&#x1EE7;a m&#xEC;nh, ho&#x1EB7;c nh&#x1B0; BTC v&#x1EAB;n s&#x1EBD; ki&#xEA;n tr&#xEC; &#x111;i v&#x1EDB;i PoW, v&#xE0; m&#xEC;nh ngh&#x129; c&#x169;ng ch&#x1EB3;ng c&#xF3; l&#xFD; do g&#xEC; &#x111;&#x1EC3; BTC &#x111;&#x1ED5;i sang PoS c&#x1EA3;. :D. </li><li>G&#xF3;c nh&#xEC;n kh&#xE1;c, PoW m&#xEC;nh th&#x1EA5;y l&#xE0; m&#x1ED9;t th&#x1ECB; tr&#x1B0;&#x1EDD;ng &#x111;&#xE3; &#x111;&#x1B0;&#x1EE3;c ch&#x1EE9;ng minh l&#xE0; c&#xF3; l&#x1EE3;i nhu&#x1EAD;n v&#xE0; t&#x103;ng tr&#x1B0;&#x1EDF;ng &#x111;&#x1B0;&#x1EE3;c, n&#xEA;n mi&#x1EC5;n l&#xE0; th&#x1ECB; tr&#x1B0;&#x1EDD;ng n&#xE0;y c&#xF2;n c&#xF3; kh&#x1EA3; n&#x103;ng sinh l&#x1EDD;i, th&#xEC; v&#x1EAB;n s&#x1EBD; c&#xF2;n ng&#x1B0;&#x1EDD;i tham gia ki&#x1EBF;n t&#x1EA1;o v&#xE0; ki&#x1EBF;m l&#x1EDD;i th&#x1EEB; th&#x1ECB; tr&#x1B0;&#x1EDD;ng n&#xE0;y</li></ul><p><strong>Question 3: C&#xE1;c b&#xEA;n n&#xE0;o tham gia v&#xE0;o th&#x1ECB; tr&#x1B0;&#x1EDD;ng mining?</strong></p><p><strong>Answer 3: m&#xEC;nh t&#x1EA1;m chia th&#xE0;nh 1 s&#x1ED1; b&#xEA;n theo c&#xE1;ch m&#xEC;nh hi&#x1EC3;u</strong></p><ul><li>PoW Coin Founder: m&#xEC;nh t&#x1EA1;m g&#x1ECD;i nh&#x1B0; v&#x1EAD;y, h&#x1ECD; l&#xE0; nh&#x1EEF;ng ng&#x1B0;&#x1EDD;i mu&#x1ED1;n ph&#xE1;t h&#xE0;nh &#x111;&#x1ED3;ng coin m&#xE0; c&#xF3; th&#x1EC3; mine &#x111;c b&#x1EB1;ng c&#xE1;c gi&#x1EA3;i thu&#x1EAD;t PoW &#x111;&#x1EC3; ph&#x1EE5;c v&#x1EE5; cho m&#x1EE5;c &#x111;&#xED;ch c&#x1EE7;a h&#x1ECD;, c&#xF3; th&#x1EC3; l&#xE0; ph&#xE1;t tri&#x1EC3;n product, ho&#x1EB7;c cho vui, ...., nh&#x1B0;ng miner th&#xEC; c&#x1EA7;n coin, v&#xE0; lu&#xF4;n c&#xF3; ng&#x1B0;&#x1EDD;i t&#x1EA1;o ra c&#xE1;c &#x111;&#x1ED3;ng coin cho h&#x1ECD;. </li><li>Anh em miner ( trong &#x111;&#xF3; c&#xF3; miner c&#xF2; con nh&#x1B0; m&#xEC;nh): nh&#xEC;n ra &#x111;&#x1B0;&#x1EE3;c kh&#x1EA3; n&#x103;ng ki&#x1EBF;m l&#x1EE3;i nhu&#x1EAD;n v&#xE0; ngh&#x129; ra c&#xF3; th&#x1EC3; ki&#x1EBF;m s&#x1ED1;ng &#x111;&#x1B0;&#x1EE3;c t&#x1EEB; ng&#xE0;nh n&#xE0;y, nhi&#x1EC7;t t&#xEC;nh tham gia v&#xE0;o th&#x1ECB; tr&#x1B0;&#x1EDD;ng ( v&#xE0; d&#x1EE9;t &#xE1;o &#x111;i c&#x169;ng r&#x1EA5;t nhi&#x1EC1;u sau m&#x1ED7;i l&#x1EA7;n downtrend), l&#x1EDB;p n&#xE0;y ng&#x1B0;&#x1EDD;i n&#xE0;y l&#xE0; &#x111;&#xF4;ng nh&#x1EA5;t v&#xE0; &#x1EDF; m&#x1ECD;i n&#x1A1;i, &#x111;&#xF4;ng nh&#x1B0; qu&#xE2;n nguy&#xEA;n v&#xE0; c&#x169;ng b&#x1ECF; x&#xE1;c nhi&#x1EC1;u nh&#x1B0; qu&#xE2;n nguy&#xEA;n sau khi &#x111;&#xE1;nh tr&#x1EAD;n.</li><li>Nh&#xE0; s&#x1EA3;n xu&#x1EA5;t ph&#x1EA7;n c&#x1EE9;ng: <a href="https://www.bitmain.com/">Bitman</a>, ADM, Nvidia, Innosilicon, ...: c&#xE1;c b&#xEA;n n&#xE0;y ki&#x1EBF;m &#x111;&#x1B0;&#x1EE3;c c&#x1EF1;c k&#xEC; nhi&#x1EC1;u l&#x1EE3;i nhu&#x1EAD;n b&#x1EB1;ng vi&#x1EC7;c b&#xE1;n ph&#x1EA7;n c&#x1EE9;ng cho miner, v&#xE0; trong m&#xF9;a uptrend, h&#x1EA7;u h&#x1EBF;t ph&#x1EA7;n c&#x1EE9;ng b&#xE1;n ra ti&#xEA;u th&#x1EE5; trong 1 n&#x1ED1;t nh&#x1EA1;c, th&#x1EAD;m ch&#xED; c&#xF3; nh&#x1EEF;ng c&#xF4;ng ty mining kh&#xF4;ng mu&#x1ED1;n l&#xE3;ng ph&#xED; th&#x1EDD;i gian &#x111;&#x1EE3;i ship qu&#xE1; l&#xE2;u m&#xE0; thu&#xEA; h&#x1EB5;n h&#xE0;ng kh&#xF4;ng &#x111;&#x1EC3; shipping cho nhanh.</li><li>Nh&#xE0; s&#x1EA3;n xu&#x1EA5;t ph&#x1EA7;n m&#x1EC1;m: b&#x1EA1;n c&#xF3; ph&#x1EA7;n c&#x1EE9;ng ( CPU, GPU, ASIC), v&#xE0; c&#xF3; 1 &#x111;&#x1ED3;ng coin c&#xF3; th&#x1EC3; khai th&#xE1;c &#x111;&#x1B0;&#x1EE3;c b&#x1EB1;ng ph&#x1EA7;n c&#x1EE9;ng b&#x1EA1;n &#x111;ang c&#xF3;, v&#x1EAD;y th&#xEC; s&#x1EBD; c&#xF3; nh&#x1EEF;ng b&#xEA;n s&#x1EBD; chuy&#xEA;n vi&#x1EBF;t ph&#x1EA7;n m&#x1EC1;m ( c&#xF3; th&#x1EC3; c&#x169;ng l&#xE0; nh&#x1EEF;ng nh&#xE0; ph&#xE1;t tri&#x1EC3;n ph&#x1EA7;n c&#x1EE9;ng, ho&#x1EB7;c pool operator, ho&#x1EB7;c coin founder, ho&#x1EB7;c nh&#x1EEF;ng b&#xEA;n th&#x1EE9; ba chuy&#xEA;n t&#x1ED1;i &#x1B0;u ph&#x1EA7;n m&#x1EC1;m cho ph&#x1EA7;n c&#x1EE9;ng c&#xF3; s&#x1EB5;n ( v&#xED; d&#x1EE5; <a href="https://braiins.com/">Braiin.com</a>)) &#xA0;vi&#x1EBF;t ra nh&#x1EEF;ng ph&#x1EA7;n m&#x1EC1;m chuy&#xEA;n d&#x1EE5;ng &#x111;&#x1EC3; khai th&#xE1;c t&#x1ED1;i &#x111;a s&#x1EE9;c m&#x1EA1;nh c&#x1EE7;a ph&#x1EA7;n c&#x1EE9;ng &#x111;&#x1EC3; khai th&#xE1;c &#x111;&#x1ED3;ng coin, v&#xE0; nh&#x1EAD;n v&#x1EC1; commission t&#x1EEB; vi&#x1EC7;c n&#xE0;y.</li><li>Pool Operator: Miner hi&#x1EC7;n t&#x1EA1;i h&#x1EA7;u h&#x1EBF;t kh&#xF4;ng th&#x1EC3; s&#x1ED1;ng v&#xE0; c&#x1EA1;nh tranh &#x111;&#x1B0;&#x1EE3;c b&#x1EB1;ng c&#xE1;ch mine solo, tr&#x1EEB; khi l&#xE0; ch&#x1EE7; c&#x1EE7;a nh&#x1EEF;ng farm l&#x1EDB;n, v&#xE0; c&#xE1;c miner h&#x1EA7;u h&#x1EBF;t &#x111;&#x1EC1;u s&#x1EBD; c&#xF3; nhu c&#x1EA7;u h&#xF9;n h&#x1EA1;p l&#xE0;m &#x103;n chung, t&#x1EEB; &#x111;&#xF3; kh&#xE1;i ni&#x1EC7;m pool ra &#x111;&#x1EDD;i, v&#xE0; c&#xF3; product ra &#x111;&#x1EDD;i th&#xEC; c&#x1EA7;n c&#xF3; b&#xEA;n v&#x1EAD;n h&#xE0;nh v&#xE0; l&#x1EA5;y ph&#xED; hoa h&#x1ED3;ng, c&#xE1;c b&#xEA;n n&#xE0;y ch&#x1EC9; &#x111;&#x1EE9;ng gi&#x1EEF;a, t&#x1ED5; ch&#x1EE9;c cho c&#xE1;c miner c&#xF3; th&#x1EC3; c&#xF9;ng nhau mine 1 lo&#x1EA1;i coin, v&#xE0; chia l&#x1EE3;i nhu&#x1EAD;n, d&#x1EC5; l&#xE0;m, d&#x1EC5; ch&#x1A1;i v&#xE0; &#x103;n th&#x1EAD;t, &#xED;t r&#x1EE7;i ro h&#x1A1;n so v&#x1EDB;i &#x111;&#x1EA7;u t&#x1B0; ph&#x1EA7;n c&#x1EE9;ng tr&#x1EF1;c ti&#x1EBF;p, n&#xEA;n s&#x1ED1; l&#x1B0;&#x1EE3;ng pool c&#x169;ng c&#x1EF1;c k&#xEC; nhi&#x1EC1;u. </li><li>Th&#x1B0;&#x1A1;ng gia (Trader): &#x111;&#x1EC3; k&#x1EBF;t n&#x1ED1;i nhu c&#x1EA7;u gi&#x1EEF;a c&#xE1;c b&#xEA;n s&#x1EA3;n xu&#x1EA5;t, b&#xE1;n ph&#x1EA7;n c&#x1EE9;ng v&#x1EDB;i anh em miner, th&#xEC; anh em th&#x1B0;&#x1A1;ng gia l&#xE0; m&#x1ED9;t ph&#x1EA7;n kh&#xF4;ng th&#x1EC3; thi&#x1EBF;u, nh&#x1EAD;p h&#xE0;ng, th&#xF4;ng quan, setup, h&#x1ED7; tr&#x1EE3; k&#x129; thu&#x1EAD;t, b&#x1EA3;o d&#x1B0;&#x1EE1;ng b&#x1EA3;o tr&#xEC;, .... n&#xF3;i chung l&#xE0; vi&#x1EC7;c g&#xEC; kh&#xF3; th&#xEC; c&#xF3; m&#x1EA5;y anh em th&#x1B0;&#x1A1;ng gia h&#x1ED7; tr&#x1EE3; nhi&#x1EC7;t t&#xEC;nh.</li><li>X&#x1B0;&#x1EDF;ng &#x111;&#xE0;o coin (farm): kh&#xF4;ng ph&#x1EA3;i ai c&#x169;ng c&#xF3; n&#x103;ng l&#x1EF1;c t&#x1EF1; build cho m&#xEC;nh m&#x1ED9;t tr&#x1EA1;i &#x111;&#xE0;o coin v&#xE0; v&#x1EAD;n h&#xE0;nh &#x111;&#x1B0;&#x1EE3;c, ho&#x1EB7;c kh&#xF4;ng th&#x1EC3; t&#xEC;m &#x111;&#x1B0;&#x1EE3;c chi ph&#xED; mining h&#x1EE3;p l&#xFD; ( ch&#x1EE7; y&#x1EBF;u l&#xE0; chi ph&#xED; &#x111;i&#x1EC7;n). n&#xEA;n m&#x1ED9;t nhu c&#x1EA7;u l&#x1EDB;n ti&#x1EBF;p theo l&#xE0; &#x111;&#x1EA7;u t&#x1B0; &amp; mang &#x111;i g&#x1EDF;i &#x1EDF; farm &#x111;&#x1EC3; host h&#x1ED9; ( tr&#x1ECD;n g&#xF3;i c&#xF3;, ch&#x1EC9; host th&#xF4;i t&#x1EF1; v&#x1EAD;n h&#xE0;nh c&#xF3;, quy m&#xF4; l&#x1EDB;n nh&#x1ECF;, trong ngo&#xE0;i n&#x1B0;&#x1EDB;c c&#xF3; &#x111;&#x1EE7;, ....) n&#xEA;n h&#xEC;nh th&#xE0;nh m&#x1ED9;t th&#x1ECB; tr&#x1B0;&#x1EDD;ng th&#x1EE9; c&#x1EA5;p &#x1EDF; &#x111;&#xE2;y &#x111;&#x1EC3; cung c&#x1EA5;p gi&#x1EA3;i ph&#xE1;p cho anh em &#x111;&#xE0;o coin.</li><li>Exchange Market ( S&#xE0;n giao d&#x1ECB;ch): anh em mine xong th&#xEC; lu&#xF4;n c&#xF3; nhu c&#x1EA7;u thanh kho&#x1EA3;n, v&#xEC; v&#x1EAD;y mang l&#xEA;n 1 s&#xE0;n giao d&#x1ECB;ch n&#xE0;o &#x111;&#xF3; b&#xE1;n, l&#xE0; nhu c&#x1EA7;u t&#x1EA5;t y&#x1EBF;u, v&#xE0; &#x1EDF; c&#xE1;c s&#xE0;n giao d&#x1ECB;ch v&#xE0; c&#xE1;c &#x111;&#x1ED3;ng coin l&#x1EDB;n, vi&#x1EC7;c tracking v&#xED; c&#x1EE7;a c&#xE1;c miner xem b&#xE1;n hay &#x111;ang hold, &#x111;&#x1EC3; d&#x1EF1; &#x111;o&#xE1;n trend v&#xE0; t&#xE2;m l&#xFD; th&#x1ECB; tr&#x1B0;&#x1EDD;ng l&#xE0; m&#x1ED9;t vi&#x1EC7;c th&#x1B0;&#x1EDD;ng th&#x1EA5;y tr&#xEA;n th&#x1ECB; tr&#x1B0;&#x1EDD;ng crypto.</li><li>Crypto product founders: h&#x1EA7;u h&#x1EBF;t c&#xE1;c founder product &#x111;&#x1EC1;u mu&#x1ED1;n build cho m&#xEC;nh m&#x1ED9;t c&#x1ED9;ng &#x111;&#x1ED3;ng &#x111;&#x1EC3; ph&#xE1;t tri&#x1EC3;n s&#x1EA3;n ph&#x1EA9;m, n&#xEA;n c&#x169;ng c&#xF3; r&#x1EA5;t nhi&#x1EC1;u founder g&#x1EAF;n b&#xF3; v&#x1EDB;i PoW &#x111;&#x1EC3; t&#x1EAD;n d&#x1EE5;ng &#x111;i&#x1EC3;m m&#x1EA1;nh c&#x1EE7;a h&#xEC;nh th&#x1EE9;c n&#xE0;y v&#xE0; k&#x1EBF;t n&#x1ED1;i v&#x1EDB;i c&#x1ED9;ng &#x111;&#x1ED3;ng anh em miner.</li><li>Hash Exchange Market(v&#xED; d&#x1EE5; <a href="https://www.nicehash.com/?refby=7c0baa85-fd58-4bab-95dd-cce4a5f66499">Nicehash</a>): &#x111;&#xE2;y l&#xE0; 1 th&#x1ECB; tr&#x1B0;&#x1EDD;ng ph&#xE1;i sinh th&#x1EE9; c&#x1EA5;p, c&#xE1;c m&#xE1;y &#x111;&#xE0;o ph&#xE1;t sinh n&#x103;ng l&#x1EF1;c hash theo t&#x1EEB;ng thu&#x1EAD;t to&#xE1;n c&#x1EE7;a t&#x1EEB;ng lo&#x1EA1;i coin &#x111;&#x1EC3; c&#xF3; th&#x1EC3; mining, v&#x1EAD;y n&#x1EBF;u b&#x1EA1;n kh&#xF4;ng c&#xF3; m&#xE1;y &#x111;&#xE0;o m&#xE0; v&#x1EAB;n mu&#x1ED1;n &#x111;&#xE0;o coin th&#xEC; sao? v&#x1EAD;y l&#xE0; c&#xF3; 1 th&#x1ECB; tr&#x1B0;&#x1EDD;ng h&#xEC;nh th&#xE0;nh v&#xEC; c&#xF3; ph&#xE1;t sinh nhu c&#x1EA7;u, c&#xE1;c ch&#x1EE3; trao &#x111;&#x1ED5;i hash v&#x1EAD;y l&#xE0; ra &#x111;&#x1EDD;i &#x111;&#x1EC3; &#x111;&#xE1;p &#x1EE9;ng nhu c&#x1EA7;u n&#xE0;y, t&#xF4;i mu&#x1ED1;n &#x111;&#xE0;o coin, nh&#x1B0;ng kh&#xF4;ng c&#xF3; m&#xE1;y, anh c&#xF3; m&#xE1;y nh&#x1B0;ng kh&#xF4;ng mu&#x1ED1;n nh&#x1EE9;c &#x111;&#x1EA7;u &#x111;&#x1EC3; t&#xEC;m coin, v&#x1EAD;y b&#xE1;n hash cho t&#xF4;i &#x111;i, t&#xF4;i s&#x1EBD; mua v&#xE0; t&#x1EF1; ch&#x1ECD;n coin &#x111;&#x1EC3; &#x111;&#xE0;o, th&#xFA; v&#x1ECB; &#x111;&#xFA;ng kh&#xF4;ng? :D </li></ul><p><strong>Question 4: Ki&#x1EC3;m tra l&#x1EE3;i nhu&#x1EAD;n c&#x1EE7;a c&#xE1;c m&#xE1;y &#x111;&#xE0;o coin &#x1EDF; &#x111;&#xE2;u?</strong></p><p><strong>Anwser 4: </strong></p><ul><li><a href="https://whattomine.com/">Whattomine</a>: &#xA0;trang web ph&#x1ED5; bi&#x1EBF;n nh&#x1EA5;t, v&#xE0; c&#xF3; th&#x1EC3; l&#xE0; t&#x1ED3;n t&#x1EA1;i l&#xE2;u nh&#x1EA5;t t&#x1EEB; tr&#x1B0;&#x1EDB;c t&#x1EDB;i gi&#x1EDD;</li><li><a href="https://www.asicminervalue.com/">Asicminervalue</a>: chuy&#xEA;n th&#x1ED1;ng k&#xEA; l&#x1EE3;i nhu&#x1EAD;n theo c&#x1EE7;a c&#xE1;c d&#xF2;ng m&#xE1;y ASIC, &#xA0;nh&#x1B0;ng kh&#xF4;ng li&#x1EC7;t k&#xEA; chi ti&#x1EBF;t l&#x1EE3;i nhu&#x1EAD;n theo coin</li><li><a href="https://minerstat.com/">Minerstat</a>: Data nhi&#x1EC1;u, giao di&#x1EC7;n &#x111;&#x1EB9;p, release t&#x1EEB; t&#x1EA7;m 2018 2019, th&#xF4;ng tin chi ti&#x1EBF;t &#x111;&#x1EA7;y &#x111;&#x1EE7;</li><li><a href="https://www.nicehash.com/profitability-calculator">Nicehash</a>: Ch&#x1EE3; trao &#x111;&#x1ED5;i hash l&#x1EDB;n nh&#x1EA5;t hi&#x1EC7;n t&#x1EA1;i v&#xE0; hi&#x1EC3;n th&#x1ECB; profit c&#x1EE7;a c&#xE1;c d&#xF2;ng ph&#x1EA7;n c&#x1EE9;ng khi cho thu&#xEA; hash tr&#xEA;n ch&#x1EE3;, nh&#x1B0;ng c&#x169;ng c&#xF3; th&#x1EC3; g&#x1ECD;i l&#xE0; th&#x1B0;&#x1EDB;c &#x111;o ti&#xEA;u chu&#x1EA9;n c&#x1EE7;a th&#x1ECB; tr&#x1B0;&#x1EDD;ng mining cho c&#xE1;c d&#xF2;ng ph&#x1EA7;n c&#x1EE9;ng.</li></ul><p><strong>Question 5: C&#xF3; nh&#x1EEF;ng lo&#x1EA1;i ph&#x1EA7;n c&#x1EE9;ng n&#xE0;o c&#xF3; th&#x1EC3; &#x111;&#xE0;o coin &#x111;&#x1B0;&#x1EE3;c?</strong></p><p><strong>Answer:</strong></p><ul><li><strong>CPU</strong>: d&#xF2;ng ph&#x1EA7;n c&#x1EE9;ng &#x111;&#x1EA7;u ti&#xEA;n &#x111;&#x1EC3; &#x111;&#xE0;o BTC (2009) v&#xE0; t&#x1EDB;i nay v&#x1EAB;n c&#xF2;n ph&#xE1;t tri&#x1EC3;n, m&#x1ED9;t s&#x1ED1; d&#xF2;ng coin ch&#x1EC9; h&#x1ED7; tr&#x1EE3; &#x111;&#xE0;o b&#x1EB1;ng CPU v&#xE0; ph&#xE1;t tri&#x1EC3;n c&#xE1;c thu&#x1EAD;t to&#xE1;n &#x111;&#x1EC3; anti-GPU &amp; ASIC, d&#xF2;ng n&#xE0;y c&#xF2;n &#x111;&#x1EB7;c bi&#x1EC7;t &#x111;&#x1B0;&#x1EE3;c &#x1B0;a chu&#x1ED9;ng b&#x1EDF;i c&#xE1;c anh em hacker, m&#xE3; &#x111;&#x1ED9;c nh&#xFA;ng v&#xE0;o web, v&#xE0;o m&#xE1;y t&#xED;nh c&#x1EE7;a user, khai th&#xE1;c l&#xE9;n s&#x1EE9;c m&#x1EA1;nh CPU &#x111;&#x1EC3; chu&#x1ED9;c l&#x1EE3;i cho m&#xEC;nh, tuy nhi&#xEA;n &#x111;&#xE2;y v&#x1EAB;n l&#xE0; 1 d&#xF2;ng ph&#x1EA7;n c&#x1EE9;ng &#x111;&#x1B0;&#x1EE3;c &#x1B0;u chu&#x1ED9;ng &#x111;&#x1EC3; ph&#xE1;t h&#xE0;nh d&#xF2;ng coin m&#x1EDB;i. </li><li><strong>GPU</strong>: sau khi &#x111;&#xE0;o coin b&#x1EB1;ng CPU th&#xEC; m&#x1ED9;t miner tr&#xEA;n th&#x1EBF; gi&#x1EDB;i b&#x1EAF;t &#x111;&#x1EA7;u &#x111;&#x1EC3; &#xFD; t&#x1EDB;i GPU v&#xEC; s&#x1ED1; nh&#xE2;n x&#x1EED; l&#xFD; nhi&#x1EC1;u h&#x1A1;n v&#xE0; c&#xF3; th&#x1EC3; ch&#x1EA1;y song song t&#x1ED1;t h&#x1A1;n CPU, v&#xEC; v&#x1EAD;y ph&#x1EA7;n m&#x1EC1;m &#x111;&#xE0;o coin s&#x1EED; d&#x1EE5;ng GPU b&#x1EAF;t &#x111;&#x1EA7;u ph&#xE1;t tri&#x1EC3;n v&#xE0; coin n&#xE0;o c&#xF3; th&#x1EC3; &#x111;&#xE0;o &#x111;&#x1B0;&#x1EE3;c b&#x1EB1;ng GPU th&#xEC; s&#x1EBD; mang l&#x1EA1;i l&#x1EE3;i nhu&#x1EAD;n g&#x1EA5;p nhi&#x1EC1;u l&#x1EA7;n so v&#x1EDB;i CPU n&#x1EBF;u s&#x1EED; d&#x1EE5;ng 1 thu&#x1EAD;t to&#xE1;n, c&#xE1;c d&#xF2;ng coin sau n&#xE0;y khi ra m&#x1EAF;t th&#xEC; h&#x1EA7;u h&#x1EBF;t &#x111;&#x1EA7;u t&#x1EAD;p trung support cho GPU. v&#xEC; v&#x1EAD;y m&#x1EDB;i c&#xF3; kh&#xE1;i ni&#x1EC7;m build d&#xE0;n tr&#xE2;u c&#xE0;y coin ( 6 ch&#xE2;n, 8 ch&#xE2;n: 6 card, 8 card &#x111;&#x1ED3; h&#x1ECD;a ,...), d&#xF2;ng n&#xE0;y chi&#x1EBF;m s&#x1ED1; l&#x1B0;&#x1EE3;ng &#x111;&#xF4;ng &#x111;&#x1EA3;o, v&#xE0; c&#x169;ng &#x111;ang ch&#x1EBF;t th&#x1EA3;m sau thi ETH hark folk th&#xE0;nh c&#xF4;ng sang PoS, hi&#x1EC7;n t&#x1EA1;i GPU v&#x1EAB;n &#x111;ang &#x111;&#x1EE3;i 1 d&#xF2;ng coin m&#x1EDB;i l&#xEA;n l&#xE3;nh &#x111;&#x1EA1;o v&#xE0; k&#xE9;o l&#x1EA1;i ph&#x1EA7;n mining n&#xE0;y, m&#xEC;nh tin l&#xE0; s&#x1EDB;m th&#xF4;i. </li><li><strong>ASIC: (</strong>application-specific integrated circuit - m&#x1EA1;ch t&#xED;ch h&#x1EE3;p chuy&#xEA;n d&#x1EE5;ng): sau th&#x1EDD;i k&#xEC; c&#x1EE7;a GPU th&#xEC; coin th&#x1EE7; ti&#x1EBF;n l&#xEA;n m&#x1ED9;t t&#x1EA7;m cao m&#x1EDB;i, build c&#xE1;c m&#x1EA1;ch t&#xED;ch h&#x1EE3;p ch&#x1EC9; &#x111;&#x1EC3; x&#x1EED; l&#xFD; m&#x1ED9;t thu&#x1EAD;t to&#xE1;n duy nh&#x1EA5;t c&#x1EE7;a 1 d&#xF2;ng coin h&#x1ED7; tr&#x1EE3;, v&#xED; d&#x1EE5; <strong><em>SHA-256</em></strong> c&#x1EE7;a BTC. t&#x1ED1;c &#x111;&#x1ED9; c&#x1EE7;a d&#xF2;ng n&#xE0;y so v&#x1EDB;i <strong>GPU </strong>th&#xEC; nh&#x1B0; b&#x1EA1;n &#x111;i so s&#xE1;nh Lamborghini ( ASIC) v&#xE0; xe &#x111;&#x1EA1;p (GPU) v&#x1EAD;y. Ch&#x1EC9; c&#x1EA7;n 1 h&#xE3;ng s&#x1EA3;n xu&#x1EA5;t &#x111;&#x1B0;&#x1EE3;c 1 d&#xF2;ng ASIC cho 1 d&#xF2;ng thu&#x1EAD;t to&#xE1;n, th&#xEC; &#x111;&#xE0;o b&#x1EB1;ng GPU xem nh&#x1B0; b&#x1ECF; ( tr&#x1EEB; thu&#x1EAD;t to&#xE1;n c&#x1EE7;a d&#xF2;ng ETH), nh&#x1B0;ng nghi&#x1EC7;t ng&#xE3; h&#x1A1;n l&#xE0; n&#x1EBF;u 1 h&#xE3;ng ph&#x1EA7;n c&#x1EE9;ng kh&#xE1;c ph&#xE1;t h&#xE0;nh 1 ASIC c&#xF9;ng thu&#x1EAD;t to&#xE1;n nh&#x1B0;ng hashrate cao h&#x1A1;n, th&#xEC; kh&#x1EA3; n&#x103;ng &#x111;u &#x111;&#x1EC9;nh ASIC c&#x1EE7;a anh em mua tr&#x1B0;&#x1EDB;c c&#x169;ng cao kh&#xF4;ng k&#xE9;m. C&#xE1;c h&#xE3;ng ph&#x1EA7;n c&#x1EE9;ng mining l&#x1EDB;n nh&#x1B0; Bitman, Innosilicon, Whatsminer ... (tham kh&#x1EA3;o: <a href="https://www.asicminervalue.com/">asicminervalue</a>) &#x111;&#x1EC1;u l&#xE0; chuy&#xEA;n ch&#x1EBF; t&#x1EA1;o v&#xE0; b&#xE1;n c&#xE1;c d&#xF2;ng ASIC n&#xE0;y, nh&#x1B0;&#x1EE3;c &#x111;i&#x1EC3;m l&#xE0; v&#xEC; l&#xE0; m&#x1EA1;ch ASIC n&#xEA;n ch&#x1EC9; l&#xE0;m &#x111;&#xFA;ng &#x111;&#x1B0;&#x1EE3;c 1 thu&#x1EAD;t to&#xE1;n, n&#x1EBF;u coin ch&#x1EE7; &#x111;&#x1EA1;o &#x111;&#x1ED5;i thu&#x1EAD;t to&#xE1;n &amp; c&#x1ED9;ng &#x111;&#x1ED3;ng coin c&#xF2;n l&#x1EA1;i nh&#x1ECF; th&#xEC; m&#xE1;y x&#xE1;c &#x111;&#x1ECB;nh b&#xE1;n s&#x1EAF;t v&#x1EE5;n, ho&#x1EB7;c ngo&#xE0;i &#x111;&#xE0;o coin ra th&#xEC; d&#xF2;ng m&#xE1;y n&#xE0;y kh&#xF4;ng l&#xE0;m &#x111;&#x1B0;&#x1EE3;c g&#xEC; kh&#xE1;c, kh&#xF4;ng nh&#x1B0; GPU ho&#x1EB7;c CPU c&#xF2;n thanh l&#xFD; v&#x1EC1; ch&#x1A1;i game &#x111;&#x1B0;&#x1EE3;c, ch&#x1EAF;c ch&#x1EC9; c&#xF2;n mang &#x111;i qu&#x1EA1;t than, s&#x1EA5;y qu&#x1EA7;n &#xE1;o (&#x111;&#xE3; th&#x1EED; v&#xE0; r&#x1EA5;t hi&#x1EC7;u qu&#x1EA3; :D)</li><li><strong>FPGA:</strong> d&#xF2;ng n&#xE0;y th&#xEC; huy&#x1EC1;n tho&#x1EA1;i v&#xE0; &#xED;t ph&#x1ED5; bi&#x1EBF;n h&#x1A1;n v&#xEC; t&#xED;nh xa x&#x1EC9; c&#x1EE7;a ph&#x1EA7;n c&#x1EE9;ng, v&#xEC; n&#xF3; s&#x1EED; d&#x1EE5;ng c&#xE1;c board l&#x1EAD;p tr&#xEC;nh c&#x1ED5;ng lu&#x1EAD;n l&#xFD; (FPGA) &#x111;&#x1EC3; implement c&#xE1;c thu&#x1EAD;t to&#xE1;n, th&#x1B0;&#x1EDD;ng th&#xEC; c&#xE1;c m&#x1EA1;ch n&#xE0;y ch&#x1EC9; d&#xF9;ng trong c&#xE1;c l&#x129;nh v&#x1EF1;c khoa h&#x1ECD;c, qu&#xE2;n s&#x1EF1;, thi&#x1EBF;t k&#x1EBF; chip, ... v&#xEC; tr&#x1B0;&#x1EDB;c khi l&#xE0;m ra 1 con chip c&#x1EE9;ng th&#xEC; c&#x169;ng c&#x1EA7;n c&#xF3; c&#xE1;c con chip &quot;m&#x1EC1;m&quot;, l&#x1EAD;p tr&#xEC;nh &#x111;&#x1B0;&#x1EE3;c, v&#xE0; tr&#xEA;n th&#x1EBF; gi&#x1EDB;i c&#x169;ng ch&#x1EC9; c&#xF3; v&#xE0;i h&#xE3;ng s&#x1EA3;n xu&#x1EA5;t &#x111;&#x1B0;&#x1EE3;c FPGA hi&#x1EC7;u n&#x103;ng cao, s&#x1ED1; l&#x1B0;&#x1EE3;ng c&#x169;ng h&#x1EA1;n ch&#x1EBF; ( h&#x1EA7;u h&#x1EBF;t c&#x1EE7;a US). &#x1B0;u &#x111;i&#x1EC3;m d&#xF2;ng n&#xE0;y l&#xE0; l&#x1EAD;p tr&#xEC;nh &#x111;&#x1B0;&#x1EE3;c thu&#x1EAD;t to&#xE1;n b&#x1EB1;ng m&#x1EA1;ch lu&#x1EAD;n l&#xFD; n&#xEA;n hi&#x1EC7;u n&#x103;ng l&#xFD; thuy&#x1EBF;t g&#x1EA7;n b&#x1EB1;ng ASIC, v&#xE0; l&#x1EAD;p tr&#xEC;nh l&#x1EA1;i &#x111;&#x1B0;&#x1EE3;c &#x111;&#x1EC3; &#x111;&#x1ED5;i thu&#x1EAD;t to&#xE1;n ( gi&#x1ED1;ng th&#x1EBF; m&#x1EA1;nh c&#x1EE7;a GPU), nh&#x1B0;ng vi&#x1EC7;c n&#xE0;y c&#x1EA7;n t&#xED;nh chuy&#xEA;n m&#xF4;n cao, ch&#x1B0;a k&#x1EC3; chi ph&#xED; ph&#x1EA7;n c&#x1EE9;ng &#x111;&#x1EAF;t &#x111;&#x1ECF;, 1 m&#x1EA1;ch FPGA h&#x1A1;n 100tr vnd th&#xEC; c&#x169;ng b&#xEC;nh th&#x1B0;&#x1EDD;ng, n&#xEA;n v&#x1EC1; l&#x1EE3;i nhu&#x1EAD;n s&#x1EBD; kh&#xF3; h&#x1EA5;p d&#x1EAB;n, c&#xF3; th&#x1EC3; tham kh&#x1EA3;o qua m&#x1ED9;t s&#x1ED1; th&#xF4;ng tin &#x1EDF; &#x111;&#xE2;y: <a href="https://www.bittware.com/cvp-13/">https://www.bittware.com/cvp-13</a></li><li><strong>HDD</strong>: sau khi t&#x1EAD;n d&#x1EE5;ng h&#x1EBF;t c&#xE1;c chip t&#xED;nh to&#xE1;n, th&#xEC; HDD c&#x169;ng &#x111;&#x1B0;&#x1EE3;c l&#xEA;n &#xFD; t&#x1B0;&#x1EDF;ng &#x111;&#x1EC3; &#x111;&#xE0;o coin, coin &#x111;&#x1EA7;u ti&#xEA;n ti&#x1EBF;p c&#x1EAD;n s&#x1EED; d&#x1EE5;ng HDD &#x111;&#x1EC3; &#x111;&#xE0;o l&#xE0; Burst Coin, nh&#x1B0;ng hi&#x1EC7;n t&#x1EA1;i c&#x169;ng kh&#xF4;ng ph&#xE1;t tri&#x1EC3;n l&#x1EAF;m, m&#xE3;i &#x111;&#x1EBF;n 2020/2021 th&#xEC; Chia Coin( XCH) m&#x1EDB;i l&#xE0; d&#xF2;ng coin ti&#x1EBF;p theo &#x111;i theo h&#x1B0;&#x1EDB;ng s&#x1EED; d&#x1EE5;ng HDD v&#xE0; c&#xF3; c&#x1EA3;i ti&#x1EBF;n v&#x1EC1; thu&#x1EAD;t to&#xE1;n (PoST) &#x111;&#xE3; t&#x1EA1;o n&#xEA;n m&#x1ED9;t trend m&#x1EDB;i v&#xE0; t&#x1EA1;o n&#xEA;n m&#x1ED9;t &#x111;&#x1EE3;t s&#x1ED1;t HDD/SDD ng&#x1EAF;n h&#x1EA1;n, Roadmap XCH c&#x169;ng m&#x1EA1;nh h&#x1EE9;a h&#x1EB9;n tri&#x1EC3;n khai smartcontract &#x111;&#x1B0;&#x1EE3;c, nh&#x1B0;ng c&#x1EA7;n th&#x1EDD;i gian &#x111;&#x1EC3; xem c&#xF3; t&#x1ED3;n t&#x1EA1;i &#x111;&#x1B0;&#x1EE3;c tr&#xEA;n th&#x1ECB; tr&#x1B0;&#x1EDD;ng hay kh&#xF4;ng, nh&#x1B0;&#x1EE3;c &#x111;i&#x1EC3;m m&#xEC;nh th&#x1EA5;y l&#x1EDB;n nh&#x1EA5;t c&#x1EE7;a c&#xE1;c d&#xF2;ng coin n&#xE0;y l&#xE0; kh&#x1EA3; n&#x103;ng thay &#x111;&#x1ED5;i d&#xF2;ng coin &#x111;&#xE0;o ch&#x1EAD;m. CPU, GPU, ch&#x1EC9; c&#x1EA7;n thay &#x111;&#x1ED5;i ph&#x1EA7;n m&#x1EC1;m, ho&#x1EB7;c pool &#x111;&#xE0;o (ASIC). (V&#x1EDB;i c&#xF9;ng 1 thu&#x1EAD;t to&#xE1;n) th&#xEC; c&#xF3; th&#x1EC3; &#x111;&#x1ED5;i lo&#x1EA1;i coin m&#x1EDB;i &#x111;&#x1EC3; &#x111;&#xE0;o ngay, d&#xF2;ng HDD g&#x1EA7;n nh&#x1B0; &#x111;&#x1EC3; &#x111;&#x1ED5;i ph&#x1EA3;i x&#xF3;a h&#x1EBF;t v&#xE0; setup l&#x1EA1;i t&#x1EEB; &#x111;&#x1EA7;u, ch&#x1B0;a k&#x1EC3; s&#x1ED1; coin support HDD c&#x169;ng qu&#xE1; &#xED;t &#x111;&#x1EC3; t&#x1EA1;o n&#xEA;n 1 c&#x1ED9;ng &#x111;&#x1ED3;ng h&#x1EA5;p d&#x1EAB;n cho miner.</li></ul><p><strong>T&#x1EA1;m k&#x1EBF;t: m&#xEC;nh s&#x1EBD; vi&#x1EBF;t ti&#x1EBF;p ph&#x1EA7;n sau v&#xE0; publish s&#x1EDB;m, xem nh&#x1B0; t&#x1EA3;n m&#x1EA1;n v&#x1EC1; vi&#x1EC7;c &#x111;&#xE0;o coin nh&#xE2;n m&#xF9;a downtrend th&#x1EE9; 3 &amp; ch&#xE0;o m&#x1EEB;ng &#x111;&#x1EBF;n m&#xF9;a &#x111;&#xF4;ng crypto ti&#x1EBF;p theo, winter is coming!</strong></p><p>(Update 1: Ph&#x1EA7;n 2): <a href="https://vinguyen.blog/tan-man-ve-dao-coin-crypto-mining-phan-2/">https://vinguyen.blog/tan-man-ve-dao-coin-crypto-mining-phan-2/</a></p>]]></content:encoded></item><item><title><![CDATA[What is Advantages and Disadvantages of Caprover in Production Deployment?]]></title><description><![CDATA[<p>Vietnamese version: <a href="https://vinguyen.blog/diem-manh-va-yeu-cua-caprover-trong-trien-khai-production/">https://vinguyen.blog/diem-manh-va-yeu-cua-caprover-trong-trien-khai-production/</a></p><p></p><h2 id="what-is-caprover">What is Caprover?</h2><ul><li><strong>TLDR</strong>: Free and Open Source PaaS!</li><li>For more detail: <a href="https://caprover.com/docs/get-started.html">https://caprover.com/docs/get-started.html</a></li></ul><p><strong>Props:</strong></p><ul><li>Caprover is a complete open source PaaS (Heroku like as open source) built on the basis of docker swarm &amp; production ready: that is, we</li></ul>]]></description><link>https://vinguyen.blog/what-is-advantages-and-disadvantages-of-caprover-in-production-deployment/</link><guid isPermaLink="false">638d46603e26ae000138a0a7</guid><category><![CDATA[Sharing]]></category><category><![CDATA[en]]></category><category><![CDATA[Deployment]]></category><category><![CDATA[Caprover]]></category><category><![CDATA[PaaS]]></category><category><![CDATA[DevOps]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Mon, 05 Dec 2022 01:24:25 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/12/caprover-props-cons.png" medium="image"/><content:encoded><![CDATA[<img src="https://vinguyen.blog/content/images/2022/12/caprover-props-cons.png" alt="What is Advantages and Disadvantages of Caprover in Production Deployment?"><p>Vietnamese version: <a href="https://vinguyen.blog/diem-manh-va-yeu-cua-caprover-trong-trien-khai-production/">https://vinguyen.blog/diem-manh-va-yeu-cua-caprover-trong-trien-khai-production/</a></p><p></p><h2 id="what-is-caprover">What is Caprover?</h2><ul><li><strong>TLDR</strong>: Free and Open Source PaaS!</li><li>For more detail: <a href="https://caprover.com/docs/get-started.html">https://caprover.com/docs/get-started.html</a></li></ul><p><strong>Props:</strong></p><ul><li>Caprover is a complete open source PaaS (Heroku like as open source) built on the basis of docker swarm &amp; production ready: that is, we can use it for similar deployment on Heroku on 1/many self-host servers</li><li>Because of Caprover is PaaS, it easy to apply <a href="https://12factor.net/">Twelve-Factor</a> in the deployment model</li><li>There are many simple &amp; handy deployment solutions: CLI, Web UI, Git integration, deployment model, &#xA0;CI/CD ready to use after setup</li><li>Leverage the power of Docker/Dockerize Application, which is already very popular among programmers today</li><li><a href="https://caprover.com/docs/one-click-apps.html">One-Click App</a> has many pre-configuration applications available. on-click to deploy</li></ul><p><strong>Cons</strong></p><ul><li><strong>Persistent data</strong>: I think this to be a major limitation of Caprover, &#xA0;it only supports persistent data on Disk (once they get created they get locked down on a specific server if you have multiple servers). so if you want to deploy a service that requires Persistent data, the horizontal scale of the app is suppressed because it can only be used on one server, or the application must be designed to be a stateless app from the beginning and use the following mechanisms. other storage: eg BlockStorage ( S3/MinIO/Storj,...)</li><li><strong>Scaling resources on multiple nodes (need more verification)</strong>: in a case while supporting the team to setup scale a Caprover cluster, I found that autoscaling &amp; resource balancing on multiple nodes is not really good, some cases need have to manually allocate resources on the server. This point is both the optimal point (because we can plan where to put the service is best) but also more effort take to setup &amp; monitor, this point the orchestration Other tools like k8s work quite smoothly</li><li><strong>Account management &amp; Authentication</strong>: <a href="https://github.com/caprover/caprover/blob/master/CONTRIBUTING.md#important-caprover-goals--scope">CapRover is not an enterprise grade application like Kubernetes</a>. Caprover doesn&apos;t have the goal to become an enterprise grade application, so the mechanisms for users, delegation, and resource sharing will not be developed in the Caprover core, so if you have the desire to use it in a large team, having a decentralized mechanism, or many applications/services belonging to many different products on the same Caprover, it is almost impossible to deploy.</li></ul><h2 id="when-should-we-use-caprover">When should we use Caprover?</h2><ul><li>The team is small, can be trusted and doesn&apos;t need complicated mechanics, the product is in the MVP or early state of the insight product, not large scale, traffic to the backend does not increase or decrease, volatility, ...</li><li>The number of services is simple, persistent data is designed according to stateful service.</li><li>The server has Horizontal and Vertical Scale capabilities.</li><li>Team has experience with docker, dockerizied application, want to deploy CI/CD process fast, convenient, compact &amp; ready to use</li><li>Have experience with Nginx, Letsencrypt,...</li><li>Familiar with PaaS model like Heroku</li></ul><p><strong>When shouldn&apos;t we use Caprover?</strong></p><ul><li>Complex applications, many services, a lot of traffic, or unusual fluctuations (eg events, e-comerse flash sales)</li><li>The team has many products but wants to deploy on the same Caprover cluster, but has the desire to divide data and resource rights.</li></ul><p><strong>Alternative Solutions:</strong></p><ul><li>Heroku: it&apos;s good, popular and ready to use</li><li>Docker, docker-compose on Single server: this solution is just enough for small applications, not too high traffic, simple, convenient, easy to sync &amp; backup, CI/CD can also be deployed by some simple techniques simple</li><li>Aws Autoscaling Group/Azure VM Scale Set: This solution is better for applications with high load demand, or scaling when needed</li><li>Kubernetes/K8S: if it can be applied, it&apos;s good, but cumbersome and costly to maintain, the cost of platform resources is high, so it&apos;s only suitable for relatively large applications and the team has strong K8S experience (I will have a post to share. on this matter later)</li></ul>]]></content:encoded></item><item><title><![CDATA[Blog development series -  Setup health check Ghost Blog with Uptime Robot]]></title><description><![CDATA[<blockquote><strong>TLDR; </strong>This is a series of post-recording &amp; sharing the progress setup of my blog from the beginning of development to meet the needs for stable and reliable blog operation</blockquote><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg" class="kg-image" alt loading="lazy" width="1161" height="641" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1000w, https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1161w" sizes="(min-width: 720px) 720px"></figure><p><strong>Series</strong></p><ul><li><a href="https://vinguyen.blog/blog-development-series-setup-mvp-ghost-blog-with-docker/">Blog development series - Setup MVP Blog with Ghost and Docker</a></li><li><a href="https://vinguyen.blog/blog-development-series-setup-health-check-ghost-blog-with-uptime-robot/">Blog development series - &#xA0;Setup health check</a></li></ul>]]></description><link>https://vinguyen.blog/blog-development-series-setup-health-check-ghost-blog-with-uptime-robot/</link><guid isPermaLink="false">637988110f5f3e0001df8d9f</guid><category><![CDATA[uptimerobot]]></category><category><![CDATA[monitor]]></category><category><![CDATA[health-check]]></category><category><![CDATA[avaibility]]></category><category><![CDATA[high-avaibility]]></category><category><![CDATA[blog-infrastructure-series]]></category><category><![CDATA[blog-development-series]]></category><category><![CDATA[DevOps]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Wed, 23 Nov 2022 17:06:20 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/11/CleanShot-2022-11-21-at-13.14.30@2x.png" medium="image"/><content:encoded><![CDATA[<blockquote><strong>TLDR; </strong>This is a series of post-recording &amp; sharing the progress setup of my blog from the beginning of development to meet the needs for stable and reliable blog operation</blockquote><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg" class="kg-image" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot" loading="lazy" width="1161" height="641" srcset="https://vinguyen.blog/content/images/size/w600/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 600w, https://vinguyen.blog/content/images/size/w1000/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1000w, https://vinguyen.blog/content/images/2022/12/MeatBlog-deployment-diagram-blog-origin.jpg 1161w" sizes="(min-width: 720px) 720px"></figure><img src="https://vinguyen.blog/content/images/2022/11/CleanShot-2022-11-21-at-13.14.30@2x.png" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot"><p><strong>Series</strong></p><ul><li><a href="https://vinguyen.blog/blog-development-series-setup-mvp-ghost-blog-with-docker/">Blog development series - Setup MVP Blog with Ghost and Docker</a></li><li><a href="https://vinguyen.blog/blog-development-series-setup-health-check-ghost-blog-with-uptime-robot/">Blog development series - &#xA0;Setup health check Ghost Blog with Uptime Robot</a></li><li><a href="https://vinguyen.blog/blog-development-series-backup-ghost-blog-data-with-storj/">Blog development series - Backup Ghost Blog with Storj</a></li></ul><h3 id="context">Context</h3><p>This blog is a simple monolithic application deployed with docker &amp; managed by docker-compose running 2 containers: <a href="https://hub.docker.com/_/ghost">Ghost 5.3</a> &amp; <a href="https://hub.docker.com/_/mysql">Mysql 8.0</a> as the diagram bellow</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/11/MeatBlog-deployment-diagram.drawio.png" class="kg-image" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot" loading="lazy" width="1161" height="641" srcset="https://vinguyen.blog/content/images/size/w600/2022/11/MeatBlog-deployment-diagram.drawio.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/11/MeatBlog-deployment-diagram.drawio.png 1000w, https://vinguyen.blog/content/images/2022/11/MeatBlog-deployment-diagram.drawio.png 1161w" sizes="(min-width: 720px) 720px"><figcaption>Simple Blog deployed with Ghost, Docker, Docker Compose</figcaption></figure><h3 id="why-i-need-to-setup-health-check-tool">Why I need to setup health check tool?</h3><p>As a owner &amp; operator of this blog, I want to know status it and make sure that it&apos;s online &amp; server request for user when they need to read content from blog. If my blog is down, I want to receive alerts to handle it as soon as possible and keep the blog is high avaibility</p><h2 id="what-should-i-setup">What should I setup?</h2><p>With that goal ( monitor status of blog), I usually use <a href="https://uptimerobot.com/?rid=cc2ec86737103e">Uptime Robot</a> as a a simple solution and easy to setup that enough for me to monitor blog &amp; receive alerts if my website have problems.</p><p><strong>Uptime Robot</strong> a free online service that monitors your website, it&apos;ll sent request to your application every five minutes, &#xA0;check the response status code and notifies if your website is down via email, mobile push notification, Slack, Webhook, ... &#xA0;It asks for website header and check the status code response linke &quot;200 -ok&quot;, &quot;400- not found&quot;. If the status doesn&apos;t indicate any problem, your website is up &amp; running. If the status code is 400+, 500+, then your website down, Uptime Robot will doing some several checks for next 30s to make sure that your website is really down then notifies alerts via pre-config target ( email, mobile push notification). Your can have more &#xA0;additional feature if subscription the premium version, check it here: <a href="https://uptimerobot.com/pricing/">https://uptimerobot.com/pricing/</a></p><h3 id="how-can-i-setup">How Can I Setup?</h3><p><strong>Step 1:</strong> Register a new account:</p><ul><li>Go to &#xA0;<a href="https://uptimerobot.com/affiliate.php">Uptime Robot</a> ( with my ref code) to register new account on Uptime Robot, no credit card is require, only need to verify account via email</li></ul><p><strong>Step 2: </strong>Create &#xA0;New Monitor</p><ul><li>At the home page of Uptime Robot, click <strong>Add New Monitor </strong>button, then input the blog/webisite information</li><li>Friendly Name: Any things that help you easy to detect your website, example: Vi Nguyen Blog</li><li>URL: your endpoint/ip that you what to monitor: example <a href="https://vinguyen.blog/">https://vinguyen.blog/</a></li><li>Alert Contact: check the contacts that you want to receive alerts if your website is down</li><li>Another configuration: only available on premium version</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/11/CleanShot-2022-11-23-at-23.42.20@2x.png" class="kg-image" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot" loading="lazy" width="2000" height="1232" srcset="https://vinguyen.blog/content/images/size/w600/2022/11/CleanShot-2022-11-23-at-23.42.20@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/11/CleanShot-2022-11-23-at-23.42.20@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/11/CleanShot-2022-11-23-at-23.42.20@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/11/CleanShot-2022-11-23-at-23.42.20@2x.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Blog Development Series - Add new Monitor on Uptime Robot</figcaption></figure><p><strong>Note: </strong>Your can manage the Alert contact in the Setting: <a href="https://uptimerobot.com/dashboard.php#mySettings">https://uptimerobot.com/dashboard.php#mySettings</a></p><figure class="kg-card kg-image-card"><img src="https://vinguyen.blog/content/images/2022/11/CleanShot-2022-11-23-at-23.57.08@2x.png" class="kg-image" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot" loading="lazy" width="2000" height="902" srcset="https://vinguyen.blog/content/images/size/w600/2022/11/CleanShot-2022-11-23-at-23.57.08@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/11/CleanShot-2022-11-23-at-23.57.08@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/11/CleanShot-2022-11-23-at-23.57.08@2x.png 1600w, https://vinguyen.blog/content/images/2022/11/CleanShot-2022-11-23-at-23.57.08@2x.png 2230w" sizes="(min-width: 720px) 720px"></figure><p><strong>Step 3: &#xA0;</strong>Waiting for Uptime Robot checking &amp; make sure that the blog is up</p><p>After input the data and create new monitor, you should wait for some minutes the refresh the website, to make sure your blog/website is scanned &amp; up</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/11/image-1.png" class="kg-image" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot" loading="lazy" width="2000" height="983" srcset="https://vinguyen.blog/content/images/size/w600/2022/11/image-1.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/11/image-1.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/11/image-1.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/11/image-1.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Blog Developemt Series - Waiting to check &amp; make sure Uptime Robot detect webiste up</figcaption></figure><p><strong>Step 4 (Optional): &#xA0;</strong>Install mobile app and login, to receive notify alert</p><ul><li>if you want to receive push notification on your mobile, install app (avaialbe on Appstore &amp; PlayStore), the login your account on mobile app, then if alerts happen, it will push to your device ( if you are already config on the alert contact of monitor).</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/11/IMG_1454.PNG" class="kg-image" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot" loading="lazy" width="1242" height="2208" srcset="https://vinguyen.blog/content/images/size/w600/2022/11/IMG_1454.PNG 600w, https://vinguyen.blog/content/images/size/w1000/2022/11/IMG_1454.PNG 1000w, https://vinguyen.blog/content/images/2022/11/IMG_1454.PNG 1242w" sizes="(min-width: 720px) 720px"><figcaption>Blog Development Series - Install mobile app</figcaption></figure><p><strong>Step 5 (Optional): </strong>Create new status page and publish it to publish your blog/website status</p><ul><li>Go to Status page config <a href="https://uptimerobot.com/statuspage.php">https://uptimerobot.com/statuspage.php</a></li><li>Then create new Status page</li><li>Add/remove the monitor that you want to show on the status page</li></ul><p><strong>Limitation of Free version: </strong>You can not map a custom subdomain ( ex https://status.vinguyen.blog to Uptime Robot Status page), you can only view as a random generate URL: <a href="https://stats.uptimerobot.com/4GR4Vtz5k5">https://stats.uptimerobot.com/4GR4Vtz5k5</a></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/11/CleanShot-2022-11-24-at-00.00.04@2x.png" class="kg-image" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot" loading="lazy" width="2000" height="579" srcset="https://vinguyen.blog/content/images/size/w600/2022/11/CleanShot-2022-11-24-at-00.00.04@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/11/CleanShot-2022-11-24-at-00.00.04@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/11/CleanShot-2022-11-24-at-00.00.04@2x.png 1600w, https://vinguyen.blog/content/images/size/w2400/2022/11/CleanShot-2022-11-24-at-00.00.04@2x.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Blog Development Series - Setup status page with Uptime Robot</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://vinguyen.blog/content/images/2022/11/CleanShot-2022-11-23-at-23.48.22@2x.png" class="kg-image" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot" loading="lazy" width="2000" height="1111" srcset="https://vinguyen.blog/content/images/size/w600/2022/11/CleanShot-2022-11-23-at-23.48.22@2x.png 600w, https://vinguyen.blog/content/images/size/w1000/2022/11/CleanShot-2022-11-23-at-23.48.22@2x.png 1000w, https://vinguyen.blog/content/images/size/w1600/2022/11/CleanShot-2022-11-23-at-23.48.22@2x.png 1600w, https://vinguyen.blog/content/images/2022/11/CleanShot-2022-11-23-at-23.48.22@2x.png 2174w" sizes="(min-width: 720px) 720px"><figcaption>Blog Development Series - A status page with UptimeRobot</figcaption></figure><p><strong>Reference documents:</strong></p><ul><li><a href="https://ostechnix.com/monitor-website-uptime-using-uptime-robot/">https://ostechnix.com/monitor-website-uptime-using-uptime-robot/</a></li></ul><p><strong>Affiliate link:</strong></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://uptimerobot.com/?rid=cc2ec86737103e"><div class="kg-bookmark-content"><div class="kg-bookmark-title">UptimeRobot: Free Website Monitoring Service</div><div class="kg-bookmark-description">Start monitoring in 30 seconds. Use advanced SSL, keyword and cron monitoring. Get notified by email, SMS, Slack and more. Get 50 monitors for FREE!</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://uptimerobot.com/favicon.ico" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot"><span class="kg-bookmark-author">GoDaddy logo</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://uptimerobot.com/assets/images/ogimage.png" alt="Blog development series -  Setup health check Ghost Blog with Uptime Robot"></div></a></figure><p></p>]]></content:encoded></item><item><title><![CDATA[Điểm mạnh và yếu của Caprover trong triển khai production]]></title><description><![CDATA[<p>Tu&#x1EA7;n r&#x1ED3;i m&#xEC;nh v&#x1EEB;a c&#xF3; m&#x1ED9;t tranh lu&#x1EAD;n th&#xFA; v&#x1ECB; v&#x1EDB;i team v&#x1EC1; vi&#x1EC7;c khi n&#xE0;o th&#xEC; n&#xEA;n s&#x1EED; d&#x1EE5;ng <a href="https://caprover.com/">Caprover</a> &#x111;</p>]]></description><link>https://vinguyen.blog/diem-manh-va-yeu-cua-caprover-trong-trien-khai-production/</link><guid isPermaLink="false">63725ef00f5f3e0001df8b26</guid><category><![CDATA[Sharing]]></category><category><![CDATA[Post]]></category><category><![CDATA[Deployment]]></category><category><![CDATA[PaaS]]></category><category><![CDATA[vi]]></category><dc:creator><![CDATA[Vĩ Nguyễn]]></dc:creator><pubDate>Mon, 14 Nov 2022 16:12:05 GMT</pubDate><media:content url="https://vinguyen.blog/content/images/2022/11/my-blog-caprover.png" medium="image"/><content:encoded><![CDATA[<img src="https://vinguyen.blog/content/images/2022/11/my-blog-caprover.png" alt="&#x110;i&#x1EC3;m m&#x1EA1;nh v&#xE0; y&#x1EBF;u c&#x1EE7;a Caprover trong tri&#x1EC3;n khai production"><p>Tu&#x1EA7;n r&#x1ED3;i m&#xEC;nh v&#x1EEB;a c&#xF3; m&#x1ED9;t tranh lu&#x1EAD;n th&#xFA; v&#x1ECB; v&#x1EDB;i team v&#x1EC1; vi&#x1EC7;c khi n&#xE0;o th&#xEC; n&#xEA;n s&#x1EED; d&#x1EE5;ng <a href="https://caprover.com/">Caprover</a> &#x111;&#x1EC3; tri&#x1EC3;n khai m&#xF4; h&#xEC;nh production, m&#xEC;nh s&#x1EBD; chia s&#x1EBB; l&#x1EA1;i m&#x1ED9;t s&#x1ED1; g&#xF3;c nh&#xEC;n c&#x1EE7;a m&#xEC;nh khi n&#xE0;o n&#xEA;n s&#x1EED; d&#x1EE5;ng v&#xE0; kh&#xF4;ng n&#xEA;n s&#x1EED; d&#x1EE5;ng Caprover: </p><p>English version: <a href="https://vinguyen.blog/what-is-advantages-and-disadvantages-of-caprover-in-production-deployment/">https://vinguyen.blog/what-is-advantages-and-disadvantages-of-caprover-in-production-deployment/</a></p><h2 id="caprover-l%C3%A0-g%C3%AC">Caprover l&#xE0; g&#xEC;?</h2><ul><li>Ng&#x1EAF;n g&#x1ECD;n: Free and Open Source PaaS!</li><li>Chi ti&#x1EBF;t h&#x1A1;n: <a href="https://caprover.com/docs/get-started.html">https://caprover.com/docs/get-started.html</a></li></ul><h2 id="%C4%91i%E1%BB%83m-m%E1%BA%A1nh-v%C3%A0-%C4%91i%E1%BB%83m-kh%C3%B4ng-m%E1%BA%A1nh-c%E1%BB%A7a-caprover-l%C3%A0-g%C3%AC">&#x110;i&#x1EC3;m m&#x1EA1;nh v&#xE0; &#x111;i&#x1EC3;m kh&#xF4;ng m&#x1EA1;nh c&#x1EE7;a Caprover l&#xE0; g&#xEC;?</h2><ol><li><a href="https://12factor.net/">&#x110;i&#x1EC3;m m&#x1EA1;nh:</a></li></ol><ul><li>Caprover l&#xE0; 1 opensource PaaS ho&#xE0;n ch&#x1EC9;nh (Heroku like as opensource) &#x111;&#x1B0;&#x1EE3;c build d&#x1EF1;a tr&#xEA;n n&#x1EC1;n t&#x1EA3;ng docker swarm &amp; production ready: ngh&#x129;a l&#xE0; ch&#xFA;ng ta c&#xF3; th&#x1EC3; d&#xF9;ng &#x111;&#x1EC3; tri&#x1EC3;n khai t&#x1B0;&#x1A1;ng t&#x1EF1; tri&#x1EC3;n khai tr&#xEA;n Heroku tr&#xEA;n 1/nhi&#x1EC1;u self-host server:</li><li>V&#xEC; l&#xE0; PaaS n&#xEA;n d&#x1EC5; d&#xE0;ng apply &#x111;&#x1B0;&#x1EE3;c <a href="https://12factor.net/">Twelve-Factor</a> trong m&#xF4; h&#xEC;nh tri&#x1EC3;n khai</li><li>C&#xF3; nhi&#x1EC1;u gi&#x1EA3;i ph&#xE1;p deployment &#x111;&#x1A1;n gi&#x1EA3;n &amp; ti&#x1EC7;n d&#x1EE5;ng: CLI, Web UI, Git integration</li><li>M&#xF4; h&#xEC;nh tri&#x1EC3;n khai, roll-out &#x111;&#x1EA7;y &#x111;&#x1EE7;, CI/CD ready &#x111;&#x1EC3; s&#x1EED; d&#x1EE5;ng</li><li>T&#x1EAD;n d&#x1EE5;ng &#x111;&#x1B0;&#x1EE3;c th&#x1EBF; m&#x1EA1;nh c&#x1EE7;a Docker/Dockerzied Application v&#x1ED1;n &#x111;&#xE3; r&#x1EA5;t ph&#x1ED5; bi&#x1EBF;n trong gi&#x1EDB;i l&#x1EAD;p tr&#xEC;nh hi&#x1EC7;n t&#x1EA1;i</li><li><a href="https://caprover.com/docs/one-click-apps.html">One-Click App</a> c&#xF3; s&#x1EB5;n nhi&#x1EC1;u pre-configuration application. on-click to deploy</li></ul><p><strong>2. &#x110;i&#x1EC3;m ch&#x1B0;a m&#x1EA1;nh</strong></p><ul><li>Persistent data: m&#xEC;nh &#x111;&#xE1;nh gi&#xE1; &#x111;&#xE2;y l&#xE0; 1 &#x111;i&#x1EC3;m gi&#x1EDB;i h&#x1EA1;n l&#x1EDB;n c&#x1EE7;a Caprover, v&#xEC; ch&#x1EC9; h&#x1ED7; tr&#x1EE3; &#x111;&#x1B0;&#x1EE3;c persistent data on Disk (<a href="https://caprover.com/docs/persistent-apps.html">Once they get created they get locked down on a specific server (if you have multiple servers)</a>.): v&#xEC; v&#x1EDB;i h&#x1EA1;n ch&#x1EBF; n&#xE0;y th&#xEC; khi mu&#x1ED1;n tri&#x1EC3;n khai 1 service &#x111;&#xF2;i h&#x1ECF;i Persistent data th&#xEC; t&#xED;nh horizonal scale c&#x1EE7;a app b&#x1ECB; tri&#x1EC7;t ti&#xEA;u v&#xEC; ch&#x1EC9; s&#x1EED; d&#x1EE5;ng &#x111;&#x1B0;&#x1EE3;c tr&#xEA;n 1 Server, ho&#x1EB7;c application ph&#x1EA3;i thi&#x1EBF;t k&#x1EBF; &#x111;&#x1EC3; th&#xE0;nh stateless app ngay t&#x1EEB; &#x111;&#x1EA7;u v&#xE0; s&#x1EED; d&#x1EE5;ng c&#xE1;c c&#x1A1; ch&#x1EBF; storage kh&#xE1;c: vd Blockstorage ( S3/MinIO/Storj,...)</li><li>Scaling resource tr&#xEA;n multiple nodes (c&#x1EA7;n ki&#x1EC3;m ch&#x1EE9;ng th&#xEA;m): trong m&#x1ED9;t v&#xE0;i tr&#x1B0;&#x1EDD;ng h&#x1EE3;p trong l&#xFA;c h&#x1ED7; tr&#x1EE3; team &#x111;&#x1EC3; setup scale 1 Caprover cluster, m&#xEC;nh nh&#x1EAD;n th&#x1EA5;y vi&#x1EC7;c autoscaling &amp; c&#xE2;n b&#x1EB1;ng resource tr&#xEA;n nhi&#x1EC1;u node ch&#x1B0;a th&#x1EAD;t s&#x1EF1; t&#x1ED1;t, m&#x1ED9;t s&#x1ED1; case c&#x1EA7;n ph&#x1EA3;i manually ph&#xE2;n b&#x1ED5; resource tr&#xEA;n server, v&#x1EDB;i m&#xEC;nh th&#xEC; &#x111;i&#x1EC3;m n&#xE0;y v&#x1EEB;a l&#xE0; &#x111;i&#x1EC3;m t&#x1ED1;i &#x1B0;u ( v&#xEC; c&#xF3; th&#x1EC3; t&#x1EF1; t&#xED;nh to&#xE1;n xem n&#xEA;n &#x111;&#x1EC3; service &#x1EDF; &#x111;&#xE2;u l&#xE0; t&#x1ED1;t nh&#x1EA5;t) nh&#x1B0;ng l&#x1EA1;i v&#x1EEB;a qu&#xE1; t&#x1ED1;n chi ph&#xED; setup &amp; monitoring, &#x111;i&#x1EC3;m n&#xE0;y c&#xE1;c orchestration tool kh&#xE1;c nh&#x1B0; k8s c&#x1A1; ch&#x1EBF; ho&#x1EA1;t &#x111;&#x1ED9;ng kh&#xE1; m&#x1B0;&#x1EE3;t m&#xE0; </li><li>Account qu&#x1EA3;n l&#xFD; &amp; ph&#xE2;n quy&#x1EC1;n tr&#xEA;n Caprover: <a href="https://github.com/caprover/caprover/blob/master/CONTRIBUTING.md#important-caprover-goals--scope">CapRover is not an enterprise grade application like Kubernetes.</a> v&#x1EC1; c&#x1A1; b&#x1EA3;n th&#xEC; caprover kh&#xF4;ng c&#xF3; goal tr&#x1EDF; th&#xE0;nh enterpise grade application, n&#xEA;n c&#xE1;c c&#x1A1; ch&#x1EBF; v&#x1EC1; user, ph&#xE2;n quy&#x1EC1;n, chi s&#x1EBB; t&#xE0;i nguy&#xEA;n s&#x1EBD; kh&#xF4;ng &#x111;&#x1B0;&#x1EE3;c ph&#xE1;t tri&#x1EC3;n nhi&#x1EC1;u, n&#xEA;n n&#x1EBF;u b&#x1EA1;n c&#xF3; mong mu&#x1ED1;n s&#x1EED; d&#x1EE5;ng Caprover trong 1 team nhi&#x1EC1;u member, c&#xF3; c&#x1A1; ch&#x1EBF; ph&#xE2;n quy&#x1EC1;n, ho&#x1EB7;c nhi&#x1EC1;u application/service thu&#x1ED9;c nhi&#x1EC1;u product kh&#xE1;c nhau tr&#xEA;n c&#xF9;ng 1 Caprover th&#xEC; g&#x1EA7;n nh&#x1B0; kh&#xF4;ng tri&#x1EC3;n khai &#x111;&#x1B0;&#x1EE3;c.</li></ul><p><strong>V&#x1EAD;y Caprover ph&#xF9; h&#x1EE3;p v&#xE0; kh&#xF4;ng ph&#xF9; h&#x1EE3;p khi n&#xE0;o?</strong></p><p><strong>Ph&#xF9; h&#x1EE3;p:</strong></p><ul><li>Team nh&#x1ECF;, c&#xF3; th&#x1EC3; tin t&#x1B0;&#x1EDF;ng &#x111;&#x1B0;&#x1EE3;c v&#xE0; h&#xF4;ng c&#x1EA7;n c&#x1A1; ch&#x1EBF; ph&#x1EE9;c t&#x1EA1;p product &#x111;ang &#x1EDF; giai &#x111;o&#x1EA1;n MVP ho&#x1EB7;c early state c&#x1EE7;a insightful product , ch&#x1B0;a large scale, traffic v&#xE0;o backend kh&#xF4;ng t&#x103;ng gi&#x1EA3;m, &#x111;&#x1ED9; bi&#x1EBF;n, ...</li><li>L&#x1B0;&#x1EE3;ng service kh&#xF4;ng qu&#xE1; nhi&#x1EC1;u, persistent data &#x111;&#x1B0;&#x1EE3;c thi&#x1EBF;t k&#x1EBF; s&#x1EB5;n theo statefull service</li><li>Server c&#xF3; kh&#x1EA3; n&#x103;ng Horizontal &#xA0;v&#xE0; Vertical Scale. </li><li>Team c&#xF3; s&#x1EB5;n kinh nghi&#x1EC7;m v&#x1EDB;i docker, dockerzied application, mu&#x1ED1;n tri&#x1EC3;n khai quy tr&#xEC;nh CI/CD nhanh, ti&#x1EC7;n, g&#x1ECD;n &amp; ready &#x111;&#x1EC3; s&#x1EED; d&#x1EE5;ng</li><li>C&#xF3; s&#x1EB5;n kinh nghi&#x1EC7;m v&#x1EDB;i Nginx, Letsencrypt,...</li><li>Quen thu&#x1ED9;c v&#x1EDB;i m&#xF4; h&#xEC;nh PaaS nh&#x1B0; Heroku</li></ul><p><strong>Kh&#xF4;ng ph&#xF9; h&#x1EE3;p:</strong></p><ul><li>Application ph&#x1EE9;c t&#x1EA1;p, nhi&#x1EC1;u service, traffic nhi&#x1EC1;u, ho&#x1EB7;c t&#x103;ng gi&#x1EA3;m b&#x1EA5;t th&#x1B0;&#x1EDD;ng ( vd event, e-comerse flash sales)</li><li>Team c&#xF3; nhi&#x1EC1;u product nh&#x1B0;ng mu&#x1ED1;n c&#xF9;ng tri&#x1EC3;n khai tr&#xEA;n c&#xF9;ng 1 Caprover, nh&#x1B0;ng l&#x1EA1;i c&#xF3; mong mu&#x1ED1;n ph&#xE2;n chi quy&#x1EC1;n d&#x1EEF; li&#x1EC7;u, t&#xE0;i nguy&#xEA;n.</li></ul><p><strong>C&#xE1;c gi&#x1EA3;i ph&#xE1;p tri&#x1EC3;n khai kh&#xE1;c c&#xF3; th&#x1EC3; s&#x1EED; d&#x1EE5;ng</strong></p><ul><li>Heroku: x&#x1ECB;n r&#x1ED3;i, tr&#x1EA3; ti&#x1EC1;n l&#xE0; &#x111;&#x1B0;&#x1EE3;c</li><li>Docker, docker-compose on Single server: gi&#x1EA3;i ph&#xE1;p n&#xE0;y v&#x1EEB;a &#x111;&#x1EE7; cho c&#xE1;c application nh&#x1ECF;, traffic kh&#xF4;ng qu&#xE1; cao, &#x111;&#x1A1;n gi&#x1EA3;n, ti&#x1EC7;n d&#x1EE5;ng, d&#x1EC5; &#x111;&#x1ED3;ng b&#x1ED9; &amp; backup, CI/CD c&#x169;ng c&#xF3; th&#x1EC3; tri&#x1EC3;n khai b&#x1EB1;ng m&#x1ED9;t s&#x1ED1; k&#x129; thu&#x1EAD;t &#x111;&#x1A1;n gi&#x1EA3;n</li><li> Aws Autoscaling Group/Azure VM Scale Set: gi&#x1EA3;i ph&#xE1;p n&#xE0;y th&#xEC; x&#x1ECB;n x&#xF2; h&#x1A1;n &#x111;&#x1EC3; cho c&#xE1;c application c&#xF3; nhu c&#x1EA7;u t&#x1EA3;i cao, ho&#x1EB7;c scaling &#x111;&#x1B0;&#x1EE3;c khi c&#xF3; nhu c&#x1EA7;u</li><li>Kubernetes/K8S: n&#x1EBF;u apply &#x111;&#x1B0;&#x1EE3;c th&#xEC; t&#x1ED1;t, nh&#x1B0;ng c&#x1ED3;ng k&#x1EC1;nh v&#xE0; chi ph&#xED; maintain, chi ph&#xED; resource n&#x1EC1;n t&#x1EA3;ng cao, n&#xEA;n ch&#x1EC9; ph&#xF9; h&#x1EE3;p v&#x1EDB;i nh&#x1EEF;ng application t&#x1B0;&#x1A1;ng &#x111;&#x1ED1;i l&#x1EDB;n v&#xE0; team c&#xF3; kinh nghi&#x1EC7;m K8S m&#x1EA1;nh ( m&#xEC;nh s&#x1EBD; c&#xF3; 1 b&#xE0;i chia s&#x1EBB; v&#x1EC1; v&#x1EA5;n &#x111;&#x1EC1; n&#xE0;y sau)<br></li></ul>]]></content:encoded></item></channel></rss>