<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Phongphan Phienphanich</title>
    <description>The latest articles on DEV Community by Phongphan Phienphanich (@kapong).</description>
    <link>https://dev.to/kapong</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F306020%2F6ec39e87-a044-427d-b47d-06ba6d0ac0f1.jpeg</url>
      <title>DEV Community: Phongphan Phienphanich</title>
      <link>https://dev.to/kapong</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kapong"/>
    <language>en</language>
    <item>
      <title>[UPDATE] มุด Proxy ย้อนกลับ</title>
      <dc:creator>Phongphan Phienphanich</dc:creator>
      <pubDate>Wed, 11 Aug 2021 08:53:28 +0000</pubDate>
      <link>https://dev.to/kapong/update-proxy-6c7</link>
      <guid>https://dev.to/kapong/update-proxy-6c7</guid>
      <description>&lt;p&gt;จากการโพส &lt;a href="https://dev.to/kapong/proxy-3pcm"&gt;https://dev.to/kapong/proxy-3pcm&lt;/a&gt; ลง Facebook แล้วได้คำแนะนำจาก &lt;a href="https://www.facebook.com/koonnarate"&gt;@นเรศ เก็จรัมย์&lt;/a&gt; พบว่ามีวิธีที่สั้นกว่ามาก โดย SSH Client สามารถทำ SOCKS Proxy ได้ในตัวอยู่แล้ว (จริงๆ เอาไว้เพื่อทำ Tunnel) เราก็สามารถใช้ SOCKS ตัวนั้นเป็น Proxy Server ย้อนกลับมาได้เลย&lt;/p&gt;

&lt;h1&gt;
  
  
  ด้วย
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ssh -R &amp;lt;port&amp;gt; &amp;lt;user&amp;gt;@&amp;lt;host&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หลังจากนั้น เมื่อเข้าไป Server แล้วก็กำหนด HTTP Proxy เพื่อใช้งานได้โดย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export {http,https,ftp,rsync,dns}_proxy=socks5h://127.0.0.1:&amp;lt;port&amp;gt;
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ก็เสร็จเลย ข้ามไปหลายขั้นตอนเลยทีเดียว&lt;/p&gt;

&lt;h2&gt;
  
  
  เพิ่มเติม 1
&lt;/h2&gt;

&lt;p&gt;มี software ที่จะช่วยให้ใช้ proxy http เป็นบางคำสั่งได้ นั่นคือ &lt;code&gt;proxychains&lt;/code&gt; ลองค้นๆต่อเอานะ ก็สะดวกไปอีกแบบ&lt;/p&gt;

&lt;h2&gt;
  
  
  เพิ่มเติม 2
&lt;/h2&gt;

&lt;p&gt;เปลี่ยน &lt;code&gt;-R&lt;/code&gt; เป็น &lt;code&gt;-D&lt;/code&gt; คือกลับทิศกัน&lt;/p&gt;

</description>
      <category>ssh</category>
      <category>tunnel</category>
      <category>socks</category>
    </item>
    <item>
      <title>มุด Proxy ย้อนกลับ</title>
      <dc:creator>Phongphan Phienphanich</dc:creator>
      <pubDate>Wed, 24 Feb 2021 08:34:56 +0000</pubDate>
      <link>https://dev.to/kapong/proxy-3pcm</link>
      <guid>https://dev.to/kapong/proxy-3pcm</guid>
      <description>&lt;h2&gt;
  
  
  เกริ่น ข้ามไปก็ได้
&lt;/h2&gt;

&lt;p&gt;ปัญหาหนึ่งที่น่ารำคาญเมื่อวาง Server ไว้ที่ Colocation ต่างๆ ส่วนใหญ่ที่จะเจอคือ "ราคาค่า Inter(national) Bandwidth" ที่ค่อนข้างแพง เวลาจะจ่ายก็ต้องให้เหตุผลต่างๆนาๆ ว่ามีบริการที่ต้องวิ่งไปต่างประเทศหรือให้บริการต่างประเทศเยอะแค่ไหน คุ้มมั๊ย ใช่ครับหลายบริการแทบจะไม่ได้สนใจให้บริการต่างประเทศเลย ดังนั้นงบก็ไม่ cover ส่วนนี้&lt;/p&gt;

