본문 바로가기
소프트웨어 개발/PHP

[PHP 기초강좌] PHP 환경설치 - Nginx + PHP8.1 + mariadb

by 인생은즐겁게 2023. 1. 29.
반응형

1. 소개

 

 PHP로 개발된 결과물을 웹 브라우저(Web browser)를 통하여 보기 위해서는 웹 서비스 시스템과 연동이 되어야 합니다. 물론 PHP-FPM( FastCGI Process Manager )으로 웹 서비스 없이 접근이 가능하나, 다수의 서비스를 효율적으로 운영하기 위해서는 반드시 웹 서비스 시스템과 연동을 해야만 합니다. 웹 서비스 종류에는 nginx, apache, ms iis 등이 있지만 본 강좌에서는 WSL 우분투 환경에서 nginx 웹 서비스를 구축하여 PHP를 연동하도록 하겠습니다.

 

 

2. 작업환경 및 필수사항

 

- OS : Windows 10 버전 2004 이상(빌드 19041 이상) 또는 Windows 11
- Linux용 Windows 하위 시스템 설치

- 개발도구 : 마이크로소프트 vscode

- 데이터베이스 클라이언트 :  HeidiSQL

 

 

3. 설치 및 구축

 

3.1. Microsoft Store를 통하여 WSL 다운로드 및 설치

 

Microsoft Store를 실행하시고  Ubuntu 22.04.1 LTS를 다운로드합니다.

다운로드가 완료되면 열기 버튼을 클릭하시고 설치를 진행합니다.

 

<그림 1> Microsoft Store - Ubuntu 22.04.1 LTS 다운로드
<그림 2> Microsoft Store - Ubuntu 22.04.1 LTS 다운로드 완료 후 열기

 

우분투 사용자 계정 정보를 입력합니다. username은 사용자 계정이며 사용자 계정 입력 후 사용자 비밀번호를 설정을 합니다.

<그림 3> 우분투 초기 계정 설정

정상적으로 세팅이 되었다면 아래와 같은 화면이 나타납니다.

<그림 4> 우분투 초기 환경 세팅 완료

 

 

 

3.2. WSL - 우분투 사용자 계정 설정 및 root 계정 설정

 

아래 명령어로 root 비밀번호르 설정합니다. 앞서 설정한 계정은 사용자 초기 계정이며 root 계정은 설정이 되지 않은 상태입니다. 원활한 실행을 위해서는 root 비밀번호를 설정합니다.

 

sudo passwd root

<그림 5> root 비밀번호 설정

 

root 비밀번호를 설정을 하였다면, su 명령어로 로그인을 시도하여 확인합니다.

su

<그림 6> 우분투 root 계정 로그인

 

3.3. nginx 웹서비스 설치

 

nginx  설치하기 앞서, 우분투 패키지 정보 업데이트를 합니다. 아래 명령어를 실행하시어 패키지 정보를 업데이트 합니다.

 

apt-get update && apt-get install -y software-properties-common LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php

<그림 7> 우분투 패키지 정보 업데이트

아래 명령어를 통하여 nginx를 설치합니다.

apt-get update -y && apt-get install -y nginx

<그림 8> 우분투 nginx 설치 명령어

 

 

<그림 9> 우분투 nginx 설치 명령어 실행 완료 후 화면

설치가 완료되었다면 nginx 서비스를 start 합니다.

service nginx start

<그림 10> 우분투 nginx 서비스 start

nginx 서비스가 정상적으로 실행이 되었다면 아래와 같은 화면이 나타납니다. 확인은 웹 브라우저 화면 주소창에 localhost 입력 후 확인 합니다.

 

<그림 11> nginx 초기 설치 화면

 

3.4. PHP8.1 설치

 

아래 명령어 코드는 php를 설치하고 아울러  자주 사용되는 라이브러리를 추가합니다.

apt-get update -y && apt-get install -y php8.1 \
    php8.1-fpm \
    php8.1-common \
    php8.1-mysql \
    php8.1-gmp \
    php8.1-ldap \
    php8.1-curl \
    php8.1-intl \
    php8.1-mbstring \
    php8.1-xmlrpc \
    php8.1-gd \
    php8.1-bcmath \
    php8.1-xml \
    php8.1-cli \
    php8.1-memcache \
    php8.1-redis \
    php8.1-zip

 

