Files
pgsql-jellyfin/docs/PUBLISH_PROFILES_SETUP_COMPLETE.md
T
wjones 77e30685bb Complete multi-instance support: Phases 3–6 & deployment
- Implements Phases 3–6: session isolation, cache coordination, primary election, and file system monitor coordination for Jellyfin with PostgreSQL.
- Adds new database entities (Instance, DistributedLock, FileSystemChange) and EF model configurations.
- Includes SQL migration scripts and EF migration for all required tables, columns, and helper functions.
- Updates Device entity and JellyfinDbContext for multi-instance tracking.
- Integrates new DI services for instance registry, distributed locks, cache coordinator, and primary election.
- Adds publishing profiles (Win/Linux/FrameworkDependent) and automation script for deployment.
- Extensive documentation for architecture, setup, and publishing.
- All changes are backward compatible and build successfully.
2026-03-05 16:10:26 -05:00

283 lines
7.9 KiB
Markdown

# Publishing Profiles - Setup Complete! ✅
## Summary
Successfully created **3 publishing profiles** for your multi-instance Jellyfin deployment on the `multi-instance-testing` branch!
## Files Created
### Publishing Profiles
1.`Jellyfin.Server/Properties/PublishProfiles/MultiInstance-Win-x64.pubxml`
2.`Jellyfin.Server/Properties/PublishProfiles/MultiInstance-Linux-x64.pubxml`
3.`Jellyfin.Server/Properties/PublishProfiles/MultiInstance-FrameworkDependent.pubxml`
### Automation Scripts
4.`PublishAndDeploy.ps1` - Automated publish and deployment script
### Documentation
5.`docs/PUBLISHING_PROFILES_GUIDE.md` - Complete usage guide
### Project Updates
6. ✅ Updated `Jellyfin.Server/Jellyfin.Server.csproj` - Fixed SQL file inclusion
## Quick Start
### Option 1: Command Line (Recommended)
```powershell
# Publish Windows self-contained
dotnet publish Jellyfin.Server\Jellyfin.Server.csproj `
-p:PublishProfile=MultiInstance-Win-x64 `
--configuration Release
# Output: lib\Release\net11.0\win-x64\publish\
```
### Option 2: Visual Studio
1. Right-click `Jellyfin.Server` project
2. Click **Publish**
3. Select **MultiInstance-Win-x64** profile
4. Click **Publish** button
### Option 3: Automated Script
```powershell
# Publish and deploy in one command
.\PublishAndDeploy.ps1
# Publish Linux (no deploy)
.\PublishAndDeploy.ps1 -Profile MultiInstance-Linux-x64 -SkipDeploy
# Create deployment package
.\PublishAndDeploy.ps1 -CreatePackage
```
## Verification Results
### Latest Publish Test (MultiInstance-Win-x64)
```
╔══════════════════════════════════════════════════════════╗
║ ✓ Multi-Instance Publish - SUCCESSFUL ║
╚══════════════════════════════════════════════════════════╝
Location: D:\Projects\pgsql-jellyfin\lib\Release\net11.0\win-x64\publish
Critical Files:
Application:
✓ jellyfin.exe
PostgreSQL:
✓ Npgsql.dll
✓ Jellyfin.Database.Providers.Postgres.dll
Multi-Instance SQL:
✓ sql\add_multi_instance_support.sql
Config Templates:
✓ startup.json
✓ startup.json.windows
✓ startup.json.linux
Package Summary:
Total Size: 212.41 MB
File Count: 524 files
Profile: MultiInstance-Win-x64
```
## Profile Comparison
| Profile | Size | .NET Runtime | Startup | Best For |
|---------|------|--------------|---------|----------|
| **Win-x64** | ~210 MB | ✅ Included | Fast (R2R) | Windows production servers |
| **Linux-x64** | ~210 MB | ✅ Included | Fast (R2R) | Linux production servers |
| **Framework-Dependent** | ~100 MB | ❌ Required | Normal | Servers with .NET 11 installed |
## What's Included
All profiles include:
**Multi-Instance Code** (All 6 Phases):
- Phase 1: Instance Registration & Heartbeat
- Phase 2: Distributed Locking
- Phase 3: Session Isolation
- Phase 4: Cache Coordination
- Phase 5: Primary Instance Election
- Phase 6: File System Monitor Coordination
**Database Scripts**:
- `sql/add_multi_instance_support.sql` - Complete setup script
- All other SQL utilities and schema scripts
**Configuration**:
- `startup.json` templates for Windows/Linux
- `database.xml` will be created on first run
**Dependencies**:
- Npgsql (PostgreSQL driver)
- EF Core 11 with PostgreSQL provider
- All clustering and coordination libraries
## Deployment Steps
### 1. Publish the Application
```powershell
dotnet publish -p:PublishProfile=MultiInstance-Win-x64
```
### 2. Copy to Server
```powershell
# Local deployment
Copy-Item -Path "lib\Release\net11.0\win-x64\publish\*" `
-Destination "C:\Jellyfin" -Recurse -Force
# Or create package
Compress-Archive -Path "lib\Release\net11.0\win-x64\publish\*" `
-DestinationPath "Jellyfin-MultiInstance.zip"
```
### 3. Configure Database Connection
Create `C:\Jellyfin\config\database.xml` (or path from startup.json):
```xml
<?xml version="1.0" encoding="utf-8"?>
<DatabaseConfigurationOptions>
<DatabaseType>Jellyfin-PostgreSQL</DatabaseType>
<CustomProviderOptions>
<ConnectionString>Host=192.168.129.248;Port=5432;Database=jellyfin;Username=jellyfin;Password=YOUR_PASSWORD</ConnectionString>
</CustomProviderOptions>
</DatabaseConfigurationOptions>
```
### 4. Run Multi-Instance SQL Setup
```powershell
# One time only - sets up all 6 phases
psql -h 192.168.129.248 -U jellyfin -d jellyfin `
-f "C:\Jellyfin\sql\add_multi_instance_support.sql"
```
### 5. Start Jellyfin
```powershell
cd C:\Jellyfin
.\jellyfin.exe
```
## Git Branch Status
```
Branch: multi-instance-testing
Remote: https://gitea.wpjones.com/wjones/pgsql-jellyfin
```
**Files Modified**:
- `Jellyfin.Server/Jellyfin.Server.csproj` - Fixed SQL file paths
**Files Added**:
- `Jellyfin.Server/Properties/PublishProfiles/MultiInstance-Win-x64.pubxml`
- `Jellyfin.Server/Properties/PublishProfiles/MultiInstance-Linux-x64.pubxml`
- `Jellyfin.Server/Properties/PublishProfiles/MultiInstance-FrameworkDependent.pubxml`
- `PublishAndDeploy.ps1`
- `docs/PUBLISHING_PROFILES_GUIDE.md`
- `docs/PUBLISH_PROFILES_SETUP_COMPLETE.md` (this file)
## Next Steps
### For Testing
1. **Publish the application**:
```powershell
dotnet publish -p:PublishProfile=MultiInstance-Win-x64
```
2. **Deploy to test server**
3. **Start multiple instances** (different ports):
```powershell
# Instance 1 (port 8096)
cd C:\Jellyfin-Instance1
.\jellyfin.exe
# Instance 2 (port 8097)
cd C:\Jellyfin-Instance2
.\jellyfin.exe --port 8097
```
4. **Verify multi-instance coordination**:
```sql
-- Check registered instances
SELECT instance_id, host_name, ip_address, last_heartbeat, is_active
FROM library.instances;
-- Check primary election
SELECT library.get_primary_instance();
```
### For Production
1. **Commit changes to your branch**:
```powershell
git add .
git commit -m "Add publishing profiles for multi-instance deployment"
git push origin multi-instance-testing
```
2. **Create release tag** (optional):
```powershell
git tag -a v1.0-multiinstance -m "Multi-instance PostgreSQL support complete"
git push origin v1.0-multiinstance
```
3. **Deploy to production servers** using the publish profiles
## Troubleshooting
### Publish Fails with Missing Files
**Check SQL files exist**:
```powershell
Get-ChildItem sql\*.sql
```
**Verify project file paths**:
```powershell
Get-Content Jellyfin.Server\Jellyfin.Server.csproj | Select-String "sql"
```
### Published App Won't Start
**Check database configuration**:
```powershell
Test-Path "C:\Jellyfin\config\database.xml"
Get-Content "C:\Jellyfin\config\database.xml"
```
**Test PostgreSQL connection**:
```powershell
Test-NetConnection -ComputerName 192.168.129.248 -Port 5432
```
### SQL Scripts Not Copied
The project file now uses `..\..\sql\` path (relative to project directory).
SQL files should appear in `{publish}\sql\*.sql`.
## Documentation
📖 **Complete Guide**: `docs/PUBLISHING_PROFILES_GUIDE.md`
📖 **Configuration Fix**: `docs/CONFIGURATION_LOADING_FIX.md`
📖 **Multi-Instance Overview**: `docs/MULTI_INSTANCE_COMPLETE.md`
📖 **PostgreSQL Troubleshooting**: `docs/POSTGRESQL_CONNECTION_TROUBLESHOOTING.md`
## Summary
**3 publishing profiles created** for different deployment scenarios
**Automation script** for one-command publish and deploy
**SQL scripts** automatically included in publish output
**All multi-instance code** (Phases 1-6) included
**Comprehensive documentation** for deployment and usage
**Tested successfully** - 212 MB package with 524 files
**You're ready to publish and deploy your multi-instance Jellyfin!** 🎉
---
**Created**: After completing publishing profile setup
**Branch**: multi-instance-testing
**Status**: ✅ Ready for deployment