WordPress(워드프레스) 설치 하기 - 개인 블로그 및 사이트 구축

Share

Last Updated on 1월 21, 2024 by Jade(정현호)

세계 최대의 오픈 소스 CMS

WordPress 는 세계 최대의 오픈 소스 저작물 관리 시스템(CMS) 이며 워드프레스 기반 웹사이트는 전세계 웹사이트의 40% 이상을 차지할 만큼 많은 사이트, 블로그 등이 워드프레스를 기반으로 사용되고 있습니다.

2021년 들어서 사용률 40%대를 넘어서게 되었으며 포스팅 시점 기준으로 42.5% 를 사용 중이고 CMS의 Market Share 는 65.2% 입니다.



[w3techs.com/content_management]



아래 그래프 처럼 아직도 워드프레스의 사용율은 계속 증감 되고 있습니다.

[w3techs.com/content_management]


PHP와 HTML로 작성된 오픈소스이며 많이 사용하는 만큼 수많은 무료/유료 테마와 플러그인이 계속 업데이트, 추가되어 발전하고 있습니다.

이번 포스팅에서는 워드프레스의 설치 및 구성을 간략하게 확인해보도록 하겠습니다.
             

오라클 클라우드로 이전한 이유

글을 포스팅 하는 블로그를 개설하고 운영 하면서 지금까지 여러 유형 또는 형태로 변경하면서 글을 작성 과 운영하고 있었습니다.

처음 시작은 티스토리 블로그로, 초대장 시스템과 함께 유명해지기 시작하면서 저도 티스토리에서 부터 블로그를 처음 시작하였으며 자연스럽게 티스토리의 뿌리가 되는 테스트 큐브(설치형 블로그)를 알게 되었습니다

페도라 리눅스 사용자 모임의 사이트 운영을 위해서 VPS(가상 서버 호스팅) 서비스를 이용하면 서버의 남는 자원을 활용하고자 하는 취지 그리고 티스토리 기본 배경이 되는 텍스트 큐브를 통해 서비스형 티스토리 블로그 보다 조금 더 자유롭고 내가 원하는 대로 사용하고자 하여 설치형 텍스트 큐브로 이전하게 되었습니다 텍스트 큐브를 선택하여 설치할 당시에는 개발과 업데이트가 활발하게 진행되고 있었으며 어느정도 테마와 여러 플러그인 등이 업데이트 및 신규 추가되는 상황이었습니다.

VPS 서비스를 이용하면서 수년간 텍스트 큐브(설치형 블로그) 를 사용하여 블로그를 운영하는 과정에서 텍스트큐브가 추가적인 개발이나 업데이트가 되지 않게 됨에 따라 워드프레스로의 이전을 계획하게 되었고 그 시기에 호스팅 또는 다른 VPS 서비스 또는 클라우드 서비스의 전환도 같이 계획하게 되었습니다 


그러면서 오라클 클라우드 프리티어 를 알게 되었고 무엇보다 수년간 운영 경험을 통해서 일 평균 접속자 등을 확인하였을 때 유료 VPS 나 클라우드 서비스가 아니더라도 무료로 제공되는 프리티어 등급의 서버로도 운영이 가능함을 판단하여 이전하게 되었습니다.

기존의 VPS 보다 CPU에 대한 사양은 낮아졌지만 사용할 수 있는 메모리와 디스크의 용량이 더 커졌으며 무엇보다 컴퓨트 인스턴스를 2대 사용할 수 있다는 점에서 WEB/WAS 와 DB를 분리해서 구성할 수 있는 측면에서 이전에 대해서 결정을 하게 되었습니다.

당연히 기존에 매월, 매년 마다 소요되었던 비용이 줄어든 면이 가장 큰 장점이며 위에서 언급한 부족했던 리소스가 기존보다 더 확보를 할 수 있다는 부분에서 기존보다 더 개선된 상태가 되었습니다.


* 현재 이 블로그는 오라클 클라우드 프리티어에 WordPress 로 이전이 완료되어 운영 중입니다.
                   

이어지는 글

해당 글은 아래의 글에서 이어지는 포스팅 으로 APM 이나 LEMP 등의 서버 환경은 구성된 이후에 WordPress 를 설치하는 내용이 담겨 있습니다.