설치되는 과정을 보면서 설치 중 오류가 발생되는지 확인을 해봅니다.

<그림 12> 우분투에서 php8.1 설치 화면

설치가 잘 되었는지 php 버전 체크 명령어로 확인해 봅니다.

아래 화면 처럼 PHP 8.1.x로 되어있다면 정상적으로 설치가 되었습니다.

php -version

<그림 13> 우분투에서 php버전 확인

 

정상적으로 php가 설치가 되었다면 아래 명령어로 php-fpm을 구동 시킵니다.

service php8.1-fpm start

<그림 14> php8.1-fpm 서비스 구동

 

3.5. nginx + php8.1 연동 설정

 

nginx와 php8.1을 서로 연동시켜줘야 합니다. 각 프로세스들이 개별 동작을 하기 때문에 서로 연동 작업이 필요합니다. 그리고 앞으로 작업을 nginx 기본 웹 디렉토리가 아닌 우분투 레거시 시스템과 현재 사용 중인 윈도우 시스템 간 연동된 마운트 디렉토리에서 작업을 진행을 하기 때문에 웹 디렉토리 변경 또는 추가가 필요합니다.

 

vi /etc/nginx/sites-enabled/[파일명] vi 에디터 명령어로 nginx 설정을 하기 위한 파일을 생성합니다. 

vi /etc/nginx/sites-enabled/code01

 

아래 코드를 code01파일에 아래 코드를 작성하여 저장합니다. 저장은 ESC누른 후 : wq를 누르고 엔터를 칩니다.

server {

        listen 8001;
        root /mnt/d/project/php/code01; #자신의 디렉토리로 변경하십시오
        index index.html index.htm index.php;

        server_name localhost;

        error_log  /var/log/nginx/error.log;
        access_log /var/log/nginx/access.log;


        location ~ \.php$ {

                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php/php8.1-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        }
}

listen 8001;은 포트 번호입니다. 기본 웹 서비스 port 번호가 80으로 되었지만, 개발 환경에서는 다양한 예제를 실행하기 때문에 80xx xx에 번호를 추가하여 구분할 것입니다.

 

<그림 16> nginx 설정 파일 code01 저장

 

root /mnt/d/project/php/code01;는 작업할 웹 디렉토리 경로입니다. 이 부분은 작업자가 원하는 디렉토리로 설정하여 지정합니다. 웹 디렉토리 경로에는 기본적으로 index.php파일을 생성하십시오.

아래 그림17,18을 참고 하시면 윈도우 디렉토리가 우분투 /mnt 디렉토리로 마운트되어 연동되는 것을 확인 할 수 있습니다. 

 

<그림 17> 윈도우 디렉토리 - d:\project\php\code01

 

<그림 18> 우분투 마운트 디렉토리 - /mnt/d/project/php/code01

 

설정된 내용을 적용하기 위해서는 nginx를 재시작 합니다.

service nginx restart

<그림 19> 우분투 nginx 서비스 재시작

웹 디렉토리 index.php를 생성하여 아래 코드 처럼 작성합니다. 마운트된 우분투 /mnt/~ 디렉토리에 작업을 할 수 있겠지만 작업의 편의상 windows 시스템에서 파일을 생성하여 작성합니다.

 

<?php

echo "안녕하세요";

<그림 20> vscode에서 작성한 index.php 파일

 

앞서 설정한 port번호로 접근하여 결과물을 확인힙니다. 접근 주소는 localhost:8001로 접근합니다.

예) localhost:[설정한 포트번호]

 

<그림 21> localhost:8001 웹브라우저 실행화면

 

 

tip-1 우분투에서 nginx 패키지 설치 시 기본 웹 디렉토리 경로 : /var/www/html

tip-2우분투 마운트 경로 : /mnt 

  => ls  /mnt 명령어로 디렉토리를 확인해 보면 물리 디스크 장치가 디렉토리로 잡혀있다.

 => c는 c드라이브, d는 d드라이브이다. 사용자 컴퓨터마다 다를 수 있다.

tip-3 패키지 설치 시 nginx 기본 경로 : / etc/nginx

 =>  nginx 추가 설정 파일이 있는 디렉토리 /etc/nginx/sites-enabled 

 

