[{"data":1,"prerenderedAt":632},["ShallowReactive",2],{"navigation":3,"\u002Finstallation\u002Foverview":194,"\u002Finstallation\u002Foverview-surround":627},[4,18,31,64,81,102,111,132,149],{"title":5,"path":6,"stem":7,"children":8,"page":17},"Getting started","\u002Fgetting-started","1.getting-started",[9,13],{"title":10,"path":11,"stem":12},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":14,"path":15,"stem":16},"Run your first workflow","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart",false,{"title":19,"path":20,"stem":21,"children":22,"page":17},"Core concepts","\u002Fconcepts","2.concepts",[23,27],{"title":24,"path":25,"stem":26},"The platform model","\u002Fconcepts\u002Fplatform","2.concepts\u002F1.platform",{"title":28,"path":29,"stem":30},"Architecture and boundaries","\u002Fconcepts\u002Farchitecture","2.concepts\u002F2.architecture",{"title":32,"path":33,"stem":34,"children":35,"page":17},"Installation","\u002Finstallation","3.installation",[36,40,44,48,52,56,60],{"title":37,"path":38,"stem":39},"Overview and requirements","\u002Finstallation\u002Foverview","3.installation\u002F1.overview",{"title":41,"path":42,"stem":43},"Local evaluation","\u002Finstallation\u002Flocal-evaluation","3.installation\u002F2.local-evaluation",{"title":45,"path":46,"stem":47},"Install the server","\u002Finstallation\u002Fserver","3.installation\u002F3.server",{"title":49,"path":50,"stem":51},"Install a runner","\u002Finstallation\u002Frunner","3.installation\u002F4.runner",{"title":53,"path":54,"stem":55},"Verify the installation","\u002Finstallation\u002Fverification","3.installation\u002F5.verification",{"title":57,"path":58,"stem":59},"Upgrade the platform","\u002Finstallation\u002Fupgrades","3.installation\u002F6.upgrades",{"title":61,"path":62,"stem":63},"Guided installer","\u002Finstallation\u002Finstaller","3.installation\u002F7.installer",{"title":65,"path":66,"stem":67,"children":68,"page":17},"Build workflows","\u002Fworkflows","4.workflows",[69,73,77],{"title":70,"path":71,"stem":72},"Build a Definition","\u002Fworkflows\u002Fdefinitions","4.workflows\u002F0.definitions",{"title":74,"path":75,"stem":76},"Deploy and run workflows","\u002Fworkflows\u002Fruns","4.workflows\u002F1.runs",{"title":78,"path":79,"stem":80},"Inputs, context, and secrets","\u002Fworkflows\u002Finputs-and-secrets","4.workflows\u002F2.inputs-and-secrets",{"title":82,"path":83,"stem":84,"children":85,"page":17},"Run and recover","\u002Foperations","5.operations",[86,90,94,98],{"title":87,"path":88,"stem":89},"Monitor Runs","\u002Foperations\u002Fmonitoring","5.operations\u002F1.monitoring",{"title":91,"path":92,"stem":93},"Approve prepared steps","\u002Foperations\u002Fapprovals","5.operations\u002F2.approvals",{"title":95,"path":96,"stem":97},"Recover or cancel execution","\u002Foperations\u002Frecovery","5.operations\u002F3.recovery",{"title":99,"path":100,"stem":101},"Troubleshooting","\u002Foperations\u002Ftroubleshooting","5.operations\u002F4.troubleshooting",{"title":103,"path":104,"stem":105,"children":106,"page":17},"Action catalog","\u002Fcatalog","6.catalog",[107],{"title":108,"path":109,"stem":110},"Find and use Actions","\u002Fcatalog\u002Foverview","6.catalog\u002F1.overview",{"title":112,"path":113,"stem":114,"children":115,"page":17},"Administration","\u002Fadministration","7.administration",[116,120,124,128],{"title":117,"path":118,"stem":119},"Registries and Environments","\u002Fadministration\u002Fenvironments","7.administration\u002F2.environments",{"title":121,"path":122,"stem":123},"Manage runners","\u002Fadministration\u002Frunners","7.administration\u002F3.runners",{"title":125,"path":126,"stem":127},"Access and approval policies","\u002Fadministration\u002Faccess","7.administration\u002F4.access",{"title":129,"path":130,"stem":131},"Backups and upgrades","\u002Fadministration\u002Fmaintenance","7.administration\u002F5.maintenance",{"title":133,"path":134,"stem":135,"children":136,"page":17},"Develop Actions","\u002Factions","8.actions",[137,141,145],{"title":138,"path":139,"stem":140},"Build your first Action","\u002Factions\u002Fquickstart","8.actions\u002F1.quickstart",{"title":142,"path":143,"stem":144},"Local development","\u002Factions\u002Flocal-development","8.actions\u002F2.local-development",{"title":146,"path":147,"stem":148},"Publish an Action","\u002Factions\u002Fpublishing","8.actions\u002F3.publishing",{"title":150,"path":151,"stem":152,"children":153,"page":17},"Reference","\u002Freference","9.reference",[154,158,162,166,170,174,178,182,186,190],{"title":155,"path":156,"stem":157},"Operator CLI","\u002Freference\u002Foperator-cli","9.reference\u002F1.operator-cli",{"title":159,"path":160,"stem":161},"Installer CLI","\u002Freference\u002Finstaller-cli","9.reference\u002F10.installer-cli",{"title":163,"path":164,"stem":165},"Definition syntax","\u002Freference\u002Fdefinition","9.reference\u002F2.definition",{"title":167,"path":168,"stem":169},"CLI configuration","\u002Freference\u002Fconfiguration","9.reference\u002F3.configuration",{"title":171,"path":172,"stem":173},"API integration","\u002Freference\u002Fapi","9.reference\u002F4.api",{"title":175,"path":176,"stem":177},"Action CLI","\u002Freference\u002Faction-cli","9.reference\u002F5.action-cli",{"title":179,"path":180,"stem":181},"Action SDK","\u002Freference\u002Fsdk","9.reference\u002F6.sdk",{"title":183,"path":184,"stem":185},"Contracts and compatibility","\u002Freference\u002Fcontracts","9.reference\u002F7.contracts",{"title":187,"path":188,"stem":189},"Server configuration","\u002Freference\u002Fserver-configuration","9.reference\u002F8.server-configuration",{"title":191,"path":192,"stem":193},"Runner configuration","\u002Freference\u002Frunner-configuration","9.reference\u002F9.runner-configuration",{"id":195,"title":37,"body":196,"description":621,"extension":622,"meta":623,"navigation":624,"path":38,"seo":625,"stem":39,"__hash__":626},"docs\u002F3.installation\u002F1.overview.md",{"type":197,"value":198,"toc":614},"minimark",[199,207,222,229,234,289,300,303,307,321,324,360,383,387,445,453,460,463,466,470,477,553,556,570,577,581,610],[200,201,202,203,206],"p",{},"Installation is for administrators setting up Pyplines. Engineers joining an existing installation can start with ",[204,205,14],"a",{"href":15},".",[200,208,209,210,213,214,216,217,219,220,206],{},"For a first evaluation, use the ",[204,211,212],{"href":42},"local evaluation guide",". For a shared installation, follow ",[204,215,45],{"href":46},", ",[204,218,49],{"href":50},", and ",[204,221,53],{"href":54},[200,223,224,225,228],{},"The ",[204,226,227],{"href":62},"guided installer"," automates the Compose deployment\nand retains a repeatable configuration. Check its package availability and host\nrequirements before choosing it; the manual guides remain available for both\nCompose and native Linux services.",[230,231,233],"h2",{"id":232},"choose-a-layout","Choose a layout",[235,236,237,250],"table",{},[238,239,240],"thead",{},[241,242,243,247],"tr",{},[244,245,246],"th",{},"Layout",[244,248,249],{},"How it works",[251,252,253,266,273,281],"tbody",{},[241,254,255,259],{},[256,257,258],"td",{},"Guided local setup",[256,260,261,265],{},[262,263,264],"code",{},"pyplines-installer run"," with the local profile on Linux or macOS with Docker Desktop; private server\u002Frunner network and development TLS",[241,267,268,270],{},[256,269,41],{},[256,271,272],{},"Published server and runner images, a local registry, and locally trusted certificates on one Docker host",[241,274,275,278],{},[256,276,277],{},"Shared installation, one host",[256,279,280],{},"One server and one or more runners on the same Linux host, using the container or Linux service instructions",[241,282,283,286],{},[256,284,285],{},"Separate hosts",[256,287,288],{},"One server host and dedicated runner hosts; each runner uses its own local Docker daemon and persistent state",[200,290,291,292,296,297,206],{},"Run ",[293,294,295],"strong",{},"one server process per installation",". The current server owns SQLite and embedded NATS JetStream state; these instructions do not describe an HA cluster or an external database\u002Fbroker deployment. Runners provide execution capacity, not replicas of the server. See ",[204,298,299],{"href":29},"architecture",[200,301,302],{},"The container guides use separate Compose files for server and runner. You can use both on one host or place them on different hosts. Both layouts use a DNS name that resolves from the administrator workstation and every runner; they do not depend on cross-host Compose service discovery.",[230,304,306],{"id":305},"choose-releases","Choose releases",[200,308,309,310,315,316,320],{},"Obtain the server and runner from the same ",[311,312,314],"release-link",{"group":313},"platform","platform release",". Install the operator CLI from the supported ",[311,317,319],{"group":318},"tooling","tooling release",". Platform and tooling versions can differ; use the supported combination shown by this documentation site.",[200,322,323],{},"The examples use these shell variables. Replace the placeholder values with actual published tags before running commands:",[325,326,332],"pre",{"className":327,"code":328,"filename":329,"language":330,"meta":331,"style":331},"language-sh shiki shiki-themes pyplines-light pyplines-light pyplines-dark","export PLATFORM_TAG='platform\u002FYYYY.M.RELEASE'\nexport TOOLING_TAG='tooling\u002FYYYY.M.RELEASE'\nexport PLATFORM_VERSION=\"${PLATFORM_TAG##*\u002F}\"\nexport TOOLING_VERSION=\"${TOOLING_TAG##*\u002F}\"\n","Terminal","sh","",[262,333,334,342,348,354],{"__ignoreMap":331},[335,336,339],"span",{"class":337,"line":338},"line",1,[335,340,341],{},"export PLATFORM_TAG='platform\u002FYYYY.M.RELEASE'\n",[335,343,345],{"class":337,"line":344},2,[335,346,347],{},"export TOOLING_TAG='tooling\u002FYYYY.M.RELEASE'\n",[335,349,351],{"class":337,"line":350},3,[335,352,353],{},"export PLATFORM_VERSION=\"${PLATFORM_TAG##*\u002F}\"\n",[335,355,357],{"class":337,"line":356},4,[335,358,359],{},"export TOOLING_VERSION=\"${TOOLING_TAG##*\u002F}\"\n",[200,361,362,363,366,367,370,371,374,375,378,379,382],{},"Keep any ",[262,364,365],{},"rcN"," suffix. Historical combined releases have a bare tag such as ",[262,368,369],{},"2026.10.1rc17","; use that exact tag when selecting one. Image and Python package versions always omit the group prefix. Published server\u002Frunner images are ",[262,372,373],{},"ghcr.io\u002Fpyplines\u002Fpyplines-server:$PLATFORM_VERSION"," and ",[262,376,377],{},"ghcr.io\u002Fpyplines\u002Fpyplines-runner:$PLATFORM_VERSION",". There is no ",[262,380,381],{},"latest"," alias.",[230,384,386],{"id":385},"host-and-storage-requirements","Host and storage requirements",[235,388,389,399],{},[238,390,391],{},[241,392,393,396],{},[244,394,395],{},"Component",[244,397,398],{},"Requirements",[251,400,401,417,429,437],{},[241,402,403,406],{},[256,404,405],{},"Server",[256,407,408,409,412,413,416],{},"Linux ",[262,410,411],{},"amd64"," or ",[262,414,415],{},"arm64",", persistent private storage, a DNS name, TLS certificate and key, access to the Action registry",[241,418,419,422],{},[256,420,421],{},"Runner",[256,423,408,424,412,426,428],{},[262,425,411],{},[262,427,415],{},", a local Docker daemon supporting named-volume subdirectory mounts, persistent state\u002Fwork storage, access to server HTTPS, server NATS TLS, and the Action registry",[241,430,431,434],{},[256,432,433],{},"Administrator workstation",[256,435,436],{},"Python 3.12+, the operator CLI, HTTPS access to the server; GitHub CLI for the binary download examples",[241,438,439,442],{},[256,440,441],{},"Action registry",[256,443,444],{},"An OCI registry reachable by both the server and runners, containing the Action images your workflows use",[200,446,447,448,452],{},"On macOS, the ",[204,449,451],{"href":450},"\u002Finstallation\u002Finstaller#local-development-on-linux-or-macos","guided local profile"," runs the installer natively while server, runner, and Action containers execute in Docker Desktop’s Linux VM.",[200,454,455,456,459],{},"Containers require Docker Engine with the Compose plugin; Linux service examples assume a systemd host. Runner examples use a rootful local Docker daemon and run the runner as root because it stages files for Action UID ",[262,457,458],{},"65532"," and controls Docker. The server service runs as a dedicated unprivileged account and needs no Docker socket. Action containers do not receive that socket.",[200,461,462],{},"Size hosts for your workload. Each runner defaults to one concurrent Action and can be configured for up to 64; the resources required depend on the Actions. Monitor server data\u002Flog usage, runner work storage, and Docker image usage. There is no documented universal minimum CPU\u002FRAM sizing or automatic storage expansion.",[200,464,465],{},"Persist the complete server data directory and each runner's state. Use a unique state directory and work volume per runner identity. Do not share one runner's state across hosts or start multiple runners against it.",[230,467,469],{"id":468},"network-and-tls-plan","Network and TLS plan",[200,471,472,473,476],{},"The shared-installation examples use ",[262,474,475],{},"pyplines.example.com"," as a placeholder:",[235,478,479,492],{},[238,480,481],{},[241,482,483,486,489],{},[244,484,485],{},"Source",[244,487,488],{},"Destination",[244,490,491],{},"Purpose",[251,493,494,507,519,531,542],{},[241,495,496,499,504],{},[256,497,498],{},"Administrator and operator clients",[256,500,501],{},[262,502,503],{},"https:\u002F\u002Fpyplines.example.com:8080",[256,505,506],{},"Login and platform API",[241,508,509,512,516],{},[256,510,511],{},"Runners",[256,513,514],{},[262,515,503],{},[256,517,518],{},"Enrollment and registration status",[241,520,521,523,528],{},[256,522,511],{},[256,524,525],{},[262,526,527],{},"tls:\u002F\u002Fpyplines.example.com:4222",[256,529,530],{},"Authenticated fleet transport, assignments, and execution reporting",[241,532,533,536,539],{},[256,534,535],{},"Server and runners",[256,537,538],{},"Your Action registry",[256,540,541],{},"Image inspection and pulls",[241,543,544,547,550],{},[256,545,546],{},"Network-enabled Actions",[256,548,549],{},"Their configured target services",[256,551,552],{},"The operation the Action performs",[200,554,555],{},"Allow the two server ports from the appropriate networks. Runners initiate their connections; they do not require an inbound Pyplines service port. A reverse proxy for HTTPS does not automatically proxy NATS. Preserve a separately reachable NATS TLS endpoint if you change the API's public port.",[200,557,558,559,562,563,219,566,569],{},"The server uses the same certificate and key for HTTPS and NATS. Its certificate must cover every hostname used for those endpoints, and runners must trust its CA. In the guides, provision ",[262,560,561],{},"server.crt"," (certificate chain), ",[262,564,565],{},"server.key",[262,567,568],{},"ca.crt"," (public issuing CA). Never copy a CA private key to the services. For publicly trusted certificates, the extra CA configuration can be omitted.",[200,571,572,573,576],{},"On separate hosts, ",[262,574,575],{},"localhost"," in the advertised NATS URL points to each runner itself and will not work. On one host, the hostname must still resolve correctly from inside the runner container.",[230,578,580],{"id":579},"continue","Continue",[582,583,584,590,595,600],"ol",{},[585,586,587,206],"li",{},[204,588,589],{"href":46},"Install and bootstrap the server",[585,591,592,206],{},[204,593,594],{"href":50},"Install, enroll, and approve a runner",[585,596,597,206],{},[204,598,599],{"href":54},"Configure an Environment and verify execution",[585,601,602,603,374,606,609],{},"Establish ",[204,604,605],{"href":126},"access policies",[204,607,608],{"href":130},"backups"," before operational use.",[611,612,613],"style",{},"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);}",{"title":331,"searchDepth":344,"depth":344,"links":615},[616,617,618,619,620],{"id":232,"depth":344,"text":233},{"id":305,"depth":344,"text":306},{"id":385,"depth":344,"text":386},{"id":468,"depth":344,"text":469},{"id":579,"depth":344,"text":580},"Choose a deployment layout and prepare networking, storage, and platform versions.","md",{},true,{"title":37,"description":621},"QoJM81ihGTZ-sGw5RSvj38nBHKQo_61yzBgbSfamNXI",[628,630],{"title":28,"path":29,"stem":30,"description":629,"children":-1},"Understand the server, runner, registry, and execution guarantees.",{"title":41,"path":42,"stem":43,"description":631,"children":-1},"Run published server and runner images on one host using the repository's evaluation appliance.",1792213696445]