Final: Complete modernization - Option 1 deployment, unified persistence, migration scripts
- Implement Docker image-based deployment (Option 1) * Code immutable in image, no volume override * Eliminated init-data.sh manual step * Simplified deployment process - Unified persistence in data/ folder * Moved nginx.conf and nginx-custom-domains.conf to data/ * All runtime configs and data in single location * Clear separation: repo (source) vs data/ (runtime) - Archive legacy features * Groups blueprint and templates removed * Legacy playlist routes redirected to content area * Organized in old_code_documentation/ - Added network migration support * New migrate_network.sh script for IP changes * Regenerates SSL certs for new IP * Updates database configuration * Tested workflow: clone → deploy → migrate - Enhanced deploy.sh * Creates data directories * Copies nginx configs from repo to data/ * Validates file existence before deployment * Prevents incomplete deployments - Updated documentation * QUICK_DEPLOYMENT.md shows 4-step workflow * Complete deployment workflow documented * Migration procedures included - Production ready deployment workflow: 1. Clone & setup (.env configuration) 2. Deploy (./deploy.sh) 3. Migrate network (./migrate_network.sh if needed) 4. Normal operations (docker compose restart)
This commit is contained in:
201
old_code_documentation/DEPLOYMENT_ARCHITECTURE_ANALYSIS.md
Normal file
201
old_code_documentation/DEPLOYMENT_ARCHITECTURE_ANALYSIS.md
Normal file
@@ -0,0 +1,201 @@
|
||||
# Dockerfile vs init-data.sh Analysis
|
||||
|
||||
**Date:** January 17, 2026
|
||||
|
||||
## Current Architecture
|
||||
|
||||
### Current Workflow
|
||||
```
|
||||
1. Run init-data.sh (on host)
|
||||
↓
|
||||
2. Copies app code → data/app/
|
||||
3. Docker build creates image
|
||||
4. Docker run mounts ./data:/app
|
||||
5. Container runs with host's data/ folder
|
||||
```
|
||||
|
||||
### Current Docker Setup
|
||||
- **Dockerfile**: Copies code from build context to `/app` inside image
|
||||
- **docker-compose**: Mounts `./data:/app` **OVERRIDING** the Dockerfile copy
|
||||
- **Result**: Code in image is replaced by volume mount to host's `./data` folder
|
||||
|
||||
---
|
||||
|
||||
## Problem with Current Approach
|
||||
|
||||
1. **Code Duplication**
|
||||
- Code exists in: Host `./app/` folder
|
||||
- Code copied to: Host `./data/app/` folder
|
||||
- Code in Docker image: Ignored/overridden
|
||||
|
||||
2. **Extra Deployment Step**
|
||||
- Must run `init-data.sh` before deployment
|
||||
- Manual file copying required
|
||||
- Room for sync errors
|
||||
|
||||
3. **No Dockerfile Optimization**
|
||||
- Dockerfile copies code but it's never used
|
||||
- Volume mount replaces everything
|
||||
- Wastes build time and image space
|
||||
|
||||
---
|
||||
|
||||
## Proposed Solution: Two Options
|
||||
|
||||
### **Option 1: Use Dockerfile Copy (Recommended)** ✅
|
||||
|
||||
**Change Dockerfile:**
|
||||
```dockerfile
|
||||
# Copy everything to /app inside image
|
||||
COPY . /app/
|
||||
|
||||
# No need for volume mount - image contains all code
|
||||
```
|
||||
|
||||
**Change docker-compose.yml:**
|
||||
```yaml
|
||||
volumes:
|
||||
# REMOVE the ./data:/app volume mount
|
||||
# Keep only data-specific mounts:
|
||||
- ./data/instance:/app/instance # Database
|
||||
- ./data/uploads:/app/app/static/uploads # User uploads
|
||||
```
|
||||
|
||||
**Benefits:**
|
||||
- ✅ Single source of truth (Dockerfile)
|
||||
- ✅ Code is immutable in image
|
||||
- ✅ No init-data.sh needed
|
||||
- ✅ Faster deployment (no file copying)
|
||||
- ✅ Cleaner architecture
|
||||
- ✅ Can upgrade code by rebuilding image
|
||||
|
||||
**Drawbacks:**
|
||||
- Code changes require docker-compose rebuild
|
||||
- Can't edit code in container (which is good for production)
|
||||
|
||||
---
|
||||
|
||||
### **Option 2: Keep Current (With Improvements)**
|
||||
|
||||
**Keep:**
|
||||
- init-data.sh for copying code to data/
|
||||
- Volume mount at ./data:/app
|
||||
|
||||
**Improve:**
|
||||
- Add validation that init-data.sh ran successfully
|
||||
- Check file sync status before starting app
|
||||
- Add automated sync on container restart
|
||||
|
||||
**Benefits:**
|
||||
- ✅ Dev-friendly (can edit code, restart container)
|
||||
- ✅ Faster iteration during development
|
||||
|
||||
**Drawbacks:**
|
||||
- ❌ Production anti-pattern (code changes without rebuild)
|
||||
- ❌ Extra deployment complexity
|
||||
- ❌ Manual init-data.sh step required
|
||||
|
||||
---
|
||||
|
||||
## Current Production Setup Evaluation
|
||||
|
||||
**Current System:** Option 2 (with volume mount override)
|
||||
|
||||
### Why This Setup Exists
|
||||
|
||||
The current architecture with `./data:/app` volume mount suggests:
|
||||
1. **Development-focused** - Allows code editing and hot-reload
|
||||
2. **Host-based persistence** - All data on host machine
|
||||
3. **Easy backup** - Just backup the `./data/` folder
|
||||
|
||||
### Is This Actually Used?
|
||||
|
||||
- ✅ Code updates via `git pull` in `/app/` folder
|
||||
- ✅ Then `cp -r app/* data/app/` copies to running container
|
||||
- ✅ Allows live code updates without container rebuild
|
||||
|
||||
---
|
||||
|
||||
## Recommendation
|
||||
|
||||
### For Production
|
||||
**Use Option 1 (Dockerfile-based):**
|
||||
- Build immutable images
|
||||
- No init-data.sh needed
|
||||
- Cleaner deployment pipeline
|
||||
- Better for CI/CD
|
||||
|
||||
### For Development
|
||||
**Keep Option 2 (current approach):**
|
||||
- Code editing and hot-reload
|
||||
- Faster iteration
|
||||
|
||||
---
|
||||
|
||||
## Implementation Steps for Option 1
|
||||
|
||||
### 1. **Update Dockerfile**
|
||||
```dockerfile
|
||||
# Instead of: COPY . .
|
||||
# Change docker-compose volume mount pattern
|
||||
```
|
||||
|
||||
### 2. **Update docker-compose.yml**
|
||||
```yaml
|
||||
volumes:
|
||||
# Remove: ./data:/app
|
||||
# Keep only:
|
||||
- ./data/instance:/app/instance
|
||||
- ./data/uploads:/app/app/static/uploads
|
||||
```
|
||||
|
||||
### 3. **Update deploy.sh**
|
||||
```bash
|
||||
# Remove: bash init-data.sh
|
||||
# Just build and run:
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 4. **Add Migration Path**
|
||||
```bash
|
||||
# For existing deployments:
|
||||
# Copy any instance/database data from data/instance to new location
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Data Persistence Strategy (Post-Migration)
|
||||
|
||||
```
|
||||
Current: After Option 1:
|
||||
./data/app/ (code) → /app/ (in image)
|
||||
./data/instance/ (db) → ./data/instance/ (volume mount)
|
||||
./data/uploads/ (files) → ./data/uploads/ (volume mount)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Risk Assessment
|
||||
|
||||
### Option 1 (Dockerfile-only)
|
||||
- **Risk Level:** LOW ✅
|
||||
- **Data Loss Risk:** NONE (instance & uploads still mounted)
|
||||
- **Rollback:** Can use old image tag
|
||||
|
||||
### Option 2 (Current)
|
||||
- **Risk Level:** MEDIUM
|
||||
- **Data Loss Risk:** Manual copying errors
|
||||
- **Rollback:** Manual file restore
|
||||
|
||||
---
|
||||
|
||||
## Conclusion
|
||||
|
||||
**Recommendation: Option 1 (Dockerfile-based)** for production deployment
|
||||
- Simpler architecture
|
||||
- Better practices
|
||||
- Faster deployment
|
||||
- Cleaner code management
|
||||
|
||||
Would you like to implement this change?
|
||||
Reference in New Issue
Block a user