총정리 실습

sso·2025년 5월 30일
0

리눅스 서버

목록 보기
40/40

Server A, B, C, D를 초기화 하시오.

그룹별로 다음과 같은 정보 시스템을 구축하시오.

팀원 1 : Ansible로 팀 내에서 사용할 이메일 서버를 전 팀원들 각각의 서버에 설치(팀원 2의 DNS 서버에서 만들 도메인 구성 협의, 각 팀원에게 별도의 도메인 부여)
추가적으로 임의의 nginx 컨테이너를 생성하고 html + css 형태의 적절한 대문 페이지를 구성하는데, 이 때 웹 루트 디렉터리가 유실되지 않도록 NFS 서버와 연동

팀원 2 : Ansible로 팀 내에서 사용할 DNS 서버를 전 팀원들 각각의 서버에 설치 및 테스트(팀원 1의 메일 서버가 잘 작동하도록 협의)
추가적으로 임의의 nginx 컨테이너를 생성하고 html + css 형태의 적절한 대문 페이지를 구성하는데, 이 때 웹 루트 디렉터리가 유실되지 않도록 NFS 서버와 연동

팀원 3 : 개발자 PC로서 Java 소스 코드 샘플을 만들고, html + css 내용물을 채워 GitHub의 새로운 리포지터리에 업로드
가상화 담당자로서 Docker를 설치한 서버에 multi-stage 빌드 형태로 구성된 Java 샘플 어플리케이션 이미지를 만들고 컨테이너로 실행하되 해당 웹 페이지는 팀원 2의 DNS 담당자가 만들어 둔 도메인으로 접속 가능하도록 구성
Ansible로 팀 내에서 사용할 공유 저장소인 NFS 서비스를 구성 후 테스트
추가적으로 임의의 nginx 컨테이너를 생성하고 html + css 형태의 적절한 대문 페이지를 구성하는데, 이 때 웹 루트 디렉터리가 유실되지 않도록 NFS 서버와 연동

팀원 4 : 본인의 서버를 인증 서버로 구성 후 Ansible로 나머지 3명의 서버에 인증 서버에 대한 클라이언트 구성을 부여하고 telnet이나 ssh, 로컬 로그인 등을 테스트(서버에 generaluser라는 유저를 생성하여 인증 서버로 구성되었는지 확인)
클라우드 담당자로서 본인의 EC2 인스턴스에 Linux 서버에서 해당 인스턴스로 접속
이후 해당 EC2 인스턴스의 /var/log 디렉터리를 /backup에 매주 월요일 오전 9시에 백업되도록 구성(압축 형식은 자유)
가상화 담당자 2로서 Docker 서버에 wordpress + mysql 컨테이너가 구성된 복합적 형태의 컨테이너 구성과 테스트
해당 웹 페이지는 팀원 2의 DNS 담당자가 만들어 둔 도메인으로 접속 가능하도록 구성
추가적으로 임의의 nginx 컨테이너를 생성하고 html + css 형태의 적절한 대문 페이지를 구성하는데, 이 때 웹 루트 디렉터리가 유실되지 않도록 NFS 서버와 연동


팀원 4 (나의 역할)

1. NIS 서버 설정

1-1. NIS 서버 패키지 설치

dnf -y install ypserv

1-2. NIS 도메인 설정

vi /etc/sysconfig/network
NISDOMAIN=slime.com

1-3. 사용자 생성

useradd generaluser
passwd generaluser(1234)

1-4. 서비스 활성화 및 실행

systemctl --now enable rpcbind
systemctl --now enable ypserv yppasswdd ypxfrd

1-5. NIS 맵 생성

cd /var/yp
make

1-6. 포트 고정 및 서비스 설정

YPSERV_ARGS="-p 944"
YPXFRD_ARGS="-p 945"

vi /etc/sysconfig/yppasswdd
YPPASSWDD_ARGS="--port 946"

1-7. 서비스 재시작

systemctl restart rpcbind ypserv yppasswdd ypxfrd

1-8. 방화벽 설정

firewall-cmd --add-service=rpc-bind
firewall-cmd --add-port={944-946/tcp,944-946/udp}
firewall-cmd --runtime-to-permanent

firewall-cmd --list-all

2. Ansible로 NIS Client 설정

2-1. Ansible 설치 및 SSH 키 준비

dnf -y install epel-release
dnf -y install ansible

ansible --version

ssh-keygen
ssh-copy-id root@10.0.2.207
ssh-copy-id root@10.0.2.223
ssh-copy-id root@10.0.2.130
ssh-copy-id root@192.168.111.200

ssh-copy-id root@10.0.2.151

