WordPress ARM 마이그레이션(삽질)후기

블로그를 기존 t3 인스턴스에서 c6g 인스턴스로 마이그 했다.

기존 RI도 SavingsPlans로 전환했겠다. 좀더 성능은 높으면서 저렴한 가격의 인스턴스를 사용하고싶었다.
회사에서 Profitability Drive를 하다가 집에 오니 개인 블로그에서까지 비용절감을 하는… 슬픈 현실

아무튼 우여곡절 끝에 2일만에 마이그레이션에 성공했다.

주요 삽질을 소개하자면…

  1. Amazon Linux 2023 on arm64 -> MySQL이 안깔린다…. 아직까지 어떤 방법으로 시도해도 성공하지 못했다.
    아직까지 레퍼런스도 거의 없는 듯. 직접 컴파일 하는것도 시도해보았지만 중간에 openssl 버전 이슈 등등
    컴파일을 위한 컴파일을 해야해서 포기했다.
    다행히 LAMP 스택은 설정가능하다. 대신 MySQL이 아닌 MariaDB10.5 버전을 설치하라고 공식문서에서 가이드하는데, 기존 블로그가 DB로 MySQL 8.0을 쓰고 있어서, 데이터 덤프 과정에서 호환성 문제가 발생했다.
    – > 사실 nginx 설정을 잘못해서 WordPress가 안뜬거였는데, 삽질을 하다 보니 정신을 놔버렸다.
    처음부터 깐다면 사실 별 상관은 없다.
  2. WordPress 띄우는게 이렇게 힘든건지 몰랐다.
    클린설치가 제일 맘편하고 쉬운 것 같다. 중간에 SSL 설치 및 자동업데이트를 위해 certbot을 설치했는데, 요놈이 화근이었다.
    자동으로 nginx설정을 수정하는 부분이 있는데, 아무생각 없이 스크립트를 실행시켰더니, nginx default 설정에 certbot이 설정한 이상한 옵션이 들어가서 기존 서버의 nginx설정과 충돌이 나던 것 이었다.

마이그레이션 작업 순서

  1. 기존 서버의 Database Dump -> EC2내부 데이터베이스가 아닌 경우 생략 가능
  2. 기존 EC2에 연결된 스토리지 스냅샷 -> 복제본 생성
  3. 신규 EC2 생성(arm64) 및 가용영역 설정에 주의(EBS와 AZ가 다르면 Attach불가능)
  4. WordPress구동에 필요한 프로그램 설치
  5. 복제한 EBS볼륨 마운트 진행 및 데이터 복사
  6. Nginx, SSL, DB유저 설정 등 각종 설정 복사 및 업데이트
  7. DB <dump import
  8. DNS 서버 변경

간략하게는 위 같은 순서로 진행을 했다.

세세하게 하나씩 보면

Database Dump

mysqldump -u [사용자명] –p [비밀번호] [options] [database_name] [tablename] > [저장할 파일명]
나는 그냥 root user로 덤프했다. sudo mysqldump wordpress > wpdump.sql
어짜피 워드프레스에서는 database하나만 사용하고, mysql이나 시스템 테이블들은 날아가도 상관없고, DB 유저정보만 다시 설정해주면 된다.

EBS 스냅샷을 이용해서 볼륨 복제본 생성

이부분은 사실 스냅샷을 생성해도 되고, 다운타임 걱정이 딱히 없으면 기존 EC2를 중지, 볼륨을 분리한 후에 신규 인스턴스에 붙이면 된다. 스냅샷을 생성하면, 이후에 스냅샷 복원을 통해서 EBS볼륨을 복제할 수 있고, 가용영역(AZ)도 선택이 가능하다.

신규 EC2 생성

graviton instance를 생성하기 위해서는 운영체제 아키텍처도 x86 이 아닌 arm64를 선택해야 한다.


조심할점은 항상 EC2 Instance와 EBS볼륨이 같은 AZ에 있어야 붙일 수 있다.
아래의 Network 설정중에서 서브넷을 잘 설정해주자.

