CentOS 8 - 웹 서버 구축 [APM] 설치

    CentOS 8 - Web Server [APM] - YUM install

    LINUX APM란?
    APM은 하나의 소프트웨어가 아닌 [Apache, MariaDB(Mysql), PHP] 3개의 오픈소스 소프트웨어 앞글자를 딴 줄임말입니다.
    Apache [공식 홈페이지] - HTTP를 통해 웹페이지(텍스트/그림)등을 요청 처리해주는 웹서버 프로그램
    PHP(Hypertext Preprocessor) [공식 홈페이지] - 오픈 소스 범용 스크립팅 언어
    MariaDB [공식 홈페이지] - 오픈 소스의 관계형 데이터베이스 관리 시스템

    3개의 다른 오픈소스 소프트웨어는 서로 호환성 및 범용성이 좋아 현재는 대부분의

    개인 웹호스팅 업체에서 기본적으로 제공을 하고 있습니다.

     

    ※ Mysql의 경우는 오라클 업체에서 인수 및 상용화되고 나서부터는 대부분이 무료 오픈 소스인 MariaDB 대체되고 있습니다. MariaDB는 핵심 개발자가 나와서 Mysql과 동일한 소스 코드를 기반으로 개발하였기 때문에 API와 명령어는 거의 동일합니다. 현재는 마리아 DB [10.X] 변경되어 새로운 기능이 추가되고 독립적인 오픈 소스 기반으로 운영되고 있습니다.

    ■ [설치환경 및 준비물]

    릴리즈 설치 테스트 : 2020-06-17

    CentOS 8 리눅스 설치 서버 [포스팅 참고]

    OS버전

    [root@localhost ~]# cat /etc/redhat-release

    CentOS Linux release 8.1.1911 (Core)

     

    ※ CentOS 8 커널 5.7 적용 후 테스트 진행 [기본 커널에서 작업해도 상관없음]
    [root@localhost ~]# uname -r

    5.7.2-1.el8.elrepo.x86_64

    ※ CentOS 8부터는 별도의 미러 경로를 잡지 않아도 YUM 설치만으로 최신 릴리즈 버전이 설치됩니다.
    [2020-06-17] 기준으로 설치되는 버전들
    Apache(Httpd) : 2.4.X
    PHP : 7.2.X [REMI저장소 : 7.4.X]

    MariaDB : 10.3.X [마리아 저장소 : 10.4.X]

    원래는 웹을 개발하려는 환경에 따라 버전에 맞게 RPM/소스파일로 설치하는 게 좋겠지만 크게 영향을 받지 않는다면 일반적으로 YUM(자동 설치)로 쉽게 진행하는 게 좋습니다. 소스로 설치하는 방법은 따로 포스팅하도록 하겠습니다.


    ■ [APM] Apache, PHP, MariaDB Install Guide 시작

    ※ 설치하기 전 APM 설치하기 위한 필수 의존성 라이브러리 설치 필요

    라이브러리 설치 확인
    [root@localhost ~]# rpm -qa libjpeg* libpng* freetype* gd-* gcc gcc-c++ gdbm-devel libtermcap-devel

    freetype-2.9.1-4.el8.x86_64

    libpng-1.6.34-5.el8.x86_64

    libjpeg-turbo-1.5.3-10.el8.x86_64

    gcc-8.3.1-4.5.el8.x86_64

    gcc-c++-8.3.1-4.5.el8.x86_64

     

    YUM을 이용하여 한번에 설치

    [root@localhost ~]# yum install libjpeg* libpng* freetype* gd-* gcc gcc-c++ gdbm-devel libtermcap-devel

    ==============================================================================
     Package                             Architecture            Version                         Repository                 Size
    ==============================================================================
    Installing:
     gd-devel                                 x86_64             2.2.5-6.el8                    AppStream              50 k
     libjpeg-turbo-devel           x86_64             1.5.3-10.el8                  AppStream             109 k
     libjpeg-turbo-utils             x86_64             1.5.3-10.el8                  AppStream              93 k
     libpng12                                x86_64             1.2.57-5.el8                   AppStream             160 k
     libpng15                                x86_64             1.5.30-7.el8                   AppStream              88 k
     freetype-devel                    x86_64             2.9.1-4.el8                       BaseOS                    464 k
     gdbm-devel                         x86_64             1:1.18-1.el8                    BaseOS                    66 k
     libpng-devel                        x86_64             2:1.6.34-5.el8                 BaseOS                   327 k
    Upgrading:
     cpp                                         x86_64             8.3.1-5.el8.0.2                AppStream              10 M
     gcc                                          x86_64             8.3.1-5.el8.0.2                AppStream              23 M
     gcc-c++                                 x86_64             8.3.1-5.el8.0.2                AppStream              12 M
     gcc-gdb-plugin                 x86_64             8.3.1-5.el8.0.2                AppStream             117 k
     libX11                                    x86_64             1.6.8-3.el8                       AppStream             611 k
     libX11-common                noarch             1.6.8-3.el8                       AppStream             158 k
     libXpm                                  x86_64             3.5.12-8.el8                     AppStream              58 k
     libstdc++-devel                 x86_64             8.3.1-5.el8.0.2                AppStream             2.0 M
     libtiff                                      x86_64             4.0.9-17.el8                    AppStream             188 k
     libxcb                                     x86_64             1.13.1-1.el8                   AppStream             229 k
     libblkid                                 x86_64             2.32.1-22.el8                  BaseOS                   214 k
     libfdisk                                 x86_64             2.32.1-22.el8                   BaseOS                   249 k
     libgcc                                    x86_64             8.3.1-5.el8.0.2                BaseOS                   78 k
     libgomp                               x86_64             8.3.1-5.el8.0.2                BaseOS                   203 k
     libmount                              x86_64             2.32.1-22.el8                  BaseOS                   231 k
     libsmartcols                       x86_64             2.32.1-22.el8                  BaseOS                   174 k
     libstdc++                              x86_64             8.3.1-5.el8.0.2                BaseOS                  451 k
     libuuid                                  x86_64             2.32.1-22.el8                  BaseOS                   94 k
     util-linux                              x86_64             2.32.1-22.el8                  BaseOS                   2.5 M
     util-linux-user                   x86_64             2.32.1-22.el8                  BaseOS                    98 k
    Installing dependencies:
     libX11-devel                      x86_64             1.6.8-3.el8                      AppStream             976 k
     libX11-xcb                          x86_64             1.6.8-3.el8                      AppStream              14 k
     libXau-devel                      x86_64             1.0.8-13.el8                   AppStream              20 k
     libXpm-devel                    x86_64             3.5.12-8.el8                   AppStream              39 k
     libtiff-devel                        x86_64             4.0.9-17.el8                   AppStream             511 k
     libwebp-devel                  x86_64             1.0.0-1.el8                      AppStream              37 k
     libxcb-devel                      x86_64             1.13.1-1.el8                   AppStream             1.1 M
     xorg-x11-proto-devel    noarch             2018.4-1.el8                  AppStream             283 k
     bzip2-devel                       x86_64             1.0.6-26.el8                    BaseOS                    224 k
     expat-devel                       x86_64             2.2.5-3.el8                      BaseOS                    55 k
     fontconfig-devel             x86_64             2.13.1-3.el8                    BaseOS                    151 k
     libuuid-devel                    x86_64             2.32.1-22.el8                 BaseOS                    95 k

    Transaction Summary
    =============================================================================

    설치        20 Packages
    업그레이드  20 Packages


    Is this ok [y/N]: y
    Total download size: 58 M

    ...

    업그레이드됨:
      cpp-8.3.1-5.el8.0.2.x86_64                  gcc-8.3.1-5.el8.0.2.x86_64           gcc-c++-8.3.1-5.el8.0.2.x86_64

      gcc-gdb-plugin-8.3.1-5.el8.0.2.x86_64    libX11-1.6.8-3.el8.x86_64          libX11-common-1.6.8-3.el8.noarch  

      libXpm-3.5.12-8.el8.x86_64                  libstdc++-devel-8.3.1-5.el8.0.2.x86_64       libtiff-4.0.9-17.el8.x86_64

      libxcb-1.13.1-1.el8.x86_64                  libblkid-2.32.1-22.el8.x86_64                libfdisk-2.32.1-22.el8.x86_64
      libgcc-8.3.1-5.el8.0.2.x86_64               libgomp-8.3.1-5.el8.0.2.x86_64               libmount-2.32.1-22.el8.x86_64
      libsmartcols-2.32.1-22.el8.x86_64           libstdc++-8.3.1-5.el8.0.2.x86_64             libuuid-2.32.1-22.el8.x86_64
      util-linux-2.32.1-22.el8.x86_64             util-linux-user-2.32.1-22.el8.x86_64

     

    설치됨:
      gd-devel-2.2.5-6.el8.x86_64            libjpeg-turbo-devel-1.5.3-10.el8.x86_64   libjpeg-turbo-utils-1.5.3-10.el8.x86_64

      libpng12-1.2.57-5.el8.x86_64               libpng15-1.5.30-7.el8.x86_64              freetype-devel-2.9.1-4.el8.x86_64
      gdbm-devel-1:1.18-1.el8.x86_64             libpng-devel-2:1.6.34-5.el8.x86_64        libX11-devel-1.6.8-3.el8.x86_64
      libX11-xcb-1.6.8-3.el8.x86_64              libXau-devel-1.0.8-13.el8.x86_64          libXpm-devel-3.5.12-8.el8.x86_64
      libtiff-devel-4.0.9-17.el8.x86_64          libwebp-devel-1.0.0-1.el8.x86_64          libxcb-devel-1.13.1-1.el8.x86_64

      xorg-x11-proto-devel-2018.4-1.el8.noarch   bzip2-devel-1.0.6-26.el8.x86_64           expat-devel-2.2.5-3.el8.x86_64
      fontconfig-devel-2.13.1-3.el8.x86_64       libuuid-devel-2.32.1-22.el8.x86_64

     

    완료되었습니다!

    ■ Apache, MariaDB, PHP 설치 순서로 진행

    1. 아파치(Apache) 설치

    [root@localhost ~]# yum install httpd

    ======================================================================================
     Package                                    Architecture               Version                                    Repository                 Size 
    ======================================================================================
    Installing:
     httpd                                            x86_64        2.4.37-21.module_el8.2.0+382+15b0afa8      AppStream            1.7 M
    Installing dependencies:
     apr                                                x86_64                  1.6.3-9.el8                                    AppStream             125 k
     apr-util                                        x86_64                  1.6.1-6.el8                                    AppStream             105 k
     httpd-filesystem                     noarch        2.4.37-21.module_el8.2.0+382+15b0afa8      AppStream              36 k
     httpd-tools                               x86_64        2.4.37-21.module_el8.2.0+382+15b0afa8     AppStream              103 k
     mod_http2                               x86_64        1.11.3-3.module_el8.2.0+307+4d18d695      AppStream              157 k
     centos-logos-httpd               noarch                  80.5-2.el8                                       BaseOS                   24 k
    Installing weak dependencies:
     apr-util-bdb                              x86_64                  1.6.1-6.el8                                     AppStream              25 k
     apr-util-openssl                      x86_64                  1.6.1-6.el8                                     AppStream              27 k
    Enabling module streams:
     httpd                                                                          2.4

    Transaction Summary
    ======================================================================================
    설치  9 Packages

     

    Total download size: 2.3 M
    Installed size: 6.0 M
    Is this ok [y/N]:y

    설치됨:
      httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64   apr-util-bdb-1.6.1-6.el8.x86_64

      apr-util-openssl-1.6.1-6.el8.x86_64  apr-1.6.3-9.el8.x86_64 apr-util-1.6.1-6.el8.x86_64

      httpd-filesystem-2.4.37-21.module_el8.2.0+382+15b0afa8.noarch

      httpd-tools-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64

      mod_http2-1.11.3-3.module_el8.2.0+307+4d18d695.x86_64 centos-logos-httpd-80.5-2.el8.noarch

     

    완료되었습니다!

    2. 마리아(Maria DB) 설치

    기본 미러 사이트에서 YUM으로 설치해도 10.3.X 버전이 설치가 되지만 MariaDB의 경우는
    자체 공식 미러 사이트를 제공하고 있으므로 직접 저장소 생성하여 진행하는 게 좋습니다. (버전별로 가능)

    배포 사이트 : [링크]

    버전별 세팅 방법(스크린샷 참고) : [링크]

    먼저 YUM 저장소 생성[파일 생성 후 저장]

    [root@localhost ~]# vi /etc/yum.repos.d/MariaDB.repo

    # MariaDB 10.4 CentOS repository list - created 2020-06-18 04:58 UTC

    # http://downloads.mariadb.org/mariadb/repositories/

    [mariadb]
    name = MariaDB

    baseurl = http://yum.mariadb.org/10.4/centos8-amd64

    module_hotfixes=1

    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

    gpgcheck=1

    MariaDB 설치

    [root@localhost ~]# yum install MariaDB-server MariaDB-client

    Dependencies resolved.
    =======================================================================================
     Package                                  Architecture               Version                  Repository                             Size
    =======================================================================================
    Installing:
     MariaDB-client                          x86_64             10.4.13-1.el8                 mariadb                              12 M
     MariaDB-server                         x86_64             10.4.13-1.el8                 mariadb                              26 M
    Installing dependencies:
     boost-program-options        x86_64             1.66.0-7.el8                    AppStream                       140 k
     perl-DBI                                        x86_64             1.641-3.module_el8.1.0+199+8f0a6bbd     AppStream        740 k
     perl-Math-BigInt                       noarch             1:1.9998.11-7.el8         BaseOS                               196 k
     perl-Math-Complex                 noarch             1.59-416.el8                   BaseOS                               108 k
     MariaDB-common                   x86_64             10.4.13-1.el8                   mariadb                               87 k
     MariaDB-shared                       x86_64             10.4.13-1.el8                   mariadb                              115 k
     galera-4                                       x86_64              26.4.4-1.rhel8.0.el8      mariadb                              13 M

    Transaction Summary
    ======================================================================================
    설치  9 Packages

    ..

    Total download size: 53 M
    Installed size: 251 M
    Is this ok [y/N]: y

    ..

    GPG키 0x1BB943DB를 불러옵니다:
     사용자     : "MariaDB Package Signing Key <package-signing-key@mariadb.org>"

      GPG 지문: 1993 69E5 404B D5FC 7D2F E43B CBCB 082A 1BB9 43DB

     출처        : https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

    Is this ok [y/N]: y

    ..

     

    설치됨:
      MariaDB-client-10.4.13-1.el8.x86_64                MariaDB-server-10.4.13-1.el8.x86_64

      boost-program-options-1.66.0-7.el8.x86_64      perl-DBI-1.641-3.module_el8.1.0+199+8f0a6bbd.x86_64

      perl-Math-BigInt-1:1.9998.11-7.el8.noarch        perl-Math-Complex-1.59-416.el8.noarch

      MariaDB-common-10.4.13-1.el8.x86_64           MariaDB-shared-10.4.13-1.el8.x86_64

      galera-4-26.4.4-1.rhel8.0.el8.x86_64

     

    완료되었습니다!

    3. PHP 설치

    기본 미러 사이트에서 YUM으로 설치해도 7.2.X 버전이 설치가 되지만 동일하게 버전(모듈) 별로 자유롭게 설치하기 위해서는 REMI 저장소를 이용하는 게 좋습니다.

    공식 블로그 사이트 : [링크]

    버전별 세팅 방법(스크린샷 참고) : [링크]

    먼저 [REMI] 저장소 설치

    [root@localhost ~]# yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

     

    Dependencies resolved.
    ===========================================================================
     Package                                   Architecture            Version                   Repository                      Size
    ===========================================================================
    Installing:
     remi-release                               noarch                8.1-2.el8..remi       @commandline            23 k
    Installing dependencies:
     epel-release                                noarch                8-8.el8                       extras                                23 k

    Transaction Summary
    ===========================================================================
    설치  2 Packages

    Total size: 46 k
    Total download size: 23 k
    Installed size: 49 k
    Is this ok [y/N]: y

    ..

    설치됨:
      remi-release-8.1-2.el8.remi.noarch      epel-release-8-8.el8.noarch

     

    완료되었습니다!

    설치 가능한 리스트 확인

    [root@localhost ~]# yum module list php

    CentOS-8 - AppStream
    Name                Stream                    Profiles                                                           Summary                                
    php                    7.2 [d]                     common [d], devel, minimal                  PHP scripting language
    php                    7.3                            common [d], devel, minimal                  PHP scripting language

    Remi's Modular repository for Enterprise Linux 8 - x86_64
    Name                Stream                     Profiles                                                           Summary
    php                    remi-7.2                  common [d], devel, minimal                  PHP scripting language
    php                    remi-7.3                  common [d], devel, minimal                  PHP scripting language
    php                    remi-7.4                  common [d], devel, minimal                  PHP scripting language

    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

    PHP [7.4] 모듈을 사용하기 위한 활성화 및 디폴트 설정

    [root@localhost ~]# yum module enable php:remi-7.4

     

    Dependencies resolved.
    ================================================================================
     Package                                    Architecture               Version                      Repository                   Size
    ================================================================================

    Enabling module streams:
     php                                                 remi-7.4 

     

    Transaction Summary
    ================================================================================

    Is this ok [y/N]: y

    완료되었습니다!

    PHP설치

    [root@localhost modules]# yum install php

    Dependencies resolved.

    ================================================================================
     Package                                  Architecture               Version                      Repository                   Size
    ================================================================================

    Installing:
     php                                               x86_64             7.4.7-1.el8.remi                 remi-modular             3.0 M

    Installing dependencies:
     libsodium                                  x86_64             1.0.18-2.el8                           epel                                162 k

     php-common                          x86_64             7.4.7-1.el8.remi                   remi-modular             1.2 M

     php-json                                    x86_64             7.4.7-1.el8.remi                   remi-modular              75 k

     oniguruma5php                     x86_64             6.9.5+rev1-2.el8.remi        remi-safe                      206 k

    Installing weak dependencies:
     nginx-filesystem                     noarch    1:1.14.1-9.module_el8.0.0+184+e34fea82         AppStream           24 k

     php-cli                                        x86_64             7.4.7-1.el8.remi                   remi-modular             4.6 M

     php-fpm                                    x86_64             7.4.7-1.el8.remi                    remi-modular             1.6 M

     php-mbstring                          x86_64             7.4.7-1.el8.remi                   remi-modular             528 k

     php-opcache                           x86_64             7.4.7-1.el8.remi                   remi-modular             334 k

     php-pdo                                    x86_64             7.4.7-1.el8.remi                    remi-modular             143 k

     php-sodium                             x86_64             7.4.7-1.el8.remi                    remi-modular              87 k

     php-xml                                     x86_64             7.4.7-1.el8.remi                    remi-modular             215 k

    Enabling module streams:
     nginx                                                                              1.14                                                                              

    Transaction Summary
    ============================================================================

    설치  13 Packages

    Total download size: 12 M
    Installed size: 59 M
    Is this ok [y/N]: y

    ..

    php-7.4.7-1.el8.remi.x86_64                         nginx-filesystem-1:1.14.1-9.module_el8.0.0+184+e34fea82.noarch

    php-cli-7.4.7-1.el8.remi..x86_64                                php-fpm-7.4.7-1.el8.remi.x86_64

    php-mbstring-7.4.7-1.el8.remi.x86_64                   php-opcache-7.4.7-1.el8.remi.x86_64

    php-pdo-7.4.7-1.el8.remi.x86_64                             php-sodium-7.4.7-1.el8.remi.x86_64

    php-xml-7.4.7-1.el8.remi.x86_64                              libsodium-1.0.18-2.el8.x86_64

    php-common-7.4.7-1.el8.remi.x86_64                   php-json-7.4.7-1.el8.remi.x86_64

    oniguruma5php-6.9.5+rev1-2.el8.remi.x86_64


    완료되었습니다!

    자주 사용되는 PHP모듈 추가 설치 [fpm/pdo/mbstring/xml 이미 설치되어 제외]

    [root@localhost ~]# yum install php-mysqlnd php-pgsql php-odbc php-pdo-dblib php-gd php-pear php-xmlrpc php-pecl-mcrypt

     

    ependencies resolved.
    ==================================================================================
     Package                                       Architecture                 Version                             Repository               Size
    ==================================================================================

    Installing:
     php-gd                                         x86_64                7.4.7-1.el8.remi                      remi-modular             91 k

     php-mysqlnd                             x86_64                7.4.7-1.el8.remi                      remi-modular            259 k

     php-odbc                                    x86_64                7.4.7-1.el8.remi                      remi-modular             98 k

     php-pdo-dblib                          x86_64                7.4.7-1.el8.remi                      remi-modular             67 k

     php-pear                                     noarch                1:1.10.12-1.el8.remi              remi-modular           365 k

     php-pecl-mcrypt                     x86_64                1.0.3-1.el8.remi.7.4               remi-modular             35 k

     php-pgsql                                   x86_64                7.4.7-1.el8.remi                      remi-modular            140 k

     php-xmlrpc                                x86_64                7.4.7-1.el8.remi                      remi-modular             93 k

    Installing dependencies:
     libpq                                             x86_64                12.1-3.el8                                  AppStream                 195 k

     unixODBC                                   x86_64                2.3.7-1.el8                                 AppStream                 458 k
     freetds                                         x86_64                1.1.20-1.el8                               epel                               411 k
     freetds-libs                                x86_64                1.1.20-1.el8                               epel                               378 k
     libmcrypt                                   x86_64                2.5.8-26.el8                                epel                              109 k

     php-fedora-autoloader       noarch                1.0.1-2.el8.remi                       remi-modular            13 k

     php-process                             x86_64                7.4.7-1.el8.remi                       remi-modular             96 k

     

    Transaction Summary

    ===================================================================================

    설치  15 Packages

    Total download size: 2.7 M
    Installed size: 10 M
    Is this ok [y/N]: y

    ..

    설치됨:
      php-gd-7.4.7-1.el8.remi.x86_64                          php-mysqlnd-7.4.7-1.el8.remi.x86_64               

      php-odbc-7.4.7-1.el8.remi.x86_64                      php-pdo-dblib-7.4.7-1.el8.remi.x86_64

      php-pear-1:1.10.12-1.el8.remi.noarch               php-pecl-mcrypt-1.0.3-1.el8.remi.x86_64

      php-pgsql-7.4.7-1.el8.remi.x86_64                      php-xmlrpc-7.4.7-1.el8.remi.x86_64                   

      libpq-12.1-3.el8.x86_64                                            unixODBC-2.3.7-1.el8.x86_64                                               

      freetds-1.1.20-1.el8.x86_64                                    freetds-libs-1.1.20-1.el8.x86_64                                           

      libmcrypt-2.5.8-26.el8.x86_64                              php-fedora-autoloader-1.0.1-2.el8.remi.noarch

      php-process-7.4.7-1.el8.remi.x86_64


    완료되었습니다!

    [참고]

    [root@localhost html]# php -m

     

    다음 명령어를 이용하면 적용되어있는 모듈을 확인 하실 수 있습니다.

    [PHP Modules]
    bz2
    calendar
    Core
    ctype
    curl
    date
    dom
    exif
    fileinfo
    filter
    ftp
    gd
    gettext
    hash
    iconv
    json
    libxml
    mbstring
    mcrypt
    mysqli
    mysqlnd
    odbc
    openssl
    pcntl
    pcre
    PDO
    pdo_dblib
    pdo_mysql
    PDO_ODBC
    pdo_pgsql
    pdo_sqlite
    pgsql
    Phar
    posix
    readline
    Reflection
    session
    shmop
    SimpleXML
    sockets
    sodium
    SPL
    sqlite3
    standard
    sysvmsg
    sysvsem
    sysvshm
    tokenizer
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xsl
    Zend OPcache
    zlib

    [Zend Modules]
    Zend OPcache

    □ 설치 버전 확인

    [root@localhost ~]# httpd -v
    Server version: Apache/2.4.37 (centos)
    Server built:   Jun  8 2020 20:14:33

     

    [root@localhost ~]# php -v
    PHP 7.4.7 (cli) (built: Jun  9 2020 10:57:17) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies
        with Zend OPcache v7.4.7, Copyright (c), by Zend Technologies

     

    옵션 대문자

    [root@localhost ~]# mysql -V
    mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for Linux (x86_64) using readline 5.1


    ■ [APM] Apache, PHP, MariaDB config(설정) 및 구동

    1. 아파치(Apache) 설정 및 구동

    □ 1-1 기본 설정(수정 후 저장)

    [root@localhost ~]# vi /etc/httpd/conf/httpd.conf

         65 # User/Group: The name (or #number) of the user/group to run httpd as.
         66 # It is usually good practice to create a dedicated user and group for
         67 # running httpd, as with most system services.
         68 #
         69 User nobody                  (apache → nobody 변경)
         70 Group nobody               (apache → nobody 변경)

    ..
         92 # ServerName gives the name and port that the server uses to identify itself.
         93 # This can often be determined automatically, but we recommend you specify
         94 # it explicitly to prevent problems during startup.
         95 #
         96 # If your host doesn't have a registered DNS name, enter its IP address here.
         97 #

         98 #ServerName www.example.com:80
         99 ServerName 192.168.232.128:80                      (도메인 또는 해당 서버 IP 입력 추가)

    [참고]
    apache → nobody 변경
    ROOT 권한으로 실행된 아파치의 하위 프로세스를 이곳에서 지정한 사용자로 실행한다는 의미,
    기본값으로 apache 또는 daemon으로 되어있지만 대부분 nobody로 변경하여 이용한다. 약간 보안적인 의미를 포함

     

     ServerName
    자기 서버가 이 도메인을 사용한다는 것을 알리기 위한 수단, 예를 들어

    ServerName www.test.com:80 → 홈페이지 접속 시 해당 도메인(http://www.test.com)으로 연결

    ServerName 192.168.122.128:80 → 홈페이지 접속 시 해당 도메인(http://192.168.122.128)으로 연결 (도메인이 없을 경우 IP 입력)

     

     IP는 자기 서버 IP 세팅
    [root@localhost ~]# ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.232.128 (이 부분)  netmask 255.255.255.0  broadcast 192.168.232.255

    □ 1-2 방화벽 설정(수정 후 저장)

    환경설정이 완료가 되었으니 웹을 열기 위해선 방화벽 80번 포트를 오픈해야 합니다.

    [root@localhost ~]# vi /etc/sysconfig/iptables


    # sample configuration for iptables service
    # you can edit this manually or use system-config-firewall
    # please do not ask us to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT                 [라인 추가]
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT

    [참고]
    iptables에서 순서는 매우 중요합니다. 일반적으로 적용되는 순서는 위에서부터 아래로 순차적으로 읽어옵니다.
    예를 들어 추가한 맨 아래의 라인 쪽에 추가를 하게 되면 적용이 정상적으로 안됩니다. 이해가 안 될 경 우는 스크린샷 그대로 따라 진행해주세요. 나중에 별도로 iptables 설명을 하도록 하겠습니다.

    □ 1-3 방화벽 재시작(service iptables restart 명령어 사용 가능)

    [root@localhost ~]# systemctl restart iptables

    □ 1-4 적용 확인

    [root@localhost ~]# iptables -nL
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:8888
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80   [오픈 확인]
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

    □ 1-5 아파치 시작

    아파치 구동[service httpd start(stop) 명령어 사용 가능]

    [root@localhost ~]# systemctl start httpd

     

    부팅 후 자동 실행 설정[비활성화 시 disable]
    [root@localhost ~]# systemctl enable httpd
    Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

    □ 1-6 아파치 구동 확인

    [root@localhost ~]# ps -ef |grep httpd
    root             6275      1      0 22:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
    nobody     6276   6275  0 22:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
    nobody     6277   6275  0 22:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
    nobody     6278   6275  0 22:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
    nobody     6279   6275  0 22:17 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
    root            6548   6097  0 22:21 pts/0    00:00:00 grep --color=auto httpd

    □ 1-7 웹 구동 확인 테스트(스크린샷 참고)

     

    2. PHP 환경설정 및 구동(경로)

    □ 2-1 httpd 설정 기본 파일 PHP MINE 기본 설정(수정 후 저장)

    [root@localhost ~]# vi /etc/httpd/conf/httpd.conf


        164 # DirectoryIndex: sets the file that Apache will serve if a directory
        165 # is requested.
        166 #
        167 <IfModule dir_module>
        168     DirectoryIndex index.html index.htm index.php         [일부 추가]

        169 </IfModule>

     

        284     # If the AddEncoding directives above are commented-out, then you
        285     # probably should define those extensions to indicate media types:
        286     #
        287     AddType application/x-compress .Z
        288     AddType application/x-gzip .gz .tgz
        289    AddType application/x-httpd-php .php             [라인 추가]
        290    AddType application/x-httpd-phps .phps        [라인 추가]

    [참고]
    실제 PHP환경설정을 관리하는 파일은 아래의 경로입니다.

    [root@localhost conf.modules.d]# vi /etc/php.ini

    위 httpd.conf 쪽에 세팅하는 건 아파치에 php 관련 처리를 할 수 있게 추가를 하는 부분입니다.  php.ini 파일 설정은 사용하려는 웹 환경에 맞게튜닝을 해야 하지만 현재는 기본 세팅으로 갑니다. 나중에 따로 설명하도록 하겠습니다.

     

    YUM설치 시 PHP7 모듈 파일 경로

    [root@localhost httpd]# ls -al /etc/httpd/modules/ | grep php7

    -rwxr-xr-x 1 root root 5737848  6월  9 07:52 libphp7-zts.so

    -rwxr-xr-x 1 root root 5588904  6월  9 07:52 libphp7.so

     

    PHP7 모듈 적용 설정 파일 경로[이미 세팅되어있음]

    [root@localhost httpd]# vi /etc/httpd/conf.modules.d/15-php.conf

    LoadModule php7_module modules/libphp7.so

    □ 2-2 PHP-FPM 기본 설정(수정 후 저장)

    [root@localhost ~]# vi /etc/php-fpm.d/www.conf

         24 user = nobody            (apache → nobody 변경)

         26 group = nobody          (apache → nobody 변경)

     

         52 ; When POSIX Access Control Lists are supported you can set them using
         53 ; these options, value is a comma separated list of user/group names.
         54 ; When set, listen.owner and listen.group are ignored
         55 ; listen.acl_users = apache,nginx     [; 주석처리]
         56 listen.acl_groups = nobody        [라인 추가]

    [참고]

    PHP-FPM (PHP FastCGI Process Manager)란?
    웹서버(apache/nginx)와 상호작용(동적)으로 통신 처리하기 위한 프로그램입니다. CGI의 상위 버전이며 통신 시 발생되는 부하를 줄이고 서버가 한 번에 더 많은 웹페이지 요청을 관리할 수 있게 합니다. 예를 들어 [XE/그누보드/워드프레스] 게시판 같은 로그인과 게시글 등록 등의 변화가 많은 사이트에 적합하다고 할 수 있습니다. Apache 보다는 Nginx과 많이 연동하여 사용하며 Remi를 이용해 YUM 설치하면 같이 설치되다 보니 Apache 사용하는 김에 이용하면 좋을 것으로 판단되어 같이 설정합니다.

     

    listen.acl_groups 옵션은 listen.owner 및 listen.group 권한으로 실행되는 것을 제외하는 옵션

    아마 검색해서 들어오시는 대부분의 사용자가 아래와 같은 경험을 하신 분들이 많을 것으로 예상됩니다.

    Apache와 연동하는 경우에는 이상하게 아래의 옵션을 적용을 한 뒤에 PHP-FPM 재시작을 해도

     

    listen.owner  = nobody

    listen.group = nobody

    isten.mode = 0660

     

    [root@localhost php-fpm]# ls -al /var/run/php-fpm/

    -rw-r--r--   1 root root   5  6월 24 01:00 php-fpm.pid

    srw-rw----+  1 root root   0  6월 24 01:00 www.sock

     

    무조건 ROOT 권한으로 실행이 됩니다. 이상태에서. PHP를 열게 되면 아래와 같이 권한 때문에 페이지 에러 발생

     

    [웹 페이지 에러메세지(스크린샷 참고)]

    Service Unavailable

    The server is temporarily unable to service your request due to maintenance downtime or capacity problems.

    Plsase try again later.

     

    [서버 로그 메세지]

    [Tue Jun 23 21:13:02.896505 2020] [proxy:error] [pid 38425:tid 140299678566144] (13)Permission denied: AH02454: F CGI: attempt to connect to Unix domain socket /run/php-fpm/www.sock (*) failed

    [Tue Jun 23 21:13:02.896554 2020] [proxy_fcgi:error] [pid 38425:tid 140299678566144] [client 192.168.232.1:49559] AH01079: failed to make connection to backend: httpd-UDS

     

    이문제는 순수 권한 문제로 발생했기 때문에 실행 권한이 있는 계정과 동일하게 맞춰주면 해결은 됩니다.

     

    [root@localhost ~]# chown -R nobody:nobody /var/run/php-fpm/

    [root@localhost php-fpm]# ls -al /var/run/php-fpm/

    -rw-r--r--   1 nobody nobody   5  6월 24 01:00 php-fpm.pid

    srw-rw----+  1 nobody nobody   0  6월 24 01:00 www.sock

     

    다만 재시작 시 원상 복구되므로 할 때마다 위 명령어를 해줘야 하는 불편함이 있으므로 [listen.acl_groups = nobody] 명령어를 이용해 ROOT로 시작돼도 해당 계정은 예외 될 수 있도록 하는 게 더 좋습니다.

    □ 2-3 PHP-FPM 활성화 및 설정 적용을 위한 재시작

    PHP-FPM 재시작[service php-fpm start(stop) 명령어 사용 가능]
    [root@localhost ~]# systemctl restart php-fpm

     

    부팅 후 자동 실행 설정[비활성화 시 disable]
    [root@localhost ~]# systemctl enable php-fpm
    Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service  → /usr/lib/systemd/system/php-fpm.service.

     

    httpd.conf 설정 변경으로 동일하게 재시작

    [root@localhost ~]# systemctl restart httpd

    □ 2-4 PHP-FPM 구동 확인

    [root@localhost ~]# ps -ef |grep php
    root      31717      1  0 01:00 ?        00:00:00 php-fpm: master process (/etc/php-fpm.conf)

    nobody    31720  31717  0 01:00 ?        00:00:00 php-fpm: pool www
    nobody    31721  31717  0 01:00 ?        00:00:00 php-fpm: pool www
    nobody    31722  31717  0 01:00 ?        00:00:00 php-fpm: pool www
    nobody    31723  31717  0 01:00 ?        00:00:00 php-fpm: pool www
    nobody    31724  31717  0 01:00 ?        00:00:00 php-fpm: pool www

    □ 2-5 PHP 적용 확인

    Yum 설치 시 기본 html 업로드 기본 디렉터리 경로 이동

    [root@localhost php74]# cd /var/www/html/

     

    해당 경로에서 PHP의 정보를 보여주는 함수 파일 생성 후 저장
    [root@localhost html]# vi /var/www/html/phpinfo.php

     

    <?php phpinfo();?>      [라인 추가]

    파일 생성 확인
    [root@localhost html]# ls
    phpinfo.php

    □ 2-6 PHP 웹 연동 확인 테스트(스크린샷 참고)

    3. MariaDB 구동 및 설정

    □ 3-1 MariaDB 구동

    [root@localhost ~]# systemctl start mariadb

     

    부팅 시 자동 시작 활성화

    [root@localhost ~]# systemctl enable mariadb
    Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.

    Created symlink /etc/systemd/system/mysqld.service  → /usr/lib/systemd/system/mariadb.service.

    Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.

     

    구동 확인

    [root@localhost ~]# ps -ef | grep mysql

    mysql 32149 1 6 02:29 ? 00:00:00 /usr/sbin/mysqld

    root 32182 32106 0 02:29 pts/0 00:00:00 grep --color=auto mysql

    □ 3-2 Maria DB 기본 설정 (DB가 구동된 상태에서 진행 가능)

    [root@localhost ~]# mysql_secure_installation

     

    NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

          SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

     

    In order to log into MariaDB to secure it, we'll need the current

    password for the root user. If you've just installed MariaDB, and

    haven't set the root password yet, you should just press enter here.

     

    Enter current password for root (enter for none): (패스워드가 없기 때문에 엔터)

    OK, successfully used password, moving on...

     

    Setting the root password or using the unix_socket ensures that nobody

    can log into the MariaDB root user without the proper authorisation.

     

    You already have your root account protected, so you can safely answer 'n'.

    Switch to unix_socket authentication [Y/n] Y    (MariaDB 실행 시 통신 소켓 생성 여부? Y 엔터)


    You already have your root account protected, so you can safely answer 'n'.
    Change the root password? [Y/n] Y   (DB ROOT 패스워드 설정할 것인가? Y 엔터)
    New password:  패스워드 입력
    Re-enter new password:  재확인 패스워드 입력
    Password updated successfully!
    Reloading privilege tables..
     ... Success!

    By default, a MariaDB installation has an anonymous user, allowing anyone
    to log into MariaDB without having to have a user account created for
    them.  This is intended only for testing, and to make the installation
    go a bit smoother.  You should remove them before moving into a
    production environment.


    Remove anonymous users? [Y/n] Y  (익명의 접근을 막을 것인지? 보안을 위해 Y 엔터)
     ... Success!

    Normally, root should only be allowed to connect from 'localhost'.  This
    ensures that someone cannot guess at the root password from the network.

    Disallow root login remotely? [Y/n] Y (DB ROOT 원격을 막을 것인지? 보안을 위해 Y 엔터)
     ... Success!

    By default, MariaDB comes with a database named 'test' that anyone can
    access.  This is also intended only for testing, and should be removed
    before moving into a production environment.

    Remove test database and access to it? [Y/n] (Test 용으로 생성된 데이터베이스를 삭제할 것인가? Y 엔터)
     - Dropping test database...
     ... Success!
     - Removing privileges on test database...
     ... Success!

    Reloading the privilege tables will ensure that all changes made so far
    will take effect immediately.

    Reload privilege tables now? [Y/n] Y (현재 설정한 값을 적용할 것인지? 당연히 Y 엔터)
     ... Success!

    Cleaning up...

    All done!  If you've completed all of the above steps, your MariaDB
    installation should now be secure.

    Thanks for using MariaDB! [설정 완료]

    □ 3-3 MariaDB 접속

    [root@localhost ~]# mysql -u root -p
    Enter password: 패스워드 입력
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 18
    Server version: 10.4.13-MariaDB MariaDB Server

    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]> status [기본적인 상태 확인]
    --------------
    mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for Linux (x86_64) using readline 5.1

    Connection id:          19
    Current database:
    Current user:           root@localhost
    SSL:                    Not in use
    Current pager:          stdout
    Using outfile:          ''
    Using delimiter:        ;
    Server:                 MariaDB
    Server version:         10.4.13-MariaDB MariaDB Server
    Protocol version:       10
    Connection:             Localhost via UNIX socket
    Server characterset:    latin1
    Db     characterset:    latin1
    Client characterset:    utf8
    Conn.  characterset:    utf8
    UNIX socket:            /var/lib/mysql/mysql.sock

    Uptime:                 23 min 38 sec

    Threads: 7  Questions: 26  Slow queries: 0  Opens: 20  Flush tables: 1  Open tables: 14  Queries per second avg: 0.018
    --------------

    참고

     MariaDB(Mysql) 환경설정을 관리하는 파일은 아래의 경로입니다.

    [root@localhost ~]# vi /etc/my.cnf

     

    my.cnf 파일 설정은 사용하려는 DB 환경에 맞게 튜닝을 해야 하지만 현재는 기본 세팅으로 갑니다.

    이 내용은 따로 포스팅하도록 하겠습니다.


    이상 위에 순서대로 웹 구축만 하여도 웹서버를 구동하는 데에는 크게 문제가 없습니다.
    만약 직접 웹홈페이지 개발을 한다면 충분히 연습할 수 있는 공간을 만들 수 있을 것으로 보입니다.
    APM 설치 포스팅이었습니다.

    Designed by JB FACTORY