GCP에서 워드프레스 마이그레이션 및 bitnami LAMP 설정 방법

나의 블로그(워드프레스)는 GCP(google cloud platform)에서 운영되고 있는데 최근 블로그가 자주 다운되는 현상이 발생했다. 이상하게 블로그만 접속하면 메모리 사용량이 올라가면서 Mysql이 계속 다운 되는 것이다. 원인을 찾지 못해서 결국 다시 VM을 생성해서 마이그레이션을 진행했다. 새로 생성한 VM은 bitnami에서 제공하는 LAMP를 이용했는데 그 과정에서 알게된 몇 가지 설정방법과 Tip을 소개하고자 한다. 나는 GCP를 사용했지만 AWS를 이용하는 사람도 충분히 활용할 수 있다.  참고로 해당 포스트에 나오는 설정 방법들은 Bitnami LAMP를 처음 이용하는 사람들을 위한 내용이니 클라우드 자원 활용에 능숙한 분들은 해당 포스트에 시간을 투자할 필요가 없다.


Bitnami LAMP 기본 설정방법

나는 이번 블로그(워드프레스) 마이그레이션 할  VM을 새로 생성하는 과정에서 bitnami에서 제공하는 LAMP(launcher)를 이용했다. bitnami에서 제공하는 워드프레스 launcher(위에서 언급한)를 이용할 수도 있었지만 Virtual Host를 활용하여 다른 것들도 할 부분들이 있어서 그냥 LAMP를 이용했다.

*Cloud launcher : 사람들이 많이 사용하는 소프트웨어와 기본 설정들이 적용되어 있는 상품 마켓이라고 할 수 있다.  launcher를 이용해서 VM을 생성하면 소프트웨어와 함께 관련 설정들이 모두 자동으로 적용되어 VM이 생성되기 때문에 굉장히 편리하다.

bitnami에서 제공하는 LAMP를 설치했으면 기본적으로 진행해야 할 사항들은 다음과 같다.

  • 기본 참고 사항 : bitnami에서 배포되는 소프트웨어들은 경로설정이 일반적인 리눅스와 다르다. 예를들어, 일반적인 데비안의 경우  /etc/apache2/에  Apache(아파치)의 설정파일이 있는데  bitnami 배포버전에서는 /opt/bitnami/apache2/conf 경로에 존재한다. 즉, 일반적인 리눅스와 다르게 /opt/bitnami/라는 경로가 추가적으로 붙는다.
  • root의 기보 비밀번호 확인 : GCP Console에서 LAMP가 설치된 VM의 상세페이지로 들어가면 bitnami-base-password 라는 항목이 있는데 여기에 root의 비밀번호가 적혀있다. 그리고 이것이 mysql root 권한의 비밀번호다.
  • phpmyadmin 설정 : phpmyadmin을 사용하는 사람은 로그인 페이지에 기본적으로 보안을 더 강화하는 것이 좋다.
    sudo vi /opt/bitnami/apps/phpmyadmin/conf/httpd-app.conf
    위 파일은 열어서 아래 코드를 삽입한다. 
    <Location /phpmyadmin> AuthType Basic AuthName phpMyAdmin AuthUserFile "/opt/bitnami/apache2/users" Require valid-user </Location>
  • 위 코드를 추가하였으면 아래 명령어를 입력하여 아파치를 재시작 한다.
    sudo /opt/bitnami/ctlscript.sh restart apache
  • 외부에서도 DB 접속하는 방법 : 위 작업이 진행되었으면 이제 외부에서도 DB에 접속할 수 있도록 설정을 하도록 하겠다. 만약 phpmyadmin만 이용할 사람이라면 이 설정을 할 필요는 없다. heidisql과 같은 Database Client를 이용하는 사람만 설정하면 된다.
    • 방화벽설정 : 네트워크 세부정보 페이지에 접속해서 mysql에 대한 방화벽 규칙(IP범위 지정 가능)을 추가한다.
    • 그리고 DB사용자에게 어디에서나 접근(%) 이나 특정 IP에서의 접근 권한을 주면 된다.
    • mysql>CREATE USER ‘아이디’@’호스트’ IDENTIFIED BY ‘비밀번호’;
    • /opt/bitnami/mysql/my.cnf
    • 위 파일에서 bind-address = 127.0.0.1 부분을 주석처리후 저장하면 된다.
  • bitnami 기본 명령어 : bitnami 배포버전에서는 아파치, Mysql의 재시작 명령어가 다른 일반적인 리눅스와 다르기 때문에  우리들이 흔히 알고 있는 기본적인 명령어들은 제대로 작동을 하지 않는다. 예를들면, service mysql restart 와 같은 명령어는 실행되지 않는다. 자주 사용되는 명령어는 다음과 같다.
    • 참고 : bitnami문서
      sudo /opt/bitnami/ctlscript.sh start
      sudo /opt/bitnami/ctlscript.sh restart apache
      sudo /opt/bitnami/ctlscript.sh stop
      sudo /opt/bitnami/ctlscript.sh restart
      sudo /opt/bitnami/ctlscript.sh start mysql
      sudo /opt/bitnami/ctlscript.sh restart mysql

