인프라 7기

Practice (web이랑 db 연동 부분 잘못됨. 참고 하지 마세요. 아직 수정전 ***************)

킹버거 2023. 4. 29. 22:10

<Linux vm settings>


# LocalRouter

Memory 1GB

Hard Disk 30GB

* partition: /boot 500, /swap 1024, / - 

LAN 카드 3개 : Network Adapter NAT 

ens32

  • IP주소:192.168.11.254
  • 서브넷 마스크: 255.255.255.0 
  • 디폴트 라우트: 192.168.11.1 
  • DNS:192.168.10.11 (혹은 8.8.8.8)

ens33

  • IP주소: 192.168.12.1
  • 서브넷 마스크: 255.255.255.0

ens34

  • IP주소: 192.168.0.1
  • 서브넷 마스크: 255.255.255.0

# Web Server 

Memory 1GB

Hard Disk 30GB

* partition: /boot 500, /swap 1024, / - 

LAN 카드 1개 : Network Adapter NAT

ens32

  • IP주소:192.168.12.11
  • 서브넷 마스크: 255.255.255.0 
  • 디폴트 라우트: 192.168.12.1
  • DNS:192.168.10.11 (혹은 8.8.8.8)

# DNS Server

Memory 1GB

Hard Disk 30GB

* partition: /boot 500, /swap 1024, / - 

LAN 카드 1개 : Network Adapter NAT

ens32

  • IP주소:192.168.12.13
  • 서브넷 마스크: 255.255.255.0 
  • 디폴트 라우트: 192.168.12.1
  • DNS:192.168.10.11 (혹은 8.8.8.8)

# Oracle Server

Memory 2GB

Processors 2 (Number of cores per processor: 2)

Hard Disk 40GB

* partition: /boot 500, /swap 2048, / - 

LAN 카드 1개 : Network Adapter NAT

ens32

  • IP주소:192.168.0.11
  • 서브넷 마스크: 255.255.255.0 
  • 디폴트 라우트: 192.168.0.1
  • DNS:192.168.10.11 (혹은 8.8.8.8)

<VM ware 설치 후 공통으로 수행해야 하는 작업>

1)  방화벽 끄기

ntsysv > firewalld.service off 

* ntsysv 설정사항은 다음 시작부터 적용되므로 reboot 해야 함. 

2) chmod u+x /etc/rc.d/rc.local

/etc/rc.d/rc.local 파일은 소유자에게 실행 권한이 없으므로 chmod 명령어로 실행 권한을 부여해야 한다.

3) vi /etc/rc.d/rc.local

rdate -s time.bora.net 추가

4) vi /etc/selinux/config

SELINUX=disabled로 수정

5) FTP 설치 

# yum install -y ftp


<Manual>

1. LocalRouter

  • /etc/sysconfig/network-scripts/ifcfg-ens32 파일 설정 변경 
  • /etc/sysconfig/network-scripts/ifcfg-ens33 파일 설정 변경 
  • /etc/sysconfig/network-scripts/ifcfg-ens34 파일 설정 변경 

**** ONBOOT=yes

  • 패킷 포워딩 기능 활성화 

way1) sysctl -w net.ipv4.ip_forward=1 

way2 ) /etc/sysctl.conf /etc/sysctl.conf 파일에 ‘net.ipv4.ip_forward = 1’을 수정(추가)한다.

           파일 추가 후 sysctl –p 명령을 실행한다.

  • 정적 라우팅 (Windows CMD, # route print)

11.##에서 192.168.12.*로의 네트워크 접속 설정

route –p add 192.168.12.0 MASK 255.255.255.0 192.168.11.254

11.##에서 192.168.0.*로의 네트워크 접속 설정

route –p add 192.168.0.0 MASK 255.255.255.0 192.168.11.254


2. Web Server 

  • Apache 서버 설치

1) yum install -y gcc gcc-c++ cmake apr apr-util zlib-devel wget net-tools expat-devel

* 만약 yum 명령어가 실행되지 않는다면(cannot find a valid baseurl for repo: base/7/x86_64),

