무료서버에 워드프레스 설치 – PHP설치

이번 글에서는 무료서버에 워드프레스 설치를 하는 과정 중 PHP설치 방법에 대해서 알아보도록 하겠습니다.

관련글 목록

본 글은 오라클 클라우드를 이용하여 무료 서버를 구축하고자 하시는 분들을 위해서 연재되고 있습니다. 글의 순서는 다음과 같습니다.

오라클 클라우드 무료 사용법

오라클 클라우드 고정 IP 만들기

terminus를 이용해서 오라클 클라우드와 연결하기

오라클 클라우드 네트워크 방화벽 설정하기

무료서버에 워드프레스 설치 – nginx, MariaDB 설치

무료서버에 워드프레스 설치 – PHP설치

무료서버에 워드프레스 설치 – PHPMyAdmin 설치하는 2가지 방법

무료서버에 워드프레스 설치 – MySQL DB 설정 및 워드프레스 설치

wordpress에서 서브도메인 설정하기

certbot 인증 및 https설정하기

5분안에 워드프레스 블로그 애드센스 신청하는 방법

wordpress 홈페이지 속도 측정 방법

무료서버에 워드프레스 설치

Nginx는 Apache와는 달리 PHP 파일 처리를 위한 내장 지원이 없습니다. PHP-FPM(“fastCGI 프로세스 관리자”)을 이용하여 PHP 파일을 처리합니다.

Ondrej Sur라는 데비안 개발자는 여러 PHP버전을 포함한 리포지토리를 관리합니다. 다음 명령어를 터미널에 입력하여 외부 저장소 설정을 합니다.

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update

다음의 링크를 통해서 현재 최신의 PHP 버전을 확인하실 수 있습니다. 2023년 8월 기준 PHP는 8.2.8이 최신의 Stable 버전입니다.

최신 php 버전 확인

php 공식홈페이지 바로가기(클릭)

향후에 버전을 확인하실 때에는 이보다 더 높은 버전이 제공되고 있을 것입니다. 그 때에는 아래 명령어 중 PHP_VERSION 변수값을 수정하여 명령어를 터미널에서 수행하시면 됩니다. 버전이 8.2.8이 최신이지만 앞의 두 자리수만 버전으로 이용하여 설치합니다.

PHP_VERSION=8.2
sudo apt install php$PHP_VERSION php$PHP_VERSION-cli php$PHP_VERSION-fpm \
php$PHP_VERSION-bcmath php$PHP_VERSION-bz2 php$PHP_VERSION-common php$PHP_VERSION-curl \
php$PHP_VERSION-gd php$PHP_VERSION-mbstring \
php$PHP_VERSION-readline php$PHP_VERSION-soap \
php$PHP_VERSION-xml php$PHP_VERSION-xmlrpc php$PHP_VERSION-zip \
php$PHP_VERSION-redis php$PHP_VERSION-gmp \
php$PHP_VERSION-mysql php$PHP_VERSION-imagick php$PHP_VERSION-intl \
php$PHP_VERSION-dev php$PHP_VERSION-dba php$PHP_VERSION-opcache -y

7.4 버전까지는 제공되던 geoip 패키지가 8.1 버전 이후부터는 더이상 제공되지 않습니다. 따라서 아래와 같이 composer를 이용하여 추가로 설치합니다.

sudo apt install -y geoip-bin geoip-database
geoipupdate -v
curl -sS https://getcomposer.org/installer | php
php composer.phar require geoip2/geoip2:~2.0

PHP 설정하기

PHP 및 PHP-FPM 설정을 진행합니다.

php.ini

먼저 수정할 것은 php.ini 파일이며, 보통 다음의 경로에 있습니다. (/etc/php/8.2/fpm/php.ini) 자신의 설치한 php 버전에 따라서 중간에 들어가는 숫자의 값이 달라집니다. 만약 8.1 버전으로 설치하셨다면 /etc/php/8.1/fpm/php.ini 파일을 열어야 합니다.

다음의 명령어를 터미널에 입력하여 해당 파일이 있는 폴더로 이동합니다.

cd /etc/php/8.2/fpm/
ls -al

ls는 폴더 내 파일 목록을 확인하는 명령어 입니다.

php.ini 파일 목록 확인

다음의 그림과 같이 중간에 php.ini 파일이 있는 것을 확인하실 수 있습니다. php.ini 파일을 수정하기 위해서 nano 라는 프로그램을 사용해 보겠습니다. vim과 nano를 주로 사용하는데 윈도우에 익숙하신 분들은 nano를 조금 더 편리하게 사용하실 수 있습니다.

sudo nano php.ini
nano 텍스트에디터 실행

