Skip to content

🐳 Edison Docker Compose 기반 인프라 ꡬ성

Notifications You must be signed in to change notification settings

UMC-Edison/Edison-Infra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

18 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Edison Infrastructure

Docker Compose 기반 Edison μ„œλΉ„μŠ€ 인프라 ꡬ성

전체 ꡬ쑰 (3개 레포)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                            GitHub Repositories                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    Edison-Spring    β”‚     Edison-AI       β”‚       Edison-Infra          β”‚
β”‚    (Java μ½”λ“œ)       β”‚   (Python μ½”λ“œ)     β”‚    (Docker Compose λ“±)       β”‚
β”‚                     β”‚                     β”‚                             β”‚
β”‚  β”œβ”€ src/            β”‚  β”œβ”€ main.py         β”‚  β”œβ”€ docker-compose.yml      β”‚
β”‚  β”œβ”€ build.gradle    β”‚  β”œβ”€ requirements.txtβ”‚  β”œβ”€ nginx/nginx.conf        β”‚
β”‚  β”œβ”€ Dockerfile ──┐  β”‚  β”œβ”€ Dockerfile ──┐  β”‚  β”œβ”€ .env                    β”‚
β”‚  └─ .github/     β”‚  β”‚  └─ .github/     β”‚  β”‚  β”œβ”€ deploy.sh              β”‚
β”‚     workflows/   β”‚  β”‚     workflows/   β”‚  β”‚  └─ init-ssl.sh            β”‚
β”‚     deploy.yml   β”‚  β”‚     deploy.yml   β”‚  β”‚                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚                     β”‚                         β”‚
           β–Ό                     β–Ό                         β”‚
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
     β”‚Docker Hub β”‚         β”‚Docker Hub β”‚                   β”‚
     β”‚edison-    β”‚         β”‚edison-ai  β”‚                   β”‚
     β”‚spring:tag β”‚         β”‚:tag       β”‚                   β”‚
     β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜                   β”‚
           β”‚                     β”‚                         β”‚
           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                         β”‚
                      β–Ό                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                           EC2 Instance                                   β”‚
β”‚   /home/ubuntu/edison-infra/ (git clone)                                β”‚
β”‚                                                                          β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
β”‚   β”‚  Nginx  │─────►│   Spring    β”‚     β”‚     AI     β”‚                   β”‚
β”‚   β”‚ :80/443 β”‚      β”‚    :8080    β”‚     β”‚   :8000    β”‚                   β”‚
β”‚   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚
β”‚        β”‚                  β”‚                    β–²                        β”‚
β”‚        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                        β”‚
β”‚                           β–Ό                                             β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                     β”‚
β”‚   β”‚ Certbot β”‚      β”‚    Redis    β”‚                                     β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚    :6379    β”‚                                     β”‚
β”‚                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

배포 흐름

1. Spring 레포 push β†’ Docker Hub λΉŒλ“œ β†’ EC2μ—μ„œ deploy.sh spring μ‹€ν–‰
2. AI 레포 push     β†’ Docker Hub λΉŒλ“œ β†’ EC2μ—μ„œ deploy.sh ai μ‹€ν–‰  
3. Infra 레포 push  β†’ EC2μ—μ„œ git pull β†’ nginx reload

λ ˆν¬μ§€ν† λ¦¬ ꡬ쑰

edison-infra/
β”œβ”€β”€ .github/
β”‚   └── workflows/
β”‚       └── deploy.yml      # Infra 레포 자체 배포
β”œβ”€β”€ docker-compose.yml      # 메인 컴포즈 파일
β”œβ”€β”€ nginx/
β”‚   └── nginx.conf          # Nginx μ„€μ •
β”œβ”€β”€ certbot/                # SSL μΈμ¦μ„œ (μžλ™ 생성)
β”‚   β”œβ”€β”€ conf/
β”‚   └── www/
β”œβ”€β”€ .env.example            # ν™˜κ²½λ³€μˆ˜ ν…œν”Œλ¦Ώ
β”œβ”€β”€ .env                    # μ‹€μ œ ν™˜κ²½λ³€μˆ˜ (gitignore)
β”œβ”€β”€ init-ssl.sh             # SSL μ΄ˆκΈ°ν™” 슀크립트
β”œβ”€β”€ deploy.sh               # 배포 슀크립트
└── setup-ec2.sh            # EC2 초기 μ„€μ •

초기 μ„€μ •

1. EC2 μ„€μ •

# EC2에 SSH 접속 ν›„
curl -fsSL https://raw.githubusercontent.com/your-org/edison-infra/main/setup-ec2.sh | bash

# λ‘œκ·Έμ•„μ›ƒ ν›„ 재둜그인 (docker κ·Έλ£Ή 적용)
exit
ssh ...

# 인프라 레포 클둠
git clone https://github.com/your-org/edison-infra.git /home/ubuntu/edison-infra
cd /home/ubuntu/edison-infra

2. ν™˜κ²½λ³€μˆ˜ μ„€μ •

cp .env.example .env
nano .env  # μ‹€μ œ κ°’μœΌλ‘œ μˆ˜μ •

3. SSL μΈμ¦μ„œ λ°œκΈ‰

chmod +x init-ssl.sh
./init-ssl.sh your_email@example.com

4. μ„œλΉ„μŠ€ μ‹œμž‘

docker compose up -d

GitHub Secrets μ„€μ •

3개 레포 곡톡 (Spring, AI, Infra λͺ¨λ‘ λ™μΌν•˜κ²Œ 등둝)

