웹사이트 검색

CentOS 7에 Linux, Nginx, MySQL, PHP(LEMP) 스택을 설치하는 방법


소개

LEMP 소프트웨어 스택은 서버가 동적 웹사이트 및 웹 앱을 호스팅할 수 있도록 일반적으로 함께 설치되는 오픈 소스 소프트웨어 그룹입니다. 이 용어는 실제로 ENginx 웹 서버(LAMP 스택의 Apache 구성 요소를 대체함)와 함께 Linux 운영 체제를 나타내는 약어입니다. 사이트 데이터는 MySQL 기반 데이터베이스에 저장되며 동적 콘텐츠는 PHP에서 처리됩니다.

이 가이드에서는 MariaDB를 데이터베이스 관리 시스템으로 사용하여 CentOS 7 서버에 PHP 7.4가 설치된 LEMP 스택을 가져옵니다. MariaDB는 원래 MySQL 서버의 드롭인 대체품으로 작동합니다. 즉, 애플리케이션에서 구성이나 코드를 변경하지 않고도 MariaDB로 전환할 수 있습니다.

전제 조건

이 가이드를 시작하기 전에 서버에 루트가 아닌 별도의 사용자 계정을 설정해야 합니다. CentOS 7의 초기 서버 설정에서 1-4단계를 완료하여 이를 수행하는 방법을 배울 수 있습니다.

1단계 - Nginx 설치

사이트 방문자에게 웹 페이지를 표시하기 위해 고성능 웹 서버인 Nginx를 사용할 예정입니다. 최신 Nginx 버전을 얻으려면 먼저 CentOS 7 운영 체제용 추가 소프트웨어가 포함된 EPEL 저장소를 설치합니다.

CentOS 7 EPEL 리포지토리를 추가하려면 다음 명령을 실행합니다.

  1. sudo yum install epel-release

sudo 명령을 사용하고 있으므로 이러한 작업은 루트 권한으로 실행됩니다. 루트 권한으로 명령을 실행할 수 있는 권한이 있는지 확인하기 위해 일반 사용자의 비밀번호를 묻습니다. 또한 설치를 확인하라는 메시지가 표시되므로 계속하려면 Y를 누르십시오.

이제 EPEL 리포지토리가 서버에 설치되었으므로 다음 yum 명령을 사용하여 Nginx를 설치합니다.

  1. sudo yum install nginx

설치가 완료되면 다음을 사용하여 Nginx 서비스를 시작합니다.

  1. sudo systemctl start nginx

웹 브라우저에서 서버의 공용 IP 주소를 방문하여 모든 것이 계획대로 진행되었는지 확인하기 위해 바로 무작위 검사를 수행할 수 있습니다(이 정보가 없는 경우 공용 IP 주소가 무엇인지 알아보려면 다음 제목 아래의 참고 사항 참조) 이미):

Open in a web browser:
http://server_domain_name_or_IP/

정보 제공 및 테스트 목적으로 제공되는 기본 CentOS 7 Nginx 웹 페이지가 표시됩니다. 다음과 같아야 합니다.

이 페이지가 보이면 웹 서버가 올바르게 설치된 것입니다.

Nginx가 부팅 시 시작되도록 하려면 다음 명령을 실행합니다.

  1. sudo systemctl enable nginx

서버의 공용 IP 주소를 찾는 방법

서버의 공용 IP 주소를 모르는 경우 여러 가지 방법으로 찾을 수 있습니다. 일반적으로 이것은 SSH를 통해 서버에 연결하는 데 사용하는 주소입니다.

명령줄에서 이를 몇 가지 방법으로 찾을 수 있습니다. 먼저 iproute2 도구를 사용하여 다음을 입력하여 주소를 가져올 수 있습니다.

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

이것은 당신에게 한두 줄을 줄 것입니다. 둘 다 올바른 주소이지만 컴퓨터는 그 중 하나만 사용할 수 있으므로 자유롭게 각각 시도하십시오.

다른 방법은 외부 당사자를 사용하여 그것이 귀하의 서버를 어떻게 보는지 알려주는 것입니다. IP 주소가 무엇인지 특정 서버에 요청하여 이를 수행할 수 있습니다.

  1. curl http://icanhazip.com

IP 주소를 얻기 위해 사용하는 방법에 관계없이 웹 브라우저의 주소 표시줄에 입력하여 서버에 연결할 수 있습니다.

2단계 - MariaDB 설치

이제 웹 서버를 가동하고 실행 중이므로 MySQL 드롭인 대체품인 MariaDB를 설치할 차례입니다. MariaDB는 커뮤니티에서 개발한 MySQL 관계형 데이터베이스 관리 시스템의 포크입니다.

여기서도 yum을 사용하여 소프트웨어를 획득하고 설치할 수 있습니다. 이번에는 구성 요소가 서로 통신하는 데 도움이 되는 다른 도우미 패키지도 설치합니다.

  1. sudo yum install mariadb-server mariadb

설치가 완료되면 다음 명령으로 MariaDB를 시작해야 합니다.

  1. sudo systemctl start mariadb