DNS 및 네트워크 설정 문제이므로, DNS 서버가 설정되어 있는지, 네트워크가 연결이 잘 되어 있는지 확인해야 한다.

2) httpd-2.2.34.tar.gz down (* path: /usr/local)

# cd /usr/local

# ftp 192.168.10.11

# cd /home2/data/down/apm

# get httpd-2.2.34.tar.gz.down

# tar xvfz httpd-2.2.34.tar.gz

5) # cd ./httpd-2.2.34

6) # ./configure --prefix=/app/apache --enable-so

7) # make

8) # make install 

 

  • 웹 서비스 관리 그룹 및 사용자 생성 

1) groupadd -g 1800 web

2) useradd -g web webmaster

 

  • 웹서버 홈 디렉터리(DocumentRoot) 생성

# mkdir -p /home/httpd/html

 

  • httpd.conf 파일 수정

# vi /app/apache/conf/httpd.conf

esc + '/' + ServerName 

ServerName localhost:80

esc + '/' + DocumentRoot 

DocumentRoot "/app/apache/htdocs" > DocumentRoot "/home/httpd/html"

esc + '/' + Directory

<Directory "/app/apache/htdocs">를  <Directory "/home/httpd/html">로 수정

# /app/apache/bin/httpd -t  (httpd.conf 파일 구문 점검) 

 

  • DocumentRoot 경로 디렉터리에 대해 web 그룹과 webmaster에게 권한부여
    # chown -R webmaster.web /home/httpd
  • webmaster 홈 디렉터리와 Apache 서버의 DocumentRoot 마운트
    # mkdir /home/webmaster/httpd
    # chown webmaster.web /home/webmaster/httpd
    # mount --bind /home/httpd/ /home/webmaster/httpd/
    *** Linux를 재부팅하면 mount가 해제되기 때문에 rc.local에 자동실행 설정해두는 것이 좋다.
  • Apache 서버 구동
    # /app/apache/bin/apachectl start 

  • PHP 패키지 설치

1) yum install -y sqlite-devel libxml2* libpng-devel, libjpeg-devel

2) php-7.4.27.tar.gz down

# cd /usr/local

# wget https://www.php.net/distributions/php-7.4.27.tar.gz

# tar xvfz php-7.4.27.tar.gz

# cd php-7.4.27

# ./configure --with-apxs2=/app/apache/bin/apxs --enable-sigchild

# make

# make install

# cp php.ini-development /usr/local/lib/php.ini

  • httpd.conf 파일 수정

# vi /app/apache/conf/httpd.conf 

esc + '/' + LoadModule

AddType application/x-httpd-php .php .html .htm .inc 

  • php.ini 파일 수정

# vi /usr/local/lib/php.ini

esc + '/' + short_open_tag = 

short_open_tag = On

esc + '/' + default_charset =

default_charset = "UTF-8" 기본 설정(변경할 필요 없음)

esc + '/' + display_erros = 

display_erros = On 기본 설정(변경할 필요 없음) 

esc + '/' + include_path = 

include_path = ".:/usr/local/lib"

esc + '/' + upload_tmp_dir = 

upload_tmp_dir = /tmp

esc + '/' + error_reporting = 

error_reporting = E_ALL & ~E_NOTICE

  • test page 생성

# vi /home/httpd/html/index.html

<?

       Welcome to st01.sec! 

?>

  • Apache 서버 재구동

# /app/apache/bin/apachectl stop

# /app/apache/bin/apachectl start 

 

  • rc.local 파일에 자동실행 설정

# vi /etc/rc.d/rc.local

/app/apache/bin/apachectl start 추가

mount --bind /home/httpd/ /home/webmaster/httpd/ 추가