&lt;p&gt;ใช่ครับ ฟังดูดี แต่ๆๆๆ ตอนจะ update patch/security หรือ update อื่นๆ (โดยเฉพาะพวก NVIDIA repo) ที่บางตัวใหญ่มากๆ และไม่มี repo ในไทย รอกันทีหลับแล้วหลับอีกก็อัพเดจไม่เสร็จ (แถมขยันมี update ซะด้วย)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nDmL9jV3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mk5u3k75kcztbkbygfyi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nDmL9jV3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mk5u3k75kcztbkbygfyi.png" alt="110 kB/s"&gt;&lt;/a&gt;&lt;br&gt;
นี่คือตัวอย่างความเร็วปกติของ inter bandwidth บนเครื่อง&lt;/p&gt;

&lt;p&gt;อีกด้านหนึ่ง เน็ตบ้านหรือเน็ตสำนักงาน ถูกและเร็ว แถมไม่เกี่ยงเท่าไหร่ว่าเป็นในประเทศหรือต่างประเทศ แรงเร็วถูก แซงหน้าเน็ต colocation ที่ซื้อ (ไม่เถียงครับว่าเทียบกันไม่แฟร์)&lt;/p&gt;

&lt;p&gt;ผมเลยเกิด idea หนึ่งคือ ถ้าลองเอาบ้านเราเป็น proxy แล้วให้ server วิ่งย้อนกลับมา (บ้านเราอยู่ในประเทศแน่ๆ) ให้ออกเน็ตที่บ้านเราจะเป็นยังไง จนพบทางออกครับ ดังนี้ ...&lt;/p&gt;
&lt;h1&gt;
  
  
  เริ่มกันเลย
&lt;/h1&gt;

&lt;p&gt;ก่อนอื่นเรามาสร้าง Squid Container ที่เครื่องเราก่อน (แน่นอนต้องแบบ Docker ดังนั้นขอข้ามขั้นตอนการลง Docker ไปเลย)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -itd -p 3128:3128 b4tman/squid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ใครจะเพิ่มเติมอะไรก็ตามสะดวก&lt;/p&gt;

