From 1818f0229c55a86775d97c19cad361da0a21a5f1 Mon Sep 17 00:00:00 2001 From: AutonetSellCar Deploy Date: Thu, 1 Jan 2026 10:03:46 +0900 Subject: [PATCH] Add DEPLOYMENT.md guide for deployment and DB migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Document server structure and deployment flow - Add DB schema change checklist (SQLite ALTER TABLE) - Include common troubleshooting and rollback commands - Reference in CLAUDE.md for new sessions ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- CLAUDE.md | 4 ++ DEPLOYMENT.md | 191 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 195 insertions(+) create mode 100644 DEPLOYMENT.md diff --git a/CLAUDE.md b/CLAUDE.md index d7d33f5..bde5b6e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,6 +2,10 @@ ์ด ๋ฌธ์„œ๋Š” Claude Code ์„ธ์…˜์—์„œ ๋ฐ˜๋“œ์‹œ ์ฝ๊ณ  ์ฐธ๊ณ ํ•ด์•ผ ํ•˜๋Š” ์ค‘์š”ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค. +> **๋ฐฐํฌ ์‹œ ๋ฐ˜๋“œ์‹œ [DEPLOYMENT.md](./DEPLOYMENT.md)๋„ ํ•จ๊ป˜ ํ™•์ธํ•˜์„ธ์š”!** +> - DB ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‹œ ์ˆ˜๋™์œผ๋กœ ALTER TABLE ํ•„์š” +> - ๋ฐฐํฌ ๋ช…๋ น์–ด ๋ฐ ๋กค๋ฐฑ ๋ฐฉ๋ฒ• ์•ˆ๋‚ด + --- ## 1. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 0000000..bc1f74a --- /dev/null +++ b/DEPLOYMENT.md @@ -0,0 +1,191 @@ +# AutonetSellCar.com ๋ฐฐํฌ ๊ฐ€์ด๋“œ + +## ์„œ๋ฒ„ ๊ตฌ์„ฑ + +``` +server5 (์ง‘ Win11) + โ†“ Remote Desktop +server4 (ํšŒ์‚ฌ Win11, ๊ฐœ๋ฐœ์„œ๋ฒ„) + โ†“ SSH / Git Push +server1 (192.168.0.201) - NPM (Nginx Proxy Manager) +server2 (192.168.0.202) - ์šด์˜์„œ๋ฒ„ (Docker) +server3 (192.168.0.203) - grantech.kr +``` + +## ๋ฐฐํฌ ํ๋ฆ„ + +``` +[server4 ๊ฐœ๋ฐœ] + โ”‚ + โ–ผ git push staging main +[server2 ์Šคํ…Œ์ด์ง• ์ž๋™ ๋ฐฐํฌ] + โ”‚ + โ–ผ ssh server2 "/opt/autonet/scripts/deploy.sh promote" +[server2 ์šด์˜ ๋ฐฐํฌ] +``` + +--- + +## ์ผ๋ฐ˜ ๋ฐฐํฌ (์ฝ”๋“œ๋งŒ ๋ณ€๊ฒฝ) + +```bash +# 1. ์ปค๋ฐ‹ +git add -A && git commit -m "๋ณ€๊ฒฝ ๋‚ด์šฉ" + +# 2. ์Šคํ…Œ์ด์ง• ๋ฐฐํฌ (์ž๋™) +git push staging main + +# 3. ์šด์˜ ์Šน๊ฒฉ +ssh damon@192.168.0.202 "/opt/autonet/scripts/deploy.sh promote" +``` + +--- + +## DB ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‹œ (์ค‘์š”!) + +### SQLite ํŠน์„ฑ +- SQLAlchemy ๋ชจ๋ธ์— ์ปฌ๋Ÿผ ์ถ”๊ฐ€ํ•ด๋„ **DB์— ์ž๋™ ๋ฐ˜์˜ ์•ˆ ๋จ** +- Docker ์žฌ์‹œ์ž‘ํ•ด๋„ DB ๋ณผ๋ฅจ์€ ์œ ์ง€๋จ +- **๋ฐ˜๋“œ์‹œ ์ˆ˜๋™์œผ๋กœ ALTER TABLE ์‹คํ–‰ ํ•„์š”!** + +### ์ƒˆ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์‹œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ + +``` +โ–ก 1. backend/app/models/*.py - ๋ชจ๋ธ์— ์ปฌ๋Ÿผ ์ถ”๊ฐ€ +โ–ก 2. backend/app/schemas/*.py - ์Šคํ‚ค๋งˆ์— ํ•„๋“œ ์ถ”๊ฐ€ +โ–ก 3. backend/app/api/*.py - API ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • +โ–ก 4. git commit & push +โ–ก 5. ์šด์˜ ๋ฐฐํฌ ํ›„ DB์— ์ปฌ๋Ÿผ ์ถ”๊ฐ€ (์•„๋ž˜ ๋ช…๋ น์–ด) +โ–ก 6. ํ…Œ์ŠคํŠธ +``` + +### DB ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ๋ช…๋ น์–ด + +```bash +# ์šด์˜์„œ๋ฒ„ DB์— ์ปฌ๋Ÿผ ์ถ”๊ฐ€ +ssh damon@192.168.0.202 "docker exec autonet-backend python -c \" +import sqlite3 +for db in ['/app/autonet.db', '/app/autonet_data.db']: + try: + conn = sqlite3.connect(db) + conn.execute('ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD COLUMN ์ปฌ๋Ÿผ๋ช… ํƒ€์ž… DEFAULT ๊ธฐ๋ณธ๊ฐ’') + conn.commit() + print(f'{db}: OK') + except Exception as e: + print(f'{db}: {e}') +\"" +``` + +### ์˜ˆ์‹œ: cc_per_banner_view ์ปฌ๋Ÿผ ์ถ”๊ฐ€ + +```bash +ssh damon@192.168.0.202 "docker exec autonet-backend python -c \" +import sqlite3 +for db in ['/app/autonet.db', '/app/autonet_data.db']: + try: + conn = sqlite3.connect(db) + conn.execute('ALTER TABLE system_settings ADD COLUMN cc_per_banner_view REAL DEFAULT 0.1') + conn.commit() + print(f'{db}: OK') + except Exception as e: + print(f'{db}: {e}') +\"" +``` + +### SQLite ํƒ€์ž… ๋งคํ•‘ + +| Python/SQLAlchemy | SQLite | +|-------------------|--------| +| Integer | INTEGER | +| Float | REAL | +| String | TEXT | +| Boolean | INTEGER (0/1) | +| DateTime | TEXT | + +--- + +## ๋กค๋ฐฑ + +```bash +# ์ง์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ +ssh damon@192.168.0.202 "/opt/autonet/scripts/deploy.sh rollback" + +# ํŠน์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ +ssh damon@192.168.0.202 "/opt/autonet/scripts/deploy.sh rollback-to 20260101_094303" + +# ๋ฆด๋ฆฌ์ฆˆ ๋ชฉ๋ก ํ™•์ธ +ssh damon@192.168.0.202 "/opt/autonet/scripts/deploy.sh status" +``` + +--- + +## ์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธ + +```bash +# ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ +ssh damon@192.168.0.202 "docker ps" + +# ๋ฐฑ์—”๋“œ ๋กœ๊ทธ +ssh damon@192.168.0.202 "docker logs autonet-backend --tail 50" + +# ํ”„๋ก ํŠธ์—”๋“œ ๋กœ๊ทธ +ssh damon@192.168.0.202 "docker logs autonet-frontend --tail 50" + +# DB ํ…Œ์ด๋ธ” ํ™•์ธ +ssh damon@192.168.0.202 "docker exec autonet-backend python -c \" +import sqlite3 +conn = sqlite3.connect('/app/autonet.db') +cursor = conn.cursor() +cursor.execute('PRAGMA table_info(system_settings)') +for row in cursor.fetchall(): + print(row) +\"" +``` + +--- + +## SSH ํ‚ค ์„ค์ • (server4 โ†’ server1,2,3) + +```powershell +# ๊ณต๊ฐœํ‚ค ํ™•์ธ +cat ~/.ssh/id_ed25519.pub + +# ๊ฐ ์„œ๋ฒ„์— ๋“ฑ๋ก +# server1,2,3 ๊ฐ๊ฐ์—์„œ: +nano ~/.ssh/authorized_keys +# ๊ณต๊ฐœํ‚ค ๋ถ™์—ฌ๋„ฃ๊ธฐ +``` + +--- + +## ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ + +### 1. "no such column" ์—๋Ÿฌ +- **์›์ธ**: ์ฝ”๋“œ์— ์ƒˆ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ DB์—๋Š” ์—†์Œ +- **ํ•ด๊ฒฐ**: ALTER TABLE๋กœ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ (์œ„ ์ฐธ๊ณ ) + +### 2. "Failed to save settings" ์—๋Ÿฌ +- **์›์ธ**: ๋ณดํ†ต DB ์Šคํ‚ค๋งˆ ๋ถˆ์ผ์น˜ +- **ํ™•์ธ**: `docker logs autonet-backend --tail 30` +- **ํ•ด๊ฒฐ**: ๋ˆ„๋ฝ๋œ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ + +### 3. ๋ฒˆ์—ญ ์•ˆ ๋จ +- **์›์ธ**: i18n.ts์— ํ•ด๋‹น ๋‹จ์–ด ๋ฒˆ์—ญ ์—†์Œ +- **ํ•ด๊ฒฐ**: CAR_TRANSLATIONS์— ๋ฒˆ์—ญ ์ถ”๊ฐ€ + +### 4. ๋ฐฐํฌ ํ›„ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์•ˆ ๋ณด์ž„ +- **ํ”„๋ก ํŠธ์—”๋“œ**: ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ํด๋ฆฌ์–ด (Ctrl+Shift+R) +- **๋ฐฑ์—”๋“œ**: ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ ํ™•์ธ + +--- + +## ๋ณ€๊ฒฝ ์ด๋ ฅ + +| ๋‚ ์งœ | ๋ณ€๊ฒฝ ๋‚ด์šฉ | DB ๋ณ€๊ฒฝ | +|------|----------|---------| +| 2026-01-01 | cc_per_banner_view ์„ค์ • ์ถ”๊ฐ€ | system_settings.cc_per_banner_view (REAL) | +| 2026-01-01 | ๋งˆ์ด์Šคํ„ฐ ๋ฒˆ์—ญ ์ถ”๊ฐ€ | - | + +--- + +**์ด ๋ฌธ์„œ๋Š” ์ƒˆ ์„ธ์…˜ ์‹œ์ž‘ ์‹œ CLAUDE.md์™€ ํ•จ๊ป˜ ๋ฐ˜๋“œ์‹œ ์ฝ์–ด์ฃผ์„ธ์š”!**