# 🏠 μ‹œλ†€λ‘œμ§€ NAS μ„€μΉ˜ κ°€μ΄λ“œ ## πŸ“‹ 사전 쀀비사항 ### 1. μ‹œλ†€λ‘œμ§€ NAS μš”κ΅¬μ‚¬ν•­ - **DSM 7.0 이상** - **Container Manager** νŒ¨ν‚€μ§€ μ„€μΉ˜ - **Git Server** νŒ¨ν‚€μ§€ μ„€μΉ˜ (선택사항) - **μ΅œμ†Œ 2GB RAM** ꢌμž₯ ### 2. ν•„μš”ν•œ 포트 - **4000**: ν”„λ‘ νŠΈμ—”λ“œ (Nginx) - **8000**: λ°±μ—”λ“œ API (FastAPI) - **5432**: PostgreSQL (λ‚΄λΆ€ 톡신) ## πŸš€ μ„€μΉ˜ 방법 ### 방법 1: SSHλ₯Ό ν†΅ν•œ μ„€μΉ˜ (ꢌμž₯) #### 1단계: SSH 접속 ```bash ssh admin@[μ‹œλ†€λ‘œμ§€_IPμ£Όμ†Œ] ``` #### 2단계: ν”„λ‘œμ νŠΈ 디렉토리 생성 ```bash sudo mkdir -p /volume1/docker/todo-project cd /volume1/docker/todo-project ``` #### 3단계: Git 클둠 ```bash sudo git clone https://git.hyungi.net/hyungi/Todo-Project.git . ``` #### 4단계: ν™˜κ²½ μ„€μ • ```bash # ν™˜κ²½ λ³€μˆ˜ 파일 생성 sudo cp .env.example .env # ν™˜κ²½ λ³€μˆ˜ νŽΈμ§‘ (ν•„μš”μ‹œ) sudo nano .env ``` #### 5단계: Docker μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ ```bash sudo docker-compose up -d ``` #### 6단계: μ„€μΉ˜ 확인 ```bash # μ»¨ν…Œμ΄λ„ˆ μƒνƒœ 확인 sudo docker-compose ps # 둜그 확인 sudo docker-compose logs -f ``` ### 방법 2: Container Manager GUI μ‚¬μš© #### 1단계: Container Manager μ—΄κΈ° - DSM β†’ **Package Center** β†’ **Container Manager** μ„€μΉ˜/μ‹€ν–‰ #### 2단계: ν”„λ‘œμ νŠΈ 생성 - **Project** β†’ **Create** - **Project name**: `todo-project` - **Path**: `/docker/todo-project` #### 3단계: μ†ŒμŠ€ μ„€μ • - **Source**: `Git Repository` - **Repository URL**: `https://git.hyungi.net/hyungi/Todo-Project.git` - **Branch**: `main` #### 4단계: μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ - **Build and run** 클릭 - μžλ™μœΌλ‘œ `docker-compose.yml` νŒŒμΌμ„ μ½μ–΄μ„œ μ‹€ν–‰ ## πŸ”§ μ„€μ • 및 μ΅œμ ν™” ### 1. ν™˜κ²½ λ³€μˆ˜ μ„€μ • (.env) ```bash # λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ • POSTGRES_DB=todo_project POSTGRES_USER=todo_user POSTGRES_PASSWORD=your_secure_password_here # JWT μ„€μ • SECRET_KEY=your_jwt_secret_key_here ACCESS_TOKEN_EXPIRE_MINUTES=30 # μ‹œλ†€λ‘œμ§€ 연동 μ„€μ • SYNOLOGY_DSM_HOST=localhost SYNOLOGY_DSM_PORT=5000 SYNOLOGY_DSM_USERNAME=your_username SYNOLOGY_DSM_PASSWORD=your_password # 메일 μ„€μ • (MailPlus μ—°λ™μš©) MAIL_SERVER=localhost MAIL_PORT=587 MAIL_USERNAME=your_mail_username MAIL_PASSWORD=your_mail_password MAIL_FROM=noreply@yourdomain.com ``` ### 2. λ³Όλ₯¨ λ§€ν•‘ 확인 ```yaml volumes: - /volume1/docker/todo-project/data:/data - todo_uploads:/data/uploads ``` ### 3. 포트 ν¬μ›Œλ”© μ„€μ • - **μ œμ–΄νŒ** β†’ **μ™ΈλΆ€ μ•‘μ„ΈμŠ€** β†’ **λΌμš°ν„° ꡬ성** - 포트 4000을 μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ„λ‘ μ„€μ • ## 🌐 접속 방법 ### λ‚΄λΆ€ λ„€νŠΈμ›Œν¬ ``` http://[μ‹œλ†€λ‘œμ§€_IP]:4000 ``` ### μ™ΈλΆ€ 접속 (DDNS μ„€μ • μ‹œ) ``` http://[your-synology-ddns].synology.me:4000 ``` ## πŸ”’ λ³΄μ•ˆ μ„€μ • ### 1. HTTPS μ„€μ • (Let's Encrypt) ```bash # μΈμ¦μ„œ 디렉토리 생성 sudo mkdir -p /volume1/docker/todo-project/ssl # docker-compose.yml에 SSL λ³Όλ₯¨ μΆ”κ°€ volumes: - /volume1/ssl:/etc/ssl/certs ``` ### 2. λ°©ν™”λ²½ μ„€μ • - **μ œμ–΄νŒ** β†’ **λ³΄μ•ˆ** β†’ **λ°©ν™”λ²½** - ν•„μš”ν•œ 포트만 μ—΄κΈ°: 4000, 8000 ### 3. μ‚¬μš©μž κΆŒν•œ μ„€μ • ```bash # Docker 그룹에 μ‚¬μš©μž μΆ”κ°€ sudo usermod -aG docker $USER ``` ## πŸ“Š λͺ¨λ‹ˆν„°λ§ 및 μœ μ§€λ³΄μˆ˜ ### 1. 둜그 확인 ```bash # 전체 둜그 sudo docker-compose logs # νŠΉμ • μ„œλΉ„μŠ€ 둜그 sudo docker-compose logs frontend sudo docker-compose logs backend sudo docker-compose logs db ``` ### 2. μ»¨ν…Œμ΄λ„ˆ μƒνƒœ 확인 ```bash # μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ sudo docker-compose ps # λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰ sudo docker stats ``` ### 3. μ—…λ°μ΄νŠΈ ```bash # μ΅œμ‹  μ½”λ“œ κ°€μ Έμ˜€κΈ° sudo git pull origin main # μ»¨ν…Œμ΄λ„ˆ μž¬λΉŒλ“œ sudo docker-compose down sudo docker-compose up -d --build ``` ### 4. λ°±μ—… ```bash # λ°μ΄ν„°λ² μ΄μŠ€ λ°±μ—… sudo docker-compose exec db pg_dump -U todo_user todo_project > backup.sql # μ—…λ‘œλ“œ 파일 λ°±μ—… sudo tar -czf uploads_backup.tar.gz /volume1/docker/todo-project/data/uploads ``` ## πŸ”§ 문제 ν•΄κ²° ### 1. μ»¨ν…Œμ΄λ„ˆκ°€ μ‹œμž‘λ˜μ§€ μ•ŠλŠ” 경우 ```bash # 둜그 확인 sudo docker-compose logs # 포트 좩돌 확인 sudo netstat -tulpn | grep :4000 ``` ### 2. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 였λ₯˜ ```bash # PostgreSQL μ»¨ν…Œμ΄λ„ˆ μƒνƒœ 확인 sudo docker-compose exec db psql -U todo_user -d todo_project -c "SELECT 1;" ``` ### 3. κΆŒν•œ 문제 ```bash # 파일 κΆŒν•œ μˆ˜μ • sudo chown -R 1000:1000 /volume1/docker/todo-project/data ``` ### 4. λ©”λͺ¨λ¦¬ λΆ€μ‘± ```bash # λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ 확인 free -h # Docker λ©”λͺ¨λ¦¬ μ œν•œ μ„€μ • (docker-compose.yml) services: backend: mem_limit: 512m ``` ## πŸ“± PWA μ„€μ • ### 1. HTTPS ν•„μˆ˜ - PWA κΈ°λŠ₯을 μœ„ν•΄μ„œλŠ” HTTPS 연결이 ν•„μš”ν•©λ‹ˆλ‹€ - Let's Encrypt μΈμ¦μ„œ μ„€μ • ꢌμž₯ ### 2. ν™ˆν™”λ©΄ μΆ”κ°€ - λͺ¨λ°”μΌμ—μ„œ Safari/Chrome으둜 접속 - "ν™ˆν™”λ©΄μ— μΆ”κ°€" 선택 - λ„€μ΄ν‹°λΈŒ μ•±μ²˜λŸΌ μ‚¬μš© κ°€λŠ₯ ## 🎯 μ„±λŠ₯ μ΅œμ ν™” ### 1. Nginx 캐싱 μ„€μ • ```nginx location /static/ { expires 1y; add_header Cache-Control "public, immutable"; } ``` ### 2. λ°μ΄ν„°λ² μ΄μŠ€ μ΅œμ ν™” ```sql -- 인덱슀 생성 CREATE INDEX idx_todos_created_at ON todos(created_at); CREATE INDEX idx_todos_status ON todos(status); ``` ### 3. 이미지 μ΅œμ ν™” - μ—…λ‘œλ“œλœ μ΄λ―Έμ§€λŠ” μžλ™μœΌλ‘œ μ••μΆ•λ©λ‹ˆλ‹€ - μ΅œλŒ€ 1920x1920 ν•΄μƒλ„λ‘œ λ¦¬μ‚¬μ΄μ¦ˆ - JPEG ν’ˆμ§ˆ 85%둜 μ΅œμ ν™” ## πŸ“ž 지원 λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ λ‹€μŒμ„ ν™•μΈν•΄μ£Όμ„Έμš”: 1. **둜그 파일**: `sudo docker-compose logs` 2. **μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€**: `htop` λ˜λŠ” DSM λ¦¬μ†ŒμŠ€ λͺ¨λ‹ˆν„° 3. **λ„€νŠΈμ›Œν¬ μ—°κ²°**: 포트 μ ‘κ·Ό κ°€λŠ₯ μ—¬λΆ€ 4. **κΆŒν•œ μ„€μ •**: 파일 및 디렉토리 κΆŒν•œ --- ## πŸš€ λΉ λ₯Έ μ‹œμž‘ λͺ…λ Ήμ–΄ ```bash # 전체 μ„€μΉ˜ (ν•œ λ²ˆμ— μ‹€ν–‰) ssh admin@[μ‹œλ†€λ‘œμ§€_IP] sudo mkdir -p /volume1/docker/todo-project cd /volume1/docker/todo-project sudo git clone https://git.hyungi.net/hyungi/Todo-Project.git . sudo cp .env.example .env sudo docker-compose up -d # 접속 확인 curl http://localhost:4000 ``` μ„€μΉ˜ μ™„λ£Œ ν›„ `http://[μ‹œλ†€λ‘œμ§€_IP]:4000`으둜 μ ‘μ†ν•˜μ—¬ Todo Projectλ₯Ό μ‚¬μš©ν•˜μ„Έμš”! πŸŽ‰