RC8기 2주차 로컬서버 구축, AWS 서버 구축

Peter·2022년 7월 29일
0

RC8기 서버

목록 보기
2/2

수업정리

Q. 클라이언트는 서버를 어떻게 찾을까?

사람이 도로명 주소를 쓰는 이유 → 사람이 알아보기 쉽게 하기 위해

도메인 ip주소

Q. 서버에 어떻게 접근할까?

스타벅스에 여러 문이 있는 것처럼 it에는 포트가 있음.

들어오는 문 inbound → 들어오는 사람 검사

outbound → 나가는 규칙. 크게 설정 안해도 됨.

문지기를 Daemon이라고 함. httpd, mysqld의 d가 Daemon

Q. 서버에 요청을 어떻게 할까?

스타벅스에 주문하는 방법

  1. 사이렌 오더
  2. 직접주문
  3. 키오스크
  4. 드라이브 스루

프로토콜 통신규약

http(80), mysql(3306), ftp(21), https(443), smtp(25) → 이메일 보낼 때 씀. ssh(22) → 원격으로 관리할 때. 포트번호 알고 있어야 함.

http 보안성 안좋음. 암호화 시킨 버전이 https

우리가 만들 서버도 https로 만들 것.

과제에서 Let’s Encrypt에서 인증서를 발급

redirection: 아이피 주소를 입력했을 때 도메인 주소로 바뀜. http로 접속해도 https로 넘어가는 것도 리다이렉션.

Q. 우리 서버 누가 사용할 수 있을까?

과제 - 외부접속, LTE

AWS

EC2 - 지역설정 서울로

RDS

인바운드 http, https 열어두고 mysql,ssh… 닫아두기

nginx, php, mysql 소스설치 아님. 리눅스 기반이라 설정 많이 해줘야 됨.

DB datagrip 추천(학생인증하면 무료)

php myadmin 사용해보기.

ip 주소에 Domain 연결. 도메인은 가비아라는 사이트에서 살 수 있음.

.shop…

.sites… 이런 거 1년에 500원

서브도메인

ex) m.naver.com

보조 도메인.


1. local 서버 구축

운영체제: Mac OS Moneterey

bitnami

비트나미를 이용하면 1주차때 설치한 apache, mysql, php를 쉽게 설치할 수 있다. 즉 쉽게 설치하기 위해 사용함.

https://velog.io/@xx0hn/Server-Bitnami를-사용한-Local-서버-구축

아래 링크에서 다운로드

https://bitnami.com/stack/mamp/installer
윈도우면 WAMP를 다운받으면 된다.

/Applications/mampstack-8.1.8-0/apache2/htdocs 에서 vi 편집기로 phpinfo.php 파일을 생성해준다.

포트 포워딩 - 외부에서 접속이 가능하도록 하는 것

ex) 공유기를 설치하면 공유기와 연결된 PC들은 내부IP를 공유기로부터 부여받는다. 그리고 공유기는 업체로부터 할당받은 IP(외부IP)를 가진다. 만약 다른 영역에 있는 PC에서 내부 IP에 있는 PC에 접속하고자 하는 요청이 들어오면 공유기는 어느 PC로 연결해줘야 할지 모른다. 이때 공유기에 해당 포트로 요청이 오면 내부 IP로 연결하라는 이정표를 달아주는 것이 포트 포워딩이다.

외부포트는 마음대로 설정해도 된다. 나는 블로그를 따라해 외부포트 80~80, 내부포트 8080으로 설정했다.

2. AWS 서버 구축

https://velog.io/@haeny01/AWS-EC2-인스턴스-생성-및-접속-for-Mac

🚨 Permission 0644 for ‘___.pem’ are too open

https://blogdeveloperspot.blogspot.com/2018/08/aws-ec2-ssh-permissions-0644-for-xxxpem.html

최초 접속시 AWS EC2의 pem 파일 권한변경을 하지 않아서 그런 것이다.

chmod 400 GMserver.pem
GMserver는 내가 지정한 이름. 사용자마다 지정한 pem파일을 입력하면 된다.

