[블로그운영] 워드프레스 업그레이드
안녕하세요? 정리하는 개발자 워니즈입니다. 블로그를 5년여 정도 운영을 하고있는데요. 블로그를 통해 어떤 이득을 본다기보다는 개인적인 취미생활(?) 혹은 내가 운영하는 서비스를 간단하게 경험해보기 위해서 처음 시작했었습니다. 아직도 처음 글을 작성했던 내용이 기억이 나는데요. 아래는 지금까지 블로그를 운영하면서 겪었던 내용들을 포스팅하고 있습니다.
처음 작성했던 내용들을 지금와서 보면, 허술하기 그지 없습니다. AWS Freetier를 이용해서 무료로 블로그를 운영하려는 목적이였는데요. 프리티어의 과금 체계를 이해하지 못하고 Nginx 서버 2대, Apache 2대로 총 4대의 서버를 구축했고, RDS 서버 역시 이중화를 고려여 Primary, Secondary로 2대를 구축하여 과금 폭탄을 맞은적이 있었습니다.
오늘 작성해보려고하는 내용은 워드프레스의 PHP 버전이 낮아서 이를 업그레이드를 하고자 하는 내용입니다. 5년여간 운영해온 서버를 다른 서버로 이전한다는것은 실제 서비스에서도 굉장히 부담이 되는 작업이였습니다. 하지만 제가 운영하는 워드프레스를 어떤식으로 업그레이드 하였는지 포스팅해보려고합니다 .
블로그 구축 지난글 다시 보기
- 블로그 구축 이야기 1편
- 블로그 구축 이야기 2편
- 블로그 구축 : 인증서 추가
- 블로그 운영 – 장애 발생 1편
- 블로그 운영 – 장애 발생 2편
- 블로그 운영 – Blog 0원으로 운영하기(마이그레이션)
- 블로그 운영 – 워드프레스 업그레이드
1. 업그레이드 계획
1차적으로 신규 Account 생성 및 기존 워드프레스에 대한 Migration을 완료하여, 블로그는 이미 신규 어카운트에서 운영이 되도록 설정을 해두었습니다. 업그레이드를 할 수 있는 프리티어가 필요했는데 마침 기존 계정에서 일주일 정도의 시간이 남아있어, 기존 계정에서 테스트를 하기로했습니다.
전체적인 계획은 위의 그림에서 설명을 하고있습니다.
- 기존 계정에서 wordpress upgrade 수행
- 기존 계정으로의 DNS 연결은 https://test.wonizz.com 를 사용
- 테스트 완료 후, 신규 계정으로 Migration 수행
업그레이드하는 부분에서의 관건은 데이터가 적절하게 유실 없이 마이그레이션이 되는것이였고, 또다른 하나는 워드프레스의 플러그인들이 셋팅된 그대로 적절하게 이관되는것이 목표였습니다.
2. 업그레이드 수행
실제로 업그레이드를 수행하는 내용을 정리하겠습니다. 순서는 아래의 순서대로 진행을 했고, 각 스텝마다 우여곡절이 있었지만 하나씩 해결하면서 나가는 재미가 있었습니다.
2-1. AWS AMI를 이용한 업그레이드
처음 블로그를 업그레이드를 해야겠다고 느낀것은 위의 그림과 같이 php 버전이 낮은 버전(7버전)을 사용하고있어서, 플러그인들이 업데이트 안되는 문제점과 성능 혹은 보안상의 이슈가 발생할것이라는 문구가 있기에 진행을 하게 되었습니다.
처음 시도는 기존 서버에서 php만 업그레이드하면 될것이라고 생각했으나, 워드프레스 소스 자체가 업그레이드에 영향을 받게 되는 상황이라 다시금 base ami(amazon machine image)로부터 초기 wordpress를 구축하고 데이터를 이전하는 방식으로 진행하게 되었습니다.
워드프레스의 AMI는 아래의 사이트에서 확인을 할 수 있습니다.
https://bitnami.com/stack/wordpress/cloud/aws/amis
필자는 서울 리전을 사용하고있어서 캡쳐된 이미지와 같이 ap-northeast-2의 ami를 사용하여 서버를 기동하였습니다. 초기 기동된 사이트는 워드프레스 초기 구성그대로 기동이 되었고 내용물은 아무것도 없는 상태였습니다. 이상태에서 기존 DB를 연결해보았으나 빈화면에 아무것도 노출이 안되는 상황이였습니다.
2-2. Apache 설정 수정
ami를 이용하여 사이트를 올리긴했지만, https://test.wonizz.com 로 접근을 했을 때, apache(web server)에서 적절하게 워드프레스로 라우팅설정을 해주지 못해서 빈화면만 노출되고있는 상황이였습니다.
- 기본적인 설정 파일 : /opt/bitnami/apache/conf/httpd.conf
...
ServerName blog.wonizz.com
...
Include "/opt/bitnami/apache/conf/extra/httpd-default.conf"
Include "/opt/bitnami/apache/conf/deflate.conf"
IncludeOptional "/opt/bitnami/apache/conf/vhosts/*.conf" -> 이파일이 실제로 virtual hosts 설정하는 부분
Include "/opt/bitnami/apache/conf/bitnami/bitnami.conf"
Include "/opt/bitnami/apache/conf/bitnami/httpd.conf"
Include "/opt/bitnami/apache/conf/bitnami/phpmyadmin.conf
- virtual host 설정 파일 : /opt/bitnami/apache/conf/vhosts/wordpress-https-vhost.conf
<VirtualHost _default_:443>
ServerName blog.wonizz.com
ServerAlias *
SSLEngine on
# 인증서 처리
SSLCertificateFile "/etc/letsencrypt/live/blog.wonizz.com/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/blog.wonizz.com/privkey.pem"
DocumentRoot /opt/bitnami/wordpress
# wordpress proxy
<Directory "/opt/bitnami/wordpress">
Options -Indexes +FollowSymLinks -MultiViews
AllowOverride None
Require all granted
# BEGIN WordPress fix for plugins and themes
# Certain WordPress plugins and themes do not properly link to PHP files because of symbolic links
# https://github.com/bitnami/bitnami-docker-wordpress-nginx/issues/43
RewriteEngine On
RewriteRule ^bitnami/wordpress(/.*) $1 [L]
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
</Directory>
Include "/opt/bitnami/apache/conf/vhosts/htaccess/wordpress-htaccess.conf"
#https redirect 셋팅
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ "https://%{SERVER_NAME}%{REQUEST_URI}" [R,L]
#www to blog redirect
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.wonizz.com$ [NC]
RewriteRule ^(.*)$ https://blog.wonizz.com [R=301,L]
</VirtualHost>
2-3. Storage Migration
위의 설정을 마친 뒤 사이트를 접속했을 때, 정상적으로 접근은 가능했으나 플러그인이 모두 초기화 상태가 되어있었고 모든 리소스들(image, css, js)등등에 대해서 로드를 못하는 상황이였습니다. 이러한 부분들은 DB에 적재되는 데이터가 아니라 서버상의 EBS(Elastic Block Storage)로 적재가 되는것을 알고 이를 마이그레이션 하기로했습니다.
- /opt/bitnami/wordpress/wp-content 이관
drwxr-xr-x 4 daemon daemon 4096 Nov 25 03:18 cache/
-rwxrwxr-x 1 bitnami daemon 28 Nov 25 02:21 index.php*
drwxrwxr-x 4 bitnami daemon 4096 Nov 25 02:21 languages/
drwxrwxr-x 16 bitnami daemon 4096 Nov 29 06:30 plugins/
drwxrwxr-x 23 bitnami daemon 4096 Nov 25 02:21 themes/
drwxrwxr-x 2 bitnami daemon 4096 Nov 29 06:30 upgrade/
drwxrwxr-x 4 bitnami daemon 4096 Nov 25 02:21 upgrade-temp-backup/
drwxrwxr-x 15 bitnami daemon 4096 Nov 25 02:21 uploads/
plugins에 대한 항목도 존재하고 upload(image)에 대한 내용들도 있어서 이쪽 폴더를 이관하면 동작할것이라고 생각했습니다. cache 폴더를 제외한 나머지 폴더들은 모두 이관 하는 과정을 거쳤고, 이관을 마친 이후 접속을 수행했을 때는 특별한 이슈 없이 기존과 동일하게 wordpress가 서비스 되었습니다.
또한 기존에 발생하던 php upgrade 오류 메시지도 사라졌고, wordpress를 최신 버전으로 구성하다보니 admin site가 이전과는 다르게 변경된 부분이 일부 있었습니다.
3. AWS Account 이전
이제 마무리 작업으로 기존 계정에서 작업했던 내용들을 모두 이관하기로 했습니다. ec2는 ami를 생성하고, RDS는 스냅샷을 생성하여 계정간 이동을 하기로했습니다. AMI, Snapshot에 신규 계정에 대해서 권한을 부여하면 신규 계정에서 해당 ami 혹은 snapshot이 조회가 됩니다.
이를 통해서 신규 ec2 및 RDS를 올리고 서버 구성을 마친 뒤, DNS의 A record만 신규로 변경을 하여 작업을 마무리 하였습니다.
4. 마무리
매년마다 blog migration 작업을 진행하고있습니다. 아무래도 프리티어를 사용하다보니 반복되는 과정이라 수행하고있는데요. 이부분에서 워드프레스 업그레이드를 해볼 수 있어서 좋은 경험이였던 것 같습니다. 실제 운영하는 사이트를 중단 없이 이관하는 작업은 너무 좋은 경험이였던 것 같습니다. 또한 워드프레스의 구성을 이해하고 업그레이드 계획부터 수행 마무리까지 진행하는 부분에 있어서 나름의 성취감도 있었습니다.
앞으로는 블로그의 UI도 변경하고 카테고리도 대폭 개편을 할 예정입니다. 컨텐츠에 좀 더 많은 신경을 쓸 예정이고 마케팅 및 광고도 적절하게 해보려고합니다. 긴글 읽어주셔서 감사합니다.