μ–΄λŠλ‚  μš°μ—°νžˆ 였라클 ν΄λΌμš°λ“œ 인프라(μ΄ν•˜ OCI) μ—μ„œ 프리티어 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆκ³  β€˜λ‚΄κ°€ λ§Œλ“  μ›Ή ν”„λ‘œμ νŠΈλ₯Ό μ„œλΉ„μŠ€ν•  μ„œλ²„λ₯Ό 직접 κ΅¬μΆ•ν•΄λ³΄μž!’ 라고 κ²°μ‹¬ν–ˆλ‹€. μ‹œλ„ν•΄λ³Έ 것은 VM(가상머신)에 CentOS λ₯Ό μ„€μΉ˜ν•˜κ³  docker ν™˜κ²½μ—μ„œ tomcat, nginx, jenkins, MySQL κΉŒμ§€ μ„ΈνŒ…ν•˜μ—¬ λ³΄μ•˜λ‹€. 그리고 μΆ”κ°€μ μœΌλ‘œ 도메인 μ„€μ •, SSL μΈμ¦μ„œ λ°œκΈ‰, NAS μ„œλ²„μ— μžλ™ λ°±μ—… μ„€μ •, Github WebHook κΉŒμ§€ μ„€μ •ν•˜μ—¬ ν”„λ‘œμ νŠΈ ν…ŒμŠ€νŠΈ μš©λ„μ˜ μ›Ή μ„œλ²„λ‘œ μ›ν™œνžˆ μ‚¬μš©ν•  수 μžˆλ„λ‘ 섀정을 ν•˜μ˜€κ³  μž‘μ—…ν•œ λ‚΄μš©μ„ 정리해보렀 ν•œλ‹€.

기쑴에 μ‹œλ†€λ‘œμ§€ NAS에 dockerλ₯Ό μ΄μš©ν•˜λ©΄μ„œ λΉ„μŠ·ν•œ κ²½ν—˜μ„ ν•΄λ΄μ„œ μˆ˜μ›”ν• κ±°λΌ μ°©κ°ν–ˆμ§€λ§Œ κ½€λ‚˜ λ³΅μž‘ν–ˆκ³  μ •λ¦¬ν•œ λ‚΄μš©λ„ λ‹€μ†Œ λΆ€μ‘±ν•œ 것 κ°™λ‹€.

1. μ„œλΉ„μŠ€ κ°€μž…

κ°€μž…μ€ https://www.oracle.com/kr/cloud/free/ μ—μ„œ κ°€λŠ₯ν•˜λ©° κ°€μž…ν•  λ•Œ region 을 μ„œμšΈλ‘œ μž…λ ₯ν•˜λΌλŠ” 이야기가 λ§Žμ•˜λ‹€. μžμ„Έν•œ 사항은 λͺ¨λ₯΄κ² μœΌλ‚˜ 좔후에 변경이 μ–΄λ ΅λ‹€κ³  ν•˜λ‹ˆ 이 λΆ€λΆ„λ§Œ μ²΄ν¬ν•˜λ©΄ 크게 μ–΄λ €μšΈ 사항은 없을 것 κ°™λ‹€. κ°€μž…ν•  λ•Œ μΉ΄λ“œ 인증을 κ±°μΉ˜λŠ”λ° ν•œν™”λ‘œ 1800원 정도 κ²°μ œλ˜μ—ˆλ‹€κ°€ μˆ˜λΆ„ λ‚΄λ‘œ μ·¨μ†Œμ²˜λ¦¬ λ˜μ—ˆλ‹€. κ°€μž…μ„ 마치고 15뢄정도 후에 λ©”μΌλ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” μ•ˆλ‚΄λ₯Ό 받을 수 μžˆμ—ˆλ‹€. (μΉ΄λ“œκ²°μ œλŠ” 읡월에도 ν•œ 번 μ§„ν–‰λ˜μ—ˆλ‹€. 이게 맀달 μΉ΄λ“œ μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜λŠ” 것인가 싢기도 ν•˜λ‹€.)

2. μ„ΈνŒ…

2-1. VM 생성

메인 화면을 보면 ν΄λΌμš°λ“œμ—μ„œ ν™œμš©ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ κΈ°λŠ₯듀이 μžˆλŠ”λ° μ΄μ€‘μ—μ„œ VM instanceλ₯Ό μ„ νƒν–ˆλ‹€.

선택 후에 기본적인 μ„ΈνŒ…μ„ ν•  수 μžˆλŠ” νŽ˜μ΄μ§€κ°€ λ‚˜μ˜€λŠ”λ°, λ‹€μŒ ν•­λͺ©λ“€μ„ μ„ νƒν•˜μ˜€λ‹€.

  • name: μΆ”ν›„ 관리에 μš©μ΄ν•˜λ„λ‘ 식별할 수 μžˆλŠ” 이름 μ§€μ •
  • image: β€˜Always Free-eligible’ 쀑에 μ„ νƒν•˜λ©΄ λ˜λŠ”λ° CentOS 8을 μ„ νƒν–ˆκ³  νŠΉλ³„ν•œ μ΄μœ λŠ” μ—†λ‹€.
  • networking: β€˜Public IP address’ 체크 (μ™ΈλΆ€ 접속을 μœ„ν•΄ ν•„μš”)
  • ssh-keys: SSH 접속을 μœ„ν•΄ ν•„μš”ν•˜λ‹ˆ λ°˜λ“œμ‹œ λ‹€μš΄λ‘œλ“œν•˜μ—¬ μ•ˆμ „ν•œ 곳에 보관
  • volume: β€˜Specify a custom boot volume size’ 선택 ν›„ 50GB μ„€μ •

섀정을 마친 후에 create λ₯Ό ν•˜λ©΄ λœλ‹€.

2-2. λŒ€μ‹œλ³΄λ“œ 확인

μ„€μΉ˜λ₯Ό 마친 ν›„ λŒ€μ‹œλ³΄λ“œμ—μ„œ 곡인아이피와 username 을 μ²΄ν¬ν•œλ‹€. (SSH 접속에 ν•„μš”)

Subnet > Security Lists > Ingress Rules > Add Ingress rules μ—μ„œ 22 포트(http)와 443 포트(https) 3306포트(SQL)λ₯Ό κ°œλ°©ν•΄μ£Όκ³  μΆ”κ°€μ μœΌλ‘œ ν•„μš”ν•œ ν¬νŠΈκ°€ μžˆλ‹€λ©΄ λ§ˆμ°¬κ°€μ§€λ‘œ κ°œλ°©ν•΄μ€€λ‹€.

2-3. SSH 접속

2-3-1. SSH 접속

λ§₯μ—μ„œλŠ” ν„°λ―Έλ„μ—μ„œ ssh 접속이 κ°€λŠ₯ν•˜λ‹€.(μœˆλ„μš°λŠ” ssh ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž¨ λ‹€μš΄λ‘œλ“œ ν•„μš”) μ•„κΉŒ λ‹€μš΄λ°›μ€ ssh-keyκ°€ μœ„μΉ˜ν•œ λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•΄μ„œ ssh 접속을 μ‹œλ„ν•œλ‹€.

# ssh-keyκ°€ μ €μž₯ 된 경둜둜 이동
cd oracle_cloud
# ssh 접속 μ‹œλ„
ssh -i ssh-key.key 아이디@곡인아이피

ν˜Ήμ‹œλ‚˜ κΆŒν•œλ¬Έμ œλ‘œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄ 디렉토리와 ssh-key κΆŒν•œμ„ μˆ˜μ •ν•˜κ³  λ‹€μ‹œ μ‹œλ„ν•΄μ€€λ‹€.

# ssh-key 디렉토리
chmod 0700 oracle_cloud
 
# ssh-key 파일
chmod 0400 ssh-key.key

2-3-2. 루트 λΉ„λ°€λ²ˆν˜Έ λ³€κ²½

ssh 접속이 μ™„λ£Œλ˜μ—ˆλ‹€λ©΄ 루트 및 μœ μ € λΉ„λ°€λ²ˆν˜Έλ₯Ό μ„€μ •ν•΄μ€€λ‹€.

# 루트
sudo passwd root
 
# μœ μ €
sudo passwd opc

2-3-3. ssh-key 없이 둜그인 μ„€μ •

이후 ssh-key 없이 λΉ„λ°€λ²ˆν˜Έλ₯Ό μ΄μš©ν•œ 접속을 μœ„ν•΄μ„œλŠ” sshd_config 파일 μˆ˜μ •μ΄ ν•„μš”ν•˜λ‹€.

# /etc/ssh 디렉토리 μ§„μž…
cd /etc/ssh
 