이제 MariaDB 데이터베이스가 실행 중이므로 일부 위험한 기본값을 제거하고 데이터베이스에 대한 액세스를 잠그는 보안 스크립트를 실행하려고 합니다. 다음을 실행하여 대화형 스크립트를 시작합니다.

  1. sudo mysql_secure_installation

프롬프트에서 현재 root MariaDB 비밀번호를 묻습니다. 방금 MariaDB를 설치했으므로 없을 가능성이 높으므로 Enter 키를 눌러 비워 둡니다. 그러면 루트 암호를 설정할지 묻는 메시지가 나타납니다. 계속해서 Y를 입력하고 지침을 따르십시오.

mysql_secure_installation prompts:
Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success!

나머지 질문에 대해서는 각 프롬프트에서 "ENTER\ 키를 눌러 기본값을 수락해야 합니다. 이렇게 하면 일부 샘플 사용자와 데이터베이스가 제거되고 원격 루트 로그인이 비활성화되며 이러한 새 규칙이 로드되어 MySQL이 즉시 우리가 만든 변경 사항.

마지막으로 해야 할 일은 부팅 시 MariaDB를 시작하도록 설정하는 것입니다. 이렇게 하려면 다음 명령을 사용하십시오.

  1. sudo systemctl enable mariadb

이제 데이터베이스 시스템이 설정되었으며 계속 진행할 수 있습니다.

3단계 - PHP 설치

PHP는 동적 콘텐츠를 표시하기 위해 코드를 처리하는 설정의 구성 요소입니다. 스크립트를 실행하고, MySQL 데이터베이스에 연결하여 정보를 얻고, 처리된 콘텐츠를 웹 서버에 전달하여 표시할 수 있습니다.

CentOS 7 서버 내에서 기본적으로 사용 가능한 PHP 버전은 오래되었으므로 PHP 7+를 구하고 CentOS 7 서버에 설치하려면 타사 패키지 저장소를 설치해야 합니다. Remi는 CentOS 서버용 최신 PHP 릴리스를 제공하는 인기 있는 패키지 저장소입니다.

CentOS 7용 Remi 리포지토리를 설치하려면 다음을 실행합니다.

  1. sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

설치가 완료되면 선호하는 PHP 버전이 포함된 리포지토리를 활성화하는 명령을 실행해야 합니다. Remi 저장소에서 사용 가능한 PHP 7+ 릴리스를 확인하려면 다음을 실행하십시오.

  1. yum --disablerepo="*" --enablerepo="remi-safe" list php[7-9][0-9].x86_64

다음과 같은 출력이 표시됩니다.

Output
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * remi-safe: mirrors.ukfast.co.uk Available Packages php70.x86_64 2.0-1.el7.remi remi-safe php71.x86_64 2.0-1.el7.remi remi-safe php72.x86_64 2.0-1.el7.remi remi-safe php73.x86_64 2.0-1.el7.remi remi-safe php74.x86_64 1.0-3.el7.remi remi-safe php80.x86_64 1.0-3.el7.remi remi-safe

이 가이드에서는 현재 가장 업데이트된 안정적인 PHP 버전인 PHP 7.4를 설치합니다. 올바른 Remi 패키지를 활성화하여 PHP 7.4를 설치하려면 다음을 실행하십시오.

  1. sudo yum-config-manager --enable remi-php74

이제 평소와 같이 yum을 사용하여 PHP를 설치할 수 있습니다. 다음 명령은 Nginx 내에서 PHP 7.4를 설정하고 MySQL 기반 데이터베이스에 연결할 수 있도록 하는 데 필요한 모든 패키지를 설치합니다.

  1. sudo yum install php php-mysqlnd php-fpm

선택한 버전으로 PHP를 사용할 수 있는지 확인하려면 다음을 실행하십시오.

  1. php --version

다음과 같은 출력이 표시됩니다.

Output
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies

이제 PHP가 시스템에 성공적으로 설치되었습니다. 다음으로 기본 구성을 약간 조정해야 합니다. CentOS에서 파일 편집을 용이하게 하기 위해 먼저 vi보다 사용자 친화적인 텍스트 편집기인 nano를 설치합니다.

  1. sudo yum install nano

nano 또는 선택한 편집기를 사용하여 /etc/php-fpm.d/www.conf 구성 파일을 엽니다.

  1. sudo nano /etc/php-fpm.d/www.conf

이제 usergroup 지시문을 찾으십시오. nano를 사용하는 경우 CTRL+W를 눌러 열린 파일 내에서 이러한 용어를 검색할 수 있습니다.

…
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

usergroup 변수가 모두 apache로 설정되어 있음을 알 수 있습니다. 이를 nginx로 변경해야 합니다.

…
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

다음으로 listen 지시문을 찾습니다. 기본적으로 php-fpm은 TCP를 통해 특정 호스트와 포트에서 수신 대기합니다. 우리는 이 설정을 변경하여 로컬 소켓 파일에서 수신하도록 하려고 합니다. 이렇게 하면 서버의 전반적인 성능이 향상되기 때문입니다.

