1. ๋ฐฐํฌ ์๋ํ๋ฅผ ๊ตฌ์ถํ๊ฒ ๋ ๊ณ๊ธฐ
ํ์ฌ ๊ต๋ด ์๋ฒ์ค์ ์ด์์๋ฒ๊ฐ ๊ตฌ์ถ๋์ด ์๊ณ ,
๊ต๋ด๋ง ์ ์ฑ
์ ๋ฐ๋ผ ์ธ๋ถ ์ก์ธ์ค ํฌํธ๋ 80, 443 2๊ฐ๋ง ์ฌ์ฉํ ์ ์์๋ค.
์ด๋ฏธ 80, 443์ ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ๋ฅผ ์ํด ์ฌ์ฉํ๊ณ ์๋ค.
๋ฐ๋ผ์ ๊ต๋ด๋ง์ ์ ์ํด ์์ ๋๋ง 22๋ฒ ํฌํธ๋ก ssh ์ ์์ ํตํด ๋ณ๊ฒฝ์ฌํญ์ ์ด์์๋ฒ์ ๋ฐฐํฌํ ์ ์์๋ค.
์ด๋ ๋ฏ ๊ต๋ด๋ง์ ์ ์ํด์ผ๋ง ํ๋ค๋ ๋ฌธ์ ๋ ์์์ง๋ง,
๊ฒฐ๊ตญ์๋ ์๋์ผ๋ก ๋ฐฐํฌํ๋ค ๋ณด๋ ๋ช
๋ น์ด๋ฅผ ์๋ชป ์
๋ ฅํ๋ ๊ฒฝ์ฐ๋ ์์๊ณ ๋ฐฐํฌํ ๋๋ง๋ค ๋ฐ๋ณต๋๋ ์์
์ ์งํํ๋ค ๋ณด๋ ๋ฐฐํฌ ์๋ํ๊ฐ ์ ๋ง ์ ์คํ๋ค.
2. ๋ฐฐํฌ ์๋ํ ํ๋ก์ฐ
์ฐ์ Jenkins๋ฅผ ์ด์ฉํ์ฌ ๋ฐฐํฌ ์๋ํ๋ฅผ ๊ตฌ์ถํ๊ณ ์ ํ๋ค.
- PR์ด Master ๋ธ๋์น๋ก Merge๋๋ฉด Github WebHook์ด Trigger ๋๋ค.
- ํด๋น Gtihub Webhook์ ํตํด ์๋์ Jenkins์ ๋ฐฐํฌ PipeLine์ด ์คํ๋๋ค.
- Github๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋ณต์ฌํด ์จ๋ค.
- ๋น๋๋ฅผ ์งํํ๋ค.
- docker build๋ฅผ ํตํด image๋ฅผ ์์ฑํ๋ค.
- ECR๋ก ํด๋น docker image๋ฅผ push ํ๋ค.
- EC2์ ๋ฑ๋กํด ๋์ deploy.sh ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ํํ๋ค.
์ด๋ฒ์ ๋ฐฐํฌ ์๋ํ๋ฅผ ๊ตฌ์ถํ๋ฉด์ ์ ๋ง ๋ง์ ์ค๋ฅ๋ฅผ ์ ํ๊ณ , ํ๋์ ์ค๋ฅ๋ฅผ ์ก์ง ๋ชปํด์ ์ดํ ๋์ ๊ณ ์ํ๊ธฐ๋ ํ๋ค.
3. (ํธ๋ฌ๋ธ ์ํ 1) .gitignore ์ฒ๋ฆฌํ ๋น๋ฐ์ ๋ณด๋ฅผ ํฌํจํ yml ์ค์ ํ์ผ
DB์ ๋น๋ฐ๋ฒํธ๋ ํ ํฐ์ key ๋ฑ ์ฌ๋ฌ ์ํธ์ ๋ณด๋ฅผ ํฌํจํ yml ํ์ผ๋ค์ ์ด๋ฏธ .gitignore ์ค์ ์ ํตํด github์๋ ์ฌ๋ผ๊ฐ ์์ง ์์ ์ํ์ด๋ค.
๋ฐ๋ผ์, Jenkins์์ ๋น๋๋ฅผ ์งํํ ๋ ์ด๋ป๊ฒ๋ ํด๋น ์ ๋ณด๋ค์ ์ฝ์
ํด์ค์ผ ํ๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์๋ค.
- private repo๋ก ๋ง๋ ๋ค.
- ํ๊ฒฝ๋ณ์๋ฅผ ์ด์ฉํ๊ณ .gitignore ํ์ง ์๋๋ค.
- ์ํธํ๋ ๋น๋ฐ์ ๋ณด๋ฅผ ymlํ์ผ์ ๋ฃ๊ณ .gitignore๋ฅผ ํ์ง ์๋๋ค.
- git submodule์ ์ด์ฉํ์ฌ public repo์ ์ค์ ์ ๋ณด๋ค์ด ๋ด๊ธด private sub repo๋ฅผ ์ถ๊ฐํ๋ค.
- Config Server๋ฅผ ์ด์ฉํ๋ค.
์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ง๋ง, ๋๋ 4๋ฒ ๋ฐฉ๋ฒ์ ์ ํํ์๋ค.
Git์ submodule์ด๋ผ๋ ๊ฐ๋ ์ด ์๋ค๋ ๊ฒ์ ์ด๋ฒ ๊ธฐํ์ ์๊ฒ ๋์๊ณ , application-db.yml๊ณผ ๊ฐ์ด ๋น๋ฐ์ ๋ณด๊ฐ ๋ด๊ธด ํ์ผ์ private repo์ ์ ์ฅํ๊ณ ์ด submodule์ ๋ฐฐํฌํ๋ ค๋ public repo์ ์ถ๊ฐํด ์ฃผ์๋ค.
ํด๋น ๋ฐฉ์์ ์ด์ฉํ๊ธฐ ์ํด์๋ ์ฐ์ Github access token์ Jenkins Credentials์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๊ณ ์๋์ ๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ผ ํ๋ค.
checkout scmGit(
branches: [[name: 'master']],
extensions: [submodule(parentCredentials: true,reference: '', trackingSubmodules: true)],
userRemoteConfigs: [[credentialsId: 'access token credentials id', url: 'https://github.com/{๋ฐฐํฌํ๋ ค๋repo}']]
)
4. (ํธ๋ฌ๋ธ ์ํ 2) Jenkins ๋ด๋ถ์์ docker๊ฐ ์คํ๋์ง ์์
๋๋ Jenkins๋ฅผ Docker ์ปจํ
์ด๋ ํ๊ฒฝ์ผ๋ก ์คํํ์๋ค.
๋ํ, ํ์ดํ๋ผ์ธ ๋ด์ docker build, push ๋ฑ์ ๋ช
๋ น์ ์คํํ๋ ์คํฌ๋ฆฝํธ๊ฐ ์กด์ฌํ์ง๋ง "docker not found" ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก๋ Jenkins ์ปจํ
์ด๋์ docker.sock์ Host์ docker.sock์ ๋ง์ดํธ ํด์ฃผ์ง ์์์ ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค.
Jenkins๋ฅผ Docker ์ปจํ
์ด๋ ํ๊ฒฝ์ผ๋ก ์คํํ๋ฉด ์ปจํ
์ด๋ ๋ด๋ถ์์ Host์ Docker๋ฅผ ์ด์ฉํ์ฌ ์์
์ ํด์ผ ํ๋ค.
ํ์ง๋ง, ๊ทธ๊ฒ Host์ ์ฐ๊ฒฐ๋์ด ์์ง ์์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด์๋ค.
docker.sock(Docker Socket)์ด๋ ๋์ปค ๋ฐ๋ชฌ์ด ๊ธฐ๋ณธ์ผ๋ก Listen ํ๊ณ ์๋ ์ ๋์ค ์์ผ์ด๋ค. ๊ฒฐ๊ตญ ์ปจํ ์ด๋ ๋ด๋ถ์์ ๋ฐ๋ชฌ๊ณผ ์ํธ์์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ ์ ํ๋ค.
5. (ํธ๋ฌ๋ธ ์ํ 3) Jenkins๋ฅผ ๊ตฌ๋ํ๋ EC2 ์๋ฒ์ ๊ณ์๋ Down
Jenkins๋ฅผ ๊ตฌ๋ ์ค์ธ ์๋ฒ๋ ํ๋ฆฌํฐ์ด๋ก ๊ตฌ์ฑํ์ฌ์ ์ฑ๋ฅ์ด ๋งค์ฐ ๋ฎ๋ค. RAM๋ 1GB์ฌ์ Jenkins์ ์์
์ ์ํํ๊ธฐ๋ ๋ฌด๋ฆฌ๊ฐ ์๋ค.
์์
์ ์ํํ๊ฒ ์ํํ๊ธฐ ์ํด์๋ Swap ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
์ด๊ฑธ ๋ชฐ๋์ ๋ ์ด๋ป๊ฒ ํด์ผ ํ๋ ์ฐธ ๋๊ฐํ์๋ค. ์ธ์คํด์ค์ ์ ์ํด์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
sudo fallocate -l 1.5G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
6. (ํธ๋ฌ๋ธ ์ํ 4) No basic auth credentials Error
ํด๋น ์๋ฌ ๋๋ฌธ์ ๊ฑฐ์ ์ดํ ๋์ ๊ณ ์ํ ๊ธฐ์ต์ด ์๋ค.
aws configure ๋ช
๋ น์ ํตํด ์ ๋ณด๋ฅผ ๋ฑ๋กํ๊ณ
aws ecr get-login-password --region ap-northeast-2 | docker login -u AWS --password-stdin{๊ณ์ ๋ฒํธ}.dkr.ecr.ap-northeast-2.amazonaws.com ๋ช
๋ น์ ํตํด ์ธ์ฆ์ฝ๋๋ฅผ ๊ฐฑ์ ํ์์์๋ ๊ณ์ํด์ ํด๋น ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค.
์ ๋ง ํฌ๊ธฐํ ๊น ์์ญ ๋ฒ ๊ณ ๋ฏผํ๋ค๊ฐ ์๊น์์๋ผ๋ ๊ณ์ ์ด๊ฒ์ ๊ฒ ๋ณ๊ฒฝํด ๋ณด๋ฉด์ ์์ ํ๋ค๊ฐ
deploy.sh ์คํฌ๋ฆฝํธ ๋ด์ sudo docker compose up -d ๋ช
๋ น์์ sudo๋ฅผ ์ญ์ ํด ๋ณด๋ ์๋์๋ค.
๋๋ฌผ์ด ํ ๋์๋ค.. ์ sudo๋ฅผ ์ง์ ์ ๋ ์๋๋์ง ์ฌ์ค ์ดํด๊ฐ ์ ๊ฐ์ง๋ ์๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ง๋ง, ํด๋น ๋ถ๋ถ์ ๋ํด ๊ธฐ์ ๋ถ์ฑ๋ฅผ ๋ ์์ ๊ฒ ๊ฐ์ ๋ง์์ด ๋ฌด๊ฒ๋ค.
ํ๊ธฐ
๋ฐฐํฌ์๋ํ๋ฅผ ๊ฒฐ๊ตญ 3์ผ ๋ง์ ๊ตฌ์ถํ๊ฒ ๋์๋ค.
์์ ์์ฑํ ํธ๋ฌ๋ธ ์ํ ์ผ์ด์ค ์ด์ธ์๋ ์ ๋ง ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ๊ทธ๋ฅ ํ์ง ๋ง๊น๋ผ๋ ๊ณ ๋ฏผ์ ๊ณ์ํ์ง๋ง ์๊ฐ์ ์์ ๋ฃ๋ ๋งํผ ์๋ฌ๋ ํ๋์ฉ ์ง์์ ธ ๋๊ฐ๋ค. ๋ฐฐํฌ ์๋ํ๋ผ๋ ๊ฒ ์ ๋ง ํฐ ์์ ์ฒ๋ผ ๋๊ปด์ก์๋๋ฐ, ์ด๋ ๊ฒ ๊ตฌ์ถํ๊ณ ๋๋ ํ ๋จ๊ณ ์ฑ์ฅํ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
๊ฒฐ๊ตญ Jenkins๋ผ๋ ๋๊ตฌ๋ฅผ ์ด์ฉํ ๊ฒ๋ฟ์ด์ง๋ง 3์ผ ๋์ "์ด๊ฑฐ ํ๋ ์ ๋๋ก ๋ชปํ๋"๋ผ๋ ์๊ฐ์ ์ ๋ง ํ๋ค์๋ค.
์๊ฐ๋ณด๋ค ๋ด ์ผ์ด์ค์ ๋ง๋ ์ฐธ๊ณ ์๋ฃ๋ ๋ณ๋ก ์์๊ณ , ๊ด๋ จ๋ ์ฑ
๊ณผ StackOverFlow๋ ์ ๋ถ ๋ค์ ธ๋ณด๊ณ ๋์์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
๋ฌด์์ ์๋ฌ๋ฅผ ๋ณต์ฌํด์ ๊ฒ์์ฐฝ์ ๋ถ์ฌ ๋ฃ๊ธฐ ํด์ ํด๊ฒฐํ ๊ฒฝ์ฐ๋ ๋ฌผ๋ก ์์์ง๋ง, ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ธ์ง๋ฅผ ๋จผ์ ์๊ฐํด ๋ณด๊ณ ๊ฒ์ํ์์ ๋ ๋ฌธ์ ํด๊ฒฐ ์๋๊ฐ ๋ ๋น ๋ฆ์ ๋๊ผ๋ค.
์ด์ ์๋์ผ๋ก ๋ฐฐํฌํ์ง ์๊ณ ์๋์ผ๋ก ๋ฐฐํฌํ ์ ์๊ฒ ๋์ด ๋์ฑ ๊ฐ๋ฐ ํ๊ฒฝ์ด ์ธ๋ จ๋์๋ค.
๋ฉฐ์น ์ ์๋ ๊ฐ๋ฐ์๋ฒ๋ฅผ Cloud ํ๊ฒฝ์ผ๋ก ์ฎ๊ธฐ๋ ์์
์ ์งํํ์๋๋ฐ, ์ด๋ฒ์๋ ๋ฐฐํฌ์๋ํ๊น์ง ๊ตฌ์ถํ์ฌ ์ ์ ๋ ํ๊ฒฝ์ ๋ฐ์ ์ํค๋ ๊ฒ์ ๋ํด ์ฑ์ทจ๊ฐ์ด ํ์คํ ์๋ค.
๋ค์์๋ ECS๋ก ๋ฐฐํฌ ํ๊ฒฝ์ ๋ณ๊ฒฝํ๊ณ ๊ทธ์ ๋ํด script๋ฅผ ๋ณ๊ฒฝํด ๋ด์ผ๊ฒ ๋ค.
'๐จโ๐ฉโ๐งโ๐ฆ Project > ๐บ KIOSEK' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Redis๋ฅผ ์ด์ฉํด์ ํ ํฐ ์ฌ๋ฐ๊ธ ๊ธฐ๋ฅ ์ฑ๋ฅ ์ต์ ํ (0) | 2023.08.21 |
---|---|
Index๋ฅผ ์ด์ฉํ์ฌ ์กฐํ ์ฟผ๋ฆฌ 1374% ์ฑ๋ฅ ํฅ์๊ธฐ (with MySQL) (0) | 2023.08.16 |
๊ฐ๋ฐ ์๋ฒ AWS ํด๋ผ์ฐ๋ ์๋น์ค๋ก ์ด์ฃผ๊ธฐ (0) | 2023.07.31 |
ํ๋ก์ ํธ ํ๊ณ (0) | 2023.07.13 |
๋จ์ ํ ์คํธ, ํตํฉ ํ ์คํธ์ ๋ํ ๋ฐฉํฅ ์ก๊ธฐ (0) | 2023.05.16 |