솔직히 워드프레스는 한번쯤은 써봐야지
설명의 간략화와 내용의 범용성을 위해 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
}
최소한 동작만 하게 설정한거라 적당히 다른 설정 예시들을 참고하자.
워드프레스 접속 #
권한문제가 적절히 해결되지 않았다면 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
두 줄을 주석 해제(세미콜론을 지우면 된다.)