listen = /var/run/php-fpm/php-fpm.sock;

마지막으로 listen 지시문 내에서 방금 정의한 소켓 파일에 대한 소유자 및 그룹 설정을 변경해야 합니다. listen.owner, listen.grouplisten.mode 지시문을 찾습니다. 이러한 줄은 기본적으로 주석 처리됩니다. 줄 시작 부분에서 앞의 ; 기호를 제거하여 주석 처리를 해제하십시오. 그런 다음 소유자와 그룹을 nginx로 변경합니다.

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

편집이 완료되면 파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL + X를 누른 다음 YENTER를 눌러 수행합니다.

php-fpm 서비스를 활성화하고 시작하려면 다음을 실행하십시오.

  1. sudo systemctl start php-fpm

이제 PHP 환경이 준비되었습니다. 다음으로 php-fpm에서 처리할 PHP 스크립트에 대한 모든 요청을 보내도록 Nginx를 구성합니다.

4단계 - PHP 페이지를 처리하도록 Nginx 구성

이제 필요한 모든 구성 요소가 설치되었습니다. 여전히 해야 할 유일한 구성 변경은 동적 콘텐츠에 PHP 프로세서를 사용하도록 Nginx에 지시하는 것입니다.

Nginx에는 서버 블록을 사용하여 호스팅된 각 웹사이트를 별도의 구성 파일로 정의할 수 있는 전용 디렉토리가 있습니다. 이것은 Apache의 가상 호스트와 유사합니다.

그러나 기본 설치에서는 이 디렉토리가 비어 있습니다. 이 서버에서 기본 PHP 웹사이트로 사용할 새 파일을 생성합니다. 이 파일은 /etc/nginx/nginx.conf 파일에 정의된 기본 서버 블록을 재정의합니다.

먼저 /etc/nginx/conf.d 디렉터리에서 새 파일을 엽니다.

  1. sudo nano /etc/nginx/conf.d/default.conf

다음 PHP 서버 정의 블록을 구성 파일에 복사하고 서버의 도메인 이름 또는 IP 주소를 가리키도록 server_name 지시문을 바꾸는 것을 잊지 마십시오.

server {
    listen       80;
    server_name  server_domain_or_IP;

    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

완료되면 파일을 저장하고 닫습니다.

다음으로 Nginx를 다시 시작하여 변경 사항을 적용합니다.

  1. sudo systemctl restart nginx

이제 웹 서버가 완전히 설정되었습니다. 다음 단계에서는 Nginx에 대한 PHP 통합을 테스트합니다.

5단계 - 웹 서버에서 PHP 처리 테스트

이제 웹 서버가 설정되었으므로 테스트 PHP 스크립트를 생성하여 Nginx가 php-fpm의 도움으로 .php 스크립트를 올바르게 처리하는지 확인할 수 있습니다.

스크립트를 만들기 전에 일반 sudo 사용자가 해당 위치에서 파일을 만들 수 있도록 Nginx의 문서 루트에서 기본 소유권 설정을 변경합니다.

다음 명령은 기본 Nginx 문서 루트의 소유권을 sammy라는 사용자 및 그룹으로 변경하므로 시스템의 사용자 이름과 그룹을 반영하도록 이 명령에서 강조 표시된 사용자 이름과 그룹을 바꿔야 합니다.

  1. sudo chown -R sammy.sammy /usr/share/nginx/html/

이제 테스트 PHP 페이지를 만들어 웹 서버가 예상대로 작동하는지 확인합니다.

/usr/share/nginx/html 디렉토리에 info.php라는 새 PHP 파일을 만듭니다.

  1. nano /usr/share/nginx/html/info.php

다음 PHP 코드는 서버에서 실행 중인 현재 PHP 환경에 대한 정보를 표시합니다.

<?php

phpinfo();

완료되면 파일을 저장하고 닫습니다.

이제 웹 서버가 PHP 스크립트로 생성된 콘텐츠를 올바르게 표시할 수 있는지 테스트할 수 있습니다. 브라우저로 이동하여 서버 호스트 이름 또는 IP 주소에 액세스한 다음 /info.php에 액세스합니다.

http://server_host_or_IP/info.php

다음과 유사한 페이지가 표시됩니다.

해당 페이지를 통해 PHP 서버에 대한 관련 정보를 확인한 후 생성한 파일에는 PHP 환경 및 CentOS 서버에 대한 민감한 정보가 포함되어 있으므로 제거하는 것이 가장 좋습니다. rm을 사용하여 해당 파일을 제거할 수 있습니다.

  1. rm /usr/share/nginx/html/info.php

나중에 필요할 경우 언제든지 이 파일을 다시 생성할 수 있습니다.

결론

이 가이드에서는 Nginx를 웹 서버로 사용하고 최신 PHP 릴리스 버전을 사용하여 방문자에게 PHP 웹사이트 및 애플리케이션을 제공하기 위한 유연한 기반을 구축했습니다. php-fpm을 통해 PHP 요청을 처리하도록 Nginx를 설정했고 웹사이트 데이터를 저장할 MariaDB 데이터베이스도 설정했습니다.