05.3.Clouds‐AWS - yojulab/learn_DevOps GitHub Wiki
- EC2 (Elastic Compute Cloud) : 가상 서버를 제공하는 서비스로 유연한 컴퓨팅 환경을 구성.
- S3 (Simple Storage Service) : 객체 스토리지를 제공하며, 대규모 데이터를 저장하고 관리.
- RDS (Relational Database Service) : 관계형 데이터베이스 관리 작업을 자동화, MySQL, PostgreSQL, Oracle, SQL Server 등을 지원.
- Lambda : 서버 관리 없이 코드 실행, 서버리스 컴퓨팅 서비스, 트리거 이벤트 따라 자동 코드 실행.
적용 예제
Used Symbol |
mean |
@ |
browser |
~$ |
VM |
~# |
docker in VM |
> |
Another Terminal |
1. AWS EC2 인스턴스 생성 및 SSH 접속
@ AWS Management Console > EC2 > 인스턴스 시작
- 이름: team-spring-mysql-fastapi
- AMI: Ubuntu 20.04 LTS
- 인스턴스 유형: t2.medium
- 키 페어 생성 및 저장
- 스토리지: 50GB
- 보안 그룹: HTTP(80), HTTPS(443), SSH(22) 포트 허용
# 인스턴스 시작 후 SSH 접속
@ 인스턴스 ID 선택 > 연결
or
$ ssh -i "your-key.pem" ubuntu@[your-ec2-ip-address]
~$ sudo apt-get update && sudo apt-get install -y unzip docker-compose nginx certbot python3-certbot-nginx dnsutils nano vim
# /usr/local/bin에 Docker Compose 바이너리 다운로드
~$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
# 실행 권한 부여
~$ sudo chmod +x /usr/local/bin/docker-compose
# 버전 확인
~$ docker-compose --version
~$ lscpu
~$ df -h
~$ sudo systemctl status nginx
~$ sudo tail -f /var/log/nginx/access.log
~$ sudo tail -f /var/log/nginx/error.log
~$ wget 127.0.0.1
@ http://[your-ec2-public-ip]/
2. DNS 관리
@https://dns.gabia.com/ > get Domain
> DNS Managerment ['cocolabhub.store']: Host - setup extenal IP with '@' and 'www'
or
@ AWS Route 53 > 호스팅 영역 생성 > 도메인 이름: 'cocolabhub.store'
- A 레코드 생성: '@' 및 'www'를 EC2 인스턴스의 Public IP로 설정
~$ nslookup cocolabhub.store
~$ nslookup www.cocolabhub.store
3. Docker 및 컨테이너 설치
~$ sudo docker system prune
@ https://cocolabhub.com/teams/list > click button 'shell' to want it on list
~$ wget -O docker_files.zip http://cocolabhub.com/comodules/r/download/[66e10f1ba5684486c3b91b3a]
~$ unzip docker_files.zip -d docker_folder && cd ./docker_folder
~/docker_folder$ sudo docker-compose build --no-cache
~/docker_folder$ sudo docker-compose --project-name teams_java_jupyterlab_mysql up -d
~$ sudo docker ps
~$ sudo docker exec -it [java_springboot_mysql-springboot_3.1_fastapi-1] bash
4. FastAPI 서버 시작
~# ps aux | grep uvicorn
~# kill -9 [PID]
~# apt-get update && apt-get install -y nano
/apps/fastapis/app# cd ../ && git pull
/apps/fastapis# nohup uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 --workers 2 &
/apps/fastapis# tail -f nohup.out
outside_docker:~$ wget http://localhost:8000
5. Spring Boot 서버 시작
~# ps aux | grep gradlew
~# kill -9 [PID]
~# cd /apps/springboots && nano ./src/main/resources/application.properties
...
server.address=0.0.0.0
spring.datasource.url=jdbc:mysql://[db_mysql_8]:3306/cocolabhub
remote.server.url=http://[cocolabhub.store]:80/images/
...
/apps/springboots# chmod +x ./gradlew && nohup ./gradlew bootRun &
/apps/springboots# tail -f nohup.out
/apps/springboots# exit
outside_docker:~$ wget http://localhost:8080
6. HTTPS 인증서 설정 및 Nginx 시작
~$ sudo certbot --nginx -d [cocolabhub.store] -d www.[cocolabhub.store]
~$ sudo rm /etc/nginx/sites-available/default
~$ sudo nano /etc/nginx/sites-available/default
... # Spring Boot 및 FastAPI의 설정을 추가
~$ sudo nginx -t
~$ sudo systemctl restart nginx
@ https://cocolabhub.store/ -> springboot
@ https://www.cocolabhub.store/ -> springboot
@ http://www.cocolabhub.store:80/ -> fastapi
@ http://cocolabhub.store:80/images/empty.txt -> fastapi