2-2. 인벤토리(대상 서버 목록) 작성

vi /etc/ansible/hosts
[nis_clients]
10.0.2.207 #지영
10.0.2.223 #다솜
10.0.2.130 #민지

[test]
192.168.111.200 #나

[sh]
10.0.2.151 #성훈

2-3. Ansible 연결 테스트

ansible all -m ping

2-4. NIS 클라이언트 자동설정 플레이북 작성

---
- name: NIS Client Setting
  hosts: nis_clients

  vars:
    nis_domain: "slime.com"
    nis_server: "www.slime.com"

  tasks:
    - name: Install NIS client packages
      dnf:
        name:
          - ypbind
          - rpcbind
          - yp-tools
          - oddjob-mkhomedir
        state: present

    - name: Set NIS domain in /etc/sysconfig/network
      lineinfile:
        path: /etc/sysconfig/network
        regexp: '^NISDOMAIN='
        line: "NISDOMAIN={{ nis_domain }}"
        create: yes

    - name: Apply NIS domain immediately
      command: "nisdomainname {{ nis_domain }}"

    - name: Configure /etc/yp.conf
      copy:
        dest: /etc/yp.conf
        content: |
          domain {{ nis_domain }} server {{ nis_server }}
          ypserver {{ nis_server }}

    - name: Enable and start ypbind and oddjobd services
      systemd:
        name: "{{ item }}"
        enabled: yes
        state: started
      loop:
        - rpcbind
        - ypbind
        - oddjobd

    - name: Ensure nsswitch.conf uses nis for passwd, group, shadow
      lineinfile:
        path: /etc/nsswitch.conf
        regexp: '^passwd:'
        line: 'passwd:     files nis'
      notify: restart nscd

    - name: Ensure nsswitch.conf uses nis for group
      lineinfile:
        path: /etc/nsswitch.conf
        regexp: '^group:'
        line: 'group:      files nis'
      notify: restart nscd

    - name: Ensure nsswitch.conf uses nis for shadow
      lineinfile:
        path: /etc/nsswitch.conf
        regexp: '^shadow:'
        line: 'shadow:     files nis'
      notify: restart nscd

    - name: Enable home directory auto-creation (optional)
      command: authselect enable-feature with-mkhomedir
      ignore_errors: yes

  handlers:
    - name: restart nscd
      systemd:
        name: nscd
        state: restarted

2-5. 플레이북 실행 (테스트/적용)

ansible-playbook nis_client_setting.yaml --check

ansible-playbook nis_client_setting.yaml

3. 자동 백업 설정

3-1. /backup 디렉터리 생성 및 권한 부여

mkdir -p /backup
chown root:root /backup
chmod 700 /backup

3-2. crontab 등록

crontab -e
0 9 * * 1 tar czf /backup/varlog_$(date +\%Y\%m\%d).tar.gz /var/log

4. WordPress + MySQL 복합 컨테이너 구성 (Docker Compose)

4-1. Docker & Docker Compose 설치

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io

systemctl enable --now docker

curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker --version
docker-compose --version

4-2. NFS 클라이언트 설치 및 마운트

dnf -y install nfs-utils

mkdir -p /nfsclient
mount -t nfs 10.0.2.223:/nfs /nfsclient

4-3. 대문 페이지(HTML+CSS) 작성

cat <<EOF | tee /nfs/html/index.html
<!DOCTYPE html>
<html>
<head>
  <title>Welcome</title>
  <link rel="here is 10.0.2.213" href="style.css">
</head>
<body>
  <h1>Welcome to 10.0.2.213!</h1>
</body>
</html>
EOF

4-4. docker-compose.yml 파일 작성

cat <<EOF > ~/docker-compose.yml
version: '3.8'

services:
    db:
      image: mariadb:latest
      command: '--default-authentication-plugin=mysql_native_password'
      volumes:
        - db_data:/var/lib/mysql
      restart: always
      environment:
        - MARIADB_ROOT_PASSWORD=1234
        - MARIADB_DATABASE=wpdb
        - MARIADB_USER=wpuser
        - MARIADB_PASSWORD=1234
      expose:
        - 3306

  wordpress:
    image: wordpress:latest
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppass
      WORDPRESS_DB_NAME: wordpress
    ports:
      - "8080:80"
    volumes:
      - /nfs/html:/var/www/html

  nginx:
    image: nginx:alpine
    restart: always
    ports:
      - "80:80"
    volumes:
      - /nfs/html:/usr/share/nginx/html:ro

volumes:
  db_data:
EOF

4-5. 컨테이너 실행

docker-compose up -d
profile
오늘도 하나씩 해결해 나가자!

0개의 댓글