๐ฅ aws(EC2)์ ํ ๋ถํฐ ๋ฐฐํฌ๊น์ง
- Amazon Elastic Compute Cloud์ผ๋ก์จ AWS์์ ์ ๊ณตํ๋ ํด๋ผ์ฐ๋ ์ปดํจํ
์๋น์ค์ด๋ค. ์ฆ, ๋
๋ฆฝ๊ดธ ์ปดํจํฐ๋ฅผ ์๋ํด์ฃผ๋ aws์
์ค๋์ EC2์์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , docker๋ฅผ ํตํด Spring boot ํ๋ก์ ํธ๋ฅผ ๋์๋ณด๊ฒ ๋ค. ์ฒ์ฒํ ๋ฐ๋ผ๊ฐ ๋ณด์.
๋จผ์ ํ๋ก์ ํธ๊ฐ ์ค์น๋ ๊ฒฝ๋ก์์ ' mvn install '๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ jar ํ์ผ์ ์์ฑํ๋ค
docker build -t [์ด๋ฏธ์ง ์ด๋ฆ]:[ํ๊ทธ] [dockerfile์ด ์ ์ฅ๋ ๊ฒฝ๋ก]
์ด์ docker๋ ์ค๋น๊ฐ ๋๋ฌ๋ค...
์์ธํ ์ค๋ช
์ ์๋ตํ๋ค. ๊ฒ์ํด ๋ณด์๊ธธ
4.๋ฒ์ ์ฃผ์๋ฅผ ์ฌ์ฉํด์ ์ ์ํ๋ค. ์ด๋!, .pem ํ์ผ์ด ์ ์ฅ ๋์ด์๋ ๊ฒฝ๋ก์์ ์งํํ๋ค
์ ์์๋ฃ.
๋จผ์ , aws ๋ฌด๋ฃ ๋ฒ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ ํ๋ค.
sudo docker pull [image์ด๋ฆ]:[ํ๊ทธ]
sudo docker images
๋ช ๋ น์ด๋ฅผ ํตํด ์์ฑ๋๊ฒ์ ํ์ธํ ์ ์๋ค.
1.2์ ๊ณผ์ ์์ ' --platform linux/amd64 ' ํ๊ทธ๋ฅผ ์ถ๊ฐํด ์ฃผ๊ณ , ํ๊ทธ์ -linux๋ฅผ ๋ถ์๋ค.
์ ๋ฐ๋ผ์๋ค๋ฉด EC2 ํ๊ฒฝ์์ docker๋ฅผ ํตํด ๋ฐ์ jarํ์ผ์ด ์ ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ด๊ฐ ๋ง๋ ํฌํธ๋ 8000๋ฒ์ด๋ฉฐ IP์ฃผ์๋ AWS์ ์ธ์คํด์ค์์ ์ฐพ์๋ณผ ์์๋ค.
ํผ๋ธ๋ฆญ IP์ฃผ์ ๋ฅผ ํตํด ์ ์์ ํ์ธํด๋ณด๊ธฐ ์ ์..
ํด๋น ์ธ์คํด์ค์ ๋ณด์๊ทธ๋ฃน์ ํ์ธํ๊ณ , ๋ด๊ฐ ์ค์ ํ ํฌํธ(:8000)์ ๋ํ ์ ๊ทผ์ ํ๊ฐํด์ฃผ์ด์ผํ๋ค. ๋ณด์๊ทธ๋ฃน ํ์ธ ํ,
๋คํธ์ํฌ ๋ฐ ๋ณด์ -> ํด๋น ๋ณด์๊ทธ๋ฃน -> ์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง ( ์ธ๋ฐ์ด๋๋, ์ธ๋ถ์์ ํด๋น ์ธ์คํด์ค๋ก ์ ๊ทผํ๋ ๊ฒ)
8000๋ฒ ํฌํธ ์ถ๊ฐ
์ด๋ ๊ฒ ๊ณผ์ ์ ๋ง์น๋ฉด...
http://[์ธ์คํด์ค์ ํผ๋ธ๋ฆญ IP์ฃผ์]:[ํฌํธ๋ฒํธ]
๋ก ์ ์์ด ๊ฐ๋ฅํ๋ค!
๋ค์์ ๋๋ต์ ์ธ ๊ณผ์ ์ ํตํด ์งํ๋ ๊ฒ์ด๋ค.
1. Docker๋ฅผ ํตํด Redis ๋ค์ด๋ฐ๊ธฐ
2. Redis config ํ์ผ ์์ฑ/์์ ๋ฐ docker file ์์ฑํ๊ธฐ
3. 2์์ ์์ฑํ conf ํ์ผ๊ณผ dockerfile๋ก docker image ์์ฑํ๊ธฐ
4. ์์ฑํ image ๋ฅผ docker hub์ ์ฌ๋ฆฌ๊ธฐ
5. EC2์์ redis image์ spring(jar)image ๋ด๋ ค๋ฐ๊ธฐ
6. ๋ด๋ ค๋ฐ์ image๋ฅผ container๋ก ์คํํ๊ณ , EC2 ํฌํธ ์ด๊ธฐ
EC2์ ํ ๋ฒ๊ณผ docker ๋ฐ redis๋ฅผ ์ ํ ํ๋ ๋ฐฉ๋ฒ์ ์ด์ ๊ธ์์ ์ฐพ์๋ณผ ์ ์๋ค.
spring + docker ์ ํ
๋ก์ปฌ์ ๋์ปค๊ฐ ์ ํ ๋์ด์๋ค๊ณ ๊ฐ์ ํ๊ณ , redis๋ฅผ ์ต์ ์ผ๋ก ๋ด๋ ค๋ฐ๋๋ค.
docker pull redis
docker desktop์ ํตํด ํ์ธํ ์ ์๊ณ ,
docker images
๋ช ๋ น์ด๋ฅผ ํตํด์ ํ์ธ ํ ์ ์๋ค.
1.์์ redis๋ฅผ ๋ด๋ ค๋ฐ์๋ค๋ฉด ํด๋นํ๋ ๋๋ ํ ๋ฆฌ์ redis.conf ํ์ผ์ด ์์ฑ๋๋ค. ์์ฑ๋์ง ์์์๊ฒฝ์ฐ textํ์ผ ํ์์ผ๋ก ์์ฑํด๋ ๋ฌธ์ ์๋ค.
์์ฑ๋ confํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์๋ค.
# ์ฐ๊ฒฐ ๊ฐ๋ฅํ ๋คํธ์ํฌ(0.0.0.0 = Anywhere)
bind 0.0.0.0
# ์ฐ๊ฒฐ ํฌํธ
port 6379
# Master ๋
ธ๋์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ
requirepass ์ฌ์ฉํ ๋น๋ฐ๋ฒํธ์
๋ ฅ
# ์ต๋ ์ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋(์ง์ ํ์ง ์์ผ๋ฉด ์์คํ
์ ์ฒด ์ฉ๋)
maxmemory 2gb
# ์ค์ ๋ ์ต๋ ์ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ์ด๊ณผํ์๋ ์ฒ๋ฆฌ ๋ฐฉ์
# - noeviction : ์ฐ๊ธฐ ๋์์ ๋ํด error ๋ฐํ (Default)
# - volatile-lru : expire ๊ฐ ์ค์ ๋ key ๋ค์ค์์ LRU algorithm ์ ์ํด์ ์ ํ๋ key ์ ๊ฑฐ
# - allkeys-lru : ๋ชจ๋ key ๋ค ์ค LRU algorithm์ ์ํด์ ์ ํ๋ key ์ ๊ฑฐ
# - volatile-random : expire ๊ฐ ์ค์ ๋ key ๋ค ์ค ์์์ key ์ ๊ฑฐ
# - allkeys-random : ๋ชจ๋ key ๋ค ์ค ์์์ key ์ ๊ฑฐ
# - volatile-ttl : expire time(TTL)์ด ๊ฐ์ฅ ์ ๊ฒ ๋จ์ key ์ ๊ฑฐ (minor TTL)
maxmemory-policy volatile-ttl
# == RDB ๊ด๋ จ ์ค์ ==
# ์ ์ฅํ RDB ํ์ผ๋ช
dbfilename backup.rdb
# 15๋ถ ์์ ์ต์ 1๊ฐ ์ด์์ key๊ฐ ๋ณ๊ฒฝ ๋์์ ๋
save 900 1
# 5๋ถ ์์ ์ต์ 10๊ฐ ์ด์์ key๊ฐ ๋ณ๊ฒฝ ๋์์ ๋
save 300 10
# 60์ด ์์ ์ต์ 10000๊ฐ ์ด์์ key๊ฐ ๋ณ๊ฒฝ ๋์์ ๋
save 60 10000
# RDB ์ ์ฅ ์คํจ ์ write ๋ช
๋ น ์ฐจ๋จ ์ฌ๋ถ
stop-writes-on-bgsave-error no
# == AOF ๊ด๋ จ ์ค์ ==
# AOF ์ฌ์ฉ ์ฌ๋ถ
appendonly yes
# ์ ์ฅํ AOF ํ์ผ๋ช
appendfilename appendonly.aof
# ๋์คํฌ์ ๋๊ธฐํ ์ฒ๋ฆฌ ๋ฐฉ์
# - always : AOF ๊ฐ์ ์ถ๊ฐํ ๋๋ง๋ค fsync๋ฅผ ํธ์ถํด์ ๋์คํฌ์ ์ฐ๊ธฐ
# - everysec : ๋งค์ด๋ง๋ค fsync๋ฅผ ํธ์ถํด์ ๋์คํฌ์ ์ฐ๊ธฐ
# - no : OS๊ฐ ์ค์ sync๋ฅผ ํ ๋๊น์ง ๋ฐ๋ก ์ค์ ํ์ง ์์
appendfsync everysec
# == Replication ๊ด๋ จ ์ค์ ํ
์คํธ ==
# Slave Redis ์ค์
#์์์ฃผ์slaveof 127.0.0.1 6380
docker file๋ ์์ฑํ์ฌ ์ค๋ค.
FROM redis:latest
COPY redis.conf /์ ์ฅ๋๋ ํ ๋ฆฌ/redis.conf
CMD [ "redis-server", "/์ ์ฅ๋๋ ํ ๋ฆฌ/redis.conf" ]
EXPOSE 6379
docker build --platform linux/amd64 -t ์ด๋ฏธ์ง์ด๋ฆ:ํ๊ทธ ๋๋ ํ ๋ฆฌ
----
docker build --platform linux/amd64 -t springredis:linux .
dockerfile์ด ์๋ ๋๋ ํ ๋ฆฌ์์ ํด๋น ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
* --platform linux/amd64 ํ๊ทธ๋ ๋ณธ์ธ์ ec2ํ๊ฒฝ์ด ๋ฆฌ๋ ์ค64 ํ๊ฒฝ์ด๊ธฐ ๋๋ฌธ์ ์ถ๊ฐํ๋ค.
docker push xotjd794613/springredis:linux
------
docker push ๊ณ์ ๋ช
/์ด๋ฏธ์ง์ด๋ฆ:ํ๊ทธ
์ ๋ก๋๊น์ง ์๋ฃํ๋ค.
์ด์ ์ ๋ง๋ค์ด๋์๋ Spring(jar)์ด๋ฏธ์ง ์ ๋ฐฉ๊ธ pushํ redis์ด๋ฏธ์ง๋ฅผ ๋ฐ๋๋ค
docker pull xotjd794613/funfun:0.0.1-linux
docker pull xotjd794613/springredis:linux
--
docker pull ๊ณ์ ๋ช
/์ด๋ฏธ์ง์ด๋ฆ:ํ๊ทธ
docker images
๋ช ๋ น์ด๋ก ํ์ธ ํ ์ ์๋ค.
์ด๋ฏธ์ง๋ฅผ ์ปจํ ์ด๋๋ก ์คํํ์.
Spring ์ด๋ฏธ์ง ์คํ
sudo docker run -d -p 8000:8080 xotjd794613/funfun:0.0.1-linux
------
sudo docker run -d -p ํฌํธ ๊ณ์ ๋ช
/์ด๋ฏธ์ง๋ช
:ํ๊ทธ
redis ์ด๋ฏธ์ง ์คํ
docker run --name springredis -p 6379:6379 -v /home/ec2-user/redis:/data -d xotjd794613/springredis:linux --appendonly yes
----------
docker run --name ์ปจํ
์ด๋์ด๋ฆ -p ํฌํธ -v ๋ฐ์ดํฐ์ ์ฅํ ๋๋ ํ ๋ฆฌ:/data -d ๊ณ์ ๋ช
/์ด๋ฏธ์ง๋ช
:ํ๊ทธ --appendonly yes
'docker ps -a' ๋ช ๋ น์ด๋ก ์คํ์ค์ธ ๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ํ์ธ ํ ์ ์๋ค.
http://ec2์ฃผ์:ํฌํธ๋ฒํธ๋ก ์ ์์ ์ ์์ ์ผ๋ก spring๊ธฐ๋ฐ ํ์ด์ง์ redis๊ฐ ์ฐ๊ฒฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ง์ฝ, ํด๋น์ฃผ์๋ก ์ ์์ ์ ์์ด ์๋๊ฑฐ๋, redis๊ฐ ์ ์์ ์ผ๋ก ์คํ๋์ง ์๋๊ฒฝ์ฐ
2.1 ec2 redis ์ปจํ ์ด๋ ํฌํธ ํ์ธ
docker ps -a
๋ก redis ์ปจํ ์ด๋ ID ํ์ธ
docker inspect ์ปจํ
์ด๋ID
๋ช ๋ น์ด๋ก IP ํ์ธ
spring ํ๋ก์ ํธ์ ip ์ ๋ณด ์ถ๊ฐ