$ ssh -i {YOUR_KEY_PAIR_FILE.pem} {USER_NAME}@{AWS_PUBLIC_DNS_}

nginx 설치

sudo apt-get install nginx
nginx -v

php 설치

sudo apt install php-fpm php-mysql // php 설치(언제나 nginx, mysql 이후에)
아파치 설치와 다르게 php-fpm, php-mysql을 붙여줘야 된다.

MySQL 설치

https://mirae-kim.tistory.com/73

https://websecurity.tistory.com/103 netstat이란?

외부에서 접속: phpinfo 띄우기

https://velog.io/@oyeon/AWS-서버-구축-외부-접속

nginx와 php를 연동해줘야 한다.

/var/www/html$ sudo vi /etc/nginx/sites-available/default (php부분 주석 해제)
/var/www/html$ sudo service nginx restart

MySQL 외부에서 접속

https://velog.io/@oyeon/MySQL-외부-접속

mysql> create user 'nodejs'@'%' identified by '비밀번호';
유저를 nodejs, 호스트를 %로 지정. %의 의미는 외부에서의 접근을 허용
mysql> show databases;
mysql> use mysql;
mysql> select user, host from user;

데이터베이스 권한 부여

mysql 사용자추가/DB생성/권한부여 잘 정리한 블로그

https://nickjoit.tistory.com/144

mysql> grant all privileges on nodejsdb.* to 'nodejs'@'%';
mysql> select user, host from user;
mysql> flush privileges;
mysql> show grants for 'nodejs'@'%';

Datagrip에 MySQL연동

https://r-mango.tistory.com/13

처음에 잘 안돼서 뭐가 문제인가 했는데 다운로드 받으라는 알림보고 다운로드 버튼을 누르니 해결됐다.

phpMyAdmin 설치

https://velog.io/@oyeon/phpMyAdmin-설치-설정

~$ sudo apt update
~$ sudo apt install phpmyadmin

phpMyAdmin 설정

심볼릭 링크 만들기

Nginx 웹 서버가 phpMyAdmin 파일을 올바르게 찾고 제공하려면 설치 파일에서 Nginx 문서 루트 디렉터리로 심볼릭 링크를 만들어야 한다고 한다.

- ln -s [대상 원본 파일] [새로 만들 파일 이름]
~$ sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

php 설정
~$ sudo vi /etc/nginx/sites-available/default

index.php; 추가

sudo service nginx restart (서버 재시작)

ip주소/phpmyadmin으로 들어가면 phpMyAdmin이 잘 나온다.

https://luminitworld.tistory.com/83

사용자명과 비밀번호를 입력하면 된다. 비밀번호 뭐로 설정했는지 기억안나 헤맸다.

Domain 적용 (가비아에서 구입)

https://luminitworld.tistory.com/84?category=975147

https://velog.io/@oyeon/Domain-적용

적당한 이름 검색해 도메인을 구입한다. .shop이 1년에 500원으로 제일 싸다.

A레코드 - 웹서버의 IPv4주소를 매칭할 때 사용.

서버 이름(도메인)을 찾아가기 위한 레코드이다.

www.pangmin.shop 으로 접속하면 nginx가 실행중임을 알 수 있다.

처음에 접속하면 화면이 안 떴는데 새로고침을 누르니 잘 뜬다.

가비아에서 구입한 도메인 적용 완료.

HTTPS 적용

https://luminitworld.tistory.com/85?category=975147

Certbot 설치

sudo apt update
sudo apt-get update
sudo snap install --classic certbot (공식문서에도 이렇게 설치 명령어가 바뀜)

Certbot의 nginx패키지 설치

$ sudo apt install python-certbot-nginx

여기도 에러 발생. 일단 블로그를 따라해봤다. → 안 됨

sudo apt install python3-certbot-nginx
우분투 20.04버전은 python 대신 python3로 입력해야함.

nginx configuration 설정

$ sudo vi /etc/nginx/sites-available/default

server_name pangmin.shop www.pangmin.shop; 추가

변경하고 sudo nginx -t로 테스트 결과 잘 수정됨.