1. Oracle Cloud 환경에서 CentOS 7.8 + Apache + PHP-FPM +MySQL 스택 연재 글

  오라클 클라우드 프리티어 - 무료 VPS 사용(1)
  오라클 클라우드 프리티어 - 무료 VPS 사용(2)
  오라클 클라우드 프리티어 - 무료 VPS 사용(3)
  오라클 클라우드 프리티어 - 무료 VPS 사용(4)
  리눅스 APM(Apache+PHP+MySQL) 통한 웹 서비스 시작
  웹 기반 MySQL 관리 툴 - phpmyadmin 설치
  상위 국가 무료 도메인 발급 받기 및 서브 도메인 설정
  여러 도메인을 활용한 가상호스트 설정
  무료 SSL 인증서 발급 및 HTTP/2 적용



2. AWS Cloud 환경에서 Ubuntu 18.04 + Nginx + PHP-FPM +MariaDB 스택 연재 글

  AWS 클라우드 프리티어 - 1 계정 가입 및 생성 과 OTP 설정
  AWS 클라우드 프리티어 - 2 EC2(VM/VPS) 생성
  AWS 클라우드 프리티어 - 3 고정 IP 생성 및 할당
  우분투(Ubuntu) 18.04 서버 초기 설정
  우분투(Ubuntu) 시간 동기화 설정- Chrony
  우분투 LEMP(Nginx+PHP+MariaDB) 1 - 설치 및 설정
  웹 기반 MySQL 관리툴 - phpmyadmin 설치 및 설정
  freenom 에서 최상위 국가 무료 도메인 발급 받기
  우분투 Nginx+PHP+MariaDB 2 - Nginx 추가 설정
  Nginx 에 무료 SSL인증서 적용 및 HTTP/2 적용

              

MySQL DB 와 유저 생성

WordPress 설치전에 DB 스키마(DB) 및 유저가 준비되어 있어야 합니다.

이전에 설치 구성한 phpmyadmin 을 통해 MySQL DB Schema 및 user를 생성하도록 하겠습니다.

                

Schema(DB)  생성

먼저 phpMyAdmin 에 접속을 합니다.

phpMyAdmin 기준 화면에 보이는 새로운(new) 를 클릭 -> 새 데이터베이스 이름 지정-> 만들기  순으로 새로운 데이터베이스를 생성합니다.




포스팅에서는 예시로 test_wordpress 로 생성하였으며 데이터베이스 이름은 자유롭게 사용할 수 있습니다.
                   

DB 유저 생성

phpmyadmin 아이콘을 클릭하여 메인화면 -> 사용자 계정-> 사용자 추가 를 선택합니다




계정 정보 입력

사용자 명 에 사용할 계정을 입력합니다.

호스트명 기본값은 모든 곳에서 접속 가능한 wildcard(%)으로 되어있으며, 보안상 localhost 로 변경해 계정을 생성하는 부분이 좋습니다. 다만 Web/PHP 와 MySQL 이 서버가 분리되어 있는 환경이라면 Web/PHP 서버 와 통신하는 내부 IP 나 내부 IP 서브넷으로 지정하시면 됩니다.

암호는 워드프레스를 클라우드나 서버에 설치하여 사용 용도일 경우 계정 비밀번호는 어렵게 생성해야 합니다

추가적으로 아래 "동명의 데이터베이스를 생성하고 모든 권한을 부여" 를 선택하면 계정명과 동일한 데이터베이스를 생성하고 권한까지 부여할 수도 있으나 절차를 설명하기 위해 나눠서 생성하였습니다.

   * 계정, 데이터베이스 등의 정보는 포스팅의 예시입니다.




위에서 계정 정보를 모두 입력하였다면 우측 하단에 실행을 클릭하여 계정을 생성합니다.


                 

권한 부여

그 다음 생성한 계정에 권한을 부여하도록 하겠습니다.
생성 직후 화면에서 데이터베이스를 선택합니다.




참고) 이 작업은 사용자 계정 -> 권한 수정 메뉴를 통해서도 권한 부여를 할 수 있습니다




위에서 생성한 데이터베이스를 선택 후 실행을 선택합니다.





데이터베이스에 관한 "권한 모두 체크" 에 체크를 하고 실행을 클릭합니다.




부여된 권한은 계정의 "내보내기" 메뉴를 통해서 설정된 권한은 확인할 수 있습니다.


                

WordPress(워드프레스) 다운로드

워드프레스 주소 : https://ko.wordpress.org



파일 다운로드

