Files
enterprise_digital-platform/digiserver-v2/old_code_documentation/PLAYER_DEPLOYMENT_GUIDE.md
T
2026-06-07 23:40:50 +03:00

9.1 KiB

Player Deployment Configuration Guide

Overview

This guide explains how to deploy Kiwy-Signage players to remote hosts using DigiServer's SSH deployment system with automatic configuration.

Key Changes

1. Deployment Location

Players are now deployed to the SSH user's home directory instead of system paths:

  • Old Path: /opt/kiwy-signage
  • New Path: /home/[username]/kiwy-signage

Advantages:

  • No system administrator privileges required
  • User can manage and update their own player installation
  • Multiple users can each have their own player instance
  • Easier to backup and relocate player data

2. Automatic Configuration

When deploying a player, DigiServer automatically generates and deploys a config.json file with:

  • Player Identity: Name, ID, location
  • Server Connection Details: DigiServer URL and endpoints
  • Authentication: API key for secure communication
  • Playback Settings: Video/audio, resolution, refresh interval
  • Network Configuration: Timeouts and retry policies

3. Configuration File Structure

The generated config.json at /home/[user]/kiwy-signage/config.json:

{
  "player": {
    "name": "Lobby Screen",
    "id": "lobby-screen-01",
    "location": "Main Lobby",
    "version": "2.0"
  },
  "server": {
    "url": "http://digiserver-host/digiserver",
    "api_endpoint": "http://digiserver-host/digiserver/api",
    "authentication": {
      "type": "api_key",
      "key": "a1b2c3d4e5f6g7h8..."
    },
    "endpoints": {
      "playlists": "http://digiserver-host/digiserver/api/playlists",
      "content": "http://digiserver-host/digiserver/api/content",
      "schedule": "http://digiserver-host/digiserver/api/schedule",
      "heartbeat": "http://digiserver-host/digiserver/api/player/heartbeat",
      "logs": "http://digiserver-host/digiserver/api/player/logs"
    }
  },
  "playback": {
    "audio_enabled": true,
    "video_enabled": true,
    "max_resolution": "4K",
    "refresh_interval": 60,
    "rotation": "0"
  },
  "networking": {
    "timeout": 30,
    "retry_count": 3,
    "retry_delay": 5
  }
}

Deployment Workflow

Step 1: SSH Connection Test

User Input:
  - Hostname: 192.168.1.100 (or domain.com)
  - Port: 22
  - Username: player_user
  - Password: user_password

System:
  - Tests SSH connectivity
  - Verifies user credentials
  - Returns: ✓ Success or ✗ Error

Step 2: Player Configuration

User Input:
  - Player Name: "Lobby Screen"
  - Player Hostname: "lobby-1"
  - Location: "Main Lobby"
  - Quickconnect Code: (auto-generated if needed)
  - Password: (for player management)

System:
  - Creates player record in database
  - Generates Auth Code

Step 3: Deployment (Auto-triggered)

Backend Process:
  1. SSH to remote host
  2. Create /home/player_user/kiwy-signage directory
  3. Deploy Kiwy-Signage code via:
     - rsync (if pre-staged code available) ← Preferred
     - git clone (fallback)
  4. Generate config.json with server connection details
  5. Write config.json to deployment directory
  6. Run install script (if present)

Step 4: Result

Player is now:
  ✅ Deployed to /home/[user]/kiwy-signage
  ✅ Configured to connect to DigiServer
  ✅ Ready to receive playlists and content
  ✅ Can authenticate using config.json credentials

User receives:
  - Player Auth Code (for API authentication)
  - Deployment status (success/failure)
  - Next steps for player startup

API Key Generation

The system automatically generates a unique API key for each player:

# Generation algorithm
api_key = SHA256(f'{player_name}:{hostname}').hexdigest()[:32]

# Example:
# Input: "Lobby Screen" + "192.168.1.100"
# Output: "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"

This ensures:

  • Consistent key (same for same player/host combination)
  • Unique per player instance
  • Deterministic (can be regenerated if lost)

Server URL Detection

DigiServer automatically detects the correct URL using HTTP headers:

Priority (uses first available):
1. X-Forwarded-Proto + X-Forwarded-Host (if behind proxy)
2. Request scheme + host (direct connection)

Examples:
- http://localhost/digiserver
- http://192.168.1.50/digiserver
- https://digiserver.company.com

Player Requirements

System Requirements

  • Linux operating system (Ubuntu 20.04+ recommended)
  • SSH server with password authentication enabled
  • git and rsync installed (for deployment)
  • ~500MB+ disk space for code
  • Python 3.8+ (if player is Python-based)

Network Requirements

  • Access to DigiServer on HTTP/HTTPS ports
  • Outbound internet access for NTP (time synchronization)
  • Optional: NFS or SMB for shared content storage

User Requirements

  • Regular user account (non-root preferred)
  • Home directory exists and is writable
  • SSH access via password or key

Manual Configuration

If you need to manually configure a deployed player:

1. Connect to player host

ssh player_user@hostname
cd ~/kiwy-signage

2. Edit config.json

nano config.json

3. Modify any settings

  • Update server URL if DigiServer moved
  • Change player settings (resolution, refresh rate)
  • Adjust networking timeouts if needed

4. Restart player

./restart-player.sh
# or
systemctl restart kiwy-signage  # if installed as service

Troubleshooting

Deployment Failed: "SSH Connection Refused"

  • Check SSH service is running on remote host
  • Verify hostname/IP is correct
  • Confirm SSH port (default 22)
  • Check firewall allows SSH connections

Deployment Failed: "Directory Permission Denied"

  • Check /home/[user] directory exists
  • Verify user owns the directory
  • Run: chmod 755 /home/[user] if needed

Player Can't Connect to Server

  • Check config.json has correct server URL
  • Verify network connectivity from player to DigiServer
  • Check API key in config matches DigiServer database
  • Review DigiServer logs: docker logs edp-digiserver

"install.sh" not found

  • This is normal if repository doesn't include install script
  • Player deployment still succeeds
  • Manual setup may be required

rsync failed, using git clone instead

  • This is automatic fallback and works fine
  • Only happens if rsync not available on remote
  • Install rsync for faster deployments: apt install rsync

Performance Characteristics

With Pre-staged Code (rsync)

  • Time: 30-120 seconds
  • Network: 5-50MB
  • Method: Efficient file sync

Without Pre-staged Code (git clone)

  • Time: 2-5 minutes
  • Network: 50-200MB
  • Method: Full repository download

Security Considerations

  • SSH passwords transmitted over encrypted SSH
  • API keys generated from player identity
  • Config file stored locally on player
  • No passwords stored in config
  • ⚠️ Ensure SSH user has limited privileges
  • ⚠️ Restrict file permissions on player: chmod 700 ~/kiwy-signage

Next Steps

  1. Deploy First Player

  2. Verify Deployment

    • SSH to player host
    • Check: ls -la ~/kiwy-signage/
    • Check: cat ~/kiwy-signage/config.json
  3. Start Player Service

    • Follow player-specific startup guide
    • Verify connection to DigiServer
    • Monitor player logs
  4. Create Content

    • Upload media to DigiServer
    • Create playlists
    • Assign to players
    • Monitor playback via dashboard

API Reference

Deployment Endpoint

POST /api/deploy/player
Content-Type: application/json

{
  "hostname": "192.168.1.100",
  "username": "player_user",
  "password": "user_password",
  "player_name": "Lobby Screen",
  "port": 22,
  "deploy_path": null,  // Optional, defaults to /home/[user]/kiwy-signage
  "repo_url": "https://gitea.moto-adv.com/ske087/Kiwy-Signage.git"
}

Response

{
  "success": true,
  "message": "Deployment completed successfully",
  "timestamp": "2026-06-07T10:30:00",
  "steps": [
    {
      "step": "SSH Connection Test",
      "status": "completed",
      "message": "SSH connection successful",
      "timestamp": "2026-06-07T10:30:01"
    },
    {
      "step": "Create Deploy Directory",
      "status": "completed",
      "message": "Directory /home/player_user/kiwy-signage created",
      "timestamp": "2026-06-07T10:30:02"
    },
    {
      "step": "Deploy Code",
      "status": "completed",
      "message": "Code deployed via rsync",
      "timestamp": "2026-06-07T10:30:45"
    },
    {
      "step": "Configure Player",
      "status": "completed",
      "message": "Player configuration created",
      "timestamp": "2026-06-07T10:30:46"
    }
  ]
}

Summary

The new player deployment system provides:

  • 🎯 Automated Configuration: Player connects to DigiServer automatically
  • 📁 User-level Deployment: No system admin needed
  • 🚀 Fast Deployment: rsync for efficient transfers
  • 🔄 Intelligent Fallback: git clone if rsync unavailable
  • 🔐 Secure: SSH encryption + API keys
  • 📊 Monitoring: Track deployment steps and status

Players deployed with this system are immediately ready to receive playlists and content from DigiServer.