<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel><title>C o d i n g H o l i d a y</title>
<description>Share Mini Knowledge.</description>
<generator>Miniblog.Core</generator>
<link>http://knowledges.codingholiday.com/</link>
<item>
  <title>Monitoring Docker Container with prometheus + cadvisor + grafana + node-exporter</title>
  <link>http://knowledges.codingholiday.com/blog/monitoring docker container with prometheus + cadvisor + grafana + node-exporter/</link>
  <description>&lt;p id="cf36" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;I will show you how to install all tools for monitor docker container by&amp;nbsp;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;prometheus + cadvisor + grafana + node-exporter&lt;/span&gt;&lt;/p&gt;
&lt;ol class="" style="box-sizing: inherit; margin: 0px; padding: 0px; list-style: none none; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;li id="cae0" class="yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz alm alf alg bx" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; margin-left: 30px; padding-left: 0px; list-style-type: decimal; font-size: 20px; margin-top: 2.14em;" data-selectable-paragraph=""&gt;Create docker-compose.yml&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="za zb zc zd ze zf zg anf pe ang bq bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; background: #f9f9f9; color: #242424; border-radius: 4px; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 32px; border: 1px solid #e5e5e5; font-size: medium;"&gt;&lt;span id="9900" class="anh zk up zg b bu ani anj x ank zo" style="box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; min-width: fit-content; line-height: 1.4; margin-top: -0.2em; margin-bottom: -0.2em;" data-selectable-paragraph=""&gt;&lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;version:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;'3.2'&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;&lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;volumes:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;prometheus_data:&lt;/span&gt; {}&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;grafana_data:&lt;/span&gt; {}&lt;br style="box-sizing: inherit;" /&gt;&lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;services:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;prometheus:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;image:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;prom/prometheus:latest&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;container_name:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;monitoring_prometheus&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;restart:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;unless-stopped&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;volumes:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;./prometheus.yml:/etc/prometheus/prometheus.yml&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;prometheus_data:/promtheus&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;command:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;'--config.file=/etc/prometheus/prometheus.yml'&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;expose:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-number" style="box-sizing: inherit; color: #1c00cf;"&gt;9090&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;ports:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-number" style="box-sizing: inherit; color: #1c00cf;"&gt;9090&lt;/span&gt;&lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;:9090&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;links:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;cadvisor:cadvisor&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;node-exporter:node-exporter&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;node-exporter:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;image:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;prom/node-exporter:latest&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;container_name:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;monitoring_node_exporter&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;restart:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;unless-stopped&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;expose:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-number" style="box-sizing: inherit; color: #1c00cf;"&gt;9100&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;cadvisor:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;image:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;gcr.io/cadvisor/cadvisor:v0.46.0&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;container_name:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;monitoring_cadvisor&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;restart:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;unless-stopped&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;privileged:&lt;/span&gt; &lt;span class="hljs-literal" style="box-sizing: inherit; color: #aa0d91;"&gt;true&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;devices:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;/dev/kmsg:/dev/kmsg&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;volumes:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;/var/run:/var/run:ro&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;/sys:/sys:ro&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;/var/lib/docker/:/var/lib/docker:ro&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;/var/run/docker.sock:/var/run/docker.sock:ro&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;/etc/machine-id:/etc/machine-id:ro&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;/var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;expose:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-number" style="box-sizing: inherit; color: #1c00cf;"&gt;8080&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;grafana:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;image:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;grafana/grafana:latest&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;container_name:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;monitoring_grafana&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;restart:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;unless-stopped&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;links:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;prometheus:prometheus&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;volumes:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;./data/grafana:/var/lib/grafana&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;environment:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;GF_SECURITY_ADMIN_PASSWORD=adminpassword&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;GF_USERS_ALLOW_SIGN_UP=false&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;depends_on:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;prometheus&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;ports:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;"3000:3000"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p id="4a51" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;2. Create prometheus.yml (config file)&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg anf pe ang bq bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; background: #f9f9f9; color: #242424; border-radius: 4px; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 32px; border: 1px solid #e5e5e5; font-size: medium;"&gt;&lt;span id="bc51" class="anh zk up zg b bu ani anj x ank zo" style="box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; min-width: fit-content; line-height: 1.4; margin-top: -0.2em; margin-bottom: -0.2em;" data-selectable-paragraph=""&gt;&lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;global:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;scrape_interval:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;120s&lt;/span&gt; &lt;span class="hljs-comment" style="box-sizing: inherit; color: #007400;"&gt;# By default, scrape targets every 15 seconds.&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;evaluation_interval:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;120s&lt;/span&gt; &lt;span class="hljs-comment" style="box-sizing: inherit; color: #007400;"&gt;# By default, scrape targets every 15 seconds.&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;external_labels:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;monitor:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;"my-project"&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;&lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;rule_files:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;&lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;scrape_configs:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;  &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;job_name:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;"prometheus"&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;scrape_interval:&lt;/span&gt; &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;120s&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;    &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;static_configs:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;      &lt;span class="hljs-bullet" style="box-sizing: inherit; color: #1c00cf;"&gt;-&lt;/span&gt; &lt;span class="hljs-attr" style="box-sizing: inherit; color: #836c28;"&gt;targets:&lt;/span&gt;&lt;br style="box-sizing: inherit;" /&gt;          [&lt;br style="box-sizing: inherit;" /&gt;            &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;"localhost:9090"&lt;/span&gt;,&lt;br style="box-sizing: inherit;" /&gt;            &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;"cadvisor:8080"&lt;/span&gt;,&lt;br style="box-sizing: inherit;" /&gt;            &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;"node-exporter:9100"&lt;/span&gt;,&lt;br style="box-sizing: inherit;" /&gt;            &lt;span class="hljs-string" style="box-sizing: inherit; color: #c41a16;"&gt;"nginx-exporter:9113"&lt;/span&gt;,&lt;br style="box-sizing: inherit;" /&gt;          ]&lt;/span&gt;&lt;/pre&gt;
&lt;p id="ee39" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;3. run&amp;nbsp;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;docker-compose up -d&lt;/span&gt;&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba anl" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1494px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*pPEvMfgKzLWKmrFxoFsFZw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*pPEvMfgKzLWKmrFxoFsFZw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*pPEvMfgKzLWKmrFxoFsFZw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*pPEvMfgKzLWKmrFxoFsFZw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*pPEvMfgKzLWKmrFxoFsFZw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*pPEvMfgKzLWKmrFxoFsFZw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*pPEvMfgKzLWKmrFxoFsFZw.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*pPEvMfgKzLWKmrFxoFsFZw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*pPEvMfgKzLWKmrFxoFsFZw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*pPEvMfgKzLWKmrFxoFsFZw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*pPEvMfgKzLWKmrFxoFsFZw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*pPEvMfgKzLWKmrFxoFsFZw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*pPEvMfgKzLWKmrFxoFsFZw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*pPEvMfgKzLWKmrFxoFsFZw.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*pPEvMfgKzLWKmrFxoFsFZw.png" alt="" width="700" height="137" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="d748" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;4.&amp;nbsp;&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="http://0.0.11.184/" target="_blank" rel="noopener ugc nofollow"&gt;http://localhost:3000&lt;/a&gt;&amp;nbsp;and select menu Data source&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba anm" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2334px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*juQZxjUnrQR-Y8MzwLffNQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*juQZxjUnrQR-Y8MzwLffNQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*juQZxjUnrQR-Y8MzwLffNQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*juQZxjUnrQR-Y8MzwLffNQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*juQZxjUnrQR-Y8MzwLffNQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*juQZxjUnrQR-Y8MzwLffNQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*juQZxjUnrQR-Y8MzwLffNQ.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*juQZxjUnrQR-Y8MzwLffNQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*juQZxjUnrQR-Y8MzwLffNQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*juQZxjUnrQR-Y8MzwLffNQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*juQZxjUnrQR-Y8MzwLffNQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*juQZxjUnrQR-Y8MzwLffNQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*juQZxjUnrQR-Y8MzwLffNQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*juQZxjUnrQR-Y8MzwLffNQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*juQZxjUnrQR-Y8MzwLffNQ.png" alt="" width="700" height="444" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba ann" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2347px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*TZa7xl7RNVFqUFJ1_aasHQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*TZa7xl7RNVFqUFJ1_aasHQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*TZa7xl7RNVFqUFJ1_aasHQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*TZa7xl7RNVFqUFJ1_aasHQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*TZa7xl7RNVFqUFJ1_aasHQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*TZa7xl7RNVFqUFJ1_aasHQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*TZa7xl7RNVFqUFJ1_aasHQ.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*TZa7xl7RNVFqUFJ1_aasHQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*TZa7xl7RNVFqUFJ1_aasHQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*TZa7xl7RNVFqUFJ1_aasHQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*TZa7xl7RNVFqUFJ1_aasHQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*TZa7xl7RNVFqUFJ1_aasHQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*TZa7xl7RNVFqUFJ1_aasHQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*TZa7xl7RNVFqUFJ1_aasHQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*TZa7xl7RNVFqUFJ1_aasHQ.png" alt="" width="700" height="443" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba ano" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1709px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*Fo8Ijl3qCz1zthsyHoBdPQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*Fo8Ijl3qCz1zthsyHoBdPQ.png" alt="" width="700" height="357" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;" data-selectable-paragraph=""&gt;if localhost:9090 not work just try&amp;nbsp;&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="http://host.docker.internal:9090/" target="_blank" rel="noopener ugc nofollow"&gt;http://host.docker.internal:9090&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba anp" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2093px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*kB9i1dRQyFO9xuxm0ZCwzQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*kB9i1dRQyFO9xuxm0ZCwzQ.png" alt="" width="700" height="349" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="6a67" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;5. Import dashboard from&amp;nbsp;&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://grafana.com/grafana/dashboards/10566-docker-and-os-metrics/" target="_blank" rel="noopener ugc nofollow"&gt;https://grafana.com/grafana/dashboards/10566-docker-and-os-metrics/&lt;/a&gt;&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba anq" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1761px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*mUCn2QnKfSHikg4CY_LU2g.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*mUCn2QnKfSHikg4CY_LU2g.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*mUCn2QnKfSHikg4CY_LU2g.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*mUCn2QnKfSHikg4CY_LU2g.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*mUCn2QnKfSHikg4CY_LU2g.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*mUCn2QnKfSHikg4CY_LU2g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*mUCn2QnKfSHikg4CY_LU2g.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*mUCn2QnKfSHikg4CY_LU2g.png 640w, https://miro.medium.com/v2/resize:fit:720/1*mUCn2QnKfSHikg4CY_LU2g.png 720w, https://miro.medium.com/v2/resize:fit:750/1*mUCn2QnKfSHikg4CY_LU2g.png 750w, https://miro.medium.com/v2/resize:fit:786/1*mUCn2QnKfSHikg4CY_LU2g.png 786w, https://miro.medium.com/v2/resize:fit:828/1*mUCn2QnKfSHikg4CY_LU2g.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*mUCn2QnKfSHikg4CY_LU2g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*mUCn2QnKfSHikg4CY_LU2g.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*mUCn2QnKfSHikg4CY_LU2g.png" alt="" width="700" height="542" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba anr" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2329px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*ck4WTB3MHhCKEO80MVc34A.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*ck4WTB3MHhCKEO80MVc34A.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*ck4WTB3MHhCKEO80MVc34A.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*ck4WTB3MHhCKEO80MVc34A.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*ck4WTB3MHhCKEO80MVc34A.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*ck4WTB3MHhCKEO80MVc34A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ck4WTB3MHhCKEO80MVc34A.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*ck4WTB3MHhCKEO80MVc34A.png 640w, https://miro.medium.com/v2/resize:fit:720/1*ck4WTB3MHhCKEO80MVc34A.png 720w, https://miro.medium.com/v2/resize:fit:750/1*ck4WTB3MHhCKEO80MVc34A.png 750w, https://miro.medium.com/v2/resize:fit:786/1*ck4WTB3MHhCKEO80MVc34A.png 786w, https://miro.medium.com/v2/resize:fit:828/1*ck4WTB3MHhCKEO80MVc34A.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*ck4WTB3MHhCKEO80MVc34A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*ck4WTB3MHhCKEO80MVc34A.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*ck4WTB3MHhCKEO80MVc34A.png" alt="" width="700" height="449" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="cea5" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;and then you will get it 😘&lt;/p&gt;
&lt;p id="708c" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;sometime some box will not display data you can edit query for modify your dashboard&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba ans" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2869px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*Nv49RYhvjJj-GG5G1I-I9A.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*Nv49RYhvjJj-GG5G1I-I9A.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*Nv49RYhvjJj-GG5G1I-I9A.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*Nv49RYhvjJj-GG5G1I-I9A.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*Nv49RYhvjJj-GG5G1I-I9A.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Nv49RYhvjJj-GG5G1I-I9A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*Nv49RYhvjJj-GG5G1I-I9A.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*Nv49RYhvjJj-GG5G1I-I9A.png 640w, https://miro.medium.com/v2/resize:fit:720/1*Nv49RYhvjJj-GG5G1I-I9A.png 720w, https://miro.medium.com/v2/resize:fit:750/1*Nv49RYhvjJj-GG5G1I-I9A.png 750w, https://miro.medium.com/v2/resize:fit:786/1*Nv49RYhvjJj-GG5G1I-I9A.png 786w, https://miro.medium.com/v2/resize:fit:828/1*Nv49RYhvjJj-GG5G1I-I9A.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*Nv49RYhvjJj-GG5G1I-I9A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*Nv49RYhvjJj-GG5G1I-I9A.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*Nv49RYhvjJj-GG5G1I-I9A.png" alt="" width="700" height="362" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="492b" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;Thank you 👌&lt;/p&gt;</description>
  <author>C</author>
  <category>prometheus</category>
  <category>cadvisor</category>
  <category>grafana</category>
  <category>node-exporter</category>
  <category>prometheus</category>
  <category>cadvisor</category>
  <category>grafana</category>
  <category>node-exporter</category>
  <guid isPermaLink="false">http://knowledges.codingholiday.com/blog/monitoring docker container with prometheus + cadvisor + grafana + node-exporter/</guid>
  <pubDate>Sun, 20 Apr 2025 02:44:31 GMT</pubDate>
</item>
<item>
  <title>Create Service Using RestAPI and gRPC [Dotnet6]</title>
  <link>http://knowledges.codingholiday.com/blog/create service using restapi and grpc [dotnet6]/</link>
  <description>&lt;div class="fl fm fn fo fp" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="ab ce" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="cl bh ex ey ez fa" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="02e3" class="pw-post-body-paragraph lb lc fs ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;บทความนี้จะมาแนะนำการ สร้าง Service โดยใช้ทั้ง RestApi และ gRPC&lt;br style="box-sizing: inherit;" /&gt;โดยจะออกแบบ ระบบตามรูปด้านล่าง เผื่อมีความต้องการที่จะ delivery ทั้งสอง&lt;br style="box-sizing: inherit;" /&gt;แบบให้ user ใช้งาน 👋👋&lt;/p&gt;
