{"id":19142,"date":"2026-09-18T07:52:11","date_gmt":"2026-09-18T05:52:11","guid":{"rendered":"https:\/\/www.beseit.net\/?p=19142"},"modified":"2026-09-18T08:54:10","modified_gmt":"2026-09-18T06:54:10","slug":"%e2%ad%90-avantatges-i-inconvenients-de-tenir-piper-ona-dins-docker","status":"publish","type":"post","link":"https:\/\/www.beseit.net\/?p=19142","title":{"rendered":"\u2b50 Avantatges i inconvenients de tenir Piper (Ona) dins Docker"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introducci\u00f3<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Quan vols muntar un servidor TTS local amb la veu catalana Ona (UPC), tens dues opcions: instal\u00b7lar Piper directament al sistema o encapsular-lo dins un contenidor Docker. A Deepin \u2014i en general a qualsevol Linux\u2014 Docker aporta una s\u00e8rie de beneficis molt clars, per\u00f2 tamb\u00e9 alguns punts a tenir en compte.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aquesta entrada resumeix <strong>els avantatges i inconvenients reals<\/strong> de tenir Piper dins Docker, basats en experi\u00e8ncia pr\u00e0ctica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 Avantatges de tenir Piper (Ona) dins Docker<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. A\u00efllament total del sistema<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Docker encapsula Piper en un entorn propi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>no dep\u00e8n del Python del sistema<\/li>\n\n\n\n<li>no dep\u00e8n de llibreries de Deepin<\/li>\n\n\n\n<li>no es trenca amb actualitzacions del sistema<\/li>\n\n\n\n<li>no interfereix amb altres projectes Python<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9s com tenir un \u201cmini\u2011Linux\u201d dedicat nom\u00e9s al TTS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Servei permanent i autoreiniciable<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Amb <code>--restart unless-stopped<\/code>, Piper:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>arrenca autom\u00e0ticament quan encens Deepin<\/li>\n\n\n\n<li>es reinicia si peta<\/li>\n\n\n\n<li>queda sempre disponible al port <code>10200<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Aix\u00f2 el converteix en un <strong>servei TTS del sistema<\/strong>, no en un script puntual.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Actualitzacions molt simples<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Actualitzar Piper \u00e9s tan f\u00e0cil com:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker pull linuxserver\/piper\ndocker stop piper\ndocker rm piper\ndocker run ...\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sense reinstal\u00b7lar depend\u00e8ncies ni entorns virtuals.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Gesti\u00f3 clara i ordenada dels models<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Els models estan en un volum dedicat (<code>\/config<\/code>):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>afegir veus \u00e9s copiar fitxers<\/li>\n\n\n\n<li>canviar de veu \u00e9s modificar una variable d\u2019entorn<\/li>\n\n\n\n<li>tot queda ordenat i separat del sistema<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sense Docker, Piper pot dispersar models en rutes internes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Integraci\u00f3 perfecta amb Wyoming TTS<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El contenidor ja inclou el servidor Wyoming:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>exposat a <code>http:\/\/127.0.0.1:10200<\/code><\/li>\n\n\n\n<li>usable per qualsevol app del sistema<\/li>\n\n\n\n<li>compatible amb el teu servidor local (port 8765)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sense Docker, cal muntar Wyoming manualment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6. Compatibilitat total amb Deepin<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Deepin t\u00e9:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python modificat<\/li>\n\n\n\n<li>llibreries no sempre est\u00e0ndard<\/li>\n\n\n\n<li>actualitzacions que trenquen depend\u00e8ncies<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Docker evita TOT aix\u00f2.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>7. Reversibilitat i neteja<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si algun dia no vols Piper:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker stop piper\ndocker rm piper\ndocker rmi linuxserver\/piper\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I el sistema queda <strong>sense rastre<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>8. Seguretat i control<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El contenidor:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>no pot modificar el sistema<\/li>\n\n\n\n<li>nom\u00e9s veu el que li muntes<\/li>\n\n\n\n<li>no pot instal\u00b7lar res fora del seu entorn<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9s molt m\u00e9s segur que executar scripts directament.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe5 Inconvenients de tenir Piper (Ona) dins Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u2b50 cal un altre contenidor Docker amb un altre port per a la veu <em>Pau<\/em>, cada veu necessita un contenidor<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">PIPER_VOICE=nom_del_model.onnx\n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No pot canviar de veu \u201cen calent\u201d.<\/li>\n\n\n\n<li>No pot tenir diverses veus carregades simult\u00e0niament.<\/li>\n\n\n\n<li>Wyoming TTS nom\u00e9s exposa <strong>la veu carregada<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Aix\u00f2 vol dir que si vols tenir <strong>Ona + Pau<\/strong> disponibles alhora, necessites:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>piper_ona<\/code> \u2192 port 10200<\/li>\n\n\n\n<li><code>piper_pau<\/code> \u2192 port 10201<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">I el teu servidor local (port 8765) pot triar a quin contenidor enviar el text.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Requereix Docker instal\u00b7lat i actiu<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si Docker no arrenca, Piper tampoc. \u00c9s un punt feble si el servei Docker falla (poc habitual).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Consum lleugerament superior<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un contenidor t\u00e9:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>filesystem propi<\/li>\n\n\n\n<li>processos a\u00efllats<\/li>\n\n\n\n<li>un petit overhead<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9s m\u00ednim, per\u00f2 existeix.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Cal entendre m\u00ednimament Docker<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Per gestionar Piper:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>docker ps<\/code><\/li>\n\n\n\n<li><code>docker logs<\/code><\/li>\n\n\n\n<li><code>docker run<\/code><\/li>\n\n\n\n<li>volums i ports<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">No \u00e9s complicat, per\u00f2 \u00e9s un aprenentatge.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Acc\u00e9s als fitxers m\u00e9s \u201cindirecte\u201d<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Els models estan dins <code>\/config<\/code> (volum Docker). No \u00e9s un inconvenient greu, per\u00f2 \u00e9s diferent de tenir-los al sistema directament.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Depens del contenidor concret<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si el mantenidor del contenidor deixa d\u2019actualitzar-lo, caldria:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>canviar d\u2019imatge<\/li>\n\n\n\n<li>o muntar Piper manualment<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Actualment, <code>linuxserver\/piper<\/code> \u00e9s fiable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 Conclusi\u00f3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tenir <strong>Piper (Ona) dins Docker<\/strong> \u00e9s, en la majoria de casos, <strong>la millor opci\u00f3<\/strong>: estable, modular, segura i f\u00e0cil de mantenir. Els inconvenients s\u00f3n menors comparats amb els avantatges, especialment en sistemes com Deepin on les depend\u00e8ncies de Python poden ser problem\u00e0tiques.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker converteix Piper en un <strong>servei TTS permanent<\/strong>, sempre disponible, actualitzable i a\u00efllat del sistema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vols, Miquel, puc preparar <strong>una versi\u00f3 HTML<\/strong> d\u2019aquesta entrada perqu\u00e8 la puguis enganxar directament al WordPress, o afegir-hi una secci\u00f3 final amb <strong>comandes recomanades<\/strong> per gestionar el contenidor Piper.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Perfecte, Miquel \u2014 et deixo <strong>els passos exactes i ordenats<\/strong> per afegir la veu <strong>Piper (Pau)<\/strong> en un <strong>nou contenidor Docker<\/strong>, tal com ho fas amb Ona. Aix\u00f2 \u00e9s just el que necessites per continuar la teva entrada del blog i per tenir Ona + Pau funcionant alhora.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tens la guia pas a pas \ud83d\udc47<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2b50 Guia per afegir la veu <em>Pau<\/em> en un altre contenidor Docker<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">01<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Descarrega el model de la veu Pau<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Preparaci\u00f3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cal tenir el fitxer ONNX de la veu Pau dins la carpeta de models que ja utilitzes amb Ona.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ves a la p\u00e0gina oficial de models de Piper<\/li>\n\n\n\n<li>Descarrega <strong>ca_ES-upc_pau-medium.onnx<\/strong> (o la versi\u00f3 que prefereixis)<\/li>\n\n\n\n<li>Copia el fitxer a: <code>\/home\/Miquel\/tts\/models\/<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">02<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Verifica que el model est\u00e0 dins el volum<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Important<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El contenidor Piper utilitza <code>\/config<\/code> com a volum, que en el teu cas correspon a <code>\/home\/Miquel\/tts<\/code>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Comprova que tens: <code>\/home\/Miquel\/tts\/models\/ca_ES-upc_pau-medium.onnx<\/code><\/li>\n\n\n\n<li>Si tens subcarpetes, assegura que el nom coincideix exactament amb el model<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">03<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Crea el nou contenidor Piper per a Pau<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Contenidor nou<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada veu necessita el seu propi contenidor perqu\u00e8 Piper nom\u00e9s pot carregar una veu per inst\u00e0ncia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comanda Docker:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d \\\n  --name piper_pau \\\n  -p 10201:10200 \\\n  -e PIPER_VOICE=ca_ES-upc_pau-medium.onnx \\\n  -v \/home\/Miquel\/tts:\/config \\\n  --restart unless-stopped \\\n  linuxserver\/piper\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">04<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Comprova que el contenidor funciona<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Validaci\u00f3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Assegura que el servidor Wyoming de Pau est\u00e0 actiu.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Executa: <code>docker ps<\/code><\/li>\n\n\n\n<li>Verifica que <code>piper_pau<\/code> est\u00e0 en execuci\u00f3<\/li>\n\n\n\n<li>Obre al navegador: <code>http:\/\/127.0.0.1:10201<\/code> (ha de respondre)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">05<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Prova la veu Pau des del teu servidor local<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Integraci\u00f3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El teu servidor Python (port 8765) pot enviar text al contenidor de Pau.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Envia peticions a: <code>http:\/\/127.0.0.1:10201\/synthesize<\/code><\/li>\n\n\n\n<li>Comprova que retorna \u00e0udio WAV amb la veu Pau<\/li>\n\n\n\n<li>Si tens Ona i Pau, pots alternar enviant a 10200 o 10201<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2b50 Resum final<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>S\u00ed<\/strong>, per afegir la veu <em>Pau<\/em> cal <strong>un altre contenidor Docker<\/strong>.<\/li>\n\n\n\n<li>Piper nom\u00e9s pot carregar <strong>una veu per contenidor<\/strong>.<\/li>\n\n\n\n<li>Amb Ona (10200) + Pau (10201) tindr\u00e0s <strong>dues veus disponibles alhora<\/strong>.<\/li>\n\n\n\n<li>El teu servidor local pot triar a quin contenidor enviar el text.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si vols, puc preparar-te tamb\u00e9 <strong>els passos per afegir Aina, Carlota o qualsevol altra veu<\/strong>, o fins i tot un <strong>script Bash<\/strong> que arrenca totes les veus autom\u00e0ticament quan encens Deepin.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Llengua<\/th><th>Veus Piper recomanades<\/th><\/tr><\/thead><tbody><tr><th>Catal\u00e0<\/th><td>Ona, Pau, Aina<\/td><\/tr><tr><th>Castell\u00e0<\/th><td>Carlota, Ana<\/td><\/tr><tr><th>Angl\u00e8s (US)<\/th><td>libritts-high, harvard-medium<\/td><\/tr><tr><th>Angl\u00e8s (UK)<\/th><td>vctk-medium<\/td><\/tr><tr><th>Franc\u00e8s<\/th><td>mls-fr-medium<br>Franc\u00e8s<\/td><\/tr><tr><th>Alemany<\/th><td>mls-de-medium<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Jo\u00e3o \u2192 Portugu\u00e8s (pt_PT)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El Docker \u201caut\u00e8ntic\u201d, el que cont\u00e9:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>imatges<\/li>\n\n\n\n<li>capes<\/li>\n\n\n\n<li>volums<\/li>\n\n\n\n<li>contenidors<\/li>\n\n\n\n<li>metadades<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">est\u00e0 <strong>sempre<\/strong> a:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/var\/lib\/docker\/\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3 Quan vols muntar un servidor TTS local amb la veu catalana Ona (UPC), tens dues opcions: instal\u00b7lar Piper directament al sistema o encapsular-lo dins un contenidor Docker. A Deepin \u2014i en general a qualsevol Linux\u2014 Docker aporta una s\u00e8rie &hellip; <a href=\"https:\/\/www.beseit.net\/?p=19142\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":3169,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[207,1,138],"tags":[],"class_list":["post-19142","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deepin-linux","category-bloc-de-notes","category-sublime"],"_links":{"self":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19142"}],"version-history":[{"count":8,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19142\/revisions"}],"predecessor-version":[{"id":19153,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19142\/revisions\/19153"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/media\/3169"}],"wp:attachment":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}