# μ›λ³ΈνŒŒμΌ λ°±μ—…
sudo cp sshd_config sshd_config.bak
 
# 에디터 μ§„μž…
sudo nano sshd_config

μ—λ””ν„°λ‘œ μ§„μž…ν•˜λ©΄ β€˜PasswordAuthentication’ ν•­λͺ©μ„ μ°Ύμ•„ yes둜 μ„€μ •ν•œλ‹€. (default: no)

이후 sshdλ₯Ό μž¬μ‹€ν–‰ ν•΄μ€€λ‹€.

sudo service sshd reload

2-4. λ¦¬λˆ…μŠ€ λ°©ν™”λ²½ μ„€μ •

λ¦¬λˆ…μŠ€μ— 기본적으둜 iptables λΌλŠ” 방화벽이 μ„€μ •λ˜μ–΄ μžˆλ‹€λŠ”λ°, 였라클 ν΄λΌμš°λ“œμ— 자체적인 방화벽이 μžˆμœΌλ‹ˆ ν•„μš”ν•˜λ‹€λ©΄ 쀑지해도 λœλ‹€κ³  ν•œλ‹€. λ‚΄μš©μ„ 잘 λͺ°λΌ κ·ΈλŒ€λ‘œ λ‘λ €ν–ˆλ‹€κ°€ μ‹œλ„ν•΄λ΄€λŠ”λ° 생각보닀 μ• λ₯Ό 많이 λ¨Ήμ—ˆλ‹€.

# 쀑지
sudo systemctl stop iptables
sudo systemctl stop ip6tables
sudo systemctl stop firewalld
 
# λΉ„ν™œμ„±ν™”
sudo systemctl disable iptables
sudo systemctl disable ip6tables
sudo systemctl disable firewalld
 
# λ‚˜μ€‘μ— ν•„μš”ν•˜λ©΄ unmask
sudo systemctl mask iptables
sudo systemctl mask ip6tables
sudo systemctl mask firewalld
 
# 쀑지 확인
systemctl list-unit-files | grep iptables
systemctl list-unit-files | grep fire
systemctl status firewalld

2-5. yum μ—…λ°μ΄νŠΈ

CentOS λ₯Ό μ„€μΉ˜ν•˜λ©΄μ„œ νŒ¨ν‚€μ§€ κ΄€λ¦¬μžκ°€ yum(dnf), rpm, deb, apt-get, dpkg λ“± λ‹€μ–‘ν•˜κ²Œ μ‘΄μž¬ν•œλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€. λ§₯μ—μ„œ homebrew와 같은 역할이지 μ•Šμ„κΉŒ μ‹Άλ‹€.

sudo yum update
 
sudo yum upgrade

2-6. μ„œλ²„ νƒ€μž„μ‘΄ μ„€μ • & bash ν•œκΈ€ μ„€μ •

μ„€μΉ˜ μ΄ˆκΈ°μ—λŠ” μ‹œκ°„λŒ€κ°€ GMT 기쀀이기 λ•Œλ¬Έμ— λ‘œκ·Έμ— μ‹œκ°„μ΄ μ΄μƒν•˜κ²Œ λ‚˜μ˜¨λ‹€. νƒ€μž„μ‘΄μ„ GMT +9 둜 λ³€κ²½ν•΄μ€€λ‹€.

# νƒ€μž„μ‘΄ μ„€μ •
sudo timedatectl set-timezone Asia/Seoul
# μ„€μ • 확인
timedatectl

.bashrc νŒŒμΌμ„ μˆ˜μ •ν•˜λ©΄ bash μ—μ„œ ν•œκΈ€μ΄ κΉ¨μ§€μ§€ μ•Šκ³  μ •μƒμ μœΌλ‘œ μž…λ ₯λœλ‹€.

vi ~/.bashrc
# μ•„λž˜ λ‚΄μš©μ„ ν•˜λ‹¨μ— μ‚½μž…
LANG=ko_KR
export LANG

2-7. λ°±μ—… μ„€μ •(선택)

