Photo by Harrison Broadbent on Unsplash
์ ๋ AWS Lightsail๋ก ๊ฐ์ธ ์๋ฒ๋ฅผ ์ด์ฉํ๊ณ ์์ต๋๋ค. ๊ฐ๋จํ ์น ์๋น์ค๋ ์ฌ๋ฌ ๊ฐ์ง ํ
์คํธ๋ฅผ ํ ๋ ์ฌ์ฉํ๋๋ฐ์, ๊ฐ์ฅ ์์ ์ธ์คํด์ค๋ฅผ ์ด์ฉํด๋ ๋งค๋ฌ ์ฝ 4.3๋ฌ๋ฌ๊ฐ๋์ ๊ธ์ก์ด ์ฒญ๊ตฌ๋ฉ๋๋ค. EC2์ t2.micro
๊ฐ ๊ฐ์ฅ ์์ ์ธ์คํด์ค์๋ ๋์ ๋นํ๋ฉด ์ ๋ฐ ๊ฐ๊ฒฉ์ผ๋ก ์ ๋ ดํ์ง๋ง(2019-07-12 ์์ธ ๋ฆฌ์ ๊ธฐ์ค ์ฝ 10๋ฌ๋ฌ/์), ๊ทธ๋๋ ๋ณ๋ฌ๋ฆฌ ์ฌ์ฉํ์ง ์์ ๋์๋ ์ง์์ ์ผ๋ก ์ฒญ๊ตฌ๋๋ ๊ฒ ์๊น๊ฒ๋ง ๋๊ปด์ง๋๋ค.
๋ ๋ง์นจ, ์ฑ
์ ์ ๋ฐ์ค์ ๋ด์ ธ๊ฒจ์๋ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด๊ฐ ๋์ ๋ค์ด์์ต๋๋ค. ํธ๊ธฐ์ฌ์ ๊ตฌ์
ํ๋ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด๋ 3 ๋ชจ๋ธ B+๋ก 1.4GHz ์ฟผ๋์ฝ์ด, 1GB RAM๋ก ํ ์๋ฒ๋ฅผ ๊ตฌ๋ํ๊ธฐ์ ์ถฉ๋ถํ ์ฑ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. (์ฌ์ง์ด ๋จ์ ๋น๊ต๋ง ๋๊ณ ๋ณด๋ฉด ๋ด๊ฐ ์ฌ์ฉํ๋ 1์ฝ์ด, 512MB RAM์ Lightsail ์ธ์คํด์ค๋ณด๋ค ์ฌ์์ด ์ข์ต๋๋ค). ๋๋ ๊ณ ๋ฏผํ ํ์๋ ์์ด ๋ฐ๋ก ํ์๋ฒ ๊ตฌ์ถ ์์
์ ๋ค์ด๊ฐ์ต๋๋ค.
์๋ฒ ๊ตฌ์ถ ์ ํ์ธ ํ์ ์ฌํญ
์ธ๋ถ์์ ํ ์๋ฒ์ 80, 443 ํฌํธ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ฐ
80, 443 ํฌํธ๋ฅผ ์ด์ฉํ ์น ์๋น์ค๋ฅผ ํ ๊ฒฝ์ฐ ๋ฐ๋์ ํ์ธํด์ผ ํ๋ ์ฌํญ์
๋๋ค. ๊ฐ์ ์ฉ ๊ณต์ ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํฌํธ๊ฐ ๋งํ๋ ๊ฒฝ์ฐ์ ๋ํ ํด๊ฒฐ ๋ฐ ์
์
์ ๋ฐ๋ก ์ ์ง ์๊ฒ ์ต๋๋ค. ์ด ๊ธ์ ์ฝ์ผ์๋ ๋ถ๋ค๊ป์ ํฌํธ ํฌ์๋ฉ, DMZ์ ์ ํ์๋ฆฌ๋ผ ๋ฏฟ์ต๋๋ค.
๋ช๋ช ISP(Internet service provider; ์ธํฐ๋ท ์๋น์ค ์ ๊ณต์)๋ ๊ฐ์ ์ฉ ์ธํฐ๋ท์์ ์๋ฒ ์ด์์ ๋ง๊ธฐ ์ํจ์ธ์ง 80, 443 ๋ฑ ์๋ ค์ง ํฌํธ๋ฅผ ๋ง๊ณ ์์ต๋๋ค. ์๋ฒ๋ฅผ ๋ค ๊ตฌ์ถํ ๋ค์์์์ผ ์ ์์ด ์๋๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ณ ์ข์ ํ์ง ์๋๋ก ํฌํธ๊ฐ ์ด๋ ค์๋์ง ์์
์ ๋ฏธ๋ฆฌ ํ์ธํด๋ด
์๋ค.
๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. ์ปดํจํฐ์ ๊ฐ๋จํ ์น ์๋ฒ๋ฅผ ๋์ฐ๊ณ , ์ธ๋ถ๋ง(์: LTE๋ก ์ฐ๊ฒฐ๋ ์ค๋งํธํฐ)์ผ๋ก ์๋ฒ์ ์ ์์ ์๋ํฉ๋๋ค. ์น ํ์ด์ง๊ฐ ์ ๋ก๋๋๋ฉด ํฌํธ๊ฐ ์ด๋ ค์๋ ๊ฒ์ ๋๋ค.
- ์ธํฐ๋ท ๋ชจ๋(๊ฒธ ๊ณต์ ๊ธฐ)์ ์ปดํจํฐ๋ฅผ ์ง์ ์ฐ๊ฒฐํ์ฌ ๊ณต์ธ IP๋ฅผ ํ ๋น๋ฐ์ต๋๋ค.
- ๊ฐ๋จํ ์น์๋ฒ๋ฅผ ๋๋ ค๋ด
์๋ค. Python http.server ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ โHelloโ๋ผ๊ณ ์ ํ
index.html
์ ํธ์คํ ํด๋ด ์๋ค.
$ mkdir www; cd www
$ touch index.html
$ echo Hello > index.html
$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
์ด์ ์ค๋งํธํฐ ๋ฑ์ ์ด์ฉํด ์ธ๋ถ๋ง์์ ์ ์์ ์๋ํด๋ด ๋๋ค. ์ ์์ ์ฑ๊ณตํ๋ฉด ๋ณ๋ฌธ์ ์์ด 80๋ฒ ํฌํธ๋ฅผ ์ด์ฉํด ์๋น์ค๋ฅผ ํ ์ ์๋ ๊ฒ๋๋ค.
IP๊ฐ ์ง์์ ์ผ๋ก ๋ฐ๋ ์ ์๋ค
๊ฐ์ ์ฉ ์ธํฐ๋ท์ DHCP๋ก ํ ๋น๋ฐ๊ธฐ์ ์ง์์ ์ผ๋ก IP๊ฐ ๋ฐ๋ ์ ์์์ ์ธ์งํด์ผ ํฉ๋๋ค. IP๊ฐ ๋ฐ๋๋ฉด DNS ๋ ์ฝ๋๋ ์๋ก์ด IP์ ์๋ง๊ฒ ๋ณ๊ฒฝ๋ ์ ์๋๋ก Dynamic DNS ๋ฑ์ ์ ์ ์ด ํ์ํฉ๋๋ค.
micro SD
micro SD๋ฅผ ์๋ ๋ฒ์ ์ ์ฌ์ฉํ๋ค๋ฉด IO๊ฐ ๋ค์ ๋๋ฆด ์ ์์ต๋๋ค. ๊ธฐ์์ด๋ฉด ์ฝ๊ธฐ/์ฐ๊ธฐ ์๋๋ฅผ ๋ณด๊ณ ๋น ๋ฅธ ๋ชจ๋ธ๋ก ๊ตฌ๋งค ๋ฐ ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค. ์ฝ๊ธฐ/์ฐ๊ธฐ ์๋๊ฐ ๋๋ฆด ๊ฒฝ์ฐ ์ฌ์ฉํ์๋ฉฐ ๋ต๋ตํจ์ ๋๋ ์ ์์ต๋๋ค.
๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์ ์
- ๋ชจ๋ ์
์
์์
์
macOS
์์์ ์ด๋ฃจ์ด์ก์ต๋๋ค. ๋ช ๋ น์ด ๋ํmacOS
์ ๋ช ๋ น์ด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
OS ์ ํ ๋ฐ ๋ด๋ ค๋ฐ๊ธฐ
์ค๋ ๋ฐฉ์น๋ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ ์ OS๋ฅผ ์ฌ๋ ค์ค์๋ค. ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ๊ณต์ ํํ์ด์ง์๋ NOOBS
, Raspbian
๋ฑ ๋ค์ํ ์ด๋ฏธ์ง๊ฐ ์์ต๋๋ค. ์ ๋ ์๋ฒ๋ก ์ฌ์ฉํ ๋ชฉ์ ์ด๋ผ Ubuntu Server
๋ฅผ ๊ณจ๋์ต๋๋ค. ์ฐ๋ถํฌ๋ ์ต์ํ๊ณ ์ฌ์ฉํ๊ธฐ๋ ์ฌ์ ์ ๊ฐ ์ข์ํ๋ OS์
๋๋ค.
SD Card ํฌ๋งท
๋ด๋ ค๋ฐ๊ธฐ๋ฅผ ๋๋ฅด๊ณ , ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง๋ก ์ด์ฉ๋ micro SD์นด๋๋ฅผ ์ปดํจํฐ์ ์ฐ๊ฒฐํ์ฌ FAT32๋ก ํฌ๋งทํฉ๋๋ค.
๋จผ์ diskutil list
๋ฅผ ์ด์ฉํด Device Node๋ฅผ ํ์ธํฉ๋๋ค. Device Node๋ ๋๋ผ์ด๋ธ๋ฅผ ๋ฐ๊ณ OS ์ด๋ฏธ์ง ๊ธฐ๋กํ ๋ ์ฌ์ฉํฉ๋๋ค.
$ diskutil list
/dev/disk0 (internal):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme 251.0 GB disk0
1: EFI EFI 314.6 MB disk0s1
2: Apple_APFS Container disk1 250.7 GB disk0s2
/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +250.7 GB disk1
Physical Store disk0s2
1: APFS Volume Macintosh HD 119.4 GB disk1s1
2: APFS Volume Preboot 43.9 MB disk1s2
3: APFS Volume Recovery 509.8 MB disk1s3
4: APFS Volume VM 6.4 GB disk1s4
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *127.9 GB disk2
1: Windows_NTFS 127.8 GB disk2s1
์ฉ๋, ์ด๋ฆ ๋ฑ์ผ๋ก micro SD์นด๋์ Device Node๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ micro SD์นด๋๋ /dev/disk2
์
๋๋ค.
๊ทธ๋ฆฌ๊ณ diskutil partitionDisk
๋ช
๋ น์ด๋ฅผ ์ด์ฉํด micro SD์นด๋๋ฅผ FAT32๋ก ํฌ๋งทํฉ๋๋ค. ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
diskutil partitionDisk [DeviceNode] [ํํฐ์
๊ฐฏ์] [ํํฐ์
ํ
์ด๋ธ ์ข
๋ฅ] [ํํฐ์
0ํฌ๋งท ํํฐ์
0์ฌ์ด์ฆ ํํฐ์
1ํฌ๋งท ํํฐ์
1 ์ฌ์ด์ฆ ...]
์ผ๋จ MBR FAT32 ๋จ์ผ ํํฐ์ ์ผ๋ก ํฌ๋งทํ ์์ ์ด๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
์ค์๋ก ๋ค๋ฅธ ๋์คํฌ๋ฅผ ํฌ๋งทํ์ฌ ๋๋๋ฆด ์ ์๋ ์ฌ๊ณ ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ ์คํ ์์ ํฉ๋๋ค.
$ # ํํฐ์
์ฌ์ด์ฆ๋ฅผ 0b๋ก ํ๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์์ญ์ ํ ๋นํฉ๋๋ค.
$ diskutil partitionDisk /dev/disk2 1 MBR "MS-DOS FAT32" ROOT 0b
Started partitioning on disk2
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk2s1 as MS-DOS (FAT32) with name ROOT
512 bytes per physical sector
/dev/rdisk2s1: 249674176 sectors in 3901159 FAT32 clusters (32768 bytes/cluster)
bps=512 spc=64 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=2048 drv=0x80 bsec=249735168 bspf=30478 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished partitioning on disk2
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *127.9 GB disk2
1: DOS_FAT_32 ROOT 127.9 GB disk2s1
์ด์ ์ ๋ด๋ ค๋ฐ์ OS ์ด๋ฏธ์ง ํ์ผ์ -.img.xz
ํ์์ผ๋ก ์์ถ๋์ด์์ต๋๋ค. ์์ถ์ ํ์ด -.img
ํํ๋ก ๋ง๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์คํฌ๋ฅผ ์ธ๋ง์ดํธํ ๋ค์ ๋์คํฌ์ OS ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful
sudo dd bs=1m if=/path/to/image/ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img of=/dev/disk2
ํน์ ์ด ๊ณผ์ ์์, micro SD์นด๋๊ฐ 64GB๋ณด๋ค ์ปค FAT32 ํฌ๋งท์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์๋ ์ปดํจํฐ์์ Win32 Disk Imager
๋ฅผ ์ฌ์ฉํด๋ณด๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ๊ฐ์ด๋๋ ์ฌ๊ธฐ์ ์์ต๋๋ค.
์ ์์ ์ผ๋ก ์๋ฃ๋๋ฉด ์ด๋ฏธ์ง ์ค๋น๋ ๋๋ฌ์ต๋๋ค.
OS ์ ์
๊ธฐ๋ก์ด ์๋ฃ๋๋ฉด SD์นด๋์ ํค๋ณด๋, ๋ง์ฐ์ค, ๋ชจ๋ํฐ, ๋์ ๋ฑ์ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ ์ฐ๊ฒฐํ ๋ค์ ๊ฐ๋ํฉ๋๋ค. ์์ ๋์ค ์ ์ ์ ๊ฒฝ๊ณ ๊ฐ ๊ณ์ ๋ํ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ IO์ฅ์น๋ฅผ ์ ๋ถ ์ฌ์ฉํ์ฌ ๊ทธ๋ฐ ๊ฒ์ด๋ฏ๋ก ๋ฌด์ํฉ๋๋ค.
์ด๊ธฐ ์ด์นด์ดํธ์ ํจ์ค์๋๋ ubuntu
/ubuntu
์
๋๋ค. ๊ฐ์ฅ ๋จผ์ ํ ์ผ์ ์ญ์ ๊ณ์ ์ด๋ฆ๊ณผ ํจ์ค์๋๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. root
๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ๋ค์ ๊ณ์ ์ด๋ฆ ์ ํ ์์
ํ ๋ฃจํธ ๊ณ์ ์ ์ ๊ฐ์ค๋๋ค.
sudo passwd root
exit
# root ๊ณ์ ์ผ๋ก ๋ค์ ๋ก๊ทธ์ธํฉ๋๋ค.
usermod -l rajephon -d /home/rajephon -m ubuntu
groupmod -n rajephon ubuntu
passwd -l root
exit
์๋ก ๋ฐ๋ ๊ณ์ ์ด๋ฆ์ผ๋ก ๋ก๊ทธ์ธ ํ ํจ์ค์๋๋ฅผ ๋ฐ๊ฟ์ค๋๋ค.
passwd rajephon
์ด์ ํจํค์ง๋ค์ ์ต์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ณ โฆ
sudo apt update
sudo apt dist-upgrade
์๊ฐ๋๋ ์ฐ๋ฆฌ๊ฐ ์ฌ๋ ์ง์ญ์ ์๋ง๊ฒ ์ค์ ํฉ์๋ค.
$ timedatectl set-timezone 'Asia/Seoul'
$ date
Sun Jul 7 21:10:37 KST 2019
์๊ฒฉ์์ ์์ ํ๊ธฐ ํธํ๋๋ก ssh๋ฅผ ์ค์นํฉ๋๋ค.
sudo apt install openssh-server openssh-client
์ค์น๊ฐ ์๋ฃ๋๋ฉด ssh ์ ์์ด ์ ๋๋์ง ํ์ธํฉ๋๋ค. ip๋ ip a
๋ช
๋ น์ด๋ฅผ ํตํด ์์ฝ๊ฒ ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋์ปค ์ค์น
๋์ปค๋ ์ง๋ฆฌ์ ๋๋ค. ์ธ์ ์ด๋์์๋ ์ ์ตํ์ฃ . ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋์ปค๋ฅผ ์ค์นํฉ์๋ค.
# WARNING: Always examine scripts downloaded from the internet before running them locally.
curl -fsSL get.docker.com -o get-docker.sh
sudo bash get-docker.sh
์ ์ ๊ณ์ ์์๋ ์ด์ฉํ ์ ์๋๋ก ๊ทธ๋ฃน ์ถ๊ฐ๋ ์์ง ๋ง์๋ค.
sudo usermod -aG docker rajephon
DDNS ์ ์
ํ ์๋ฒ์์ ๋์ ์ผ๋ก ๋ฐ๋๋ IP์ ๋์ํ๊ธฐ ์ํด ํ์์ ์ธ ์์
์
๋๋ค. google domain
, cloudflare
, dnszi
, dnsever
๋ฑ ๋๋ถ๋ถ์ DNS ์๋น์ค๋ ๋ชจ๋ A ๋ ์ฝ๋๋ฅผ ๋ฐ๊ฟ ์ ์๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ๋ Cloudflare๋ฅผ ์ฌ์ฉ ์ค์ด๋ฏ๋ก Cloudflare๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑํฉ๋๋ค.
Cloudflare API์ ๋ง์ถฐ ๋์ํ๋ ํด๋ผ์ด์ธํธ๋ก ddclient๊ฐ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ฝ๊ฐ ๋ฒ๊ฑฐ๋ก์ด ์์
์ด ์๋๋ฐ, apt
๋ ํฌ์ ๋ฑ๋ก๋์ด์๋ ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ 3.8.x ์ง๋ง cloudflare์ ๋ง์ถฐ ์ฌ์ฉํ๋ ค๋ฉด 3.9.0 ๋ณด๋ค ๋์์ผ ํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ก ์ง์ ๋ค์ด๋ก๋ํด์ ์ค์นํด์ผ ํ์ง๋ง, perl๋ก ์์ฑ๋์ด ๋ณ๋์ ๋น๋ ๊ณผ์ ์ด ์์ด๋ ๋๋ฏ๋ก ์ด๋ ต์ง ์์ต๋๋ค.
# ๋์์ ํ์ํ perl ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค.
sudo apt install libjson-any-perl libdata-validate-ip-perl libio-socket-ssl-perl
# ์ต์ ddclient๋ฅผ ๋ด๋ ค๋ฐ๊ณ ,
wget https://sourceforge.net/projects/ddclient/files/ddclient/ddclient-3.9.0/ddclient-3.9.0.tar.gz
# ์์ถ์ ํ์ด์ค๋๋ค.
tar -xvzf ddclient-3.9.0.tar.gz
cd ddclient-3.9.0/
# /sbin ๋ก ddclient๋ฅผ ์ฎ๊ฒจ์ค๋๋ค.
sudo cp ./ddclient /sbin/ddclient
# ์บ์ ๋๋ ํ ๋ฆฌ์ ๊ธฐ๋ณธ ์ค์ ํ์ผ์ ๋ง๋ค์ด์ฃผ๊ณ , ๊ถํ ์กฐ์ ๋ ํด๋ก๋๋ค.
sudo mkdir /var/cache/ddclient
sudo chown rajephon /var/cache/ddclient
sudo mkdir /etc/ddclient
sudo touch /etc/ddclient/ddclient.conf;
sudo chown rajephon /etc/ddclient/ddclient.conf
์ด์ ddclient ์ค์ ํ์ผ์ ์์ฑํฉ๋๋ค.
# Configuration file for ddclient
#
# /etc/ddclient/ddclient.conf
ssl=yes
use=web
protocol=cloudflare
server=api.cloudflare.com/client/v4
login=[Cloudflare ์ด๋ฉ์ผ ์ฃผ์]
password=[Cloudflare APIKEY]
zone=domain.com
domain.com, my.domain.com
API Key๋ Cloudflare์ My Profile
ํญ๋ชฉ์์ ์ฐพ์ ์ ์์ต๋๋ค.
zone
์๋ ๋ด ๋๋ฉ์ธ ์ด๋ฆ์ ์ ๊ณ , ๋ง๋ก ๋ฐ ์ค์ A ๋ ์ฝ๋ IP๋ฅผ ๋ณ๊ฒฝํ ์๋ธ ๋๋ฉ์ธ๋ค์ ์ฝค๋ง(,
)๋ก ๊ตฌ๋ถํ์ฌ ๋์ดํฉ๋๋ค.
์ด์ ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ ์คํธ๋ฅผ ํด๋ด ์๋ค.
$ sudo /sbin/ddclient --force
[sudo] password for rajephon:
SUCCESS: domain.com -- Updated Successfully to 111.222.333.444
SUCCESS: my.domain.com -- Updated Successfully to 111.222.333.444
cloudflare console์ ๋ค์ด๊ฐ ๋ณด๋ฉด IP ์ฃผ์๊ฐ ์
๋ฐ์ดํธ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ ์ ๋์๋ ํ์ธํ์ผ๋ ์ด์ ์ฃผ๊ธฐ์ ์ผ๋ก IP ๋ณ๊ฒฝ ํ์ธ ๋ฐ ์
๋ฐ์ดํธ๋ฅผ ํ ์ ์๊ฒ ๋ง๋ค์ด์ผํฉ๋๋ค. ddclient๋ฅผ ์์ ํ๋ก๊ทธ๋จ ๋ฆฌ์คํธ์ ๊ฑธ์ด๋๊ณ , ddclient์ daemon ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ, cron์ ๋ฑ๋กํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ ๋ cron์ผ๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
sudo crontab -e
๋ก ํฌ๋ก ํญ ํธ์ง๋ชจ๋๋ก ๋ค์ด๊ฐ ์๋์ ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐํฉ๋๋ค.
# 2๋ถ๋ง๋ค IP ์
๋ฐ์ดํธ ํ์ธ ๋ฐ ๊ฐฑ์
*/2 * * * * /sbin/ddclient
์ข ๋ ๋ง์ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ณ ์ถ์ ๊ฒฝ์ฐ, -noquiet -query -verbose -debug
๋ฑ์ ์ต์
์ ์ถ๊ฐํด์ค ์ ์์ต๋๋ค.
- {no}quiet : print {no} messages for unnecessary updates (default: noquiet).
- {no}query : print {no} ip addresses and exit.
- {no}verbose : print {no} verbose information (default: noverbose).
- {no}debug : print {no} debugging information (default: nodebug).
cron์ด ์ ๋๊ณ ์๋ ์ง ๊ถ๊ธํ๋ฉด, syslog๋ฅผ ์ด์ฉํด ํ์ธํ ์ ์์ต๋๋ค.
$ tail /var/log/syslog | grep CRON
Jul 12 19:40:01 ubuntu CRON[13164]: (root) CMD (/sbin/ddclient)
Jul 12 19:42:01 ubuntu CRON[13181]: (root) CMD (/sbin/ddclient)
์น ์๋ฒ ๋์ฐ๊ธฐ
์ด์ ๊ธฐ๋ณธ ์ค๋น๋ ๋๋ฌ์ผ๋ ์๋ฒ๋ฅผ ์ฌ๋ ค๋ด
์๋ค. ์์ ์ค์นํ ๋์ปค๋ฅผ ํ์ฉํฉ๋๋ค.
๋์ปค ์ด๋ฏธ์ง๋ ๋ฏธ๋ฆฌ ์ค๋นํ ์น ์๋น์ค๋ฅผ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด๋ก ๊ฐ์ ธ์ ๋น๋ํ์ต๋๋ค.
docker run --name my-home-page -p 443:443 my-home-image:1.0 -d
์ ๊ทธ๋ผ ์ด์ ์น ๋ธ๋ผ์ฐ์ ๋ก ์์ DDNS๋ก ์ฐ๊ฒฐํ ๋๋ฉ์ธ์ ์ ์ํ๋ฉด,
์ง์! ์ ์์ ์ผ๋ก ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์น ์๋ฒ๋ก ์ ์๋ฉ๋๋ค.
๋ชจ๋ ์์
์ด ์๋ฃ๋์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
์ฌ์ค, DDNS ์
์
์ ํด์ผ ํ๋ค๋ ๊ฒ ๋ง๊ณ ๋ ์ผ๋ฐ์ ์ธ ์ฐ๋ถํฌ ์๋ฒ์ ๋ค๋ฅผ ๊ฒ ์์ต๋๋ค. ๋ ์ด์ ๋์ ๋ด๊ณ ์ฌ์ฉํ๋ ํด๋ผ์ฐ๋ ์๋น์ค๊ฐ ์๋๋ฏ๋ก ๋ณ๋์ ๋ฐฉํ๋ฒฝ์ด๋ ๋ชจ๋ํฐ๋ง ๋ฐ ๋์ ์์คํ
์ด ์๋ ์ ์ด ์กฐ๊ธ ์์ฝ์ง๋ง ํ๋ํ๊ฒ ์ฌ์ฉํ ๊ฒ์ด ์๋๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์์
ํ๋ฉด์ ์ค์ํ๋ ์ ์ ์์์ ์ค๋ช
์ ์ ํ์ง๋ง ์ฒ์์ ์น ์๋ฒ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ๋ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ ์ํคํ
์ฒ๊ฐ arm64๋ก ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋์ณค์ต๋๋ค. macOS์์ ๋ค๋ฅธ ์ํคํ
์ฒ๋ก ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ตฝ๋ ๊ฒ์ ํ์ฌ Edge
์์๋ง ๋๋๋ฐ, Edge๋ Stable์ด ์๋๋ผ ๋น ๋ฅด๊ฒ ํฌ๊ธฐํ๊ณ ์ผ๋จ์ ํ ์๋ฒ ๋ก์ปฌ์์ ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ ์ต๋๋ค.