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를 다운로드합니다.
다운로드가 완료되면 열기 버튼을 클릭하시고 설치를 진행합니다.
우분투 사용자 계정 정보를 입력합니다. username은 사용자 계정이며 사용자 계정 입력 후 사용자 비밀번호를 설정을 합니다.
정상적으로 세팅이 되었다면 아래와 같은 화면이 나타납니다.
3.2. WSL - 우분투 사용자 계정 설정 및 root 계정 설정
아래 명령어로 root 비밀번호르 설정합니다. 앞서 설정한 계정은 사용자 초기 계정이며 root 계정은 설정이 되지 않은 상태입니다. 원활한 실행을 위해서는 root 비밀번호를 설정합니다.
sudo passwd root
root 비밀번호를 설정을 하였다면, su 명령어로 로그인을 시도하여 확인합니다.
su
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
아래 명령어를 통하여 nginx를 설치합니다.
apt-get update -y && apt-get install -y nginx
설치가 완료되었다면 nginx 서비스를 start 합니다.
service nginx start
nginx 서비스가 정상적으로 실행이 되었다면 아래와 같은 화면이 나타납니다. 확인은 웹 브라우저 화면 주소창에 localhost 입력 후 확인 합니다.
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
설치되는 과정을 보면서 설치 중 오류가 발생되는지 확인을 해봅니다.
설치가 잘 되었는지 php 버전 체크 명령어로 확인해 봅니다.
아래 화면 처럼 PHP 8.1.x로 되어있다면 정상적으로 설치가 되었습니다.
php -version
정상적으로 php가 설치가 되었다면 아래 명령어로 php-fpm을 구동 시킵니다.
service php8.1-fpm start
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에 번호를 추가하여 구분할 것입니다.
root /mnt/d/project/php/code01;는 작업할 웹 디렉토리 경로입니다. 이 부분은 작업자가 원하는 디렉토리로 설정하여 지정합니다. 웹 디렉토리 경로에는 기본적으로 index.php파일을 생성하십시오.
아래 그림17,18을 참고 하시면 윈도우 디렉토리가 우분투 /mnt 디렉토리로 마운트되어 연동되는 것을 확인 할 수 있습니다.
설정된 내용을 적용하기 위해서는 nginx를 재시작 합니다.
service nginx restart
웹 디렉토리 index.php를 생성하여 아래 코드 처럼 작성합니다. 마운트된 우분투 /mnt/~ 디렉토리에 작업을 할 수 있겠지만 작업의 편의상 windows 시스템에서 파일을 생성하여 작성합니다.
<?php
echo "안녕하세요";
앞서 설정한 port번호로 접근하여 결과물을 확인힙니다. 접근 주소는 localhost:8001로 접근합니다.
예) localhost:[설정한 포트번호]
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 설치는 아래 링크로 이동하셔서 참고하시어 설치를 진행합니다.
3.7. mariadb 설정 연동 확인
HeidiSQL을 실행하고 [마우스 우클릭>새로생성>데이터베이스] 클릭 합니다. <그림 23>처럼 데이터베이스 생성창이 나타납니다.
예제 실습을 위하여 dev 데이터베이스를 생성합니다. 데이터베이스를 dev로 생성을 하고, 조합은 utfmb4_general_ci를 선택해 주고 확인 버튼을 누릅니다.
사용자 계정 dev, 비밀번호 dev1234 설정
dev계정에 권한부여 설정
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'dev1234';
GRANT ALL PRIVILEGES ON *.* to 'dev'@localhost ;
HeidiSQL 쿼리탭에 사용자 생성 쿼리를 작정하여 쿼리 실행 버튼을 클릭 합니다.
예)
<?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가 제대로 설치가 안 된 경우이니 확인해 보시길 바랍니다.
4. 맺은말
본격적인 PHP 공부는 아니지만, PHP 구동하기 위한 환경을 구축하는 것이기 때문에 나름 중요한 공부라고 볼 수 있습니다. 그래서 예제를 보고 구축한 WSL을 다시 삭제하시고 다시 구축을 해보시는 것을 권장 드립니다.
단순 문법만을 공부 하시는 분들에게는 PHP온라인 코드 실행 사이트를 추천해 드립니다.
w3schools : https://www.w3schools.com/php/phptryit.asp?filename=tryphp_compiler
본 강의가 어렵지 않은 분에게는 도커 환경 기반 PHP 설치도 시도 해보시는 것을 권장 드립니다. 아래 링크 참고 바랍니다.
https://lifefun.tistory.com/51
'소프트웨어 개발 > PHP' 카테고리의 다른 글
PHP 날짜 형식 정규식 ( yyyy-mm-dd, yyyy/mm/dd,mm/dd/yyyy) (0) | 2023.01.30 |
---|---|
[PHP 기초강좌] PHP란 무엇인가? (0) | 2023.01.29 |
PHP 5.3 - json_encode 한글처리 (0) | 2022.12.01 |
정규식 preg_match - 정수(숫자), 실수 체크 (0) | 2022.11.19 |
php에서 sha3 구현 (0) | 2022.08.20 |
댓글