# ๐Ÿณ Portainer๋กœ Stock Oracle ๋ฐฐํฌํ•˜๊ธฐ ## ๐Ÿ“‹ ์‚ฌ์ „ ์ค€๋น„์‚ฌํ•ญ ### 1. ์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ - Docker Engine 20.10+ - Docker Compose 2.0+ - ์ตœ์†Œ 4GB RAM - ์ตœ์†Œ 10GB ๋””์Šคํฌ ๊ณต๊ฐ„ ### 2. ํ•„์ˆ˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • ```bash # SEC API ์ด๋ฉ”์ผ (ํ•„์ˆ˜) export SEC_EMAIL="your-email@example.com" # Alpha Vantage API Key (์„ ํƒ์‚ฌํ•ญ) export ALPHA_VANTAGE_API_KEY="your_key_here" ``` ## ๐Ÿš€ ๋‹จ๊ณ„๋ณ„ ๋ฐฐํฌ ๊ฐ€์ด๋“œ ### Step 1: Portainer ์„ค์น˜ ```bash # Portainer ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ./portainer/install-portainer.sh # ๋˜๋Š” ์ˆ˜๋™ ์„ค์น˜ docker volume create portainer_data docker run -d \ -p 8000:8000 \ -p 9443:9443 \ --name portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest ``` ### Step 2: Portainer ์›น UI ์ ‘์† 1. ๋ธŒ๋ผ์šฐ์ €์—์„œ `https://localhost:9443` ์ ‘์† 2. ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ (username: admin, password: ์„ค์ •) 3. Local Docker ํ™˜๊ฒฝ ์„ ํƒ ### Step 3: SSL ์ธ์ฆ์„œ ์ƒ์„ฑ (๊ฐœ๋ฐœ์šฉ) ```bash ./portainer/generate-ssl.sh ``` ### Step 4: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ ์„ค์ • ```bash # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ ๋ณต์‚ฌ cp portainer/.env.portainer .env # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŽธ์ง‘ nano .env # ๋ฐ˜๋“œ์‹œ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฐ’๋“ค: # - SEC_EMAIL: ์‹ค์ œ ์ด๋ฉ”์ผ ์ฃผ์†Œ # - POSTGRES_PASSWORD: ๊ฐ•๋ ฅํ•œ ํŒจ์Šค์›Œ๋“œ # - REDIS_PASSWORD: Redis ํŒจ์Šค์›Œ๋“œ ``` ### Step 5: Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ```bash # API ์ด๋ฏธ์ง€ ๋นŒ๋“œ docker build -t stock-oracle-api:latest . # ๋˜๋Š” Portainer์—์„œ ๋นŒ๋“œ ``` ## ๐ŸŽฏ Portainer๋ฅผ ํ†ตํ•œ ์Šคํƒ ๋ฐฐํฌ ### ๋ฐฉ๋ฒ• 1: Portainer Web UI ์‚ฌ์šฉ 1. **์Šคํƒ ๋ฉ”๋‰ด๋กœ ์ด๋™** - Portainer ๋Œ€์‹œ๋ณด๋“œ โ†’ Stacks โ†’ Add stack 2. **์Šคํƒ ์ •๋ณด ์ž…๋ ฅ** - Name: `stock-oracle` - Build method: `Git Repository` ๋˜๋Š” `Upload` 3. **Git Repository ๋ฐฉ๋ฒ• (๊ถŒ์žฅ)** ``` Repository URL: https://github.com/your-repo/stock-oracle Repository reference: main Compose path: portainer/docker-compose.portainer.yml ``` 4. **ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •** ``` SEC_EMAIL=your-email@example.com POSTGRES_PASSWORD=your_secure_password REDIS_PASSWORD=your_redis_password ``` 5. **Deploy the stack** ํด๋ฆญ ### ๋ฐฉ๋ฒ• 2: Docker Compose ์ง์ ‘ ์‚ฌ์šฉ ```bash # ์Šคํƒ ๋ฐฐํฌ docker-compose -f portainer/docker-compose.portainer.yml up -d # ์ƒํƒœ ํ™•์ธ docker-compose -f portainer/docker-compose.portainer.yml ps ``` ## ๐Ÿ” ๋ฐฐํฌ ํ™•์ธ ### 1. ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ Portainer Dashboard โ†’ Containers์—์„œ ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ: - โœ… stock-oracle-postgres - โœ… stock-oracle-redis - โœ… stock-oracle-api - โœ… stock-oracle-nginx ### 2. API ์ ‘์† ํ…Œ์ŠคํŠธ ```bash # HTTP (๋ฆฌ๋‹ค์ด๋ ‰ํŠธ) curl http://localhost/docs # HTTPS curl -k https://localhost/docs # API ํ…Œ์ŠคํŠธ curl -k https://localhost/api/v1/financial/data \ -H "Content-Type: application/json" \ -d '{"ticker":"AAPL","start_date":"2024-01-01","end_date":"2024-12-31","period_type":"quarterly"}' ``` ### 3. ์ ‘์† URL - **API ๋ฌธ์„œ**: https://localhost/docs - **API ์—”๋“œํฌ์ธํŠธ**: https://localhost/api/v1/ - **Portainer**: https://localhost:9443 ## ๐Ÿ› ๏ธ ๊ด€๋ฆฌ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ### Portainer์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ 1. **์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ** - ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘/์ค‘์ง€/์žฌ์‹œ์ž‘ - ๋กœ๊ทธ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง - ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ 2. **๋ณผ๋ฅจ ๊ด€๋ฆฌ** - ๋ฐ์ดํ„ฐ ๋ฐฑ์—…/๋ณต์› - ๋ณผ๋ฅจ ํฌ๊ธฐ ๋ชจ๋‹ˆํ„ฐ๋ง 3. **๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ** - ๋„คํŠธ์›Œํฌ ์„ค์ • ํ™•์ธ - ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹  ๊ด€๋ฆฌ 4. **์Šคํƒ ์—…๋ฐ์ดํŠธ** - Git pull์„ ํ†ตํ•œ ์ž๋™ ์—…๋ฐ์ดํŠธ - Rolling update ์ง€์› ### ์œ ์šฉํ•œ Portainer ๋ช…๋ น์–ด ```bash # ์Šคํƒ ์žฌ๋ฐฐํฌ curl -X POST "http://localhost:9000/api/stacks/1/git/redeploy" \ -H "X-API-Key: your-api-key" # ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ curl -X POST "http://localhost:9000/api/endpoints/1/docker/containers/container-id/restart" \ -H "X-API-Key: your-api-key" ``` ## ๐Ÿ”ง ๋ฌธ์ œ ํ•ด๊ฒฐ ### ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค 1. **ํฌํŠธ ์ถฉ๋Œ** ```bash # ํฌํŠธ ์‚ฌ์šฉ ํ™•์ธ netstat -tlnp | grep :18001 # ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ํฌํŠธ ๋ณ€๊ฒฝ API_PORT=18002 ``` 2. **๊ถŒํ•œ ๋ฌธ์ œ** ```bash # Docker ์†Œ์ผ“ ๊ถŒํ•œ sudo chmod 666 /var/run/docker.sock # SSL ์ธ์ฆ์„œ ๊ถŒํ•œ chmod 600 portainer/nginx/ssl/key.pem ``` 3. **๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ** ```bash # ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ docker stats # ๋ถˆํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ •๋ฆฌ docker system prune -a ``` ### ๋กœ๊ทธ ํ™•์ธ ๋ฐฉ๋ฒ• ```bash # Portainer์—์„œ ๋กœ๊ทธ ํ™•์ธ Containers โ†’ ์ปจํ…Œ์ด๋„ˆ ์„ ํƒ โ†’ Logs # ๋ช…๋ น์–ด๋กœ ๋กœ๊ทธ ํ™•์ธ docker logs stock-oracle-api docker logs stock-oracle-postgres docker logs stock-oracle-nginx ``` ## ๐Ÿ”„ ์—…๋ฐ์ดํŠธ ๋ฐ ๋ฐฑ์—… ### ์—…๋ฐ์ดํŠธ ๋ฐฉ๋ฒ• 1. Portainer โ†’ Stacks โ†’ stock-oracle โ†’ Editor 2. Git Repository ๋ฐฉ๋ฒ•: **Pull and redeploy** ํด๋ฆญ 3. ๋˜๋Š” ์ƒˆ ์ด๋ฏธ์ง€๋กœ ์ˆ˜๋™ ์—…๋ฐ์ดํŠธ ### ๋ฐฑ์—… ๋ฐฉ๋ฒ• ```bash # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—… docker exec stock-oracle-postgres pg_dump \ -U stock_oracle_user stock_oracle > backup.sql # ๋ณผ๋ฅจ ๋ฐฑ์—… docker run --rm -v stock-oracle-postgres-data:/data \ -v $(pwd):/backup alpine tar czf /backup/postgres-backup.tar.gz /data ``` ## ๐ŸŽ‰ ๋ฐฐํฌ ์™„๋ฃŒ! ๋ฐฐํฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด: - ๐Ÿ“Š **API ๋ฌธ์„œ**: https://localhost/docs - ๐Ÿ”ง **Portainer ๊ด€๋ฆฌ**: https://localhost:9443 - ๐Ÿงช **ํ…Œ์ŠคํŠธ ์‹คํ–‰**: `python tests/run_all_tests.py` ### ๋‹ค์Œ ๋‹จ๊ณ„ 1. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” Let's Encrypt SSL ์ธ์ฆ์„œ ์‚ฌ์šฉ 2. ๋„๋ฉ”์ธ ์„ค์ • ๋ฐ DNS ๊ตฌ์„ฑ 3. ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ์—ฐ๋™ 4. ์ž๋™ ๋ฐฑ์—… ์Šค์ผ€์ค„ ์„ค์ •