AWS프리티어에 워드프레스 2개 돌리기

By | 2019-09-17

AWS 프리티어에 워드프레스를 2개 돌리려던 시도를 실패한 후 몇번 다시 해보려다가 어제 다시 시도해서 성공했다. 지난번 실패의 이유는 두번째 워드프레스(든 버츄얼호스트든) 홈 디렉토리를 기존 워드프레스 홈 디렉토리의 하부 디렉토리에 설정하지 않아서이다. 즉 2nd 워드프레스 폴더를 /opt/bitnami/apps/wordpress/2nd 로 지정하려고 했었는데 기존 /opt/bitnami/apps/wordpress/htdocs 아래인 /opt/bitnami/wordpress/2nd 로 사용해야 했다. 처음 시도와 다르게 이번에는 별도의 DB생성없이 기존 DB를 그대로 이용하여 설치하였다.

  1. https 리다이렉트를 위해 설정한 부분 주석처리 /opt/bitnami/apache2/conf/bitnami/bitnami.conf
    #RewriteEngine On
    #RewriteCond %{HTTPS} !=on
    #RewriteCond %{HTTP_HOST} !^(localhost|127.0.0.1)
    #RewriteRule ^/(.*) https://example.com/$1 [R,L]
  2. virtual host 설정 (Help setting up apache2 virtual host config for bitnami wordpress for two sites (Not multisite) 참조)
  3. /opt/bitnami/apps/wordpress/conf/httpd-vhost.conf
    <VirtualHost *:80>
    ServerName hof.pe.kr
    ServerAlias www.hof.pe.kr
    DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
    Include "/opt/bitnami/apps/wordpress/conf/httpd-app.conf"
    </VirtualHost>
    <VirtualHost *:80>
    ServerName 2번째도메인.kr
    ServerAlias www.2번째도메인.kr
    DocumentRoot "/opt/bitnami/wordpress/2nd"
    Include "/opt/bitnami/apps/wordpress/conf/httpd-app.conf"
    </VirtualHost>

  4. /opt/bitnami/apache2/conf/bitnami/bitnami-apps-vhosts.conf 에서 아래 행 추가 (또는 주석 제거)
  5. Include "/opt/bitnami/apache2/conf/bitnami/bitnami-apps-vhosts.conf"

  6. 2번째 도메인의 DNS 설정에서 기본도메인과 WWW 도메인을 AWS서버 IP를 향하도록 지정
  7. /opt/bitnami/apps/wordpress/htdocs 아래에 2nd 폴더 생성
    /opt/bitnami/wordpress/2nd

  8. 워드프레스 최신버젼을 다운받아서 이 폴더에 올림.
  9. 원래 워드프레스 홈 디렉토리에 있던 wp-config.php 파일을 2nd 디렉토리로 복사 ( 워드프레스 설정파일 값 세팅하기 ( WordPress wp-config.php) 참조)
  10. DB의 prefix 를 원래 워드프래스와 다르게 지정
  11. $table_prefix = 'wp2_';

  12. https://api.wordpress.org/secret-key/1.1/salt/ 에서 생성된 키를 wp-config.php 에서 해당 부분 찾아 대체.
  13. 아파치 재시동
  14. sudo /opt/bitnami/ctlscript.sh restart apache

  15. 2nd 워드프레스 디렉토리를 웹브라우저로 접근하여 워드프레스 설치
  16. 여기부터는 Generate And Install A Let’s Encrypt SSL Certificate For A Bitnami Application 참조

  17. 워드프레스 기본 설치 페이지가 나온 것을 확인 후 SSL 키 생성을 위해 아파치 중지
  18. sudo /opt/bitnami/ctlscript.sh stop

  19. 키 생성
  20. sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --domains="www.DOMAIN" --path="/opt/bitnami/letsencrypt" run

  21. /opt/bitnami/letsencrypt/certificate 에 두번째 도메인의 .crt와 .key 등이 생성되었는지 확인
  22. virtual host 설정에서 https 설정하도록 함. 아래 설정한 디렉토리에 맞게 키 파일 이동
  23. 원래 있던 *80 설정 아래에 각각 아래 내용을 도메인에 맞도록 추가
    <VirtualHost *:443>
    ServerName hof.pe.kr
    ServerAlias www.hof.pe.kr
    DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
    SSLEngine on
    SSLCertificateFile "/opt/bitnami/apps/wordpress/conf/certs/hof.pe.kr.crt"
    SSLCertificateKeyFile "/opt/bitnami/apps/wordpress/conf/certs/hof.pe.kr.key"
    Include "/opt/bitnami/apps/wordpress/conf/httpd-app.conf"
    </VirtualHost>

    2번째 도메인용
    <VirtualHost *:443>
    ServerName 2번째도메인
    ServerAlias www.2번째도메인
    DocumentRoot "/opt/bitnami/wordpress/2nd"
    SSLEngine on
    SSLCertificateFile "/opt/bitnami/apps/wordpress/conf/certs/2번째도메인.crt"
    SSLCertificateKeyFile "/opt/bitnami/apps/wordpress/conf/certs/2번째도메인.key"
    Include "/opt/bitnami/apps/wordpress/conf/httpd-app.conf"
    </VirtualHost>

  24. 아파치 시작
  25. sudo /opt/bitnami/ctlscript.sh start

남은 과제

  • hof.pe.kr 과 2번째 도메인으로 들어오는 http 접속을 https 로 강제 리다이렉션이 잘 안됨. 도메인 하나일때와 버츄얼 호스팅일때 설정 방법이 다른지 확인. –> 해결. /opt/bitnami/apache2/conf/bitnami/bitnami.conf 에 있던 리다이렉션 설정을 /opt/bitnami/apps/wordpress/conf/httpd-vhosts.conf 에서 지정 (via Force HTTPS Redirection With Apache )
  • SSL 인증서를 임의로 옮긴 후 버츄얼호스트에서 경로를 지정해주긴 했는데 나중에 수동이든 자동이든 갱신하고나서 또 매번 이동해줘야하는지 아니면 갱신 스크립트가 지정하는 폴더로 이동시키고 그 위치를 버츄얼 호스트에서 지정해줘야 할지 확인해야 함.

기타 설정

  • pretty permalink를 위해 http://recreationcoach.kr/&post_id%/로 지정했고 아래 내용을 /opt/bitnami/apps/wordpress/conf/htaccess.conf 에 등록했다. (그런데 hof.pe.kr 은 이 방식 주소가 예전부터 써오던것을 aws로 이사온 뒤로도 자연스럽게 되니 갸우뚱)
  • <Directory "/opt/bitnami/wordpress/2nd">
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    </Directory>