soundwave/docs/PRE_LAUNCH_CHECKLIST.md

396 lines
9.4 KiB
Markdown
Raw Normal View History

# 🚀 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!**