3. DNS Server

  • DNS 서버 설치
    # yum install -y bind
  • Bind 서버 시작 
    # systemctl start named.service 
  • resolv.conf 파일 수정
    vi /etc/resolv.conf
    nameserver 192.168.12.13로 변경 
    * nameserver [Local DNS 서버 IP]
    resolv.conf 파일은 reboot시 설정값이 원래대로 돌아오므로
    /etc/sysconfig/network-scripts/ifcfg-ens32 파일에서 DNS1의 설정값을 바꿔줘야 한다. 
    DNS1="192.168.12.13"로 변경 
  • named.conf 파일 수정
    vi /etc/named.conf
    ------- 아래 내용만 적고 나머지 다 지우기 -------
    options {
    directory "/var/named";
    };

    zone "." {
    type hint;
    file "named.ca";
    };

    zone "st01.sec" {
    type master;
    file "st01.sec.zone";
    };
  • Zone 파일 생성 (st01.sec.zone)
    vi /var/named/st01.sec.zone 
    ------- 아래 내용만 적고 나머지 다 지우기 -------
    $TTL      1D
    @      IN      SOA      ns.st01.sec.      root.st01.sec. (
                                                    1              ; Serial
                                                    28800      ; Refresh
                                                    14400      ; Retry
                                                    3600000  ; Expire
                                                    86400 )    ; Minimum
    ; Name Server
          IN      NS      ns.st01.sec.
    ; Host address
          IN      A      192.168.12.13
    ns      IN      A      192.168.12.13
    gw      IN      A      192.168.12.1
    www      IN      A      192.168.12.11
    ;
  • name 서버 시작 
    # systemctl [start | stop | restart | status] named.service 
  • DNS 서버 작동 여부 확인
    # nslookup www.google.com 
    * nslookup [도메인]