&lt;p&gt;ต่อด้วย การเพิ่ม Remote Forward Tunnel ไปยัง Server ในคำสั่ง SSH (&lt;code&gt;-R 3128:127.0.0.1:3128&lt;/code&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh -R 3128:127.0.0.1:3128 &amp;lt;user&amp;gt;@&amp;lt;server&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้นสั่งให้ SSH Session (คำสั่งนี้จะไม่ส่งผลต่อ SSH Session อื่น และเมื่อปิดก็จะหายไป) นั้นใช้ Proxy ผ่าน port ที่ forward ให้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export http_proxy=http://127.0.0.1:3128
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
export dns_proxy=$http_proxy
export rsync_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เป็นอันจบพิธี เรามาลองความเร็วกัน&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jP5WN5VD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/udeefn3c7nv2lybd5254.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jP5WN5VD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/udeefn3c7nv2lybd5254.png" alt="6344 kB/s"&gt;&lt;/a&gt;&lt;br&gt;
เร็วขึ้นในระดับที่ใช้ได้ไม่หงุดหงิด (อาจจะมี Overhead ไม่ได้วิ่งได้เต็มขนาดนั้น) ถือว่าแจ่มเลยครับ&lt;/p&gt;

&lt;p&gt;ขอสารภาพว่า Capture ไม่ทันใน file เดียวกันที่ download แต่ก็เป็น Inter bandwidth เหมือนกันน่าจะพอทดแทนกันได้&lt;/p&gt;

&lt;p&gt;ไว้เดี๋ยวมาแชร์วิธีการมุดแปลกๆใหม่อีก รอติดตามนะฮว๊าฟๆๆๆ&lt;/p&gt;

</description>
      <category>squid</category>
      <category>ssh</category>
      <category>tunnel</category>
      <category>docker</category>
    </item>
    <item>
      <title>ติดตั้ง tmate server</title>
      <dc:creator>Phongphan Phienphanich</dc:creator>
      <pubDate>Sat, 16 Jan 2021 05:48:29 +0000</pubDate>
      <link>https://dev.to/kapong/tmate-server-6c</link>
      <guid>https://dev.to/kapong/tmate-server-6c</guid>
      <description>&lt;p&gt;หลังจากที่ได้ลองเล่น tmate มาสักพักใหญ่ รู้สึกประทับใจในความเร็ว และความสะดวกมากมาย (แม้ยังติดปัญหาเล็กน้อยในการใช้ ssh บน Windows)&lt;/p&gt;

&lt;p&gt;วันนี้มีคนใจดีบริจาค VPS มาให้ลองเล่น tmate server เลยจัดไปสักหน่อย เดี๋ยวเสียน้ำใจ 555+ มาลุยกันเลย&lt;/p&gt;

&lt;h1&gt;
  
  
  ติดตั้ง tmate server
&lt;/h1&gt;

&lt;p&gt;เริ่มต้นจากสร้าง Private Key สำหรับ tmate server ก่อน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/tmate-io/tmate-ssh-server/master/create_keys.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uoIe_3-K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ws5bluq4prlvuq33af1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uoIe_3-K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ws5bluq4prlvuq33af1i.png" alt="Screenshot 2021-01-16 121827"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;จดสองบรรทัดสุดท้ายไว้ เพราะเราต้องไป Set ให้เครื่องที่ต้องการต่อ tmate&lt;/p&gt;

&lt;p&gt;จากนั้นลง docker engine (ในเครื่องใครมีแล้วก็ข้ามได้)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://get.docker.com | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;สุดท้ายก็สั่งรัน tmate-server image&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -itd --name tmate -v $PWD/keys:/keys --cap-add SYS_ADMIN -e SSH_KEYS_PATH=/keys -e SSH_HOSTNAME=&amp;lt;hostname&amp;gt; -p 2200:2200  tmate/tmate-ssh-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โดยที่ &lt;code&gt;&amp;lt;hostname&amp;gt;&lt;/code&gt; คือ domain ที่จะใช้ในการ connect tmate&lt;/p&gt;

&lt;h1&gt;
  
  
  ตั้งค่าเครื่องที่ต้องการใช้ tmate
&lt;/h1&gt;

&lt;p&gt;ติดตั้ง tmate ที่เครื่อง &lt;a href="https://dev.to/kapong/ssh-session-1md0"&gt;ตามบทความก่อนหน้า&lt;/a&gt; แล้วตั้งค่าไฟล์ &lt;code&gt;~/.tmate.conf&lt;/code&gt; ดังนี้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;set -g tmate-server-host "&amp;lt;hostname&amp;gt;"
set -g tmate-server-port 2200
set -g tmate-server-rsa-fingerprint SHA256:tU84BnNHSoqk6o+fB96xPu7Hoikr3GNrz8+o9bIAp3M
set -g tmate-server-ed25519-fingerprint SHA256:2gohOJWkDjf+6t8OAbEW/fk8z1w2UbXFHa3mjoxEmWA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;สองบรรทัดสุดท้ายคือที่ได้จากขั้นตอนการสร้าง Private Key ข้างบน จากนั้นรันคำสั่ง &lt;code&gt;tmate&lt;/code&gt; ตามปกติ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q4Qq-MHc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/o3spbslmgqbslveo9ay9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q4Qq-MHc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/o3spbslmgqbslveo9ay9.png" alt="Screenshot 2021-01-16 124718"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;หยุดตรงนี้ก็ได้ แต่ใครจะไปต่อก็จัดไป&lt;/p&gt;

&lt;h1&gt;
  
  
  สร้าง Easy Install Script (Docker Image)
&lt;/h1&gt;

&lt;p&gt;เพื่อให้ไปตั้งค่าในเครื่องใหม่ง่ายขึ้น หรือจะส่งให้ปลายทางติดตั้งได้ง่าย ก็ควรจะต้องทำ script อัตโนมัติให้ ขั้นตอนจะได้ไม่เยอะ สามารถทำได้โดย&lt;/p&gt;

&lt;p&gt;สร้าง Docker โดยมีไฟล์ต่างๆ ดังนี้&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lsfnP12J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5h3mgcpn7s3dyb4bim7z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lsfnP12J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5h3mgcpn7s3dyb4bim7z.png" alt="Screenshot 2021-01-16 123113"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dockerfile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM nginx:alpine

ADD nginx.conf /etc/nginx/
ADD *.sh /usr/share/nginx/html/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nginx.conf&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;worker_processes 2;

events { worker_connections 1024; }

http {
    include    mime.types;
    sendfile on;
    server {
        root /usr/share/nginx/html/;
        index install.sh;
        server_name t.ondev.link;
        listen 80;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;install.sh&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/bash
set -e

# t.ondev.link tmate installation script
# This script is meant for quick &amp;amp; easy install via:
#   $ curl -fsSL http://&amp;lt;hostname&amp;gt; | bash

arch=$(dpkg --print-architecture)

curl -fL https://github.com/tmate-io/tmate/releases/download/2.4.0/tmate-2.4.0-static-linux-${arch}.tar.xz -o /tmp/tmate.tar.xz

tar -xvf /tmp/tmate.tar.xz &amp;gt; /dev/null
mv tmate-*/tmate /usr/local/bin/
chmod +x /usr/local/bin/

rm -rf tmate-* /tmp/tmate.tar.xz

echo "set -g tmate-server-host \"&amp;lt;hostname&amp;gt;\"" &amp;gt; ~/.tmate.conf
echo "set -g tmate-server-port 2200" &amp;gt;&amp;gt; ~/.tmate.conf
echo "set -g tmate-server-rsa-fingerprint SHA256:tU84BnNHSoqk6o+fB96xPu7Hoikr3GNrz8+o9bIAp3M" &amp;gt;&amp;gt; ~/.tmate.conf
echo "set -g tmate-server-ed25519-fingerprint SHA256:2gohOJWkDjf+6t8OAbEW/fk8z1w2UbXFHa3mjoxEmWA" &amp;gt;&amp;gt; ~/.tmate.conf

echo "Done"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;** อย่าลืมแก้ค่า &lt;code&gt;&amp;lt;hostname&amp;gt;&lt;/code&gt; และ SHA256 ทั้งสองบรรทัดสุดท้าย **&lt;/p&gt;

&lt;p&gt;เมื่อพร้อมแล้วก็สร้าง docker image และรันได้เลย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t tmate-setup .
docker run -itd -p 80:80 --name tmate-setup tmate-setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เมื่อเรียบร้อย ก็แจ้งให้ปลายทางรันคำสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL http://&amp;lt;hostname&amp;gt; | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;คำสั่งนี้จะติดตั้งและตั้งค่าทั้งหมดให้ ปลายทางก็สามารถรัน &lt;code&gt;tmate&lt;/code&gt; ต่อได้เลยครับ ezez&lt;/p&gt;

</description>
      <category>tmate</category>
      <category>tmateserver</category>
    </item>
    <item>
      <title>ประสบการณ์ย้าย Container ข้าม partition</title>
      <dc:creator>Phongphan Phienphanich</dc:creator>
      <pubDate>Mon, 15 Jun 2020 12:03:27 +0000</pubDate>
      <link>https://dev.to/kapong/container-partition-49ld</link>
      <guid>https://dev.to/kapong/container-partition-49ld</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bzc22-2n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ft2altapk8jhwwfph75c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bzc22-2n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ft2altapk8jhwwfph75c.png" alt="HDD100%"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;บังเอิญ (จริงๆ ก็คิดไว้แล้วว่าต้องมีวันนี้) วันที่ Docker Host ที่วางไว้ใช้สำหรับให้น้องๆ ได้ Dev เกิด Harddisk เต็มแต่ติดปัญหาที่ว่า แต่ละตัวก็ไม่ใช่ Docker ที่จะ Commit แล้วสร้างขึ้นใหม่ได้ (ทั้งข้อมูลก็ไม่ควรที่จะเป็น docker image แต่อย่างใด แต่ก็ลบไม่ได้) สิ่งที่คิดได้อย่างเดียวคือ "ย้าย" มันไปไว้ Harddisk ลูกอื่นซะ&lt;/p&gt;

&lt;p&gt;แต่ยังไงหละที่จะไม่ทำให้ข้อมูลหาย หรือย้ายไปแล้วยังสามารถใช้งานได้อยู่ อ่านๆไปอ่านๆ ก็ตกลงปลงใจที่จะใช้ประยุกต์จาก &lt;a href="https://github.com/moby/moby/issues/3127"&gt;https://github.com/moby/moby/issues/3127&lt;/a&gt; ดังนี้&lt;/p&gt;

&lt;p&gt;ขั้นแรก ปิด Docker ก่อนเลย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo service docker stop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;จากนั้นสร้าง Directory ปลายทาง ที่ต้องการซึ่งจะอยู่บน HDD อีกลูก (ในที่นี้สมมุติไปที่  /somewhere/extra) แล้วจัดการย้ายไฟล์&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mkdir -p /somewhere/extra
sudo rsync -av --progress /var/lib/docker/* /somewhere/extra/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;จากนั้นเพิ่ม parameter ให้ dockerd เพื่อที่จะอ่านค่าที่อยู่ใหม่โดยทำได้ 2 วิธีคือ แก้ไขไฟล์ &lt;code&gt;/etc/default/docker&lt;/code&gt; โดยเพิ่ม&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -g /mnt/extra/docker"
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;หรือหากใครใช้ไฟล์ &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt; ก็สามารถแก้ไขไฟล์นี้โดยเพิ่ม&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  ...
  "data-root": "/somewhere/extra",
  ...
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;สวดมนต์และภาวนา จากนั้นก็เปิด Docker ได้เลย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo service docker start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;หากว่าทุกอย่างกลับมาอย่างปกติ ก็ลบ &lt;code&gt;/var/lib/docker&lt;/code&gt; ออกได้เลยครับ&lt;/p&gt;

&lt;p&gt;ไม่ยาก แต่ลุ้นโคตรๆ&lt;/p&gt;

&lt;p&gt;May the force be with you. :)&lt;/p&gt;

</description>
      <category>docker</category>
      <category>backup</category>
    </item>
    <item>
      <title>แชร์ SSH Session ข้ามเครือข่าย</title>
      <dc:creator>Phongphan Phienphanich</dc:creator>
      <pubDate>Mon, 25 May 2020 08:53:06 +0000</pubDate>
      <link>https://dev.to/kapong/ssh-session-1md0</link>
      <guid>https://dev.to/kapong/ssh-session-1md0</guid>
      <description>&lt;p&gt;ประเดิม dev.to ด้วยเรื่องนี้ก่อนเลย&lt;/p&gt;

&lt;h2&gt;
  
  
  ที่มา - ข้ามไปได้
&lt;/h2&gt;

&lt;p&gt;มี Pain Point หนึ่งเมื่อต้อง Support ลูกค้าจำนวนมากๆ โดยต้อง SSH เข้าไปยัง Server ปลายทาง ที่ลูกค้าไม่อยากให้เราเข้าถึง IP ตรงๆ และรู้ Username/Password (ผมก็ไม่อยากรู้ให้เดือดร้อนในภายหลัง)&lt;/p&gt;

&lt;p&gt;วิธีที่คิดออกไวๆ คือ Anydesk (หรือ Team Viewer) เข้าไปยังเครื่องของลูกค้า ที่ลูกค้า SSH ต่อไปยัง Server ปลายทางให้เรียบร้อย มันก็ดี แต่มีปัญหาเรื่อง Bandwidth ที่ใช้พอตัวอยู่ แถมขนาดหน้าจอก็เล็กอีกต่างหาก หาวิธีตั้งนานจนในที่สุดได้พบเจอกับ &lt;a href="https://tmate.io"&gt;Tmate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ความดีงามคือ ลงง่าย ใช้ง่าย (ยิ่งใช้ Tmux มาอยู่แล้วยิ่งง่าย) ไม่กี่คำสั่ง และการ Copy URL ให้ปลายทาง ก็เป็นอันเรียบร้อย&lt;/p&gt;

&lt;h2&gt;
  
  
  Tmate
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tmate.io"&gt;Tmate&lt;/a&gt; เป็น Opensource ตัวหนึ่งพัฒนาต่อมาจาก Tmux เพื่อให้สามารถแชร์ Session ข้ามเครือข่ายได้ (HTTP, SSH) โดยอาศัย Server ตัวกลางอีกทอดหนึ่ง (ตอนนี้ยังฟรี) มีบนหลาย OS มากๆ ยกเว้น Windows วิธีการติดตั้งก็จะคล้ายกับการติดตั้ง Software ทั่วไป (มีบน repo official ของหลาย OS แล้ว) เช่น &lt;/p&gt;

&lt;p&gt;ใน Ubuntu&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt-get update &amp;amp;&amp;amp; apt-get install -y tmate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;หรือใน MacOS ก็ลงผ่าน Home Brew ได้เลย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install tmate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;(ควรอัพเดจเป็น version 2.4 ขึ้นไปเพื่อ feature ที่มากขึ้น แต่อาจจะต้อง compile เอง)&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีใช้
&lt;/h2&gt;

&lt;p&gt;สั่งผ่านคำสั่ง &lt;code&gt;tmate&lt;/code&gt; บน Terminal Session &lt;strong&gt;ของ User ที่ต้องการ&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LtgcXljV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mhjj04o6u8mh9ia3jo4v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LtgcXljV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mhjj04o6u8mh9ia3jo4v.png" alt="CMD"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;จะปรากฏ information สำหรับการเชื่อมต่อ มีทั้งการเชื่อมต่อแบบ Read-only และการเชื่อมต่อแบบที่ผู้เข้าร่วมสามารถพิมพ์ Command ได้ด้วย ก็ Copy information นี้ส่งให้คนที่อยากเข้าร่วมครับ เมื่อพร้อมก็กด &lt;code&gt;q&lt;/code&gt; หรือ &lt;code&gt;Ctrl + c&lt;/code&gt; เพื่อออกจากหน้านี้แล้วเริ่ม Session ครับ&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z19DF_bW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8w51edxgpcpyy2xdj39c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z19DF_bW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8w51edxgpcpyy2xdj39c.png" alt="Connection"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Session ID จะถูก Random ใหม่ทุกครั้ง และมีการเข้าร่วม 2 รูปแบบคือแบบ SSH และแบบ HTTP &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fXn3FX9h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wvxxmy58n447b3dg9spo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fXn3FX9h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wvxxmy58n447b3dg9spo.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หากดูข้อความไม่ทันสามารถใช้คำสั่ง &lt;code&gt;tmux show-message&lt;/code&gt; เพื่อขอดู information การ connect อีกครั้งครับ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CydqaZcF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7uuy7wqjrdefiek89rmk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CydqaZcF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7uuy7wqjrdefiek89rmk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ข้อควรระวัง&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;การ Detach (Ctrl + b, d) แบบ tmux ทำให้ออกจาก tmate ได้แต่ Session จะไม่ตัด และจะไม่สามารถ Attach กลับมาได้ (พยายามลองแล้วไม่มี) หากไม่สามารถกลับเข้าไปได้แล้วอยากจะปิด session ก็ลอง kill จาก pid โดยใช้คำสั่ง &lt;code&gt;ps aux | grep tmate&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;จะหยุด Session ได้ก็ต่อเมื่อ &lt;code&gt;exit&lt;/code&gt; จนหมด ทุกคนที่เชื่อมต่ออยู่ก็จะหลุดทุกคนอัตโนมัติ &lt;strong&gt;แต่อย่าลืม&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>linux</category>
      <category>ssh</category>
      <category>tmate</category>
    </item>
  </channel>
</rss>