&lt;p id="e001" class="pw-post-body-paragraph lb lc fs ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;source code :&amp;nbsp;&lt;a class="ag lz" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://github.com/pichayean/samplecatservice.git" target="_blank" rel="noopener ugc nofollow"&gt;https://github.com/pichayean/samplecatservice.git&lt;/a&gt;&lt;/p&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="ma mb mc" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 591px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*-bdBNbE8yFBEzucnsnJA7w.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*-bdBNbE8yFBEzucnsnJA7w.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*-bdBNbE8yFBEzucnsnJA7w.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*-bdBNbE8yFBEzucnsnJA7w.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*-bdBNbE8yFBEzucnsnJA7w.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*-bdBNbE8yFBEzucnsnJA7w.png 1100w, https://miro.medium.com/v2/resize:fit:1182/format:webp/1*-bdBNbE8yFBEzucnsnJA7w.png 1182w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 591px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*-bdBNbE8yFBEzucnsnJA7w.png 640w, https://miro.medium.com/v2/resize:fit:720/1*-bdBNbE8yFBEzucnsnJA7w.png 720w, https://miro.medium.com/v2/resize:fit:750/1*-bdBNbE8yFBEzucnsnJA7w.png 750w, https://miro.medium.com/v2/resize:fit:786/1*-bdBNbE8yFBEzucnsnJA7w.png 786w, https://miro.medium.com/v2/resize:fit:828/1*-bdBNbE8yFBEzucnsnJA7w.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*-bdBNbE8yFBEzucnsnJA7w.png 1100w, https://miro.medium.com/v2/resize:fit:1182/1*-bdBNbE8yFBEzucnsnJA7w.png 1182w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 591px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 591px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:739/1*-bdBNbE8yFBEzucnsnJA7w.png" alt="" width="591" height="304" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="d7e3" class="pw-post-body-paragraph lb lc fs ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;เตรียมโปรเจค 😇&lt;/p&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="ma mb mk" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 319px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*KHlEHL7ki6SOD47isnqfbw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*KHlEHL7ki6SOD47isnqfbw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*KHlEHL7ki6SOD47isnqfbw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*KHlEHL7ki6SOD47isnqfbw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*KHlEHL7ki6SOD47isnqfbw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*KHlEHL7ki6SOD47isnqfbw.png 1100w, https://miro.medium.com/v2/resize:fit:638/format:webp/1*KHlEHL7ki6SOD47isnqfbw.png 638w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 319px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*KHlEHL7ki6SOD47isnqfbw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*KHlEHL7ki6SOD47isnqfbw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*KHlEHL7ki6SOD47isnqfbw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*KHlEHL7ki6SOD47isnqfbw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*KHlEHL7ki6SOD47isnqfbw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*KHlEHL7ki6SOD47isnqfbw.png 1100w, https://miro.medium.com/v2/resize:fit:638/1*KHlEHL7ki6SOD47isnqfbw.png 638w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 319px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 319px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:399/1*KHlEHL7ki6SOD47isnqfbw.png" alt="" width="319" height="506" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;blockquote class="ml mm mn" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="dab2" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;✔ Create Sample Cat Service&lt;br style="box-sizing: inherit;" /&gt;&amp;mdash; dotnet new classlib -o samplecatservice&lt;/p&gt;
&lt;p id="57e2" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;✔ Create Sample Cat Service Api&lt;br style="box-sizing: inherit;" /&gt;&amp;mdash; dotnet new webapi -o samplecatservice.api&lt;/p&gt;
&lt;p id="248d" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;✔ Create Sample Cat Service gRPC&lt;br style="box-sizing: inherit;" /&gt;&amp;mdash; dotnet new grpc -o samplecatservice.grpc&lt;/p&gt;
&lt;p id="1cd0" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;✔ Create Sample Cat Service Client&lt;br style="box-sizing: inherit;" /&gt;&amp;mdash; dotnet new console -o samplecatservice.client&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ab ce mp mq mr ms" style="box-sizing: inherit; display: flex; justify-content: center; margin-top: 32px; margin-bottom: 14px; padding-top: 24px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="fl fm fn fo fp" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="ab ce" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="cl bh ex ey ez fa" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;ol class="" style="box-sizing: inherit; margin: 0px; padding: 0px; list-style: none none;"&gt;
&lt;li id="1845" class="lb lc fs ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly mx my mz bk" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; list-style-type: decimal; margin-left: 30px; padding-left: 0px; font-size: 20px; margin-top: 2.14em;" data-selectable-paragraph=""&gt;&lt;span class="ld ft" style="box-sizing: inherit; font-weight: bold;"&gt;Sample Cat Service&amp;nbsp;&lt;/span&gt;👩🏻&amp;zwj;💻&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="ma mb na" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 320px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*gLni2vYN2KFdpBiQkC2CAQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*gLni2vYN2KFdpBiQkC2CAQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*gLni2vYN2KFdpBiQkC2CAQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*gLni2vYN2KFdpBiQkC2CAQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*gLni2vYN2KFdpBiQkC2CAQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*gLni2vYN2KFdpBiQkC2CAQ.png 1100w, https://miro.medium.com/v2/resize:fit:640/format:webp/1*gLni2vYN2KFdpBiQkC2CAQ.png 640w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 320px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*gLni2vYN2KFdpBiQkC2CAQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*gLni2vYN2KFdpBiQkC2CAQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*gLni2vYN2KFdpBiQkC2CAQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*gLni2vYN2KFdpBiQkC2CAQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*gLni2vYN2KFdpBiQkC2CAQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*gLni2vYN2KFdpBiQkC2CAQ.png 1100w, https://miro.medium.com/v2/resize:fit:640/1*gLni2vYN2KFdpBiQkC2CAQ.png 640w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 320px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 320px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:400/1*gLni2vYN2KFdpBiQkC2CAQ.png" alt="" width="320" height="251" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;blockquote class="ml mm mn" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="9f13" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;สร้าง File ตามรูปด้านบน&lt;br style="box-sizing: inherit;" /&gt;AppSettings.cs =&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;CatEntity.cs =&amp;gt; Entity file&lt;br style="box-sizing: inherit;" /&gt;CatLogics.cs =&amp;gt; Logic process for cat service&lt;br style="box-sizing: inherit;" /&gt;ICatLogics.cs =&amp;gt; Interface of Logic process for cat service&lt;br style="box-sizing: inherit;" /&gt;CatRepository.cs =&amp;gt; Repository&lt;br style="box-sizing: inherit;" /&gt;IRepository.cs =&amp;gt; Interface of Repository&lt;br style="box-sizing: inherit;" /&gt;CatModuleExtension.cs =&amp;gt; ExtensionMethod for DI Service&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p id="475b" class="pw-post-body-paragraph lb lc fs ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ld ft" style="box-sizing: inherit; font-weight: bold;"&gt;2.&amp;nbsp;&lt;/span&gt;Sample Cat Service Api 👩🏻&amp;zwj;💻&lt;/p&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="ma mb nb" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 301px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*OTTpEipAl2SRhEO0PJk_EQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*OTTpEipAl2SRhEO0PJk_EQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*OTTpEipAl2SRhEO0PJk_EQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*OTTpEipAl2SRhEO0PJk_EQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*OTTpEipAl2SRhEO0PJk_EQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*OTTpEipAl2SRhEO0PJk_EQ.png 1100w, https://miro.medium.com/v2/resize:fit:602/format:webp/1*OTTpEipAl2SRhEO0PJk_EQ.png 602w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 301px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*OTTpEipAl2SRhEO0PJk_EQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*OTTpEipAl2SRhEO0PJk_EQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*OTTpEipAl2SRhEO0PJk_EQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*OTTpEipAl2SRhEO0PJk_EQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*OTTpEipAl2SRhEO0PJk_EQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*OTTpEipAl2SRhEO0PJk_EQ.png 1100w, https://miro.medium.com/v2/resize:fit:602/1*OTTpEipAl2SRhEO0PJk_EQ.png 602w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 301px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 301px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:376/1*OTTpEipAl2SRhEO0PJk_EQ.png" alt="" width="301" height="308" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;blockquote class="ml mm mn" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="ecc3" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;สร้าง File ตามรูปด้านบน&lt;br style="box-sizing: inherit;" /&gt;CatsController.cs =&amp;gt; Controller file&lt;br style="box-sizing: inherit;" /&gt;Cat.Response.cs =&amp;gt; Response file&lt;br style="box-sizing: inherit;" /&gt;CreateCat.Request.cs =&amp;gt; Request file&lt;br style="box-sizing: inherit;" /&gt;CreateCat.Response.cs =&amp;gt; Response file&lt;br style="box-sizing: inherit;" /&gt;Error.Response.cs =&amp;gt; Response file&lt;br style="box-sizing: inherit;" /&gt;Success.Response.cs =&amp;gt; Response file&lt;br style="box-sizing: inherit;" /&gt;UpdateCat.Request.cs =&amp;gt; Request file&lt;br style="box-sizing: inherit;" /&gt;Dockerfile&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="nd ne cd nf bh ng" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="ma mb nc" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 843px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*vezcjgpNAAKbRGF829F97A.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*vezcjgpNAAKbRGF829F97A.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*vezcjgpNAAKbRGF829F97A.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*vezcjgpNAAKbRGF829F97A.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*vezcjgpNAAKbRGF829F97A.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*vezcjgpNAAKbRGF829F97A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*vezcjgpNAAKbRGF829F97A.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*vezcjgpNAAKbRGF829F97A.png 640w, https://miro.medium.com/v2/resize:fit:720/1*vezcjgpNAAKbRGF829F97A.png 720w, https://miro.medium.com/v2/resize:fit:750/1*vezcjgpNAAKbRGF829F97A.png 750w, https://miro.medium.com/v2/resize:fit:786/1*vezcjgpNAAKbRGF829F97A.png 786w, https://miro.medium.com/v2/resize:fit:828/1*vezcjgpNAAKbRGF829F97A.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*vezcjgpNAAKbRGF829F97A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*vezcjgpNAAKbRGF829F97A.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*vezcjgpNAAKbRGF829F97A.png" alt="" width="700" height="466" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;blockquote class="ml mm mn" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="54d7" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;[Edit]Program.cs =&amp;gt; Register Cat Module&lt;/p&gt;
&lt;p id="572f" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;[Additional] samplecatservice.api.csproj&lt;br style="box-sizing: inherit;" /&gt;&amp;lt;ProjectReference Include=&amp;rdquo;..\samplecatservice\samplecatservice.csproj&amp;rdquo; /&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p id="2af1" class="pw-post-body-paragraph lb lc fs ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ld ft" style="box-sizing: inherit; font-weight: bold;"&gt;3.&amp;nbsp;&lt;/span&gt;Sample Cat Service gRPC 👩🏻&amp;zwj;💻&lt;/p&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="ma mb nh" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 330px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*j3tora7R6dGdqheTtqw5gg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*j3tora7R6dGdqheTtqw5gg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*j3tora7R6dGdqheTtqw5gg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*j3tora7R6dGdqheTtqw5gg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*j3tora7R6dGdqheTtqw5gg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*j3tora7R6dGdqheTtqw5gg.png 1100w, https://miro.medium.com/v2/resize:fit:660/format:webp/1*j3tora7R6dGdqheTtqw5gg.png 660w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 330px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*j3tora7R6dGdqheTtqw5gg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*j3tora7R6dGdqheTtqw5gg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*j3tora7R6dGdqheTtqw5gg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*j3tora7R6dGdqheTtqw5gg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*j3tora7R6dGdqheTtqw5gg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*j3tora7R6dGdqheTtqw5gg.png 1100w, https://miro.medium.com/v2/resize:fit:660/1*j3tora7R6dGdqheTtqw5gg.png 660w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 330px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 330px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:413/1*j3tora7R6dGdqheTtqw5gg.png" alt="" width="330" height="220" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;blockquote class="ml mm mn" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="5d8a" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;สร้าง File ตามรูปด้านบน&lt;br style="box-sizing: inherit;" /&gt;cats.proto =&amp;gt; proto file&lt;br style="box-sizing: inherit;" /&gt;CatsService.cs =&amp;gt; CatsService file&lt;br style="box-sizing: inherit;" /&gt;Dockerfile&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="nd ne cd nf bh ng" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="ma mb ni" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 792px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*c4QQYe9rvCfOQbh8RACMJQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*c4QQYe9rvCfOQbh8RACMJQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*c4QQYe9rvCfOQbh8RACMJQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*c4QQYe9rvCfOQbh8RACMJQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*c4QQYe9rvCfOQbh8RACMJQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*c4QQYe9rvCfOQbh8RACMJQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*c4QQYe9rvCfOQbh8RACMJQ.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*c4QQYe9rvCfOQbh8RACMJQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*c4QQYe9rvCfOQbh8RACMJQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*c4QQYe9rvCfOQbh8RACMJQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*c4QQYe9rvCfOQbh8RACMJQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*c4QQYe9rvCfOQbh8RACMJQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*c4QQYe9rvCfOQbh8RACMJQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*c4QQYe9rvCfOQbh8RACMJQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*c4QQYe9rvCfOQbh8RACMJQ.png" alt="" width="700" height="394" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;blockquote class="ml mm mn" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="839e" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;[Edit]Program.cs =&amp;gt; Register Cat Module and Register CatsService&lt;/p&gt;
&lt;p id="6b57" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;[Additional] samplecatservice.grpc.csproj&lt;br style="box-sizing: inherit;" /&gt;&amp;lt;ProjectReference Include=&amp;rdquo;..\samplecatservice\samplecatservice.csproj&amp;rdquo; /&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p id="4792" class="pw-post-body-paragraph lb lc fs ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ld ft" style="box-sizing: inherit; font-weight: bold;"&gt;4.&amp;nbsp;&lt;/span&gt;Sample Cat Service Client 👩🏻&amp;zwj;💻&lt;br style="box-sizing: inherit;" /&gt;เพื่อใช้ทดลองเรียกใช้งาน gRPC Service&lt;/p&gt;
&lt;blockquote class="ml mm mn" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="577d" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;&amp;mdash; add package &amp;mdash;&lt;br style="box-sizing: inherit;" /&gt;dotnet add package Google.Protobuf&lt;br style="box-sizing: inherit;" /&gt;dotnet add package Grpc.Net.Client&lt;br style="box-sizing: inherit;" /&gt;dotnet add package Grpc.Tools&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="ma mb nj" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 332px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*6sgMcwVWBRnWMtapLgt_Pg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*6sgMcwVWBRnWMtapLgt_Pg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*6sgMcwVWBRnWMtapLgt_Pg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*6sgMcwVWBRnWMtapLgt_Pg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*6sgMcwVWBRnWMtapLgt_Pg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*6sgMcwVWBRnWMtapLgt_Pg.png 1100w, https://miro.medium.com/v2/resize:fit:664/format:webp/1*6sgMcwVWBRnWMtapLgt_Pg.png 664w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 332px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*6sgMcwVWBRnWMtapLgt_Pg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*6sgMcwVWBRnWMtapLgt_Pg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*6sgMcwVWBRnWMtapLgt_Pg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*6sgMcwVWBRnWMtapLgt_Pg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*6sgMcwVWBRnWMtapLgt_Pg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*6sgMcwVWBRnWMtapLgt_Pg.png 1100w, https://miro.medium.com/v2/resize:fit:664/1*6sgMcwVWBRnWMtapLgt_Pg.png 664w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 332px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 332px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:415/1*6sgMcwVWBRnWMtapLgt_Pg.png" alt="" width="332" height="132" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;blockquote class="ml mm mn" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="5e8d" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;สร้าง File ตามรูปด้านบน&lt;br style="box-sizing: inherit;" /&gt;CatGrpcClient.cs&lt;br style="box-sizing: inherit;" /&gt;CatHttpClient.cs&lt;/p&gt;
&lt;p id="b9c3" class="lb lc mo ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;[Additional] samplecatservice.client.csproj&lt;br style="box-sizing: inherit;" /&gt;&amp;lt;Protobuf Include=&amp;rdquo;Protos\cats.proto&amp;rdquo; GrpcServices=&amp;rdquo;Server&amp;rdquo; /&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p id="431a" class="pw-post-body-paragraph lb lc fs ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ld ft" style="box-sizing: inherit; font-weight: bold;"&gt;5.&amp;nbsp;&lt;/span&gt;docker-compose 😁&lt;/p&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="ma mb nk" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 583px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*kGlhMRtOQhGcv5YczLuN6A.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*kGlhMRtOQhGcv5YczLuN6A.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*kGlhMRtOQhGcv5YczLuN6A.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*kGlhMRtOQhGcv5YczLuN6A.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*kGlhMRtOQhGcv5YczLuN6A.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kGlhMRtOQhGcv5YczLuN6A.png 1100w, https://miro.medium.com/v2/resize:fit:1166/format:webp/1*kGlhMRtOQhGcv5YczLuN6A.png 1166w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 583px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*kGlhMRtOQhGcv5YczLuN6A.png 640w, https://miro.medium.com/v2/resize:fit:720/1*kGlhMRtOQhGcv5YczLuN6A.png 720w, https://miro.medium.com/v2/resize:fit:750/1*kGlhMRtOQhGcv5YczLuN6A.png 750w, https://miro.medium.com/v2/resize:fit:786/1*kGlhMRtOQhGcv5YczLuN6A.png 786w, https://miro.medium.com/v2/resize:fit:828/1*kGlhMRtOQhGcv5YczLuN6A.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*kGlhMRtOQhGcv5YczLuN6A.png 1100w, https://miro.medium.com/v2/resize:fit:1166/1*kGlhMRtOQhGcv5YczLuN6A.png 1166w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 583px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 583px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:729/1*kGlhMRtOQhGcv5YczLuN6A.png" alt="" width="583" height="404" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;pre class="md me mf mg mh nl nm nn no ay np bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="3f8c" class="nq nr fs nm b hh ns nt l nu nv" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;docker-compose up -d&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="ma mb nw" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 472px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*sUztzZNSQWJ0AmHqqzRrFQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*sUztzZNSQWJ0AmHqqzRrFQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*sUztzZNSQWJ0AmHqqzRrFQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*sUztzZNSQWJ0AmHqqzRrFQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*sUztzZNSQWJ0AmHqqzRrFQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*sUztzZNSQWJ0AmHqqzRrFQ.png 1100w, https://miro.medium.com/v2/resize:fit:944/format:webp/1*sUztzZNSQWJ0AmHqqzRrFQ.png 944w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 472px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*sUztzZNSQWJ0AmHqqzRrFQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*sUztzZNSQWJ0AmHqqzRrFQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*sUztzZNSQWJ0AmHqqzRrFQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*sUztzZNSQWJ0AmHqqzRrFQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*sUztzZNSQWJ0AmHqqzRrFQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*sUztzZNSQWJ0AmHqqzRrFQ.png 1100w, https://miro.medium.com/v2/resize:fit:944/1*sUztzZNSQWJ0AmHqqzRrFQ.png 944w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 472px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 472px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:590/1*sUztzZNSQWJ0AmHqqzRrFQ.png" alt="" width="472" height="78" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;pre class="md me mf mg mh nl nm nn no ay np bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="bd2d" class="nq nr fs nm b hh ns nt l nu nv" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;dotnet run &amp;mdash; project samplecatservice.client&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="md me mf mg mh mi ma mb paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="ma mb nx" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 498px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*MNu7T8Z6EhPhMJ-43AajRA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*MNu7T8Z6EhPhMJ-43AajRA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*MNu7T8Z6EhPhMJ-43AajRA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*MNu7T8Z6EhPhMJ-43AajRA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*MNu7T8Z6EhPhMJ-43AajRA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*MNu7T8Z6EhPhMJ-43AajRA.png 1100w, https://miro.medium.com/v2/resize:fit:996/format:webp/1*MNu7T8Z6EhPhMJ-43AajRA.png 996w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 498px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*MNu7T8Z6EhPhMJ-43AajRA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*MNu7T8Z6EhPhMJ-43AajRA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*MNu7T8Z6EhPhMJ-43AajRA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*MNu7T8Z6EhPhMJ-43AajRA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*MNu7T8Z6EhPhMJ-43AajRA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*MNu7T8Z6EhPhMJ-43AajRA.png 1100w, https://miro.medium.com/v2/resize:fit:996/1*MNu7T8Z6EhPhMJ-43AajRA.png 996w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 498px" data-testid="og" /&gt;&lt;img class="bh kj mj c" style="box-sizing: inherit; vertical-align: middle; width: 498px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:623/1*MNu7T8Z6EhPhMJ-43AajRA.png" alt="" width="498" height="318" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;figcaption class="ny nz oa ma mb ob oc bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;" data-selectable-paragraph=""&gt;Project client เเสดงให้เห็นการเรียกใช้งาน ทั้ง RestApi และ gRpc service&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h1 id="facb" class="od nr fs bf oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz bk" style="box-sizing: inherit; margin: 1.95em 0px -0.28em; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #242424; letter-spacing: -0.016em; line-height: 30px; font-size: 24px;" data-selectable-paragraph=""&gt;👍👍👍&lt;/h1&gt;
&lt;p id="80dc" class="pw-post-body-paragraph lb lc fs ld b le pa lg lh li pb lk ll lm pc lo lp lq pd ls lt lu pe lw lx ly fl bk" style="box-sizing: inherit; margin: 0.94em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;คุณสามารถดูรายละเอียด เพิ่มเติมได้ กด =&amp;gt;&amp;nbsp;&lt;a class="ag lz" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://github.com/pichayean/samplecatservice.git" target="_blank" rel="noopener ugc nofollow"&gt;📋&lt;/a&gt;&amp;nbsp;&amp;le;= เลยนะครับ&lt;br style="box-sizing: inherit;" /&gt;มีคำถามหรือส่วนไหนที่ไม่ถูกต้องก็ขออภัยด้วยนะครับ&lt;/p&gt;
&lt;p id="4f35" class="pw-post-body-paragraph lb lc fs ld b le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;Ref:&amp;nbsp;&lt;a class="ag lz" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start" target="_blank" rel="noopener ugc nofollow"&gt;https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
  <author>C</author>
  <category>grpc</category>
  <category>dotnet6</category>
  <category>dotnet6</category>
  <category>grpc</category>
  <guid isPermaLink="false">http://knowledges.codingholiday.com/blog/create service using restapi and grpc [dotnet6]/</guid>
  <pubDate>Sun, 20 Apr 2025 02:43:38 GMT</pubDate>
