[{"data":1,"prerenderedAt":311},["ShallowReactive",2],{"content:\u002Fposts\u002F2025\u002Fa-simple-file-share-system":3,"surround:\u002Fposts\u002F2025\u002Fa-simple-file-share-system":299},{"id":4,"title":5,"body":6,"canonical":265,"categories":266,"date":268,"description":269,"draft":270,"extension":271,"image":265,"meta":272,"navigation":273,"path":274,"permalink":265,"readingTime":275,"recommend":265,"references":280,"seo":290,"sitemap":291,"stem":296,"tags":297,"type":265,"updated":268,"__hash__":298},"content\u002Fposts\u002F2025\u002FA simple file share system.md","一个简易的文件共享系统的实现",{"type":7,"value":8,"toc":246},"minimark",[9,13,17,24,34,38,46,49,54,57,60,64,72,82,86,95,102,105,108,116,119,124,127,133,139,153,156,174,177,183,189,195,201,207,213,219,224,227],[10,11,12],"h2",{"id":12},"使用技术栈",[14,15,16],"h3",{"id":16},"前端",[18,19,20],"blockquote",{},[21,22,23],"p",{},"使用我创建的 shadcn-vue-admin 来作为基础模板",[25,26,27,31],"ul",{},[28,29,30],"li",{},"Vue3",[28,32,33],{},"shadcn-vue",[14,35,37],{"id":36},"后端cms","后端（CMS）",[25,39,40,43],{},[28,41,42],{},"Strapi",[28,44,45],{},"sqlite",[14,47,48],{"id":48},"架构",[25,50,51],{},[28,52,53],{},"使用monorepo来管理项目，前端和后端都放在一个仓库里",[21,55,56],{},"代码编写过程就省略掉了，具体可以查看代码仓库（如果有需要的话）。",[10,58,59],{"id":59},"需要配置的地方",[14,61,63],{"id":62},"前端-viteconfigts","前端 -- vite.config.ts",[21,65,66,67,71],{},"我们需要把构建好的项目使用strapi的静态文件托管功能来托管，所以需要修改 ",[68,69,70],"code",{"code":70},"vite.config.ts"," 文件的build部分",[73,74,80],"pre",{"className":75,"code":77,"filename":70,"language":78,"meta":79},[76],"language-ts","export default defineConfig({\n    \u002F\u002F ...其他配置项\n\n    build: {\n        outDir: '..\u002Fcms\u002Fpublic\u002Fweb',\n    },\n    base: '\u002Fweb\u002F'\n})\n","ts","",[68,81,77],{"__ignoreMap":79},[14,83,85],{"id":84},"后端-配置启动文件和pm2配置文件","后端 -- 配置启动文件和pm2配置文件",[73,87,93],{"className":88,"code":90,"filename":91,"language":92,"meta":79},[89],"language-js","const strapi = require(\"@strapi\u002Fstrapi\")\n\nconst app = strapi.createStrapi(\u002F* {...} *\u002F)\n\napp.start()\n",".server.js","js",[68,94,90],{"__ignoreMap":79},[73,96,100],{"className":97,"code":98,"filename":99,"language":92,"meta":79},[89],"module.exports = {\n    apps: [\n        {\n            name: \"app\",\n            script: \"npm\",\n            args: \"start\",\n        },\n    ],\n}\n","ecosystem.config.js",[68,101,98],{"__ignoreMap":79},[10,103,104],{"id":104},"构建",[14,106,107],{"id":107},"前端构建",[73,109,114],{"className":110,"code":112,"language":113,"meta":79},[111],"language-bash","pnpm i && pnpm run build\n","bash",[68,115,112],{"__ignoreMap":79},[14,117,118],{"id":118},"后端构建",[73,120,122],{"className":121,"code":112,"language":113,"meta":79},[111],[68,123,112],{"__ignoreMap":79},[10,125,126],{"id":126},"启动",[21,128,129,130,132],{},"因为我们配置了 ",[68,131,99],{"code":99}," 脚本，可以方便的使用pm2来启动项目",[73,134,137],{"className":135,"code":136,"language":113,"meta":79},[111],"cd packages\u002Fcms && pm2 start\n",[68,138,136],{"__ignoreMap":79},[21,140,141,142,148,149],{},"前端地址：",[143,144,145],"a",{"href":145,"rel":146},"http:\u002F\u002Flocalhost:1337\u002Fweb",[147],"nofollow","\n管理地址：",[143,150,151],{"href":151,"rel":152},"http:\u002F\u002Flocalhost:1337\u002Fadmin",[147],[10,154,155],{"id":155},"主要效果预览",[21,157,158,159,164,165,169,170],{},"管理员生成用户\n",[160,161],"img",{"alt":162,"src":163},"管理员生成用户","https:\u002F\u002Fbitmc.uno\u002Fpicgo\u002F679ad04aaa8a2-78.webp","\n管理员文件管理\n",[160,166],{"alt":167,"src":168},"管理员文件管理","https:\u002F\u002Fbitmc.uno\u002Fpicgo\u002F679ad04b91a90-78.webp","\n前台文件查看\n",[160,171],{"alt":172,"src":173},"前台文件查看","https:\u002F\u002Fbitmc.uno\u002Fpicgo\u002F679ad049ec741-78.webp",[10,175,176],{"id":176},"配置开机启动",[178,179,180],"ol",{},[28,181,182],{},"保存pm2进程列表",[73,184,187],{"className":185,"code":186,"language":113,"meta":79},[111],"pm2 save\n",[68,188,186],{"__ignoreMap":79},[178,190,192],{"start":191},2,[28,193,194],{},"生成启动脚本",[73,196,199],{"className":197,"code":198,"language":113,"meta":79},[111],"pm2 startup\n",[68,200,198],{"__ignoreMap":79},[178,202,204],{"start":203},3,[28,205,206],{},"启动开机自启动",[73,208,211],{"className":209,"code":210,"language":113,"meta":79},[111],"pm2 startup systemd\n",[68,212,210],{"__ignoreMap":79},[178,214,216],{"start":215},4,[28,217,218],{},"再次保存进程列表",[73,220,222],{"className":221,"code":186,"language":113,"meta":79},[111],[68,223,186],{"__ignoreMap":79},[10,225,226],{"id":226},"走的弯路",[178,228,229,232],{},[28,230,231],{},"一开始老是想着用pm2来加载静态文件，后来灵光乍现，突然想到strapi会提供静态文件托管服务，前端部分只要build的时候直接build到strapi的静态文件目录下即可。",[28,233,234,235,238,239],{},"对于网络环境不好的情况，直接可以在项目里添加",[68,236,237],{"code":237},".npmrc","文件配置镜像，这个在一些电脑上比全局的镜像好用很多\n",[73,240,244],{"className":241,"code":243,"filename":237,"language":237,"meta":79},[242],"language-.npmrc","shamefully-hoist=true\n# 配置淘宝镜像，使用`npm i`时会走淘宝镜像。\nregistry=https:\u002F\u002Fregistry.npmmirror.com\u002F\n\n# sharp源\nsharp_binary_host=https:\u002F\u002Fnpmmirror.com\u002Fmirrors\u002Fsharp\nsharp_libvips_binary_host=https:\u002F\u002Fnpmmirror.com\u002Fmirrors\u002Fsharp-libvips\n",[68,245,243],{"__ignoreMap":79},{"title":79,"searchDepth":215,"depth":215,"links":247},[248,253,257,261,262,263,264],{"id":12,"depth":191,"text":12,"children":249},[250,251,252],{"id":16,"depth":203,"text":16},{"id":36,"depth":203,"text":37},{"id":48,"depth":203,"text":48},{"id":59,"depth":191,"text":59,"children":254},[255,256],{"id":62,"depth":203,"text":63},{"id":84,"depth":203,"text":85},{"id":104,"depth":191,"text":104,"children":258},[259,260],{"id":107,"depth":203,"text":107},{"id":118,"depth":203,"text":118},{"id":126,"depth":191,"text":126},{"id":155,"depth":191,"text":155},{"id":176,"depth":191,"text":176},{"id":226,"depth":191,"text":226},null,[267],"代码","2025-01-07 11:42:03","使用Vue3和Strapi实现一个简易的文件共享系统，可以方便的在局域网内使用账号密码分享文件。",false,"md",{},true,"\u002Fposts\u002F2025\u002Fa-simple-file-share-system",{"text":276,"minutes":277,"time":278,"words":279},"3 min read",2.24,134400,448,[281,284,287],{"title":282,"link":283},"如何使用 pm2 设置项目开机自动启动和删除自动启动？","https:\u002F\u002Frunkodo.com\u002Fpost\u002F3f60c",{"title":285,"link":286},"pm2","https:\u002F\u002Fpm2.keymetrics.io\u002F",{"title":288,"link":289},"How to use PM2 (process manager) with Strapi","https:\u002F\u002Fforum.strapi.io\u002Ft\u002Fhow-to-use-pm2-process-manager-with-strapi\u002F40619",{"title":5,"description":269},{"loc":274,"images":292},[293,294,295],{"loc":163},{"loc":168},{"loc":173},"posts\u002F2025\u002FA simple file share system",[],"4ESMX4WS26TBT5D8orKxYT0grrbgR9pioUJdJ3O_DLA",[300,306],{"title":301,"path":302,"stem":303,"date":304,"type":305,"children":-1},"本站为什么要从 Hexo 迁移到 Nuxt","\u002Fposts\u002F2025\u002Fwhy-migrate-to-nuxt","posts\u002F2025\u002Fwhy-migrate-to-nuxt","2025-01-06 16:38:36","story",{"title":307,"path":308,"stem":309,"date":310,"type":265,"children":-1},"【翻译】Vue 3 中的动态 Pinia Store","\u002Fposts\u002F2025\u002Fvue3-dynamic-pinia-store","posts\u002F2025\u002Fvue3-dynamic-pinia-store","2025-01-10 14:14:59",1789642590980]