Project

[Mini_Project] AWS Cloudλ₯Ό ν™œμš©ν•œ Web,NFS,DB μ„œλ²„ ꡬ좕

cumo 2025. 3. 14. 11:06
 

πŸ“Œ 1. ν”„λ‘œμ νŠΈ κ°œμš”

λ„€νŠΈμ›Œν¬ ꡬ성도

ν”„λ‘œμ νŠΈ λͺ©μ 

  • μ˜¨ν”„λ ˆλ―ΈμŠ€ μ„œλ²„μ— λ‹€μ–‘ν•œ κΈ°λŠ₯별 ꡬ좕을 μˆ˜ν–‰ν•˜κ³ μž ν•œλ‹€. 고객은 μ›Ή νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€μ–΄ μžμ‚¬μ˜ 컨텐츠λ₯Ό μ„œλΉ„μŠ€ν•˜κ³  μ‹Άμ–΄ν•˜λ©°, μ›Ή 메일 κ΅¬ν˜„μ„ 톡해 이메일을 μžμ‚¬ μ„œλ²„λ₯Ό 톡해 μ†μ‰½κ²Œ μ‚¬μš©ν•˜κ³ μž ν•œλ‹€.
  •  κ°μ’… 파일 μ„œλ²„λ₯Ό κ΅¬ν˜„ν•˜μ—¬ 기쒅을 λ›°μ–΄λ„˜μ€ νŽΈλ¦¬ν•œ 파일 곡유 μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜κ³ μž ν•œλ‹€.
  • 이에 따라 μ£Όλ¬Έ 사양에 λ§žλŠ” μ„œλ²„ ꡬ성을 톡해 μ μ ˆν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ³  각각 κ΅¬ν˜„λœ λ‹€λ₯Έ μ„œλ²„ κΈ°λŠ₯κ³Ό μ—°κ²°ν•˜μ—¬ μ›ν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λ €κ³  ν•œλ‹€.
  • λ¦¬λˆ…μŠ€ 및 μœ λ‹‰μŠ€ κ³„μ—΄μ˜ μ‹œμŠ€ν…œ κ°„ μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„μ— λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 있고 일관성 μœ μ§€λ₯Ό ν•  수 μžˆλ„λ‘ μ†”λ£¨μ…˜ 채택
  • β–Ά μ†”λ£¨μ…˜ 사항