</item>
<item>
  <title>Publish NuGet Packages with GitHub</title>
  <link>http://knowledges.codingholiday.com/blog/publish nuget packages with github/</link>
  <description>&lt;div class="x" style="box-sizing: inherit; display: block; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: #ffffff; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;footer class="abr abs abt abu lu n o abv abw c" style="box-sizing: content-box; background-color: #ffffff; display: flex; align-items: center; border-top: none; margin-bottom: 50px; height: 52px; max-height: 52px; position: static; z-index: 1; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"&gt;
&lt;div class="x bd" style="box-sizing: inherit; display: block; flex: 1 0 auto;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;div class="n do abx" style="box-sizing: inherit; display: flex; justify-content: space-between;"&gt;
&lt;div class="n o dn" style="box-sizing: inherit; display: flex; align-items: center; flex-direction: row;"&gt;
&lt;div class="aby x" style="box-sizing: inherit; display: block; max-width: 155px;"&gt;
&lt;div class="n o dn wr" style="box-sizing: inherit; display: flex; align-items: center; flex-direction: row; z-index: 2;"&gt;
&lt;div class="pw-multi-vote-icon cf ajl wt wu wv" style="box-sizing: inherit; position: relative; user-select: none; margin-right: 0px;"&gt;
&lt;div class="" style="box-sizing: inherit;"&gt;
&lt;div style="box-sizing: inherit;"&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false" aria-describedby="2242" aria-labelledby="2242"&gt;
&lt;div class="jd ajm iz wx wy wz xa ac xb xc xd wv" style="box-sizing: inherit; padding: 0px; fill: #757575; border: 0px; user-select: none; opacity: 0.25; outline: 0px; cursor: not-allowed;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ace n" style="box-sizing: inherit; display: flex; margin-left: 24px;"&gt;
&lt;div style="box-sizing: inherit;"&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false" aria-describedby="2128" aria-labelledby="2128"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="n o" style="box-sizing: inherit; display: flex; align-items: center;"&gt;
&lt;div class="rr x cu" style="box-sizing: inherit; display: block; flex: 0 0 auto; margin-right: 20px;"&gt;
&lt;div style="box-sizing: inherit;"&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false" aria-describedby="2129" aria-labelledby="2129"&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="rr x cu" style="box-sizing: inherit; display: block; flex: 0 0 auto; margin-right: 20px;"&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"&gt;
&lt;div style="box-sizing: inherit;"&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false" aria-describedby="2130" aria-labelledby="2130"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false"&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false"&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false" aria-describedby="creatorActionOverflowMenu" aria-labelledby="creatorActionOverflowMenu"&gt;
&lt;div class="sv x cu" style="box-sizing: inherit; display: block; flex: 0 0 auto; margin-right: -4px;"&gt;
&lt;div style="box-sizing: inherit;"&gt;
&lt;div class="bz" style="box-sizing: inherit; display: inline-block;" aria-hidden="false" aria-describedby="2131" aria-labelledby="2131"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/footer&gt;
&lt;div class="acf x" style="box-sizing: inherit; display: block; margin-bottom: 64px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: #ffffff; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;div class="n acg ach aci vo vn" style="box-sizing: inherit; display: flex; flex-direction: row;"&gt;
&lt;div class="acj ack acl acm acn aco acp rm acq rl n do" style="box-sizing: inherit; display: flex; justify-content: space-between; margin-bottom: 0px; margin-right: 20px;"&gt;
&lt;div class="h k" style="box-sizing: inherit;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ua ub uc ud ue x" style="box-sizing: inherit; display: block; margin-bottom: 50px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: #ffffff; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"&gt;
&lt;article style="box-sizing: inherit;"&gt;
&lt;div class="x" style="box-sizing: inherit; display: block;"&gt;
&lt;div class="x" style="box-sizing: inherit; display: block;"&gt;
&lt;section style="box-sizing: inherit;"&gt;
&lt;div style="box-sizing: inherit;"&gt;
&lt;div class="jv ul um ho un" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;figure class="amf amg amh ami amj zu zz aba paragraph-image" style="box-sizing: inherit; margin: 40px auto 0px; clear: both;"&gt;
&lt;div class="zz aba ame" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 624px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; background-color: #ffffff; width: 624px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:780/1*uv_Yqts6zNF9hLugG-9hvg.png" alt="" width="624" height="261" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; font-weight: 400; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;" data-selectable-paragraph=""&gt;&lt;a class="bf hm" style="box-sizing: inherit; color: inherit; text-decoration: underline; -webkit-tap-highlight-color: transparent;" href="https://docs.github.com/en/packages/learn-github-packages/introduction-to-github-packages" target="_blank" rel="noopener ugc nofollow"&gt;https://docs.github.com/en/packages/learn-github-packages/introduction-to-github-packages&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="6e60" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;ขอแนะนำการสร้าง Nuget Packages ด้วย GitHub เพื่อที่เราจะสามารถบริหารจัดการ Package ที่เราต้องการใช้ร่วมกันได้&lt;/p&gt;
&lt;ol class="" style="box-sizing: inherit; margin: 0px; padding: 0px; list-style: none none;"&gt;
&lt;li id="d4c4" class="yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz alm alf alg bx" style="box-sizing: inherit; font-weight: 400; color: #242424; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; margin-left: 30px; padding-left: 0px; list-style-type: decimal; font-size: 20px; margin-top: 2.14em;" data-selectable-paragraph=""&gt;new project&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin: 56px 0px 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="ff22" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;dotnet new console -o Macus.Helper&lt;/span&gt;&lt;/pre&gt;
&lt;p id="8503" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;2. New File CryptographyProcessor.cs&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin: 56px 0px 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="2947" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;using System.Security.Cryptography;&lt;br style="box-sizing: inherit;" /&gt;using System.Text;&lt;br style="box-sizing: inherit;" /&gt;namespace Macus.HashHelper;&lt;/span&gt;&lt;span id="c4f8" class="zj zk up zg b fo zp zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;public class CryptographyProcessor&lt;br style="box-sizing: inherit;" /&gt;{&lt;br style="box-sizing: inherit;" /&gt;    public string CreateSalt(int size)&lt;br style="box-sizing: inherit;" /&gt;    {&lt;br style="box-sizing: inherit;" /&gt;      RNGCryptoServiceProvider? rng = new RNGCryptoServiceProvider();&lt;br style="box-sizing: inherit;" /&gt;      byte[] buff = new byte[size];&lt;br style="box-sizing: inherit;" /&gt;      rng.GetBytes(buff);&lt;br style="box-sizing: inherit;" /&gt;      return Convert.ToBase64String(buff);&lt;br style="box-sizing: inherit;" /&gt;    }&lt;/span&gt;&lt;span id="9e31" class="zj zk up zg b fo zp zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;    public string GenerateHash(string input, string salt)&lt;br style="box-sizing: inherit;" /&gt;    {&lt;br style="box-sizing: inherit;" /&gt;      byte[] bytes = Encoding.UTF8.GetBytes(input + salt);&lt;br style="box-sizing: inherit;" /&gt;      var sHA256ManagedString = new SHA256Managed();&lt;br style="box-sizing: inherit;" /&gt;      byte[] hash = sHA256ManagedString.ComputeHash(bytes);&lt;br style="box-sizing: inherit;" /&gt;      return Convert.ToBase64String(hash);&lt;br style="box-sizing: inherit;" /&gt;    }&lt;/span&gt;&lt;span id="5222" class="zj zk up zg b fo zp zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;    public bool AreEqual(string plainTextInput, string hashedInput, string salt){&lt;br style="box-sizing: inherit;" /&gt;      string newHashedPin = GenerateHash(plainTextInput, salt);&lt;br style="box-sizing: inherit;" /&gt;      return newHashedPin.Equals(hashedInput);&lt;br style="box-sizing: inherit;" /&gt;   }&lt;br style="box-sizing: inherit;" /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p id="81da" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;3. Generate personal access tokens [In the &amp;ldquo;note&amp;rdquo; field, enter the description of your personal token, then select checkboxes: **write:packages**, **read:packages** and **delete:packages**.]&lt;/p&gt;
&lt;p id="d49e" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;4. Create nuget.config File (สามารถใช้วิธีอื่นได้)&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin: 56px 0px 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="1d1a" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;&amp;lt;configuration&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;   &amp;lt;packageSources&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;      &amp;lt;clear /&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;      &amp;lt;add key="github" value="&lt;a class="bf hm" style="box-sizing: inherit; color: inherit; text-decoration: underline; -webkit-tap-highlight-color: transparent;" href="https://nuget.pkg.github.com/pichayean/index.json" target="_blank" rel="noopener ugc nofollow"&gt;https://nuget.pkg.github.com/YOURCOMPANY/index.json&lt;/a&gt;" /&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;   &amp;lt;/packageSources&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;   &amp;lt;packageSourceCredentials&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;      &amp;lt;github&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;         &amp;lt;add key="Username" value="Username" /&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;         &amp;lt;add key="ClearTextPassword" value="personal_access_tokens" /&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;      &amp;lt;/github&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;   &amp;lt;/packageSourceCredentials&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p id="2609" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;5. Edit Macus.HashHelper.csproj&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin: 56px 0px 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="97d1" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;&amp;lt;Project Sdk="Microsoft.NET.Sdk"&amp;gt;&lt;/span&gt;&lt;span id="c292" class="zj zk up zg b fo zp zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;&amp;lt;PropertyGroup&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;TargetFramework&amp;gt;net6.0&amp;lt;/TargetFramework&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;ImplicitUsings&amp;gt;enable&amp;lt;/ImplicitUsings&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;Nullable&amp;gt;enable&amp;lt;/Nullable&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;OutputType&amp;gt;Exe&amp;lt;/OutputType&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;PackageId&amp;gt;Macus.HashHelper&amp;lt;/PackageId&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;Version&amp;gt;1.0.0&amp;lt;/Version&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;Authors&amp;gt;Pichayean&amp;lt;/Authors&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;Company&amp;gt;GitHub&amp;lt;/Company&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;PackageDescription&amp;gt;This package adds an YourCompany!&amp;lt;/PackageDescription&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;RepositoryUrl&amp;gt;&lt;a class="bf hm" style="box-sizing: inherit; color: inherit; text-decoration: underline; -webkit-tap-highlight-color: transparent;" href="https://github.com/pichayean/Macus.HashHelper.git" target="_blank" rel="noopener ugc nofollow"&gt;https://github.com/YOURREPOSITORY/PackagesNAME.git&lt;/a&gt;&amp;lt;/RepositoryUrl&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;  &amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;&lt;span id="758a" class="zj zk up zg b fo zp zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p id="59ca" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;6. pack packages&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin: 56px 0px 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="9491" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;dotnet pack --configuration Release&lt;/span&gt;&lt;/pre&gt;
&lt;p id="6c03" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;7. Push packages&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin: 56px 0px 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="7454" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;dotnet nuget push "bin/Release/Macus.HashHelper.1.0.0.nupkg" --source "github"&lt;/span&gt;&lt;/pre&gt;
&lt;p id="0b34" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;8. Check Publish packages&lt;/p&gt;
&lt;p id="44c6" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;a class="bf hm" style="box-sizing: inherit; color: inherit; text-decoration: underline; -webkit-tap-highlight-color: transparent;" href="https://github.com/pichayean?tab=packages" target="_blank" rel="noopener ugc nofollow"&gt;https://github.com/yourrepository?tab=packages&lt;/a&gt;&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba amk" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 972px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*gaugC8ZlYIjhCiEh2R9Ykw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*gaugC8ZlYIjhCiEh2R9Ykw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*gaugC8ZlYIjhCiEh2R9Ykw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*gaugC8ZlYIjhCiEh2R9Ykw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*gaugC8ZlYIjhCiEh2R9Ykw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*gaugC8ZlYIjhCiEh2R9Ykw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*gaugC8ZlYIjhCiEh2R9Ykw.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*gaugC8ZlYIjhCiEh2R9Ykw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*gaugC8ZlYIjhCiEh2R9Ykw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*gaugC8ZlYIjhCiEh2R9Ykw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*gaugC8ZlYIjhCiEh2R9Ykw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*gaugC8ZlYIjhCiEh2R9Ykw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*gaugC8ZlYIjhCiEh2R9Ykw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*gaugC8ZlYIjhCiEh2R9Ykw.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; background-color: #ffffff; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*gaugC8ZlYIjhCiEh2R9Ykw.png" alt="" width="700" height="333" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="n p pa fh le zq" style="box-sizing: inherit; display: flex; justify-content: center; margin-bottom: 14px; padding-top: 24px; margin-top: 32px; padding-bottom: 10px;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="jv ul um ho un" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;h1 id="4bed" class="aml zk up ar amm mo amn mp ms mt amo mu mx my amp mz nc nd amq ne nh ni amr nj nm ams bx" style="box-sizing: inherit; margin: 1.25em 0px -0.28em; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #242424; font-style: normal; letter-spacing: -0.016em; line-height: 30px; font-weight: 600; font-size: 24px;" data-selectable-paragraph=""&gt;&lt;strong class="bj" style="box-sizing: inherit; font-weight: inherit;"&gt;การใช้งาน&lt;/strong&gt;&lt;/h1&gt;
&lt;ol class="" style="box-sizing: inherit; margin: 0px; padding: 0px; list-style: none none;"&gt;
&lt;li id="23e3" class="yc yd up ye b yf amt yh yi yj amu yl ym yn amv yp yq yr amw yt yu yv amx yx yy yz alm alf alg bx" style="box-sizing: inherit; font-weight: 400; color: #242424; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; margin-left: 30px; padding-left: 0px; list-style-type: decimal; font-size: 20px; margin-top: 0.94em;" data-selectable-paragraph=""&gt;Generate personal access tokens [In the &amp;ldquo;note&amp;rdquo; field, enter the description of your personal token, then select checkboxes:**read:packages**]&lt;/li&gt;
&lt;li id="6b89" class="yc yd up ye b yf alh yh yi yj ali yl ym yn alj yp yq yr alk yt yu yv all yx yy yz alm alf alg bx" style="box-sizing: inherit; font-weight: 400; color: #242424; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; margin-left: 30px; padding-left: 0px; list-style-type: decimal; font-size: 20px; margin-top: 1.14em;" data-selectable-paragraph=""&gt;Create nuget.config File&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin: 56px 0px 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="d6f7" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;&amp;lt;configuration&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;   &amp;lt;packageSources&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;      &amp;lt;clear /&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;      &amp;lt;add key="github" value="&lt;a class="bf hm" style="box-sizing: inherit; color: inherit; text-decoration: underline; -webkit-tap-highlight-color: transparent;" href="https://nuget.pkg.github.com/pichayean/index.json" target="_blank" rel="noopener ugc nofollow"&gt;https://nuget.pkg.github.com/YOURCOMPANY/index.json&lt;/a&gt;" /&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;   &amp;lt;/packageSources&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;   &amp;lt;packageSourceCredentials&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;      &amp;lt;github&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;         &amp;lt;add key="Username" value="Username" /&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;         &amp;lt;add key="ClearTextPassword" value="access_tokens_readonly" /&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;      &amp;lt;/github&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;   &amp;lt;/packageSourceCredentials&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p id="1084" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;3. Edit .csproj&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin: 56px 0px 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="b6dd" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;&amp;lt;Project Sdk="Microsoft.NET.Sdk"&amp;gt;&lt;/span&gt;&lt;span id="c29b" class="zj zk up zg b fo zp zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;  &amp;lt;PropertyGroup&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;OutputType&amp;gt;Exe&amp;lt;/OutputType&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;TargetFramework&amp;gt;net6.0&amp;lt;/TargetFramework&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;ImplicitUsings&amp;gt;enable&amp;lt;/ImplicitUsings&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;    &amp;lt;Nullable&amp;gt;enable&amp;lt;/Nullable&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;  &amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;&lt;span id="7c21" class="zj zk up zg b fo zp zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;  &amp;lt;ItemGroup&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;     &amp;lt;PackageReference Include="Macus.HashHelper" Version="1.0.0" /&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;  &amp;lt;/ItemGroup&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p id="1efd" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;4. Restore Packages ถือว่าสำเร็จ&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin: 56px 0px 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="f48b" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; font-weight: 400; display: block; font-size: 16px; font-style: normal; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;dotnet restore&lt;/span&gt;&lt;/pre&gt;
&lt;p id="da79" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;Note: มันมีวิธี การจัดการกับ access_tokens อีกหลายวิธี ขอบคุณที่เข้ามาอ่านนะครับ ผิดพลาดตรงไหนสามารถ แนะนำได้ครับ 🤞🤞&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="n p pa fh le zq" style="box-sizing: inherit; display: flex; justify-content: center; margin-bottom: 14px; padding-top: 24px; margin-top: 32px; padding-bottom: 10px;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="jv ul um ho un" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="43aa" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; font-weight: 400; color: #242424; word-break: break-word; font-style: normal; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;Ref:&amp;nbsp;&lt;a class="bf hm" style="box-sizing: inherit; color: inherit; text-decoration: underline; -webkit-tap-highlight-color: transparent;" href="https://docs.github.com/en/packages" target="_blank" rel="noopener ugc nofollow"&gt;github.com/packages&lt;/a&gt;&lt;br style="box-sizing: inherit;" /&gt;Source Code:&amp;nbsp;&lt;a class="bf hm" style="box-sizing: inherit; color: inherit; text-decoration: underline; -webkit-tap-highlight-color: transparent;" href="https://github.com/pichayean/Macus.HashHelper" target="_blank" rel="noopener ugc nofollow"&gt;Macus.HashHelper.git&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/article&gt;
&lt;/div&gt;</description>
  <author>C</author>
  <category>nuget packages</category>
  <category>github</category>
  <category>github</category>
  <category>nuget</category>
  <guid isPermaLink="false">http://knowledges.codingholiday.com/blog/publish nuget packages with github/</guid>
  <pubDate>Sun, 20 Apr 2025 02:42:34 GMT</pubDate>