Virtual Host 설정 방법

기본적으로 리눅스에서 Virtual Host를 수정한다고 하면 /opt/bitnami/apache2/conf/ 에 있는 설정 파일들을 건드리려고 한다.

그런데  bitnami에서는 변경해야 할 파일들이 좀 다르다. (이 부분을 잘 모르면 생각보다 많은 삽질을 하게 된다.)

bitnami 문서 참고

그리고Virtual Host 설정 관련하여 알아야 할 파일이 2가지 있다.

  •  httpd-prefix.conf :이 파일의 경우 http://domain.com/appname 처럼 도메인 뒤에 경로를 설정할 때 필요한 파일이다.
  • httpd-vhosts.conf :  http://appname.domain.com 처럼 서브 도메인으로 접속할 때 필요한 설정파일이다.

나는  http://quotes.junholee.me 이라는 서브도메인으로 접속하기 위한 방법을 설명하겠다. Virtual Host를 위한 quotes 앱의 기본적인 구조는 다음과 같다.

  • 일단, /opt/bitnami/apps/ 경로에  quotes 라는 폴더(app name)를 생성한다.  그리고 그 폴더 안에 conf 폴더와  htdocs 폴더를 생성한다.
  • http://quotes.junholee.me 라는 도메인으로 접속 시 htdocs 폴더안으로 접속된다. 즉, htdocs 폴더가 DOCUMENT_ROOT가 되는 것이다.
  • conf 폴더 안에는 httpd-app.conf 파일과 httpd-vhosts.conf 파일을 생성한다.(httpd-prefix.conf 파일은 사용하지 않을 예정이므로 생성할 필요가 없다.) 그리고 .htaacess 파일도 conf 폴더 안에 위치해야 한다. bitnami는 보안을 위해 .htaccess 파일을 htdocs 폴더가 아니라 conf 폴더에서 실행시킨다고 한다.(참고 페이지)
  • 그리고 이러한 설정파일들은 Include를 통해 서로 연결된다. 즉, App에서 설정한 conf 파일들이 Include를 통해 apache 설정 파일까지 연결되는 것이다.
  • 아래 파일들은 http://quotes.junholee.me 도메인으로 접속하기 위해 /opt/bitnami/apps/quotes/conf 경로에 설정한 파일들이다. /opt/bitnami/apps/quotes/conf/httpd-app.conf 파일과  /opt/bitnami/apps/quotes/conf/httpd-vhost.conf파일의 코드는 다음과 같다.
<Directory "/opt/bitnami/apps/quotes/htdocs">
     Options +MultiViews
     AllowOverride None
     <IfVersion < 2.3 >
       Order allow,deny
       Allow from all
     </IfVersion>
     <IfVersion >= 2.3>
       Require all granted
     </IfVersion>
 </Directory>

 Include /opt/bitnami/apps/quotes/conf/.htaccess

 Include "/opt/bitnami/apps/quotes/conf/httpd-app.conf"

<VirtualHost *:80>
  ServerName quotes.junholee.me
  DocumentRoot "/opt/bitnami/apps/quotes/htdocs"
  <Directory "/opt/bitnami/apps/quotes/htdocs">
    Options +MultiViews
    AllowOverride All
    <IfVersion < 2.3 >
      Order allow,deny
      Allow from all
    </IfVersion>
    <IfVersion >= 2.3>
      Require all granted
    </IfVersion>
  </Directory>
</VirtualHost>
  • /opt/bitnami/apps/quotes/conf 경로에서의 설정이 완료되었으면 이제 아파치 설정 파일에 include하면 된다.
  • /opt/bitnami/apache2/conf/bitnami/bitnami-apps-vhosts.conf
  • 위 파일에서 아래와 같이 추가해주면 된다.
  • Include "/opt/bitnami/apps/quotes/conf/httpd-vhosts.conf"
  • 그리고 혹시 bitnami-apps-prefix.conf 파일에 include 되어 있으면 그 코드는 주석처리한다.
    sudo vi /opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefix.conf //파일을 열어서
    
    # Include "/opt/bitnami/apps/wordpress/conf/httpd-prefix.conf"  //주석처리
  • 설정이 모두 완료되었으면 apache를 다시 시작한다.
    sudo /opt/bitnami/ctlscript.sh restart apache