명령어를 입력하면 위 그림과 같이 php.ini 파일이 열립니다. 파일 내부에 몇 군데 수정할 부분이 있는데 파일이 길이 내용을 찾기 수월하지 않습니다. Ctrl+w를 누르면 화면의 하단에 검색창이 뜨며 원하는 키워드를 검색하여 수정이 필요한 위치로 이동합니다. 예를 들어 date.timezone을 수정하기 위해서 timezone을 검색하여 이동하는 식입니다.

수정하려는 문구 앞에 세미콜론(;)이 붙어있으면 주석처리된 내용입니다. 세미콜론을 없애야 적용됩니다.

나노 에디터에서 검색기능 사용
date.timezone = Asia/Seoul
expose_php = Off
post_max_size = 512M
upload_max_filesize = 200M
memory_limit = 512M

값은 자신의 상황에 맞춰서 조정하시면 됩니다. 수정이 완료되었다면 Ctrl+o를 입력하여 변경 내용을 저장하고 Ctrl+x를 눌러서 프로그램을 종료합니다.

php-fpm.conf

다음으로 수정할 파일은 php-fpm.conf 파일입니다. 파일 경로는 다음과 같습니다.

/etc/php/8.2/fpm

앞선 경우와 같이 자신의 php 버전에 따라 경로 중간의 숫자를 변경해 주어야 합니다.

cd /etc/php/8.2/fpm
ls -al
php-fpm.conf 파일 경로 확인

폴더 내 php-fpm.conf 파일이 있는 것을 확인하였습니다. nano를 열어 파일을 수정해 보도록 하겠습니다.

sudo nano php-fpm.conf

아래의 내용을 수정합니다. 역시나 Ctrl+w 검색기능을 이용하여 각각의 내용을 수정합니다. error 로그가 저장되는 경로에 버전정보가 있는 것을 볼 수 있습니다. 자신이 설치한 버전으로 수정하여 변경합니다.

error_log = /var/log/php8.2-fpm.log
log_level = notice

www.conf

다음으로 수정할 파일은 www.conf 파일입니다. 다음의 명령어를 터미널에 입력하여 해당 파일이 있는 위치로 이동합니다.

cd /etc/php/8.2/fpm/pool.d

기존의 www.conf 파일을 www.conf.ori 이름으로 백업해 두겠습니다.

sudo cp -rp www.conf www.conf.ori
ls -al
기존 www.conf 파일 백업

nano를 이용하여 파일을 열어 수정합니다.

sudo nano www.conf

수정이 필요한 부분은 아래와 같습니다.

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

listen = /run/php/php8.2-fpm.sock
; 접속을 받는 방식을 설정 - Socket(USD) 방식 이용 

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 40
pm.max_requests = 500
; pm.max_children 는 설정된 PHP Pool내에서 가동할 수 있는 최대 자식 프로세스 수를 의미
; pm.start_servers 는 php-fpm 을 실행할 때 초기에 생성하는 자식 프로세스의 개수
; pm.min_spare_servers 는 idle 상태의 자식 프로세스 개수
; pm.max_spare_servers 는 idle 상태의 자식 프로세스의 최대 개수
; pm.max_requests 는 각 프로세스가 최대 request를 처리하는 수

access.log = /var/log/php-fpm-$pool.access.log
; 주석제거 및 경로 및 파일명 변경

access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
; 주석제거

slowlog = /var/log/php-fpm-$pool.log.slow
; 주석제거 및 경로 및 파일명 변경

request_slowlog_timeout = 5
; 주석제거, 내용변경

php_admin_value[error_log] = /var/log/fpm-php.$pool.error.log
; 주석제거 및 경로 및 파일명 변경

php_admin_flag[log_errors] = on
; 주석제거

Nginx 설정 변경하기

다음으로 Nginx 설정을 해보도록 하겠습니다.

nginx.conf

먼저 수정할 파일은 nginx.conf 라는 파일입니다. nginx관련한 파일은 /etc/nginx 폴더에 주로 있습니다. 다음 명령어를 이용해서 해당 폴더에 있는 nginx.conf 파일을 열어보도록 하겠습니다.

sudo nano /etc/nginx/nginx.conf

nginx.conf 파일이 열렸다면 정상적으로 실행된 것입니다. 만약 빈 파일이 열렸다면 해당 경로에 파일이 있는지부터 확인해야 합니다. 아래의 내용을 변경합니다.

기존 내용에 비해 파일 압축을 위한 gzip 설정 및 추가 http 설정이 변경되었습니다.

user nginx; 
# user 정보를 변경합니다. 

worker_process auto;
# 접속받고 처리하는 worker_process 수 이며 auto값으로 유지합니다. 

error_log /var/log/nginx/error.log notice;
# 로깅 레벨을 notice 수준으로 설정합니다. 기동과 중지와 관련된 로그를 받을 수 있습니다. 