</item>
<item>
  <title>Deploy angular application to github-pages[Free]</title>
  <link>http://knowledges.codingholiday.com/blog/deploy angular application to github-pages[free]/</link>
  <description>&lt;p id="4f08" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;บทความนี้จะมาแนะนำการ public angular application ด้วย github-pages&lt;br style="box-sizing: inherit;" /&gt;อย่างง่ายๆ สามารถนำไปปรับใช้ได้กับ หลายๆ framwork ด้วยครับ&lt;/p&gt;
&lt;ol class="" style="box-sizing: inherit; margin: 0px; padding: 0px; list-style: none none; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;li id="b79b" class="yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz alm alf alg bx" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; margin-left: 30px; padding-left: 0px; list-style-type: decimal; font-size: 20px; margin-top: 2.14em;" data-selectable-paragraph=""&gt;สร้าง angualr web application&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; font-size: medium;"&gt;&lt;span id="81de" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;ng new sampleweb&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba als" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1888px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*n3x34BXWC2K1J44lA3Flww.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*n3x34BXWC2K1J44lA3Flww.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*n3x34BXWC2K1J44lA3Flww.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*n3x34BXWC2K1J44lA3Flww.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*n3x34BXWC2K1J44lA3Flww.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*n3x34BXWC2K1J44lA3Flww.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*n3x34BXWC2K1J44lA3Flww.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*n3x34BXWC2K1J44lA3Flww.png 640w, https://miro.medium.com/v2/resize:fit:720/1*n3x34BXWC2K1J44lA3Flww.png 720w, https://miro.medium.com/v2/resize:fit:750/1*n3x34BXWC2K1J44lA3Flww.png 750w, https://miro.medium.com/v2/resize:fit:786/1*n3x34BXWC2K1J44lA3Flww.png 786w, https://miro.medium.com/v2/resize:fit:828/1*n3x34BXWC2K1J44lA3Flww.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*n3x34BXWC2K1J44lA3Flww.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*n3x34BXWC2K1J44lA3Flww.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*n3x34BXWC2K1J44lA3Flww.png" alt="" width="700" height="437" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="c573" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;2. Create Github Repository&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; font-size: medium;"&gt;&lt;span id="7df9" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;git init&lt;br style="box-sizing: inherit;" /&gt;git add .&lt;br style="box-sizing: inherit;" /&gt;git commit -m "first commit"&lt;br style="box-sizing: inherit;" /&gt;git branch -M main&lt;br style="box-sizing: inherit;" /&gt;git remote add origin https://github.com/pichayean/sampleweb.git&lt;br style="box-sizing: inherit;" /&gt;git push -u origin main&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba alt" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1564px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*aoXUJWaH0V-9p7Tm7iGGtA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*aoXUJWaH0V-9p7Tm7iGGtA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*aoXUJWaH0V-9p7Tm7iGGtA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*aoXUJWaH0V-9p7Tm7iGGtA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*aoXUJWaH0V-9p7Tm7iGGtA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*aoXUJWaH0V-9p7Tm7iGGtA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*aoXUJWaH0V-9p7Tm7iGGtA.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*aoXUJWaH0V-9p7Tm7iGGtA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*aoXUJWaH0V-9p7Tm7iGGtA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*aoXUJWaH0V-9p7Tm7iGGtA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*aoXUJWaH0V-9p7Tm7iGGtA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*aoXUJWaH0V-9p7Tm7iGGtA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*aoXUJWaH0V-9p7Tm7iGGtA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*aoXUJWaH0V-9p7Tm7iGGtA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*aoXUJWaH0V-9p7Tm7iGGtA.png" alt="" width="700" height="614" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="e3e1" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;3. checkout new branch and build&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; font-size: medium;"&gt;&lt;span id="1819" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;git checkout -b gh-pages&lt;br style="box-sizing: inherit;" /&gt;ng build --output-path docs --base-href /sampleweb/&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba alu" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1416px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*xnuCHLPk45NfT3_h2ebKXA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*xnuCHLPk45NfT3_h2ebKXA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*xnuCHLPk45NfT3_h2ebKXA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*xnuCHLPk45NfT3_h2ebKXA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*xnuCHLPk45NfT3_h2ebKXA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*xnuCHLPk45NfT3_h2ebKXA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*xnuCHLPk45NfT3_h2ebKXA.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*xnuCHLPk45NfT3_h2ebKXA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*xnuCHLPk45NfT3_h2ebKXA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*xnuCHLPk45NfT3_h2ebKXA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*xnuCHLPk45NfT3_h2ebKXA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*xnuCHLPk45NfT3_h2ebKXA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*xnuCHLPk45NfT3_h2ebKXA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*xnuCHLPk45NfT3_h2ebKXA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*xnuCHLPk45NfT3_h2ebKXA.png" alt="" width="700" height="265" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="4245" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;4. push all changes&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; font-size: medium;"&gt;&lt;span id="9428" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;git add .&lt;br style="box-sizing: inherit;" /&gt;git commit -m "public application"&lt;br style="box-sizing: inherit;" /&gt;git push --set-upstream origin gh-pages&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba alv" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1308px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*82gIF_F9bGO929D3u0ih9Q.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*82gIF_F9bGO929D3u0ih9Q.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*82gIF_F9bGO929D3u0ih9Q.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*82gIF_F9bGO929D3u0ih9Q.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*82gIF_F9bGO929D3u0ih9Q.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*82gIF_F9bGO929D3u0ih9Q.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*82gIF_F9bGO929D3u0ih9Q.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*82gIF_F9bGO929D3u0ih9Q.png 640w, https://miro.medium.com/v2/resize:fit:720/1*82gIF_F9bGO929D3u0ih9Q.png 720w, https://miro.medium.com/v2/resize:fit:750/1*82gIF_F9bGO929D3u0ih9Q.png 750w, https://miro.medium.com/v2/resize:fit:786/1*82gIF_F9bGO929D3u0ih9Q.png 786w, https://miro.medium.com/v2/resize:fit:828/1*82gIF_F9bGO929D3u0ih9Q.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*82gIF_F9bGO929D3u0ih9Q.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*82gIF_F9bGO929D3u0ih9Q.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*82gIF_F9bGO929D3u0ih9Q.png" alt="" width="700" height="281" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="c864" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;5. setup github-pages at github repository follow this image&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba alw" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1912px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*O2vNfNqMZ4rasSIy0JG2vQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*O2vNfNqMZ4rasSIy0JG2vQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*O2vNfNqMZ4rasSIy0JG2vQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*O2vNfNqMZ4rasSIy0JG2vQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*O2vNfNqMZ4rasSIy0JG2vQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*O2vNfNqMZ4rasSIy0JG2vQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*O2vNfNqMZ4rasSIy0JG2vQ.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*O2vNfNqMZ4rasSIy0JG2vQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*O2vNfNqMZ4rasSIy0JG2vQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*O2vNfNqMZ4rasSIy0JG2vQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*O2vNfNqMZ4rasSIy0JG2vQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*O2vNfNqMZ4rasSIy0JG2vQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*O2vNfNqMZ4rasSIy0JG2vQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*O2vNfNqMZ4rasSIy0JG2vQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*O2vNfNqMZ4rasSIy0JG2vQ.png" alt="" width="700" height="490" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="e70a" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;6. รอสักครู่ ก็เสร็จเรียบร้อยครับง่ายมากและฟรีด้วย&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba alx" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1240px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*MDrRwsOw-LUn_x0631z3KQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*MDrRwsOw-LUn_x0631z3KQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*MDrRwsOw-LUn_x0631z3KQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*MDrRwsOw-LUn_x0631z3KQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*MDrRwsOw-LUn_x0631z3KQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*MDrRwsOw-LUn_x0631z3KQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*MDrRwsOw-LUn_x0631z3KQ.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*MDrRwsOw-LUn_x0631z3KQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*MDrRwsOw-LUn_x0631z3KQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*MDrRwsOw-LUn_x0631z3KQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*MDrRwsOw-LUn_x0631z3KQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*MDrRwsOw-LUn_x0631z3KQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*MDrRwsOw-LUn_x0631z3KQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*MDrRwsOw-LUn_x0631z3KQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*MDrRwsOw-LUn_x0631z3KQ.png" alt="" width="700" height="547" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;" data-selectable-paragraph=""&gt;published&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba aly" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2618px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*JHI-y3v6lZbB2aDMmajUbw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*JHI-y3v6lZbB2aDMmajUbw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*JHI-y3v6lZbB2aDMmajUbw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*JHI-y3v6lZbB2aDMmajUbw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*JHI-y3v6lZbB2aDMmajUbw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JHI-y3v6lZbB2aDMmajUbw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*JHI-y3v6lZbB2aDMmajUbw.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*JHI-y3v6lZbB2aDMmajUbw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*JHI-y3v6lZbB2aDMmajUbw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*JHI-y3v6lZbB2aDMmajUbw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*JHI-y3v6lZbB2aDMmajUbw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*JHI-y3v6lZbB2aDMmajUbw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*JHI-y3v6lZbB2aDMmajUbw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*JHI-y3v6lZbB2aDMmajUbw.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*JHI-y3v6lZbB2aDMmajUbw.png" alt="" width="700" height="439" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;" data-selectable-paragraph=""&gt;now website online!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="ac5d" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;ขอบคุณที่เข้ามาอ่านจนจบนะครับ ✌✌✌&lt;/p&gt;
&lt;p id="03f9" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;Source Code :&amp;nbsp;&lt;/span&gt;&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://github.com/pichayean/sampleweb.git" target="_blank" rel="noopener ugc nofollow"&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;sampleweb.git&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description>
  <author>C</author>
  <category>github pages</category>
  <category>github pages</category>
  <guid isPermaLink="false">http://knowledges.codingholiday.com/blog/deploy angular application to github-pages[free]/</guid>
  <pubDate>Sun, 20 Apr 2025 02:41:31 GMT</pubDate>
