AWS lightsail 서버 1개로 워드프레스 2개 운영하기

AWS lightsail 에서 40 GB 인스턴스에 워드프레스를 추가해보았습니다. (기본 1개 + 추가 1개 = 총 2개 워드프레스 운영) 즉 워드프레스 2개가 40 GB 용량을 공유하는 셈입니다. 가상호스트를 사용하면 가능합니다.

*혹시 몰라서 작업 전 AWS lightsail 의 백업기능인 스냅샷을 하나 저장하고 시작했습니다. (혹시 서버 망칠까봐 ㅎ)

추가할 워드프레스 폴더 만들기

  • 기본 워드프레스 경로 : /opt/bitnami/wordpress
  • 추가할 워드프레스 설치 경로 : /opt/bitnami/wordpress2
sudo mkdir /opt/bitnami/wordpress2
sudo chown -R bitnami:daemon /opt/bitnami/wordpress2

추가한 폴더에 워드프레스 파일 다운로드



cd /opt/bitnami/wordpress2
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz --strip-components=1
sudo rm latest.tar.gz

폴더 권한 설정

sudo chown -R daemon:daemon /opt/bitnami/wordpress2
sudo chmod -R 775 /opt/bitnami/wordpress2

새로운 데이터베이스 만들기

패스워드 알아내는 방법 (먼저 할일, 패스워드를 다른 곳에 적어둘 것)

sudo cat /home/bitnami/bitnami_application_password

아래 명령어로 접근 (패스워드 입력해야 함, 아까 적어놓은 패스워드 복붙)

sudo /opt/bitnami/mariadb/bin/mysql -u root -p

참고로 패스워드 입력시에는 커서가 움직이지 않음. (입력되고 있는 것임)

MariaDB 접속 성공시 아래 화면이 뜸.

Welcome to the MariaDB monitor.
MariaDB [(none)]>

순서대로 아래 명령어를 한줄씩 입력 (‘비밀번호 입력’ 글자 대신 ‘abcd123’ 같이 실제 설정하고자 하는 비번 넣어야 함)

CREATE DATABASE drdb DEFAULT CHARACTER SET utf8mb4;
CREATE USER 'druser'@'localhost' IDENTIFIED BY '비밀번호 입력';
GRANT ALL PRIVILEGES ON drdb.* TO 'druser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

drdb, druser 는 임의로 이름을 정한 것임.

wp-config.php 수정

나노 편집기로 들어감. (아래 내용으로 수정)

sudo nano /opt/bitnami/wordpress2/wp-config.php

나노 편집기로 들어갔을 때 내용이 없으면 샘플파일 복사

cd /opt/bitnami/wordpress2
sudo cp wp-config-sample.php wp-config.php

그리고 다시 나노 편집기로 열어보기

sudo nano wp-config.php

아래 부분을 찾아서 아래 문구로 수정해 줄 것

define('DB_NAME', 'drdb');
define('DB_USER', 'druser');
define('DB_PASSWORD', '아까 정한 비밀번호');
define('DB_HOST', 'localhost');

나노 편집기는 편집 후 저장이 Ctrl+O 한 후 엔터, 나올때는 Ctrl+X

권한 설정

sudo chown daemon:daemon /opt/bitnami/wordpress_dr/wp-config.php
sudo chmod 640 /opt/bitnami/wordpress_dr/wp-config.php

Apache 재시작

sudo /opt/bitnami/ctlscript.sh restart apache

도메인 설정

도메인 구입한 곳에서 도메인 설정해야 함.

  • 타입 : A
  • 호스트 : @
  • 값(IP) : Lightsail 의 public IP 주소
  • TTL : 기본
  • 타입 : A
  • 호스트 : www
  • 값(IP) : Lightsail 의 public IP 주소
  • TTL : 기본

브라우저 창에 도메인 입력하면 워드프레스 설치 화면이 나옴

HTTPS 설정 (인증서)

sudo /opt/bitnami/bncert-tool
  • Domains to enable SSL [example.com]: (추가하고자 하는 도메인) abc.co.kr
  • Enable HTTP to HTTPS redirection [Y/n]: Y
  • Enable non-www to www redirection [y/N]: N
  • Do you agree to these changes? [Y/n]: Y 등등의 질문들 답하면 인증서 설치됨.

VirtualHost 파일 생성

이 부분에서 매우 애를 먹었으나, 최종 완성 파일 내용을 적어봅니다. (이렇게 하니까 됩니다.)

기본 워드프레스용 vhost 파일(예시) [도메인 : 123.co.kr]

<VirtualHost *:80>
  ServerName 123.co.kr
  ServerAlias www.123.co.kr
  DocumentRoot /opt/bitnami/wordpress

  # BEGIN: Configuration for letsencrypt
  Include "/opt/bitnami/apps/letsencrypt/conf/httpd-prefix.conf"
  # END: Configuration for letsencrypt

  # BEGIN: Support domain renewal when using mod_proxy without Location
  <IfModule mod_proxy.c>
    ProxyPass /.well-known !
  </IfModule>
  # END: Support domain renewal when using mod_proxy without Location

  # BEGIN: Redirect HTTP to HTTPS
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteCond %{REQUEST_URI} !^/\.well-known
  RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [R=301,L]
  # END: Redirect HTTP to HTTPS

  # BEGIN: Redirect www to non-www
  RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
  # END: Redirect www to non-www

  <Directory "/opt/bitnami/wordpress">
    Options -Indexes +FollowSymLinks -MultiViews
    AllowOverride None
    Require all granted

    # BEGIN WordPress fix for plugins and themes
    RewriteEngine On
    RewriteRule ^bitnami/wordpress(/.*) $1 [L]
    # END WordPress fix for plugins and themes

    # BEGIN WordPress core rules
    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 core rules
  </Directory>

  Include "/opt/bitnami/apache/conf/vhosts/htaccess/wordpress-htaccess.conf"

  # BEGIN: Support domain renewal when using mod_proxy within Location
  <Location /.well-known>
    <IfModule mod_proxy.c>
      ProxyPass !
    </IfModule>
  </Location>
  # END: Support domain renewal when using mod_proxy within Location
