[{"data":1,"prerenderedAt":537},["ShallowReactive",2],{"docs-nav:docs_en":3,"docs-page:\u002Fen\u002Fdocs\u002Fguides\u002Fnas":158,"docs-surround:\u002Fen\u002Fdocs\u002Fguides\u002Fnas":532},[4],{"title":5,"path":6,"stem":7,"children":8,"page":74},"En","\u002Fen","en",[9],{"title":10,"path":11,"stem":12,"children":13,"page":74},"Docs","\u002Fen\u002Fdocs","en\u002Fdocs",[14,75,134],{"title":15,"icon":16,"path":17,"stem":18,"children":19,"page":74},"Guides","i-lucide-book-open","\u002Fen\u002Fdocs\u002Fguides","en\u002Fdocs\u002F1.guides",[20,25,30,35,40,44,49,54,59,64,69],{"title":21,"path":22,"stem":23,"icon":24},"Introduction","\u002Fen\u002Fdocs\u002Fguides\u002Fintroduction","en\u002Fdocs\u002F1.guides\u002F01.introduction","i-lucide-info",{"title":26,"path":27,"stem":28,"icon":29},"Quick start","\u002Fen\u002Fdocs\u002Fguides\u002Fquick-start","en\u002Fdocs\u002F1.guides\u002F02.quick-start","i-lucide-play",{"title":31,"path":32,"stem":33,"icon":34},"Add the office computers","\u002Fen\u002Fdocs\u002Fguides\u002Foffice","en\u002Fdocs\u002F1.guides\u002F03.office","i-lucide-building-2",{"title":36,"path":37,"stem":38,"icon":39},"Rendering on GPU Rental Platforms","\u002Fen\u002Fdocs\u002Fguides\u002Fcloud","en\u002Fdocs\u002F1.guides\u002F04.cloud","i-lucide-cloud",{"title":41,"path":42,"stem":43},"Configuring Cloudflare R2 Storage","\u002Fen\u002Fdocs\u002Fguides\u002Fr2","en\u002Fdocs\u002F1.guides\u002F05.r2",{"title":45,"path":46,"stem":47,"icon":48},"Run the host on a NAS","\u002Fen\u002Fdocs\u002Fguides\u002Fnas","en\u002Fdocs\u002F1.guides\u002F06.nas","i-lucide-hard-drive",{"title":50,"path":51,"stem":52,"icon":53},"Devices in different places","\u002Fen\u002Fdocs\u002Fguides\u002Fremote","en\u002Fdocs\u002F1.guides\u002F07.remote","i-lucide-globe",{"title":55,"path":56,"stem":57,"icon":58},"Get the film","\u002Fen\u002Fdocs\u002Fguides\u002Ffilm","en\u002Fdocs\u002F1.guides\u002F08.film","i-lucide-film",{"title":60,"path":61,"stem":62,"icon":63},"When files change","\u002Fen\u002Fdocs\u002Fguides\u002Fupdate","en\u002Fdocs\u002F1.guides\u002F09.update","i-lucide-refresh-cw",{"title":65,"path":66,"stem":67,"icon":68},"When the host fails or moves","\u002Fen\u002Fdocs\u002Fguides\u002Fhost","en\u002Fdocs\u002F1.guides\u002F10.host","i-lucide-server-cog",{"title":70,"path":71,"stem":72,"icon":73},"FAQ","\u002Fen\u002Fdocs\u002Fguides\u002Ffaq","en\u002Fdocs\u002F1.guides\u002F11.faq","i-lucide-circle-help",false,{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":74},"Concepts","i-lucide-box","\u002Fen\u002Fdocs\u002Fconcepts","en\u002Fdocs\u002F2.concepts",[81,86,90,95,100,105,109,114,119,124,129],{"title":82,"path":83,"stem":84,"icon":85},"Workspace and host","\u002Fen\u002Fdocs\u002Fconcepts\u002Fworkspace","en\u002Fdocs\u002F2.concepts\u002F01.workspace","i-lucide-network",{"title":87,"path":88,"stem":89,"icon":48},"Store","\u002Fen\u002Fdocs\u002Fconcepts\u002Fstorage","en\u002Fdocs\u002F2.concepts\u002F02.storage",{"title":91,"path":92,"stem":93,"icon":94},"Assets, Unpacking & On-Demand Pull","\u002Fen\u002Fdocs\u002Fconcepts\u002Fassets","en\u002Fdocs\u002F2.concepts\u002F03.assets","i-lucide-images",{"title":96,"path":97,"stem":98,"icon":99},"Projects, tasks and versions","\u002Fen\u002Fdocs\u002Fconcepts\u002Ftasks","en\u002Fdocs\u002F2.concepts\u002F04.tasks","i-lucide-list-checks",{"title":101,"path":102,"stem":103,"icon":104},"Shots and chunks","\u002Fen\u002Fdocs\u002Fconcepts\u002Fshots","en\u002Fdocs\u002F2.concepts\u002F05.shots","i-lucide-clapperboard",{"title":106,"path":107,"stem":108,"icon":58},"Films","\u002Fen\u002Fdocs\u002Fconcepts\u002Ffilm","en\u002Fdocs\u002F2.concepts\u002F06.film",{"title":110,"path":111,"stem":112,"icon":113},"Blender and FFmpeg","\u002Fen\u002Fdocs\u002Fconcepts\u002Fruntimes","en\u002Fdocs\u002F2.concepts\u002F07.runtimes","i-lucide-package",{"title":115,"path":116,"stem":117,"icon":118},"Joining and access","\u002Fen\u002Fdocs\u002Fconcepts\u002Fjoining","en\u002Fdocs\u002F2.concepts\u002F08.joining","i-lucide-key-round",{"title":120,"path":121,"stem":122,"icon":123},"Render seats","\u002Fen\u002Fdocs\u002Fconcepts\u002Fseats","en\u002Fdocs\u002F2.concepts\u002F09.seats","i-lucide-gauge",{"title":125,"path":126,"stem":127,"icon":128},"Backup and takeover","\u002Fen\u002Fdocs\u002Fconcepts\u002Fbackup","en\u002Fdocs\u002F2.concepts\u002F10.backup","i-lucide-life-buoy",{"title":130,"path":131,"stem":132,"icon":133},"Plugins","\u002Fen\u002Fdocs\u002Fconcepts\u002Fplugins","en\u002Fdocs\u002F2.concepts\u002F11.plugins","i-lucide-puzzle",{"title":135,"icon":136,"path":137,"stem":138,"children":139,"page":74},"Reference","i-lucide-library","\u002Fen\u002Fdocs\u002Freference","en\u002Fdocs\u002F3.reference",[140,145,150,154],{"title":141,"path":142,"stem":143,"icon":144},"Command line","\u002Fen\u002Fdocs\u002Freference\u002Fcli","en\u002Fdocs\u002F3.reference\u002F1.cli","i-lucide-terminal",{"title":146,"path":147,"stem":148,"icon":149},"Configuration","\u002Fen\u002Fdocs\u002Freference\u002Fconfig","en\u002Fdocs\u002F3.reference\u002F2.config","i-lucide-sliders",{"title":151,"path":152,"stem":153},"HTTP API","\u002Fen\u002Fdocs\u002Freference\u002Fapi","en\u002Fdocs\u002F3.reference\u002F3.api",{"title":155,"path":156,"stem":157},"Plugin development","\u002Fen\u002Fdocs\u002Freference\u002Fplugins","en\u002Fdocs\u002F3.reference\u002F4.plugins",{"id":159,"title":45,"body":160,"description":526,"extension":527,"meta":528,"navigation":529,"path":46,"seo":530,"stem":47,"__hash__":531},"docs_en\u002Fen\u002Fdocs\u002F1.guides\u002F06.nas.md",{"type":161,"value":162,"toc":517},"minimark",[163,167,172,202,210,214,229,270,300,307,311,314,337,347,351,432,447,458,462,469,478,482,485,496,500,513],[164,165,166],"p",{},"A NAS is on all the time anyway. Put the host on it, and you don't need to keep a computer running just for that.",[168,169,171],"h2",{"id":170},"what-you-need","What you need",[173,174,175,179],"ul",{},[176,177,178],"li",{},"A NAS that can run Docker and Docker Compose, x64 or ARM64.",[176,180,181,182],{},"Two locations on the NAS:\n",[173,183,184,192],{},[176,185,186,187,191],{},"A folder for danio's data, on the NAS's own volume, such as ",[188,189,190],"code",{},"\u002Fvolume1\u002Fdocker\u002Fdanio",".",[176,193,194,195,198,199,191],{},"An empty shared folder for the store. Office computers open it as ",[188,196,197],{},"\\\\NAS\\danio",", and on the NAS it is ",[188,200,201],{},"\u002Fvolume1\u002Fdanio",[203,204,207],"callout",{"color":205,"icon":206},"warning","i-lucide-database",[164,208,209],{},"The data folder must be on a local volume of the NAS, and only the container should read and write it. Don't point it at an SMB or NFS share, and don't let other computers open it through a share: the workspace database can be corrupted on a network share. Keeping the store in a shared folder is fine.",[168,211,213],{"id":212},"write-composeyaml","Write compose.yaml",[164,215,216,217,224,225,228],{},"Download the ",[218,219,223],"a",{"href":220,"rel":221},"https:\u002F\u002Fgithub.com\u002Fdanio-app\u002Fdanio-releases\u002Freleases\u002Flatest\u002Fdownload\u002Fcompose.yaml",[222],"nofollow","compose.yaml"," that comes with each release, put it in a folder on the NAS, and change the two mappings under ",[188,226,227],{},"volumes",":",[230,231,236],"pre",{"className":232,"code":233,"language":234,"meta":235,"style":235},"language-yaml shiki shiki-themes material-theme-palenight","    volumes:\n      # danio's data: a local volume on the NAS\n      - \u002Fvolume1\u002Fdocker\u002Fdanio:\u002Fdata\n      # the share holding the store, mounted under \u002Fshares by share name\n      - \u002Fvolume1\u002Fdanio:\u002Fshares\u002Fdanio\n","yaml","",[188,237,238,246,252,258,264],{"__ignoreMap":235},[239,240,243],"span",{"class":241,"line":242},"line",1,[239,244,245],{},"    volumes:\n",[239,247,249],{"class":241,"line":248},2,[239,250,251],{},"      # danio's data: a local volume on the NAS\n",[239,253,255],{"class":241,"line":254},3,[239,256,257],{},"      - \u002Fvolume1\u002Fdocker\u002Fdanio:\u002Fdata\n",[239,259,261],{"class":241,"line":260},4,[239,262,263],{},"      # the share holding the store, mounted under \u002Fshares by share name\n",[239,265,267],{"class":241,"line":266},5,[239,268,269],{},"      - \u002Fvolume1\u002Fdanio:\u002Fshares\u002Fdanio\n",[173,271,272,275,293],{},[176,273,274],{},"The left side of the colon is the real path on the NAS. Change it to match your NAS.",[176,276,277,278,281,282,285,286,289,290,191],{},"The share holding the store is mounted at ",[188,279,280],{},"\u002Fshares\u002F\u003Cshare name>",". The share name is the first part after ",[188,283,284],{},"\\\\NAS\\",": if the store is ",[188,287,288],{},"\\\\NAS\\work\\danio",", mount the whole share, ",[188,291,292],{},"\u002Fvolume1\u002Fwork:\u002Fshares\u002Fwork",[176,294,295,296,299],{},"If the textures and models artists reference are on another share (such as ",[188,297,298],{},"\\\\NAS\\projects","), mount it the same way. The host can then read those files directly, so each artist's computer doesn't have to read them again.",[164,301,302,303,306],{},"Keep the rest as in the example: host network mode (so computers on the local network find the host on their own), and automatic restart after errors and updates. Change ",[188,304,305],{},"TZ"," to your time zone.",[168,308,310],{"id":309},"start","Start",[164,312,313],{},"In the folder with compose.yaml, run:",[230,315,319],{"className":316,"code":317,"language":318,"meta":235,"style":235},"language-bash shiki shiki-themes material-theme-palenight","docker compose up -d\n","bash",[188,320,321],{"__ignoreMap":235},[239,322,323,327,331,334],{"class":241,"line":242},[239,324,326],{"class":325},"s5Dmg","docker",[239,328,330],{"class":329},"sfyAc"," compose",[239,332,333],{"class":329}," up",[239,335,336],{"class":329}," -d\n",[164,338,339,340,343,344,191],{},"What success looks like: ",[188,341,342],{},"docker ps"," shows a running container named ",[188,345,346],{},"danio",[168,348,350],{"id":349},"sign-in-and-create-a-workspace","Sign in and create a workspace",[352,353,354,365,391,419],"ol",{},[176,355,356,357,360,361,191],{},"On an office computer, open ",[188,358,359],{},"http:\u002F\u002F\u003CNAS IP>:7421"," in a browser. You see ",[362,363,364],"ui",{},"Sign in to danio",[176,366,367,368],{},"On the NAS, run the command below. It prints a one-time sign-in link that is valid for 10 minutes. Open the link in the browser.",[230,369,371],{"className":316,"code":370,"language":318,"meta":235,"style":235},"docker exec danio danio web --no-open\n",[188,372,373],{"__ignoreMap":235},[239,374,375,377,380,383,385,388],{"class":241,"line":242},[239,376,326],{"class":325},[239,378,379],{"class":329}," exec",[239,381,382],{"class":329}," danio",[239,384,382],{"class":329},[239,386,387],{"class":329}," web",[239,389,390],{"class":329}," --no-open\n",[176,392,393,394,397,398,401,402,405,406,408,409,412,413,415,416,191],{},"Click ",[362,395,396],{},"Create or take over a workspace",", fill in ",[362,399,400],{},"Name",", choose ",[362,403,404],{},"Shared folder"," as the ",[362,407,87],{},", and under ",[362,410,411],{},"Path"," enter the address office computers use, ",[188,414,197],{},". The container finds it in ",[188,417,418],{},"\u002Fshares\u002Fdanio",[176,420,393,421,424,425,428,429,191],{},[362,422,423],{},"Create",", store the ",[362,426,427],{},"Recovery key"," somewhere other than the NAS, then click ",[362,430,431],{},"I’ve saved it",[164,433,434,435,438,439,442,443,446],{},"What success looks like: the page goes to ",[362,436,437],{},"Tasks",", and ",[362,440,441],{},"Workspace details"," → ",[362,444,445],{},"Connection"," says it is listening, followed by the NAS's address and port 7420.",[164,448,449,450,453,454,457],{},"The browser remembers the sign-in for 30 days. You can also set ",[188,451,452],{},"DANIO_TOKEN"," in compose.yaml to a token of at least 32 characters and use it to sign in on the sign-in page. If you leave it empty, danio generates one the first time it starts and saves it in ",[188,455,456],{},"data\u002Flocal-token"," in the data folder.",[168,459,461],{"id":460},"turn-off-rendering-on-the-nas","Turn off rendering on the NAS",[164,463,464,465,468],{},"When you create a workspace, the host's own ",[362,466,467],{},"Render"," is turned on. If the render machines will do the rendering, turn it off on the right of the page's top bar.",[164,470,471,472,474,475,191],{},"Then add computers as usual: for office computers, see ",[218,473,31],{"href":32},"; for render machines, see the ",[218,476,26],{"href":477},"\u002Fen\u002Fdocs\u002Fguides\u002Fquick-start#add-a-render-machine",[168,479,481],{"id":480},"updates","Updates",[164,483,484],{},"When danio in the container updates, it exits by itself, and Docker restarts it right away on the new version. The update is installed in the data folder, so it stays even if you recreate the container.",[164,486,487,488,491,492,495],{},"If you pull a newer image (",[188,489,490],{},"docker compose pull",", then ",[188,493,494],{},"docker compose up -d","), the container uses whichever is newer, the image or the copy in the data folder.",[168,497,499],{"id":498},"use-a-domain-and-https-optional","Use a domain and HTTPS (optional)",[164,501,502,503,506,507,510,511,191],{},"If you only use it in the office, ",[188,504,505],{},"http:\u002F\u002F\u003CNAS IP>:7420"," is enough. If you want ",[188,508,509],{},"https:\u002F\u002Fdanio.your-domain",", or want devices outside the office to connect, put a reverse proxy on the NAS. See ",[218,512,50],{"href":51},[514,515,516],"style",{},"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 pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}",{"title":235,"searchDepth":248,"depth":254,"links":518},[519,520,521,522,523,524,525],{"id":170,"depth":248,"text":171},{"id":212,"depth":248,"text":213},{"id":309,"depth":248,"text":310},{"id":349,"depth":248,"text":350},{"id":460,"depth":248,"text":461},{"id":480,"depth":248,"text":481},{"id":498,"depth":248,"text":499},"Run the host on a NAS with Docker, with a shared folder on the NAS as the store.","md",{},{"icon":48},{"title":45,"description":526},"E33Z6jEjA4QuHPADgg00UcpEP2FQlykbaKRBGXr0Tsc",[533,535],{"title":41,"path":42,"stem":43,"description":534,"children":-1},"[object Object]",{"title":50,"path":51,"stem":52,"description":536,"icon":53,"children":-1},"Connect artists at home and render machines in the cloud to the same workspace by switching the store to S3 and putting the host behind HTTPS.",1794627696229]