</item>
<item>
  <title>[C#] .netCore + redis caching</title>
  <link>http://knowledges.codingholiday.com/blog/netcore + redis caching/</link>
  <description>&lt;p id="ef35" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;When cached data is distributed, the data:&lt;/p&gt;
&lt;ul class="" style="box-sizing: inherit; margin: 0px; padding: 0px; list-style: none none; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;li id="1d34" class="yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz ale alf alg bx" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; list-style-type: disc; margin-left: 30px; padding-left: 0px; font-size: 20px; margin-top: 2.14em;" data-selectable-paragraph=""&gt;Is&amp;nbsp;&lt;em class="abn" style="box-sizing: inherit;"&gt;coherent&lt;/em&gt;&amp;nbsp;(consistent) across requests to multiple servers.&lt;/li&gt;
&lt;li id="45da" class="yc yd up ye b yf alh yh yi yj ali yl ym yn alj yp yq yr alk yt yu yv all yx yy yz ale alf alg bx" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; list-style-type: disc; margin-left: 30px; padding-left: 0px; font-size: 20px; margin-top: 1.14em;" data-selectable-paragraph=""&gt;Survives server restarts and app deployments.&lt;/li&gt;
&lt;li id="6285" class="yc yd up ye b yf alh yh yi yj ali yl ym yn alj yp yq yr alk yt yu yv all yx yy yz ale alf alg bx" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; list-style-type: disc; margin-left: 30px; padding-left: 0px; font-size: 20px; margin-top: 1.14em;" data-selectable-paragraph=""&gt;Doesn&amp;rsquo;t use local memory.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id="cfcc" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;ขออนุญาติแนะนำการทำ Distributed caching ด้วย Redis อย่างง่ายๆเพื่อเป็นแนวทางพัฒนาต่อไปครับ&lt;/p&gt;
&lt;ol class="" style="box-sizing: inherit; margin: 0px; padding: 0px; list-style: none none; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;li id="d05c" class="yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz alm alf alg bx" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; margin-left: 30px; padding-left: 0px; list-style-type: decimal; font-size: 20px; margin-top: 2.14em;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;Run Redis Container&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; font-size: medium;"&gt;&lt;span id="1310" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;$ docker run -d -p 6379:6379 -v /root/redis/data:/data -v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf --name redis --restart=always redis:latest redis-server /usr/local/etc/redis/redis.conf&lt;/span&gt;&lt;/pre&gt;
&lt;p id="9251" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;2.Create web api &amp;amp; add Microsoft.Extensions.Caching.Redis package&lt;/span&gt;&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; font-size: medium;"&gt;&lt;span id="0b48" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;$ dotnet new webapi -o distributed-caching-redis&lt;br style="box-sizing: inherit;" /&gt;$ cd distributed-caching-redis&lt;br style="box-sizing: inherit;" /&gt;$ dotnet add package Microsoft.Extensions.Caching.Redis&lt;/span&gt;&lt;/pre&gt;
&lt;p id="8c76" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;3.Create Users.cs&lt;/span&gt;&lt;/p&gt;
&lt;p id="79ee" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;ใน File Users.cs เพิ่ม IUserService, UserService และ DTO Class&lt;br style="box-sizing: inherit;" /&gt;ใน Function GetUsersAsync จะมีการ Call Rest Api เพื่อเรียกข้อมูลUser และในขั้นตอนนี้ เราจะ ทำการ Caching Data&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu" style="box-sizing: inherit; margin: 56px 0px 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="cw gd x cf" style="box-sizing: inherit; position: relative; margin: auto; overflow: hidden;"&gt;
&lt;div class="alp zw x" style="box-sizing: inherit; height: 0px; padding-bottom: 1745px;"&gt;&lt;iframe class="cq z jo ba m" style="box-sizing: inherit; width: 680px; top: 0px; height: 1745px; position: absolute; left: 0px;" title="Users.cs" src="https://medium.com/media/71d00f9034745120b1a4681568aad562" width="680" height="1745" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;"&gt;&lt;span class="bj" style="box-sizing: inherit; font-weight: inherit;"&gt;Users.cs&lt;/span&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="1593" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;4.Create UsersController.cs&lt;/span&gt;&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu" style="box-sizing: inherit; margin: 56px 0px 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="cw gd x cf" style="box-sizing: inherit; position: relative; margin: auto; overflow: hidden;"&gt;
&lt;div class="alq zw x" style="box-sizing: inherit; height: 0px; padding-bottom: 564px;"&gt;&lt;iframe class="cq z jo ba m" style="box-sizing: inherit; width: 680px; top: 0px; height: 564px; position: absolute; left: 0px;" title="UsersController.cs" src="https://medium.com/media/dbc46b409f5920b41632ef19216aa4a7" width="680" height="564" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;"&gt;UsersController.cs&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="686e" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;5.Configuration &amp;amp; Inject IUsersService and HttpClient in Startup.cs&lt;/span&gt;&lt;/p&gt;
&lt;p id="bff1" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;เพิ่ม services.AddDistributedRedisCache&lt;br style="box-sizing: inherit;" /&gt;services.AddScoped&amp;lt;IUsersService, UsersService&amp;gt;(); services.AddScoped&amp;lt;HttpClient, HttpClient&amp;gt;();&lt;br style="box-sizing: inherit;" /&gt;ใน ConfigureServices method&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu" style="box-sizing: inherit; margin: 56px 0px 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="cw gd x cf" style="box-sizing: inherit; position: relative; margin: auto; overflow: hidden;"&gt;
&lt;div class="alr zw x" style="box-sizing: inherit; height: 0px; padding-bottom: 1437px;"&gt;&lt;iframe class="cq z jo ba m" style="box-sizing: inherit; width: 680px; top: 0px; height: 1437px; position: absolute; left: 0px;" title="Startup.cs" src="https://medium.com/media/397424e547704cf1a3abc12d00e81e0d" width="680" height="1437" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;"&gt;&lt;span class="bj" style="box-sizing: inherit; font-weight: inherit;"&gt;Startup.cs&lt;/span&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="6070" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;6.Run Api&lt;/span&gt;&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; font-size: medium;"&gt;&lt;span id="8149" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;$ dotnet run&lt;/span&gt;&lt;/pre&gt;
&lt;p id="a1a2" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;เข้าไปที่&amp;nbsp;&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://localhost:5001/users" target="_blank" rel="noopener ugc nofollow"&gt;https://localhost:5001/users&lt;/a&gt;&lt;br style="box-sizing: inherit;" /&gt;แล้วจะได้ผลลัพธ์แบบนี้ การ แสดงผลในครั้งแรกจะ มีความช้านิดหนึ่ง แต่ครั้งต่อๆไปจะเร็วขึ้นเพราะว่า เป็นการเรียกใช้ข้อมูลจาก Redis 🌹🌹&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba aln" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 895px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*UBJlrfHDzBqVa-6KGtG7dw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*UBJlrfHDzBqVa-6KGtG7dw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*UBJlrfHDzBqVa-6KGtG7dw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*UBJlrfHDzBqVa-6KGtG7dw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*UBJlrfHDzBqVa-6KGtG7dw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*UBJlrfHDzBqVa-6KGtG7dw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*UBJlrfHDzBqVa-6KGtG7dw.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*UBJlrfHDzBqVa-6KGtG7dw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*UBJlrfHDzBqVa-6KGtG7dw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*UBJlrfHDzBqVa-6KGtG7dw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*UBJlrfHDzBqVa-6KGtG7dw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*UBJlrfHDzBqVa-6KGtG7dw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*UBJlrfHDzBqVa-6KGtG7dw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*UBJlrfHDzBqVa-6KGtG7dw.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*UBJlrfHDzBqVa-6KGtG7dw.png" alt="" width="700" height="596" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;" data-selectable-paragraph=""&gt;&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://localhost:5001/users" target="_blank" rel="noopener ugc nofollow"&gt;https://localhost:5001/users&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="5f96" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;Source Code&amp;nbsp;&lt;/span&gt;:&amp;nbsp;&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://github.com/pichayean/distributed-caching-redis" target="_blank" rel="noopener ugc nofollow"&gt;distributed-caching-redis&lt;/a&gt;&lt;br style="box-sizing: inherit;" /&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;Ref&amp;nbsp;&lt;/span&gt;:&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed?view=aspnetcore-5.0" target="_blank" rel="noopener ugc nofollow"&gt;&amp;nbsp;docs.microsoft&lt;/a&gt;&lt;/p&gt;</description>
  <author>C</author>
  <category>csharp</category>
  <category>csharp</category>
  <guid isPermaLink="false">http://knowledges.codingholiday.com/blog/netcore + redis caching/</guid>
  <pubDate>Sun, 20 Apr 2025 02:40:28 GMT</pubDate>
</item>
<item>
  <title>[C#] Send email from WebApi by .NetCore, EmailKit, Docker 🌹</title>
  <link>http://knowledges.codingholiday.com/blog/send email from webapi by .netcore, emailkit, docker/</link>
  <description>&lt;div class="jv ul um ho un" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="1754" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;จะมาแนะนำการส่ง Email จาก Web Api โดยใช้&amp;nbsp;&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://github.com/jstedfast/MailKit" target="_blank" rel="noopener ugc nofollow"&gt;MailKit&amp;nbsp;&lt;/a&gt;Package โดย Run บน Container แนะนำการใช้ EnvironmentVariable ช่วยให้เราไม่ต้องเก็บ ข้อมูลสำคัญเช่น Email, Password ไว้ใน Code เพื่อความปลอดภัยของ ข้อมูลสำคัญ อีกวิธีหนึ่ง และมีการใช้ LoremNET Package เพื่อช่วย Random Paragraph ใช้ในการส่ง Email&lt;/p&gt;
&lt;p id="fd1c" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;1. Create webapi&lt;/span&gt;&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="94f6" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;$ dotnet new webapi -o email-sender-demo&lt;/span&gt;&lt;span id="8d0e" class="zj zk up zg b fo zp zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;$ cd email-sender-demo&lt;/span&gt;&lt;span id="0d56" class="zj zk up zg b fo zp zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;//add package&lt;br style="box-sizing: inherit;" /&gt;$ dotnet add package MailKit&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="n p pa fh le zq" style="box-sizing: inherit; display: flex; justify-content: center; margin-bottom: 14px; padding-top: 24px; margin-top: 32px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="jv ul um ho un" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="a92c" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;2. Create File EmailSeder.cs in root project&lt;/span&gt;&lt;/p&gt;
&lt;p id="c569" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;สร้าง Interface และ Class ตาม File นี้ ลองสังเกตุดูใน File นี้ บรรทัดที่ 16, 17 จะเป็นการเรียกใช้ Value จาก EnvironmentVariable&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu" style="box-sizing: inherit; margin: 56px 0px 0px; clear: both;"&gt;
&lt;div class="cw gd x cf" style="box-sizing: inherit; position: relative; margin: auto; overflow: hidden;"&gt;
&lt;div class="akm zw x" style="box-sizing: inherit; height: 0px; padding-bottom: 828px;"&gt;&lt;iframe class="cq z jo ba m" style="box-sizing: inherit; width: 680px; top: 0px; height: 828px; position: absolute; left: 0px;" title="EmailSender.cs" src="https://medium.com/media/fd55e4ed261b57e462b8fb4bcfa9ca24" width="680" height="828" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;"&gt;EmailSeder.cs&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="n p pa fh le zq" style="box-sizing: inherit; display: flex; justify-content: center; margin-bottom: 14px; padding-top: 24px; margin-top: 32px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="jv ul um ho un" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="9f0b" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;3. Edit File Startup.cs in ConfigureServices method&lt;/span&gt;&lt;/p&gt;
&lt;p id="2c1c" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;Inject&amp;nbsp;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;EmailSenderService&amp;nbsp;&lt;/span&gt;ที่บรรทัด 23&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu" style="box-sizing: inherit; margin: 56px 0px 0px; clear: both;"&gt;
&lt;div class="cw gd x cf" style="box-sizing: inherit; position: relative; margin: auto; overflow: hidden;"&gt;
&lt;div class="ako zw x" style="box-sizing: inherit; height: 0px; padding-bottom: 1173px;"&gt;&lt;iframe class="cq z jo ba m" style="box-sizing: inherit; width: 680px; top: 0px; height: 1173px; position: absolute; left: 0px;" title="Startup.cs" src="https://medium.com/media/48d05d530310fbc6ffc5be05bca9a7de" width="680" height="1173" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="n p pa fh le zq" style="box-sizing: inherit; display: flex; justify-content: center; margin-bottom: 14px; padding-top: 24px; margin-top: 32px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="jv ul um ho un" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="5acb" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;4. Create EmailSenderController.cs&lt;/span&gt;&lt;/p&gt;
&lt;p id="d5f3" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;ติดตั้ง Package เพิ่มเติมอีกนิดหนึ่ง&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="adc8" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;$ dotnet add package LoremNET&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="za zb zc zd ze zu" style="box-sizing: inherit; margin: 56px 0px 0px; clear: both;"&gt;
&lt;div class="cw gd x cf" style="box-sizing: inherit; position: relative; margin: auto; overflow: hidden;"&gt;
&lt;div class="akp zw x" style="box-sizing: inherit; height: 0px; padding-bottom: 887px;"&gt;&lt;iframe class="cq z jo ba m" style="box-sizing: inherit; width: 680px; top: 0px; height: 887px; position: absolute; left: 0px;" title="EmailSenderController.cs" src="https://medium.com/media/cb811425b3191f777e0a1cff6df1bd40" width="680" height="887" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="n p pa fh le zq" style="box-sizing: inherit; display: flex; justify-content: center; margin-bottom: 14px; padding-top: 24px; margin-top: 32px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="jv ul um ho un" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="7b21" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;5. สร้าง Dockerfile และ docker-compose.yml&lt;/span&gt;&lt;/p&gt;
&lt;p id="cfb3" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;สร้าง&amp;nbsp;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;Dockerfile&amp;nbsp;&lt;/span&gt;และ&amp;nbsp;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;docker-compose.yml&lt;/span&gt;&amp;nbsp;ด้วย Extension ของ VS Code&lt;br style="box-sizing: inherit;" /&gt;Install Extension Docker ตามในรูป&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba abd" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1025px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*vJtG_N_jUJ2XBchxHdJVcA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*vJtG_N_jUJ2XBchxHdJVcA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*vJtG_N_jUJ2XBchxHdJVcA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*vJtG_N_jUJ2XBchxHdJVcA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*vJtG_N_jUJ2XBchxHdJVcA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*vJtG_N_jUJ2XBchxHdJVcA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*vJtG_N_jUJ2XBchxHdJVcA.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*vJtG_N_jUJ2XBchxHdJVcA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*vJtG_N_jUJ2XBchxHdJVcA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*vJtG_N_jUJ2XBchxHdJVcA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*vJtG_N_jUJ2XBchxHdJVcA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*vJtG_N_jUJ2XBchxHdJVcA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*vJtG_N_jUJ2XBchxHdJVcA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*vJtG_N_jUJ2XBchxHdJVcA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*vJtG_N_jUJ2XBchxHdJVcA.png" alt="" width="700" height="507" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="cece" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;[Key] Ctrl + Shift + P&lt;/span&gt;&amp;nbsp;แล้วก็ทำตามในรูปด้านล่าง&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba abk" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 600px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*xPGFg8hx04zS1JiX2Lmwsw.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*xPGFg8hx04zS1JiX2Lmwsw.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*xPGFg8hx04zS1JiX2Lmwsw.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*xPGFg8hx04zS1JiX2Lmwsw.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*xPGFg8hx04zS1JiX2Lmwsw.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*xPGFg8hx04zS1JiX2Lmwsw.gif 1100w, https://miro.medium.com/v2/resize:fit:1200/format:webp/1*xPGFg8hx04zS1JiX2Lmwsw.gif 1200w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 600px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*xPGFg8hx04zS1JiX2Lmwsw.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*xPGFg8hx04zS1JiX2Lmwsw.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*xPGFg8hx04zS1JiX2Lmwsw.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*xPGFg8hx04zS1JiX2Lmwsw.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*xPGFg8hx04zS1JiX2Lmwsw.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*xPGFg8hx04zS1JiX2Lmwsw.gif 1100w, https://miro.medium.com/v2/resize:fit:1200/1*xPGFg8hx04zS1JiX2Lmwsw.gif 1200w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 600px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 600px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:750/1*xPGFg8hx04zS1JiX2Lmwsw.gif" alt="" width="600" height="438" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="e628" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;เสร็จแล้วเราก็จะได้ Dockerfile และ DockerCompose File ให้เราแก้ไขเพิ่มเติมส่วนของ environment และ ports&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu" style="box-sizing: inherit; margin: 56px 0px 0px; clear: both;"&gt;
&lt;div class="cw gd x cf" style="box-sizing: inherit; position: relative; margin: auto; overflow: hidden;"&gt;
&lt;div class="akq zw x" style="box-sizing: inherit; height: 0px; padding-bottom: 403px;"&gt;&lt;iframe class="cq z jo ba m" style="box-sizing: inherit; width: 680px; top: 0px; height: 403px; position: absolute; left: 0px;" title="docker-compose.yml" src="https://medium.com/media/b3e70f16017fd373ea6918dbc1975796" width="680" height="403" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="n p pa fh le zq" style="box-sizing: inherit; display: flex; justify-content: center; margin-bottom: 14px; padding-top: 24px; margin-top: 32px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="jv ul um ho un" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="n p" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="de m df dg dh di" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="b6e6" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;6. Start Container&lt;/span&gt;&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="207d" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;$ docker compose up -d &amp;mdash; build&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba abl" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1020px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*6GkM3Q-tZXFIH57uqdM0qg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*6GkM3Q-tZXFIH57uqdM0qg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*6GkM3Q-tZXFIH57uqdM0qg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*6GkM3Q-tZXFIH57uqdM0qg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*6GkM3Q-tZXFIH57uqdM0qg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*6GkM3Q-tZXFIH57uqdM0qg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*6GkM3Q-tZXFIH57uqdM0qg.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*6GkM3Q-tZXFIH57uqdM0qg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*6GkM3Q-tZXFIH57uqdM0qg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*6GkM3Q-tZXFIH57uqdM0qg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*6GkM3Q-tZXFIH57uqdM0qg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*6GkM3Q-tZXFIH57uqdM0qg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*6GkM3Q-tZXFIH57uqdM0qg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*6GkM3Q-tZXFIH57uqdM0qg.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*6GkM3Q-tZXFIH57uqdM0qg.png" alt="" width="700" height="510" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;" data-selectable-paragraph=""&gt;docker compose up -d &amp;mdash; build&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="06a0" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;รอสักพัก เมื่อ Build Image เรียบร้อย Start Container เรียบร้อย Run Command&lt;/p&gt;
&lt;pre class="za zb zc zd ze zf zg zh zi bn kk bx" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; background: #f2f2f2; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px;"&gt;&lt;span id="7693" class="zj zk up zg b fo zl zm x zn zo" style="box-sizing: inherit; display: block; font-size: 16px; line-height: 1.18; letter-spacing: -0.022em; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;$ docker ps&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba abm" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1110px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*tFk8FnEd3p2nJEjJd04zeA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*tFk8FnEd3p2nJEjJd04zeA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*tFk8FnEd3p2nJEjJd04zeA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*tFk8FnEd3p2nJEjJd04zeA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*tFk8FnEd3p2nJEjJd04zeA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*tFk8FnEd3p2nJEjJd04zeA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*tFk8FnEd3p2nJEjJd04zeA.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*tFk8FnEd3p2nJEjJd04zeA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*tFk8FnEd3p2nJEjJd04zeA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*tFk8FnEd3p2nJEjJd04zeA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*tFk8FnEd3p2nJEjJd04zeA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*tFk8FnEd3p2nJEjJd04zeA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*tFk8FnEd3p2nJEjJd04zeA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*tFk8FnEd3p2nJEjJd04zeA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*tFk8FnEd3p2nJEjJd04zeA.png" alt="" width="700" height="35" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;" data-selectable-paragraph=""&gt;จะเห็น Container Run เรียบร้อย&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="e3e9" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;เมื่อ Container Run เรียบร้อยแล้วให้เราเข้าไปที่ Path&lt;br style="box-sizing: inherit;" /&gt;http://localhost:5000/EmailSender/sendsampleemail?toEmail=&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;&lt;em class="abn" style="box-sizing: inherit;"&gt;&amp;lt;&amp;lt;toemail@gmail.com&amp;gt;&amp;gt;&lt;/em&gt;&lt;/span&gt;&amp;amp;fromEmail=&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;&lt;em class="abn" style="box-sizing: inherit;"&gt;&amp;lt;&amp;lt;fromEmail@gmail.com&amp;gt;&amp;gt;&lt;br style="box-sizing: inherit;" /&gt;&lt;/em&gt;&lt;/span&gt;(ให้แก้ไข &amp;lt;&amp;lt;toemail@gmail.com&amp;gt;&amp;gt;, &amp;lt;&amp;lt;fromEmail@gmail.com&amp;gt;&amp;gt;)&lt;br style="box-sizing: inherit;" /&gt;เพิ่มส่ง Email&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="abe abf cf abg m abh" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="zz aba abo" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 951px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*RkKqRy8amio0nkK_hXoDSQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*RkKqRy8amio0nkK_hXoDSQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*RkKqRy8amio0nkK_hXoDSQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*RkKqRy8amio0nkK_hXoDSQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*RkKqRy8amio0nkK_hXoDSQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*RkKqRy8amio0nkK_hXoDSQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*RkKqRy8amio0nkK_hXoDSQ.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*RkKqRy8amio0nkK_hXoDSQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*RkKqRy8amio0nkK_hXoDSQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*RkKqRy8amio0nkK_hXoDSQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*RkKqRy8amio0nkK_hXoDSQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*RkKqRy8amio0nkK_hXoDSQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*RkKqRy8amio0nkK_hXoDSQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*RkKqRy8amio0nkK_hXoDSQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*RkKqRy8amio0nkK_hXoDSQ.png" alt="" width="700" height="536" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="zx kz zy zz aba abb abc ar b bu am ao" style="box-sizing: inherit; line-height: 20px; color: #6b6b6b; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; margin-top: 10px; max-width: 728px; margin-left: auto; margin-right: auto;" data-selectable-paragraph=""&gt;ส่ง Email สำเร็จ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="fe9b" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;Check Email มี Email เข้ามา พร้อมกับเนื้อหาที่ถูก Random ส่งมาให้จริงถือเป็นจบงาน 😁😁&lt;/p&gt;
&lt;figure class="za zb zc zd ze zu zz aba paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="zz aba abp" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 601px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*Td3a8J3IT1PbrocqEc635Q.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*Td3a8J3IT1PbrocqEc635Q.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*Td3a8J3IT1PbrocqEc635Q.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*Td3a8J3IT1PbrocqEc635Q.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*Td3a8J3IT1PbrocqEc635Q.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Td3a8J3IT1PbrocqEc635Q.png 1100w, https://miro.medium.com/v2/resize:fit:1202/format:webp/1*Td3a8J3IT1PbrocqEc635Q.png 1202w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 601px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*Td3a8J3IT1PbrocqEc635Q.png 640w, https://miro.medium.com/v2/resize:fit:720/1*Td3a8J3IT1PbrocqEc635Q.png 720w, https://miro.medium.com/v2/resize:fit:750/1*Td3a8J3IT1PbrocqEc635Q.png 750w, https://miro.medium.com/v2/resize:fit:786/1*Td3a8J3IT1PbrocqEc635Q.png 786w, https://miro.medium.com/v2/resize:fit:828/1*Td3a8J3IT1PbrocqEc635Q.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*Td3a8J3IT1PbrocqEc635Q.png 1100w, https://miro.medium.com/v2/resize:fit:1202/1*Td3a8J3IT1PbrocqEc635Q.png 1202w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 601px" data-testid="og" /&gt;&lt;img class="m abi abj c" style="box-sizing: inherit; vertical-align: middle; width: 601px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:751/1*Td3a8J3IT1PbrocqEc635Q.png" alt="" width="601" height="516" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p id="78bc" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;ขอบคุณที่เข้ามาอ่านจนจบนะครับ ✌✌✌&lt;/p&gt;
&lt;p id="91cd" class="pw-post-body-paragraph yc yd up ye b yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz jv bx" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;Source Code :&amp;nbsp;&lt;/span&gt;&lt;a class="bf hm" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://github.com/pichayean/email-sender-demo.git" target="_blank" rel="noopener ugc nofollow"&gt;&lt;span class="ye gl" style="box-sizing: inherit; font-weight: bold;"&gt;email-sender-demo.git&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
  <author>C</author>
  <category>elasticsearch</category>
  <category>csharp</category>
  <category>csharp</category>
  <guid isPermaLink="false">http://knowledges.codingholiday.com/blog/send email from webapi by .netcore, emailkit, docker/</guid>
  <pubDate>Sun, 20 Apr 2025 02:38:30 GMT</pubDate>
</item>
<item>
  <title>[C#] จัดการ Log ด้วย ElasticSearch, Kibana, .NetCore</title>
  <link>http://knowledges.codingholiday.com/blog/จัดการ log ด้วย elasticsearch, kibana, .netcore/</link>
  <description>&lt;div class="fl fm fn fo fp" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="ab ce" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="cl bh ex ey ez fa" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="cb41" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;การจัดเก็บ Log ด้วย ElasticSearch, Kibana, DotNetCore WebApi, Serilog&lt;br style="box-sizing: inherit;" /&gt;สิ่งที่ต้องมี&amp;nbsp;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://code.visualstudio.com/download" target="_blank" rel="noopener ugc nofollow"&gt;VS Code&lt;/a&gt;,&amp;nbsp;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://www.docker.com/" target="_blank" rel="noopener ugc nofollow"&gt;Docker&lt;/a&gt;,&amp;nbsp;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://dotnet.microsoft.com/download" target="_blank" rel="noopener ugc nofollow"&gt;.NET Core 3.1&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="d46e" class="lt lu fs bf lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq bk" style="box-sizing: inherit; margin: 1.95em 0px -0.28em; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #242424; line-height: 30px; letter-spacing: -0.016em; font-size: 24px;" data-selectable-paragraph=""&gt;&lt;span class="am" style="box-sizing: inherit; font-weight: inherit;"&gt;1. เริ่มต้นจากการ Run Elasticsearch และ Kibana containers ขึ้นมาโดยสร้าง docker-compose.yml File ตาม Path นี้&lt;/span&gt;&lt;/h1&gt;
&lt;pre class="mr ms mt mu mv mw mx my mz ay na bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="20e8" class="nb lu fs mx b hh nc nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;mkdir -p elastic-kibana/src/docker&lt;/span&gt;&lt;span id="5aff" class="nb lu fs mx b hh ng nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;cd elastic-kibana/src/docker&lt;/span&gt;&lt;/pre&gt;
&lt;p id="ab9f" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;สร้าง file docker-compose.yml&lt;/p&gt;
&lt;pre class="mr ms mt mu mv mw mx my mz ay na bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="d850" class="nb lu fs mx b hh nc nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;version: '3.1'&lt;br style="box-sizing: inherit;" /&gt;&lt;br style="box-sizing: inherit;" /&gt;services:&lt;br style="box-sizing: inherit;" /&gt;&lt;br style="box-sizing: inherit;" /&gt;  elasticsearch:&lt;br style="box-sizing: inherit;" /&gt;   container_name: elasticsearch&lt;br style="box-sizing: inherit;" /&gt;   image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2&lt;br style="box-sizing: inherit;" /&gt;   ports:&lt;br style="box-sizing: inherit;" /&gt;    - 9200:9200&lt;br style="box-sizing: inherit;" /&gt;   volumes:&lt;br style="box-sizing: inherit;" /&gt;    - elasticsearch-data:/usr/share/elasticsearch/data&lt;br style="box-sizing: inherit;" /&gt;   environment:&lt;br style="box-sizing: inherit;" /&gt;    - xpack.monitoring.enabled=true&lt;br style="box-sizing: inherit;" /&gt;    - xpack.watcher.enabled=false&lt;br style="box-sizing: inherit;" /&gt;    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"&lt;br style="box-sizing: inherit;" /&gt;    - discovery.type=single-node&lt;br style="box-sizing: inherit;" /&gt;   networks:&lt;br style="box-sizing: inherit;" /&gt;    - elastic&lt;br style="box-sizing: inherit;" /&gt;&lt;br style="box-sizing: inherit;" /&gt;  kibana:&lt;br style="box-sizing: inherit;" /&gt;   container_name: kibana&lt;br style="box-sizing: inherit;" /&gt;   image: docker.elastic.co/kibana/kibana:7.9.2&lt;br style="box-sizing: inherit;" /&gt;   ports:&lt;br style="box-sizing: inherit;" /&gt;    - 5601:5601&lt;br style="box-sizing: inherit;" /&gt;   depends_on:&lt;br style="box-sizing: inherit;" /&gt;    - elasticsearch&lt;br style="box-sizing: inherit;" /&gt;   environment:&lt;br style="box-sizing: inherit;" /&gt;    - ELASTICSEARCH_URL=http://localhost:9200&lt;br style="box-sizing: inherit;" /&gt;   networks:&lt;br style="box-sizing: inherit;" /&gt;    - elastic&lt;br style="box-sizing: inherit;" /&gt;  &lt;br style="box-sizing: inherit;" /&gt;networks:&lt;br style="box-sizing: inherit;" /&gt;  elastic:&lt;br style="box-sizing: inherit;" /&gt;    driver: bridge&lt;br style="box-sizing: inherit;" /&gt;&lt;br style="box-sizing: inherit;" /&gt;volumes:&lt;br style="box-sizing: inherit;" /&gt;  elasticsearch-data:&lt;/span&gt;&lt;/pre&gt;
&lt;p id="ba36" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;บันทึก File แล้ว Run Command&lt;/p&gt;
&lt;pre class="mr ms mt mu mv mw mx my mz ay na bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="99ee" class="nb lu fs mx b hh nc nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;docker-compose up -d&lt;/span&gt;&lt;/pre&gt;
&lt;p id="6662" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;รอสักครู่ แล้วเข้าไปที่&amp;nbsp;http://localhost:9200,&amp;nbsp;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="http://localhost:5601/" target="_blank" rel="noopener ugc nofollow"&gt;http://localhost:5601&lt;/a&gt;&amp;nbsp;หากทั้ง 2 Path run ได้ก็ถือว่าสำเร็จในขั้นตอนนี้ 🍟&lt;/p&gt;
&lt;figure class="mr ms mt mu mv nk nh ni paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="nh ni nj" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 685px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*Njyo3C-gf8nH6w5aEfhdsg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*Njyo3C-gf8nH6w5aEfhdsg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*Njyo3C-gf8nH6w5aEfhdsg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*Njyo3C-gf8nH6w5aEfhdsg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*Njyo3C-gf8nH6w5aEfhdsg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Njyo3C-gf8nH6w5aEfhdsg.png 1100w, https://miro.medium.com/v2/resize:fit:1370/format:webp/1*Njyo3C-gf8nH6w5aEfhdsg.png 1370w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 685px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*Njyo3C-gf8nH6w5aEfhdsg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*Njyo3C-gf8nH6w5aEfhdsg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*Njyo3C-gf8nH6w5aEfhdsg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*Njyo3C-gf8nH6w5aEfhdsg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*Njyo3C-gf8nH6w5aEfhdsg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*Njyo3C-gf8nH6w5aEfhdsg.png 1100w, https://miro.medium.com/v2/resize:fit:1370/1*Njyo3C-gf8nH6w5aEfhdsg.png 1370w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 685px" data-testid="og" /&gt;&lt;img class="bh nl nm c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:856/1*Njyo3C-gf8nH6w5aEfhdsg.png" alt="" width="685" height="515" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;figcaption class="nn no np nh ni nq nr bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;" data-selectable-paragraph=""&gt;http://localhost:9200&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ab ce ns nt nu nv" style="box-sizing: inherit; display: flex; justify-content: center; margin-top: 32px; margin-bottom: 14px; padding-top: 24px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="fl fm fn fo fp" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="ab ce" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="cl bh ex ey ez fa" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;h1 id="ce01" class="lt lu fs bf lv lw oa ly lz ma ob mc md me oc mg mh mi od mk ml mm oe mo mp mq bk" style="box-sizing: inherit; margin: 1.25em 0px -0.28em; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #242424; line-height: 30px; letter-spacing: -0.016em; font-size: 24px;" data-selectable-paragraph=""&gt;2. Write Log จาก .NET Core ไปยัง Elasticsearch&lt;/h1&gt;
&lt;p id="c695" class="pw-post-body-paragraph ku kv fs kw b kx of kz la lb og ld le lf oh lh li lj oi ll lm ln oj lp lq lr fl bk" style="box-sizing: inherit; margin: 0.94em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;จากขั้นตอนแรกตอนนี้เรามี Elasticsearch และ Kibana containers run อยู่เรียบร้อยแล้ว เราสามารถ write log ไป Elasticsearch ได้จาก .NET Core WebApi ของเราเลย&lt;/p&gt;
&lt;p id="6760" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;สร้าง webapi ไว้ใน path&amp;nbsp;&lt;span class="kw ft" style="box-sizing: inherit; font-weight: bold;"&gt;&lt;em class="ok" style="box-sizing: inherit;"&gt;elastic-kibana/src/&lt;/em&gt;&lt;/span&gt;&lt;em class="ok" style="box-sizing: inherit;"&gt;&amp;nbsp;&lt;/em&gt;จากขั้นตอนแรก&lt;/p&gt;
&lt;pre class="mr ms mt mu mv mw mx my mz ay na bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="1c05" class="nb lu fs mx b hh nc nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;dotnet new webapi --no-https -o Webapi-Serilog&lt;/span&gt;&lt;span id="d82e" class="nb lu fs mx b hh ng nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content; margin-top: 0.91em;" data-selectable-paragraph=""&gt;cd Webapi-Serilog&lt;/span&gt;&lt;/pre&gt;
&lt;figure class="mr ms mt mu mv nk nh ni paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="om on cd oo bh op" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="nh ni ol" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1366px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*T5sxsiei7rB8wT1oIj2uYw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*T5sxsiei7rB8wT1oIj2uYw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*T5sxsiei7rB8wT1oIj2uYw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*T5sxsiei7rB8wT1oIj2uYw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*T5sxsiei7rB8wT1oIj2uYw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*T5sxsiei7rB8wT1oIj2uYw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*T5sxsiei7rB8wT1oIj2uYw.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*T5sxsiei7rB8wT1oIj2uYw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*T5sxsiei7rB8wT1oIj2uYw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*T5sxsiei7rB8wT1oIj2uYw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*T5sxsiei7rB8wT1oIj2uYw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*T5sxsiei7rB8wT1oIj2uYw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*T5sxsiei7rB8wT1oIj2uYw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*T5sxsiei7rB8wT1oIj2uYw.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="bh nl nm c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*T5sxsiei7rB8wT1oIj2uYw.png" alt="" width="700" height="382" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="nn no np nh ni nq nr bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;" data-selectable-paragraph=""&gt;Folder structure&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="aa81" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;Add Nuget Packages to the Project&lt;/p&gt;
&lt;pre class="mr ms mt mu mv mw mx my mz ay na bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="fd9a" class="nb lu fs mx b hh nc nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;dotnet add package Serilog.AspNetCore&lt;br style="box-sizing: inherit;" /&gt;dotnet add package Serilog.Sinks.Debug&lt;br style="box-sizing: inherit;" /&gt;dotnet add package Serilog.Sinks.Elasticsearch&lt;br style="box-sizing: inherit;" /&gt;dotnet add package Serilog.Enrichers.Environment&lt;/span&gt;&lt;/pre&gt;
&lt;p id="14b8" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;แก้ไข File appsettings.json&lt;/p&gt;
&lt;pre class="mr ms mt mu mv mw mx my mz ay na bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="64d5" class="nb lu fs mx b hh nc nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;{&lt;br style="box-sizing: inherit;" /&gt;  "Serilog": {&lt;br style="box-sizing: inherit;" /&gt;    "MinimumLevel": {&lt;br style="box-sizing: inherit;" /&gt;      "Default": "Information",&lt;br style="box-sizing: inherit;" /&gt;      "Override": {&lt;br style="box-sizing: inherit;" /&gt;        "Microsoft": "Information",&lt;br style="box-sizing: inherit;" /&gt;        "System": "Warning"&lt;br style="box-sizing: inherit;" /&gt;      }&lt;br style="box-sizing: inherit;" /&gt;    }&lt;br style="box-sizing: inherit;" /&gt;  },&lt;br style="box-sizing: inherit;" /&gt;  "ElasticConfiguration": {&lt;br style="box-sizing: inherit;" /&gt;    "Uri": "http://localhost:9200"&lt;br style="box-sizing: inherit;" /&gt;  },&lt;br style="box-sizing: inherit;" /&gt;  "AllowedHosts": "*"&lt;br style="box-sizing: inherit;" /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p id="b846" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;Configuring in&lt;span class="kw ft" style="box-sizing: inherit; font-weight: bold;"&gt;&lt;em class="ok" style="box-sizing: inherit;"&gt;&amp;nbsp;Program.cs&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class="mr ms mt mu mv nk" style="box-sizing: inherit; margin: 56px 0px 0px; clear: both;"&gt;
&lt;div class="oq or l cd" style="box-sizing: inherit; position: relative; margin: auto; overflow: hidden;"&gt;
&lt;div class="aec ot l" style="box-sizing: inherit; height: 0px; padding-bottom: 1810.99px;"&gt;&lt;iframe class="ep n fg ec bh" style="box-sizing: inherit; top: 0px; width: 680px; height: 1810.99px; position: absolute; left: 0px;" title="Program.cs" src="https://rugby4.medium.com/media/18e99359d1785808391d2ec8bd00ebd8" width="680" height="1811" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="nn no np nh ni nq nr bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;"&gt;&lt;span class="am" style="box-sizing: inherit; font-weight: inherit;"&gt;Program.cs&lt;/span&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="da81" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;แก้ไขเสร็จแล้วก็ สั่ง Run api ได้แลย&amp;nbsp;&lt;span class="kw ft" style="box-sizing: inherit; font-weight: bold;"&gt;😎&lt;/span&gt;&lt;/p&gt;
&lt;pre class="mr ms mt mu mv mw mx my mz ay na bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="b554" class="nb lu fs mx b hh nc nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;dotnet run&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ab ce ns nt nu nv" style="box-sizing: inherit; display: flex; justify-content: center; margin-top: 32px; margin-bottom: 14px; padding-top: 24px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="fl fm fn fo fp" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="ab ce" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="cl bh ex ey ez fa" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;blockquote class="ov ow ox" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="72b7" class="ku kv ok kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="kw ft" style="box-sizing: inherit; font-weight: bold;"&gt;&lt;span class="fs" style="box-sizing: inherit; font-style: normal;"&gt;3. หลังจากนั้น เราเข้าไป สร้าง Index Pattern ที่ Kibana&lt;br style="box-sizing: inherit;" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="http://localhost:5601/app/management/kibana/indexPatterns/create" target="_blank" rel="noopener ugc nofollow"&gt;&lt;span class="fs" style="box-sizing: inherit; font-style: normal;"&gt;http://localhost:5601/app/management/kibana/indexPatterns/creat&lt;/span&gt;&lt;/a&gt;&lt;span class="fs" style="box-sizing: inherit; font-style: normal;"&gt;e&lt;/span&gt;&lt;/p&gt;
&lt;p id="eb78" class="ku kv ok kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="kw ft" style="box-sizing: inherit; font-weight: bold;"&gt;&lt;span class="fs" style="box-sizing: inherit; font-style: normal;"&gt;ทำตามขั้นตอนต่อไปนี้&lt;br style="box-sizing: inherit;" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="fs" style="box-sizing: inherit; font-style: normal;"&gt;Index pattern name[webapi-serilog-*] -&amp;gt; Click[Next step] -&amp;gt; Time field[@timestamp] -&amp;gt; Click [Create Index Pattern]&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class="mr ms mt mu mv nk nh ni paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="om on cd oo bh op" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="nh ni ol" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1366px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*XgQJWw_q4DYIPGrjJO6kLQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*XgQJWw_q4DYIPGrjJO6kLQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*XgQJWw_q4DYIPGrjJO6kLQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*XgQJWw_q4DYIPGrjJO6kLQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*XgQJWw_q4DYIPGrjJO6kLQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*XgQJWw_q4DYIPGrjJO6kLQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*XgQJWw_q4DYIPGrjJO6kLQ.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*XgQJWw_q4DYIPGrjJO6kLQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*XgQJWw_q4DYIPGrjJO6kLQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*XgQJWw_q4DYIPGrjJO6kLQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*XgQJWw_q4DYIPGrjJO6kLQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*XgQJWw_q4DYIPGrjJO6kLQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*XgQJWw_q4DYIPGrjJO6kLQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*XgQJWw_q4DYIPGrjJO6kLQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="bh nl nm c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*XgQJWw_q4DYIPGrjJO6kLQ.png" alt="" width="700" height="367" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="nn no np nh ni nq nr bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;" data-selectable-paragraph=""&gt;&lt;span class="ou" style="box-sizing: inherit; font-style: inherit;"&gt;Index pattern name[webapi-serilog-*]&lt;/span&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="mr ms mt mu mv nk nh ni paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="om on cd oo bh op" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="nh ni oy" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1105px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*WSuAjS7UA5n5nlxwCvSt3A.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*WSuAjS7UA5n5nlxwCvSt3A.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*WSuAjS7UA5n5nlxwCvSt3A.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*WSuAjS7UA5n5nlxwCvSt3A.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*WSuAjS7UA5n5nlxwCvSt3A.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*WSuAjS7UA5n5nlxwCvSt3A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*WSuAjS7UA5n5nlxwCvSt3A.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*WSuAjS7UA5n5nlxwCvSt3A.png 640w, https://miro.medium.com/v2/resize:fit:720/1*WSuAjS7UA5n5nlxwCvSt3A.png 720w, https://miro.medium.com/v2/resize:fit:750/1*WSuAjS7UA5n5nlxwCvSt3A.png 750w, https://miro.medium.com/v2/resize:fit:786/1*WSuAjS7UA5n5nlxwCvSt3A.png 786w, https://miro.medium.com/v2/resize:fit:828/1*WSuAjS7UA5n5nlxwCvSt3A.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*WSuAjS7UA5n5nlxwCvSt3A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*WSuAjS7UA5n5nlxwCvSt3A.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="bh nl nm c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*WSuAjS7UA5n5nlxwCvSt3A.png" alt="" width="700" height="324" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="nn no np nh ni nq nr bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;" data-selectable-paragraph=""&gt;&lt;span class="ou" style="box-sizing: inherit; font-style: inherit;"&gt;Click[Next step]&lt;/span&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="mr ms mt mu mv nk nh ni paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="om on cd oo bh op" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="nh ni oz" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1095px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*aMIpCfXpdN8yS5f1O8nD9w.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*aMIpCfXpdN8yS5f1O8nD9w.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*aMIpCfXpdN8yS5f1O8nD9w.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*aMIpCfXpdN8yS5f1O8nD9w.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*aMIpCfXpdN8yS5f1O8nD9w.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*aMIpCfXpdN8yS5f1O8nD9w.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*aMIpCfXpdN8yS5f1O8nD9w.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*aMIpCfXpdN8yS5f1O8nD9w.png 640w, https://miro.medium.com/v2/resize:fit:720/1*aMIpCfXpdN8yS5f1O8nD9w.png 720w, https://miro.medium.com/v2/resize:fit:750/1*aMIpCfXpdN8yS5f1O8nD9w.png 750w, https://miro.medium.com/v2/resize:fit:786/1*aMIpCfXpdN8yS5f1O8nD9w.png 786w, https://miro.medium.com/v2/resize:fit:828/1*aMIpCfXpdN8yS5f1O8nD9w.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*aMIpCfXpdN8yS5f1O8nD9w.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*aMIpCfXpdN8yS5f1O8nD9w.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="bh nl nm c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*aMIpCfXpdN8yS5f1O8nD9w.png" alt="" width="700" height="320" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="nn no np nh ni nq nr bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;" data-selectable-paragraph=""&gt;&lt;span class="ou" style="box-sizing: inherit; font-style: inherit;"&gt;Time field[@timestamp]-&amp;gt;Click [Create Index Pattern]&lt;/span&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="mr ms mt mu mv nk nh ni paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="om on cd oo bh op" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="nh ni pa" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 827px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*N388GPK-OgOCWaPvbdQM8g.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*N388GPK-OgOCWaPvbdQM8g.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*N388GPK-OgOCWaPvbdQM8g.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*N388GPK-OgOCWaPvbdQM8g.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*N388GPK-OgOCWaPvbdQM8g.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*N388GPK-OgOCWaPvbdQM8g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*N388GPK-OgOCWaPvbdQM8g.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*N388GPK-OgOCWaPvbdQM8g.png 640w, https://miro.medium.com/v2/resize:fit:720/1*N388GPK-OgOCWaPvbdQM8g.png 720w, https://miro.medium.com/v2/resize:fit:750/1*N388GPK-OgOCWaPvbdQM8g.png 750w, https://miro.medium.com/v2/resize:fit:786/1*N388GPK-OgOCWaPvbdQM8g.png 786w, https://miro.medium.com/v2/resize:fit:828/1*N388GPK-OgOCWaPvbdQM8g.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*N388GPK-OgOCWaPvbdQM8g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*N388GPK-OgOCWaPvbdQM8g.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="bh nl nm c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*N388GPK-OgOCWaPvbdQM8g.png" alt="" width="700" height="346" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="nn no np nh ni nq nr bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;" data-selectable-paragraph=""&gt;Index [&lt;span class="ou" style="box-sizing: inherit; font-style: inherit;"&gt;webapi-serilog-*]&amp;nbsp;&lt;/span&gt;added&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ab ce ns nt nu nv" style="box-sizing: inherit; display: flex; justify-content: center; margin-top: 32px; margin-bottom: 14px; padding-top: 24px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="fl fm fn fo fp" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="ab ce" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="cl bh ex ey ez fa" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;h1 id="597d" class="lt lu fs bf lv lw oa ly lz ma ob mc md me oc mg mh mi od mk ml mm oe mo mp mq bk" style="box-sizing: inherit; margin: 1.25em 0px -0.28em; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #242424; line-height: 30px; letter-spacing: -0.016em; font-size: 24px;" data-selectable-paragraph=""&gt;&lt;span class="am" style="box-sizing: inherit; font-weight: inherit;"&gt;4. ต่อมาก็มา Write Log จาก Controller&lt;/span&gt;&lt;/h1&gt;
&lt;p id="a8f1" class="pw-post-body-paragraph ku kv fs kw b kx of kz la lb og ld le lf oh lh li lj oi ll lm ln oj lp lq lr fl bk" style="box-sizing: inherit; margin: 0.94em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;สร้าง File&amp;nbsp;&lt;span class="kw ft" style="box-sizing: inherit; font-weight: bold;"&gt;&lt;em class="ok" style="box-sizing: inherit;"&gt;KibanaLogController.cs&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class="mr ms mt mu mv nk" style="box-sizing: inherit; margin: 56px 0px 0px; clear: both;"&gt;
&lt;div class="oq or l cd" style="box-sizing: inherit; position: relative; margin: auto; overflow: hidden;"&gt;
&lt;div class="aed ot l" style="box-sizing: inherit; height: 0px; padding-bottom: 630px;"&gt;&lt;iframe class="ep n fg ec bh" style="box-sizing: inherit; top: 0px; width: 680px; height: 630px; position: absolute; left: 0px;" title="KibanaLogController.cs" src="https://rugby4.medium.com/media/ccc829b4477c5f2336106a0e9270af96" width="680" height="630" frameborder="0" scrolling="no" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class="nn no np nh ni nq nr bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;"&gt;&lt;span class="am" style="box-sizing: inherit; font-weight: inherit;"&gt;KibanaLogController.cs&lt;/span&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p id="3f9c" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;เสร็จแล้วก็ 🍜🍜&lt;/p&gt;
&lt;pre class="mr ms mt mu mv mw mx my mz ay na bk" style="box-sizing: inherit; margin-top: 56px; margin-bottom: 0px; border: none; color: #242424; overflow-x: auto; font-family: source-code-pro, Menlo, Monaco, 'Courier New', Courier, monospace; padding: 20px; border-radius: 0px; background: #f2f2f2;"&gt;&lt;span id="8d8c" class="nb lu fs mx b hh nc nd l ne nf" style="box-sizing: inherit; display: block; font-size: 16px; letter-spacing: -0.022em; line-height: 1.18; margin-top: -0.09em; margin-bottom: -0.09em; text-wrap-mode: wrap; min-width: fit-content;" data-selectable-paragraph=""&gt;dotnet run&lt;/span&gt;&lt;/pre&gt;
&lt;p id="b6b3" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;เข้าไปที่&amp;nbsp;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="http://localhost:5000/KibanaLog/CreateInformationLog" target="_blank" rel="noopener ugc nofollow"&gt;http://localhost:5000/KibanaLog/CreateInformationLog&lt;/a&gt;&lt;/p&gt;
&lt;figure class="mr ms mt mu mv nk nh ni paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="nh ni nj" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 685px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*rjaCjdm4k6XbhHZzSsYtIQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*rjaCjdm4k6XbhHZzSsYtIQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*rjaCjdm4k6XbhHZzSsYtIQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*rjaCjdm4k6XbhHZzSsYtIQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*rjaCjdm4k6XbhHZzSsYtIQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rjaCjdm4k6XbhHZzSsYtIQ.png 1100w, https://miro.medium.com/v2/resize:fit:1370/format:webp/1*rjaCjdm4k6XbhHZzSsYtIQ.png 1370w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 685px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*rjaCjdm4k6XbhHZzSsYtIQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*rjaCjdm4k6XbhHZzSsYtIQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*rjaCjdm4k6XbhHZzSsYtIQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*rjaCjdm4k6XbhHZzSsYtIQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*rjaCjdm4k6XbhHZzSsYtIQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*rjaCjdm4k6XbhHZzSsYtIQ.png 1100w, https://miro.medium.com/v2/resize:fit:1370/1*rjaCjdm4k6XbhHZzSsYtIQ.png 1370w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 685px" data-testid="og" /&gt;&lt;img class="bh nl nm c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:856/1*rjaCjdm4k6XbhHZzSsYtIQ.png" alt="" width="685" height="517" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;figcaption class="nn no np nh ni nq nr bf b bg z ea" style="box-sizing: inherit; line-height: 20px; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #6b6b6b; margin-left: auto; margin-right: auto; margin-top: 10px; text-align: center; max-width: 728px;" data-selectable-paragraph=""&gt;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="http://localhost:5000/KibanaLog/CreateInformationLog" target="_blank" rel="noopener ugc nofollow"&gt;http://localhost:5000/KibanaLog/CreateInformationLog&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote class="ov ow ox" style="box-sizing: inherit; margin: 0px 0px 0px -20px; box-shadow: #242424 3px 0px 0px 0px inset; padding-left: 23px;"&gt;
&lt;p id="cd99" class="ku kv ok kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-style: italic; font-size: 20px;" data-selectable-paragraph=""&gt;กลับมาที่ Kibana -&amp;gt;&amp;nbsp;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="http://localhost:5601/app/discover" target="_blank" rel="noopener ugc nofollow"&gt;http://localhost:5601/app/discover&lt;/a&gt;&lt;br style="box-sizing: inherit;" /&gt;ในช่อง Search พิมพ์ค้นหาตามนี้&lt;br style="box-sizing: inherit;" /&gt;message: &amp;ldquo;_Log Testing&amp;rdquo;หรือ level:&amp;rdquo;Information&amp;rdquo;&lt;span class="fs" style="box-sizing: inherit; font-style: normal;"&gt;&lt;br style="box-sizing: inherit;" /&gt;&lt;/span&gt;ก็จะเจอ Log ที่เราเขียนลงไปเป็นอันเสร็จเรียบร้อยครับผม 🎉🎉🎉🎉&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class="mr ms mt mu mv nk nh ni paragraph-image" style="box-sizing: inherit; margin: 56px auto 0px; clear: both;"&gt;
&lt;div class="om on cd oo bh op" style="box-sizing: inherit; width: 680px; position: relative; cursor: zoom-in; z-index: auto; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1);" tabindex="0" role="button"&gt;
&lt;div class="nh ni pb" style="box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1347px;"&gt;&lt;picture style="box-sizing: inherit;"&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*o5HDBsbbTA3IwDCvLStO3w.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*o5HDBsbbTA3IwDCvLStO3w.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*o5HDBsbbTA3IwDCvLStO3w.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*o5HDBsbbTA3IwDCvLStO3w.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*o5HDBsbbTA3IwDCvLStO3w.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*o5HDBsbbTA3IwDCvLStO3w.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*o5HDBsbbTA3IwDCvLStO3w.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /&gt;&lt;source style="box-sizing: inherit;" srcset="https://miro.medium.com/v2/resize:fit:640/1*o5HDBsbbTA3IwDCvLStO3w.png 640w, https://miro.medium.com/v2/resize:fit:720/1*o5HDBsbbTA3IwDCvLStO3w.png 720w, https://miro.medium.com/v2/resize:fit:750/1*o5HDBsbbTA3IwDCvLStO3w.png 750w, https://miro.medium.com/v2/resize:fit:786/1*o5HDBsbbTA3IwDCvLStO3w.png 786w, https://miro.medium.com/v2/resize:fit:828/1*o5HDBsbbTA3IwDCvLStO3w.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*o5HDBsbbTA3IwDCvLStO3w.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*o5HDBsbbTA3IwDCvLStO3w.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og" /&gt;&lt;img class="bh nl nm c" style="box-sizing: inherit; vertical-align: middle; width: 680px; max-width: 100%; height: auto;" role="presentation" src="https://miro.medium.com/v2/resize:fit:875/1*o5HDBsbbTA3IwDCvLStO3w.png" alt="" width="700" height="312" /&gt;&lt;/picture&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ab ce ns nt nu nv" style="box-sizing: inherit; display: flex; justify-content: center; margin-top: 32px; margin-bottom: 14px; padding-top: 24px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="fl fm fn fo fp" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="ab ce" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="cl bh ex ey ez fa" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;p id="f10a" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;&lt;span class="kw ft" style="box-sizing: inherit; font-weight: bold;"&gt;Source Code&lt;/span&gt;:&amp;nbsp;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://github.com/pichayean/elastic-kibana-dotnet-core-webapi.git" target="_blank" rel="noopener ugc nofollow"&gt;elastic-kibana-dotnet-core-webapi.git&lt;/a&gt;&lt;/p&gt;
&lt;p id="cdf2" class="pw-post-body-paragraph ku kv fs kw b kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr fl bk" style="box-sizing: inherit; margin: 2.14em 0px -0.46em; color: #242424; word-break: break-word; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; font-size: 20px;" data-selectable-paragraph=""&gt;คุณสามารถ เพิ่ม Package ต่างๆเพื่อเพิ่มความสามารถได ้เช่น Serilog.Exceptions Nuget Package สามารถ ตั้งค่า Level ที่ต้องการให้ บันทึก Log ได้เพื่อลดความวุ่นวายของ Log ที่เราบันทึกลงไป หรือศึกษาเพิ่มเติมได้ที่ด้านล่างนี้เลยครับ&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ab ce ns nt nu nv" style="box-sizing: inherit; display: flex; justify-content: center; margin-top: 32px; margin-bottom: 14px; padding-top: 24px; padding-bottom: 10px; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;" role="separator"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="fl fm fn fo fp" style="box-sizing: inherit; word-break: break-word; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: medium;"&gt;
&lt;div class="ab ce" style="box-sizing: inherit; display: flex; justify-content: center;"&gt;
&lt;div class="cl bh ex ey ez fa" style="box-sizing: inherit; width: 680px; min-width: 0px; margin: 0px 24px; max-width: 680px;"&gt;
&lt;h1 id="5e52" class="lt lu fs bf lv lw oa ly lz ma ob mc md me oc mg mh mi od mk ml mm oe mo mp mq bk" style="box-sizing: inherit; margin: 1.25em 0px -0.28em; font-family: sohne, 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #242424; line-height: 30px; letter-spacing: -0.016em; font-size: 24px;" data-selectable-paragraph=""&gt;Resource&lt;/h1&gt;
&lt;ul class="" style="box-sizing: inherit; margin: 0px; padding: 0px; list-style: none none;"&gt;
&lt;li id="5ae4" class="ku kv fs kw b kx of kz la lb og ld le lf oh lh li lj oi ll lm ln oj lp lq lr pc pd pe bk" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; list-style-type: disc; margin-left: 30px; padding-left: 0px; font-size: 20px; margin-top: 0.94em;" data-selectable-paragraph=""&gt;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://www.elastic.co/" target="_blank" rel="noopener ugc nofollow"&gt;ElasticSeach&lt;/a&gt;&lt;/li&gt;
&lt;li id="913d" class="ku kv fs kw b kx pf kz la lb pg ld le lf ph lh li lj pi ll lm ln pj lp lq lr pc pd pe bk" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; list-style-type: disc; margin-left: 30px; padding-left: 0px; font-size: 20px; margin-top: 1.14em;" data-selectable-paragraph=""&gt;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://www.elastic.co/products/kibana" target="_blank" rel="noopener ugc nofollow"&gt;Kibana&lt;/a&gt;&lt;/li&gt;
&lt;li id="53c3" class="ku kv fs kw b kx pf kz la lb pg ld le lf ph lh li lj pi ll lm ln pj lp lq lr pc pd pe bk" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; list-style-type: disc; margin-left: 30px; padding-left: 0px; font-size: 20px; margin-top: 1.14em;" data-selectable-paragraph=""&gt;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://serilog.net/" target="_blank" rel="noopener ugc nofollow"&gt;Serilog&lt;/a&gt;&lt;/li&gt;
&lt;li id="0b9e" class="ku kv fs kw b kx pf kz la lb pg ld le lf ph lh li lj pi ll lm ln pj lp lq lr pc pd pe bk" style="box-sizing: inherit; color: #242424; line-height: 32px; letter-spacing: -0.003em; font-family: source-serif-pro, Georgia, Cambria, 'Times New Roman', Times, serif; margin-bottom: -0.46em; list-style-type: disc; margin-left: 30px; padding-left: 0px; font-size: 20px; margin-top: 1.14em;" data-selectable-paragraph=""&gt;&lt;a class="ag ls" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;" href="https://www.humankode.com/asp-net-core/logging-with-elasticsearch-kibana-asp-net-core-and-docker" target="_blank" rel="noopener ugc nofollow"&gt;logging-with-elasticsearch-kibana-asp-net-core-and-docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
  <author>C</author>
  <category>elasticsearch</category>
  <category>kibana</category>
  <category>csharp</category>
  <category>csharp</category>
  <guid isPermaLink="false">http://knowledges.codingholiday.com/blog/จัดการ log ด้วย elasticsearch, kibana, .netcore/</guid>
  <pubDate>Sun, 20 Apr 2025 02:36:49 GMT</pubDate>
</item></channel>
</rss>