무료 μ„œλΉ„μŠ€κΈ° λ•Œλ¬Έμ— μ–Έμ œ κ°‘μžκΈ° μ„œλΉ„μŠ€κ°€ μ’…λ£Œλ μ§€ λͺ¨λ₯Έλ‹€κ³  생각해 μ‹œλ†€λ‘œμ§€ μ„œλ²„μ— 자료λ₯Ό 주기적으둜 λ°±μ—…ν•  수 μžˆλ„λ‘ μ„€μ •ν–ˆλ‹€. μ„œλΉ„μŠ€ μ’…λ£Œ 우렀 외에도 λ°±μ—… 데이터가 있으면 마음이 λ“ λ“ ν•΄μ§€λ‹ˆ 가급적 μ„ΈνŒ…ν•˜λŠ” 것이 쒋을 것 κ°™λ‹€.

μ‹œλ†€λ‘œμ§€ 6λ²„μ „μ—μ„œ μž‘μ—…ν–ˆκ³  λ‹€μ†Œ λ‚΄μš©μ΄ λ³΅μž‘ν•˜λ‹€.

2-7-1. μ‹œλ†€λ‘œμ§€ μ„€μ •

rsync ν™œμ„±ν™”

μ œμ–΄νŒ > 파일 μ„œλΉ„μŠ€ > rsync μ—μ„œ μ„œλΉ„μŠ€λ₯Ό ν™œμ„±ν™” ν•˜κ³  포트λ₯Ό μ§€μ •ν•΄μ€€λ‹€. (사섀IPλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ ν•΄λ‹Ή 포트 ν¬μ›Œλ”© 등이 ν•„μš”ν•  수 있음)

계정 생성

rsync μ™Έμ˜ κΆŒν•œμ„ μ΅œμ†Œν™” ν•˜κΈ°μœ„ν•΄μ„œ μ „μš© 계정을 λ§Œλ“€μ–΄ μ£Όμ—ˆλŠ”λ° λ³΄μ•ˆμ— μ‹ κ²½μ“Έκ²Œ μ—†λ‹€λ©΄ κΈ°μ‘΄ 계정을 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•΄λ„ λœλ‹€. 계정에 μ•„λž˜μ™€ 같은 κΆŒν•œμ„ λΆ€μ—¬ν•΄μ€€λ‹€.

  • administrators κ·Έλ£Ή λΆ€μ—¬ (ssh μ„€μ • 이후 κ·Έλ£Ήμ—μ„œ μ œμ™Έν•  μ˜ˆμ •)

  • β€˜homes’ 및 β€˜NetBackup’ 디렉토리 μ ‘κ·Ό κΆŒν•œ λΆ€μ—¬

  • rsync 계정 μΆ”κ°€ 및 λΉ„λ°€λ²ˆν˜Έ μ§€μ •

ssh μ„€μ •

μΆ”ν›„ rsync μ§„ν–‰ν•  λ•Œ λΉ„λ°€λ²ˆν˜Έ 없이 μ €μž₯ 된 μΈμ¦ν‚€λ‘œ 접속을 μ„€μ •ν•˜κΈ° μœ„ν•˜μ—¬ sshλ₯Ό μž μ‹œ μ‹€ν–‰ν•˜μ˜€μœΌλ©° νŽΈμ˜μƒ rsync와 λ™μΌν•œ 포트둜 κ΅¬μ„±ν•˜μ˜€λ‹€.

2-7-2. OCI μ„€μ •

OCI μ„œλ²„μ— ssh 접속을 ν•˜μ—¬ ssh-keyλ₯Ό 생성해쀀닀.

[root@centos8 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
***************************************************** root@centos8
The key's randomart image is:
+---[RSA 3072]----+
|      . .        |
|     + * .       |
|    . B * .      |
|     . @ =       |
|    ..B S o      |
|   ..=oB.B       |
| .. *=+.Bo.      |
|o+ Eooo.o.       |
|.o=. .  .o.      |
+----[SHA256]-----+

그리고 μ•„λž˜ λͺ…λ Ήμ–΄λ‘œ ssh-key의 λ‚΄μš©μ„ μ‹œλ†€λ‘œμ§€ μ„œλ²„μ˜ authorized_keys에 μΆ”κ°€ν•˜μ—¬ μ€€λ‹€.

[root@centos8 ~]# cat ~/.ssh/id_rsa.pub | ssh -p 포트번호 rsync@μ‹œλ†€λ‘œμ§€μ£Όμ†Œ "cat >> .ssh/authorized_keys"

2-7-3. λ‹€μ‹œ μ‹œλ†€λ‘œμ§€ μ„€μ •

이후에 μ‹œλ†€λ‘œμ§€ μ„œλ²„μ— ssh 접속을 ν•˜μ—¬ λ‹€μŒμ²˜λŸΌ μ ‘κ·Ό κΆŒν•œμ„ λ³€κ²½ν•΄μ€€λ‹€. (κΆŒν•œμ„€μ •μ— 따라 파일이 μ‘΄μž¬ν•¨μ—λ„ λΆˆκ΅¬ν•˜κ³  μ ‘μ†μ‹œμ— λΉ„λ°€λ²ˆν˜Έλ₯Ό μš”κ΅¬ν•  수 μžˆλ‹€.)

rsync@Taedi_NAS:~$ sudo chmod 755 /var/services/homes/rsync
rsync@Taedi_NAS:~$ sudo chmod 700 /var/services/homes/rsync/.ssh
rsync@Taedi_NAS:~$ sudo chmod 600 /var/services/homes/rsync/.ssh/authorized_keys

그리고 sshd_config νŒŒμΌμ„ μˆ˜μ •ν•˜μ—¬ μΈμ¦ν‚€λ‘œ 둜그인이 κ°€λŠ₯ν•˜λ„λ‘ 섀정을 μˆ˜μ •ν•΄μ€€λ‹€.

# sshd_config νŽΈμ§‘ μ§„μž…
sudo vi /etc/ssh/sshd_config
# μˆ˜μ •ν•  λ‚΄μš©
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

그리고 sshd μž¬μ‹œμž‘ν•˜λ©΄ λœλ‹€.

# sshd_config μž¬μ‹œμž‘
sudo synoservicectl --restart sshd

이후 μ‹œλ†€λ‘œμ§€ μ œμ–΄νŒμ—μ„œ ssh λ₯Ό λΉ„ν™œμ„±ν™” ν•˜κ³  λ‹€μ‹œ ν™œμ„±ν™” ν•˜λ©΄ 접속이 κ°€λŠ₯ν•˜λ‹€.

2-7-4. rsync ν…ŒμŠ€νŠΈ

CentOS μ„œλ²„ ssh μ—μ„œ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ λΉ„λ°€λ²ˆν˜Έ μž…λ ₯없이 백업이 μ‹œμž‘λœλ‹€λ©΄ 섀정이 μ™„λ£Œ 된 것이닀. (본인은 이후 μ‹œλ†€λ‘œμ§€ ssh ν™œμ„±ν™” ν•΄μ œ 및 rsync 아이디에 κ΄€λ¦¬μž κΆŒν•œ ν•΄μ œ 후에도 μ •μƒμ μœΌλ‘œ λ™μž‘ν–ˆμŒ)

# CentOS '/'폴더 ν•˜μœ„μ˜ λ‚΄μš©μ„ μ‹œλ†€λ‘œμ§€ 'NetBackup/backup/'κ²½λ‘œμ— 볡사
rsync -av -e 'ssh -p μ‹œλ†€λ‘œμ§€_포트' / 아이디@μ‹œλ†€λ‘œμ§€_μ£Όμ†Œ::NetBackup/backup/

μž‘μ—…μ„ 쀑간에 μ’…λ£Œν•˜λ €λ©΄ ctrl + c λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ λœλ‹€.

2-7-5. crontab 등둝

크둠탭을 μ„€μ •ν•˜λ©΄ μœˆλ„μš° μž‘μ—…μŠ€μΌ€μ€„λŸ¬ 처럼 νŠΉμ • μ‹œκ°„λ§ˆλ‹€ 반볡적으둜 업무λ₯Ό μ§€μ‹œν•  수 μžˆλ‹€.

# 크둠탭 νŽΈμ§‘
crontab -e

크둠탭에 λ°©κΈˆμ „ ν…ŒμŠ€νŠΈ ν–ˆλ˜ λͺ…λ Ήμ–΄λ₯Ό 맀일 7μ‹œμ— μ‹€ν–‰ν•  수 μžˆλ„λ‘ μ„€μ •ν•΄μ£Όμ—ˆλ‹€. (vi 에디터 μˆ˜μ •λͺ¨λ“œλŠ” insertν‚€, μ €μž₯은 :wq, μ €μž₯없이 λ‚˜κ°€λ €λ©΄ :qa!)

* 7 * * * rsync -av -e 'ssh -p μ‹œλ†€λ‘œμ§€_포트' / 아이디@μ‹œλ†€λ‘œμ§€_μ£Όμ†Œ::NetBackup/backup/

μ°Έκ³