Secret μ„€λͺ…
EC2_HOST EC2 퍼블릭 IP λ˜λŠ” 도메인
EC2_USERNAME EC2 SSH μ‚¬μš©μž (보톡 ubuntu)
EC2_SSH_KEY EC2 SSH 프라이빗 ν‚€
ENV_FILE .env 파일 λ‚΄μš© 전체 (μ•„λž˜ μ°Έκ³ )

Spring & AI 레포 μΆ”κ°€

Secret μ„€λͺ…
DOCKERHUB_USERNAME Docker Hub μ‚¬μš©μžλͺ…
DOCKERHUB_TOKEN Docker Hub μ•‘μ„ΈμŠ€ 토큰

ENV_FILE μ‹œν¬λ¦Ώ κ°’ μ˜ˆμ‹œ

.env.example λ‚΄μš©μ„ λ³΅μ‚¬ν•΄μ„œ μ‹€μ œ κ°’μœΌλ‘œ μ±„μš΄ ν›„ ν†΅μ§Έλ‘œ 등둝:

DOCKERHUB_USERNAME=your_dockerhub_username
SPRING_TAG=latest
AI_TAG=latest
RDS_URL=jdbc:mysql://your-rds-endpoint:3306/edison
RDS_USERNAME=your_db_username
RDS_PASSWORD=your_db_password
REDIS_PASSWORD=your_redis_password
JWT_SECRET=your_jwt_secret_key
JWT_ACCESS_EXPIRATION=3600000
JWT_REFRESH_EXPIRATION=604800000
GOOGLE_CLIENT_ID=your_google_client_id
OPENAI_KEY=your_openai_api_key
AWS_ACCESS_KEY=your_aws_access_key
AWS_SECRET_KEY=your_aws_secret_key
AWS_S3_BUCKET=your_s3_bucket_name

적용 체크리슀트

Phase 1: 레포 μ€€λΉ„

  • Infra 레포 생성: 이 폴더 전체λ₯Ό μƒˆ 레포둜 push
  • Spring 레포: Dockerfile, .github/workflows/deploy.yml μΆ”κ°€
  • AI 레포: Dockerfile, .github/workflows/deploy.yml μΆ”κ°€, /health μ—”λ“œν¬μΈνŠΈ μΆ”κ°€

Phase 2: GitHub Secrets 등둝

  • 3개 레포 λͺ¨λ‘: EC2_HOST, EC2_USERNAME, EC2_SSH_KEY, ENV_FILE
  • Spring & AI 레포: DOCKERHUB_USERNAME, DOCKERHUB_TOKEN μΆ”κ°€

Phase 3: EC2 μ„€μ •

  • μƒˆ EC2 μΈμŠ€ν„΄μŠ€ 생성 (λ˜λŠ” κΈ°μ‘΄ 것 μ‚¬μš©)
  • setup-ec2.sh μ‹€ν–‰
  • Infra 레포 clone
  • .env 파일 μ„€μ •
  • init-ssl.sh μ‹€ν–‰
  • docker compose up -d μ‹€ν–‰

Phase 4: 검증

배포 ν”„λ‘œμ„ΈμŠ€

μžλ™ 배포 (GitHub Actions)

  1. Spring 레포: main λΈŒλžœμΉ˜μ— push β†’ Docker Hub λΉŒλ“œ β†’ EC2 배포
  2. AI 레포: main λΈŒλžœμΉ˜μ— push β†’ Docker Hub λΉŒλ“œ β†’ EC2 배포

μˆ˜λ™ 배포

# Spring만 배포
./deploy.sh spring <tag>

# AI만 배포
./deploy.sh ai <tag>

# 전체 μž¬μ‹œμž‘
./deploy.sh all

운영 λͺ…λ Ήμ–΄

# 둜그 확인
docker compose logs -f spring-app
docker compose logs -f ai-server
docker compose logs -f nginx

# μ„œλΉ„μŠ€ μƒνƒœ
docker compose ps

# μ„œλΉ„μŠ€ μž¬μ‹œμž‘
docker compose restart spring-app

# 전체 쀑지
docker compose down

# λ³Όλ₯¨κΉŒμ§€ μ‚­μ œ (주의!)
docker compose down -v

SSL μΈμ¦μ„œ κ°±μ‹ 

Certbot μ»¨ν…Œμ΄λ„ˆκ°€ 12μ‹œκ°„λ§ˆλ‹€ μžλ™μœΌλ‘œ 갱신을 μ‹œλ„ν•©λ‹ˆλ‹€.

μˆ˜λ™ κ°±μ‹ :

docker compose run --rm certbot renew
docker compose restart nginx

도메인 ꡬ성

도메인 μ„œλΉ„μŠ€ 포트
api.teamedison.xyz Spring Boot 8080
ai.teamedison.xyz FastAPI 8000

문제 ν•΄κ²°

μ»¨ν…Œμ΄λ„ˆκ°€ μ‹œμž‘λ˜μ§€ μ•Šμ„ λ•Œ

docker compose logs <service-name>

SSL μΈμ¦μ„œ 문제

# μΈμ¦μ„œ μƒνƒœ 확인
docker compose run --rm certbot certificates

# μΈμ¦μ„œ μž¬λ°œκΈ‰
./init-ssl.sh your_email@example.com

Redis μ—°κ²° 문제

# Redis 접속 ν…ŒμŠ€νŠΈ
docker compose exec redis redis-cli -a <password> ping

About

🐳 Edison Docker Compose 기반 인프라 ꡬ성

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages