본문으로 건너뛰기
  1. Posts/

리눅스 시스템에서 워드프레스 설치하기 (미완성)

·
Linux 가이드 서버 PHP 워드프레스
작성자
hw5e
page.hw5e.cc
목차

솔직히 워드프레스는 한번쯤은 써봐야지

설명의 간략화와 내용의 범용성을 위해 PHP, MySQL 프로그램을 설치하는 과정이나 사용법은 자세하게 다루지는 않을 것이다.

요구 사항
#

자세한 내용은 handbook에서 확인할 수 있다.
https://make.wordpress.org/hosting/handbook/server-environment/

  • HTTP 서버 프로그램
    PHP를 사용할 수 있는 서버 프로그램이라면 사용 가능하다. 보통은 Apache나 Nginx를 사용하겠지만 Caddy에서 설치가 가능한 것을 확인했다.

  • PHP
    데이터베이스 연동을 위해 mysqli 확장을 반드시 설치해야 하고 그 밖에 다른 확장 설치가 권장 자세한 확장 정보는 요구 사항의 PHP확장 문단을 참고.

  • MySQL 또는 MariaDB 데이터베이스

워드프레스 버전에 따른 권장하는 PHP, 데이터베이스의 버전은
https://make.wordpress.org/hosting/handbook/compatibility/ 에서 확인

설치
#

워드프레스 다운로드
#

wget https://ko.wordpress.org/latest-ko_KR.zip
sudo unzip latest-ko_KR.zip -d /var/www/

워드프레스 홈페이지에서 워드프레스를 다운로드 받고 압축을 풀고 /var/www에 복사한다.결과적으로 /var/www에 wordpress 디렉토리가 있으면 되는데 권한 문제가 없다면 다른 디렉토리여도 상관없다.

PHP 프로세스를 실행하는 사용자에 맞춰서 권한을 설정하면 되는데 자세한건 아직 알아보고 있다.

sudo chown -R 사용자:그룹 /var/www/wordpress

데이터베이스 설정
#

MySQL/MariaDB 설치하는 방법의 설명은 생략하는데 데이터베이스 서버를 설치하고 루트 비밀번호를 설정했다는 전제 하에 쓴다.

SQL에서 대소문자를 구분하지 않으니 굳이 대문자로 치지 않아도 된다

데이터베이스에 접속

mysql -u root -p

데이터베이스 사용자 추가

create user 'wpuser'@'localhost' identified by 'wppass';

wpuser자리에 데이터베이스 사용자 이름 wppass자리에 비밀번호를 적으면 된다.

데이터베이스 추가

create database wpdb;

wpdb자리에 데이터베이스 이름을 적으면 되는데 이번에는 따옴표가 없다는 것이 주의

사용자에게 데이터베이스 권한 부여1

GRANT ALL PRIVILEGES ON wpdb.* TO "wpuser"@"localhost";

적용하고 나가기

FLUSH PRIVILEGES;
EXIT

만약 문제가 생겨 사용자를 삭제해야 하는 경우 DROP USER로 삭제한다.

DROP USER [user명]@localhost;

서버 설정
#

Nginx의 경우
#

nginx 설정파일 예시2

저기서 첫번째의 upstream php 블록을 자신의 PHP상황에 맞게 수정하면 된다. 포트를 바꾸려면 listen 부분을 바꾸면 된다.

upstream php {
       server unix:/tmp/php-cgi.socket;
       server 127.0.0.1:9000;
}

server {
       listen 80;
       server_name domain.tld;
       root /var/www/wordpress;
       index index.php;

       location = /favicon.ico {
               log_not_found off;
               access_log off;
       }

       location = /robots.txt {
               allow all;
               log_not_found off;
               access_log off;
       }

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

       location ~ \.php$ {
               include fastcgi_params;
               fastcgi_intercept_errors on;
               fastcgi_pass php;
               fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
       }

       location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
               expires max;
               log_not_found off;
       }
}

Caddy로 설치하기
#

Caddyfile 예시
역시 php_fastcgi 부분과 포트를 자신에 맞게 바꾸면 된다.

{
        http_port 80
        https_port 443
}

http:// {
        root * var/www/wordpress
        file_server
        encode gzip     
        php_fastcgi localhost:9000
}

최소한 동작만 하게 설정한거라 적당히 다른 설정 예시들을 참고하자.

워드프레스 접속
#

alt text
제대로 설치되었다면 이렇게 나와서 데이터베이스 사용자나 이름 같은 것을 입력하면 된다

권한문제가 적절히 해결되지 않았다면 wp-settings.php파일을 직접 작성해야 한다.

개선해야 할 사항
#

권한 문제
#

워드프레스에서 동작 중 정확히 파일을 서버가 읽고 쓰는지 알지 못해서 파일의 소유권과 권한을 어떻게 부여해야 할지 모르겠다. https://developer.wordpress.org/advanced-administration/server/file-permissions/
https://stackoverflow.com/questions/18352682/correct-file-permissions-for-wordpress 이걸 참고

TLS인증
#

certbot를 쓰거나 Let’s Encrypt로 인증서를 받아서 서버에 적용하거나 caddy의 자동 발급기능을 쓰든지 해서 HTTP서버 프로그램에 HTTPS를 적용하고 워드프레스의 주소를 http에서 https로 바꾸면 된다.

그런데 역방향 프록시를 사용해서 인증하려고 하면 사이트가 작동하지 않는데 X-Forwarded-For 헤더를 무시하기 때문에 발생한다고 한다. https://www.alphafactory.co.kr/2017/07/31/reverse-proxy-setting-for-wordpress/ 이 글에서 설명해주고 있다. 워드프레스는 역방향 프록시사용을 권장하지 않는다

참고
#

도메인
#

PHP mysqli 확장 설치법
#

데비안 계열(Ubuntu, Mint, RPi OS…)

sudo apt install php-mysqli
sudo apt install php8.1-mysqli # 특정 버전을 지정한 경우 

레드햇

sudo dnf install php-mysqli

아치 php.ini에서

extension=pdo_mysql
extension=mysqli

두 줄을 주석 해제(세미콜론을 지우면 된다.)


  1. 설치 과정을 설명할 때 사용자 추가를 건너뛰고 권한을 부여하는 경우가 있는데 MySQL8 이후로 부터는 암묵적인 사용자 생성을 하지 않기 때문에 만들지 않은 사용자에게 권한을 부여하면 에러가 난다. ↩︎

  2. nginx위키를 참고했다는 Arch Wiki의 Wordpress에서 가져온건데 nginx위키가 문을 닫아서 원본은 확인이 불가능하다. 주석을 전부 지웠는데 주석을 포함한 내용을 확인하려면 링크에서 확인하자. ↩︎

Reply by Email