Ec2+docker+mysql
๊ด๋ จ ๊ธ
์คํฐ๋ - ๋ฐฐํฌ ๊ณผ์ ์ ๋ฆฌ
EC2 + Docker + MySQL
EC2 ์์ฑํ๊ธฐ
ubuntu ํด๋ฆญ
์คํ ์ธ์คํด์ค ํด๋ฆญ
Spot Instance
์ธ์คํด์ค๋ AWS์ ์ฌ์ ๋ฆฌ์์ค ๋๋ EC2 ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ์ง ์๋ ๋ฆฌ์์ค๋ฅผ ํ์ฉํ์ฌ ์ ๊ณต๋๋ค.
์ฌ๊ธฐ์ ์ธ์คํด์ค๋ ๋ด๊ฐ AWS์์ ์์ฑํ ์๋ฒ ํ ๋๋ฅผ ์๋ฏธํ๋ค.
EC2์์ ์์ฑํ ๊ฐ์ ์๋ฒ 1๋๋ฅผ ์ธ์คํด์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Spot ์ธ์คํด์ค๋ ์ด๋ฐ ์๋ฒ ์์ ์ค์์ โ๋จ๋ ์์โ์ ํ ์ธ๋ ๊ฐ๊ฒฉ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
์ด๋ฌํ ์ธ์คํด์ค๋ ๊ฒฝ๋งค ๋ฐฉ์์ผ๋ก ๊ฐ๊ฒฉ์ด ๊ฒฐ์ ๋๋ฉฐ ํ์ฌ์ ์์์ ๊ณต๊ธ ์ํฉ์ ๋ฐ๋ผ ๊ฐ๊ฒฉ์ด ๋ณ๋ํ๋ค.
๊ทธ๋์ ์ผ๋ฐ ์ธ์คํด์ค๋ณด๋ค ์ ๋ ดํ๋ค.
๋จ์ ์ AWS์์ ํด๋น ์์์ด ๋ค์ ํ์ํด์ง๋ฉด ๋ด ์ธ์คํด์ค๊ฐ ์ค๋จ๋ ์ ์๋ค.
๊ทธ๋์ ํ ์คํธ ์๋ฒ, ์ ๊น ์ฌ์ฉํ๋ ์๋ฒ์๋ ์ ํฉํ์ง๋ง
ํญ์ ์ผ์ ธ ์์ด์ผ ํ๋ ์๋น์ค์๋ ์ ํฉํ์ง ์์ ์ ์๋ค.
์ธ์คํด์ค ์ฐ๊ฒฐํ๊ธฐ
EC2๋ฅผ ์์ฑํ๋ค๋ฉด ์ด์ ์๋ฒ์ ์ ์ ํ๋ค.
์ ์ ๋ฐฉ๋ฒ์ SSH๋ฅผ ์ฌ์ฉํ๋ค.
ํค ํ์ด ์์น๋ก ์ด๋
EC2 ์์ฑ ์ .pem ํ์ผ์ ๋ค์ด๋ก๋ํ๋ค.
์ด ํ์ผ์ ์๋ฒ์ ์ ์ํ๊ธฐ ์ํ ๊ฐ์ธ ํค์ด๋ค.
ํด๋น ํ์ผ์ด ์์ผ๋ฉด ํด๋น EC2 ์ธ์คํด์ค์ ์ ์ํ ์ ์๋ค.
๋๋ Linux ์ ์ฉ ํด๋์ ๋ฃ์ด๋์๋ค.
keypair ํ์ผ์ ์ ๊ทผ ๊ถํ ๋ณ๊ฒฝ
{ํค ํ์ด ์ด๋ฆ}.pem์ ์ ์ฅํ ์์น๋ก ๊ฒฝ๋ก๋ฅผ ์ด๋์ํจ ํ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ค.
1
chmod 400 {ํค ํ์ด ์ด๋ฆ}.pem
Ubuntu์์๋ sudo๋ฅผ ๋ถ์ฌ์ผ ์คํ๋์๋ค.
1
sudo chmod 400 {ํค ํ์ด ์ด๋ฆ}.pem
chmod๋ ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ์ ๊ถํ์ ๋ณ๊ฒฝํ๋ ๋ช ๋ น์ด๋ค.
400์ ๊ถํ ์ค์ ์ ์๋ฏธํ๋ค.
ํ์ผ ์์ ์ โ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ
๊ทธ ์ธ ์ฌ์ฉ์ โ ์๋ฌด ๊ถํ ์์
AWS๋ ๋ณด์์ pem ํ์ผ์ด ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถ๋์ง ์๋๋ก ์๊ตฌํ๊ธฐ ๋๋ฌธ์
EC2 ์ ์์ฉ ํค ํ์ผ์ 400์ผ๋ก ์ค์ ํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
SSH๋ฅผ ์ฌ์ฉํ์ฌ EC2 ์ธ์คํด์ค์ ์ ์
1
ssh -i {ํค ํ์ด ์ฃผ์} ubuntu@ipv4์ฃผ์
๋๋ ํคํ์ด ์ฃผ์๋ฅผ ๊ฒฝ๋ก๊น์ง ์ ์ง ์๊ณ ํคํ์ด ์ด๋ฆ๋ง ์์ฑํด์ผ ์คํ๋์๋ค.
1
sudo ssh -i test.pem ubuntu@{ipv4์ฃผ์}
ssh: ์๊ฒฉ ์ ์ ๋ช ๋ น์ด-i: ์ฌ์ฉํ ๊ฐ์ธ ํค ํ์ผ ์ง์ ubuntu: EC2์ ์ ์ํ ์ฌ์ฉ์ ๊ณ์ ipv4์ฃผ์: EC2์ ๊ณต๊ฐ IP ์ฃผ์
์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ด ์ปดํจํฐ์์ EC2 ์๋ฒ๋ก ์ ์ํ๊ฒ ๋๋ค.
SSH๋?
SSH๋ Secure Shell์ ์ฝ์๋ค.
๋คํธ์ํฌ ์์์ ์๊ฒฉ์ผ๋ก ์ปดํจํฐ์ ์์ ํ๊ฒ ์ ์ํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ด๋ค.
์ฌ๊ธฐ์ ํ๋กํ ์ฝ์ด๋ ์ปดํจํฐ๋ผ๋ฆฌ ํต์ ํ ๋์ ๊ท์น์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
SSH๋ ๊ธฐ๋ณธ์ ์ผ๋ก 22๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค. (ํ๋ก๊ทธ๋จ๋ค์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฒํธ)
- 22 โ SSH
- 3306 โ MySQL
- 80 โ ์น ์๋ฒ
์ด๋ฐ ์์ผ๋ก ํ๋ก๊ทธ๋จ๋ง๋ค port๊ฐ ๋ค๋ฅด๋ค.
EC2์์ SSH ์ ์์ ํ๋ ค๋ฉด ๋ณด์ ๊ทธ๋ฃน์์ 22๋ฒ ํฌํธ๋ฅผ ์ด์ด๋์ด์ผ ํ๋ค.
๋ง์ฝ 22๋ฒ์ด ์๋๋ผ ๋ค๋ฅธ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด?
1
ssh -i {ํค ํ์ด ์ฃผ์} -p 500 ubuntu@ipv4์ฃผ์
-p ์ต์
์ ์ ์ํ ํฌํธ๋ฅผ ์ง์ ํ๋ ์ต์
์ด๋ค.
์๋ฅผ ๋ค์ด 500๋ฒ ํฌํธ๋ก SSH๋ฅผ ์ด์๋ค๋ฉด -p 500์ ๋ถ์ฌ์ผ ์ ์ํ ์ ์๋ค.
Docker ์ค์นํ๊ธฐ
Docker๋ ํ๋ก๊ทธ๋จ์ ์ปจํ ์ด๋๋ผ๋ ๋ ๋ฆฝ๋ ํ๊ฒฝ์์ ์คํํ๋ ๊ธฐ์ ์ด๋ค.
์ปจํ ์ด๋๋ ํ๋์ ๊ฒฉ๋ฆฌ๋ ์คํ ๊ณต๊ฐ์ด๋ค.
์๋ฒ ์์ ์์ ์๋ฒ๋ฅผ ํ๋ ๋ ๋ง๋๋ ๊ฐ๋ ์ผ๋ก ์ดํดํ๋ฉด ์ฝ๋ค.
apt ์ ์ฅ์ ์ฌ์ฉ
HTTPS๋ฅผ ํตํด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก
ํจํค์ง ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํ๋ค.
1
2
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
ํจํค์ง ์ธ๋ฑ์ค ์ ๋ฐ์ดํธ๋ ์ค์น ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ ๋ชฉ๋ก์ ์ต์ ์ํ๋ก ๊ฐฑ์ ํ๋ ๊ฒ์ด๋ค.
Docker ๊ณต์ GPG ํค ์ถ๊ฐ
1
2
3
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Docker๊ฐ ๊ณต์ ์ฌ์ดํธ์์ ์ ๊ณตํ ํ์ผ์ด ๋ง๋์ง ๊ฒ์ฆ
repository ์ค์
1
2
3
4
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker ์ ์ฅ์๋ฅผ Ubuntu์ ๋ฑ๋ก
Docker Engine ์ค์น
1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
์ค์น ํ์ธ
1
sudo docker -v
๋ฒ์ ์ด ์ถ๋ ฅ๋๋ฉด ์ ์ ์ค์น๋ ๊ฒ์ด๋ค.
MySQL ์ค์นํ๊ธฐ
MySQL ์ธ์คํด์ค ์์
1
docker run --name ${some-mysql} -e MYSQL_ROOT_PASSWORD=${my-secret-pw} -d mysql:tag
some-mysql โ ์ปจํ ์ด๋ ์ด๋ฆ
my-secret-pw โ root ๋น๋ฐ๋ฒํธ
tag โ MySQL ๋ฒ์
1
docker run -p 3306:3306 --name chat -e MYSQL_ROOT_PASSWORD=1234 -d mysql:latest
-p ์ต์ ์์ ์์ 3306์ EC2 ํฌํธ์ด๊ณ ๋ค์ 3306์ ์ปจํ ์ด๋ ๋ด๋ถ ํฌํธ์ด๋ค.
1
docker run -p 1111:2222 --name hello -e MYSQL_ROOT_PASSWORD=1234 -d mysql:latest
-p 1111:2222: EC2 1111๋ฒ ํฌํธ, ์ปจํ ์ด๋ 2222๋ฒ ํฌํธ
์ธ๋ถ์์ 1111๋ก ์ ์ํ๋ฉด ์ปจํ ์ด๋์ 2222๋ก ์ ๋ฌ๋๋ค.
์ด ๊ณผ์ ์ ํฌํธ ํฌ์๋ฉ์ด๋ผ๊ณ ํ๋ค.
--name hello: ์คํ๋๋ ์ปจํ ์ด๋์ ์ด๋ฆ โhelloโ๋ก ์ง์
Port Forwarding์ด๋?
ํฌํธ ํฌ์๋ฉ์ ํ ํฌํธ๋ก ๋ค์ด์จ ์์ฒญ์ ๋ค๋ฅธ ํฌํธ๋ก ์ ๋ฌํ๋ ๊ธฐ์ ์ด๋ค.
์ธ๋ถ โ EC2 1111
โ ์ปจํ ์ด๋ 2222
โ MySQL ์คํ
์ด ๊ณผ์ ์ ํตํด ์ปจํ ์ด๋ ๋ด๋ถ ์๋น์ค์ ์ ๊ทผํ ์ ์๋ค.
Spring Boot์ DB ์ฐ๊ฒฐ
MySQL์ด EC2์์ ์คํ ์ค์ด๋ฏ๋ก ํ๋ก์ ํธ์์ ํด๋น DB์ ์ฐ๊ฒฐํ๋ค.
user์ password๋ MySQL ์คํ ์ ์ค์ ํ ๊ฐ
Edit Configuration
Edit Configuration์์ Spring Boot ์ค์ ์ ์์ ํ๋ค.
jdbc:mysql://{EC2๊ณต๊ฐ์ฃผ์}:{host port}/์คํค๋ง ์ด๋ฆ
ex) jdbc:mysql://1.2.3.4:1111/chat
Active Profiles์ ์ฐ๋ ๊ฒ์ด ์๋๋ผ Environment Variables์ ์์ฑํด์ผ ํ๋ค.
์ธ๋ฐ์ด๋ ๊ท์น ์ค์
MySQL ํฌํธ๋ฅผ ์ด์ด์ค์ผ ํ๋ค.
๋ณด์ ๊ทธ๋ฃน์์ ํด๋น ํฌํธ๋ฅผ ์ธ๋ฐ์ด๋ ๊ท์น์ผ๋ก ์ถ๊ฐํ๋ค.
DB๋ ๋ฐ๋์ ๋ด IP๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋ค. (๋ณด์์ ๋ชจ๋ IP ํ์ฉX)
์คํค๋ง ์์ฑ ํ ์คํ
chat ์คํค๋ง ์์ฑ ํ run ํ๋ฉด ์ ์ ๋์ํ๋ค.
application.properties์ spring.jpa.hibernate.ddl-auto=create๋ฅผ ์ถ๊ฐํ๋ฉด ์คํ๊ณผ ๋์์ ํ
์ด๋ธ์ด ์์ฑ๋๋ค.
reference
[AWS, Docker] aws ec2 instance์ docker, mysql ์ค์นํ๊ธฐ