3.6. mariadb 설치

 

mariadb 설치는 아래 링크로 이동하셔서 참고하시어 설치를 진행합니다.

 

https://lifefun.tistory.com/3

 

ubuntu에서 mariadb 설치 및 root 계정 설정

ubuntu 패키지를 최신 상태로 업데이트합니다. sudo apt update && sudo apt upgrade -y mariadb를 설치를 하려면 클라이언트와 서버 패키지를 설치를 해야 합니다. sudo apt install mariadb-server mariadb-client 설치 화

lifefun.tistory.com

 

3.7. mariadb 설정 연동 확인

 

 

HeidiSQL을 실행하고 [마우스 우클릭>새로생성>데이터베이스] 클릭 합니다. <그림 23>처럼 데이터베이스 생성창이 나타납니다.

<그림22 > HeidiSQL 데이터베이스 생성메뉴 이동

 

예제 실습을 위하여 dev 데이터베이스를 생성합니다. 데이터베이스를 dev로 생성을 하고,  조합은 utfmb4_general_ci를 선택해 주고 확인 버튼을 누릅니다.

<그림 23> 데이터베이스 생성창

 

사용자 계정 dev, 비밀번호 dev1234 설정

dev계정에 권한부여 설정

CREATE USER 'dev'@'localhost' IDENTIFIED BY 'dev1234';
GRANT ALL PRIVILEGES ON *.* to 'dev'@localhost ;

 

<그림 24> HeidiSQL에서 사용자계정 추가

HeidiSQL 쿼리탭에 사용자 생성 쿼리를 작정하여 쿼리 실행 버튼을 클릭 합니다.

<그림 25> 사용자생성 및 권한부여

 

예)

<?php

$dsn = "mysql:host=[호스트명];port=3306;dbname=[DB명];charset=utf8";
try {
    $pdo = new PDO($dsn, "[DB유저]", "[DB비밀번호]");
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "데이터베이스 연결 성공!!<br/>";
} catch(PDOException $e) {
    echo $e->getMessage();
}


?>

 

해당 코드는 앞서 생성한 index.php 파일과 동일한 디렉토리 경로에서 dbcon.php 파일을 생성하여 아래 코드를 참고하여 작성합니다.

 

구현

<?php

$dsn = "mysql:host=localhost;port=3306;dbname=dev;charset=utf8";
try {
    $pdo = new PDO($dsn, "dev", "dev1234");
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "데이터베이스 연결 성공!!<br/>";
} catch(PDOException $e) {
    echo $e->getMessage();
}


?>

 

웹 브라우저에서  http://localhost:8001/dbcon.php 해당 경로로 이동하여 결과물을 확인 합니다.

아래 화면처럼 나오지 않을 경우 계정 설정에 문제가 있거나 mariadb가 제대로 설치가 안 된 경우이니 확인해 보시길 바랍니다.

<그림 26> PHP- mariadb 데이터베이스 연동 성공화면

 

 

 

4. 맺은말

 

 본격적인 PHP 공부는 아니지만, PHP 구동하기 위한 환경을 구축하는 것이기 때문에 나름 중요한 공부라고 볼 수 있습니다. 그래서 예제를 보고 구축한 WSL을 다시 삭제하시고 다시 구축을 해보시는 것을 권장 드립니다.

 

단순 문법만을 공부 하시는 분들에게는 PHP온라인 코드 실행 사이트를 추천해 드립니다.

w3schools : https://www.w3schools.com/php/phptryit.asp?filename=tryphp_compiler

 

본 강의가 어렵지 않은 분에게는 도커 환경 기반 PHP 설치도 시도 해보시는 것을 권장 드립니다. 아래 링크 참고 바랍니다.

https://lifefun.tistory.com/51

 

도커 ( docker ) PHP 개발환경 설치 Nginx, PHP7.4,Mariadb / windows10/11 윈도우즈 10/11

1. 설치 환경 우선 해당 환경을 구동을 하려면 도커가 먼저 설치가 되어 있어야 합니다. 필요사항 OS: Windows 10 64bit or Windows 11 64bit RAM : 4GB WSL 2 기능 활성화 도커(Docker) 설치 도커 다운로드 : https://d

lifefun.tistory.com

 

반응형

댓글