soundwave/docs/PRE_LAUNCH_CHECKLIST.md
Iulian 51679d1943 Initial commit - SoundWave v1.0
- Full PWA support with offline capabilities
- Comprehensive search across songs, playlists, and channels
- Offline playlist manager with download tracking
- Pre-built frontend for zero-build deployment
- Docker-based deployment with docker compose
- Material-UI dark theme interface
- YouTube audio download and management
- Multi-user authentication support
2025-12-16 23:43:07 +00:00

395 lines
9.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 Pre-Launch Checklist - SoundWave Deployment
## ✅ Required Steps Before Building Container
### 1. Create Environment File
**Status:** ⚠️ **REQUIRED**
Copy the example environment file and customize it:
```bash
cd /home/iulian/projects/zi-tube/soundwave
cp .env.example .env
```
**Default Credentials:**
- **Username:** `admin`
- **Password:** `soundwave`
- **Elasticsearch Password:** `soundwave`
- **Port:** `123456`
**Optional: Customize .env file**
```bash
nano .env
```
Edit these values if needed:
- `SW_HOST` - Change if using different port or domain
- `SW_USERNAME` - Admin username (default: admin)
- `SW_PASSWORD` - Admin password (default: soundwave)
- `ELASTIC_PASSWORD` - Elasticsearch password (default: soundwave)
- `TZ` - Your timezone (default: UTC)
### 2. Create Database Migrations
**Status:** ⚠️ **REQUIRED**
The local audio files feature has new models that need migrations:
```bash
# Start only the database services first
docker compose up -d soundwave-es soundwave-redis
# Wait 30 seconds for Elasticsearch to initialize
sleep 30
# Create migrations (run from host or inside container)
cd backend
python manage.py makemigrations audio
python manage.py migrate
# OR if you prefer to do it after container starts:
docker compose up -d soundwave
docker exec -it soundwave python manage.py makemigrations audio
docker exec -it soundwave python manage.py migrate
```
### 3. Verify Python Dependencies
**Status:** ✅ **ALREADY CONFIGURED**
All required packages are in `requirements.txt`:
-`mutagen>=1.47.0` - Audio metadata extraction (local files)
-`pylast>=5.2.0` - Last.fm API client (artwork)
- ✅ All other dependencies present
### 4. Build Frontend
**Status:** ⚠️ **REQUIRED**
Build the React frontend before starting container:
```bash
cd frontend
npm install
npm run build
```
The build output goes to `frontend/dist/` which will be served by Django.
### 5. Create Required Directories
**Status:** ⚠️ **RECOMMENDED**
Ensure volume directories exist with proper permissions:
```bash
cd /home/iulian/projects/zi-tube/soundwave
mkdir -p audio cache es redis
chmod -R 755 audio cache es redis
```
## 📋 Complete Setup Script
Run this complete setup script:
```bash
#!/bin/bash
set -e
echo "🚀 SoundWave - Pre-Launch Setup"
echo "================================"
echo ""
# Navigate to project directory
cd /home/iulian/projects/zi-tube/soundwave
# Step 1: Create .env file
echo "📝 Step 1/5: Creating environment file..."
if [ ! -f .env ]; then
cp .env.example .env
echo "✅ Created .env file with default settings"
else
echo " .env file already exists"
fi
# Step 2: Create directories
echo ""
echo "📁 Step 2/5: Creating volume directories..."
mkdir -p audio cache es redis
chmod -R 755 audio cache es redis
echo "✅ Directories created"
# Step 3: Build frontend
echo ""
echo "⚛️ Step 3/5: Building React frontend..."
cd frontend
npm install
npm run build
cd ..
echo "✅ Frontend built successfully"
# Step 4: Start database services
echo ""
echo "🗄️ Step 4/5: Starting database services..."
docker compose up -d soundwave-es soundwave-redis
echo "⏳ Waiting 30 seconds for Elasticsearch to initialize..."
sleep 30
echo "✅ Database services ready"
# Step 5: Start main application
echo ""
echo "🚀 Step 5/5: Starting SoundWave application..."
docker compose up -d soundwave
echo "⏳ Waiting for application to start..."
sleep 10
# Run migrations
echo ""
echo "🔄 Running database migrations..."
docker exec -it soundwave python manage.py makemigrations audio
docker exec -it soundwave python manage.py migrate
echo "✅ Migrations completed"
# Create superuser (optional)
echo ""
echo "👤 Creating admin user..."
docker exec -it soundwave python manage.py shell -c "
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(username='admin').exists():
User.objects.create_superuser('admin', 'admin@soundwave.local', 'soundwave')
print('✅ Admin user created')
else:
print(' Admin user already exists')
"
echo ""
echo "🎉 Setup Complete!"
echo "=================="
echo ""
echo "🌐 Application: http://localhost:123456"
echo "👤 Username: admin"
echo "🔑 Password: soundwave"
echo ""
echo "📊 To view logs:"
echo " docker compose logs -f soundwave"
echo ""
echo "🛑 To stop:"
echo " docker compose down"
echo ""
```
Save this as `setup.sh` and run:
```bash
chmod +x setup.sh
./setup.sh
```
## 🔐 Default Credentials
### Admin User
- **Username:** `admin`
- **Password:** `soundwave`
- **URL:** `http://localhost:123456`
### Elasticsearch
- **Password:** `soundwave`
- **Port:** `92000` (internal)
- **URL:** `http://soundwave-es:92000` (internal)
### Redis
- **Port:** `6379` (internal)
- **No password required**
## 📊 Port Configuration
Current ports in `docker-compose.yml`:
- **Application:** `123456``8888` (mapped to host)
- **Elasticsearch:** `92000` (internal only)
- **Redis:** `6379` (internal only)
To change the external port, edit `docker-compose.yml`:
```yaml
ports:
- "YOUR_PORT:8888" # Change YOUR_PORT to desired port
```
## 🗂️ Volume Mounts
Data persisted in these directories:
- `./audio` → User audio files, YouTube downloads
- `./cache` → Application cache
- `./es` → Elasticsearch data
- `./redis` → Redis persistence
**⚠️ Important:** Don't delete these directories - they contain your data!
## 🔧 Environment Variables Reference
### Required Variables
```bash
SW_HOST=http://localhost:123456 # Application URL
SW_USERNAME=admin # Admin username
SW_PASSWORD=soundwave # Admin password
ELASTIC_PASSWORD=soundwave # Elasticsearch password
REDIS_HOST=soundwave-redis # Redis hostname
ES_URL=http://soundwave-es:92000 # Elasticsearch URL
TZ=UTC # Timezone
```
### Optional Variables
```bash
SW_AUTO_UPDATE_YTDLP=true # Auto-update yt-dlp
DJANGO_DEBUG=false # Debug mode (keep false in production)
# Last.fm API (for metadata and artwork)
LASTFM_API_KEY=6220a784c283f5df39fbf5fd9d9ffeb9
LASTFM_API_SECRET= # Your secret here
# Fanart.tv API (for high quality artwork)
FANART_API_KEY=73854834d14a5f351bb2233fc3c9d755
```
### Getting API Keys
**Last.fm API:**
1. Visit: https://www.last.fm/api/account/create
2. Fill in application details
3. Copy API Key and Secret to `.env`
**Fanart.tv API:**
1. Visit: https://fanart.tv/get-an-api-key/
2. Register for personal API key
3. Copy API Key to `.env`
## 🧪 Testing Checklist
After starting the container, verify:
### 1. Container Health
```bash
docker compose ps
# All services should be "Up"
```
### 2. Application Logs
```bash
docker compose logs -f soundwave
# Should see "Starting development server at http://0.0.0.0:8888/"
```
### 3. Web Access
Visit `http://localhost:123456`
- ✅ Page loads
- ✅ Can login with admin/soundwave
- ✅ No console errors
### 4. Database Connection
```bash
docker exec -it soundwave python manage.py dbshell
# Should connect to database without errors
```
### 5. Elasticsearch Health
```bash
curl -u elastic:soundwave http://localhost:123456/api/health/
# Should return health status
```
### 6. Test Each Feature
**Local Files Upload:**
- Navigate to Local Files page
- Upload a test audio file
- Verify metadata extraction works
- Check file appears in list
**PWA Features:**
- Open Chrome DevTools > Application > Manifest
- Verify all icons load
- Check service worker registered
- Test offline mode
**Media Controls:**
- Play any audio
- Check native controls appear (notification tray)
- Test play/pause from system controls
## 🐛 Troubleshooting
### Issue: .env file not found
```bash
cp .env.example .env
```
### Issue: Port already in use
```bash
# Find what's using port 123456
sudo lsof -i :123456
# Change port in docker-compose.yml
nano docker-compose.yml
# Edit: "YOUR_PORT:8888"
```
### Issue: Elasticsearch won't start
```bash
# Increase vm.max_map_count
sudo sysctl -w vm.max_map_count=262144
# Make permanent
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
```
### Issue: Permission denied on volumes
```bash
sudo chown -R $USER:$USER audio cache es redis
chmod -R 755 audio cache es redis
```
### Issue: Migrations fail
```bash
# Reset migrations (WARNING: loses data)
docker compose down -v
rm -rf backend/audio/migrations/00*.py
docker compose up -d
docker exec -it soundwave python manage.py makemigrations audio
docker exec -it soundwave python manage.py migrate
```
### Issue: Frontend not loading
```bash
cd frontend
npm run build
docker compose restart soundwave
```
## 📝 Summary
**Before running `docker compose up`:**
1. ✅ Copy `.env.example` to `.env`
2. ✅ Create volume directories (`audio`, `cache`, `es`, `redis`)
3. ✅ Build frontend (`cd frontend && npm install && npm run build`)
4. ✅ Start database services first
5. ✅ Run migrations after containers start
6. ✅ Test application at `http://localhost:123456`
**Quick Start (One Command):**
```bash
cp .env.example .env && \
mkdir -p audio cache es redis && \
cd frontend && npm install && npm run build && cd .. && \
docker compose up -d
```
**Then run migrations:**
```bash
sleep 30 # Wait for services
docker exec -it soundwave python manage.py makemigrations audio
docker exec -it soundwave python manage.py migrate
```
**Access the app:**
- URL: http://localhost:123456
- Username: admin
- Password: soundwave
🎉 **You're ready to launch!**