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

Last Updated on 5월 6, 2021 by 태랑(정현호)



세계 최대의 오픈 소스 CMS



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



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


워드프레스의 설치를 간략하게 확인해보도록 하겠습니다.




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



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

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

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

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


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

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

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


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




이어지는 글 



해당 글은 아래의 글에서 이어지는 내용 입니다.


1. Oracle Cloud 환경에서 CentOS7.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 및 User 생성



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

이전에 설치 구성한 phpmyadmin 을 통해 편하게 mysql schema 및 user를 생성하도록 하겠습니다.







Schema(Database)를 생성

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









유저 생성

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







계정 정보 입력

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

호스트명은 기본값으로 모든 곳에서 접속 가능하게 wildcard(%)으로 지정된 내용에서 localhost 로 변경 해줍니다
암호는 워드프레스를 클라우드나 서버에 설치하여 사용 용도일 경우 계정 비밀번호는 어렵게 생성 해야 합니다

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

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







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








권한 부여

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







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








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







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








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












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 에서 설정한 서브 도메인 내역 - 서브 도메인 중에서 WP를 사용하도록 하겠습니다.
->  도메인명은 wp.h2code.cf  이 되게 됩니다.







• ubuntu 에서 Nginx+PHP-FPM+MariaDB 환경
(CentOS - APM 환경은 아래에 내용이 있습니다)

먼저 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 를 수행 합니다.
ubuntu$ sudo systemctl reload nginx







•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 를 수행 합니다.
[root]# 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




MySQL 접속 관련 정책 변경

[root]# setsebool -P httpd_can_network_connect 1

[root]# setsebool -P httpd_can_network_connect_db 1




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

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

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



다시 파일 권한 확인

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

 

답글 남기기