[{"data":1,"prerenderedAt":617},["ShallowReactive",2],{"nav-docs":3,"nav-api":60,"docs-docker":89},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,28,32,36,40,44,48,52,56],{"title":10,"path":6,"stem":11},"Installation","docs\u002Findex",{"title":13,"path":14,"stem":15},"Sending files","\u002Fdocs\u002Fsending-files","docs\u002F02.sending-files",{"title":17,"path":18,"stem":19},"Receiving files","\u002Fdocs\u002Freceiving-files","docs\u002F03.receiving-files",{"title":21,"path":22,"stem":23},"Passwords, galleries and backgrounds","\u002Fdocs\u002Fshare-options","docs\u002F04.share-options",{"title":25,"path":26,"stem":27},"Expiry and deletion","\u002Fdocs\u002Fexpiry","docs\u002F05.expiry",{"title":29,"path":30,"stem":31},"Users","\u002Fdocs\u002Fusers","docs\u002F06.users",{"title":33,"path":34,"stem":35},"Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F07.configuration",{"title":37,"path":38,"stem":39},"Colours and branding","\u002Fdocs\u002Fcolors","docs\u002F08.colors",{"title":41,"path":42,"stem":43},"Docker","\u002Fdocs\u002Fdocker","docs\u002F09.docker",{"title":45,"path":46,"stem":47},"API keys","\u002Fdocs\u002Fapi-keys","docs\u002F10.api-keys",{"title":49,"path":50,"stem":51},"MCP server","\u002Fdocs\u002Fmcp-server","docs\u002F11.mcp-server",{"title":53,"path":54,"stem":55},"Troubleshooting","\u002Fdocs\u002Ftroubleshooting","docs\u002F12.troubleshooting",{"title":57,"path":58,"stem":59},"Contributing","\u002Fdocs\u002Fcontributing","docs\u002F13.contributing",[61],{"title":62,"path":63,"stem":64,"children":65},"Api","\u002Fapi","api",[66,69,73,77,81,85],{"title":67,"path":63,"stem":68},"REST API","api\u002Findex",{"title":70,"path":71,"stem":72},"Transfers","\u002Fapi\u002Ftransfers","api\u002F02.transfers",{"title":74,"path":75,"stem":76},"Uploading files","\u002Fapi\u002Fupload","api\u002F03.upload",{"title":78,"path":79,"stem":80},"Sending a transfer","\u002Fapi\u002Fsend","api\u002F04.send",{"title":82,"path":83,"stem":84},"Downloading","\u002Fapi\u002Fdownload","api\u002F05.download",{"title":86,"path":87,"stem":88},"Recipients","\u002Fapi\u002Frecipients","api\u002F06.recipients",{"id":90,"title":41,"body":91,"description":612,"extension":613,"meta":614,"navigation":541,"path":42,"seo":615,"stem":43,"__hash__":616},"docs\u002Fdocs\u002F09.docker.md",{"type":92,"value":93,"toc":604},"minimark",[94,98,111,121,138,143,155,158,162,248,251,267,270,274,377,380,384,566,570,585,589,600],[95,96,41],"h1",{"id":97},"docker",[99,100,101,102,106,107,110],"p",{},"The published image is multi-architecture — ",[103,104,105],"code",{},"linux\u002Famd64"," and ",[103,108,109],{},"linux\u002Farm64"," —\nso it runs on an ARM box as happily as on an ordinary server.",[112,113,118],"pre",{"className":114,"code":116,"language":117},[115],"language-text","florianstrasser\u002Flokaltransfer:latest\n","text",[103,119,116],{"__ignoreMap":120},"",[99,122,123,124,127,128,127,131,106,134,137],{},"Tags follow each release: ",[103,125,126],{},"0.1.5",", ",[103,129,130],{},"0.1",[103,132,133],{},"0",[103,135,136],{},"latest",".",[139,140,142],"h2",{"id":141},"the-database-inside-the-image","The database inside the image",[99,144,145,146,150,151,154],{},"The container carries its own MySQL 8 and starts it ",[147,148,149],"strong",{},"only"," when no external\ndatabase is configured. Set ",[103,152,153],{},"NUXT_MYSQL_HOST"," and the built-in server never\nstarts at all — no wasted memory, no second copy of your data.",[99,156,157],{},"That makes the first run a single command with nothing to set up first, while a\nreal deployment can point at a managed database without carrying a database it\ndoes not use.",[139,159,161],{"id":160},"volumes","Volumes",[112,163,167],{"className":164,"code":165,"language":166,"meta":120,"style":120},"language-bash shiki shiki-themes github-light github-dark","docker run -d \\\n  --name lokaltransfer \\\n  -p 3000:3000 \\\n  -v lokaltransfer-storage:\u002Fapp\u002Fstorage \\\n  -v lokaltransfer-db:\u002Fvar\u002Flib\u002Fmysql \\\n  -e NUXT_APP_URL=https:\u002F\u002Ftransfer.example.com \\\n  florianstrasser\u002Flokaltransfer:latest\n","bash",[103,168,169,188,199,210,221,231,242],{"__ignoreMap":120},[170,171,174,177,181,185],"span",{"class":172,"line":173},"line",1,[170,175,97],{"class":176},"sScJk",[170,178,180],{"class":179},"sZZnC"," run",[170,182,184],{"class":183},"sj4cs"," -d",[170,186,187],{"class":183}," \\\n",[170,189,191,194,197],{"class":172,"line":190},2,[170,192,193],{"class":183},"  --name",[170,195,196],{"class":179}," lokaltransfer",[170,198,187],{"class":183},[170,200,202,205,208],{"class":172,"line":201},3,[170,203,204],{"class":183},"  -p",[170,206,207],{"class":179}," 3000:3000",[170,209,187],{"class":183},[170,211,213,216,219],{"class":172,"line":212},4,[170,214,215],{"class":183},"  -v",[170,217,218],{"class":179}," lokaltransfer-storage:\u002Fapp\u002Fstorage",[170,220,187],{"class":183},[170,222,224,226,229],{"class":172,"line":223},5,[170,225,215],{"class":183},[170,227,228],{"class":179}," lokaltransfer-db:\u002Fvar\u002Flib\u002Fmysql",[170,230,187],{"class":183},[170,232,234,237,240],{"class":172,"line":233},6,[170,235,236],{"class":183},"  -e",[170,238,239],{"class":179}," NUXT_APP_URL=https:\u002F\u002Ftransfer.example.com",[170,241,187],{"class":183},[170,243,245],{"class":172,"line":244},7,[170,246,247],{"class":179},"  florianstrasser\u002Flokaltransfer:latest\n",[99,249,250],{},"Both are required for anything you intend to keep:",[252,253,254,261],"ul",{},[255,256,257,260],"li",{},[103,258,259],{},"\u002Fapp\u002Fstorage"," — the uploaded files.",[255,262,263,266],{},[103,264,265],{},"\u002Fvar\u002Flib\u002Fmysql"," — the built-in database. Omit it when using an external one.",[99,268,269],{},"Without them, both live in the container's writable layer and vanish the first\ntime you recreate the container. That is the mistake worth avoiding before it\ncosts you real transfers.",[139,271,273],{"id":272},"with-an-external-database","With an external database",[112,275,277],{"className":164,"code":276,"language":166,"meta":120,"style":120},"docker run -d \\\n  --name lokaltransfer \\\n  -p 3000:3000 \\\n  -v lokaltransfer-storage:\u002Fapp\u002Fstorage \\\n  -e NUXT_APP_URL=https:\u002F\u002Ftransfer.example.com \\\n  -e NUXT_MYSQL_HOST=db.example.com \\\n  -e NUXT_MYSQL_DATABASE=lokaltransfer \\\n  -e NUXT_MYSQL_USER=lokaltransfer \\\n  -e NUXT_MYSQL_PASSWORD=secret \\\n  -e NUXT_MYSQL_SSL=true \\\n  florianstrasser\u002Flokaltransfer:latest\n",[103,278,279,289,297,305,313,321,330,339,349,359,372],{"__ignoreMap":120},[170,280,281,283,285,287],{"class":172,"line":173},[170,282,97],{"class":176},[170,284,180],{"class":179},[170,286,184],{"class":183},[170,288,187],{"class":183},[170,290,291,293,295],{"class":172,"line":190},[170,292,193],{"class":183},[170,294,196],{"class":179},[170,296,187],{"class":183},[170,298,299,301,303],{"class":172,"line":201},[170,300,204],{"class":183},[170,302,207],{"class":179},[170,304,187],{"class":183},[170,306,307,309,311],{"class":172,"line":212},[170,308,215],{"class":183},[170,310,218],{"class":179},[170,312,187],{"class":183},[170,314,315,317,319],{"class":172,"line":223},[170,316,236],{"class":183},[170,318,239],{"class":179},[170,320,187],{"class":183},[170,322,323,325,328],{"class":172,"line":233},[170,324,236],{"class":183},[170,326,327],{"class":179}," NUXT_MYSQL_HOST=db.example.com",[170,329,187],{"class":183},[170,331,332,334,337],{"class":172,"line":244},[170,333,236],{"class":183},[170,335,336],{"class":179}," NUXT_MYSQL_DATABASE=lokaltransfer",[170,338,187],{"class":183},[170,340,342,344,347],{"class":172,"line":341},8,[170,343,236],{"class":183},[170,345,346],{"class":179}," NUXT_MYSQL_USER=lokaltransfer",[170,348,187],{"class":183},[170,350,352,354,357],{"class":172,"line":351},9,[170,353,236],{"class":183},[170,355,356],{"class":179}," NUXT_MYSQL_PASSWORD=secret",[170,358,187],{"class":183},[170,360,362,364,367,370],{"class":172,"line":361},10,[170,363,236],{"class":183},[170,365,366],{"class":179}," NUXT_MYSQL_SSL=",[170,368,369],{"class":183},"true",[170,371,187],{"class":183},[170,373,375],{"class":172,"line":374},11,[170,376,247],{"class":179},[99,378,379],{},"If your host offers an internal and an external address for the database, use\nwhichever one the container can actually resolve. They are frequently different,\nand the internal one often does not resolve from outside the provider's network.",[139,381,383],{"id":382},"docker-compose","docker compose",[112,385,389],{"className":386,"code":387,"language":388,"meta":120,"style":120},"language-yaml shiki shiki-themes github-light github-dark","services:\n  lokaltransfer:\n    image: florianstrasser\u002Flokaltransfer:latest\n    restart: unless-stopped\n    ports:\n      - \"3000:3000\"\n    environment:\n      NUXT_APP_URL: https:\u002F\u002Ftransfer.example.com\n      NUXT_ADMIN_EMAIL: you@example.com\n      NUXT_ADMIN_PASSWORD: a-long-password\n      NUXT_EMAIL_HOST: mail.example.com\n      NUXT_EMAIL_USER: noreply@example.com\n      NUXT_EMAIL_PASS: secret\n    volumes:\n      - storage:\u002Fapp\u002Fstorage\n      - db:\u002Fvar\u002Flib\u002Fmysql\n\nvolumes:\n  storage:\n  db:\n","yaml",[103,390,391,401,408,418,428,435,443,450,460,470,480,490,501,512,520,528,536,543,550,558],{"__ignoreMap":120},[170,392,393,397],{"class":172,"line":173},[170,394,396],{"class":395},"s9eBZ","services",[170,398,400],{"class":399},"sVt8B",":\n",[170,402,403,406],{"class":172,"line":190},[170,404,405],{"class":395},"  lokaltransfer",[170,407,400],{"class":399},[170,409,410,413,416],{"class":172,"line":201},[170,411,412],{"class":395},"    image",[170,414,415],{"class":399},": ",[170,417,116],{"class":179},[170,419,420,423,425],{"class":172,"line":212},[170,421,422],{"class":395},"    restart",[170,424,415],{"class":399},[170,426,427],{"class":179},"unless-stopped\n",[170,429,430,433],{"class":172,"line":223},[170,431,432],{"class":395},"    ports",[170,434,400],{"class":399},[170,436,437,440],{"class":172,"line":233},[170,438,439],{"class":399},"      - ",[170,441,442],{"class":179},"\"3000:3000\"\n",[170,444,445,448],{"class":172,"line":244},[170,446,447],{"class":395},"    environment",[170,449,400],{"class":399},[170,451,452,455,457],{"class":172,"line":341},[170,453,454],{"class":395},"      NUXT_APP_URL",[170,456,415],{"class":399},[170,458,459],{"class":179},"https:\u002F\u002Ftransfer.example.com\n",[170,461,462,465,467],{"class":172,"line":351},[170,463,464],{"class":395},"      NUXT_ADMIN_EMAIL",[170,466,415],{"class":399},[170,468,469],{"class":179},"you@example.com\n",[170,471,472,475,477],{"class":172,"line":361},[170,473,474],{"class":395},"      NUXT_ADMIN_PASSWORD",[170,476,415],{"class":399},[170,478,479],{"class":179},"a-long-password\n",[170,481,482,485,487],{"class":172,"line":374},[170,483,484],{"class":395},"      NUXT_EMAIL_HOST",[170,486,415],{"class":399},[170,488,489],{"class":179},"mail.example.com\n",[170,491,493,496,498],{"class":172,"line":492},12,[170,494,495],{"class":395},"      NUXT_EMAIL_USER",[170,497,415],{"class":399},[170,499,500],{"class":179},"noreply@example.com\n",[170,502,504,507,509],{"class":172,"line":503},13,[170,505,506],{"class":395},"      NUXT_EMAIL_PASS",[170,508,415],{"class":399},[170,510,511],{"class":179},"secret\n",[170,513,515,518],{"class":172,"line":514},14,[170,516,517],{"class":395},"    volumes",[170,519,400],{"class":399},[170,521,523,525],{"class":172,"line":522},15,[170,524,439],{"class":399},[170,526,527],{"class":179},"storage:\u002Fapp\u002Fstorage\n",[170,529,531,533],{"class":172,"line":530},16,[170,532,439],{"class":399},[170,534,535],{"class":179},"db:\u002Fvar\u002Flib\u002Fmysql\n",[170,537,539],{"class":172,"line":538},17,[170,540,542],{"emptyLinePlaceholder":541},true,"\n",[170,544,546,548],{"class":172,"line":545},18,[170,547,160],{"class":395},[170,549,400],{"class":399},[170,551,553,556],{"class":172,"line":552},19,[170,554,555],{"class":395},"  storage",[170,557,400],{"class":399},[170,559,561,564],{"class":172,"line":560},20,[170,562,563],{"class":395},"  db",[170,565,400],{"class":399},[139,567,569],{"id":568},"configuration-from-a-file","Configuration from a file",[99,571,572,573,576,577,580,581,584],{},"The entrypoint loads ",[103,574,575],{},"\u002Fapp\u002F.env"," if you mount one, so a host panel that only\noffers a file can still configure the instance. Real environment variables\nalways win over the file, so ",[103,578,579],{},"--env-file"," and compose ",[103,582,583],{},"environment:"," keep\nworking as expected.",[139,586,588],{"id":587},"health","Health",[99,590,591,592,595,596,599],{},"The image declares a ",[103,593,594],{},"HEALTHCHECK"," against ",[103,597,598],{},"\u002Fapi\u002Fhealth",", which also verifies\nthe database connection. An instance that cannot reach its database reports\nunhealthy rather than sitting in a load balancer's rotation serving errors.",[601,602,603],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":120,"searchDepth":190,"depth":190,"links":605},[606,607,608,609,610,611],{"id":141,"depth":190,"text":142},{"id":160,"depth":190,"text":161},{"id":272,"depth":190,"text":273},{"id":382,"depth":190,"text":383},{"id":568,"depth":190,"text":569},{"id":587,"depth":190,"text":588},"The published image is multi-architecture — linux\u002Famd64 and linux\u002Farm64 —\nso it runs on an ARM box as happily as on an ordinary server.","md",{},{"title":41,"description":612},"wktUmF8USdoj864pfW8_oFBoXcGslMFtIEnoNZ28LG8",1790104591923]