4. Oracle Server

  • Oracle 관리 계정/그룹/디렉터리 생성 
    # groupadd -g 1900 dba
    # useradd -g dba -u 1900 ora19c
    # passwd ora19c
    # mkdir -p /app/ora19c/19c
    * $ORACLE_HOME = /app/ora19c/19c
    # mkdir -p /app/oraInventory
    # chown -R ora19c.dba /app/ora19c
    # chown -R ora19c.dba /app/oraInventory
    # chgrp -R dba /app
    # chmod -R 755 /app
  • hosts 파일 설정
    # vi /etc/hosts
    192.168.0.11 DB19.itclass.co.kr DB19 추가 
  • 추가 패키지 설치
    # yum -y install ksh libaio-devel compat-libcap1 compat-libstdc++-33 glibc-devel libstdc++-devel gcc-c++
    # yum install -y https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
  • .bash_profile 파일 설정
    *** ora19c 계정으로 수행
    # su - ora19c
    # vi .bash_profile
    ---- 아래 내용 추가 ---- 
    # oracle setup
    export ORACLE_OWNER=ora19c
    export ORACLE_BASE=/app/ora19c
    export ORACLE_HOME=/app/ora19c/19c
    export TNS_ADMIN=$ORACLE_HOME/network/admin
    export ORACLE_SID=DB19
    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    export ORACLE_HOSTNAME=DB19.itclass.co.kr
    export TMP=/tmp
    export TMPDIR=$TMP
    export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME:/usr/bin:.

    ora19c 계정으로 재로그인 후 설정 확인
    # env | grep ORACLE

  • Oracle 원본 파일 다운로드
    *** 오라클 원본 파일은 $ORACLE_HOME(/app/ora19c/19c)에 
    소유자 ora19c 소유그룹 dba로 저장되어야 한다.
    # cd /app/ora19c/19c
    # ftp 192.168.10.11 
    # cd /home2/data/down/DB/DBMS/19c
    # get LINUX.X64_193000_db_home.zip
    # unzip LINUX.X64_193000_db_home.zip
    # ./runInstaller (단, runInstaller은 x리눅스에서만 가능하다. putty에선 작동x)

 

  • 리스너 구동
    # lsnrctl start listener
    *********************************************
    ORACLE_OWNER : ora19c
    ORACLE_HOME : /app/ora19c/19c
    TNS_ADMIN : $ORACLE_HOME/network/admin
    ORACLE_SID: DB19 

 

  • 인스턴스 클라이언트 설치 (root ? ora19c? help me emperor hyun)
    # cd /usr/lib
    # ftp 192.168.10.11
    # cd /home2/data/down/DB/client
    # get oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm
    # get oracle-instantclient19.5-sqlplus-19.5.0.0.0-1.x86_64.rpm 
    # rpm -Uvh oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm
    # rpm -Uvh oracle-instantclient19.5-sqlplus-19.5.0.0.0-1.x86_64.rpm

    *** 리눅스 환경 그룹이 [최소 설치]인 경우 libaio 패키지 설치가 필요하다. 
    # yum install -y libaio

  • Oracle DB 자동 실행 설정하기
    # vi /etc/oratab 
    DB19:/app/ora19c/19c:N을 DB19:/app/ora19c/19c:Y로 변경

  • rc.local 파일에 자동실행 설정 
    su - ora19c -c /app/ora19c/19c/bin/"lsnrctl start"
    su - ora19c -c /app/ora19c/19c/bin/dbstart

  • listener.ora 파일 확인 (자동 생성)
    # vi /app/ora19c/19c/network/admin/listener.ora
    ------ 아래의 내용이 들어있음 -------
    LISTENER =
     (DESCRIPTION_LIST =
     (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = DB19.itclass.co.kr)(PORT = 1521))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
     )
     )
    SID_LIST_LISTENER =
     (SID_LIST =
     (SID_DESC =
     (SID_NAME = DB19)
     (ORACLE_HOME = /app/ora19c/19c)
     )
     )

 

  • sqlnet.ora 파일 확인 (자동 생성)
    # vi /app/ora19c/19c/network/admin/sqlnet.ora
    ------ 아래의 내용이 들어있음 -------
     NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) 

 

  • tnsnames.ora 파일 설정
    # vi /app/ora19c/19c/network/admin/tnsnames.ora
    ------ 아래의 내용으로 설정 -------
    LISTENER_DB19 =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DB19.itclass.co.kr)(PORT = 1521))

    DB19 =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = DB19.itclass.co.kr)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DB19.itclass.co.kr)
        )
      )
    oracle =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = tcp) (HOST = 192.168.0.11) (port = 1521))
          (CONNECT_DATA = (SID = DB19))
        )

 

  • Windows의 tnsnames.ora 파일 편집
    경로: D:\app\ora19c\client\network\admin

    dal =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.10.11)(port = 1521))
          (CONNECT_DATA = (SID = DB19))
        )

    oracle =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.0.11)(port = 1521))
          (CONNECT_DATA = (SID = DB19))
        )
  • 오라클 사용자 계정 생성
    *** 계정 생성 전에 DB 구동부터 한다.
    SQL> STARTUP 

    ***php tablespace생성
    # sqlplus / as sysdba
    SQL> create tablespace php
              datafile '/app/ora19c/oradata/DB19/php01.dbf' size 200M;

    ** php 계정 생성
    create user php
    identified by php
    default tablespace php
    quota unlimited on php;

    *** 권한 부여
    GRANT execute ON dbms_crypto TO resource;
    GRANT connect, resource TO php;
      
  • Windows와 Oracle 서버 연결 확인(CMD)
    # ping 192.168.0.11
  • Windows용 sqlplus를 이용하여 DB 접속(CMD)
    # sqlplus php/php@oracle

 

5. Web Server와 Oracle DB 연동 (PHP와 DB 연동)

  • Web 서버에 webmaster 계정으로 접속 후 홈 디렉터리 이동
    # cd /home/webmaster/httpd/html
  • 실습에 필요한 html, php 파일 준비 (*** dal 서버에 있으므로 ftp로 get해야 한다.)
    # ftp 192.168.10.11 
    ftp> cd html/20230407
    ftp> get school.zip
    # unzip school.zip
    *** conn.php 파일에 접속하는 oracle server명, 계정명, 계정패스워드를 알맞게 설정해줘야 한다.
  • Oracle 서버에 ora19c 계정으로 접속 후 홈 디렉터리 이동
    # cd /app/ora19c/19c
  • 실습에 필요한 sql 파일 준비 (*** dal 서버에 있으므로 ftp로 get 해야 한다.)
    # ftp 192.168.10.11
    ftp> cd /home2/data/class
    ftp> get school.sql
  • sqlplus 접속 후 school.sql 실행
    # sqlplus / as sysdba
    SQL> @school.sql
    (단, school.sql 파일이 저장되어 있는 경로에서 sqlplus에 접속해야 한다.)