사이트 접속 후 우측 상단에 워드프레스 얻기 를 클릭합니다.




워드프레스 다운이나 Download.tar.gz 를 클릭하여 최신 버전을 다운로드 받습니다.
혹은 직접 링크를 통해 서버에서 바로 다운로드 받습니다.

User$ wget https://wordpress.org/latest.tar.gz




압축 해제

CentOS 에서 YUM으로 APM 설치 환경은 아래 경로에 압축을 해제하면 됩니다.

[root]# tar zvxf latest.tar.gz -C /var/www/html
-> 결과적으로 /var/www/html/wordpress 로 압축이 해제됩니다.
-> Virtualhost 관련글 작성시 /var/www/html/wordpress 으로 설정해둔 상태이며 아래에서 다시 한번 더 내용이 나옵니다.


ownership 변경
[root]# chown -R apache:apache /var/www/html/wordpress

유저명은 설치 환경에 따라서 다를 수도 있습니다


Ubuntu 에서 Nginx + PHP-FPM + MariaDB 연재글의 환경은 아래 경로에 압축을 해제하면 됩니다.

ubuntu$ sudo tar zxvf latest.tar.gz -C /usr/share/nginx/html/

ubuntu$ sudo chown -R nginx:nginx /usr/share/nginx/html/wordpress
               

Virtualhost / Server Block 설정

freenom 에서 무료 발급받은 도메인을 통해 virtualhost/Server Block 을 설정하도록 하겠습니다.

freenom 에서 무료 도메인 발급은 아래 포스팅을 참조하시면 됩니다.


freenom 포스팅 작성 시 생성한 h2code.cf 계정을 사용하여 설정 및 구성하도록 하겠습니다

freenom 에서 설정한 서브 도메인 중에서 WP를 사용하도록 하겠습니다.
->  도메인명은 wp.h2code.cf  이 되게 됩니다.


                 

Nginx 설정

ubuntu 에서 Nginx+PHP-FPM+MariaDB 환경 에서의 설정 내역입니다.
(CentOS - APM 환경은 아래에 내용이 있습니다)

Nginx 의 Server Block 에 대한 내용은 아래 포스팅을 추가로 참조하시면 됩니다.



먼저 SSL+HTTP2 이 적용된 server block 내용입니다.
HTTP(Non HTTPS)는 아래에 내용이 있습니다.

ubuntu$  sudo vi /etc/nginx/conf.d/default.conf


##### HTTPS 설정 내역 시작 #####

server {
server_name wp.h2code.cf;
root /usr/share/nginx/html/wordpress;
index index.php index.html index.htm;
access_log /var/log/nginx/wp.h2code.cf.access.log main;
error_log /var/log/nginx/wp.h2code.cf.error.log notice;
try_files $uri $uri/ /index.php;
charset utf-8;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

proxy_redirect off;
fastcgi_intercept_errors on;
fastcgi_read_timeout 120;
fastcgi_send_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 120;
proxy_connect_timeout 120;

}

location ~ /\.ht {
deny all;
}

location = /xmlrpc.php {
deny all;
}


add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
listen 443 ssl default_server http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/h2code.cf/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/h2code.cf/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}



server {
if ($host = wp.h2code.cf) {
return 301 https://$host$request_uri;
} # managed by Certbot

listen 80 default_server ;
server_name wp.h2code.cf;
return 404; # managed by Certbot

}


##### HTTPS 설정 내역 끝 #####



HTTPS(SSL) 이 아닌 HTTP 환경에서는 아래 내용을 사용하면 됩니다.

##### HTTP 설정 내역 시작 #####

server {
listen 80 default_server;

server_name wp.h2code.cf;
root /usr/share/nginx/html/wordpress;
index index.php index.html index.htm;
access_log /var/log/nginx/wp.h2code.cf.access.log main;
error_log /var/log/nginx/wp.h2code.cf.error.log notice;
try_files $uri $uri/ /index.php;
charset utf-8;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

proxy_redirect off;
fastcgi_intercept_errors on;
fastcgi_read_timeout 120;
fastcgi_send_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 120;
proxy_connect_timeout 120;

}

location ~ /\.ht {
deny all;
}

location = /xmlrpc.php {
deny all;
}

}



##### HTTP 설정 내역 끝 #####



Nginx reload

설정이 완료되었다면 reload 또는 재시작을 수행합니다.


