# ๐Ÿš€ Todo-Project ์‹œ๋†€๋กœ์ง€ ๋ฐฐํฌ ๊ฐ€์ด๋“œ ## ๐Ÿ“‹ ๋ชฉ์ฐจ 1. [์‚ฌ์ „ ์ค€๋น„](#์‚ฌ์ „-์ค€๋น„) 2. [์‹œ๋†€๋กœ์ง€ ํ™˜๊ฒฝ ์„ค์ •](#์‹œ๋†€๋กœ์ง€-ํ™˜๊ฒฝ-์„ค์ •) 3. [ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ](#ํ”„๋กœ์ ํŠธ-๋ฐฐํฌ) 4. [ํ™˜๊ฒฝ ์„ค์ •](#ํ™˜๊ฒฝ-์„ค์ •) 5. [๋ฐฐํฌ ์‹คํ–‰](#๋ฐฐํฌ-์‹คํ–‰) 6. [์ ‘์† ๋ฐ ํ™•์ธ](#์ ‘์†-๋ฐ-ํ™•์ธ) 7. [๋ฌธ์ œ ํ•ด๊ฒฐ](#๋ฌธ์ œ-ํ•ด๊ฒฐ) 8. [์œ ์ง€๋ณด์ˆ˜](#์œ ์ง€๋ณด์ˆ˜) --- ## ๐Ÿ› ๏ธ ์‚ฌ์ „ ์ค€๋น„ ### ์‹œ๋†€๋กœ์ง€ ์š”๊ตฌ์‚ฌํ•ญ - **DSM 7.0 ์ด์ƒ** - **Docker ํŒจํ‚ค์ง€ ์„ค์น˜** - **Container Manager ์„ค์น˜** (DSM 7.2+) ๋˜๋Š” **Docker ํŒจํ‚ค์ง€** (DSM 7.1 ์ดํ•˜) - **์ตœ์†Œ 2GB RAM** (๊ถŒ์žฅ: 4GB ์ด์ƒ) - **์ตœ์†Œ 5GB ์ €์žฅ๊ณต๊ฐ„** ### ํ•„์š”ํ•œ ํฌํŠธ - **4000**: ํ”„๋ก ํŠธ์—”๋“œ (์›น ์ธํ„ฐํŽ˜์ด์Šค) - **9000**: ๋ฐฑ์—”๋“œ API - **5432**: PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค --- ## ๐Ÿ—๏ธ ์‹œ๋†€๋กœ์ง€ ํ™˜๊ฒฝ ์„ค์ • ### 1. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์ƒ์„ฑ SSH ๋˜๋Š” File Station์„ ํ†ตํ•ด ๋‹ค์Œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”: ```bash # ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์ €์žฅ์†Œ (volume1 - ๋น ๋ฅธ ์•ก์„ธ์Šค) sudo mkdir -p /volume1/todo-project/uploads sudo chmod 755 /volume1/todo-project/uploads # ์„ค์ • ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ์†Œ (volume3) sudo mkdir -p /volume3/docker/todo-project/config sudo mkdir -p /volume3/docker/todo-project/postgres sudo mkdir -p /volume3/docker/todo-project/app # ๊ถŒํ•œ ์„ค์ • sudo chown -R 1000:1000 /volume1/todo-project sudo chown -R 999:999 /volume3/docker/todo-project/postgres sudo chown -R 1000:1000 /volume3/docker/todo-project/config ``` ### 2. ๋ฐฉํ™”๋ฒฝ ์„ค์ • (์„ ํƒ์‚ฌํ•ญ) DSM > ์ œ์–ดํŒ > ๋ณด์•ˆ > ๋ฐฉํ™”๋ฒฝ์—์„œ ๋‹ค์Œ ํฌํŠธ๋ฅผ ํ—ˆ์šฉํ•˜์„ธ์š”: - **4000/TCP** (Todo-Project ์›น ์ธํ„ฐํŽ˜์ด์Šค) - **9000/TCP** (API ์„œ๋ฒ„) --- ## ๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ ### ๋ฐฉ๋ฒ• 1: Git Clone (๊ถŒ์žฅ) ```bash # ์‹œ๋†€๋กœ์ง€์— SSH ์ ‘์† ํ›„ cd /volume3/docker/todo-project/app git clone https://github.com/your-username/Todo-Project.git . # ๋˜๋Š” ํŠน์ • ๋ธŒ๋žœ์น˜ git clone -b main https://github.com/your-username/Todo-Project.git . ``` ### ๋ฐฉ๋ฒ• 2: ํŒŒ์ผ ์—…๋กœ๋“œ 1. **๋กœ์ปฌ์—์„œ ํ”„๋กœ์ ํŠธ ์••์ถ•**: ```bash tar -czf todo-project.tar.gz --exclude='.git' --exclude='node_modules' --exclude='__pycache__' . ``` 2. **์‹œ๋†€๋กœ์ง€๋กœ ์—…๋กœ๋“œ**: - File Station์„ ํ†ตํ•ด `/volume3/docker/todo-project/app/`์— ์—…๋กœ๋“œ - ์••์ถ• ํ•ด์ œ: `tar -xzf todo-project.tar.gz` --- ## โš™๏ธ ํ™˜๊ฒฝ ์„ค์ • ### 1. ํ™˜๊ฒฝ ํŒŒ์ผ ์„ค์ • ```bash cd /volume3/docker/todo-project/app cp env.synology.example .env ``` ### 2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ˆ˜์ • `.env` ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ ์‹œ๋†€๋กœ์ง€ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์„ค์ •: ```bash # ํ•„์ˆ˜ ์„ค์ • (๋ฐ˜๋“œ์‹œ ๋ณ€๊ฒฝ!) SECRET_KEY=your-very-long-and-random-secret-key-for-production POSTGRES_PASSWORD=your-secure-database-password-123 # ํฌํŠธ ์„ค์ • (ํ•„์š”์‹œ ๋ณ€๊ฒฝ) FRONTEND_PORT=4000 BACKEND_PORT=9000 DATABASE_PORT=5432 # ์‹œ๋†€๋กœ์ง€ ๋ณผ๋ฅจ ๊ฒฝ๋กœ (๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ ๊ถŒ์žฅ) SYNOLOGY_UPLOADS_PATH=/volume1/todo-project/uploads SYNOLOGY_CONFIG_PATH=/volume3/docker/todo-project/config SYNOLOGY_DB_PATH=/volume3/docker/todo-project/postgres # CORS ์„ค์ • (์‹œ๋†€๋กœ์ง€ IP๋กœ ๋ณ€๊ฒฝ) CORS_ORIGINS=["http://192.168.1.100:4000", "http://localhost:4000"] # ํ”„๋กœ๋•์…˜ ์„ค์ • DEBUG=false ``` ### 3. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ ๋ณต์‚ฌ ```bash # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ๋ณต์‚ฌ cp -r backend/migrations/* /volume3/docker/todo-project/config/migrations/ ``` --- ## ๐Ÿš€ ๋ฐฐํฌ ์‹คํ–‰ ### 1. Docker Compose ์‹คํ–‰ ```bash cd /volume3/docker/todo-project/app # ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ docker-compose up -d --build # ๋กœ๊ทธ ํ™•์ธ docker-compose logs -f ``` ### 2. ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ ```bash # ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ docker-compose ps # ๊ฐœ๋ณ„ ์„œ๋น„์Šค ๋กœ๊ทธ ํ™•์ธ docker-compose logs backend docker-compose logs frontend docker-compose logs database ``` ### 3. ํ—ฌ์Šค์ฒดํฌ ํ™•์ธ ```bash # ๋ฐฑ์—”๋“œ API ํ™•์ธ curl http://localhost:9000/health # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ™•์ธ docker-compose exec database pg_isready -U todo_user -d todo_db ``` --- ## ๐ŸŒ ์ ‘์† ๋ฐ ํ™•์ธ ### 1. ์›น ์ธํ„ฐํŽ˜์ด์Šค ์ ‘์† ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์Œ ์ฃผ์†Œ๋กœ ์ ‘์†: - **๋กœ์ปฌ**: `http://์‹œ๋†€๋กœ์ง€IP:4000` - **์˜ˆ์‹œ**: `http://192.168.1.100:4000` ### 2. ์ดˆ๊ธฐ ์„ค์ • 1. **๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ**: ์ตœ์ดˆ ์ ‘์† ์‹œ ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค 2. **๋กœ๊ทธ์ธ**: ์ƒ์„ฑํ•œ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ 3. **๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ**: ๋ฉ”๋ชจ ์ž‘์„ฑ, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋“ฑ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ํ™•์ธ ### 3. ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ • (์„ ํƒ์‚ฌํ•ญ) DSM > ์ œ์–ดํŒ > ๋กœ๊ทธ์ธ ํฌํ„ธ > ๊ณ ๊ธ‰ > ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ์—์„œ: ``` ์†Œ์Šค: - ํ”„๋กœํ† ์ฝœ: HTTPS - ํ˜ธ์ŠคํŠธ ์ด๋ฆ„: your-domain.synology.me - ํฌํŠธ: 443 - ๊ฒฝ๋กœ: /todo ๋Œ€์ƒ: - ํ”„๋กœํ† ์ฝœ: HTTP - ํ˜ธ์ŠคํŠธ ์ด๋ฆ„: localhost - ํฌํŠธ: 4000 ``` --- ## ๐Ÿ”ง ๋ฌธ์ œ ํ•ด๊ฒฐ ### ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค #### 1. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ```bash # ๋กœ๊ทธ ํ™•์ธ docker-compose logs # ๊ฐœ๋ณ„ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ docker-compose restart backend docker-compose restart database ``` #### 2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ ```bash # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ docker-compose exec database pg_isready -U todo_user # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™•์ธ docker-compose exec backend env | grep DATABASE_URL ``` #### 3. ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์‹คํŒจ ```bash # ์—…๋กœ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ํ™•์ธ ls -la /volume1/todo-project/uploads/ # ๊ถŒํ•œ ์ˆ˜์ • sudo chown -R 1000:1000 /volume1/todo-project/uploads/ sudo chmod -R 755 /volume1/todo-project/uploads/ ``` #### 4. CORS ์˜ค๋ฅ˜ `.env` ํŒŒ์ผ์—์„œ `CORS_ORIGINS`์— ์‹œ๋†€๋กœ์ง€ IP ์ถ”๊ฐ€: ```bash CORS_ORIGINS=["http://192.168.1.100:4000", "https://your-domain.synology.me"] ``` ### ๋กœ๊ทธ ํ™•์ธ ๋ช…๋ น์–ด ```bash # ์ „์ฒด ๋กœ๊ทธ docker-compose logs -f # ํŠน์ • ์„œ๋น„์Šค ๋กœ๊ทธ docker-compose logs -f backend docker-compose logs -f database # ์ตœ๊ทผ ๋กœ๊ทธ๋งŒ docker-compose logs --tail=50 backend ``` --- ## ๐Ÿ”„ ์œ ์ง€๋ณด์ˆ˜ ### ์—…๋ฐ์ดํŠธ ```bash cd /volume3/docker/todo-project/app # Git์œผ๋กœ ์ตœ์‹  ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ git pull origin main # ์ปจํ…Œ์ด๋„ˆ ์žฌ๋นŒ๋“œ ๋ฐ ์žฌ์‹œ์ž‘ docker-compose down docker-compose up -d --build ``` ### ๋ฐฑ์—… ```bash # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—… docker-compose exec database pg_dump -U todo_user todo_db > backup_$(date +%Y%m%d).sql # ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€ ๋ฐฑ์—… tar -czf uploads_backup_$(date +%Y%m%d).tar.gz /volume1/todo-project/uploads/ ``` ### ๋ชจ๋‹ˆํ„ฐ๋ง ```bash # ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ docker stats # ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ df -h /volume1/todo-project/ df -h /volume3/docker/todo-project/ ``` --- ## ๐Ÿ“ž ์ง€์› ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ์„ ํ™•์ธํ•˜์„ธ์š”: 1. **๋กœ๊ทธ ํŒŒ์ผ**: `docker-compose logs` 2. **ํฌํŠธ ์ถฉ๋Œ**: `netstat -tulpn | grep :4000` 3. **๋””์Šคํฌ ๊ณต๊ฐ„**: `df -h` 4. **๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰**: `free -m` --- ## ๐ŸŽฏ ์„ฑ๋Šฅ ์ตœ์ ํ™” ํŒ ### 1. ๋ณผ๋ฅจ ๋ฐฐ์น˜ ์ตœ์ ํ™” - **์ด๋ฏธ์ง€ ์ €์žฅ์†Œ**: volume1 (SSD ๊ถŒ์žฅ) - ๋น ๋ฅธ ์•ก์„ธ์Šค - **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: volume3 (HDD ๊ฐ€๋Šฅ) - ๋Œ€์šฉ๋Ÿ‰ ์ €์žฅ ### 2. ๋ฉ”๋ชจ๋ฆฌ ์„ค์ • - ์ตœ์†Œ 2GB RAM ํ• ๋‹น - PostgreSQL shared_buffers ์กฐ์ • ### 3. ๋„คํŠธ์›Œํฌ ์ตœ์ ํ™” - ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์‚ฌ์šฉ์œผ๋กœ HTTPS ์ ์šฉ - CDN ์‚ฌ์šฉ ๊ณ ๋ ค (์ •์  ํŒŒ์ผ) --- **๐ŸŽ‰ ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! Todo-Project๊ฐ€ ์‹œ๋†€๋กœ์ง€์— ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐฐํฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!**