[{"data":1,"prerenderedAt":575},["ShallowReactive",2],{"docs-en-\u002Fdocs\u002Fdeployment\u002Fself-hosted":3},{"id":4,"title":5,"author":6,"body":7,"date":6,"description":568,"extension":569,"meta":570,"navigation":192,"path":571,"seo":572,"stem":573,"tags":6,"__hash__":574},"content_en\u002Fdocs\u002Fdeployment\u002Fself-hosted.md","Self-Hosted Deployment",null,{"type":8,"value":9,"toc":551},"minimark",[10,14,18,23,28,39,67,109,112,116,129,133,144,155,159,163,245,249,252,306,310,318,322,387,390,394,401,415,418,422,431,439,442,446,486,489,493,547],[11,12,5],"h1",{"id":13},"self-hosted-deployment",[15,16,17],"p",{},"Deploy xiboplayer with a self-hosted Xibo CMS.",[19,20,22],"h2",{"id":21},"cms-options","CMS options",[24,25,27],"h3",{"id":26},"recommended-xibo-cms-fork-docker","Recommended: xibo-cms fork (Docker)",[15,29,30,31,38],{},"Our ",[32,33,37],"a",{"href":34,"rel":35},"https:\u002F\u002Fgithub.com\u002Fxibo-players\u002Fxibo-cms",[36],"nofollow","xibo-cms fork"," is rebased daily on upstream — you get all upstream features, bug fixes, and security patches without delay. On top of that, the fork adds:",[40,41,42,50,56],"ul",{},[43,44,45,49],"li",{},[46,47,48],"strong",{},"REST API v2"," — JWT auth, ETag caching, ~30% smaller payloads than SOAP",[43,51,52,55],{},[46,53,54],{},"PWA player built into the CMS"," — no separate deployment needed",[43,57,58,66],{},[46,59,60,61,65],{},"No ",[62,63,64],"code",{},"ext-soap"," required"," — the #1 reason upstream CMS Docker deployments fail",[68,69,74],"pre",{"className":70,"code":71,"language":72,"meta":73,"style":73},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","# Pull and run our CMS fork\ndocker compose -f docker-compose.yml up -d\n","bash","",[62,75,76,85],{"__ignoreMap":73},[77,78,81],"span",{"class":79,"line":80},"line",1,[77,82,84],{"class":83},"sutJx","# Pull and run our CMS fork\n",[77,86,88,92,96,100,103,106],{"class":79,"line":87},2,[77,89,91],{"class":90},"sbgvK","docker",[77,93,95],{"class":94},"s_sjI"," compose",[77,97,99],{"class":98},"stzsN"," -f",[77,101,102],{"class":94}," docker-compose.yml",[77,104,105],{"class":94}," up",[77,107,108],{"class":98}," -d\n",[15,110,111],{},"The player auto-detects which transport the CMS supports and uses the best one available. Works with both our fork and upstream Xibo CMS.",[24,113,115],{"id":114},"alternative-upstream-xibo-cms","Alternative: upstream Xibo CMS",[15,117,118,119,122,123,128],{},"Any ",[46,120,121],{},"Xibo CMS v3 or v4"," works. Follow the ",[32,124,127],{"href":125,"rel":126},"https:\u002F\u002Fxibosignage.com\u002Fdocs\u002Fsetup\u002Fcms-installation",[36],"official installation guide",". The player falls back to SOAP when REST is unavailable.",[24,130,132],{"id":131},"requirements","Requirements",[40,134,135,138,141],{},[43,136,137],{},"Docker + Docker Compose",[43,139,140],{},"2GB+ RAM, 20GB+ storage",[43,142,143],{},"A domain name with HTTPS (required for PWA, recommended for all)",[15,145,146,147,150,151,154],{},"After setup, note your ",[46,148,149],{},"CMS URL"," and ",[46,152,153],{},"CMS Secret Key"," (Settings → Display Settings).",[19,156,158],{"id":157},"player-installation","Player installation",[24,160,162],{"id":161},"rpmdeb-packages","RPM\u002FDEB packages",[68,164,166],{"className":70,"code":165,"language":72,"meta":73,"style":73},"# Add the xiboplayer repository\nsudo dnf install https:\u002F\u002Fdl.xiboplayer.org\u002Frpm\u002Ffedora\u002F43\u002Fnoarch\u002Fxiboplayer-release-43-7.fc43.noarch.rpm\n\n# Install your preferred player\nsudo dnf install xiboplayer-electron    # Full-featured, bundles Chromium\nsudo dnf install xiboplayer-chromium    # Lightweight, uses system browser\nsudo dnf install xiboplayer-kiosk       # Auto-start kiosk meta-package\n",[62,167,168,173,187,194,200,215,230],{"__ignoreMap":73},[77,169,170],{"class":79,"line":80},[77,171,172],{"class":83},"# Add the xiboplayer repository\n",[77,174,175,178,181,184],{"class":79,"line":87},[77,176,177],{"class":90},"sudo",[77,179,180],{"class":94}," dnf",[77,182,183],{"class":94}," install",[77,185,186],{"class":94}," https:\u002F\u002Fdl.xiboplayer.org\u002Frpm\u002Ffedora\u002F43\u002Fnoarch\u002Fxiboplayer-release-43-7.fc43.noarch.rpm\n",[77,188,190],{"class":79,"line":189},3,[77,191,193],{"emptyLinePlaceholder":192},true,"\n",[77,195,197],{"class":79,"line":196},4,[77,198,199],{"class":83},"# Install your preferred player\n",[77,201,203,205,207,209,212],{"class":79,"line":202},5,[77,204,177],{"class":90},[77,206,180],{"class":94},[77,208,183],{"class":94},[77,210,211],{"class":94}," xiboplayer-electron",[77,213,214],{"class":83},"    # Full-featured, bundles Chromium\n",[77,216,218,220,222,224,227],{"class":79,"line":217},6,[77,219,177],{"class":90},[77,221,180],{"class":94},[77,223,183],{"class":94},[77,225,226],{"class":94}," xiboplayer-chromium",[77,228,229],{"class":83},"    # Lightweight, uses system browser\n",[77,231,233,235,237,239,242],{"class":79,"line":232},7,[77,234,177],{"class":90},[77,236,180],{"class":94},[77,238,183],{"class":94},[77,240,241],{"class":94}," xiboplayer-kiosk",[77,243,244],{"class":83},"       # Auto-start kiosk meta-package\n",[24,246,248],{"id":247},"pwa-browser-based","PWA (browser-based)",[15,250,251],{},"The PWA must be served from the same domain as the CMS:",[68,253,255],{"className":70,"code":254,"language":72,"meta":73,"style":73},"git clone https:\u002F\u002Fgithub.com\u002Fxibo-players\u002Fxiboplayer.git\ncd xiboplayer && pnpm install\npnpm --filter @xiboplayer\u002Fpwa build\n# Deploy dist\u002F to your CMS web root\n",[62,256,257,268,287,301],{"__ignoreMap":73},[77,258,259,262,265],{"class":79,"line":80},[77,260,261],{"class":90},"git",[77,263,264],{"class":94}," clone",[77,266,267],{"class":94}," https:\u002F\u002Fgithub.com\u002Fxibo-players\u002Fxiboplayer.git\n",[77,269,270,274,277,281,284],{"class":79,"line":87},[77,271,273],{"class":272},"sptTA","cd",[77,275,276],{"class":94}," xiboplayer",[77,278,280],{"class":279},"sP7_E"," &&",[77,282,283],{"class":90}," pnpm",[77,285,286],{"class":94}," install\n",[77,288,289,292,295,298],{"class":79,"line":189},[77,290,291],{"class":90},"pnpm",[77,293,294],{"class":98}," --filter",[77,296,297],{"class":94}," @xiboplayer\u002Fpwa",[77,299,300],{"class":94}," build\n",[77,302,303],{"class":79,"line":196},[77,304,305],{"class":83},"# Deploy dist\u002F to your CMS web root\n",[24,307,309],{"id":308},"kiosk-image","Kiosk image",[15,311,312,313,317],{},"Download a pre-built ISO from ",[32,314,316],{"href":315},"\u002Fdownloads","Downloads",". Flash to USB\u002FSD, boot, and the player auto-starts.",[19,319,321],{"id":320},"network-requirements","Network requirements",[323,324,325,341],"table",{},[326,327,328],"thead",{},[329,330,331,335,338],"tr",{},[332,333,334],"th",{},"Port",[332,336,337],{},"Protocol",[332,339,340],{},"Purpose",[342,343,344,356,366,376],"tbody",{},[329,345,346,350,353],{},[347,348,349],"td",{},"443",[347,351,352],{},"TCP",[347,354,355],{},"HTTPS to CMS",[329,357,358,361,363],{},[347,359,360],{},"9505",[347,362,352],{},[347,364,365],{},"XMR push commands (CMS → player)",[329,367,368,371,373],{},[347,369,370],{},"8765\u002F8766",[347,372,352],{},[347,374,375],{},"Local proxy (LAN only, for video walls)",[329,377,378,381,384],{},[347,379,380],{},"5353",[347,382,383],{},"UDP",[347,385,386],{},"mDNS sync discovery (LAN only)",[15,388,389],{},"All player-to-CMS communication uses HTTPS. XMR is initiated by the player as an outbound WebSocket upgrade.",[19,391,393],{"id":392},"cors-proxy","CORS proxy",[15,395,396,397,400],{},"Electron and Chromium include a built-in CORS proxy (",[62,398,399],{},"@xiboplayer\u002Fproxy",") that:",[40,402,403,406,409,412],{},[43,404,405],{},"Forwards XMDS\u002FREST API calls to the CMS",[43,407,408],{},"Downloads media with Range support",[43,410,411],{},"Serves the PWA as static files",[43,413,414],{},"Hosts the WebSocket sync relay for video walls",[15,416,417],{},"No manual proxy configuration needed for single-display setups.",[19,419,421],{"id":420},"reverse-proxy-optional","Reverse proxy (optional)",[15,423,424,425,430],{},"For HTTPS termination, use ",[32,426,429],{"href":427,"rel":428},"https:\u002F\u002Fgithub.com\u002Flinuxserver\u002Fdocker-swag",[36],"SWAG"," or nginx in front of the CMS:",[68,432,437],{"className":433,"code":435,"language":436},[434],"language-text","Internet → SWAG (HTTPS:443) → Xibo CMS (HTTP:80)\n","text",[62,438,435],{"__ignoreMap":73},[15,440,441],{},"SWAG provides automatic Let's Encrypt certificates and production-grade nginx.",[19,443,445],{"id":444},"auto-start","Auto-start",[68,447,449],{"className":70,"code":448,"language":72,"meta":73,"style":73},"# Enable player auto-start\nsystemctl --user enable xiboplayer-electron.service\n# or\nsystemctl --user enable xiboplayer-chromium.service\n",[62,450,451,456,470,475],{"__ignoreMap":73},[77,452,453],{"class":79,"line":80},[77,454,455],{"class":83},"# Enable player auto-start\n",[77,457,458,461,464,467],{"class":79,"line":87},[77,459,460],{"class":90},"systemctl",[77,462,463],{"class":98}," --user",[77,465,466],{"class":94}," enable",[77,468,469],{"class":94}," xiboplayer-electron.service\n",[77,471,472],{"class":79,"line":189},[77,473,474],{"class":83},"# or\n",[77,476,477,479,481,483],{"class":79,"line":196},[77,478,460],{"class":90},[77,480,463],{"class":98},[77,482,466],{"class":94},[77,484,485],{"class":94}," xiboplayer-chromium.service\n",[15,487,488],{},"Kiosk images auto-start by default.",[19,490,492],{"id":491},"file-locations","File locations",[323,494,495,505],{},[326,496,497],{},[329,498,499,502],{},[332,500,501],{},"Item",[332,503,504],{},"Path",[342,506,507,517,527,537],{},[329,508,509,512],{},[347,510,511],{},"Electron config",[347,513,514],{},[62,515,516],{},"~\u002F.config\u002Fxiboplayer\u002Felectron\u002Fconfig.json",[329,518,519,522],{},[347,520,521],{},"Chromium config",[347,523,524],{},[62,525,526],{},"~\u002F.config\u002Fxiboplayer\u002Fchromium\u002Fconfig.json",[329,528,529,532],{},[347,530,531],{},"Content cache",[347,533,534],{},[62,535,536],{},"~\u002F.local\u002Fshare\u002Fxiboplayer\u002Fshared\u002Fcache\u002F",[329,538,539,542],{},[347,540,541],{},"Player logs",[347,543,544],{},[62,545,546],{},"journalctl --user -u xiboplayer-electron -f",[548,549,550],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":73,"searchDepth":189,"depth":189,"links":552},[553,558,563,564,565,566,567],{"id":21,"depth":87,"text":22,"children":554},[555,556,557],{"id":26,"depth":189,"text":27},{"id":114,"depth":189,"text":115},{"id":131,"depth":189,"text":132},{"id":157,"depth":87,"text":158,"children":559},[560,561,562],{"id":161,"depth":189,"text":162},{"id":247,"depth":189,"text":248},{"id":308,"depth":189,"text":309},{"id":320,"depth":87,"text":321},{"id":392,"depth":87,"text":393},{"id":420,"depth":87,"text":421},{"id":444,"depth":87,"text":445},{"id":491,"depth":87,"text":492},"Deploy xiboplayer with your own Xibo CMS","md",{"order":80},"\u002Fdocs\u002Fdeployment\u002Fself-hosted",{"title":5,"description":568},"docs\u002Fdeployment\u002Fself-hosted","1vJdlQ7JeyJ9yWIv8eFLwlBWpC2ouhzuAPb1vKa9F5w",1775148109576]