WordPress구동에 필요한 프로그램 설치

워드프레스는 보통 Apache서버, MySQL, PHP 이렇게 많이 쓰는데, 나는 기존에 Apache -> Nginx로 넘어가면서
아파치 대신 Nginx를 설치해줬다.

sudo apt install nginx mysql-server, php, php-mysq, php-imagick, php-curl, php-mbstring php-fpm

php 관련 플러그인들도 같이 설치해주자

다음은 certbot에 대한 내용인데, 제일 편한것 같지만, 스스로 nginx나 apache의 옵션을 바꾸는 기능이 있으니 주의해야 한다.

https://certbot.eff.org/instructions 공식 주소에서 사용하는 소프트웨어( ex) Apache, Nginx) 중 어느 소프트웨어에 적용할지, 그리고 시스템을 선택하면 그에 맞는 가이드가 나온다. 시스템은 PIP을 이용한 설정이 제일 편하다.

ssh 접속해서 dependencies 설치하라는 내용이다.

순서대로 차근차근 따라하면 된다. 다만 주의할 내용은 여기서 아래
인증서만 받을지, 아니면 자동설정까지 진행할지 정하게 되는데, 미리 설정을 해둔 파일이 존재한다면 certonly 옵션을 이용해서 인증서만 발급받는 게 좋을 것 같다.

복제한 EBS볼륨 마운트 진행 및 데이터 복사

Certbot까지 복사가 완료되었고, 이제는 데이터 복사만 남았다.
데이터 복사를 위해 기존에 복제한 EBS 볼륨을 새 인스턴스에 할당하고 마운트해줘야 한다.

Action을 눌러서 인스턴스에 붙여주자.

이런식으로 인스턴스를 선택해서 붙여주면 된다. root volume인 경우에만 /dev/sda1이고 나머지는, 아래 설명처럼 하거나 기본값을 쓰면 된다.

볼륨을 다 붙이고 나면 OS에서 마운트해줘야 한다.
먼저 lsblk로 볼륨이 붙었는지 확인

lsblk를 쳤더니 아래처럼 nvme1n1 디스크가 하나 더 나왔다.

루트에 먼저 /backup 디렉토리를 만들어주고 sudo mkdir /backup

볼륨을 마운트 시켜주자 sudo mount /dev/nvme1n1p1 /backup

Nginx, SSL, DB유저 설정 등 각종 설정 복사 및 업데이트

이제 그냥 복사하면 된다.
복사하는 알아서 요런식으로 백업에서 복제해준다.
sudo cp -r /backup/var/www/html /var/www/
Nginx 설정도 가져와주고, DB 유저도 다시 설정해준다.

DB user create command MySQL8.0
명색이 DBA인데 자꾸 유저 생성, 권한부여 명령어를 까먹는다…
CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%';
FLUSH PRIVILEGES;

요렇게 쳐주면 유저가 생성된다. 뒤의 USERNAME, PASSWORD등은 알아서 %는 적절히 localhost등으로 수정해서 쓰자.

DB <dump import

제일 쉽다. 내가 친건 덤프 파일 복사후에
sudo mysql wordpress < wpdump.sql 이렇게 치면 알아서 데이터가 다 들어간다

wordpress는 실제 워드프레스가 설치되었던 데이터베이스 명이어야 한다.

DNS 서버 변경

다했다. 이제 DNS변경만 해주면 된다. 신규 서버IP로 도메인을 변경해주자.
나는 가비아를 쓰는데, 각자 도메인 호스팅 해주는 홈페이지에서 변경해보자.

진짜 개고생하면서 마이그레이션을 했다. 평일에 왜 시작했는지 모르겠다.
처음에 제대로 세팅이 안된 상태에서 DNS 주소를 바꿧는데, 덕분에 하루종일 블로그가 먹통이었다.
이제 한동안 AWS는 만질일이 없을 것 같다. ~제발!