nginx 다시 로드

sudo systemctl reload nginx

방화벽의 HTTPS 허용

sudo ufw status (ufw라는 방화벽 상태 확인)
비활성화되어 있다고 나옴.

SSL 인증서 받기

sudo certbot --nginx -d pangmin.shop -d www.pangmin.shop

블로그와 같은 오류 발생. 해당 도메인에 대해 DNS 레코드를 설정하지 않았기 때문이라 함.

호스트가 @이고 나머지는 똑같이 해서 추가해준다.

SSL 인증서 받기 명령어 다시 입력
sudo certbot --nginx -d pangmin.shop -d www.pangmin.shop

https 적용 됐다고 나오고 테스트해보라 나온다.

https://www.ssllabs.com/ssltest/ 여기로 들어가서 도메인 입력

오류 발생.

SSL이 사용하는 HTTPS에 대한 포트 포워딩을 안해줬기 때문이다.

aws에서 HTTPS 인바운드 규칙을 추가한다.

Certbot 자동갱신 확인

Let’s encrypt의 인증서는 90일만 유효해 90일마다 갱신시켜줘야한다. certbot을 설치하는 과정에서 자동으로 갱신시켜주는 명령어가 추가되어 있다. 이 갱신 프로세스가 잘 동작하는지 확인하기 위해 아래 명령어를 입력했다.

$ sudo certbot renew --dry-run

오류 없이 잘 됨.

인증서가 필요한 경우 Certbot은 인증서를 갱신하고 nginx를 다시 로드해 변경 사항을 적용할 것이다.

nginx 서버 재시작.
$ sudo service nginx restart

https로 적용돼 자물쇠가 생긴 걸 볼 수 있다.

AWS에 Let’s encrypt로 HTTPS적용 완료.

Sub Domain 적용

https://luminitworld.tistory.com/86?category=975147

https://velog.io/@oyeon/Sub-Domain-적용

  1. DNS 레코드 추가
  2. Nginx Configuration 설정
dev와 prod의 이름을 갖는 디렉터리를 Nginx 루트 경로에 생성
~$ cd /var/www/html
/var/www/html$ sudo mkdir dev
/var/www/html$ sudo mkdir prod
테스트를 위해 dev, prod 디렉터리에 html 파일을 만든다.
/var/www/html/dev$ sudo vi dev.html
/var/www/html/prod$ sudo vi prod.html
Nginx configuration 설정
~$ sudo vi /etc/nginx/sites-available/default

vi 편집기 복사 붙여넣기

https://jitolit.tistory.com/28

:21,80y.  (21행부터 80행 복사)
:pu (붙여넣기)

기존에 있던 server 부분을 복사 붙여넣기 한 후 dev와 prod 두 서브 도메인에 대해 작성해준다.

Nginx 서버 재시작
$ sudo service nginx restart

Domain Redirection 적용

https://velog.io/@oyeon/Domain-Redirection-적용-IP-to-Domain

https://luminitworld.tistory.com/86?category=975147

ip 주소를 입력해도 도메인으로 연결되도록 적용하는 것이 Domain Redirection이다.

Nginx configuration 설정

~$ sudo vi /etc/nginx/sites-available/default

nginx 서버 restart
~$ sudo service nginx restart

웹서버의 ip주소를 입력하면 도메인으로 연결되는 것을 볼 수 있다.

3. 서브 도메인에 나만의 웹페이지 만들기

무료 웹 템플릿 사이트

https://html5up.net/

파일질라로 로컬에 있는 파일을 서버로 옮기려는데 오류가 난다.

https://yejin0730.tistory.com/27

권한부여해주기
sudo chmod 777 /var/www/
sudo chown -R ubuntu /var/www/html
sudo chmod -R 755 /var/www/html
~$ sudo vi /etc/nginx/sites-available/default

서브 도메인 적용했던거 했듯이 따라하기. vi편집기로 myownpage를 추가해줬다.

myownpage.pangmin.shop으로 접속한 결과. 나만의 페이지 만들기 성공.

profile
개발자 지망생. 일단 하고보자

0개의 댓글