티스토리 뷰

반응형

워드프레스(WordPress)을 이용해 웹사이트를 구축해보려고 합니다. 그래서 그 기록을 남깁니다.

이전 글을 읽지 않으셨다면 이전 글을 먼저 읽고 와주시면 이해에 도움이 될 수 있습니다.

 

워드프레스를 실제 서비스 하기 위해서는 정적인 파일을 서비스할 웹서버와 동적인 프로그램 소스를 서비스할 애플리케이션 서버가 필요합니다. 하나로 합쳐져 있는 경우도 존재하지만, 워드프레스는 PHP 라는 프로그램 언어로 개발되어있고 요즘 PHP 는 php-fpm 라는 애플리케이션 서버를 이용해 웹서버와 별도로 운영하는게 보통이기 때문에 이 환경으로 구축해보겠습니다.

 

워드프레스 공식 설치 문서

워드프레스의 공식 설치 문서(https://ko.wordpress.org/txt-install/)는 한글로 제공되고 있습니다.

워드프레스 공식 설치 문서

앞선 글에서 이미 진행되었던 것도 있지만, MySQL 에 대해서는 언급하지 않고 넘어왔습니다. 만약 본인이 MySQL 을 설치하고 사용자를 추가한 뒤 DB 스키마를 만들어 연결하는 작업을 수행할 능력이 없다면 추후 작성할 Turnkey Linux 을 통해 구축할 것을 권고할 수 있습니다. 왜냐하면 MySQL 은 단순히 홈페이지를 만들고자 하는 사람이 익히기에는 너무 기술적인 내용이 깊기 때문입니다. 그러므로 여기서는 MySQL 이 이미 설치되어 있고, 접속주소, DB이름, DB이용자, DB 패스워드를 제공받은 상태를 전제로 합니다.

 

사전 요구사항에 있는 것 중 아직 준비되지 않은 것은 웹서버와 PHP 입니다. 웹서버는 엔진엑스(NginX)을 이용할 것입니다. PHP 는 위에서 언급했듯이 php-fpm 을 이용할 것입니다.

 

패키지 저장소 최신화

Ubuntu 리눅스는 apt 라는 명령을 통해 패키지 저장소에서 프로그램을 쉽게 내려받을 수 있습니다. Linux 의 조상인 Unix 는 프로그램을 단위별로 나누어서 조립하듯 개발하는 것을 권하기 때문에 Windows 처럼 하나의 설치파일을 받으면 단독으로 설치되는 경우가 드뭅니다. 그래서 패키지 관리자라는 것을 통해 이러한 의존적인 관계에 있는 프로그램을 자동으로 설치할 수 있게 제공되는데, 앞선 글에서 소개한 레드햇(RedHat) 계열의 리눅스는 apt 가 아닌 yum 이나 dnf 명령어로 관리합니다.

OS 을 먼저 설치하면 apt 명령어를 통해 서버의 최신 패키지 내용들을 내 서버에 내려받아야 합니다. 모든 프로그램을 내려받는게 아니라, 어떠한 프로그램들이 있는지 목록을 받는다고 생각하는게 편합니다.

apt update
apt upgrade

두 명령을 통해 최신의 패키지 정보를 내려받고, 업그레이드 할 프로그램을 업그레이드 해줍니다. 아래 이미지와 같이 중간에 실행하겠냐고 물어본다면 "Y" 를 입력하여 진행해주도록 합니다. 혹은 apt 다음에 -y 라고 입력하여 자동으로 Y 을 입력하게 하여 사용자의 대답을 기다리지 않고 무조건 실행하도록 할 수 있습니다.

패키지 업데이트 및 업그레이드

apt upgrade 는 매우 시간이 오래 걸리니(시스템 사양에 따라 다르겠지만 최소 수 분 소요됨) 인내심을 가지고 기다려 주십시오.

 

NginX 설치

워드프레스의 문서처럼 먼저 NginX 을 설치하겠습니다. 설치는 apt 을 이용할 경우 매우 간단합니다. 아래 명령어로 nginx 을 설치하라고 명령하기만 하면 됩니다. 간혹 소스를 직접 내려받아 설치하는게 좋다고 하는 문서도 있는데, 제 경험이나 판단으론 매우 좋지 못한 방법이라고 생각합니다. 가급적 패키지 저장소를 통해 제공되는 프로그램이라면 이를 이용하는 것을 추천드립니다.

apt -y install nginx

이 명령어 한 번에 Nginx 는 자동으로 설치됩니다. 이렇게 패키지로 설치된 서버 프로그램은 OS 가 시작될 때 자동으로 시작될 수 있도록 관리되는 경우가 있는데, NginX 도 여기에 포함됩니다. 이러한 것을 관리해주는 프로그램이 systemctl 입니다. 아래 명령으로 NginX 에 대한 동작을 확인하고 시작/정지/재시작 할 수 있습니다. 다만 # 부터는 주석(Comment)이므로 실제로 입력하시면 안됩니다.

systemctl status nginx     # NginX 상태 확인, q 를 누르면 끝냄
systemctl start nginx      # NginX 시작
systemctl stop nginx       # NginX 종료
systemctl restart nginx    # NginX 재시작

주석에서도 적었지만, 아래 이미지와 같이 상태를 확인하는데 마지막에 빨간색 밑줄처럼 표시되고 멈춰있다면 q 을 눌러서 빠져나가면 됩니다(quit).

NginX 상태 확인

초록색 글자로 표시된 부분이 active (running) 으로 되어 있습니다. 이 상태가 정상적으로 NginX 가 실행중이라는 의미입니다. 이제 웹브라우저에서 도메인을 이용해 접속하면 NginX 의 기본 페이지가 나타나야 합니다.

NginX 설치 시 볼 수 있는 기본 페이지

혹은 서버에서 curl 이라는 프로그래을 설치한 뒤 텍스트로 된 결과를 확인할 수도 있습니다. localhost 는 해당 장치 그 자신을 의미합니다. curl 은 서버 운영을 할 때 유용하게 이용되는 경우가 많기 때문에 설치해두시는 것을 추천드립니다.

apt -y install curl
curl localhost

 

php-fpm 설치

사실 NginX 에 PHP 동작을 위한 모듈을 설치하여 운영하는 방법도 존재합니다. 훨씬 더 오래 전부터 이용한 방식인데, php-fpm 이 나오면서 모듈에서 분리되었습니다. Java 진영에서 WAS(Web Application Server)라는 개념을 만들면서 정적인 페이지를 서비스하는 웹서버와 프로그램 소스를 서비스하는 애플리케이션 서버를 분리해서 운영하는 것을 권장하면서 나온 개념입니다. PHP 도 php-frpm 으로 이런 사상에 맞게 만들어졌습니다.

php-fpm 역시 apt 로 쉽게 설치할 수 있습니다. 현재 이 글을 적는 시점에선 PHP  8.1 이 적용된 php-fpm 이 설치됩니다.

apt -y install php-fpm

레드햇 리눅스 계열에선 yum 이나 dnf 로 php-fpm 으로 설치되지 않을 수 있습니다. php8.1-fpm 이나 php8-fpm 등으로 등록되어 있을 수 있기 때문입니다. apt 도 php8.1-fpm 으로도 등록되어 있습니다. 아직까지 PHP 8.1 지원이 되지 않은 플러그인 등이 많아서 낮은 버전을 설치해야 하는 경우가 있긴 하지만, 여기서는 간단하게 설치하는 것을 소개하는 것이므로 PHP 8.1 로 설치하겠습니다.

위 설치 시 많이 사용하는 모듈(Module)을 같이 설치할 수 있습니다만, 기본 설치시에는 없어도 되기 때문에 아래와 같이 추가로 명령을 내리는 형식으로 소개하겠습니다.

apt search php8.1 | more    # PHP 8.1 관련 모듈이나 프로그램들을 검색
apt -y install php8.1-gd php-json php8.1-mysql php8.1-curl php8.1-mbstring php8.1-intl php-imagick php8.1-xml php8.1-zip

설치하는 모듈들 중 MySQL 연결을 위한 모듈이나 테마/플러그인/업데이트를 받기 위해 필요한 것들이 있으므로 가급적 모듈은 설치해주세요. php 버전이 올라가면 8.1 대신 버전 이름으로 대체가 가능할 것입니다.

 

NginX 에 php-fpm 연동하기

NginX 는 정적인 파일(HTML, Css, Javascript 같은)을 사용자의 브라우저에 전달하는 서비스만 제공합니다. 그래서 NginX 가 특정한 요청을 할 때 php-fpm 에 이를 전달한 뒤 결과를 받아 사용자의 브라우저에게 전달하는 설정을 해줘야 합니다. 이러한 NginX 의 설정은 /etc/nginx 디렉토리에 위치합니다.

기본 설정 파일은 nginx.conf 파일입니다.

예전에는 이 파일을 직접 수정하였지만, 이럴 경우 체계적인 관리가 어려워서 conf.d/ 라는 디렉토리에 추가적인 내용을 적거나, site-enabled/ 라는 디렉토리에 추가적인 내용을 적는 형태로 발전되었습니다. 그리고 sites-enabled/ 안에 default 라는 파일이 이미 존재하고, 이 설정으로 인해 NginX 설치 시 기본적으로 표시되는 것들이 나타납니다.

여기서는 이 default 파일을 제거하고 conf.d/ 에 default.conf (혹은 default 대신에 자신의 도메인 이름을 넣어도 됨) 파일을 만들어서 설정하도록 하겠습니다.

1. Symbolic Link 제거

먼저 아래와 같은 명령으로 sites-enabled/ 디렉토리에 존재하는 default 파일을 확인해보겠습니다.

ls -als /etc/nginx/sites-enabled/

실행해보면 아래와 같이 뭔가 이상한 표식이 나타납니다. 화살표를 통해 다른 경로에 있는 파일명이 표시됩니다. 이것을 심볼릭 링크(Symbolic Link)라고 하며, 실제 파일이 아니라 화살표 뒤에 있는 파일(여기서는 sites-available/ 안에 있는 default 파일)을 가리키고 있다는 의미입니다. 그러므로 sites-enabled/ 의 default 파일을 지운다는건 실제 파일을 지우는게 아니라 Symbolic Link 을 제거해야 한다는 의미입니다.

sites-enabled/default 심볼릭 링크

Symbolic Link 는 다음과 같이 제거할 수 있습니다.

unlink /etc/nginx/sites-enabled/default

다시 조회해보면 심볼릭 링크가 사라진 것을 확인할 수 있습니다. 물론 원본인 sites-available/ 디렉토리의 default 파일은 그대로 있습니다.

심볼릭 링크를 다시 생성하고 싶다면 아래 명령어를 실행하면 됩니다. ln 명령은 link 를 의미하며 -s 옵션으로 심볼릭 링크를 생성하라는 의미입니다. -s 옵션이 필요한 이유는 링크에 심볼릭 링크 외에도 하드 링크가 있으며, 기본값은 하드 링크이기 때문입니다.

ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

 

2. default.conf 파일 생성

sites-enables/ 에 있는 default 와 달리 conf.d/ 디렉토리에는 .conf 로 끝나는 파일명(확장자라고 합니다)의 파일만 읽어서 실행할 때 반영합니다. 자신에게 익숙한 데이터를 이용해 파일을 생성하고 아래 내용을 입력해줍니다.

# nano /etc/nginx/conf.d/default.conf 혹은
# vi /etc/nginx/conf.d/default.conf 로 아래 내용을 입력

upstream php-handler {
    server 127.0.0.1:9000;
}
server {
    client_max_body_size 128M;
    listen 80 default_server;
    listen [::]:80 default_server;

    root        /var/www/html;
    index       index.php index.html index.htm;

    server_name _;

    location / {
                try_files $uri $uri/ /index.php?$args;

    }

    location ~ \.php$ {
        #include /etc/nginx/snippets/fastcgi-php.conf;
        fastcgi_pass php-handler;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;     fastcgi_read_timeout 300;
    }
    location ~ /\.ht {
        deny all;
    }
}

자세한 내용은 생략하겠습니다만, 웹서비스를 위한 기본 디렉토리는 /var/www/html 이고, PHP 요청일 경우 127.0.0.1:9000 서버로 요청해서 수행하라는 내용입니다. 127.0.0.1:9000 이 바로 php-fpm 이 요청을 받기 위해 기다리고 있는 주소와 포트(차선 같은 의미)입니다.

 

3. NginX 재시작

이제 위에서 언급했듯이 설정이 바뀌었으면 systemctl 을 이용해 NginX 을 재시작 해줍니다. 그 전에 설정 파일이 제대로 된 문법으로 작성되었는지 확인하기 위해 nginx 명령으로 설정을 테스트 해봅니다.

nginx -t                     # NginX 설정파일 테스트
systemctl restart nginx

 

4. php-fpm 설정 파일 수정

php-fpm 에 대한 설정파일은 /etc/php/8.1/fpm 에 존재합니다. 다만 conf.d/ 에 있는 것은 php-fpm 에서 사용하는 모듈의 설정들이 들어있고, 우리가 수정해야 하는 설정은 pool.d/ 에 있다는 것입니다. 우리는 웹서비스(www)을 이용하기 위해 설정할 것이기 때문에 기존에 존재하는 www.conf 파일을 직접 수정하도록 하겠습니다. 왜냐하면 기본적으로 설정되어 있는 값들이 많기 때문에 필요한 것만 뽑아내서 설치하는 방식으로 처리하기는 좀 번거롭기 때문입니다.

먼저 수정해야 할 부분은 listen 부분입니다. 이건 php-fpm 이 어떤 형식으로 요청을 받아들이는지 설정하는 부분입니다. 기본값으로 unix socket 이라는 방식으로 되어 있습니다. 몇가지 이유로 인해 이것을 TCP socket 방식으로 수정합니다. 아래와 같이 기존 listen 앞에 ; 을 붙여 주석처리를 하고(프로그램마다 주석 방식은 상이합니다) 아래에 NginX 설정에서 선언한 대로 127.0.0.1:9000 으로 요청을 받아들이도록 하겠습니다.

# vi /etc/php/8.1/fpm/pool.d/www.conf

; listen = /run/php/php8.1-fpm.sock
listen = 127.0.0.1:9000

# 위와 같이 수정 후 아래와 같이 php-fpm 을 재시작
systemctl restart php8.1-fpm

listen 은 www.conf 파일 내의 내용을 수정하는 것이고, 아래 systemctl 명령은 쉘에서 실행하는 명령이라는 것을 유의하세요. 그리고 php-fpm 을 설치했지만 서비스는 php8.1-fpm 으로 등록되어 있습니다. Ubuntu 에서는 자동완성을 지원하기 때문에 systemctl restart php 까지 친 다음 탭을 빠르게 두 번 연타하면 나머지 부분을 자동완성 시키거나, 아래에 사용가능한 것들을 보여줍니다. 이 부분을 참고하여 php-fpm 을 재시작해주세요.

 

이 상태에서 다시 웹브라우저로 접속하면 403 Forbidden 이라는 메세지와 함께 오류 페이지가 표시됩니다. 아직 워드프레스 소스가 원하는 위치에 복사되지 않았기 때문입니다.

 

워드프레스 소스 내려받고 복사하기

NginX 설정 파일을 유심히 보았다면 소스가 위치할 기본 디렉토리는 /var/www/html 이라는 걸 알 수 있습니다. 워드프레스 홈페이지에서 리눅스용 소스를 내려받고 압축을 푼 뒤 복사해보도록 하겠습니다.

 

1. 소스 내려받기

워드프레스 홈페이지에서 다운로드 페이지로 이동하면 다운로드 버튼이 존재합니다. 그런데, 보통 Windows 에서 접속하면 zip 으로 압축된 파일을 내려받게 되고, 아래에 .tar.gz 를 다운로드 받는 링크가 따로 존재합니다. Linux 에서는 zip 보다는 tar.gz 으로 압축된 파일을 받아야 합니다. 워드프레스는 항상 최신의 소스를 https://ko.wordpress.org/latest-ko_KR.tar.gz 로 제공하기 때문에 서버에서 직접 내려받도록 하겠습니다.

파일을 웹사이트에서 바로 내려받기 위해서 위에서 설치한 curl 혹은 기본 설치되어 있는 wget 이라는 명령어를 이용하겠습니다. curl 혹은 wget 을 이용해서 latest-ko_KR.tar.gz 을 내려받으면 /root/latest-ko_KR.tar.gz 파일이 생성됩니다. 그럼 tar 명령어를 이용해 tar.gz 확장자로 된 파일의 압축을 풀겠습니다.

cd ~                                                    # 먼저 홈 디렉토리로 이동
curl -O https://ko.wordpress.org/latest-ko_KR.tar.gz    # curl 이용 혹은
wget https://ko.wordpress.org/latest-ko_KR.tar.gz       # wget 이용
tar zxvf latest-ko_KR.tar.gz                            # 압축 해제

압축을 해제한 뒤 디렉토리를 조회하면 다음과 같이 압축파일과 함께 wordpress 라는 디렉토리가 생성되어 있는 것을 확인할 수 있습니다.

워드프레스 파일 압축 해제한 뒤

이제 워드프레스 파일을 /var/www/html 로 복사하겠습니다. 기존에 NginX 가 만들어둔 index.nginx-debian.html 이라는 파일이 존재하지만 무시해도 됩니다.

cp -R ~/wordpress/* /var/www/html

-R 옵션은 Recursive 을 의미하며, 하위 디렉토리까지 모두 복사하겠다는 의미입니다. 위 명령을 실행하면 아래와 같이 /var/www/html 에 파일들이 복사되었음을 확인할 수 있습니다.

워드프레스 파일 복사

파일 복사 후 한가지 작업을 해주는게 좋습니다. 현재 NginX 의 홈으로 이용중인 /var/www/html 디렉토리는 root 가 소유주인 상황입니다. 그래서 워드프레스가 파일을 내려받아 테마/플러그인/업데이트 설치를 하려고 해도 오류가 발생합니다. 그러므로 다음 명령어를 통해 /var/www/html 디렉토리와 이하의 모든 파일들을 www-data 라는 사용자와 그룹이 소유하도록 변경해줍니다. 왜냐하면 NginX 와 php-fpm 은 www-data 가 실행하도록 기본적으로 구성되어 있기 때문입니다.

chown -R www-data:www-data /var/www/html

 

2. 워드프레스 확인하기

이제 웹브라우저로 사이트에 접속해봅시다. 도메인 작업까지 깔끔하게 마무리 되었는지 확인하기 위해 도메인으로 접속을 해봅시다. 접속이 되지 않는다면 IP 로 직접 접속했을 때는 어떻게 되는지도 확인해보세요.

도움이 필요하다면 댓글이나 이메일(zepinos@gmail.com)로 문의주시길 부탁드립니다. 댓글은 확인이 매우 늦을 수 있으니 가급적 이메일로 요청 부탁드립니다.

성공적으로 설치가 되었다면 다음과 같은 화면이 여러분을 반겨드릴 것입니다!

워드프레스 환영 페이지

 

결론

소스 부어넣는게 전부인 워드프레스 서버 설치에, 다른 걸로 대부분 힘을 다 빼네요. 본인 서버에 간단하게 설치하려면 Turnkey Linux 을 추천드립니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함