AWS 인스턴스 하나에 워드프레스 여러 개 설치하기- 하나의 AWS 인스턴스에 여러 도메인을 연결해서 워드프레스를 추가 설치해서 운영하는 방법에 대한 완벽한 솔루션을 제공합니다. 더 이상 헤매지 마세요. 이 글 하나로 종결 합니다.
Contents
SSH에서 워드프레스 설치하기
SSH(Xshell 이나 Termius등의 프로그램 이용)에서 워드프레를 추가할 폴더로 이동합니다. 첫 번째 워드프레는 /var/www/html에 설치되어 있는 경우가 많습니다. 아래 처럼 폴더를 이동합니다.
cd /var/www
다음의 명령어로 한글 버전의 워드프레스 최신 버전을 설치할 수 있습니다.
wget https://ko.wordpress.org/latest-ko_KR.tar.gz
다음의 명령어로 압축을 풉니다.
tar -xzf latest-ko_KR.tar.gz
새롭게 설치한 워드프레스는 wordpress라는 폴더에 설치되어 있습니다. 저는 therecovery_com이라는 폴더 이름으로 새 폴더를 추가했습니다. 이건 예시입니다. 본인이 설정한 폴더 이름을 해당 자리에 입력해야 합니다.
mv wordpress therecoveryall_com(추가한 워드프레스의 폴더 이름)
폴더 내용을 확인할 때는 ls를 입력해서 해당 폴더의 위치로 이동한 다음에 ls를 입력하면 해당 폴더의 내용을 확인 할 수 있습니다.
ls
추가 워드프레스 도메인 연결
아래 처럼 로그 파일을 넣을 폴더를 만들고 권한을 설정합니다.
sudo mkdir -p /var/log/apache2/
sudo chown -R ec2-user:apache /var/log/apache2/
아래의 명령어를 순차적으로 입력해서 설정 파일을 수정할 경로로 이동합니다.
cd /etc/httpd
cd conf.d
아래는 therecoveryall.com은 AWS의 ip에 추가 연결한 도메인 입니다. 본인이 새롭게 연결한 도메인 명을 입력해야 합니다.
예시: sudo vi therecoveryall.com.conf
sudo vi 추가한 도메인명.conf
1) 서브 도메인이 아닌 새로운 도메인을 연결한 경우
아래 그림 처럼 기존 도메인 외에 추가된 도메인 두개가 확입됩니다. 두 도메인 다 aws 인스턴스 ip에 연결되어 있습니다.
2) 서브 도메인을 도메인을 연결한 경우
도메인을 추가한 경우가 아니라 기존 도메인에 서브 도메인을 추가한 경우입니다.
추가 도메인 연결되었고 서브 도메인이 잘 생성되었다면 아래 명령어를 입력해서 virtual host의 설정으로 이동합니다.
예시: sudo vi therecoveryall.com.conf
sudo vi 추가한 도메인명.conf
설정 파일이 열리면 i 를 눌러서 아래처럼 설정합니다.
추가 도메인 Virtual Host 설정하기
<VirtualHost *:80>
ServerAdmin 이메일주소 ServerName 추가 도메인명
ServerAlias www.추가 도메인명 .com
DocumentRoot /var/www/새로운 워드프레스가 설치된 폴더명 ErrorLog /var/log/apache2/추가 도메인명.com-error.log
CustomLog /var/log/apache2/추가 도메인명.com-access.log combined </VirtualHost>
설정이 끝났으면 esc 와 :wq (콜로 w q)를 눌러서 virtual host 설정 화면에서 빠져 나옵니다.
아래의 명령어를 입력해서 apache 서버를 재 시작 합니다.
sudo systemctl restart httpd
위의 설정으로 기존의 워드프레스도 새로운 도메인으로 연결되는 경우에는 아래처럼 기존 워드프레스 도메인에 대한 virtual host 설정을 다시 해주어야 합니다.
sudo vi 기존 도메인명.conf
<VirtualHost *:80>
ServerAdmin 이메일주소 ServerName 기존 도메인명
ServerAlias www.기존 도메인명 .com
DocumentRoot /var/www/기존 워드프레스가 설치된 폴더명 ErrorLog /var/log/apache2/기존 도메인명.com-error.log
CustomLog /var/log/apache2/기존 도메인명.com-access.log combined </VirtualHost>
설정이 끝났으면 esc 와 :wq (콜로 w q)를 눌러서 virtual host 설정 화면에서 빠져 나옵니다.
추가한 워드프레스에 데이터 베이스 연결하기
기존 도메인명/phpMyAdimin 에 접속해서 새로운 데이타베이스를 추가합니다. 데이터베이스의 이름은 추가한 워드프레스를 설치할 때 필요하기 때문에 반드시 기록해 두어야 합니다.
db명: 예시) therecoveryall_com 형식 utf8mb4_general_ci
추가한 도메인 SSL 설정
[인증서 받기 전 정지 부터 시켜야 됨]
sudo systemctl stop httpd
추가 도메인 인증서 발급
아래의 명령어를 입력한 이후에 오타가 날 수 있으니 도메인을 복사해서 붙여 넣기 합니다.
certbot certonly --standalone
추가한 도메인.com
certbot certonly --standalone
www.추가한 도메인.com
인증서를 발급 받았다면 아래 명령어를 입력해서 인증서 설정 화면으로 넘어 갑니다.
sudo vi /etc/httpd/conf.d/ssl.conf
마찬가지로 i 를 누른 뒤에 편집할 수 있습니다. 아래처럼 편집합니다.
추가 도메인 인증서 Virtual Host 설정
<VirtualHost *:443> DocumentRoot “/var/www/새로운폴더” ServerName 도메인명.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/도메인명.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/도메인명.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/도메인명.com/chain.pem </VirtualHost>
<VirtualHost *:443> DocumentRoot “/var/www/새로운폴더l” ServerName www.도메인명.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/www.도메인명.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.도메인명.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.도메인명.com/chain.pem </VirtualHost>
<VirtualHost *:80> ServerName 도메인명.com ServerAlias www.도메인명.com Redirect permanent / https://도메인명.com/ </VirtualHost>
설정이 끝났으면 esc 와 :wq (콜로 w q)를 눌러서 virtual host 설정 화면에서 빠져 나옵니다.
최초 워드프레스에 대한 ssl 인증서 발급은 다음을 참고 하길 바랍니다 => Amazon Linux 2023 SSL 인증서 발급-SSL(Let’s encrypt) 적용 가장 쉬운 완벽 가이드
서브 도메인일 경우의 SSL 발급
서브도메인 경우 다음과 같이 해도 됩니다. 혹시나 오류가 나면 기존 처럼 certbot certonly --standalone
를 입력해서 도메인을 추가합니다. 아래와 같은 방식으로 인증서를 동시에 받을 수 있습니다. 아래의 vietnam, thailand, philippines. japan 등은 예시이면 서브 도메인은 Namecheap등 도메인을 구매한 사이트에서 생성되어 있어야 합니다.
서브 도메인 인증서 동시에 받기
sudo certbot certonly –standalone -d vietnam.기존 도메인명.net
sudo certbot certonly –standalone -d thailand.기존 도메인명.net
sudo certbot certonly –standalone -d philippines.기존 도메인명.net
sudo certbot certonly –standalone -d japan.기존 도메인명.net
인증서 받은 도메인 HTTPS 설정에 넣기
sudo vi /etc/httpd/conf.d/ssl.conf
아래는 기존도메인이 tripjoa이고 서브도메인이 vietnam인 경우의 예시입니다. tripjoa_vietnam는 해당 워드프레스가 설치된 폴더입니다. 아래는 예시이고 해당 자리에 자신이 운영하는 워드프레스의 도메인과 폴더이름을 넣어야 합니다. 아래처럼 서브도메인으로 추가한 워드프레스를 모두 설정해 주어야 합니다.
<VirtualHost *:80>
ServerName 서브도메인.theleisureall.com
Redirect permanent / https://서브도메인.theleisureall.com/
</VirtualHost>
<VirtualHost *:443>
DocumentRoot “/var/www/폴더명”
ServerName 서브도메인.theleisureall.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/서브도메인.theleisureall.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/서브도메인.theleisureall.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/서브도메인.theleisureall.com/chain.pem
</VirtualHost>
설정이 끝났으면 esc 와 :wq (콜로 w q)를 눌러서 virtual host 설정 화면에서 빠져 나옵니다.
SSL 자동갱신 설정 방법
cronie-noanacron 패키지 설치가 이미 설치되어 있으면 crontab 파일 편집 부터 진행하면 됩니다.
cronie-noanacron 패키지 설치:
sudo dnf install cronie-noanacron
설명: cronie-noanacron
패키지를 설치합니다. 이 패키지는 cron
작업 스케쥴러와 관련된 것으로, 주기적인 작업을 자동으로 실행하기 위해 사용됩니다. Is this ok 를 물으면 [y/N] y를 선택합니다.
crontab 파일 편집:
sudo vi /etc/crontab
설명: 시스템의 crontab
파일을 열어 편집합니다. crontab
은 cron
작업 스케쥴러를 위한 설정 파일로, 이 파일을 통해 주기적으로 실행할 작업을 설정할 수 있습니다.
자동 갱신 설정 추가:
30 1 * * 2 root /usr/bin/certbot renew --post-hook "systemctl reload httpd"
설정이 완료되면 esc 를 누른 후 :wq(콜론 wq) 를 눌러서 설정 파일에서 빠져 나옵니다.
설명: 매주 화요일 새벽 1시 30분에 인증서 갱신을 시도하는 작업을 추가합니다.
30 1 * * 2
: 이 부분은 cron의 시간 및 날짜 표현 방식으로, 매주 화요일 새벽 1시 30분을 의미합니다.root
: 작업을 실행할 사용자를 의미합니다. 여기서는root
사용자로 설정되어 있습니다./usr/bin/certbot renew
:certbot
을 사용하여 인증서 갱신을 시도합니다.--post-hook "systemctl reload httpd"
: 인증서 갱신 후에 실행될 명령입니다. 여기서는 Apache 서버의 설정을 다시 불러오는reload
명령을 실행하도록 설정되어 있습니다.
추가 사이트 (추가 폴더)의 자동 갱신 설정 추가
sudo vi /etc/crontab
아래 처럼 매월 1일 새벽 3시에 SSL 인증서를 갱신하도록 설정 합니다. 밑에 그림처럼 라인을 맞춰 주세요. 제가 추가한 폴더 therecoveryall_com 자리에 추가 워드프레스가 설치된 폴더명을 적어 주세요.
0 3 1 * * root certbot renew --webroot -w /var/www/추가 워드프레스가 설치된 폴더명 --post-hook "systemctl reload apache2"
설정이 완료되면 esc 를 누른 후 :wq (콜론 w q) 를 눌러서 빠져 나옵니다.
아래의 명령어로 변경사항을 적용하기 위해 cron 서비스를 재 시작합니다.
sudo systemctl restart crond
AWS 인스턴스 하나에 워드프레스 여러 개 설치 마지막 작업: /var/www 및 이하 모든 디렉터리에 읽기, 쓰기, 실행 권한 설정
1) 2775(특수권한, 소유자권한, 그룹권한, 다른사용자권한)
sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \; 이 설정을 다음의 설정으로 더 빠르게 실행할 수 있습니다.
→
sudo chmod 2775 /var/www
find /var/www -type d -print0 | sudo xargs -0 chmod 2775
2) 0664 (특수권한, 소유자권한, 그룹권한, 다른사용자권한)
find /var/www -type f -exec sudo chmod 0664 {} \;이 설정을 다음의 설정으로 더 빠르게 실행할 수 있습니다.
→
find /var/www -type f -print0 | sudo xargs -0 chmod 0664
3) -exec와 xargs의 차이점
find /var/www/html -type d -exec sudo chmod 2775 {} \;
와 find /var/www/html -type d -print0 | xargs -0 sudo chmod 2775
두 명령어는 기본적으로 같은 작업을 수행하며, 둘 다 /var/www/html
디렉토리와 그 하위 디렉토리에 2775 권한을 설정합니다. 그러나 두 명령어는 내부적으로 다르게 작동합니다:
-exec
사용:find
가 디렉토리 하나를 찾을 때마다chmod 2775
명령을 새로 실행합니다.- 이 경우에는
find
가 찾은 디렉토리 수 만큼chmod
프로세스가 실행됩니다. - 이러한 방식은 비효율적일 수 있습니다.
xargs
사용:find
명령은 디렉토리 목록을 생성하고, 이 목록은xargs
명령으로 전달됩니다.xargs
는 받은 목록을chmod 2775
명령에 최대한 효율적으로 넘겨 줍니다. 즉, 가능한 적은 수의chmod
프로세스로 같은 작업을 수행합니다.- 이러한 방식은 일반적으로 더 빠르고 효율적입니다.
-print0
과 -0
옵션은 파일이나 디렉토리 이름에 공백, 줄바꿈, 특수문자가 포함되어 있을 경우에도 안전하게 처리할 수 있게 해줍니다. 결론적으로, xargs
를 사용하는 방법이 대체로 더 빠르고 효율적입니다.
아래의 추가된 링크에서 워드프레스에서 고유 주소 글 이름 변경 후 오류해결 과정도 확인 할 수 있습니다.
워드프레스 고유주소 글이름 변경 404 오류 해결 + 플러그인 설치 설정
여기까지의 설정은 많이 힘들고 복잡한 과정입니다. 작업하느라 고생하셨고 혹시 잘 안되는 부분 있으시면 댓글로 달아주세요. 빠르게 확인해서 알려드리거나 잘못된 부분은 수정하겠습니다.
-학습자가 똑똑해지는 스마트 교육
스마트 교육의 정보를 공유합니다.
강의요청 jey78v@naver.com