Docker Compose κΈ°λ° Edison μλΉμ€ μΈνλΌ κ΅¬μ±
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 μ΄κΈ° μ€μ
# 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-infracp .env.example .env
nano .env # μ€μ κ°μΌλ‘ μμ chmod +x init-ssl.sh
./init-ssl.sh your_email@example.comdocker compose up -d| Secret | μ€λͺ |
|---|---|
EC2_HOST |
EC2 νΌλΈλ¦ IP λλ λλ©μΈ |
EC2_USERNAME |
EC2 SSH μ¬μ©μ (λ³΄ν΅ ubuntu) |
EC2_SSH_KEY |
EC2 SSH νλΌμ΄λΉ ν€ |
ENV_FILE |
.env νμΌ λ΄μ© μ 체 (μλ μ°Έκ³ ) |
| Secret | μ€λͺ |
|---|---|
DOCKERHUB_USERNAME |
Docker Hub μ¬μ©μλͺ |
DOCKERHUB_TOKEN |
Docker Hub μ‘μΈμ€ ν ν° |
.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
- Infra λ ν¬ μμ±: μ΄ ν΄λ μ 체λ₯Ό μ λ ν¬λ‘ push
- Spring λ ν¬: Dockerfile, .github/workflows/deploy.yml μΆκ°
- AI λ ν¬: Dockerfile, .github/workflows/deploy.yml μΆκ°, /health μλν¬μΈνΈ μΆκ°
- 3κ° λ ν¬ λͺ¨λ:
EC2_HOST,EC2_USERNAME,EC2_SSH_KEY,ENV_FILE - Spring & AI λ ν¬:
DOCKERHUB_USERNAME,DOCKERHUB_TOKENμΆκ°
- μ EC2 μΈμ€ν΄μ€ μμ± (λλ κΈ°μ‘΄ κ² μ¬μ©)
-
setup-ec2.shμ€ν - Infra λ ν¬ clone
-
.envνμΌ μ€μ -
init-ssl.shμ€ν -
docker compose up -dμ€ν
- https://api.teamedison.xyz μ μ νμΈ
- https://ai.teamedison.xyz μ μ νμΈ
- Spring λ ν¬ push β μλ λ°°ν¬ νμΈ
- AI λ ν¬ push β μλ λ°°ν¬ νμΈ
- Spring λ ν¬:
mainλΈλμΉμ push β Docker Hub λΉλ β EC2 λ°°ν¬ - 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 -vCertbot 컨ν μ΄λκ° 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># μΈμ¦μ μν νμΈ
docker compose run --rm certbot certificates
# μΈμ¦μ μ¬λ°κΈ
./init-ssl.sh your_email@example.com# Redis μ μ ν
μ€νΈ
docker compose exec redis redis-cli -a <password> ping