더보기
  • μž‘μ—…μ€ μƒκΈ°ν•œ 상황 1의 5번 μ›Ή μ„œλ²„ ꡬ좕 μž‘μ—… 쀑 μ›Ή μ„œλ²„ 섀정을 μžλ™ν™”
  • AWSλ₯Ό μ΄μš©ν•œ EC2 2λŒ€λ₯Ό μƒμ„±ν•˜κ³  ν•΄λ‹Ή EC2듀에 영ν–₯을 λ―ΈμΉ˜λ„λ‘ μ—°κ²° 및 ꡬ성(EC2κ°€ μ•€μ„œλΈ” λ…Έλ“œ, 즉 μ›Ή μ„œλ²„κ°€ λ˜λ„λ‘ κ΅¬μ„±ν•˜λ©° μ™ΈλΆ€μ—μ„œ 접속이 κ°€λŠ₯ν•˜λ„λ‘ ꡬ성)
  • ν”Œλ ˆμ΄λΆ μ‹€ν–‰ μ‹œ Ansible μž‘μ—… μˆ˜ν–‰ κ°„ λΉ„λ°€λ²ˆν˜Έ μ˜΅μ…˜(-k)이 없이 μˆ˜ν–‰λ˜λ„λ‘ ꡬ성
  • Ansible Playbook을 ν™œμš©ν•˜μ—¬ λ…Έλ“œμ— λ‹€μŒκ³Ό 같은 μž‘μ—…μ„ μˆ˜ν–‰
  • μž‘μ—… κ°„ ‘ν”Œλ ˆμ΄λΆ’을 μž‘μ„±ν•˜μ—¬ μž‘μ—…μ΄ 파일 ν•œ 개의 μž¬μƒμ„ 톡해 μˆ˜ν–‰λ˜λ„λ‘ ꡬ성
  • 생성 μ‹œ μ„œμšΈ νƒ€μž„μ‘΄μœΌλ‘œ λ…Έλ“œκ°€ λ³€κ²½λ˜λ„λ‘ μˆ˜ν–‰
  • λ…Έλ“œλ“€μ— ansibleuserλΌλŠ” μ΄λ¦„μ˜ μœ μ €λ₯Ό 생성 및 ansibleuser의 λΉ„λ°€λ²ˆν˜Έ λ˜ν•œ ‘ansible’둜 μžλ™μ μœΌλ‘œ μž…λ ₯λ˜λ„λ‘ ꡬ성
  • μ•€μ„œλΈ” λ…Έλ“œκ°€ μ›Ή μ„œλ²„κ°€ λ˜λ„λ‘ ꡬ성
  • μ œμ‹œλœ μ›Ή μ„œλ²„ ꡬ성과 λ”λΆˆμ–΄ μ•€μ„œλΈ” μ„œλ²„ – λ…Έλ“œ κ°„ μžλ™ κ΅¬μ„±λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ₯Ό ν–₯ν•΄ 연결이 κ°€λŠ₯ν•œ μž„μ˜μ˜ ν˜•νƒœμ˜ ν”„λ‘œν† μ½œ ν•œ 개λ₯Ό μ„ μ •ν•˜μ—¬ 자유둭게 ꡬ성(e.g. NFS, SAMBA, Telnet, FTP λ“±)
  • λͺ¨λ“  μž‘μ—…μ΄ μ™„λ£Œλœ ν›„ Ansible을 ν†΅ν•œ ꡬ성이 μ™„λ£Œλ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆλ„λ‘ Ansible을 톡해 νƒ€μž„μ‘΄, μœ μ € ν˜„ν™©, μ›Ή μ„œλ²„ 가동 여뢀에 λŒ€ν•œ κ²°κ³Ό, 자유둭게 κ΅¬μΆ•ν•œ ν”„λ‘œν† μ½œμ˜ μž‘λ™ κ²°κ³Ό 등에 λŒ€ν•œ λ„μΆœ ν›„ ν•΄λ‹Ή 결과물을 μ €μž₯ν•˜μ—¬ 파일둜 보관
  • ꡬ성 κ°„ ν•„μš”ν•œ 경둜, κΆŒν•œ, 방법 등은 μž„μ˜λ‘œ μ„€μ •

μ£Όμš” κΈ°λŠ₯

  • μ„œλ²„ 1 : μ›Ή μ„œλ²„(μ›Œλ“œν”„λ ˆμŠ€ λ“±μ˜ CMS), DB μ„œλ²„(λͺ¨λ“  DBλ₯Ό ν•΄λ‹Ή μ„œλ²„μ— 톡합)
  • μ„œλ²„ 2 : DNS μ„œλ²„, SAMBA μ„œλ²„, NFS μ„œλ²„
  • μ„œλ²„ 3 : 메일 μ„œλ²„ 1, μ›Ή 메일 ν΄λΌμ΄μ–ΈνŠΈ, FTP μ„œλ²„
  • μ„œλ²„ 4 : 메일 μ„œλ²„ 2, μ›Ή 메일 ν΄λΌμ΄μ–ΈνŠΈ, μ›Ή 리포지터리 μ„œλ²„
  • μ„œλ²„ 5 : μ•€μ„œλΈ” μ„œλ²„, μ•€μ„œλΈ” λ…Έλ“œ 각 1λŒ€(EC2 2λŒ€λ₯Ό μ•€μ„œλΈ” μ„œλ²„ 및 λ…Έλ“œλ‘œμ„œ 영ν–₯을 μ£Όμ–΄ μžλ™ν™”, 상세 사항은 상황 2 μ°Έμ‘°)

기술 κ°œμš”

  • 운영체제 : Ubuntu Server, CentOS, Debian
  • μ„œλ²„ 운용: Samba, WordPress, FTP, rcm, evolution, Maria DB
  • μ„œλ²„ μžμ‚°: AWS EC2, Router, Switch
  • 기술 μŠ€νƒ: Ansible, Nginx, MySql

 


 

Server 1

 

 

WEB μ„œλ²„ ꡬ성

dnf -y install httpd php*
systemctl restart httpd
wget https://wordpress.org/latest.zip #μ›Œλ“œν”„λ ˆμŠ€ νŒ¨ν‚€μ§€ λ‹€μš΄
WEB μ„œλ²„ μ„€μ •

 

DB μ„œλ²„ 연동

dnf -y install mariadb-server

mysql 
λ°μ΄ν„°λ² μ΄μŠ€μ„€μ •
CREATE DATABASE reputabledb; GRANT ALL PRIVILEGES ON reputabledb.* 
TO reputableuser IDENTIFIED BY 'rocky'; FLUSH PRIVILEGES;

CREATE DATABASE mail;  #연동할 메일 μ„œλ²„ Database 생성
CREATE DATABASE WEB;   #연동할 WEB μ„œλ²„ Database 생성
CREATE DATABASE

Server 2

β–Ά DNS  Server : 

[root@localhost ~]#dnf –y install bind
[root@localhost ~]#vi /etc/named.conf
(11번째 ν–‰ = any, 12번째 ν–‰ = none, 19번째 ν–‰ =any)
[root@localhost ~]#vi /etc/named.rfc1912.zones (쑴파일 생성)
[root@localhost ~]#cd /var/named
[root@localhost ~]#cp named.empty daum1.com.zone
[root@localhost ~]#chgrp named daum1.com.zone
[root@localhost ~]#vi daum1.com.zone (daum1.com μ‘΄ 파일 ꡬ성)
[root@localhost ~]#vi /etc/named.rfc1912.zones
[root@localhost ~]#vi my.rev (λ¦¬λ²„μŠ€ 쑴파일)
                                 230 PTR ns.daum1.com.
                                 230 PTR www.daum1.com.
[root@localhost ~]#systemctl restart named
[root@localhost ~]#systemctl enable named
[root@localhost ~]#vi /etc/resolv.conf

Samba μ„œλ²„ ꡬ좕

[root@localhost ~]#dnf –y install samba-clinet
[root@localhost ~]#vi /etc/samba/smb.conf
[root@localhost ~]#useradd shared
[root@localhost ~]#passwd shared
[root@localhost ~]#smbpasswd –a share
[root@localhost ~]#group smbgroup
[root@localhost ~]#mkdir /share
[root@localhost ~]#chown smbuser.smbgroup /share
[root@localhost ~]#chmod 770 /share
[root@localhost ~]#systemctl restart smb
[root@localhost ~]#systemctl restart nmb

Server 3

β–Ά mail Server :

 

dnf -y install sendmail dovecot
/ Sendmail SMTP ν”„λ‘œν† μ½œμ„ μ΄μš©ν•˜μ—¬ 메일을 μ£Όκ³ λ°›λŠ” 핡심 μ„œλ²„
/ Dovecot μ‚¬μš©μžμ˜ 받은 νŽΈμ§€ν•¨(λ©”μΌλ°•μŠ€)κ³Ό μ—°κ²°ν•˜λŠ” μ—­ν• 

#vi /etc/mail/sendmail.cf
85ν–‰
Cwdaum1.com

#vi /etc/mail/local-host-names
 mail.daum1.com
 
 hostnamectl set-hostname mail.daum1.com #호슀트 이름 λ³€κ²½
 exec bash
 
#vi /etc/mail/access
 daum1.com                               RELAY
 10.0.1                                  RELAY
 
 dovecot μ„€μ •
systemctl start dovecot

#vi /etc/dovecot/dovecot.conf
24ν–‰ 주석 제거
30ν–‰ 주석 제거
33ν–‰ 주석 제거

#vi /etc/dovecot/conf.d/10-mail.conf
25ν–‰ 주석 제거
121ν–‰ mail_access_groups = mail

systemctl restart sendmail dovecot

