1. AWS EC2 새 인스턴스 생성
→ 독립된 컴퓨터를 임대 해주는 서비스
→ 인스턴스 1개 == 컴퓨터 1개
→ step1: AMI 선택, 즉 os 선택을 하는 단계
→ Ubuntu Server 20.04 LTS 선택
→ step2: 인스턴스 유형 선택, 즉 인스턴스 사양을 선택하는 단계
→ 무료 버전이 사용 가능한 유형 선택
→ 가상 cpu 1개, 메모리 1GB, 스토리지 EBS 선택
→ EBS: Elastic Block Store의 약자로, 아마존에서 제공하는 일종의 하드 디스크와 같은 서비스를 말함
→step3: 인스턴스 세부 사항 선택
→ 변경 사항 없으므로 다음 step 으로 넘어감
→step4: 스토리지 추가, 즉 인스턴스에 저장 장치를 장착하는 과정
→ 30GB까지는 무료이며, 종료 시 삭제 체크를 해제하면 나중에 인스턴스 삭제할 때
스토리지는 삭제되지 않아 스토리지 금액이 발생하게 되므로 체크를 해주어야 함
→step5: 태그 추가
→ 인스턴스의 역할, 누가 관리하는지 메모하는 과정
→ step6: 보안 그룹 구성
→ 보안과 관련된 중요한 설정을 하는 단계
→ 누가 이 인스턴스에 접근을 하도록 허락할 것인가 또는 어떤 방식으로 접근하도록 허락할 것인가
→ 웹서버를 설치하므로 HTTP 프로토콜의 80번 포트를 미리 열어줌
→ 내 ip만 원격 접속, 웹 접속하도록 설정
→step7: 인스턴스 시작 검토 단계
→ 키 페어 생성
→ 네트워크를 통해 인스턴스에 접속할 때 사용
→ 인스턴스 생성 완료
2. 인스턴스 원격 접속
→ winSCP, putty 설치 및 연동
3. Nginx, Mysql, PHP 설치
(1) Nginx 설치
sudo apt update
sudo apt install nginx
JavaScript
복사
→ E2C 인스턴스 생성해줄 때 80 포트 열어줬기 때문에 접속 가능
(2) Mysql 설치
sudo apt install mysql-server
sudo mysql
JavaScript
복사
(3) PHP설치
sudo apt install php-fpm php-mysql
JavaScript
복사
→ CGI: 웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜로써 하나의 요청에 하나의 프로세스 생성
→ FastCGI: CGI 성능 개선하기 위해 등장, 만들어진 프로세스가 계속해서 새로운 요청들을 처리
→ PHP-FPM: PHP를 FastCGI 모드로 동작하도록 해줌
→ nginx에 php 리소스 요청 처리 설정
→ 서버 재실행 시 오류 발생
→ 닫는 블록 주석 해제 안해서 생긴 오류
(4) 외부에서 접속
→ xx.xxx.xxx.xx/phpinfo.php 성공
(6) MySQL 유저 생성
→ 생성 및 권한 주기 성공
→ 모든 클라이언트에서 접근이 가능하도록 (%)
→ 모든 데이터베이스의 모든 테이블에 대한 권한을 부여
(6) MySQL 외부 접속
→ mysql 외부 접속 실패
→ 인바운드 규칙 3306 포트 추가
→ 외부 접속 실패
→ Ubuntu는 기본 설정이 localhost만 접속 가능하도록 되어 있기 때문에 bind-address 설정을 수정해주어야 함
→ 외부접속 성공
(7) phpMyAdmin 설치
sudo apt install phpmyadmin
JavaScript
복사
→ DB는 mysql 사용하므로 No 선택
(8) Domain 적용 (가비아 구입)
→ Domain Name 구매 및 DNS 설정
→ 탄력적 ip는 인스턴스 중지 시 요금이 발생하므로 설정 X
→ 처음에 한 블로그만 보고 따라하느랴 default.conf 파일에 server_name을 추가했지만
도메인 당 하나의 conf 파일 생성하는게 좋음.
(9) HTTPS 적용 (let’s encrypt) - WebRoot 방식
#webroot : 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급하는 방법.
실제 작동하고 있는 웹서버의 특정 데렉토리의 특정 파일 쓰기 작업을 통해서 인증. 이 방식의 장점은 nginx를 중단시킬 필요가 없음..
이 방법의 단점은 인증 명령에 하나의 도메인 인증서만 발급 가능
JavaScript
복사
#sites-available & sites-enabled
nginx의 폴더 안을 들여다 보면 sites-available과 sites-enabled라는 폴더가 존재한다. 이 폴더들은 한 웹서버에서 여러가지 웹 서비스를 다른 도메인으로 운영 할 때를 대비해서 있는 폴더라고 이해하면 된다.
sites-available에는 각 도메인의 고유 설정 파일을 저장 해 두고, sites-enabled에 심볼릭 링크를 작성 혹은 삭제 함으로서 손쉽게 웹 서비스를 실행 혹은 중단 시키는 것이 가능하다.
예를 들면 /etc/nginx/sites-available/example.com의 서버 설정 파일을 생성 후, 아래 커맨드로 심볼릭 링크를 생성 할 수 있다.
JavaScript
복사
→ ./well-known/acme-challenge 경로 지정
mkdir -p /var/www/letsencrypt/.well-known/acme-challenge
vi /etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
sudo service nginx restart
JavaScript
복사
apt-get install letsencrypt
certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d xxx.shop -d www.xxx.shop
JavaScript
복사
→ 서브 도메인 많이 생성할거면 -d *.도메인네임 (와일드카드 인증서)로 인증서 발급
include /etc/nginx/ssl/letsencrypt.conf;
JavaScript
복사
→ 가상호스트 설정한 부분에 include 추가 안해주면 인증서 발급 시 오류 발생
→ 인증서 발급 성공
→ 443 포트 가상 호스트 설정
→ https 접속 성공
→ip로 접속시 도메인으로 리다이렉트
→ http로 접속시 https로 리다이렉트
→ 처음엔 작동되지 않음
→ 이유: default_server의 server_name도 greenfruit.shop, www.greenfruilt.shop으로 설정했기 때문
→ 해결: default_server의 server_name을 주석처리
(10) Sub Domain 적용 (Dev, Prod)
→sub domain 추가 (가비아)
→ /var/www/html/prod 디렉토리 생성 후에 prod page 출력하는 index.html 파일 생성
→ 서브 도메인에도 인증서를 발급해준 후 서브 도메인 443 가상 호스트 설정
→ dev 서브 도메인도 마찬가지로 설정
→ http에서 https 301 리다이렉트도 설정
# 리다이렉트란
- 리다이렉션은 사용자가 특정 페이지를 접근했을 때, 의도적으로 다른 페이지로 이동시기는 방법
# 301/302 리다이렉트
301 리다이렉트는 새로운 URL 혹은 사용하지 않는 페이지를 이동시키는데 적합하다.
302 리다이렉트는 기존 URL에 컨텐츠 URL를 추가하려고 할 때 사용하면 유용하다.
JavaScript
복사
dev, prod 템플릿 적용
1. ssh 관련 문제 해결 과정
→ 윈도우에 있는 무료 템플릿 파일들 인스턴스에 전송하는과정에서
→ ssh 설정을 잘못 건들여 인스턴스에 원격접속이 안되는 문제가 발생
1. 신규 인스턴스 생성
2. 기존 인스턴스 중지
3. 기존 인스턴스에서 볼륨 해제
4. 해제한 볼륨을 신규 인스턴스에 연결
5. 신규 인스턴스에서 SSH로 접속
6. 연결된 볼륨 확인
$ sudo lsblk
...
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 8G 0 disk
└─xvdf1 202:81 0 8G 0 part
새로 연결한 볼륨 마운트
$ mkdir mnt
$ sudo mount /dev/xvdf1 ./mnt
7. 건들인 sshd 파일 원상복귀
$ cd
$ sudo umount ./mnt
8. 기존 인스턴스에 볼륨 재연결
9. 인스턴스 선택 후 디바이스 선택할 때 자동으로 /dev/sdf로 잡힐 것이다. 그러나 인스턴스는 루트 디바이스가 무조건 있어야 하기 때문에 /dev/sda1으로 설정해야 한다.
10. 기존 인스턴스 SSH 접속 확인
JavaScript
복사
→ 또한 새 인스턴스 생성 시 기존 인스턴스와 똑같이 설정을 해주어야함.