ubuntu$ sudo systemctl reload nginx



재시작이나 reload 전에 conf 파일의 정상적인 설정 여부를 확인해볼 수 있습니다 아래와 같이 -t 옵션을 사용하시면 됩니다.

ubuntu$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfu
                

Apache 에서 설정

CentOS 에서 Apache+PHP-FPM+MySQL(APM) 환경일 경우입니다.

먼저 SSL+HTTP2 가 적용된 내용 입니다.
HTTP(Non HTTPS)는 아래에 내용이 있습니다.

[root]# vi /etc/httpd/conf.d/vhost.conf


###  HTTPS 설정 내용  ###
<VirtualHost *:80>

ServerAdmin admin@h2code.cf
DocumentRoot "/var/www/html/wordpress"
ServerName wp.h2code.cf
ServerAlias wp.h2code.cf
ErrorLog "logs/wp.h2code.cf-error_log"
CustomLog "logs/wp.h2code.cf-access_log" combined

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>


<VirtualHost *:443>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

SSLEngine On
ServerAdmin admin@h2code.cf
DocumentRoot "/var/www/html/wordpress"
ServerName wp.h2code.cf
ServerAlias wp.h2code.cf
ErrorLog "logs/fedora.h2code.cf-error_log"
CustomLog "logs/fedora.h2code.cf-access_log" combined

<Directory "/var/www/html/wordpress">

AllowOverride ALL
Options FollowSymLinks MultiViews
DirectoryIndex index.php index.html index.htm
FallbackResource /index.php

<RequireAll>

Require all granted
</RequireAll>
AddType text/html .html
AddType application/x-httpd-php .php .php3
AddType application/x-httpd-php-source .phps
</Directory>

ProxyRequests Off
ProxyErrorOverride on
ProxyTimeout 600
ProxyPreserveHost On
<FilesMatch \.(php|phar)$>
     # SetHandler "proxy:fcgi://127.0.0.1:9000"
SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost"
</FilesMatch>

SSLCertificateFile /etc/letsencrypt/live/wp.h2code.cf/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/wp.h2code.cf/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/wp.h2code.cf/fullchain.pem
</VirtualHost>


###  HTTPS 설정 내용  ###


HTTPS(SSL) 이 아닌 HTTP 환경에서는 아래 내용을 사용하면 됩니다.

###  HTTP 설정 내용  ###
<VirtualHost *:80>
ServerAdmin admin@h2code.cf
DocumentRoot "/var/www/html/wordpress"
ServerName wp.h2code.cf
ServerAlias wp.h2code.cf
ErrorLog "logs/fedora.h2code.cf-error_log"
CustomLog "logs/fedora.h2code.cf-access_log" combined

<Directory "/var/www/html/wordpress">
AllowOverride ALL
Options FollowSymLinks MultiViews
DirectoryIndex index.php index.html index.htm
FallbackResource /index.php

<RequireAll>
Require all granted
</RequireAll>
AddType text/html .html
AddType application/x-httpd-php .php .php3
AddType application/x-httpd-php-source .phps
</Directory>

ProxyRequests Off
ProxyErrorOverride on
ProxyTimeout 600
ProxyPreserveHost On
<FilesMatch \.(php|phar)$>
     # SetHandler "proxy:fcgi://127.0.0.1:9000"
SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost"
</FilesMatch>

</VirtualHost>


###  HTTP 설정 내용  ###


Apache reload

Apache 를 재시작 하거나 reload 를 합니다


]# sudo systemctl reload apache

            

SELinux 설정

이 부분은 CentOS - APM 관련된 내용 입니다
우분투18.04 / Nginx+PHP-FPM+MariaDB 연재글 환경은 바로 WordPress 설치를 진행하시면 됩니다

Selinux 가 활성화된 상태에서는 몇 가지 정책 차단에 의해서 설치 및 사용이 원활하게 되지 않은 경우가 있습니다.

selinux를 비활성화(disable) 해도 되지만 포스팅에서는 사용하면서 정책을 변경하는 등의 대처로 진행하도록 하겠습니다.


[참고] SELinux 비화성화

# 설정 파일 변경
[root]# vi /etc/sysconfig/selinux

SELINUX=disabled
# disabled 으로 변경하고 저장

# SELinux stop
[root]# setenforce 0


1) MySQL 접속 관련 정책 변경

[root]# setsebool -P httpd_can_network_connect 1