</VirtualHost>

<VirtualHost *:443>
  ServerName 123.co.kr
  ServerAlias www.123.co.kr
  DocumentRoot /opt/bitnami/wordpress

  SSLEngine on
  SSLCertificateFile "/opt/bitnami/letsencrypt/certificates/123.co.kr.crt"
  SSLCertificateKeyFile "/opt/bitnami/letsencrypt/certificates/123.co.kr.key"
  SSLCertificateChainFile "/opt/bitnami/letsencrypt/certificates/123.co.kr.issuer.crt"

  # BEGIN: Redirect www to non-www (HTTPS)
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
  # END: Redirect www to non-www

  <Directory "/opt/bitnami/wordpress">
    Options -Indexes +FollowSymLinks -MultiViews
    AllowOverride None
    Require all granted

    # BEGIN WordPress fix for plugins and themes
    RewriteEngine On
    RewriteRule ^bitnami/wordpress(/.*) $1 [L]
    # END WordPress fix for plugins and themes

    # BEGIN WordPress core rules
    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 core rules
  </Directory>

  Include "/opt/bitnami/apache/conf/vhosts/htaccess/wordpress-htaccess.conf"

  # BEGIN: Support domain renewal when using mod_proxy within Location
  <Location /.well-known>
    <IfModule mod_proxy.c>
      ProxyPass !
    </IfModule>
  </Location>
  # END: Support domain renewal when using mod_proxy within Location
</VirtualHost>

추가 워드프레스용 vhost 파일 (예시) [도메인 : abc.co.kr]

<VirtualHost *:80>
  ServerName abc.co.kr
  ServerAlias www.abc.co.kr
  DocumentRoot /opt/bitnami/wordpress2

  # BEGIN: Configuration for letsencrypt
  Include "/opt/bitnami/apps/letsencrypt/conf/httpd-prefix.conf"
  # END: Configuration for letsencrypt
  # BEGIN: Support domain renewal when using mod_proxy without Location
  <IfModule mod_proxy.c>
    ProxyPass /.well-known !
  </IfModule>
  # END: Support domain renewal when using mod_proxy without Location
  # BEGIN: Enable HTTP to HTTPS redirection
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} !^localhost
  RewriteCond %{HTTP_HOST} !^[0-9]+.[0-9]+.[0-9]+.[0-9]+(:[0-9]+)?$
  RewriteCond %{REQUEST_URI} !^/\.well-known
  RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]
  # END: Enable HTTP to HTTPS redirection
  # BEGIN: Enable www to non-www redirection
  RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
  RewriteCond %{HTTP_HOST} !^localhost
  RewriteCond %{HTTP_HOST} !^[0-9]+.[0-9]+.[0-9]+.[0-9]+(:[0-9]+)?$
  RewriteCond %{REQUEST_URI} !^/\.well-known
  RewriteRule ^(.*)$ https://%1$1 [R=permanent,L]
  # END: Enable www to non-www redirection
  <Directory "/opt/bitnami/wordpress_dr">
    AllowOverride All
    Require all granted
  </Directory>

  # BEGIN: Support domain renewal when using mod_proxy within Location
  <Location /.well-known>
    <IfModule mod_proxy.c>
      ProxyPass !
    </IfModule>
  </Location>
  # END: Support domain renewal when using mod_proxy within Location
</VirtualHost>

<VirtualHost *:443>
  ServerName abc.co.kr
  ServerAlias www.abc.co.kr

  DocumentRoot /opt/bitnami/wordpress2

  SSLEngine on
  SSLCertificateFile "/opt/bitnami/letsencrypt/certificates/abc.co.kr.crt"
  SSLCertificateKeyFile "/opt/bitnami/letsencrypt/certificates/abc.co.kr.key"
  SSLCertificateChainFile "/opt/bitnami/letsencrypt/certificates/abc.co.kr.issuer.crt"

  # BEGIN: Enable www to non-www redirection
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ https://%1/$1 [R=permanent,L]
  # END: Enable www to non-www redirection

  <Directory "/opt/bitnami/wordpress2">
    AllowOverride All
    Require all granted
  </Directory>

  # Let's Encrypt renewal support
  <Location /.well-known>
    <IfModule mod_proxy.c>
      ProxyPass !
    </IfModule>
  </Location>

  # Optional: include WordPress htaccess rules
  Include "/opt/bitnami/apache/conf/vhosts/htaccess/wordpress-htaccess.conf"
</VirtualHost>

vHost 파일 각각 설정 후 Apache 재시작

sudo /opt/bitnami/ctlscript.sh restart apache

이렇게 하니까 123.co.kr, abc.co.kr 도메인 각각 워드프레스가 동작하였습니다. (https 인증서도 제대로 작동)

댓글 남기기