firewall-cmd --add-service=imap
firewall-cmd --add-service=smtp
firewall-cmd --add-service=pop3
firewall-cmd --add-service=imaps
firewall-cmd --add-service=smtps
firewall-cmd --add-service=pop3s
firewall-cmd --runtime-to-permanent

useradd mailuser1
passwd mailuser1

vi /etc/resolv.conf
nameserver 10.0.1.99  # μ™ΈλΆ€ DNS μ„œλ²„ IP (예: dns.example.com)

 

μ›Ή 리포지터리

dnf –y install httpd
mkdir /var/www/html/repo
dnf –y install yum-utils createrepo
reposync –m –repoid=baseos –newest-only –download
-metadata –p /var/www/html/repo
createrepo –g comps.xml /var/www/html/repo/baseos

Server 4

- Server 3동일 ꡬ성

Server 5

Ansible File

---
- name: Solution / install web, change timezone, NFS server
  hosts: cloud
  become: yes  
  tasks: 
    # νƒ€μž„μ‘΄ λ³€κ²½ 
    - name: Change timezone
      timezone:
        name: Asia/Seoul
    # μœ μ € μΆ”κ°€     
    - name: useradd
      user:
        name: ansibleuser
        password: ansible
    # μ—”μ„œλΈ” λ…Έλ“œ μ›Ή μ„œλ²„λ‘œ ꡬ성
    - name: Install httpd php*
      dnf:
        name: "{{ item }}"
        state: latest
      with_items:
        - httpd
        - php

    - name: start httpd
      service:
        name: httpd
        state: started
        enabled: yes
    
     # WEB νŽ˜μ΄μ§€ 생성   
    - name: Deploy index.php template
      template:
        src: ~/index.php.j2
        dest: /var/www/html/index.php
      vars:
        title: "ν•΄λ‹Ή νŽ˜μ΄μ§€λŠ” Node1에 μ—°κ²°λ˜μ–΄ μžˆλŠ” νŽ˜μ΄μ§€ μž…λ‹ˆλ‹€."
        heading: "ν•΄λ‹Ή νŽ˜μ΄μ§€λŠ” Node1에 μ—°κ²°λ˜μ–΄ μžˆλŠ” νŽ˜μ΄μ§€ μž…λ‹ˆλ‹€."
        message: "Name EC2-node1"
      when: ansible_host == "3.39.22.9"

    # WEB νŽ˜μ΄μ§€ 생성   
    - name: Deploy index.php template
      template:
        src: ~/index.php.j2
        dest: /var/www/html/index.php
      vars:
        title: "ν•΄λ‹Ή νŽ˜μ΄μ§€λŠ” Node2에 μ—°κ²°λ˜μ–΄ μžˆλŠ” νŽ˜μ΄μ§€ μž…λ‹ˆλ‹€."
        heading: "ν•΄λ‹Ή νŽ˜μ΄μ§€λŠ” Node2에 μ—°κ²°λ˜μ–΄ μžˆλŠ” νŽ˜μ΄μ§€ μž…λ‹ˆλ‹€."
        message: "Name: EC2-node2"
      when: ansible_host != "3.39.22.9"
      
    # NFS μ„œλ²„ μ„€μ •
    - name: install nfs server
      dnf:
        name: nfs-utils
        state: latest
    - name: start nfs server
      service:
        name: nfs-server
        state: started
        enabled: yes
    - name: create nfs directory
      file:
        path: /nfsserver
        state: directory
        mode: 0777
    - name: export nfs directory
      lineinfile:
        path: /etc/exports
        line: "/nfsserver *(rw,sync,no_root_squash)"
    - name: start nfs server
      service:
        name: nfs-server
        state: restarted
    - name: make testfile
      file:
        path: /nfsserver/testfile
        state: touch
        
    # NFS ν΄λΌμ΄μ–ΈνŠΈ μ„€μ •    
    - name: make directory
      file:
        path: /nfsclient
        state: directory

    - name: install nfs-utils
      dnf:
        name: nfs-utils
        state: latest

    - name: mount to nfs server
      mount:
        path: /nfsclient
        src: 13.125.251.142:/nfsserver
        fstype: nfs
        state: mounted