shipfe 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/shipfe +0 -0
- package/package.json +5 -1
- package/.github/workflows/deploy.yml +0 -46
- package/.github/workflows/release.yml +0 -51
- package/.vscode/settings.json +0 -5
- package/README_CN.md +0 -41
- package/docs/.vitepress/cache/deps/@theme_index.js +0 -275
- package/docs/.vitepress/cache/deps/@theme_index.js.map +0 -7
- package/docs/.vitepress/cache/deps/_metadata.json +0 -40
- package/docs/.vitepress/cache/deps/chunk-BRNHR3LR.js +0 -9719
- package/docs/.vitepress/cache/deps/chunk-BRNHR3LR.js.map +0 -7
- package/docs/.vitepress/cache/deps/chunk-H6MPEGKE.js +0 -12877
- package/docs/.vitepress/cache/deps/chunk-H6MPEGKE.js.map +0 -7
- package/docs/.vitepress/cache/deps/package.json +0 -3
- package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4505
- package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -583
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
- package/docs/.vitepress/cache/deps/vue.js +0 -347
- package/docs/.vitepress/cache/deps/vue.js.map +0 -7
- package/docs/.vitepress/config.ts +0 -120
- package/docs/.vitepress/dist/404.html +0 -22
- package/docs/.vitepress/dist/assets/app.DZUgfPE2.js +0 -1
- package/docs/.vitepress/dist/assets/chunks/framework.BeaujayP.js +0 -19
- package/docs/.vitepress/dist/assets/chunks/theme.CNyaCki0.js +0 -1
- package/docs/.vitepress/dist/assets/commands_deploy.md.cybIRa1n.js +0 -17
- package/docs/.vitepress/dist/assets/commands_deploy.md.cybIRa1n.lean.js +0 -1
- package/docs/.vitepress/dist/assets/commands_init.md.Da652so5.js +0 -2
- package/docs/.vitepress/dist/assets/commands_init.md.Da652so5.lean.js +0 -1
- package/docs/.vitepress/dist/assets/commands_rollback.md.C0zKmFtz.js +0 -7
- package/docs/.vitepress/dist/assets/commands_rollback.md.C0zKmFtz.lean.js +0 -1
- package/docs/.vitepress/dist/assets/config_auth.md.hvDhtWY8.js +0 -56
- package/docs/.vitepress/dist/assets/config_auth.md.hvDhtWY8.lean.js +0 -1
- package/docs/.vitepress/dist/assets/config_overview.md.DAQclMJL.js +0 -34
- package/docs/.vitepress/dist/assets/config_overview.md.DAQclMJL.lean.js +0 -1
- package/docs/.vitepress/dist/assets/config_schema.md.Bv5TuD6E.js +0 -1
- package/docs/.vitepress/dist/assets/config_schema.md.Bv5TuD6E.lean.js +0 -1
- package/docs/.vitepress/dist/assets/config_sub-env.md.DSUt0Nyq.js +0 -26
- package/docs/.vitepress/dist/assets/config_sub-env.md.DSUt0Nyq.lean.js +0 -1
- package/docs/.vitepress/dist/assets/features_atomic.md.Cszqfb8O.js +0 -22
- package/docs/.vitepress/dist/assets/features_atomic.md.Cszqfb8O.lean.js +0 -1
- package/docs/.vitepress/dist/assets/features_cleanup.md.D1j3LEm1.js +0 -20
- package/docs/.vitepress/dist/assets/features_cleanup.md.D1j3LEm1.lean.js +0 -1
- package/docs/.vitepress/dist/assets/features_shared-assets.md.ChpQD81r.js +0 -26
- package/docs/.vitepress/dist/assets/features_shared-assets.md.ChpQD81r.lean.js +0 -1
- package/docs/.vitepress/dist/assets/features_snapshot.md.Bddk9nNL.js +0 -24
- package/docs/.vitepress/dist/assets/features_snapshot.md.Bddk9nNL.lean.js +0 -1
- package/docs/.vitepress/dist/assets/index.md.DqmDY2QI.js +0 -1
- package/docs/.vitepress/dist/assets/index.md.DqmDY2QI.lean.js +0 -1
- package/docs/.vitepress/dist/assets/install.md.CblrJsha.js +0 -1
- package/docs/.vitepress/dist/assets/install.md.CblrJsha.lean.js +0 -1
- package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/docs/.vitepress/dist/assets/license.md.hVRT8__d.js +0 -1
- package/docs/.vitepress/dist/assets/license.md.hVRT8__d.lean.js +0 -1
- package/docs/.vitepress/dist/assets/quick-start.md.C06xD920.js +0 -23
- package/docs/.vitepress/dist/assets/quick-start.md.C06xD920.lean.js +0 -1
- package/docs/.vitepress/dist/assets/style.DES0mfMn.css +0 -1
- package/docs/.vitepress/dist/assets/troubleshooting.md.DLP5r-7N.js +0 -1
- package/docs/.vitepress/dist/assets/troubleshooting.md.DLP5r-7N.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_commands_deploy.md.BbKuBIij.js +0 -9
- package/docs/.vitepress/dist/assets/zh_commands_deploy.md.BbKuBIij.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_commands_init.md.Dc_WYD8D.js +0 -18
- package/docs/.vitepress/dist/assets/zh_commands_init.md.Dc_WYD8D.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_commands_rollback.md.Cdvwk1lB.js +0 -6
- package/docs/.vitepress/dist/assets/zh_commands_rollback.md.Cdvwk1lB.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_config_auth.md.BytNcdS4.js +0 -44
- package/docs/.vitepress/dist/assets/zh_config_auth.md.BytNcdS4.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_config_overview.md.CvAKxlb5.js +0 -45
- package/docs/.vitepress/dist/assets/zh_config_overview.md.CvAKxlb5.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_config_schema.md.CTCn0g9X.js +0 -67
- package/docs/.vitepress/dist/assets/zh_config_schema.md.CTCn0g9X.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_config_sub-env.md.Ce3xOEsi.js +0 -167
- package/docs/.vitepress/dist/assets/zh_config_sub-env.md.Ce3xOEsi.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_features_atomic.md.DUhJ_qq0.js +0 -42
- package/docs/.vitepress/dist/assets/zh_features_atomic.md.DUhJ_qq0.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_features_cleanup.md.CEgw587m.js +0 -50
- package/docs/.vitepress/dist/assets/zh_features_cleanup.md.CEgw587m.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_features_shared-assets.md.DZhvWCTp.js +0 -26
- package/docs/.vitepress/dist/assets/zh_features_shared-assets.md.DZhvWCTp.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_features_snapshot.md.Bkqgn7lu.js +0 -39
- package/docs/.vitepress/dist/assets/zh_features_snapshot.md.Bkqgn7lu.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_index.md.DKRf1R-g.js +0 -1
- package/docs/.vitepress/dist/assets/zh_index.md.DKRf1R-g.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_install.md.0LCLPI3L.js +0 -41
- package/docs/.vitepress/dist/assets/zh_install.md.0LCLPI3L.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_license.md.BUZ74dvK.js +0 -1
- package/docs/.vitepress/dist/assets/zh_license.md.BUZ74dvK.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_quick-start.md.Bl-Larcu.js +0 -19
- package/docs/.vitepress/dist/assets/zh_quick-start.md.Bl-Larcu.lean.js +0 -1
- package/docs/.vitepress/dist/assets/zh_troubleshooting.md.DHyCAfy2.js +0 -1
- package/docs/.vitepress/dist/assets/zh_troubleshooting.md.DHyCAfy2.lean.js +0 -1
- package/docs/.vitepress/dist/commands/deploy.html +0 -41
- package/docs/.vitepress/dist/commands/init.html +0 -26
- package/docs/.vitepress/dist/commands/rollback.html +0 -31
- package/docs/.vitepress/dist/config/auth.html +0 -80
- package/docs/.vitepress/dist/config/overview.html +0 -58
- package/docs/.vitepress/dist/config/schema.html +0 -25
- package/docs/.vitepress/dist/config/sub-env.html +0 -50
- package/docs/.vitepress/dist/features/atomic.html +0 -46
- package/docs/.vitepress/dist/features/cleanup.html +0 -44
- package/docs/.vitepress/dist/features/shared-assets.html +0 -50
- package/docs/.vitepress/dist/features/snapshot.html +0 -48
- package/docs/.vitepress/dist/hashmap.json +0 -1
- package/docs/.vitepress/dist/index.html +0 -25
- package/docs/.vitepress/dist/install.html +0 -25
- package/docs/.vitepress/dist/license.html +0 -25
- package/docs/.vitepress/dist/quick-start.html +0 -47
- package/docs/.vitepress/dist/troubleshooting.html +0 -25
- package/docs/.vitepress/dist/vp-icons.css +0 -0
- package/docs/.vitepress/dist/zh/commands/deploy.html +0 -33
- package/docs/.vitepress/dist/zh/commands/init.html +0 -42
- package/docs/.vitepress/dist/zh/commands/rollback.html +0 -30
- package/docs/.vitepress/dist/zh/config/auth.html +0 -68
- package/docs/.vitepress/dist/zh/config/overview.html +0 -69
- package/docs/.vitepress/dist/zh/config/schema.html +0 -91
- package/docs/.vitepress/dist/zh/config/sub-env.html +0 -191
- package/docs/.vitepress/dist/zh/features/atomic.html +0 -66
- package/docs/.vitepress/dist/zh/features/cleanup.html +0 -74
- package/docs/.vitepress/dist/zh/features/shared-assets.html +0 -50
- package/docs/.vitepress/dist/zh/features/snapshot.html +0 -63
- package/docs/.vitepress/dist/zh/index.html +0 -25
- package/docs/.vitepress/dist/zh/install.html +0 -65
- package/docs/.vitepress/dist/zh/license.html +0 -25
- package/docs/.vitepress/dist/zh/quick-start.html +0 -43
- package/docs/.vitepress/dist/zh/troubleshooting.html +0 -25
- package/docs/commands/deploy.md +0 -46
- package/docs/commands/init.md +0 -27
- package/docs/commands/rollback.md +0 -45
- package/docs/config/auth.md +0 -112
- package/docs/config/overview.md +0 -63
- package/docs/config/schema.md +0 -52
- package/docs/config/sub-env.md +0 -62
- package/docs/features/atomic.md +0 -67
- package/docs/features/cleanup.md +0 -80
- package/docs/features/shared-assets.md +0 -72
- package/docs/features/snapshot.md +0 -58
- package/docs/index.md +0 -48
- package/docs/install.md +0 -21
- package/docs/license.md +0 -23
- package/docs/quick-start.md +0 -98
- package/docs/troubleshooting.md +0 -88
- package/docs/zh/commands/deploy.md +0 -127
- package/docs/zh/commands/init.md +0 -76
- package/docs/zh/commands/rollback.md +0 -115
- package/docs/zh/config/auth.md +0 -195
- package/docs/zh/config/overview.md +0 -153
- package/docs/zh/config/schema.md +0 -253
- package/docs/zh/config/sub-env.md +0 -293
- package/docs/zh/features/atomic.md +0 -249
- package/docs/zh/features/cleanup.md +0 -241
- package/docs/zh/features/shared-assets.md +0 -72
- package/docs/zh/features/snapshot.md +0 -186
- package/docs/zh/index.md +0 -65
- package/docs/zh/install.md +0 -160
- package/docs/zh/license.md +0 -23
- package/docs/zh/quick-start.md +0 -109
- package/docs/zh/troubleshooting.md +0 -88
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="zh-CN" dir="ltr">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<title>原子部署 | Shipfe</title>
|
|
7
|
-
<meta name="description" content="一个强大的、免费的、基于 Rust 的 Web 应用部署工具">
|
|
8
|
-
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
-
<link rel="preload stylesheet" href="/shipfe-rust/assets/style.DES0mfMn.css" as="style">
|
|
10
|
-
<link rel="preload stylesheet" href="/shipfe-rust/vp-icons.css" as="style">
|
|
11
|
-
|
|
12
|
-
<script type="module" src="/shipfe-rust/assets/app.DZUgfPE2.js"></script>
|
|
13
|
-
<link rel="preload" href="/shipfe-rust/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
|
-
<link rel="modulepreload" href="/shipfe-rust/assets/chunks/theme.CNyaCki0.js">
|
|
15
|
-
<link rel="modulepreload" href="/shipfe-rust/assets/chunks/framework.BeaujayP.js">
|
|
16
|
-
<link rel="modulepreload" href="/shipfe-rust/assets/zh_features_atomic.md.DUhJ_qq0.lean.js">
|
|
17
|
-
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
18
|
-
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
19
|
-
</head>
|
|
20
|
-
<body>
|
|
21
|
-
<div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/shipfe-rust/zh/" data-v-1168a8e4><!--[--><!--]--><!----><span data-v-1168a8e4>Shipfe</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!----></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/shipfe-rust/zh/quick-start.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>快速入门</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/shipfe-rust/zh/config/overview.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>配置</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://github.com/Master-Jian/shipfe-rust" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>GitHub</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>中文</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/shipfe-rust/features/atomic.html" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>中文</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/shipfe-rust/features/atomic.html" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>开始</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>简介</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/quick-start.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>快速入门</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/install.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>安装</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>命令</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/commands/init.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>init</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/commands/deploy.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>deploy</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/commands/rollback.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>rollback</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>配置</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/overview.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>配置概览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/schema.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>配置项详解</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/auth.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>认证</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/sub-env.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>子环境</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 has-active" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>功能</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/atomic.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>原子部署</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/shared-assets.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>共享资源管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/snapshot.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>资源快照</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/cleanup.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>自动清理</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>运维</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/troubleshooting.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>故障排除</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _shipfe-rust_zh_features_atomic" data-v-39a288b8><div><h1 id="原子部署" tabindex="-1">原子部署 <a class="header-anchor" href="#原子部署" aria-label="Permalink to "原子部署""></a></h1><p>Shipfe 的核心特性:零停机、原子化的部署流程。</p><h2 id="什么是原子部署" tabindex="-1">什么是原子部署 <a class="header-anchor" href="#什么是原子部署" aria-label="Permalink to "什么是原子部署""></a></h2><p>原子部署意味着部署要么完全成功,要么完全失败,没有中间状态。这确保了应用在部署过程中的稳定性。</p><h2 id="部署流程" tabindex="-1">部署流程 <a class="header-anchor" href="#部署流程" aria-label="Permalink to "部署流程""></a></h2><h3 id="传统部署-vs-原子部署" tabindex="-1">传统部署 vs 原子部署 <a class="header-anchor" href="#传统部署-vs-原子部署" aria-label="Permalink to "传统部署 vs 原子部署""></a></h3><p><strong>传统部署</strong>:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>上传文件 → 覆盖现有文件 → 重启服务</span></span>
|
|
22
|
-
<span class="line"><span>❌ 如果上传中断,应用可能处于损坏状态</span></span></code></pre></div><p><strong>原子部署</strong>:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>创建新目录 → 上传到新目录 → 原子切换符号链接 → 清理旧版本</span></span>
|
|
23
|
-
<span class="line"><span>✅ 始终有一个可用的版本</span></span></code></pre></div><h2 id="详细流程" tabindex="-1">详细流程 <a class="header-anchor" href="#详细流程" aria-label="Permalink to "详细流程""></a></h2><h3 id="_1-准备阶段" tabindex="-1">1. 准备阶段 <a class="header-anchor" href="#_1-准备阶段" aria-label="Permalink to "1. 准备阶段""></a></h3><p>Shipfe 创建一个时间戳命名的发布目录:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>releases/</span></span>
|
|
24
|
-
<span class="line"><span>└── 20260304_120000/ # 新发布目录</span></span></code></pre></div><h3 id="_2-上传阶段" tabindex="-1">2. 上传阶段 <a class="header-anchor" href="#_2-上传阶段" aria-label="Permalink to "2. 上传阶段""></a></h3><p>所有文件上传到新目录:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 上传构建产物</span></span>
|
|
25
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">scp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./dist/</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">*</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> user@server:/var/www/myapp/releases/20260304_120000/</span></span></code></pre></div><h3 id="_3-验证阶段" tabindex="-1">3. 验证阶段 <a class="header-anchor" href="#_3-验证阶段" aria-label="Permalink to "3. 验证阶段""></a></h3><p>验证上传的文件完整性:</p><ul><li>检查文件大小</li><li>验证文件权限</li><li>运行健康检查(如果配置)</li></ul><h3 id="_4-切换阶段" tabindex="-1">4. 切换阶段 <a class="header-anchor" href="#_4-切换阶段" aria-label="Permalink to "4. 切换阶段""></a></h3><p>原子化切换当前版本:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 在服务器上执行</span></span>
|
|
26
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ln</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sfn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> releases/20260304_120000</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> current</span></span></code></pre></div><p>这个操作是原子的,瞬间完成。</p><h3 id="_5-清理阶段" tabindex="-1">5. 清理阶段 <a class="header-anchor" href="#_5-清理阶段" aria-label="Permalink to "5. 清理阶段""></a></h3><p>清理旧版本(根据配置):</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 删除超出限制的旧版本</span></span>
|
|
27
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -rf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> releases/20260303_100000/</span></span></code></pre></div><h2 id="零停机保证" tabindex="-1">零停机保证 <a class="header-anchor" href="#零停机保证" aria-label="Permalink to "零停机保证""></a></h2><h3 id="符号链接切换" tabindex="-1">符号链接切换 <a class="header-anchor" href="#符号链接切换" aria-label="Permalink to "符号链接切换""></a></h3><p>使用符号链接而不是直接覆盖文件:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>current -> releases/20260304_120000 # 新版本</span></span>
|
|
28
|
-
<span class="line"><span>current -> releases/20260304_110000 # 旧版本(仍然可用)</span></span></code></pre></div><h3 id="回滚能力" tabindex="-1">回滚能力 <a class="header-anchor" href="#回滚能力" aria-label="Permalink to "回滚能力""></a></h3><p>如果新版本有问题,可以立即回滚:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 切换回旧版本</span></span>
|
|
29
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ln</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sfn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> releases/20260304_110000</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> current</span></span></code></pre></div><h3 id="无缝切换" tabindex="-1">无缝切换 <a class="header-anchor" href="#无缝切换" aria-label="Permalink to "无缝切换""></a></h3><ul><li>Web服务器继续服务旧版本</li><li>用户不会察觉到切换过程</li><li>新请求自动路由到新版本</li></ul><h2 id="错误处理" tabindex="-1">错误处理 <a class="header-anchor" href="#错误处理" aria-label="Permalink to "错误处理""></a></h2><h3 id="部署失败" tabindex="-1">部署失败 <a class="header-anchor" href="#部署失败" aria-label="Permalink to "部署失败""></a></h3><p>如果在任何阶段失败:</p><ol><li><strong>清理失败的发布目录</strong></li><li><strong>保持当前版本不变</strong></li><li><strong>记录详细错误信息</strong></li><li><strong>应用继续正常运行</strong></li></ol><h3 id="部分上传" tabindex="-1">部分上传 <a class="header-anchor" href="#部分上传" aria-label="Permalink to "部分上传""></a></h3><p>如果文件上传中断:</p><ul><li>未完成的发布目录被删除</li><li>当前版本不受影响</li><li>可以重新开始部署</li></ul><h2 id="性能优势" tabindex="-1">性能优势 <a class="header-anchor" href="#性能优势" aria-label="Permalink to "性能优势""></a></h2><h3 id="增量部署" tabindex="-1">增量部署 <a class="header-anchor" href="#增量部署" aria-label="Permalink to "增量部署""></a></h3><p>只上传变更的文件:</p><ul><li><strong>首次部署</strong>:上传所有文件</li><li><strong>后续部署</strong>:只上传变更的文件</li><li><strong>大幅减少</strong>:网络传输时间</li></ul><h3 id="并行处理" tabindex="-1">并行处理 <a class="header-anchor" href="#并行处理" aria-label="Permalink to "并行处理""></a></h3><p>支持并行文件上传:</p><ul><li>多个文件同时传输</li><li>充分利用带宽</li><li>减少部署时间</li></ul><h2 id="目录结构" tabindex="-1">目录结构 <a class="header-anchor" href="#目录结构" aria-label="Permalink to "目录结构""></a></h2><p>完整的部署目录结构:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>remote_deploy_path/</span></span>
|
|
30
|
-
<span class="line"><span>├── current -> releases/20260304_120000 # 当前活动版本</span></span>
|
|
31
|
-
<span class="line"><span>├── releases/ # 所有历史版本</span></span>
|
|
32
|
-
<span class="line"><span>│ ├── 20260304_120000/ # 最新版本</span></span>
|
|
33
|
-
<span class="line"><span>│ │ ├── index.html</span></span>
|
|
34
|
-
<span class="line"><span>│ │ ├── app.js</span></span>
|
|
35
|
-
<span class="line"><span>│ │ └── styles.css</span></span>
|
|
36
|
-
<span class="line"><span>│ ├── 20260304_110000/ # 上一版本</span></span>
|
|
37
|
-
<span class="line"><span>│ └── 20260304_100000/ # 更早版本</span></span>
|
|
38
|
-
<span class="line"><span>└── shared/ # 共享资源(可选)</span></span>
|
|
39
|
-
<span class="line"><span> └── assets/</span></span></code></pre></div><h2 id="配置选项" tabindex="-1">配置选项 <a class="header-anchor" href="#配置选项" aria-label="Permalink to "配置选项""></a></h2><h3 id="保留版本数量" tabindex="-1">保留版本数量 <a class="header-anchor" href="#保留版本数量" aria-label="Permalink to "保留版本数量""></a></h3><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
40
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "keep_releases"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">5</span></span>
|
|
41
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>控制保留的历史版本数量。</p><h3 id="清理策略" tabindex="-1">清理策略 <a class="header-anchor" href="#清理策略" aria-label="Permalink to "清理策略""></a></h3><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
42
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "delete_old"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 保留多个版本</span></span>
|
|
43
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>或</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
44
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "delete_old"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 只保留最新版本</span></span>
|
|
45
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="监控和日志" tabindex="-1">监控和日志 <a class="header-anchor" href="#监控和日志" aria-label="Permalink to "监控和日志""></a></h2><h3 id="部署日志" tabindex="-1">部署日志 <a class="header-anchor" href="#部署日志" aria-label="Permalink to "部署日志""></a></h3><p>每次部署都会记录详细日志:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>2026-03-04 12:00:00 INFO Starting deployment</span></span>
|
|
46
|
-
<span class="line"><span>2026-03-04 12:00:01 INFO Created release directory: releases/20260304_120000</span></span>
|
|
47
|
-
<span class="line"><span>2026-03-04 12:00:05 INFO Uploaded 150 files (45.2 MB)</span></span>
|
|
48
|
-
<span class="line"><span>2026-03-04 12:00:06 INFO Switched to new release</span></span>
|
|
49
|
-
<span class="line"><span>2026-03-04 12:00:07 INFO Deployment completed successfully</span></span></code></pre></div><h3 id="健康检查" tabindex="-1">健康检查 <a class="header-anchor" href="#健康检查" aria-label="Permalink to "健康检查""></a></h3><p>配置部署后的健康检查:</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
50
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "post_deploy_commands"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
|
51
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "curl -f http://localhost/health || exit 1"</span></span>
|
|
52
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
|
|
53
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="最佳实践" tabindex="-1">最佳实践 <a class="header-anchor" href="#最佳实践" aria-label="Permalink to "最佳实践""></a></h2><ol><li><strong>测试部署</strong>:先在测试环境验证</li><li><strong>监控日志</strong>:实时监控部署日志</li><li><strong>备份策略</strong>:保留足够的历史版本</li><li><strong>回滚计划</strong>:准备好回滚方案</li><li><strong>性能监控</strong>:监控部署时间和资源使用</li></ol><h2 id="故障排除" tabindex="-1">故障排除 <a class="header-anchor" href="#故障排除" aria-label="Permalink to "故障排除""></a></h2><h3 id="切换失败" tabindex="-1">切换失败 <a class="header-anchor" href="#切换失败" aria-label="Permalink to "切换失败""></a></h3><p>如果符号链接切换失败:</p><ul><li>检查文件系统权限</li><li>验证当前目录存在</li><li>确认没有进程锁定文件</li></ul><h3 id="权限问题" tabindex="-1">权限问题 <a class="header-anchor" href="#权限问题" aria-label="Permalink to "权限问题""></a></h3><p>确保部署用户有足够权限:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 检查目录权限</span></span>
|
|
54
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ls</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -la</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /var/www/myapp/</span></span>
|
|
55
|
-
<span class="line"></span>
|
|
56
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 修复权限</span></span>
|
|
57
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chown</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -R</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> deploy:deploy</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /var/www/myapp/</span></span>
|
|
58
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -R</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 755</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /var/www/myapp/</span></span></code></pre></div><h3 id="磁盘空间" tabindex="-1">磁盘空间 <a class="header-anchor" href="#磁盘空间" aria-label="Permalink to "磁盘空间""></a></h3><p>监控磁盘使用情况:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 检查磁盘空间</span></span>
|
|
59
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">df</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -h</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /var/www/myapp/</span></span>
|
|
60
|
-
<span class="line"></span>
|
|
61
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 清理旧版本</span></span>
|
|
62
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">shipfe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> deploy</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 会自动清理</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/shipfe-rust/zh/config/sub-env.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>子环境</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/shipfe-rust/zh/features/shared-assets.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>共享资源管理</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
63
|
-
<script>window.__VP_HASH_MAP__=JSON.parse("{\"commands_deploy.md\":\"cybIRa1n\",\"commands_init.md\":\"Da652so5\",\"commands_rollback.md\":\"C0zKmFtz\",\"config_auth.md\":\"hvDhtWY8\",\"config_overview.md\":\"DAQclMJL\",\"config_schema.md\":\"Bv5TuD6E\",\"config_sub-env.md\":\"DSUt0Nyq\",\"features_atomic.md\":\"Cszqfb8O\",\"features_cleanup.md\":\"D1j3LEm1\",\"features_shared-assets.md\":\"ChpQD81r\",\"features_snapshot.md\":\"Bddk9nNL\",\"index.md\":\"DqmDY2QI\",\"install.md\":\"CblrJsha\",\"license.md\":\"hVRT8__d\",\"quick-start.md\":\"C06xD920\",\"troubleshooting.md\":\"DLP5r-7N\",\"zh_commands_deploy.md\":\"BbKuBIij\",\"zh_commands_init.md\":\"Dc_WYD8D\",\"zh_commands_rollback.md\":\"Cdvwk1lB\",\"zh_config_auth.md\":\"BytNcdS4\",\"zh_config_overview.md\":\"CvAKxlb5\",\"zh_config_schema.md\":\"CTCn0g9X\",\"zh_config_sub-env.md\":\"Ce3xOEsi\",\"zh_features_atomic.md\":\"DUhJ_qq0\",\"zh_features_cleanup.md\":\"CEgw587m\",\"zh_features_shared-assets.md\":\"DZhvWCTp\",\"zh_features_snapshot.md\":\"Bkqgn7lu\",\"zh_index.md\":\"DKRf1R-g\",\"zh_install.md\":\"0LCLPI3L\",\"zh_license.md\":\"BUZ74dvK\",\"zh_quick-start.md\":\"Bl-Larcu\",\"zh_troubleshooting.md\":\"DHyCAfy2\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Shipfe\",\"description\":\"A VitePress site\",\"base\":\"/shipfe-rust/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en\",\"title\":\"Shipfe\",\"description\":\"A powerful, free, Rust-based web app deployment tool\",\"themeConfig\":{\"nav\":[{\"text\":\"Quick Start\",\"link\":\"/quick-start\"},{\"text\":\"Config\",\"link\":\"/config/overview\"},{\"text\":\"GitHub\",\"link\":\"https://github.com/Master-Jian/shipfe-rust\"}],\"sidebar\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/\"},{\"text\":\"Quick Start\",\"link\":\"/quick-start\"},{\"text\":\"Installation\",\"link\":\"/install\"}]},{\"text\":\"Commands\",\"items\":[{\"text\":\"init\",\"link\":\"/commands/init\"},{\"text\":\"deploy\",\"link\":\"/commands/deploy\"},{\"text\":\"rollback\",\"link\":\"/commands/rollback\"}]},{\"text\":\"Configuration\",\"items\":[{\"text\":\"Config Overview\",\"link\":\"/config/overview\"},{\"text\":\"Config Schema\",\"link\":\"/config/schema\"},{\"text\":\"Authentication\",\"link\":\"/config/auth\"},{\"text\":\"Sub-environments\",\"link\":\"/config/sub-env\"}]},{\"text\":\"Features\",\"items\":[{\"text\":\"Atomic Deployment\",\"link\":\"/features/atomic\"},{\"text\":\"Shared Assets\",\"link\":\"/features/shared-assets\"},{\"text\":\"Snapshots\",\"link\":\"/features/snapshot\"},{\"text\":\"Cleanup\",\"link\":\"/features/cleanup\"}]},{\"text\":\"Operations\",\"items\":[{\"text\":\"Troubleshooting\",\"link\":\"/troubleshooting\"}]}]}},\"zh\":{\"label\":\"中文\",\"lang\":\"zh-CN\",\"title\":\"Shipfe\",\"description\":\"一个强大的、免费的、基于 Rust 的 Web 应用部署工具\",\"themeConfig\":{\"nav\":[{\"text\":\"快速入门\",\"link\":\"/zh/quick-start\"},{\"text\":\"配置\",\"link\":\"/zh/config/overview\"},{\"text\":\"GitHub\",\"link\":\"https://github.com/Master-Jian/shipfe-rust\"}],\"sidebar\":[{\"text\":\"开始\",\"items\":[{\"text\":\"简介\",\"link\":\"/zh/\"},{\"text\":\"快速入门\",\"link\":\"/zh/quick-start\"},{\"text\":\"安装\",\"link\":\"/zh/install\"}]},{\"text\":\"命令\",\"items\":[{\"text\":\"init\",\"link\":\"/zh/commands/init\"},{\"text\":\"deploy\",\"link\":\"/zh/commands/deploy\"},{\"text\":\"rollback\",\"link\":\"/zh/commands/rollback\"}]},{\"text\":\"配置\",\"items\":[{\"text\":\"配置概览\",\"link\":\"/zh/config/overview\"},{\"text\":\"配置项详解\",\"link\":\"/zh/config/schema\"},{\"text\":\"认证\",\"link\":\"/zh/config/auth\"},{\"text\":\"子环境\",\"link\":\"/zh/config/sub-env\"}]},{\"text\":\"功能\",\"items\":[{\"text\":\"原子部署\",\"link\":\"/zh/features/atomic\"},{\"text\":\"共享资源管理\",\"link\":\"/zh/features/shared-assets\"},{\"text\":\"资源快照\",\"link\":\"/zh/features/snapshot\"},{\"text\":\"自动清理\",\"link\":\"/zh/features/cleanup\"}]},{\"text\":\"运维\",\"items\":[{\"text\":\"故障排除\",\"link\":\"/zh/troubleshooting\"}]}]}}},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
64
|
-
|
|
65
|
-
</body>
|
|
66
|
-
</html>
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="zh-CN" dir="ltr">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<title>自动清理 | Shipfe</title>
|
|
7
|
-
<meta name="description" content="一个强大的、免费的、基于 Rust 的 Web 应用部署工具">
|
|
8
|
-
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
-
<link rel="preload stylesheet" href="/shipfe-rust/assets/style.DES0mfMn.css" as="style">
|
|
10
|
-
<link rel="preload stylesheet" href="/shipfe-rust/vp-icons.css" as="style">
|
|
11
|
-
|
|
12
|
-
<script type="module" src="/shipfe-rust/assets/app.DZUgfPE2.js"></script>
|
|
13
|
-
<link rel="preload" href="/shipfe-rust/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
|
-
<link rel="modulepreload" href="/shipfe-rust/assets/chunks/theme.CNyaCki0.js">
|
|
15
|
-
<link rel="modulepreload" href="/shipfe-rust/assets/chunks/framework.BeaujayP.js">
|
|
16
|
-
<link rel="modulepreload" href="/shipfe-rust/assets/zh_features_cleanup.md.CEgw587m.lean.js">
|
|
17
|
-
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
18
|
-
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
19
|
-
</head>
|
|
20
|
-
<body>
|
|
21
|
-
<div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/shipfe-rust/zh/" data-v-1168a8e4><!--[--><!--]--><!----><span data-v-1168a8e4>Shipfe</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!----></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/shipfe-rust/zh/quick-start.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>快速入门</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/shipfe-rust/zh/config/overview.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>配置</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://github.com/Master-Jian/shipfe-rust" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>GitHub</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>中文</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/shipfe-rust/features/cleanup.html" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>中文</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/shipfe-rust/features/cleanup.html" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>开始</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>简介</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/quick-start.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>快速入门</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/install.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>安装</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>命令</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/commands/init.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>init</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/commands/deploy.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>deploy</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/commands/rollback.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>rollback</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>配置</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/overview.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>配置概览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/schema.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>配置项详解</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/auth.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>认证</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/sub-env.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>子环境</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 has-active" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>功能</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/atomic.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>原子部署</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/shared-assets.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>共享资源管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/snapshot.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>资源快照</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/cleanup.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>自动清理</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>运维</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/troubleshooting.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>故障排除</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _shipfe-rust_zh_features_cleanup" data-v-39a288b8><div><h1 id="自动清理" tabindex="-1">自动清理 <a class="header-anchor" href="#自动清理" aria-label="Permalink to "自动清理""></a></h1><p>Shipfe 提供可配置的自动清理旧发布和未使用共享资源功能。</p><h2 id="配置选项" tabindex="-1">配置选项 <a class="header-anchor" href="#配置选项" aria-label="Permalink to "配置选项""></a></h2><h3 id="keep-releases-推荐" tabindex="-1"><code>keep_releases</code>(推荐) <a class="header-anchor" href="#keep-releases-推荐" aria-label="Permalink to "`keep_releases`(推荐)""></a></h3><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
22
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "keep_releases"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">5</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
23
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "delete_old"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span></span>
|
|
24
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><ul><li>保留最近的 5 个发布</li><li>自动删除旧发布</li><li>与共享资源清理配合工作</li></ul><h3 id="delete-old-传统" tabindex="-1"><code>delete_old</code>(传统) <a class="header-anchor" href="#delete-old-传统" aria-label="Permalink to "`delete_old`(传统)""></a></h3><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
25
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "delete_old"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span>
|
|
26
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><ul><li>在每次部署后删除所有旧发布</li><li>只保留当前部署</li><li>覆盖 <code>keep_releases</code> 设置</li></ul><h2 id="清理过程" tabindex="-1">清理过程 <a class="header-anchor" href="#清理过程" aria-label="Permalink to "清理过程""></a></h2><h3 id="发布清理" tabindex="-1">发布清理 <a class="header-anchor" href="#发布清理" aria-label="Permalink to "发布清理""></a></h3><ol><li>按修改时间排序发布(最新优先)</li><li>保留指定数量的最近发布</li><li>完全删除旧发布目录</li></ol><h3 id="共享资源清理-当-enable-shared-true-时" tabindex="-1">共享资源清理(当 <code>enable_shared: true</code> 时) <a class="header-anchor" href="#共享资源清理-当-enable-shared-true-时" aria-label="Permalink to "共享资源清理(当 `enable_shared: true` 时)""></a></h3><ol><li>扫描所有剩余发布快照</li><li>收集当前被引用的所有哈希资源</li><li>从 <code>shared/assets/</code> 删除未引用的文件</li></ol><h2 id="清理行为示例" tabindex="-1">清理行为示例 <a class="header-anchor" href="#清理行为示例" aria-label="Permalink to "清理行为示例""></a></h2><h3 id="清理前-7-个发布" tabindex="-1">清理前(7 个发布) <a class="header-anchor" href="#清理前-7-个发布" aria-label="Permalink to "清理前(7 个发布)""></a></h3><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>releases/</span></span>
|
|
27
|
-
<span class="line"><span>├── 20260301_100000/ (最旧)</span></span>
|
|
28
|
-
<span class="line"><span>├── 20260302_100000/</span></span>
|
|
29
|
-
<span class="line"><span>├── 20260303_100000/</span></span>
|
|
30
|
-
<span class="line"><span>├── 20260304_100000/</span></span>
|
|
31
|
-
<span class="line"><span>├── 20260305_100000/</span></span>
|
|
32
|
-
<span class="line"><span>├── 20260306_100000/</span></span>
|
|
33
|
-
<span class="line"><span>└── 20260307_100000/ (最新,当前)</span></span></code></pre></div><h3 id="清理后-keep-releases-3" tabindex="-1">清理后(<code>keep_releases: 3</code>) <a class="header-anchor" href="#清理后-keep-releases-3" aria-label="Permalink to "清理后(`keep_releases: 3`)""></a></h3><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>releases/</span></span>
|
|
34
|
-
<span class="line"><span>├── 20260305_100000/ (保留)</span></span>
|
|
35
|
-
<span class="line"><span>├── 20260306_100000/ (保留)</span></span>
|
|
36
|
-
<span class="line"><span>└── 20260307_100000/ (保留,当前)</span></span></code></pre></div><p><em>旧发布自动删除</em></p><h2 id="监控清理" tabindex="-1">监控清理 <a class="header-anchor" href="#监控清理" aria-label="Permalink to "监控清理""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 检查当前发布</span></span>
|
|
37
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ls</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -la</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> releases/</span></span>
|
|
38
|
-
<span class="line"></span>
|
|
39
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 在 shipfe.log 中查看清理日志</span></span>
|
|
40
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">tail</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> shipfe.log</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "cleanup\|remove"</span></span></code></pre></div><h2 id="手动清理" tabindex="-1">手动清理 <a class="header-anchor" href="#手动清理" aria-label="Permalink to "手动清理""></a></h2><h3 id="强制清理" tabindex="-1">强制清理 <a class="header-anchor" href="#强制清理" aria-label="Permalink to "强制清理""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 重新部署会触发清理</span></span>
|
|
41
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">shipfe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> deploy</span></span></code></pre></div><h3 id="自定义清理脚本" tabindex="-1">自定义清理脚本 <a class="header-anchor" href="#自定义清理脚本" aria-label="Permalink to "自定义清理脚本""></a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">#!/bin/bash</span></span>
|
|
42
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 自定义清理脚本示例</span></span>
|
|
43
|
-
<span class="line"></span>
|
|
44
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">DEPLOY_PATH</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/myapp"</span></span>
|
|
45
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">KEEP_RELEASES</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">5</span></span>
|
|
46
|
-
<span class="line"></span>
|
|
47
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 进入发布目录</span></span>
|
|
48
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$DEPLOY_PATH</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/releases"</span></span>
|
|
49
|
-
<span class="line"></span>
|
|
50
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 获取要删除的旧发布</span></span>
|
|
51
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">OLD_RELEASES</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ls</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tail</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$((</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">KEEP_RELEASES</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)))</span></span>
|
|
52
|
-
<span class="line"></span>
|
|
53
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># 删除旧发布</span></span>
|
|
54
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> release </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> $OLD_RELEASES; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">do</span></span>
|
|
55
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Removing old release: </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$release</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span>
|
|
56
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -rf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$release</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span>
|
|
57
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">done</span></span></code></pre></div><h2 id="清理策略选择" tabindex="-1">清理策略选择 <a class="header-anchor" href="#清理策略选择" aria-label="Permalink to "清理策略选择""></a></h2><h3 id="滚动发布策略" tabindex="-1">滚动发布策略 <a class="header-anchor" href="#滚动发布策略" aria-label="Permalink to "滚动发布策略""></a></h3><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
58
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "keep_releases"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">5</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
59
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "delete_old"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span></span>
|
|
60
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p><strong>适用场景</strong>:</p><ul><li>需要频繁回滚</li><li>存储空间充足</li><li>重视部署历史</li></ul><h3 id="最小化策略" tabindex="-1">最小化策略 <a class="header-anchor" href="#最小化策略" aria-label="Permalink to "最小化策略""></a></h3><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
61
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "delete_old"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span>
|
|
62
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p><strong>适用场景</strong>:</p><ul><li>存储空间有限</li><li>部署频繁</li><li>不需要历史版本</li></ul><h2 id="共享资源清理" tabindex="-1">共享资源清理 <a class="header-anchor" href="#共享资源清理" aria-label="Permalink to "共享资源清理""></a></h2><p>当启用共享资源时,清理过程更复杂:</p><ol><li><strong>扫描快照</strong>:检查所有保留发布的快照文件</li><li><strong>收集引用</strong>:汇总所有仍在使用的共享资源哈希</li><li><strong>安全删除</strong>:只删除完全未引用的共享文件</li></ol><h3 id="示例清理过程" tabindex="-1">示例清理过程 <a class="header-anchor" href="#示例清理过程" aria-label="Permalink to "示例清理过程""></a></h3><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>保留发布:v1, v2, v3</span></span>
|
|
63
|
-
<span class="line"><span>v1 使用的共享资源:a.js, b.css</span></span>
|
|
64
|
-
<span class="line"><span>v2 使用的共享资源:a.js, c.png</span></span>
|
|
65
|
-
<span class="line"><span>v3 使用的共享资源:b.css, d.svg</span></span>
|
|
66
|
-
<span class="line"><span></span></span>
|
|
67
|
-
<span class="line"><span>仍在使用的资源:a.js, b.css, c.png, d.svg</span></span>
|
|
68
|
-
<span class="line"><span>可删除的资源:(无)</span></span>
|
|
69
|
-
<span class="line"><span></span></span>
|
|
70
|
-
<span class="line"><span>结果:所有共享资源都被保留</span></span></code></pre></div><h2 id="性能影响" tabindex="-1">性能影响 <a class="header-anchor" href="#性能影响" aria-label="Permalink to "性能影响""></a></h2><h3 id="磁盘i-o" tabindex="-1">磁盘I/O <a class="header-anchor" href="#磁盘i-o" aria-label="Permalink to "磁盘I/O""></a></h3><ul><li>清理操作主要涉及文件删除</li><li>对运行中的应用无影响</li><li>可以在低峰期执行</li></ul><h3 id="存储优化" tabindex="-1">存储优化 <a class="header-anchor" href="#存储优化" aria-label="Permalink to "存储优化""></a></h3><ul><li>自动释放磁盘空间</li><li>防止日志和临时文件积累</li><li>维持健康的存储使用率</li></ul><h2 id="安全考虑" tabindex="-1">安全考虑 <a class="header-anchor" href="#安全考虑" aria-label="Permalink to "安全考虑""></a></h2><h3 id="数据保护" tabindex="-1">数据保护 <a class="header-anchor" href="#数据保护" aria-label="Permalink to "数据保护""></a></h3><ul><li>清理前验证快照完整性</li><li>只删除确认未使用的文件</li><li>保留最近的多个版本作为安全网</li></ul><h3 id="权限检查" tabindex="-1">权限检查 <a class="header-anchor" href="#权限检查" aria-label="Permalink to "权限检查""></a></h3><ul><li>验证删除权限</li><li>避免删除系统文件</li><li>记录所有清理操作</li></ul><h2 id="故障排除" tabindex="-1">故障排除 <a class="header-anchor" href="#故障排除" aria-label="Permalink to "故障排除""></a></h2><h3 id="清理失败" tabindex="-1">清理失败 <a class="header-anchor" href="#清理失败" aria-label="Permalink to "清理失败""></a></h3><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>Warning: Failed to remove old release</span></span></code></pre></div><p><strong>可能原因</strong>:</p><ul><li>文件被进程锁定</li><li>权限不足</li><li>文件系统问题</li></ul><p><strong>解决方案</strong>:</p><ul><li>检查文件锁定:<code>lsof +D /path/to/release</code></li><li>修复权限:<code>chmod -R 755 /var/www/myapp</code></li><li>手动清理:<code>rm -rf /path/to/old/release</code></li></ul><h3 id="共享资源清理问题" tabindex="-1">共享资源清理问题 <a class="header-anchor" href="#共享资源清理问题" aria-label="Permalink to "共享资源清理问题""></a></h3><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>Warning: Failed to cleanup shared assets</span></span></code></pre></div><p><strong>可能原因</strong>:</p><ul><li>快照文件损坏</li><li>硬链接引用错误</li><li>权限问题</li></ul><p><strong>解决方案</strong>:</p><ul><li>验证快照文件</li><li>检查硬链接:<code>ls -la shared/assets/</code></li><li>重新生成共享资源</li></ul><h3 id="磁盘空间不足" tabindex="-1">磁盘空间不足 <a class="header-anchor" href="#磁盘空间不足" aria-label="Permalink to "磁盘空间不足""></a></h3><p>如果清理无法释放足够空间:</p><ul><li>检查大文件:<code>du -sh releases/*</code></li><li>手动删除旧版本</li><li>增加 <code>keep_releases</code> 的值</li><li>考虑迁移到更大磁盘</li></ul><h2 id="最佳实践" tabindex="-1">最佳实践 <a class="header-anchor" href="#最佳实践" aria-label="Permalink to "最佳实践""></a></h2><ol><li><strong>监控存储使用</strong>:定期检查磁盘使用情况</li><li><strong>设置合理保留数量</strong>:根据部署频率调整 <code>keep_releases</code></li><li><strong>备份重要版本</strong>:对关键版本进行额外备份</li><li><strong>日志监控</strong>:监控清理操作的日志</li><li><strong>定期审核</strong>:检查清理策略是否仍然合适</li></ol></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/shipfe-rust/zh/features/snapshot.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>资源快照</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/shipfe-rust/zh/troubleshooting.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>故障排除</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
71
|
-
<script>window.__VP_HASH_MAP__=JSON.parse("{\"commands_deploy.md\":\"cybIRa1n\",\"commands_init.md\":\"Da652so5\",\"commands_rollback.md\":\"C0zKmFtz\",\"config_auth.md\":\"hvDhtWY8\",\"config_overview.md\":\"DAQclMJL\",\"config_schema.md\":\"Bv5TuD6E\",\"config_sub-env.md\":\"DSUt0Nyq\",\"features_atomic.md\":\"Cszqfb8O\",\"features_cleanup.md\":\"D1j3LEm1\",\"features_shared-assets.md\":\"ChpQD81r\",\"features_snapshot.md\":\"Bddk9nNL\",\"index.md\":\"DqmDY2QI\",\"install.md\":\"CblrJsha\",\"license.md\":\"hVRT8__d\",\"quick-start.md\":\"C06xD920\",\"troubleshooting.md\":\"DLP5r-7N\",\"zh_commands_deploy.md\":\"BbKuBIij\",\"zh_commands_init.md\":\"Dc_WYD8D\",\"zh_commands_rollback.md\":\"Cdvwk1lB\",\"zh_config_auth.md\":\"BytNcdS4\",\"zh_config_overview.md\":\"CvAKxlb5\",\"zh_config_schema.md\":\"CTCn0g9X\",\"zh_config_sub-env.md\":\"Ce3xOEsi\",\"zh_features_atomic.md\":\"DUhJ_qq0\",\"zh_features_cleanup.md\":\"CEgw587m\",\"zh_features_shared-assets.md\":\"DZhvWCTp\",\"zh_features_snapshot.md\":\"Bkqgn7lu\",\"zh_index.md\":\"DKRf1R-g\",\"zh_install.md\":\"0LCLPI3L\",\"zh_license.md\":\"BUZ74dvK\",\"zh_quick-start.md\":\"Bl-Larcu\",\"zh_troubleshooting.md\":\"DHyCAfy2\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Shipfe\",\"description\":\"A VitePress site\",\"base\":\"/shipfe-rust/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en\",\"title\":\"Shipfe\",\"description\":\"A powerful, free, Rust-based web app deployment tool\",\"themeConfig\":{\"nav\":[{\"text\":\"Quick Start\",\"link\":\"/quick-start\"},{\"text\":\"Config\",\"link\":\"/config/overview\"},{\"text\":\"GitHub\",\"link\":\"https://github.com/Master-Jian/shipfe-rust\"}],\"sidebar\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/\"},{\"text\":\"Quick Start\",\"link\":\"/quick-start\"},{\"text\":\"Installation\",\"link\":\"/install\"}]},{\"text\":\"Commands\",\"items\":[{\"text\":\"init\",\"link\":\"/commands/init\"},{\"text\":\"deploy\",\"link\":\"/commands/deploy\"},{\"text\":\"rollback\",\"link\":\"/commands/rollback\"}]},{\"text\":\"Configuration\",\"items\":[{\"text\":\"Config Overview\",\"link\":\"/config/overview\"},{\"text\":\"Config Schema\",\"link\":\"/config/schema\"},{\"text\":\"Authentication\",\"link\":\"/config/auth\"},{\"text\":\"Sub-environments\",\"link\":\"/config/sub-env\"}]},{\"text\":\"Features\",\"items\":[{\"text\":\"Atomic Deployment\",\"link\":\"/features/atomic\"},{\"text\":\"Shared Assets\",\"link\":\"/features/shared-assets\"},{\"text\":\"Snapshots\",\"link\":\"/features/snapshot\"},{\"text\":\"Cleanup\",\"link\":\"/features/cleanup\"}]},{\"text\":\"Operations\",\"items\":[{\"text\":\"Troubleshooting\",\"link\":\"/troubleshooting\"}]}]}},\"zh\":{\"label\":\"中文\",\"lang\":\"zh-CN\",\"title\":\"Shipfe\",\"description\":\"一个强大的、免费的、基于 Rust 的 Web 应用部署工具\",\"themeConfig\":{\"nav\":[{\"text\":\"快速入门\",\"link\":\"/zh/quick-start\"},{\"text\":\"配置\",\"link\":\"/zh/config/overview\"},{\"text\":\"GitHub\",\"link\":\"https://github.com/Master-Jian/shipfe-rust\"}],\"sidebar\":[{\"text\":\"开始\",\"items\":[{\"text\":\"简介\",\"link\":\"/zh/\"},{\"text\":\"快速入门\",\"link\":\"/zh/quick-start\"},{\"text\":\"安装\",\"link\":\"/zh/install\"}]},{\"text\":\"命令\",\"items\":[{\"text\":\"init\",\"link\":\"/zh/commands/init\"},{\"text\":\"deploy\",\"link\":\"/zh/commands/deploy\"},{\"text\":\"rollback\",\"link\":\"/zh/commands/rollback\"}]},{\"text\":\"配置\",\"items\":[{\"text\":\"配置概览\",\"link\":\"/zh/config/overview\"},{\"text\":\"配置项详解\",\"link\":\"/zh/config/schema\"},{\"text\":\"认证\",\"link\":\"/zh/config/auth\"},{\"text\":\"子环境\",\"link\":\"/zh/config/sub-env\"}]},{\"text\":\"功能\",\"items\":[{\"text\":\"原子部署\",\"link\":\"/zh/features/atomic\"},{\"text\":\"共享资源管理\",\"link\":\"/zh/features/shared-assets\"},{\"text\":\"资源快照\",\"link\":\"/zh/features/snapshot\"},{\"text\":\"自动清理\",\"link\":\"/zh/features/cleanup\"}]},{\"text\":\"运维\",\"items\":[{\"text\":\"故障排除\",\"link\":\"/zh/troubleshooting\"}]}]}}},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
72
|
-
|
|
73
|
-
</body>
|
|
74
|
-
</html>
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="zh-CN" dir="ltr">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<title>共享资源管理 | Shipfe</title>
|
|
7
|
-
<meta name="description" content="一个强大的、免费的、基于 Rust 的 Web 应用部署工具">
|
|
8
|
-
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
-
<link rel="preload stylesheet" href="/shipfe-rust/assets/style.DES0mfMn.css" as="style">
|
|
10
|
-
<link rel="preload stylesheet" href="/shipfe-rust/vp-icons.css" as="style">
|
|
11
|
-
|
|
12
|
-
<script type="module" src="/shipfe-rust/assets/app.DZUgfPE2.js"></script>
|
|
13
|
-
<link rel="preload" href="/shipfe-rust/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
|
-
<link rel="modulepreload" href="/shipfe-rust/assets/chunks/theme.CNyaCki0.js">
|
|
15
|
-
<link rel="modulepreload" href="/shipfe-rust/assets/chunks/framework.BeaujayP.js">
|
|
16
|
-
<link rel="modulepreload" href="/shipfe-rust/assets/zh_features_shared-assets.md.DZhvWCTp.lean.js">
|
|
17
|
-
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
18
|
-
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
19
|
-
</head>
|
|
20
|
-
<body>
|
|
21
|
-
<div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/shipfe-rust/zh/" data-v-1168a8e4><!--[--><!--]--><!----><span data-v-1168a8e4>Shipfe</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!----></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/shipfe-rust/zh/quick-start.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>快速入门</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/shipfe-rust/zh/config/overview.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>配置</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://github.com/Master-Jian/shipfe-rust" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>GitHub</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>中文</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/shipfe-rust/features/shared-assets.html" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>中文</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/shipfe-rust/features/shared-assets.html" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>开始</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>简介</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/quick-start.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>快速入门</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/install.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>安装</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>命令</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/commands/init.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>init</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/commands/deploy.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>deploy</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/commands/rollback.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>rollback</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>配置</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/overview.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>配置概览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/schema.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>配置项详解</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/auth.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>认证</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/config/sub-env.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>子环境</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 has-active" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>功能</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/atomic.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>原子部署</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/shared-assets.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>共享资源管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/snapshot.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>资源快照</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/features/cleanup.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>自动清理</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>运维</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/shipfe-rust/zh/troubleshooting.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>故障排除</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _shipfe-rust_zh_features_shared-assets" data-v-39a288b8><div><h1 id="共享资源管理" tabindex="-1">共享资源管理 <a class="header-anchor" href="#共享资源管理" aria-label="Permalink to "共享资源管理""></a></h1><p>共享资源通过文件哈希去重减少磁盘使用和网络传输。</p><h2 id="启用共享资源" tabindex="-1">启用共享资源 <a class="header-anchor" href="#启用共享资源" aria-label="Permalink to "启用共享资源""></a></h2><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
22
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "enable_shared"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
23
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "hashed_asset_patterns"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
|
24
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
25
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.css"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
26
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.png"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
27
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.jpg"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
28
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.svg"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
29
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.woff2"</span></span>
|
|
30
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
|
|
31
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="工作原理" tabindex="-1">工作原理 <a class="header-anchor" href="#工作原理" aria-label="Permalink to "工作原理""></a></h2><ol><li><strong>文件匹配</strong>:根据 <code>hashed_asset_patterns</code> 匹配文件</li><li><strong>哈希计算</strong>:对匹配文件计算 SHA256 哈希值</li><li><strong>存储策略</strong>: <ul><li>相同哈希的文件只存储一次在 <code>shared/assets/</code> 目录</li><li>文件名格式为 <code>{hash}.{ext}</code>,如 <code>abc123def456.js</code></li></ul></li><li><strong>链接创建</strong>:在发布目录中创建硬链接指向共享文件</li><li><strong>清理机制</strong>:删除不再被任何发布引用的共享文件</li></ol><h2 id="共享资源重置" tabindex="-1">共享资源重置 <a class="header-anchor" href="#共享资源重置" aria-label="Permalink to "共享资源重置""></a></h2><p>在每次部署开始时,Shipfe 会自动清除 <code>shared/</code> 目录下的所有现有资源,然后重新创建 <code>shared/assets/</code> 目录。这确保了每次部署从干净的状态开始,避免了旧资源的积累和潜在冲突。</p><h2 id="目录结构示例" tabindex="-1">目录结构示例 <a class="header-anchor" href="#目录结构示例" aria-label="Permalink to "目录结构示例""></a></h2><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>remote_deploy_path/</span></span>
|
|
32
|
-
<span class="line"><span>├── shared/</span></span>
|
|
33
|
-
<span class="line"><span>│ └── assets/</span></span>
|
|
34
|
-
<span class="line"><span>│ ├── abc123def456.js</span></span>
|
|
35
|
-
<span class="line"><span>│ ├── def789ghi012.css</span></span>
|
|
36
|
-
<span class="line"><span>│ └── hij345klm678.png</span></span>
|
|
37
|
-
<span class="line"><span>├── releases/</span></span>
|
|
38
|
-
<span class="line"><span>│ ├── 20260304_120000/</span></span>
|
|
39
|
-
<span class="line"><span>│ │ ├── index.html</span></span>
|
|
40
|
-
<span class="line"><span>│ │ ├── app.js -> ../../shared/assets/abc123def456.js</span></span>
|
|
41
|
-
<span class="line"><span>│ │ └── styles.css -> ../../shared/assets/def789ghi012.css</span></span>
|
|
42
|
-
<span class="line"><span>│ └── 20260304_120100/</span></span>
|
|
43
|
-
<span class="line"><span>│ ├── index.html</span></span>
|
|
44
|
-
<span class="line"><span>│ ├── app.js -> ../../shared/assets/abc123def456.js</span></span>
|
|
45
|
-
<span class="line"><span>│ └── styles.css -> ../../shared/assets/def789ghi012.css</span></span>
|
|
46
|
-
<span class="line"><span>└── current -> releases/20260304_120100</span></span></code></pre></div><h2 id="优势" tabindex="-1">优势 <a class="header-anchor" href="#优势" aria-label="Permalink to "优势""></a></h2><ul><li><strong>减少磁盘使用</strong>:相同文件只存储一次</li><li><strong>加快部署</strong>:未更改的文件不需要重新上传</li><li><strong>节省带宽</strong>:只传输新的或更改的文件</li><li><strong>原子更新</strong>:所有硬链接同时创建,确保一致性</li></ul><h2 id="注意事项" tabindex="-1">注意事项 <a class="header-anchor" href="#注意事项" aria-label="Permalink to "注意事项""></a></h2><ul><li>共享资源需要服务器文件系统支持硬链接</li><li>首次启用共享时,所有匹配文件都会被哈希处理</li><li>禁用共享后,已有的共享文件不会被删除,需要手动清理</li></ul><h2 id="适用场景" tabindex="-1">适用场景 <a class="header-anchor" href="#适用场景" aria-label="Permalink to "适用场景""></a></h2><ul><li><strong>启用共享</strong>:大型应用,频繁部署,有很多静态资源</li><li><strong>禁用共享</strong>:小型应用,部署不频繁,或需要简单调试</li></ul></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/shipfe-rust/zh/features/atomic.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>原子部署</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/shipfe-rust/zh/features/snapshot.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>资源快照</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
47
|
-
<script>window.__VP_HASH_MAP__=JSON.parse("{\"commands_deploy.md\":\"cybIRa1n\",\"commands_init.md\":\"Da652so5\",\"commands_rollback.md\":\"C0zKmFtz\",\"config_auth.md\":\"hvDhtWY8\",\"config_overview.md\":\"DAQclMJL\",\"config_schema.md\":\"Bv5TuD6E\",\"config_sub-env.md\":\"DSUt0Nyq\",\"features_atomic.md\":\"Cszqfb8O\",\"features_cleanup.md\":\"D1j3LEm1\",\"features_shared-assets.md\":\"ChpQD81r\",\"features_snapshot.md\":\"Bddk9nNL\",\"index.md\":\"DqmDY2QI\",\"install.md\":\"CblrJsha\",\"license.md\":\"hVRT8__d\",\"quick-start.md\":\"C06xD920\",\"troubleshooting.md\":\"DLP5r-7N\",\"zh_commands_deploy.md\":\"BbKuBIij\",\"zh_commands_init.md\":\"Dc_WYD8D\",\"zh_commands_rollback.md\":\"Cdvwk1lB\",\"zh_config_auth.md\":\"BytNcdS4\",\"zh_config_overview.md\":\"CvAKxlb5\",\"zh_config_schema.md\":\"CTCn0g9X\",\"zh_config_sub-env.md\":\"Ce3xOEsi\",\"zh_features_atomic.md\":\"DUhJ_qq0\",\"zh_features_cleanup.md\":\"CEgw587m\",\"zh_features_shared-assets.md\":\"DZhvWCTp\",\"zh_features_snapshot.md\":\"Bkqgn7lu\",\"zh_index.md\":\"DKRf1R-g\",\"zh_install.md\":\"0LCLPI3L\",\"zh_license.md\":\"BUZ74dvK\",\"zh_quick-start.md\":\"Bl-Larcu\",\"zh_troubleshooting.md\":\"DHyCAfy2\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Shipfe\",\"description\":\"A VitePress site\",\"base\":\"/shipfe-rust/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en\",\"title\":\"Shipfe\",\"description\":\"A powerful, free, Rust-based web app deployment tool\",\"themeConfig\":{\"nav\":[{\"text\":\"Quick Start\",\"link\":\"/quick-start\"},{\"text\":\"Config\",\"link\":\"/config/overview\"},{\"text\":\"GitHub\",\"link\":\"https://github.com/Master-Jian/shipfe-rust\"}],\"sidebar\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/\"},{\"text\":\"Quick Start\",\"link\":\"/quick-start\"},{\"text\":\"Installation\",\"link\":\"/install\"}]},{\"text\":\"Commands\",\"items\":[{\"text\":\"init\",\"link\":\"/commands/init\"},{\"text\":\"deploy\",\"link\":\"/commands/deploy\"},{\"text\":\"rollback\",\"link\":\"/commands/rollback\"}]},{\"text\":\"Configuration\",\"items\":[{\"text\":\"Config Overview\",\"link\":\"/config/overview\"},{\"text\":\"Config Schema\",\"link\":\"/config/schema\"},{\"text\":\"Authentication\",\"link\":\"/config/auth\"},{\"text\":\"Sub-environments\",\"link\":\"/config/sub-env\"}]},{\"text\":\"Features\",\"items\":[{\"text\":\"Atomic Deployment\",\"link\":\"/features/atomic\"},{\"text\":\"Shared Assets\",\"link\":\"/features/shared-assets\"},{\"text\":\"Snapshots\",\"link\":\"/features/snapshot\"},{\"text\":\"Cleanup\",\"link\":\"/features/cleanup\"}]},{\"text\":\"Operations\",\"items\":[{\"text\":\"Troubleshooting\",\"link\":\"/troubleshooting\"}]}]}},\"zh\":{\"label\":\"中文\",\"lang\":\"zh-CN\",\"title\":\"Shipfe\",\"description\":\"一个强大的、免费的、基于 Rust 的 Web 应用部署工具\",\"themeConfig\":{\"nav\":[{\"text\":\"快速入门\",\"link\":\"/zh/quick-start\"},{\"text\":\"配置\",\"link\":\"/zh/config/overview\"},{\"text\":\"GitHub\",\"link\":\"https://github.com/Master-Jian/shipfe-rust\"}],\"sidebar\":[{\"text\":\"开始\",\"items\":[{\"text\":\"简介\",\"link\":\"/zh/\"},{\"text\":\"快速入门\",\"link\":\"/zh/quick-start\"},{\"text\":\"安装\",\"link\":\"/zh/install\"}]},{\"text\":\"命令\",\"items\":[{\"text\":\"init\",\"link\":\"/zh/commands/init\"},{\"text\":\"deploy\",\"link\":\"/zh/commands/deploy\"},{\"text\":\"rollback\",\"link\":\"/zh/commands/rollback\"}]},{\"text\":\"配置\",\"items\":[{\"text\":\"配置概览\",\"link\":\"/zh/config/overview\"},{\"text\":\"配置项详解\",\"link\":\"/zh/config/schema\"},{\"text\":\"认证\",\"link\":\"/zh/config/auth\"},{\"text\":\"子环境\",\"link\":\"/zh/config/sub-env\"}]},{\"text\":\"功能\",\"items\":[{\"text\":\"原子部署\",\"link\":\"/zh/features/atomic\"},{\"text\":\"共享资源管理\",\"link\":\"/zh/features/shared-assets\"},{\"text\":\"资源快照\",\"link\":\"/zh/features/snapshot\"},{\"text\":\"自动清理\",\"link\":\"/zh/features/cleanup\"}]},{\"text\":\"运维\",\"items\":[{\"text\":\"故障排除\",\"link\":\"/zh/troubleshooting\"}]}]}}},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
48
|
-
|
|
49
|
-
</body>
|
|
50
|
-
</html>
|