[우아한테크코스] 4월 29일 TIL
오늘 한 일
- 블로그 로컬에 배포
- 체스 피드백 적용
배포 관련
[gatsby] gatsby 블로그 로컬에 올리기
- npm install
- npm start
- yarn install
- yarn start
이와 같은 명령어로 로컬에 돌릴 수 있다.
node 버전, npm 버전, 경로 설정 등이 잘못되어서 오류가 날 가능성이 있다.
올바른 버전을 잘 사용해보고
vi ~/.zshrc, vi ~./bash_profile 로 경로 설정을 잘 하도록 하자.
–force, sudo의 사용은 계속 쌓이니 주의하도록 하자.
- npm install –legacy-peer-deps
- npm install -g gatsby cli
[ubuntu] ubuntu에 도커 설치
- docker 설치: 링크 https://hiseon.me/linux/ubuntu/install-docker/
- apt package 업데이트
sudo apt-get update
- https를 통해 저장소 사용할 수 있도록 하는 패키지 설치
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
- apt package 업데이트
-
도커 다운로드 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
fingerprint 인식 키 확인
sudo apt-key fingerprint 0EBFCD88
-
docker CE 설치
업데이트:sudo apt-get update
docker CE 설치:sudo apt-get install docker-ce docker-ce-cli containerd.io
특정 버전 도커 설치:sudo apt-get install docker-ce=<version> docker-ce-cli=<version> containerd.io
버전 확인:sudo docker version
-
사용자를 도커 그룹에 추가
사용자 확인:cat /etc/group
사용자 추가:sudo usermod -aG docker $USER
($USER 이름 등록시 ubuntu),newgrp docker
- docker-compose 파일 생성
vi docker-compose.yml
```
version: ‘3’ plugdev:x:46:ubuntu staff:x:50: version: ‘3’ services: local-db: image: library/mysql:5.7 container_name: local-mysql restart: always ports:- 13306:3306 environment: MYSQL_ROOT_PASSWORD: sally118 MYSQL_DATABASE=chess MYSQL_USER=hi MYSQL_PASSWORD=sally118 TZ: Asia/Seoul volumes:
- ./db/mysql/data:/var/lib/mysql
- ./db/mysql/init:/docker-entrypoint-initdb.d platform: linux/x86_64 ```
- mysql 실행
docker-compose up -d
sudo apt install -y docker-compose
실행:docker exec -it local-mysql bash
- 안정화된 저장소 활용
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
-
기존 도커 제거
sudo apt-get remove docker docker-engine docker.io
sudo apt install -y docker-compose - 필요한 패키지 설치
sudo apt-get update && sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
- 패키지 저장소 추가
- 도커의 공식 GPG 키와 저장소 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
-
도커 CE 설치
sudo apt-get update && sudo apt-get install -y docker-ce
- 일반 사용자 계정으로 docker 명령어를 사용하기 위해 그룹 추가
-
ubuntu 라는 사용자를 docker 그룹에 추가
sudo usermod -aG docker ubuntu
newgrp docker
-
도커 재부팅
sudo systemctl restart docker
- 실행 확인
docker ps
[network] 서버 통신 과정
- 사용자가 웹브라우저 dns를 url 입력한다.
- dns를 통해 등록된 실제 주소(ip)를 알아낸다.
- ip를 통해 http 요청 메시지를 서버에 보낸다.(TCP/IP)
- 서버는 웹브라우저에 응답을 패킷으로 보낸다.
- 웹브라우저는 패킷을 조립해 사용자에게 보여준다.
[network] ddos 공격에 대응하려면?
ddos란? 감당할 수 없는 규모의 트래픽이나 커넥션 요청을 네트워크, 시스템, 어플리케이션에 전송해서 발생하는 것이다.
어플리케이션에 도달할 수 있는 트래픽의 유형을 줄임으로써 이를 막을 수 있다.
보안그룹을 구성하면 인스턴스에 대한 인바운드, 아웃바운드 통신에서 허용할 포트나 프로토콜을 지정해 통제할 수 있다. 지정되지 않는 다른 포트나 프로토콜은 접근이 불허된다.
이렇게 관리자만이 ssh를 통해 접근할 수 있도록 제한하기 위해 구성되는 인스턴스가 ssh bastion 서버이다.
우리는 22번 포트를 통해 허용된 ip로부터 접근할 수 있게 한다.
bastion 서버를 통해 관리자는 service, mysql 서버에 접근할 수 있다.
또 다른 방법으로 Elastic Load Balancing을 사용할 수 있다.
자동으로 인바운드 트래픽을 라우팅해줌으로써 공격받는 부분을 줄여주고, 자동으로 용량 스케일링을 해준다.
elb는 유효한 트래픽만 전달하도록 한다.
또 하나의 방법으로 Network Address Translation이 있다.
service, mysql 서버는 프라이빗 서브넷에 위치해서 직접 인터넷과 통신할 수 없다.
소프트웨어 업데이트 등을 위해 인스턴스는 인터넷과 연결될 필요가 있다. 이를 위해 고유의 보안그룹을 갖는 것이 이 NAT 인스턴스이다.
웹 어플리케이션 보안그룹을 설정해 elb로부터 오는 웹 요청들만 받아들이게 된다.
elb로부터의 tcp 포트 80, 443과 관리자의 접근을 위한 ssh 22 포트만 허용된다.
mysql 데이터베이스 서버보안그룹은 tcp포트 3306 트래픽
[network] 서버에서 연결 가능한 개수 구하기
sysctl fs.file-max
ulimit -aH
: hard, ulimit -a
: soft
[network] 재부팅 없이 ec2 volume 확장하기
- ec2 elastic block store -> 볼륨 -> 볼륨 수정 -> 원하는 크기 입력 -> 수정 클릭
in-use-completed
가 되길 기다린다.
용량 확인:df -h
혹은lsblk
스토리지 확장:sudo growpart /dev/xvda 1
파일시스템 재할당:sudo resize2fs /dev/xvda1
체스 피드백 적용
[sql] room title 중복 제거
ALTER DATABASE chess DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE IF NOT EXISTS pieces
(
room_id bigint,
piece_name char(1),
position char(2)
);
CREATE TABLE IF NOT EXISTS room
(
id bigint NOT NULL AUTO_INCREMENT,
title varchar(64) DEFAULT NULL UNIQUE,
turn char(5) DEFAULT NULL,
playing_flag tinyint(1) DEFAULT NULL,
PRIMARY KEY (id)
);
unique 옵션, 상단 utf8 설정