[root]# setsebool -P httpd_can_network_connect_db 1


2) 파일 권한 관련 하여 권한 부여

[root]# ls -aZ /var/www/html

[root]# chcon -R -t httpd_sys_rw_content_t /var/www/html


3) 다시 파일 권한 확인

ls -aZ /var/www/html


설치하는 과정에서 알수 없는 에러 등으로 진행이 안된다면 audit.log를 확인 해보시기 바랍니다.
[root]# tail -100f  
/var/log/audit/audit.log


audit.log 에 내용이 남는다면 audit2why 를 이용하여 selinux 왜 차단했는지 와 해결 방법 등을 확인 해볼 수 있습니다

[root]# audit2why < /var/log/audit/audit.log

                

WordPress(워드프레스) 설치

설치하기 위해 워드프레스의 파일이 압축 해제 및 설정이 완료된 웹 사이트 접속을 합니다.

접속을 하면 처음 화면은 아래와 같이 언어를 선택하게 됩니다.
한국어 를 선택 후 계속 진행합니다.




설치 시작을 클릭합니다




생성한 데이터베이스 및 유저 정보를 입력합니다.
* 계정, 데이터베이스 정보 등은 모두 테스트용 예시입니다




데이터베이스와 연결이 문제가 없다면 아래와 같은 화면이 나오게 되고 "설치 실행하기" 를 클릭합니다.




사이트 명, 사용자명(관리 계정) , 암호 , 이메일을 입력 후 "워드프레스 설치하기" 를 클릭합니다.




설치가 완료되면 아래와 같은 메세지를 확인할 수 있고 바로 로그인을 해봅니다




설치가 완료된 후 접속한 대시보드 화면입니다.




[참고] 설치 완료 후 언어가 영문만 선택되고 한글이 안된다면 아래 글을 참조해주세요

                   

Akismet(아키스밋) 스팸 방지 설정

워드프레스 관리 페이지에 접속 후 플러그인에서 비활성화 으로 되어있는 아키스밋 스팸 방지 플러그인 을 활성화하겠습니다.




스팸 방지 가 중요한 이유는 워드프레스나 다른 모든 블로그에서 공통적으로 쉽게 스팸 메세지 코멘트가 등록됩니다

코멘트(댓글)에 대한 승인 후 반영 및 이런 스팸 플러그인을 사용하지 않으면 어느 순간 스팸성 코멘트가 가득차게 됩니다.
지금도 운영 중인 블로그에는 스팸 처리가 된 코멘트가 90여개로 확인됩니다.




"계정을 설정 하십시오" 버튼을 클릭합니다.




SET UP YOUR AKISMET ACCOUNT 을 클릭합니다




그 다음은 무료/유료 상품을 선택하는 화면이며, 무료 개인 으로도 충분하기 때문에 Personal 을 선택합니다




오른쪽에 스크롤을 왼쪽으로 옮겨서 $0 / YEAR 로 변경 합니다(기본은 결제가 포함 되어있음)
이메일과 이름 사이트명 등을 입력합니다

3개 체크 박스에 체크하고 "CONTINUE WITH PERSONAL SUBSCRIPTION" 을 클릭합니다.




이메일로 수신된 Confirm Code 를 아래 화면에 입력합니다.




위에서 코드를 입력 후 아래와 같이 API KEY 를 받을 수 있습니다 복사를 합니다.




"Manually enter an API KEY" 를 클릭 합니다.




위에서 복사한 API KEY를 입력 후 "API 키로 연결하기" 를 클릭합니다.




설정 내용에서 변경할 내역이 있다면 선택 후 아래 "변경 사항 저장" 을 누르면 모두 완료된 것입니다.




이제 원하는 블로그나 사이트로 만드시면 됩니다~!




이어지는 글 : WordPress 의 취약한 xmlrpc.php 에 대한 접근 차단 설정



연관된 다른 글

본문에 특성이미지(Featured Image) 숨기기

워드프레스 - 둥근따옴표 와 --(Double Dash) 더블대시 문제 해결하기

워드프레스 5.7 버전 출시

PHP8.0 출시 및 WordPress 5.6 출시 안내

링크 미리 보기 - Visual Link Preview 플러그인

Nginx 환경에 웹 방화벽(WAF) 설치 - ModSecurity

Apache 환경에서 웹 방화벽(WAF) 설치 - ModSecurity

                  

2
0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x