[{"data":1,"prerenderedAt":1339},["ShallowReactive",2],{"navigation_docs_en":3,"-en-installation-prepare-host":408,"-en-installation-prepare-host-surround":1334},[4,25,74,124,238,253,313,342,388],{"title":5,"path":6,"stem":7,"children":8,"page":24},"Getting Started","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[9,14,19],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Quickstart","\u002Fen\u002Fgetting-started\u002Fquickstart","en\u002F1.getting-started\u002F2.quickstart","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Concepts","\u002Fen\u002Fgetting-started\u002Fconcepts","en\u002F1.getting-started\u002F3.concepts","i-lucide-book-open",false,{"title":26,"path":27,"stem":28,"children":29,"page":24},"Live Production","\u002Fen\u002Flive-production","en\u002F2.live-production",[30,35,55,60],{"title":31,"path":32,"stem":33,"icon":34},"On air","\u002Fen\u002Flive-production\u002Fon-air","en\u002F2.live-production\u002F1.on-air","i-lucide-radio",{"title":36,"path":37,"stem":38,"children":39,"page":24},"Live Streams","\u002Fen\u002Flive-production\u002Flive-streams","en\u002F2.live-production\u002F2.live-streams",[40,45,50],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Fen\u002Flive-production\u002Flive-streams\u002Foverview","en\u002F2.live-production\u002F2.live-streams\u002F1.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Options","\u002Fen\u002Flive-production\u002Flive-streams\u002Flive-stream-options","en\u002F2.live-production\u002F2.live-streams\u002F2.live-stream-options","i-lucide-file-text",{"title":51,"path":52,"stem":53,"icon":54},"Start and stop","\u002Fen\u002Flive-production\u002Flive-streams\u002Fstart-stop","en\u002F2.live-production\u002F2.live-streams\u002F3.start-stop","i-lucide-play-circle",{"title":56,"path":57,"stem":58,"icon":59},"Scheduler","\u002Fen\u002Flive-production\u002Fscheduler","en\u002F2.live-production\u002F3.scheduler","i-lucide-calendar-clock",{"title":61,"path":62,"stem":63,"children":64,"page":24},"Recordings","\u002Fen\u002Flive-production\u002Frecordings","en\u002F2.live-production\u002F4.recordings",[65,69],{"title":41,"path":66,"stem":67,"icon":68},"\u002Fen\u002Flive-production\u002Frecordings\u002Foverview","en\u002F2.live-production\u002F4.recordings\u002F1.overview","i-lucide-circle-dot",{"title":70,"path":71,"stem":72,"icon":73},"Editor","\u002Fen\u002Flive-production\u002Frecordings\u002Feditor","en\u002F2.live-production\u002F4.recordings\u002F2.editor","i-lucide-scissors",{"title":75,"path":76,"stem":77,"children":78,"page":24},"Configuration","\u002Fen\u002Fconfiguration","en\u002F3.configuration",[79,93,98,111],{"title":80,"path":81,"stem":82,"children":83,"page":24},"Devices","\u002Fen\u002Fconfiguration\u002Fdevices","en\u002F3.configuration\u002F1.devices",[84,88],{"title":80,"path":85,"stem":86,"icon":87},"\u002Fen\u002Fconfiguration\u002Fdevices\u002Fdevices","en\u002F3.configuration\u002F1.devices\u002F1.devices","i-lucide-server",{"title":89,"path":90,"stem":91,"icon":92},"Groups","\u002Fen\u002Fconfiguration\u002Fdevices\u002Fgroups","en\u002F3.configuration\u002F1.devices\u002F2.groups","i-lucide-network",{"title":94,"path":95,"stem":96,"icon":97},"Sources","\u002Fen\u002Fconfiguration\u002Fsources","en\u002F3.configuration\u002F2.sources","i-lucide-cable",{"title":99,"path":100,"stem":101,"children":102,"page":24},"Encodings","\u002Fen\u002Fconfiguration\u002Fencodings","en\u002F3.configuration\u002F3.encodings",[103,107],{"title":99,"path":104,"stem":105,"icon":106},"\u002Fen\u002Fconfiguration\u002Fencodings\u002Fprofiles","en\u002F3.configuration\u002F3.encodings\u002F1.profiles","i-lucide-sliders-horizontal",{"title":89,"path":108,"stem":109,"icon":110},"\u002Fen\u002Fconfiguration\u002Fencodings\u002Fgroups","en\u002F3.configuration\u002F3.encodings\u002F2.groups","i-lucide-layers",{"title":112,"path":113,"stem":114,"children":115,"page":24},"Destinations","\u002Fen\u002Fconfiguration\u002Fdestinations","en\u002F3.configuration\u002F4.destinations",[116,120],{"title":112,"path":117,"stem":118,"icon":119},"\u002Fen\u002Fconfiguration\u002Fdestinations\u002Fdestinations","en\u002F3.configuration\u002F4.destinations\u002F1.destinations","i-lucide-send",{"title":89,"path":121,"stem":122,"icon":123},"\u002Fen\u002Fconfiguration\u002Fdestinations\u002Fpublishing-groups","en\u002F3.configuration\u002F4.destinations\u002F2.publishing-groups","i-lucide-share-2",{"title":125,"path":126,"stem":127,"children":128,"page":24},"Settings","\u002Fen\u002Fsettings","en\u002F4.settings",[129,142,147,163,179],{"title":130,"path":131,"stem":132,"children":133,"page":24},"Users","\u002Fen\u002Fsettings\u002Fusers","en\u002F4.settings\u002F1.users",[134,138],{"title":130,"path":135,"stem":136,"icon":137},"\u002Fen\u002Fsettings\u002Fusers\u002Fusers","en\u002F4.settings\u002F1.users\u002F1.users","i-lucide-user",{"title":89,"path":139,"stem":140,"icon":141},"\u002Fen\u002Fsettings\u002Fusers\u002Fuser-groups","en\u002F4.settings\u002F1.users\u002F2.user-groups","i-lucide-users",{"title":143,"path":144,"stem":145,"icon":146},"Security","\u002Fen\u002Fsettings\u002Fsecurity","en\u002F4.settings\u002F2.security","i-lucide-shield",{"title":148,"icon":149,"path":150,"stem":151,"children":152,"page":24},"Assets","i-lucide-image","\u002Fen\u002Fsettings\u002Fassets","en\u002F4.settings\u002F3.assets",[153,158],{"title":154,"path":155,"stem":156,"icon":157},"Logos","\u002Fen\u002Fsettings\u002Fassets\u002Flogos","en\u002F4.settings\u002F3.assets\u002F1.logos","i-lucide-images",{"title":159,"path":160,"stem":161,"icon":162},"Files","\u002Fen\u002Fsettings\u002Fassets\u002Ffiles","en\u002F4.settings\u002F3.assets\u002F2.files","i-lucide-clapperboard",{"title":164,"icon":165,"path":166,"stem":167,"children":168,"page":24},"External Storage","i-lucide-folder-cog","\u002Fen\u002Fsettings\u002Fexternal-storage","en\u002F4.settings\u002F4.external-storage",[169,174],{"title":170,"path":171,"stem":172,"icon":173},"Remote Folders","\u002Fen\u002Fsettings\u002Fexternal-storage\u002Fremote-folders","en\u002F4.settings\u002F4.external-storage\u002F1.remote-folders","i-lucide-folder-archive",{"title":175,"path":176,"stem":177,"icon":178},"Target Folders","\u002Fen\u002Fsettings\u002Fexternal-storage\u002Ftarget-folders","en\u002F4.settings\u002F4.external-storage\u002F2.target-folders","i-lucide-folder-up",{"title":180,"path":181,"stem":182,"children":183,"page":24},"Integrations","\u002Fen\u002Fsettings\u002Fintegrations","en\u002F4.settings\u002F5.integrations",[184,188,193,207],{"title":41,"path":185,"stem":186,"icon":187},"\u002Fen\u002Fsettings\u002Fintegrations\u002Foverview","en\u002F4.settings\u002F5.integrations\u002F1.overview","i-lucide-plug",{"title":189,"path":190,"stem":191,"icon":192},"MediaCopilot","\u002Fen\u002Fsettings\u002Fintegrations\u002Fmediacopilot","en\u002F4.settings\u002F5.integrations\u002F2.mediacopilot","i-lucide-sparkles",{"title":194,"icon":195,"path":196,"stem":197,"children":198,"page":24},"C21 Live Cloud","i-lucide-cloud","\u002Fen\u002Fsettings\u002Fintegrations\u002Fc21livecloud","en\u002F4.settings\u002F5.integrations\u002F3.c21livecloud",[199,202],{"title":41,"path":200,"stem":201,"icon":195},"\u002Fen\u002Fsettings\u002Fintegrations\u002Fc21livecloud\u002Foverview","en\u002F4.settings\u002F5.integrations\u002F3.c21livecloud\u002F1.overview",{"title":203,"path":204,"stem":205,"icon":206},"Accounts","\u002Fen\u002Fsettings\u002Fintegrations\u002Fc21livecloud\u002Faccounts","en\u002F4.settings\u002F5.integrations\u002F3.c21livecloud\u002F2.accounts","i-lucide-key-round",{"title":208,"icon":146,"path":209,"stem":210,"children":211,"page":24},"DRM Providers","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm","en\u002F4.settings\u002F5.integrations\u002F4.drm",[212,216,220,224,228,233],{"title":41,"path":213,"stem":214,"icon":215},"\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Foverview","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F1.overview","i-lucide-shield-check",{"title":217,"path":218,"stem":219,"icon":146},"Widevine","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fwidevine","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F2.widevine",{"title":221,"path":222,"stem":223,"icon":146},"PlayReady","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fplayready","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F3.playready",{"title":225,"path":226,"stem":227,"icon":146},"FairPlay","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Ffairplay","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F4.fairplay",{"title":229,"path":230,"stem":231,"icon":232},"Providers","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fproviders","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F5.providers","i-lucide-shield-half",{"title":234,"path":235,"stem":236,"icon":237},"Workflow","\u002Fen\u002Fsettings\u002Fintegrations\u002Fdrm\u002Fworkflow","en\u002F4.settings\u002F5.integrations\u002F4.drm\u002F6.workflow","i-lucide-workflow",{"title":239,"path":240,"stem":241,"children":242,"page":24},"System Status","\u002Fen\u002Fsystem-status","en\u002F5.system-status",[243,248],{"title":244,"path":245,"stem":246,"icon":247},"Commands","\u002Fen\u002Fsystem-status\u002Fcommands","en\u002F5.system-status\u002F1.commands","i-lucide-square-terminal",{"title":249,"path":250,"stem":251,"icon":252},"Logs","\u002Fen\u002Fsystem-status\u002Flogs","en\u002F5.system-status\u002F2.logs","i-lucide-scroll-text",{"title":254,"path":255,"stem":256,"children":257,"page":24},"How Tos","\u002Fen\u002Fhow-tos","en\u002F6.how-tos",[258,263,268,273,277,281,285,290,294,299,304,309],{"title":259,"path":260,"stem":261,"icon":262},"Start and stop a Live stream","\u002Fen\u002Fhow-tos\u002Fstart-stream-via-api","en\u002F6.how-tos\u002F1.start-stream-via-api","i-lucide-terminal",{"title":264,"path":265,"stem":266,"icon":267},"Ingest a YouTube Live broadcast","\u002Fen\u002Fhow-tos\u002Fingest-youtube-live","en\u002F6.how-tos\u002F10.ingest-youtube-live","i-lucide-youtube",{"title":269,"path":270,"stem":271,"icon":272},"Source Synchronized Encoding (SSE) — bit-identical redundancy","\u002Fen\u002Fhow-tos\u002Fsource-synchronized-encoding","en\u002F6.how-tos\u002F11.source-synchronized-encoding","i-lucide-copy-check",{"title":274,"path":275,"stem":276,"icon":34},"Broadcast radio as video","\u002Fen\u002Fhow-tos\u002Fbroadcast-radio-as-video","en\u002F6.how-tos\u002F12.broadcast-radio-as-video",{"title":278,"path":279,"stem":280,"icon":215},"Protect a Live stream with multi-DRM","\u002Fen\u002Fhow-tos\u002Fmulti-drm-destination","en\u002F6.how-tos\u002F2.multi-drm-destination",{"title":282,"path":283,"stem":284,"icon":59},"Schedule a weekly recurring broadcast","\u002Fen\u002Fhow-tos\u002Fweekly-recurring-broadcast","en\u002F6.how-tos\u002F3.weekly-recurring-broadcast",{"title":286,"path":287,"stem":288,"icon":289},"Cut a clip in the Editor and send it to MediaCopilot","\u002Fen\u002Fhow-tos\u002Fexport-recording-to-mediacopilot","en\u002F6.how-tos\u002F4.export-recording-to-mediacopilot","i-lucide-upload-cloud",{"title":291,"path":292,"stem":293,"icon":149},"Apply a logo overlay to a running Live stream","\u002Fen\u002Fhow-tos\u002Fapply-logo-overlay","en\u002F6.how-tos\u002F5.apply-logo-overlay",{"title":295,"path":296,"stem":297,"icon":298},"Black out or replace the program on a running Live stream","\u002Fen\u002Fhow-tos\u002Fbroadcast-blackout","en\u002F6.how-tos\u002F6.broadcast-blackout","i-lucide-square",{"title":300,"path":301,"stem":302,"icon":303},"Switch the source of a running Live stream","\u002Fen\u002Fhow-tos\u002Fruntime-source-switch","en\u002F6.how-tos\u002F7.runtime-source-switch","i-lucide-repeat-2",{"title":305,"path":306,"stem":307,"icon":308},"Toggle a Publishing mid-broadcast","\u002Fen\u002Fhow-tos\u002Ftoggle-publishing-mid-broadcast","en\u002F6.how-tos\u002F8.toggle-publishing-mid-broadcast","i-lucide-toggle-right",{"title":310,"path":311,"stem":312,"icon":34},"Contribute a live signal to MediaCopilot Live","\u002Fen\u002Fhow-tos\u002Fcontribute-to-mediacopilot-live","en\u002F6.how-tos\u002F9.contribute-to-mediacopilot-live",{"title":314,"path":315,"stem":316,"children":317,"page":24},"Installation","\u002Fen\u002Finstallation","en\u002F7.installation",[318,323,328,333,338],{"title":319,"path":320,"stem":321,"icon":322},"Prepare the host","\u002Fen\u002Finstallation\u002Fprepare-host","en\u002F7.installation\u002F1.prepare-host","i-lucide-server-cog",{"title":324,"path":325,"stem":326,"icon":327},"Install C21 Live Control","\u002Fen\u002Finstallation\u002Fcontrol","en\u002F7.installation\u002F2.control","i-lucide-cloud-download",{"title":329,"path":330,"stem":331,"icon":332},"Install C21 Live Encoder","\u002Fen\u002Finstallation\u002Fencoder","en\u002F7.installation\u002F3.encoder","i-lucide-cpu",{"title":334,"path":335,"stem":336,"icon":337},"Updates","\u002Fen\u002Finstallation\u002Fupdates","en\u002F7.installation\u002F4.updates","i-lucide-refresh-cw",{"title":339,"path":340,"stem":341,"icon":206},"Licenses","\u002Fen\u002Finstallation\u002Flicenses","en\u002F7.installation\u002F5.licenses",{"title":343,"path":344,"stem":345,"children":346,"page":24},"Developers","\u002Fen\u002Fdevelopers","en\u002F8.developers",[347,351,369],{"title":41,"path":348,"stem":349,"icon":350},"\u002Fen\u002Fdevelopers\u002Foverview","en\u002F8.developers\u002F1.overview","i-lucide-code",{"title":352,"icon":350,"path":353,"stem":354,"children":355,"page":24},"API","\u002Fen\u002Fdevelopers\u002Fapi","en\u002F8.developers\u002F2.api",[356,359,364],{"title":41,"path":357,"stem":358,"icon":350},"\u002Fen\u002Fdevelopers\u002Fapi\u002Foverview","en\u002F8.developers\u002F2.api\u002F1.overview",{"title":360,"path":361,"stem":362,"icon":363},"Authentication","\u002Fen\u002Fdevelopers\u002Fapi\u002Fauthentication","en\u002F8.developers\u002F2.api\u002F2.authentication","i-lucide-key",{"title":365,"path":366,"stem":367,"icon":368},"Pagination and Errors","\u002Fen\u002Fdevelopers\u002Fapi\u002Fpagination-errors","en\u002F8.developers\u002F2.api\u002F3.pagination-errors","i-lucide-list-ordered",{"title":370,"icon":371,"path":372,"stem":373,"children":374,"page":24},"MCP Server","i-lucide-bot","\u002Fen\u002Fdevelopers\u002Fmcp-server","en\u002F8.developers\u002F3.mcp-server",[375,378,383],{"title":41,"path":376,"stem":377,"icon":371},"\u002Fen\u002Fdevelopers\u002Fmcp-server\u002Foverview","en\u002F8.developers\u002F3.mcp-server\u002F1.overview",{"title":379,"path":380,"stem":381,"icon":382},"Tools","\u002Fen\u002Fdevelopers\u002Fmcp-server\u002Ftools","en\u002F8.developers\u002F3.mcp-server\u002F2.tools","i-lucide-wrench",{"title":384,"path":385,"stem":386,"icon":387},"Examples","\u002Fen\u002Fdevelopers\u002Fmcp-server\u002Fexamples","en\u002F8.developers\u002F3.mcp-server\u002F3.examples","i-lucide-play",{"title":389,"path":390,"stem":391,"children":392,"page":24},"Resources","\u002Fen\u002Fresources","en\u002F9.resources",[393,398,403],{"title":394,"path":395,"stem":396,"icon":397},"Links","\u002Fen\u002Fresources\u002Flinks","en\u002F9.resources\u002F1.links","i-lucide-link",{"title":399,"path":400,"stem":401,"icon":402},"Release Notes","\u002Fen\u002Fresources\u002Frelease-notes","en\u002F9.resources\u002F2.release-notes","i-lucide-clipboard-list",{"title":404,"path":405,"stem":406,"icon":407},"Glossary","\u002Fen\u002Fresources\u002Fglossary","en\u002F9.resources\u002F3.glossary","i-lucide-book-a",{"id":409,"title":319,"body":410,"description":1327,"extension":1328,"links":1329,"meta":1330,"navigation":1331,"path":320,"seo":1332,"stem":321,"__hash__":1333},"docs_en\u002Fen\u002F7.installation\u002F1.prepare-host.md",{"type":411,"value":412,"toc":1317},"minimark",[413,417,425,430,532,535,539,542,566,581,585,588,705,708,712,718,725,791,806,813,816,1177,1187,1191,1194,1281,1288,1292,1295,1313],[414,415,416],"p",{},"The installers expect the host to be in a known starting state. This page describes the prerequisites and provides copy-pasteable commands that satisfy them on a stock Ubuntu 22.04 \u002F 24.04 LTS host.",[414,418,419,420,424],{},"Run every step on every host ",[421,422,423],"strong",{},"before"," the installer. Both products share most of the prerequisites; the differences are called out where they apply.",[426,427,429],"h2",{"id":428},"_1-platform","1. Platform",[431,432,433,448],"table",{},[434,435,436],"thead",{},[437,438,439,442,445],"tr",{},[440,441],"th",{},[440,443,444],{},"Control",[440,446,447],{},"Encoder",[449,450,451,463,474,484,495,506,521],"tbody",{},[437,452,453,457,460],{},[454,455,456],"td",{},"Operating system",[454,458,459],{},"Ubuntu 22.04 LTS or 24.04 LTS",[454,461,462],{},"Ubuntu 24.04 LTS",[437,464,465,468,471],{},[454,466,467],{},"Kernel",[454,469,470],{},"any",[454,472,473],{},"≥ 6.8",[437,475,476,479,482],{},[454,477,478],{},"Architecture",[454,480,481],{},"x86_64",[454,483,481],{},[437,485,486,489,492],{},[454,487,488],{},"CPU",[454,490,491],{},"2 cores minimum, 4+ recommended",[454,493,494],{},"4 cores minimum, 8+ recommended",[437,496,497,500,503],{},[454,498,499],{},"RAM",[454,501,502],{},"4 GiB minimum, 8+ GiB recommended",[454,504,505],{},"8 GiB minimum, 16+ GiB recommended",[437,507,508,515,518],{},[454,509,510,511],{},"Disk free on ",[512,513,514],"code",{},"\u002F",[454,516,517],{},"20 GiB",[454,519,520],{},"50 GiB (more if recordings stay local)",[437,522,523,526,529],{},[454,524,525],{},"Swap",[454,527,528],{},"recommend ≥ 4 GiB on hosts with \u003C 8 GiB RAM",[454,530,531],{},"recommend ≥ 4 GiB on hosts with \u003C 16 GiB RAM",[414,533,534],{},"Both products run on Ubuntu Pro without changes if your security policy requires it.",[426,536,538],{"id":537},"_2-outbound-network","2. Outbound network",[414,540,541],{},"The installer downloads from CloudFront and Docker Hub. The host needs HTTPS egress to:",[543,544,545,551],"ul",{},[546,547,548],"li",{},[512,549,550],{},"https:\u002F\u002Fget.cires21.com\u002F*",[546,552,553,556,557,556,560,556,563],{},[512,554,555],{},"https:\u002F\u002Fhub.docker.com\u002F*",", ",[512,558,559],{},"https:\u002F\u002Fregistry-1.docker.io\u002F*",[512,561,562],{},"https:\u002F\u002Fauth.docker.io\u002F*",[512,564,565],{},"https:\u002F\u002Fproduction.cloudflare.docker.com\u002F*",[414,567,568,569,572,573,576,577,580],{},"If you operate behind a corporate proxy, allow-list the above and set ",[512,570,571],{},"https_proxy"," \u002F ",[512,574,575],{},"http_proxy"," for your interactive shell and the ",[512,578,579],{},"sudo -E"," environment.",[426,582,584],{"id":583},"_3-dns-public-resolver","3. DNS — public resolver",[414,586,587],{},"Add a public resolver so the host can reach the Docker registry and the bootstrap CDN.",[589,590,595],"pre",{"className":591,"code":592,"language":593,"meta":594,"style":594},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo mkdir -p \u002Fetc\u002Fsystemd\u002Fresolved.conf.d\nsudo tee \u002Fetc\u002Fsystemd\u002Fresolved.conf.d\u002Fgoogle.conf >\u002Fdev\u002Fnull \u003C\u003CEOF\n[Resolve]\nDNS=8.8.8.8 8.8.4.4\nFallbackDNS=\nDNSStubListener=yes\nEOF\nsudo systemctl restart systemd-resolved\ngetent hosts get.cires21.com\ngetent hosts hub.docker.com\n","bash","",[512,596,597,616,640,646,652,658,664,669,683,695],{"__ignoreMap":594},[598,599,602,606,610,613],"span",{"class":600,"line":601},"line",1,[598,603,605],{"class":604},"sBMFI","sudo",[598,607,609],{"class":608},"sfazB"," mkdir",[598,611,612],{"class":608}," -p",[598,614,615],{"class":608}," \u002Fetc\u002Fsystemd\u002Fresolved.conf.d\n",[598,617,619,621,624,627,631,634,637],{"class":600,"line":618},2,[598,620,605],{"class":604},[598,622,623],{"class":608}," tee",[598,625,626],{"class":608}," \u002Fetc\u002Fsystemd\u002Fresolved.conf.d\u002Fgoogle.conf",[598,628,630],{"class":629},"sMK4o"," >",[598,632,633],{"class":608},"\u002Fdev\u002Fnull",[598,635,636],{"class":629}," \u003C\u003C",[598,638,639],{"class":629},"EOF\n",[598,641,643],{"class":600,"line":642},3,[598,644,645],{"class":608},"[Resolve]\n",[598,647,649],{"class":600,"line":648},4,[598,650,651],{"class":608},"DNS=8.8.8.8 8.8.4.4\n",[598,653,655],{"class":600,"line":654},5,[598,656,657],{"class":608},"FallbackDNS=\n",[598,659,661],{"class":600,"line":660},6,[598,662,663],{"class":608},"DNSStubListener=yes\n",[598,665,667],{"class":600,"line":666},7,[598,668,639],{"class":629},[598,670,672,674,677,680],{"class":600,"line":671},8,[598,673,605],{"class":604},[598,675,676],{"class":608}," systemctl",[598,678,679],{"class":608}," restart",[598,681,682],{"class":608}," systemd-resolved\n",[598,684,686,689,692],{"class":600,"line":685},9,[598,687,688],{"class":604},"getent",[598,690,691],{"class":608}," hosts",[598,693,694],{"class":608}," get.cires21.com\n",[598,696,698,700,702],{"class":600,"line":697},10,[598,699,688],{"class":604},[598,701,691],{"class":608},[598,703,704],{"class":608}," hub.docker.com\n",[414,706,707],{},"Substitute your own resolvers if your network has a stricter policy. Cloud VMs usually need this drop-in because they ship with the VPC resolver only.",[426,709,711],{"id":710},"_4-ntp-accurate-time","4. NTP — accurate time",[414,713,714,715,717],{},"Docker registry TLS handshakes fail on clock skew. Set NTP ",[421,716,423],{}," the installer.",[414,719,720,721,724],{},"Ubuntu Server cloud images ship with ",[512,722,723],{},"chrony"," active by default. Add the Cires21 NTP pool to the existing chrony configuration:",[589,726,728],{"className":591,"code":727,"language":593,"meta":594,"style":594},"sudo timedatectl set-timezone Europe\u002FMadrid\nsudo tee \u002Fetc\u002Fchrony\u002Fsources.d\u002Fcires21.sources >\u002Fdev\u002Fnull \u003C\u003CEOF\npool hora.cires21.com iburst maxsources 4\nEOF\nsudo systemctl restart chrony\nchronyc sources -v\n",[512,729,730,743,760,765,769,780],{"__ignoreMap":594},[598,731,732,734,737,740],{"class":600,"line":601},[598,733,605],{"class":604},[598,735,736],{"class":608}," timedatectl",[598,738,739],{"class":608}," set-timezone",[598,741,742],{"class":608}," Europe\u002FMadrid\n",[598,744,745,747,749,752,754,756,758],{"class":600,"line":618},[598,746,605],{"class":604},[598,748,623],{"class":608},[598,750,751],{"class":608}," \u002Fetc\u002Fchrony\u002Fsources.d\u002Fcires21.sources",[598,753,630],{"class":629},[598,755,633],{"class":608},[598,757,636],{"class":629},[598,759,639],{"class":629},[598,761,762],{"class":600,"line":642},[598,763,764],{"class":608},"pool hora.cires21.com iburst maxsources 4\n",[598,766,767],{"class":600,"line":648},[598,768,639],{"class":629},[598,770,771,773,775,777],{"class":600,"line":654},[598,772,605],{"class":604},[598,774,676],{"class":608},[598,776,679],{"class":608},[598,778,779],{"class":608}," chrony\n",[598,781,782,785,788],{"class":600,"line":660},[598,783,784],{"class":604},"chronyc",[598,786,787],{"class":608}," sources",[598,789,790],{"class":608}," -v\n",[414,792,793,794,797,798,801,802,805],{},"On hosts that ship with ",[512,795,796],{},"systemd-timesyncd"," instead of chrony, the equivalent drop-in is ",[512,799,800],{},"\u002Fetc\u002Fsystemd\u002Ftimesyncd.conf.d\u002Fcires21.conf"," with ",[512,803,804],{},"NTP=hora.cires21.com",". The host needs to be within a few seconds of real time before the installer runs.",[426,807,809,810],{"id":808},"_5-firewall-ufw","5. Firewall — ",[512,811,812],{},"ufw",[414,814,815],{},"Apply rules in this order to avoid locking yourself out of SSH:",[589,817,819],{"className":591,"code":818,"language":593,"meta":594,"style":594},"sudo apt-get update -qq\nsudo apt-get install -y ufw\n\nsudo ufw default deny incoming\nsudo ufw default allow outgoing\nsudo ufw allow 22\u002Ftcp comment 'SSH'\n\n# Control host only — the operator UI + the API + the WebSocket relay + the MCP server\nsudo ufw allow 9080\u002Ftcp comment 'Control HTTP (redirects to HTTPS)'\nsudo ufw allow 9443\u002Ftcp comment 'Control HTTPS UI'\nsudo ufw allow 3000\u002Ftcp comment 'Control NOC WebSocket relay'\nsudo ufw allow 3100\u002Ftcp comment 'Control MCP server'\n\n# Encoder host only — restrict to the Control host or its VPC subnet\nsudo ufw allow from \u003Ccontrol-ip-or-subnet> to any port 80 proto tcp comment 'Encoder HTTP from Control'\nsudo ufw allow from \u003Ccontrol-ip-or-subnet> to any port 443 proto tcp comment 'Encoder HTTPS from Control'\nsudo ufw allow from \u003Ccontrol-ip-or-subnet> to any port 8484 proto tcp comment 'Encoder c21publisher from Control'\n\nsudo ufw --force enable\nsudo ufw status verbose\n",[512,820,821,834,849,855,871,885,908,912,918,938,958,979,1000,1005,1011,1064,1105,1146,1151,1164],{"__ignoreMap":594},[598,822,823,825,828,831],{"class":600,"line":601},[598,824,605],{"class":604},[598,826,827],{"class":608}," apt-get",[598,829,830],{"class":608}," update",[598,832,833],{"class":608}," -qq\n",[598,835,836,838,840,843,846],{"class":600,"line":618},[598,837,605],{"class":604},[598,839,827],{"class":608},[598,841,842],{"class":608}," install",[598,844,845],{"class":608}," -y",[598,847,848],{"class":608}," ufw\n",[598,850,851],{"class":600,"line":642},[598,852,854],{"emptyLinePlaceholder":853},true,"\n",[598,856,857,859,862,865,868],{"class":600,"line":648},[598,858,605],{"class":604},[598,860,861],{"class":608}," ufw",[598,863,864],{"class":608}," default",[598,866,867],{"class":608}," deny",[598,869,870],{"class":608}," incoming\n",[598,872,873,875,877,879,882],{"class":600,"line":654},[598,874,605],{"class":604},[598,876,861],{"class":608},[598,878,864],{"class":608},[598,880,881],{"class":608}," allow",[598,883,884],{"class":608}," outgoing\n",[598,886,887,889,891,893,896,899,902,905],{"class":600,"line":660},[598,888,605],{"class":604},[598,890,861],{"class":608},[598,892,881],{"class":608},[598,894,895],{"class":608}," 22\u002Ftcp",[598,897,898],{"class":608}," comment",[598,900,901],{"class":629}," '",[598,903,904],{"class":608},"SSH",[598,906,907],{"class":629},"'\n",[598,909,910],{"class":600,"line":666},[598,911,854],{"emptyLinePlaceholder":853},[598,913,914],{"class":600,"line":671},[598,915,917],{"class":916},"sHwdD","# Control host only — the operator UI + the API + the WebSocket relay + the MCP server\n",[598,919,920,922,924,926,929,931,933,936],{"class":600,"line":685},[598,921,605],{"class":604},[598,923,861],{"class":608},[598,925,881],{"class":608},[598,927,928],{"class":608}," 9080\u002Ftcp",[598,930,898],{"class":608},[598,932,901],{"class":629},[598,934,935],{"class":608},"Control HTTP (redirects to HTTPS)",[598,937,907],{"class":629},[598,939,940,942,944,946,949,951,953,956],{"class":600,"line":697},[598,941,605],{"class":604},[598,943,861],{"class":608},[598,945,881],{"class":608},[598,947,948],{"class":608}," 9443\u002Ftcp",[598,950,898],{"class":608},[598,952,901],{"class":629},[598,954,955],{"class":608},"Control HTTPS UI",[598,957,907],{"class":629},[598,959,961,963,965,967,970,972,974,977],{"class":600,"line":960},11,[598,962,605],{"class":604},[598,964,861],{"class":608},[598,966,881],{"class":608},[598,968,969],{"class":608}," 3000\u002Ftcp",[598,971,898],{"class":608},[598,973,901],{"class":629},[598,975,976],{"class":608},"Control NOC WebSocket relay",[598,978,907],{"class":629},[598,980,982,984,986,988,991,993,995,998],{"class":600,"line":981},12,[598,983,605],{"class":604},[598,985,861],{"class":608},[598,987,881],{"class":608},[598,989,990],{"class":608}," 3100\u002Ftcp",[598,992,898],{"class":608},[598,994,901],{"class":629},[598,996,997],{"class":608},"Control MCP server",[598,999,907],{"class":629},[598,1001,1003],{"class":600,"line":1002},13,[598,1004,854],{"emptyLinePlaceholder":853},[598,1006,1008],{"class":600,"line":1007},14,[598,1009,1010],{"class":916},"# Encoder host only — restrict to the Control host or its VPC subnet\n",[598,1012,1014,1016,1018,1020,1023,1026,1029,1033,1036,1039,1042,1045,1049,1052,1055,1057,1059,1062],{"class":600,"line":1013},15,[598,1015,605],{"class":604},[598,1017,861],{"class":608},[598,1019,881],{"class":608},[598,1021,1022],{"class":608}," from",[598,1024,1025],{"class":629}," \u003C",[598,1027,1028],{"class":608},"control-ip-or-subne",[598,1030,1032],{"class":1031},"sTEyZ","t",[598,1034,1035],{"class":629},">",[598,1037,1038],{"class":608}," to",[598,1040,1041],{"class":608}," any",[598,1043,1044],{"class":608}," port",[598,1046,1048],{"class":1047},"sbssI"," 80",[598,1050,1051],{"class":608}," proto",[598,1053,1054],{"class":608}," tcp",[598,1056,898],{"class":608},[598,1058,901],{"class":629},[598,1060,1061],{"class":608},"Encoder HTTP from Control",[598,1063,907],{"class":629},[598,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1092,1094,1096,1098,1100,1103],{"class":600,"line":1066},16,[598,1068,605],{"class":604},[598,1070,861],{"class":608},[598,1072,881],{"class":608},[598,1074,1022],{"class":608},[598,1076,1025],{"class":629},[598,1078,1028],{"class":608},[598,1080,1032],{"class":1031},[598,1082,1035],{"class":629},[598,1084,1038],{"class":608},[598,1086,1041],{"class":608},[598,1088,1044],{"class":608},[598,1090,1091],{"class":1047}," 443",[598,1093,1051],{"class":608},[598,1095,1054],{"class":608},[598,1097,898],{"class":608},[598,1099,901],{"class":629},[598,1101,1102],{"class":608},"Encoder HTTPS from Control",[598,1104,907],{"class":629},[598,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126,1128,1130,1133,1135,1137,1139,1141,1144],{"class":600,"line":1107},17,[598,1109,605],{"class":604},[598,1111,861],{"class":608},[598,1113,881],{"class":608},[598,1115,1022],{"class":608},[598,1117,1025],{"class":629},[598,1119,1028],{"class":608},[598,1121,1032],{"class":1031},[598,1123,1035],{"class":629},[598,1125,1038],{"class":608},[598,1127,1041],{"class":608},[598,1129,1044],{"class":608},[598,1131,1132],{"class":1047}," 8484",[598,1134,1051],{"class":608},[598,1136,1054],{"class":608},[598,1138,898],{"class":608},[598,1140,901],{"class":629},[598,1142,1143],{"class":608},"Encoder c21publisher from Control",[598,1145,907],{"class":629},[598,1147,1149],{"class":600,"line":1148},18,[598,1150,854],{"emptyLinePlaceholder":853},[598,1152,1154,1156,1158,1161],{"class":600,"line":1153},19,[598,1155,605],{"class":604},[598,1157,861],{"class":608},[598,1159,1160],{"class":608}," --force",[598,1162,1163],{"class":608}," enable\n",[598,1165,1167,1169,1171,1174],{"class":600,"line":1166},20,[598,1168,605],{"class":604},[598,1170,861],{"class":608},[598,1172,1173],{"class":608}," status",[598,1175,1176],{"class":608}," verbose\n",[414,1178,1179,1180,1183,1184,1186],{},"For deployments where you want a public reverse-proxy in front of Control, terminate TLS on the proxy and forward to ",[512,1181,1182],{},"127.0.0.1:9443",". The ",[512,1185,812],{}," rules above cover the host-level fallback path.",[426,1188,1190],{"id":1189},"_6-swap","6. Swap",[414,1192,1193],{},"If the host has less than the recommended RAM, add swap:",[589,1195,1197],{"className":591,"code":1196,"language":593,"meta":594,"style":594},"sudo fallocate -l 4G \u002Fswapfile\nsudo chmod 600 \u002Fswapfile\nsudo mkswap \u002Fswapfile\nsudo swapon \u002Fswapfile\necho '\u002Fswapfile none swap sw 0 0' | sudo tee -a \u002Fetc\u002Ffstab\nfree -h\n",[512,1198,1199,1215,1227,1236,1245,1273],{"__ignoreMap":594},[598,1200,1201,1203,1206,1209,1212],{"class":600,"line":601},[598,1202,605],{"class":604},[598,1204,1205],{"class":608}," fallocate",[598,1207,1208],{"class":608}," -l",[598,1210,1211],{"class":608}," 4G",[598,1213,1214],{"class":608}," \u002Fswapfile\n",[598,1216,1217,1219,1222,1225],{"class":600,"line":618},[598,1218,605],{"class":604},[598,1220,1221],{"class":608}," chmod",[598,1223,1224],{"class":1047}," 600",[598,1226,1214],{"class":608},[598,1228,1229,1231,1234],{"class":600,"line":642},[598,1230,605],{"class":604},[598,1232,1233],{"class":608}," mkswap",[598,1235,1214],{"class":608},[598,1237,1238,1240,1243],{"class":600,"line":648},[598,1239,605],{"class":604},[598,1241,1242],{"class":608}," swapon",[598,1244,1214],{"class":608},[598,1246,1247,1251,1253,1256,1259,1262,1265,1267,1270],{"class":600,"line":654},[598,1248,1250],{"class":1249},"s2Zo4","echo",[598,1252,901],{"class":629},[598,1254,1255],{"class":608},"\u002Fswapfile none swap sw 0 0",[598,1257,1258],{"class":629},"'",[598,1260,1261],{"class":629}," |",[598,1263,1264],{"class":604}," sudo",[598,1266,623],{"class":608},[598,1268,1269],{"class":608}," -a",[598,1271,1272],{"class":608}," \u002Fetc\u002Ffstab\n",[598,1274,1275,1278],{"class":600,"line":660},[598,1276,1277],{"class":604},"free",[598,1279,1280],{"class":608}," -h\n",[414,1282,1283,1284,1287],{},"The installer pulls multiple GB of Docker images. Without swap on small hosts, ",[512,1285,1286],{},"apt install"," and Docker image pulls together can run out of memory.",[426,1289,1291],{"id":1290},"_7-next-step","7. Next step",[414,1293,1294],{},"With the host prepared, follow the product-specific installer page:",[543,1296,1297,1306],{},[546,1298,1299],{},[1300,1301,1302,1303],"a",{"href":325},"Install ",[421,1304,1305],{},"C21 Live Control",[546,1307,1308],{},[1300,1309,1302,1310],{"href":330},[421,1311,1312],{},"C21 Live Encoder",[1314,1315,1316],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":594,"searchDepth":618,"depth":618,"links":1318},[1319,1320,1321,1322,1323,1325,1326],{"id":428,"depth":618,"text":429},{"id":537,"depth":618,"text":538},{"id":583,"depth":618,"text":584},{"id":710,"depth":618,"text":711},{"id":808,"depth":618,"text":1324},"5. Firewall — ufw",{"id":1189,"depth":618,"text":1190},{"id":1290,"depth":618,"text":1291},"Bring a Linux host to the known-good state the C21 Live Control and C21 Live Encoder installers expect.","md",null,{},{"icon":322},{"title":319,"description":1327},"IPqxjhKkMagl3Czkt_Pl4-zYwnrVNZkwZ3J1IwtvQBU",[1335,1337],{"title":310,"path":311,"stem":312,"description":1336,"icon":34,"children":-1},"Push the HLS output of a Live stream to MediaCopilot in real time so it appears as a live asset on the MediaCopilot side.",{"title":324,"path":325,"stem":326,"description":1338,"icon":327,"children":-1},"One-liner installer for the C21 Live Control product, the livecontrol CLI for day-to-day operations, license, backups, SSL and uninstall.",1782916484285]