event { 
    use epoll;
    # 추가
    worker_connections 1024;
    # 한 worker당 가능한 접속수를 의미합니다. 
} 

http { 
    log_not_found off; 
    index index.php index.htm index.html;
    # 위 2개 라인을 기존 내용에 추가합니다. 

    ## 컨텐츠 압축을 위한 gzip 사용
    gzip on;
    gzip_disable "msie6";
    gzip_comp_level 6;
    gzip_min_length 500;
    gzip_buffers 16 8k;
    gzip_proxied any;
    gzip_vary on;
    gzip_types
        text/plain
        text/css
        text/js
        text/xml
        text/javascript
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        image/svg+xml
        image/png;
    tcp_nopush on;
    tcp_nodelay on;
    aio on;
    sendfile_max_chunk 512k;
    directio 4m;
    server_tokens off;
    client_max_body_size 50M;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 16k;
    http2_max_concurrent_streams 512;

    # 위 내용을 http 아래에 추가합니다. 
    
}

default.conf

default.conf 파일을 수정합니다. nginx 폴더 아래 conf.d 폴더 내에 있으며 서버 설정을 할 수 있습니다. 먼저 기존의 파일을 백업 합니다.

cd /etc/nginx/conf.d
sudo cp -rp default.conf default.conf.ori

default.conf 파일을 열어 수정해 보도록 하겠습니다.

sudo nano default.conf
default.conf 파일 수정

위와 같은 화면이 나온다면 정상적으로 파일을 연 것입니다. 아래의 내용을 변경합니다.

server {
    listen       80 default_server;
    # 포트번호 설정 
    server_name  localhost;
    # IP나 도메인을 입력합니다. 도메인이 없다면 localhost로 작성합니다. 
    charset utf-8;
    # charset 설정합니다. 

    access_log  /var/log/nginx/localhost.access.log;
    error_log /var/log/nginx/localhost.error.log;
    root   /usr/share/nginx/html;
    index  index.php index.html index.htm;
        

    location / {
        try_files $uri $uri/ /index.php?$args;
        # wordpress setting
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        # root           html;
        fastcgi_pass   unix:/run/php/php-fpm.sock;
        # fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;

        proxy_redirect off;
        fastcgi_intercept_errors on;
        fastcgi_read_timeout 300;
        fastcgi_send_timeout 300;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }

    location = /xmlrpc.php {
        deny  all;
        error_page 403 = /403.html;
    }

}

default.conf 파일을 없는 경우

설치하는 버전에 따라서 위 경로에 default.conf 파일이 없는 경우가 있습니다. 먼저 nginx.conf 파일을 살펴보면 다음과 같은 부분이 보입니다.

nginx 아래 conf.d 폴더 내 뿐만 아니라 sites-enabled라는 폴더도 함께 include 하는 경우 conf.d 폴더 아래에 default.conf 파일이 없는 경우가 있습니다.

sites-enabled 폴더로 이동해 보겠습니다.

cd /etc/nginx/sites-enabled
ls -al

다음과 같이 sites-available 폴더 내에 있는 default 파일을 바라보고 있는 default 파일이 있습니다. 한번 열어보겠습니다.

sudo nano default

다음과 같이 default.conf에 해당하는 파일이 있는 것을 알 수 있습니다. 위 파일에 default.conf에서 변경한 내용을 적용하면 되겠습니다.

테스트

기본적인 설정이 완료되었고 이제 정상작동 하는지 테스트 해 보도록 하겠습니다. 먼저 nginx의 기본 home 경로에 다음의 파일을 생성해 보겠습니다.

cd /usr/share/nginx/html
sudo nano phpinfo.php

아무런 내용이 없는 파일이 열리고 아래의 내용을 복사 붙여넣기 합니다.

phpinfo.php 파일 생성하기
<?php
    phpinfo();
?>

파일의 접근 권한을 변경합니다. 아래의 명령어를 터미널에 입력합니다.

sudo chown nginx:nginx phpinfo.php

아래 명령어를 입력하여 nginx 및 php-fpm을 재실행합니다. 터미널에 해당 명령어를 입력합니다.

sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx

아무런 오류 없이 정상실행되었다면 브라우저를 띄워 현재 아래와 같이 주소를 입력하여 php 정보 화면이 나오는지 확인합니다.

자신의ip주소/phpinfo.php

무료서버에 워드프레스 설치 – PHP설치

php-fpm 재시작 오류 발생 시

php-fpm을 재시작 하는 과정에서 다음과 같은 에러가 발생하는 경우가 있습니다. 자세한 내용을 살펴보면 다음과 같습니다.

nginx 유저를 찾을 수 없다는 내용입니다. nginx user를 추가해서 문제를 해결할 수 있습니다.

sudo adduser nginx
sudo usermod -a -G nginx nginx

Leave a Comment