워드프레스 마이그레이션 할 때 필요한 TIP

  • 플러그인 자동설치를 위한 폴더권한 : 위 설정자업을 완료 후 나는 기존 VM에서 다운로드 받은 WordPress 폴더를 새로 생성한 VM에 업로드 하였다. 그리고 추가적으로 워드프레스 플러그인을 설치하려고 하는데 계속 디렉터리 생성에 실패했다는 메세지가 나오고 플러그인 설치가 되지 않았다. 그 이유는 플러그인을 자동으로 설치하기 위해서는 시스템에 폴더를 생성할 수 있는 권한(쓰기)이 있어야 하는데 폴더의 소유자와 그룹을 모두 내계정으로 했기 때문에 발생한 문제였다. 따라서 만약 플러그인 자동설치가 안 된다면 아래 명령어로 시스템에 권한을 주면 된다.
    chown -R bitnami:daemon /opt/bitnami/apache2/htdocs/wp-content

    참고로 폴더 권한을 777로 줄 필요가 없다. 웹으로 검색하면 권한을 777로 주라고 하는데 그 방법은 권하고 싶지 않다.

  • 시스템의 소유자명과 그룹이 궁금하다면  아파치 conf 폴더에서 httpd.conf 혹은 apache2.conf 파일에서 ‘user’를 검색해 보면 알 수 있다. 아마  소유자는 bitnami, 그룹은  deamon으로 되어 있을 것이다. (워드프레스 퍼미션 관련 내용 자세히 보기)
  • 만약 홈페이지의 도메인도 새로 변경된 경우 워드프레스에서 약간의 DB작업도 해야 한다. 왜냐하면 워드프레스의 Post에 업로드 된 이미지들은 DB에 Full 경로로 Insert가 되기 때문이다. DB자업을 안 해주면 이미지들이 엑박으로 나올 가능성이 크다. 따라서 아래 sql 문을 순차적으로 실행시켜 준다.
    SELECT * FROM wp_posts WHERE post_content LIKE '%기존 도메인 주소%';
    //위 sql문으로 변경되어야 할 데이터가 얼마나 있는지 확인한다.
    
    SELECT REPLACE(post_content, '기존 도메인', '새로운 도메인') AS 'replaced_data' FROM wp_posts;
    //실제 정상적으로 변경되는지 확인해본다. Select 문이기 때문에 실제 데이터가 업데이트 되는 것은 아니다.
    
    
    UPDATE wp_posts SET post_content = REPLACE(post_content, '기존 도메인', '새로운 도메인');
    // 문제가 없으면 실제 데이터를 업데이트 한다.

워드프레스(Launcher) 선택 Tip:  Bitnami에서 배포하는 WordPress를 권장한다.

WordPress의 경우 Google에서도 제공하는 Launcher가  있는데 원인을 잘 모르겠으나 Google에서 제공하는 Launcher는  메모리 사용량이 굉장히 높고 Mysql이 자주 다운되곤 했다. 위에서 언급한 내 블로그도 그랬고 내가 다른 곳에서 활용한 블로그도 동일한 현상을 보였다. 심지어 메모리가 3.7GB인데도 그런 현상이 나타나곤 했다. 반대로 bitnami에 제공하는 WordPress의 경우 그런 현상이 나타나지 않았으며 속도도 굉장히 빠르다. 따라서 Launcher를 활용해서 워드프레스를 설치할 경우 bitnami에서 배포하는 버전을 권장하고 싶다.

0 Shares:
1 comment
  1. 안녕하세요 글 잘보고 갑니다. 감사합니다.
    저도 gcp에 wordpress를 설치하던 중에 이글을 봤는데요 처음 설치할때도 Bitnami LAMP를 wordpress bitnami와 함께 설치해줘야 하나요?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like
Read More

기획자와 스토아철학

기획자로서 일을 하다보면 생각보다 많은 부분에서 우울할 때가 있다. 그 우울함이 심해지면 '나는 과연 필요한 존재가 맞는가?'라는 생각까지 들곤 한다. 문제는 이런 경험을 자주 할수록 자존감이 낮아진다는 것이다. 내가 겪어온 경험을 토대로 이 문제를 어떻게 극복했는지 이야기하고자 한다.
Read More

내 리더가 회사를 떠났다.

어떤 한 사람이 있다. 그 사람을 보면서 나는 이런 생각을 했다. "저 분의 인성과 역량을 닮고 싶다. 내 아들이 커서 어른이 된다면 나의 모습보다는 저 분의 모습을 닮았으면 좋겠다." 그 분은 내가 현재 재직중인 회사의 CTO이자 나의 리더였다. 아이러니하게도 그 분과 나는 전혀 다른 성격의 소유자이고 업무 스타일도 많이 달랐다. 하지만 난 정말로 그분을 닮고 싶었다.
2021년 회고
Read More

2021년 회고(Product Owner, 가족, 성장)

회사에는 동료와 일이 있다. 가정에는 아내와 애들, 육아업무가 있다. 그러나 그 어디에도 나는 없었다. 원래 나 본연의 내가 존재할 수 있는 시간과 장소는 없었다. 단지, 의무로서의 나만 존재했다. 언뜻 생각해보면 참 서글프기도 하지만 잘 생각해보면 꼭 그렇지도 않다. 현재 나의 상황, 역할, 가족, 일.....그 모든 것이 결국은 나를 구성한다. 원래 나 본연의 나는 처음부터 없는 것인지도 모르겠다.