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,56 +0,0 @@
|
|
|
1
|
-
import{_ as i,o as a,c as n,ae as t}from"./chunks/framework.BeaujayP.js";const d=JSON.parse('{"title":"Authentication","description":"","frontmatter":{},"headers":[],"relativePath":"config/auth.md","filePath":"config/auth.md"}'),e={name:"config/auth.md"};function h(p,s,l,k,r,o){return a(),n("div",null,[...s[0]||(s[0]=[t(`<h1 id="authentication" tabindex="-1">Authentication <a class="header-anchor" href="#authentication" aria-label="Permalink to "Authentication""></a></h1><p>Shipfe supports multiple SSH authentication methods for each server.</p><h2 id="authentication-priority-order" tabindex="-1">Authentication Priority Order <a class="header-anchor" href="#authentication-priority-order" aria-label="Permalink to "Authentication Priority Order""></a></h2><p>Authentication methods are tried in this order:</p><ol><li><strong>Password</strong>: If <code>password</code> is set for the server</li><li><strong>SSH Private Key from Environment</strong>: If <code>SSH_PRIVATE_KEY</code> environment variable is set (applies to all servers)</li><li><strong>SSH Key File</strong>: If <code>key_path</code> is set for the server</li></ol><h2 id="configuration-examples" tabindex="-1">Configuration Examples <a class="header-anchor" href="#configuration-examples" aria-label="Permalink to "Configuration Examples""></a></h2><h3 id="using-password-authentication" tabindex="-1">Using Password Authentication <a class="header-anchor" href="#using-password-authentication" aria-label="Permalink to "Using Password Authentication""></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>
|
|
2
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "servers"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
|
3
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
4
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"web1.prod.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
5
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "username"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"deploy"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
6
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "password"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"web1_password"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
7
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_deploy_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/prod"</span></span>
|
|
8
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
9
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
|
|
10
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="using-ssh-key-file" tabindex="-1">Using SSH Key File <a class="header-anchor" href="#using-ssh-key-file" aria-label="Permalink to "Using SSH Key File""></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>
|
|
11
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "servers"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
|
12
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
13
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"web2.prod.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
14
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "username"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"deploy"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
15
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "key_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/home/user/.ssh/web2_key"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
16
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_deploy_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/prod"</span></span>
|
|
17
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
18
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
|
|
19
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="using-environment-variable" tabindex="-1">Using Environment Variable <a class="header-anchor" href="#using-environment-variable" aria-label="Permalink to "Using Environment Variable""></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:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> SSH_PRIVATE_KEY</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"$(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cat</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ~/.ssh/prod_key)"</span></span>
|
|
20
|
-
<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:#005CC5;--shiki-dark:#79B8FF;"> --profile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> prod</span></span></code></pre></div><h3 id="mixed-authentication-methods" tabindex="-1">Mixed Authentication Methods <a class="header-anchor" href="#mixed-authentication-methods" aria-label="Permalink to "Mixed Authentication Methods""></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>
|
|
21
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "servers"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
|
22
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
23
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"web1.prod.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
24
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "username"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"deploy"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
25
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "password"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"web1_password"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
26
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_deploy_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/prod"</span></span>
|
|
27
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
|
28
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
29
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"web2.prod.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
30
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "username"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"deploy"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
31
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "key_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/home/user/.ssh/web2_key"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
32
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_deploy_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/prod"</span></span>
|
|
33
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
|
34
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
35
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"web3.prod.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
36
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "username"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"deploy"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
37
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_deploy_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/prod"</span></span>
|
|
38
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
39
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
|
|
40
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="ssh-key-setup" tabindex="-1">SSH Key Setup <a class="header-anchor" href="#ssh-key-setup" aria-label="Permalink to "SSH Key Setup""></a></h2><h3 id="generate-ssh-key-pairs" tabindex="-1">Generate SSH Key Pairs <a class="header-anchor" href="#generate-ssh-key-pairs" aria-label="Permalink to "Generate SSH Key Pairs""></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;"># Server 1</span></span>
|
|
41
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ssh-keygen</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rsa</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -b</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 4096</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ~/.ssh/server1_key</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "server1"</span></span>
|
|
42
|
-
<span class="line"></span>
|
|
43
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Server 2</span></span>
|
|
44
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ssh-keygen</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rsa</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -b</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 4096</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ~/.ssh/server2_key</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "server2"</span></span></code></pre></div><h3 id="copy-public-keys-to-servers" tabindex="-1">Copy Public Keys to Servers <a class="header-anchor" href="#copy-public-keys-to-servers" aria-label="Permalink to "Copy Public Keys to Servers""></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:#6F42C1;--shiki-dark:#B392F0;">ssh-copy-id</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ~/.ssh/server1_key.pub</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> user@server1.com</span></span>
|
|
45
|
-
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ssh-copy-id</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ~/.ssh/server2_key.pub</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> user@server2.com</span></span></code></pre></div><h3 id="configure-server-specific-keys" tabindex="-1">Configure Server-Specific Keys <a class="header-anchor" href="#configure-server-specific-keys" aria-label="Permalink to "Configure Server-Specific Keys""></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>
|
|
46
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "servers"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
|
47
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
48
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"server1.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
49
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "key_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"~/.ssh/server1_key"</span></span>
|
|
50
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
|
51
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
52
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"server2.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
53
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "key_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"~/.ssh/server2_key"</span></span>
|
|
54
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
55
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
|
|
56
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div>`,21)])])}const g=i(e,[["render",h]]);export{d as __pageData,g as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as i,o as a,c as n,ae as t}from"./chunks/framework.BeaujayP.js";const d=JSON.parse('{"title":"Authentication","description":"","frontmatter":{},"headers":[],"relativePath":"config/auth.md","filePath":"config/auth.md"}'),e={name:"config/auth.md"};function h(p,s,l,k,r,o){return a(),n("div",null,[...s[0]||(s[0]=[t("",21)])])}const g=i(e,[["render",h]]);export{d as __pageData,g as default};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import{_ as i,o as a,c as n,ae as t}from"./chunks/framework.BeaujayP.js";const d=JSON.parse('{"title":"Configuration Overview","description":"","frontmatter":{},"headers":[],"relativePath":"config/overview.md","filePath":"config/overview.md"}'),e={name:"config/overview.md"};function l(h,s,p,k,o,r){return a(),n("div",null,[...s[0]||(s[0]=[t(`<h1 id="configuration-overview" tabindex="-1">Configuration Overview <a class="header-anchor" href="#configuration-overview" aria-label="Permalink to "Configuration Overview""></a></h1><p>Shipfe uses the <code>shipfe.config.json</code> file for configuration.</p><h2 id="file-structure" tabindex="-1">File Structure <a class="header-anchor" href="#file-structure" aria-label="Permalink to "File Structure""></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>
|
|
2
|
-
<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;">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
3
|
-
<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>
|
|
4
|
-
<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;">10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
5
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "environments"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
6
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "prod"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
7
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "build_command"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"npm run build"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
8
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "local_dist_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./dist"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
9
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_tmp"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/tmp"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
10
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "servers"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
|
11
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
12
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"your-server.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
13
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "port"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">22</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
14
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "username"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"deploy"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
15
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_deploy_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/prod"</span></span>
|
|
16
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
17
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
|
|
18
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
19
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
20
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="global-configuration-items" tabindex="-1">Global Configuration Items <a class="header-anchor" href="#global-configuration-items" aria-label="Permalink to "Global Configuration Items""></a></h2><ul><li><code>enable_shared</code>: Whether to enable shared resource management</li><li><code>hashed_asset_patterns</code>: Patterns for files to be hashed</li><li><code>keep_releases</code>: Number of releases to keep</li></ul><h2 id="environment-configuration" tabindex="-1">Environment Configuration <a class="header-anchor" href="#environment-configuration" aria-label="Permalink to "Environment Configuration""></a></h2><p>Each environment contains:</p><ul><li><code>build_command</code>: Local build command</li><li><code>local_dist_path</code>: Local build output directory</li><li><code>remote_tmp</code>: Remote temporary directory</li><li><code>servers</code>: List of servers</li></ul><h2 id="minimal-configuration-example" tabindex="-1">Minimal Configuration Example <a class="header-anchor" href="#minimal-configuration-example" aria-label="Permalink to "Minimal Configuration Example""></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>
|
|
21
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "environments"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
22
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "prod"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
23
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "build_command"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"npm run build"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
24
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "local_dist_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./dist"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
25
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "servers"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
|
26
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
27
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"example.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
28
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "username"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"deploy"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
29
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_deploy_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/app"</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>
|
|
32
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
33
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
34
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div>`,11)])])}const u=i(e,[["render",l]]);export{d as __pageData,u as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as i,o as a,c as n,ae as t}from"./chunks/framework.BeaujayP.js";const d=JSON.parse('{"title":"Configuration Overview","description":"","frontmatter":{},"headers":[],"relativePath":"config/overview.md","filePath":"config/overview.md"}'),e={name:"config/overview.md"};function l(h,s,p,k,o,r){return a(),n("div",null,[...s[0]||(s[0]=[t("",11)])])}const u=i(e,[["render",l]]);export{d as __pageData,u as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as a,o,c as t,ae as r}from"./chunks/framework.BeaujayP.js";const m=JSON.parse('{"title":"Configuration Schema","description":"","frontmatter":{},"headers":[],"relativePath":"config/schema.md","filePath":"config/schema.md"}'),n={name:"config/schema.md"};function i(s,e,d,l,c,u){return o(),t("div",null,[...e[0]||(e[0]=[r('<h1 id="configuration-schema" tabindex="-1">Configuration Schema <a class="header-anchor" href="#configuration-schema" aria-label="Permalink to "Configuration Schema""></a></h1><h2 id="global-configuration-items" tabindex="-1">Global Configuration Items <a class="header-anchor" href="#global-configuration-items" aria-label="Permalink to "Global Configuration Items""></a></h2><h3 id="enable-shared-boolean-default-false" tabindex="-1"><code>enable_shared</code> (boolean, default: false) <a class="header-anchor" href="#enable-shared-boolean-default-false" aria-label="Permalink to "`enable_shared` (boolean, default: false)""></a></h3><p>Whether to enable shared resource management. When enabled, matching files are hashed and stored in a shared directory to avoid duplicate uploads.</p><p>Suitable for applications that deploy frequently and have many static resources.</p><h3 id="hashed-asset-patterns-array-of-strings-default" tabindex="-1"><code>hashed_asset_patterns</code> (array of strings, default: []) <a class="header-anchor" href="#hashed-asset-patterns-array-of-strings-default" aria-label="Permalink to "`hashed_asset_patterns` (array of strings, default: [])""></a></h3><p>Specify file patterns for static resources to be hashed. Supports glob patterns like <code>"**/*.js"</code>, <code>"**/*.css"</code>, <code>"**/*.{png,jpg,svg}"</code>.</p><p>Only files matching these patterns will be hashed and shared; non-matching files are uploaded fresh with each deployment.</p><h3 id="keep-releases-number-default-10" tabindex="-1"><code>keep_releases</code> (number, default: 10) <a class="header-anchor" href="#keep-releases-number-default-10" aria-label="Permalink to "`keep_releases` (number, default: 10)""></a></h3><p>Number of release versions to retain. Older releases beyond this number are automatically cleaned up. Set to 0 to disable automatic cleanup.</p><h3 id="delete-old-boolean-default-false" tabindex="-1"><code>delete_old</code> (boolean, default: false) <a class="header-anchor" href="#delete-old-boolean-default-false" aria-label="Permalink to "`delete_old` (boolean, default: false)""></a></h3><p>Whether to delete all old releases after each deployment. Only the current release is kept. Overrides <code>keep_releases</code> setting.</p><h2 id="environment-configuration-items" tabindex="-1">Environment Configuration Items <a class="header-anchor" href="#environment-configuration-items" aria-label="Permalink to "Environment Configuration Items""></a></h2><h3 id="build-command-string-required" tabindex="-1"><code>build_command</code> (string, required) <a class="header-anchor" href="#build-command-string-required" aria-label="Permalink to "`build_command` (string, required)""></a></h3><p>Local build command, such as <code>"npm run build"</code> or <code>"yarn build"</code>.</p><h3 id="local-dist-path-string-required" tabindex="-1"><code>local_dist_path</code> (string, required) <a class="header-anchor" href="#local-dist-path-string-required" aria-label="Permalink to "`local_dist_path` (string, required)""></a></h3><p>Local build output directory path, such as <code>"./dist"</code> or <code>"./build"</code>.</p><h3 id="servers-array-of-objects-required" tabindex="-1"><code>servers</code> (array of objects, required) <a class="header-anchor" href="#servers-array-of-objects-required" aria-label="Permalink to "`servers` (array of objects, required)""></a></h3><p>List of servers, each containing:</p><ul><li><code>host</code> (string, required): Server hostname or IP address</li><li><code>port</code> (number, default: 22): SSH port</li><li><code>username</code> (string, required): SSH username</li><li><code>password</code> (string, optional): SSH password (not recommended, prefer keys)</li><li><code>key_path</code> (string, optional): SSH private key file path</li><li><code>remote_deploy_path</code> (string, required): Deployment directory path on server</li></ul><h3 id="remote-tmp-string-default-tmp" tabindex="-1"><code>remote_tmp</code> (string, default: "/tmp") <a class="header-anchor" href="#remote-tmp-string-default-tmp" aria-label="Permalink to "`remote_tmp` (string, default: "/tmp")""></a></h3><p>Remote temporary directory path for file uploads.</p><h3 id="sub-environments-object-optional" tabindex="-1"><code>sub_environments</code> (object, optional) <a class="header-anchor" href="#sub-environments-object-optional" aria-label="Permalink to "`sub_environments` (object, optional)""></a></h3><p>Sub-environment configuration. Keys are sub-environment names, values are sub-environment config objects. Sub-environments inherit parent settings but can override <code>build_command</code>, <code>local_dist_path</code>, <code>remote_deploy_path</code>.</p>',24)])])}const p=a(n,[["render",i]]);export{m as __pageData,p as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as a,o,c as t,ae as r}from"./chunks/framework.BeaujayP.js";const m=JSON.parse('{"title":"Configuration Schema","description":"","frontmatter":{},"headers":[],"relativePath":"config/schema.md","filePath":"config/schema.md"}'),n={name:"config/schema.md"};function i(s,e,d,l,c,u){return o(),t("div",null,[...e[0]||(e[0]=[r("",24)])])}const p=a(n,[["render",i]]);export{m as __pageData,p as default};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import{_ as i,o as a,c as n,ae as e}from"./chunks/framework.BeaujayP.js";const u=JSON.parse('{"title":"Sub-environments","description":"","frontmatter":{},"headers":[],"relativePath":"config/sub-env.md","filePath":"config/sub-env.md"}'),t={name:"config/sub-env.md"};function l(p,s,h,r,k,o){return a(),n("div",null,[...s[0]||(s[0]=[e(`<h1 id="sub-environments" tabindex="-1">Sub-environments <a class="header-anchor" href="#sub-environments" aria-label="Permalink to "Sub-environments""></a></h1><p>Sub-environments allow deploying multiple applications or different configurations on the same server.</p><h2 id="configuration-structure" tabindex="-1">Configuration Structure <a class="header-anchor" href="#configuration-structure" aria-label="Permalink to "Configuration Structure""></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>
|
|
2
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "environments"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
3
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "dev"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
4
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "build_command"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"npm run build"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
5
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "local_dist_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./dist"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
6
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "servers"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic;">...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span>
|
|
7
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "sub_environments"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
8
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "admin"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
9
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "build_command"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"npm run build:admin"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
10
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_deploy_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/dev/admin"</span></span>
|
|
11
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
|
12
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "shop"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
13
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "build_command"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"npm run build:shop"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
14
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "remote_deploy_path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/var/www/dev/shop"</span></span>
|
|
15
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
16
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
17
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
18
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
19
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="inheritance-rules" tabindex="-1">Inheritance Rules <a class="header-anchor" href="#inheritance-rules" aria-label="Permalink to "Inheritance Rules""></a></h2><p>Sub-environments inherit all settings from their parent environment but can override:</p><ul><li><code>build_command</code></li><li><code>local_dist_path</code></li><li><code>remote_deploy_path</code></li></ul><h2 id="deploying-sub-environments" tabindex="-1">Deploying Sub-environments <a class="header-anchor" href="#deploying-sub-environments" aria-label="Permalink to "Deploying Sub-environments""></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;"># Deploy single sub-environment</span></span>
|
|
20
|
-
<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:#005CC5;--shiki-dark:#79B8FF;"> --profile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev-admin</span></span>
|
|
21
|
-
<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:#005CC5;--shiki-dark:#79B8FF;"> --profile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev-shop</span></span>
|
|
22
|
-
<span class="line"></span>
|
|
23
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Deploy all sub-environments</span></span>
|
|
24
|
-
<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:#005CC5;--shiki-dark:#79B8FF;"> --profile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --all-sub</span></span></code></pre></div><h2 id="directory-structure" tabindex="-1">Directory Structure <a class="header-anchor" href="#directory-structure" aria-label="Permalink to "Directory Structure""></a></h2><p>Parent and sub-environments are deployed to different directories:</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>/var/www/dev/ # Parent environment</span></span>
|
|
25
|
-
<span class="line"><span>/var/www/dev/admin/ # Sub-environment admin</span></span>
|
|
26
|
-
<span class="line"><span>/var/www/dev/shop/ # Sub-environment shop</span></span></code></pre></div><h2 id="rolling-back-sub-environments" tabindex="-1">Rolling Back Sub-environments <a class="header-anchor" href="#rolling-back-sub-environments" aria-label="Permalink to "Rolling Back Sub-environments""></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:#6F42C1;--shiki-dark:#B392F0;">shipfe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rollback</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --profile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev-admin</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --to</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 20260303_034945</span></span></code></pre></div>`,14)])])}const c=i(t,[["render",l]]);export{u as __pageData,c as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as i,o as a,c as n,ae as e}from"./chunks/framework.BeaujayP.js";const u=JSON.parse('{"title":"Sub-environments","description":"","frontmatter":{},"headers":[],"relativePath":"config/sub-env.md","filePath":"config/sub-env.md"}'),t={name:"config/sub-env.md"};function l(p,s,h,r,k,o){return a(),n("div",null,[...s[0]||(s[0]=[e("",14)])])}const c=i(t,[["render",l]]);export{u as __pageData,c as default};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import{_ as a,o as i,c as e,ae as n}from"./chunks/framework.BeaujayP.js";const c=JSON.parse('{"title":"Atomic Deployment","description":"","frontmatter":{},"headers":[],"relativePath":"features/atomic.md","filePath":"features/atomic.md"}'),t={name:"features/atomic.md"};function l(p,s,h,r,o,k){return i(),e("div",null,[...s[0]||(s[0]=[n(`<h1 id="atomic-deployment" tabindex="-1">Atomic Deployment <a class="header-anchor" href="#atomic-deployment" aria-label="Permalink to "Atomic Deployment""></a></h1><p>Atomic deployment enables zero-downtime deployment through symbolic link switching for consistency.</p><h2 id="how-it-works" tabindex="-1">How It Works <a class="header-anchor" href="#how-it-works" aria-label="Permalink to "How It Works""></a></h2><p>When using <code>--atomic</code>, deployment:</p><ol><li>Creates a timestamped release directory: <code>releases/20260303_034945/</code></li><li>Uploads files to the new directory</li><li>Updates the <code>current</code> symbolic link to point to the new directory</li></ol><h2 id="directory-structure" tabindex="-1">Directory Structure <a class="header-anchor" href="#directory-structure" aria-label="Permalink to "Directory Structure""></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>
|
|
2
|
-
<span class="line"><span>├── releases/</span></span>
|
|
3
|
-
<span class="line"><span>│ ├── 20260303_034945/</span></span>
|
|
4
|
-
<span class="line"><span>│ ├── 20260303_035012/</span></span>
|
|
5
|
-
<span class="line"><span>│ └── 20260303_035045/</span></span>
|
|
6
|
-
<span class="line"><span>└── current -> releases/20260303_035045</span></span></code></pre></div><h2 id="web-server-configuration" tabindex="-1">Web Server Configuration <a class="header-anchor" href="#web-server-configuration" aria-label="Permalink to "Web Server Configuration""></a></h2><p>Your web server should serve from <code>remote_deploy_path/current</code>.</p><h3 id="nginx-example" tabindex="-1">Nginx Example <a class="header-anchor" href="#nginx-example" aria-label="Permalink to "Nginx Example""></a></h3><div class="language-nginx vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">nginx</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">server</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
|
7
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> listen </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">80</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
|
8
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> server_name </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">your-domain.com;</span></span>
|
|
9
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> root </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">/var/www/prod/current;</span></span>
|
|
10
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> index </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">index.html;</span></span>
|
|
11
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span>
|
|
12
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> location</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> / </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
|
13
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> try_files </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$uri $uri/ </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">=404</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
|
14
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
15
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="apache-example" tabindex="-1">Apache Example <a class="header-anchor" href="#apache-example" aria-label="Permalink to "Apache Example""></a></h3><div class="language-apache vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">apache</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 style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">VirtualHost</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> *:80</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">></span></span>
|
|
16
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ServerName</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> your-domain.com</span></span>
|
|
17
|
-
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> DocumentRoot</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> /var/www/prod/current</span></span>
|
|
18
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"></</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">VirtualHost</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">></span></span></code></pre></div><h2 id="benefits" tabindex="-1">Benefits <a class="header-anchor" href="#benefits" aria-label="Permalink to "Benefits""></a></h2><ul><li><strong>Zero Downtime</strong>: Switching happens instantly</li><li><strong>Atomicity</strong>: Either everything succeeds or everything fails</li><li><strong>Instant Rollback</strong>: Just change the symbolic link</li><li><strong>Version Isolation</strong>: Each release is stored independently</li></ul><h2 id="usage" tabindex="-1">Usage <a class="header-anchor" href="#usage" aria-label="Permalink to "Usage""></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;"># Atomic deployment to default environment</span></span>
|
|
19
|
-
<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:#005CC5;--shiki-dark:#79B8FF;"> --atomic</span></span>
|
|
20
|
-
<span class="line"></span>
|
|
21
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Atomic deployment to specified environment</span></span>
|
|
22
|
-
<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:#005CC5;--shiki-dark:#79B8FF;"> --profile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> prod</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --atomic</span></span></code></pre></div>`,17)])])}const g=a(t,[["render",l]]);export{c as __pageData,g as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as a,o as i,c as e,ae as n}from"./chunks/framework.BeaujayP.js";const c=JSON.parse('{"title":"Atomic Deployment","description":"","frontmatter":{},"headers":[],"relativePath":"features/atomic.md","filePath":"features/atomic.md"}'),t={name:"features/atomic.md"};function l(p,s,h,r,o,k){return i(),e("div",null,[...s[0]||(s[0]=[n("",17)])])}const g=a(t,[["render",l]]);export{c as __pageData,g as default};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import{_ as a,o as s,c as l,ae as n}from"./chunks/framework.BeaujayP.js";const u=JSON.parse('{"title":"Automatic Cleanup","description":"","frontmatter":{},"headers":[],"relativePath":"features/cleanup.md","filePath":"features/cleanup.md"}'),i={name:"features/cleanup.md"};function t(p,e,r,o,h,c){return s(),l("div",null,[...e[0]||(e[0]=[n(`<h1 id="automatic-cleanup" tabindex="-1">Automatic Cleanup <a class="header-anchor" href="#automatic-cleanup" aria-label="Permalink to "Automatic Cleanup""></a></h1><p>Shipfe provides configurable automatic cleanup of old releases and unused shared resources.</p><h2 id="configuration-options" tabindex="-1">Configuration Options <a class="header-anchor" href="#configuration-options" aria-label="Permalink to "Configuration Options""></a></h2><h3 id="keep-releases-recommended" tabindex="-1"><code>keep_releases</code> (Recommended) <a class="header-anchor" href="#keep-releases-recommended" aria-label="Permalink to "\`keep_releases\` (Recommended)""></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>
|
|
2
|
-
<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>
|
|
3
|
-
<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>
|
|
4
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><ul><li>Keep the most recent 5 releases</li><li>Automatically delete old releases</li><li>Works with shared resource cleanup</li></ul><h3 id="delete-old-legacy" tabindex="-1"><code>delete_old</code> (Legacy) <a class="header-anchor" href="#delete-old-legacy" aria-label="Permalink to "\`delete_old\` (Legacy)""></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>
|
|
5
|
-
<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>
|
|
6
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><ul><li>Delete all old releases after each deployment</li><li>Keep only the current deployment</li><li>Overrides <code>keep_releases</code> setting</li></ul><h2 id="cleanup-process" tabindex="-1">Cleanup Process <a class="header-anchor" href="#cleanup-process" aria-label="Permalink to "Cleanup Process""></a></h2><h3 id="release-cleanup" tabindex="-1">Release Cleanup <a class="header-anchor" href="#release-cleanup" aria-label="Permalink to "Release Cleanup""></a></h3><ol><li>Sort releases by modification time (newest first)</li><li>Keep the specified number of recent releases</li><li>Completely delete old release directories</li></ol><h3 id="shared-resource-cleanup-when-enable-shared-true" tabindex="-1">Shared Resource Cleanup (when <code>enable_shared: true</code>) <a class="header-anchor" href="#shared-resource-cleanup-when-enable-shared-true" aria-label="Permalink to "Shared Resource Cleanup (when \`enable_shared: true\`)""></a></h3><ol><li>Scan all remaining release snapshots</li><li>Collect all currently referenced hashed resources</li><li>Delete unreferenced files from <code>shared/assets/</code></li></ol><h2 id="cleanup-behavior-example" tabindex="-1">Cleanup Behavior Example <a class="header-anchor" href="#cleanup-behavior-example" aria-label="Permalink to "Cleanup Behavior Example""></a></h2><h3 id="before-cleanup-7-releases" tabindex="-1">Before Cleanup (7 releases) <a class="header-anchor" href="#before-cleanup-7-releases" aria-label="Permalink to "Before Cleanup (7 releases)""></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>
|
|
7
|
-
<span class="line"><span>├── 20260301_100000/ (oldest)</span></span>
|
|
8
|
-
<span class="line"><span>├── 20260302_100000/</span></span>
|
|
9
|
-
<span class="line"><span>├── 20260303_100000/</span></span>
|
|
10
|
-
<span class="line"><span>├── 20260304_100000/</span></span>
|
|
11
|
-
<span class="line"><span>├── 20260305_100000/</span></span>
|
|
12
|
-
<span class="line"><span>├── 20260306_100000/</span></span>
|
|
13
|
-
<span class="line"><span>└── 20260307_100000/ (newest, current)</span></span></code></pre></div><h3 id="after-cleanup-keep-releases-3" tabindex="-1">After Cleanup (<code>keep_releases: 3</code>) <a class="header-anchor" href="#after-cleanup-keep-releases-3" aria-label="Permalink to "After Cleanup (\`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>
|
|
14
|
-
<span class="line"><span>├── 20260305_100000/ (kept)</span></span>
|
|
15
|
-
<span class="line"><span>├── 20260306_100000/ (kept)</span></span>
|
|
16
|
-
<span class="line"><span>└── 20260307_100000/ (kept, current)</span></span></code></pre></div><p><em>Old releases automatically deleted</em></p><h2 id="monitoring-cleanup" tabindex="-1">Monitoring Cleanup <a class="header-anchor" href="#monitoring-cleanup" aria-label="Permalink to "Monitoring Cleanup""></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;"># Check current releases</span></span>
|
|
17
|
-
<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>
|
|
18
|
-
<span class="line"></span>
|
|
19
|
-
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># View cleanup logs in shipfe.log</span></span>
|
|
20
|
-
<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>`,22)])])}const k=a(i,[["render",t]]);export{u as __pageData,k as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as a,o as s,c as l,ae as n}from"./chunks/framework.BeaujayP.js";const u=JSON.parse('{"title":"Automatic Cleanup","description":"","frontmatter":{},"headers":[],"relativePath":"features/cleanup.md","filePath":"features/cleanup.md"}'),i={name:"features/cleanup.md"};function t(p,e,r,o,h,c){return s(),l("div",null,[...e[0]||(e[0]=[n("",22)])])}const k=a(i,[["render",t]]);export{u as __pageData,k as default};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import{_ as a,o as e,c as n,ae as t}from"./chunks/framework.BeaujayP.js";const u=JSON.parse('{"title":"Shared Assets","description":"","frontmatter":{},"headers":[],"relativePath":"features/shared-assets.md","filePath":"features/shared-assets.md"}'),i={name:"features/shared-assets.md"};function l(r,s,h,p,o,d){return e(),n("div",null,[...s[0]||(s[0]=[t(`<h1 id="shared-assets" tabindex="-1">Shared Assets <a class="header-anchor" href="#shared-assets" aria-label="Permalink to "Shared Assets""></a></h1><p>Shared assets reduce disk usage and network transmission through file hash deduplication.</p><h2 id="enable-shared-assets" tabindex="-1">Enable Shared Assets <a class="header-anchor" href="#enable-shared-assets" aria-label="Permalink to "Enable Shared Assets""></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>
|
|
2
|
-
<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>
|
|
3
|
-
<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>
|
|
4
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
5
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.css"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
6
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.png"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
7
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.jpg"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
8
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.svg"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
9
|
-
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "**/*.woff2"</span></span>
|
|
10
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span>
|
|
11
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="how-it-works" tabindex="-1">How It Works <a class="header-anchor" href="#how-it-works" aria-label="Permalink to "How It Works""></a></h2><ol><li><strong>File Matching</strong>: Matches files according to <code>hashed_asset_patterns</code></li><li><strong>Hash Calculation</strong>: Calculates SHA256 hash for matching files</li><li><strong>Storage Strategy</strong>: <ul><li>Same hash files are stored only once in <code>shared/assets/</code> directory</li><li>Filename format: <code>{hash}.{ext}</code>, e.g., <code>abc123def456.js</code></li></ul></li><li><strong>Link Creation</strong>: Creates hard links in release directory pointing to shared files</li><li><strong>Cleanup Mechanism</strong>: Deletes shared files no longer referenced by any release</li></ol><h2 id="shared-assets-reset" tabindex="-1">Shared Assets Reset <a class="header-anchor" href="#shared-assets-reset" aria-label="Permalink to "Shared Assets Reset""></a></h2><p>At the start of each deployment, Shipfe automatically clears all existing resources in the <code>shared/</code> directory and recreates the <code>shared/assets/</code> directory. This ensures each deployment starts from a clean state, avoiding accumulation of old resources and potential conflicts.</p><h2 id="directory-structure-example" tabindex="-1">Directory Structure Example <a class="header-anchor" href="#directory-structure-example" aria-label="Permalink to "Directory Structure Example""></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>
|
|
12
|
-
<span class="line"><span>├── shared/</span></span>
|
|
13
|
-
<span class="line"><span>│ └── assets/</span></span>
|
|
14
|
-
<span class="line"><span>│ ├── abc123def456.js</span></span>
|
|
15
|
-
<span class="line"><span>│ ├── def789ghi012.css</span></span>
|
|
16
|
-
<span class="line"><span>│ └── hij345klm678.png</span></span>
|
|
17
|
-
<span class="line"><span>├── releases/</span></span>
|
|
18
|
-
<span class="line"><span>│ ├── 20260304_120000/</span></span>
|
|
19
|
-
<span class="line"><span>│ │ ├── index.html</span></span>
|
|
20
|
-
<span class="line"><span>│ │ ├── app.js -> ../../shared/assets/abc123def456.js</span></span>
|
|
21
|
-
<span class="line"><span>│ │ └── styles.css -> ../../shared/assets/def789ghi012.css</span></span>
|
|
22
|
-
<span class="line"><span>│ └── 20260304_120100/</span></span>
|
|
23
|
-
<span class="line"><span>│ ├── index.html</span></span>
|
|
24
|
-
<span class="line"><span>│ ├── app.js -> ../../shared/assets/abc123def456.js</span></span>
|
|
25
|
-
<span class="line"><span>│ └── styles.css -> ../../shared/assets/def789ghi012.css</span></span>
|
|
26
|
-
<span class="line"><span>└── current -> releases/20260304_120100</span></span></code></pre></div><h2 id="benefits" tabindex="-1">Benefits <a class="header-anchor" href="#benefits" aria-label="Permalink to "Benefits""></a></h2><ul><li><strong>Reduced Disk Usage</strong>: Same files stored only once</li><li><strong>Faster Deployments</strong>: Unchanged files don't need re-uploading</li><li><strong>Bandwidth Savings</strong>: Only new or changed files are transmitted</li><li><strong>Atomic Updates</strong>: All hard links created simultaneously for consistency</li></ul><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to "Notes""></a></h2><ul><li>Shared assets require hard link support on the server filesystem</li><li>First enablement hashes all matching files</li><li>Disabling shared doesn't delete existing shared files; manual cleanup required</li></ul><h2 id="use-cases" tabindex="-1">Use Cases <a class="header-anchor" href="#use-cases" aria-label="Permalink to "Use Cases""></a></h2><ul><li><strong>Enable Shared</strong>: Large apps with frequent deployments and many static resources</li><li><strong>Disable Shared</strong>: Small apps with infrequent deployments or need for simple debugging</li></ul>`,16)])])}const g=a(i,[["render",l]]);export{u as __pageData,g as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as a,o as e,c as n,ae as t}from"./chunks/framework.BeaujayP.js";const u=JSON.parse('{"title":"Shared Assets","description":"","frontmatter":{},"headers":[],"relativePath":"features/shared-assets.md","filePath":"features/shared-assets.md"}'),i={name:"features/shared-assets.md"};function l(r,s,h,p,o,d){return e(),n("div",null,[...s[0]||(s[0]=[t("",16)])])}const g=a(i,[["render",l]]);export{u as __pageData,g as default};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import{_ as a,o as i,c as n,ae as t}from"./chunks/framework.BeaujayP.js";const E=JSON.parse('{"title":"Resource Snapshots","description":"","frontmatter":{},"headers":[],"relativePath":"features/snapshot.md","filePath":"features/snapshot.md"}'),e={name:"features/snapshot.md"};function l(p,s,h,o,k,r){return i(),n("div",null,[...s[0]||(s[0]=[t(`<h1 id="resource-snapshots" tabindex="-1">Resource Snapshots <a class="header-anchor" href="#resource-snapshots" aria-label="Permalink to "Resource Snapshots""></a></h1><p>Each deployment generates a snapshot containing a complete file manifest for auditing and rollback verification.</p><h2 id="snapshot-contents" tabindex="-1">Snapshot Contents <a class="header-anchor" href="#snapshot-contents" aria-label="Permalink to "Snapshot Contents""></a></h2><ul><li>All deployed files and their hashes</li><li>Shared resource references</li><li>Deployment timestamp and metadata</li><li>File permissions and size information</li></ul><h2 id="snapshot-file-location" tabindex="-1">Snapshot File Location <a class="header-anchor" href="#snapshot-file-location" aria-label="Permalink to "Snapshot File Location""></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>releases/20260304_120100/</span></span>
|
|
2
|
-
<span class="line"><span>├── files/</span></span>
|
|
3
|
-
<span class="line"><span>│ ├── index.html</span></span>
|
|
4
|
-
<span class="line"><span>│ └── app.js -> ../../shared/assets/abc123def456.js</span></span>
|
|
5
|
-
<span class="line"><span>├── snapshot.json</span></span>
|
|
6
|
-
<span class="line"><span>└── metadata.json</span></span></code></pre></div><h2 id="snapshot-json-example" tabindex="-1">snapshot.json Example <a class="header-anchor" href="#snapshot-json-example" aria-label="Permalink to "snapshot.json Example""></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>
|
|
7
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "timestamp"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"20260304_120100"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
8
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "files"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
9
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "index.html"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
10
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "hash"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"a1b2c3d4e5f6..."</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
11
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "size"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1024</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
12
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "permissions"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"644"</span></span>
|
|
13
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
|
14
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "app.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
|
15
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "shared_hash"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"abc123def456.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
16
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "size"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">51200</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
17
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "permissions"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"644"</span></span>
|
|
18
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
19
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
|
20
|
-
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="metadata-json-example" tabindex="-1">metadata.json Example <a class="header-anchor" href="#metadata-json-example" aria-label="Permalink to "metadata.json Example""></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>
|
|
21
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "build_command"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"npm run build"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
22
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "deployed_by"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"user"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
|
23
|
-
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "deployed_at"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"2026-03-04T12:01:00Z"</span></span>
|
|
24
|
-
<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><ul><li><strong>审计</strong>:验证部署内容</li><li><strong>回滚验证</strong>:确保回滚到正确版本</li><li><strong>清理</strong>:确定哪些共享资源可以删除</li><li><strong>调试</strong>:排查部署问题</li></ul>`,12)])])}const c=a(e,[["render",l]]);export{E as __pageData,c as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as a,o as i,c as n,ae as t}from"./chunks/framework.BeaujayP.js";const E=JSON.parse('{"title":"Resource Snapshots","description":"","frontmatter":{},"headers":[],"relativePath":"features/snapshot.md","filePath":"features/snapshot.md"}'),e={name:"features/snapshot.md"};function l(p,s,h,o,k,r){return i(),n("div",null,[...s[0]||(s[0]=[t("",12)])])}const c=a(e,[["render",l]]);export{E as __pageData,c as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as t,o as s,c as i,ae as a}from"./chunks/framework.BeaujayP.js";const u=JSON.parse('{"title":"Shipfe","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),n={name:"index.md"};function r(o,e,l,p,h,d){return s(),i("div",null,[...e[0]||(e[0]=[a('<h1 id="shipfe" tabindex="-1">Shipfe <a class="header-anchor" href="#shipfe" aria-label="Permalink to "Shipfe""></a></h1><p><a href="https://www.npmjs.com/package/shipfe" target="_blank" rel="noreferrer"><img src="https://img.shields.io/npm/v/shipfe.svg" alt="npm version"></a><a href="https://opensource.org/licenses/MIT" target="_blank" rel="noreferrer"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a><a href="https://github.com/Master-Jian/shipfe-rust" target="_blank" rel="noreferrer"><img src="https://img.shields.io/badge/GitHub-Master--Jian/shipfe--rust-blue.svg" alt="GitHub"></a></p><p>A powerful, <strong>free</strong>, <strong>Rust-based</strong> web app deployment tool that <strong>doesn't request network</strong>, enabling <strong>one-click static frontend package uploads to servers</strong>. Supports multi-environment and sub-environment deployments with zero-downtime atomic deployment functionality.</p><h2 id="key-features" tabindex="-1">Key Features <a class="header-anchor" href="#key-features" aria-label="Permalink to "Key Features""></a></h2><ul><li>🚀 <strong>Free & Open Source</strong>: No hidden fees, MIT license</li><li>🦀 <strong>Rust-Based</strong>: Fast, reliable, memory-safe</li><li>🔒 <strong>No Network Requests</strong>: Works completely offline, ensuring security and privacy</li><li>⚡ <strong>One-Click Deployment</strong>: Instantly upload static frontend packages to servers</li><li>🔄 <strong>Atomic Deployment</strong>: Zero-downtime deployment with automatic rollback</li><li>🌍 <strong>Multi-Environment Support</strong>: Configure different environments (dev, staging, prod)</li><li>📦 <strong>Sub-Environment Support</strong>: Deploy multiple apps on the same server</li><li>🔑 <strong>Flexible Authentication</strong>: SSH keys, passwords, or environment variables</li><li>📝 <strong>Detailed Logging</strong>: Comprehensive deployment logs for troubleshooting</li><li>🗂️ <strong>Shared Resource Management</strong>: Cross-release deduplication of hashed static resources</li><li>📊 <strong>Resource Snapshots</strong>: Generate snapshots with file manifests for deployment auditing</li><li>🧹 <strong>Automatic Cleanup</strong>: Configurable old release retention and unused resource cleanup</li><li>🗑️ <strong>Shared Resource Reset</strong>: Automatically clears all shared resources during deployment for clean deployments</li></ul><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p><a href="/shipfe-rust/install.html">Installation Guide</a></p><h2 id="quick-start" tabindex="-1">Quick Start <a class="header-anchor" href="#quick-start" aria-label="Permalink to "Quick Start""></a></h2><ol><li>Initialize project:</li></ol><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:#6F42C1;--shiki-dark:#B392F0;">shipfe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> init</span></span></code></pre></div><ol start="2"><li><p>Configure deployment in <code>shipfe.config.json</code></p></li><li><p>Deploy:</p></li></ol><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:#6F42C1;--shiki-dark:#B392F0;">shipfe</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> deploy</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --profile</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> prod</span></span></code></pre></div><h2 id="quick-links" tabindex="-1">Quick Links <a class="header-anchor" href="#quick-links" aria-label="Permalink to "Quick Links""></a></h2><ul><li><a href="/shipfe-rust/quick-start.html">Quick Start</a></li><li><a href="/shipfe-rust/config/overview.html">Config Overview</a></li><li><a href="/shipfe-rust/commands/deploy.html">Deploy Command</a></li><li><a href="/shipfe-rust/commands/rollback.html">Rollback Command</a></li></ul>',14)])])}const g=t(n,[["render",r]]);export{u as __pageData,g as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as t,o as s,c as i,ae as a}from"./chunks/framework.BeaujayP.js";const u=JSON.parse('{"title":"Shipfe","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),n={name:"index.md"};function r(o,e,l,p,h,d){return s(),i("div",null,[...e[0]||(e[0]=[a("",14)])])}const g=t(n,[["render",r]]);export{u as __pageData,g as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as s,o as i,c as t,ae as e}from"./chunks/framework.BeaujayP.js";const k=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md"}'),n={name:"install.md"};function l(h,a,p,o,r,d){return i(),t("div",null,[...a[0]||(a[0]=[e('<h1 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h1><h2 id="npm-installation" tabindex="-1">npm Installation <a class="header-anchor" href="#npm-installation" aria-label="Permalink to "npm Installation""></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:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -g</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> shipfe</span></span></code></pre></div><h2 id="verify-installation" tabindex="-1">Verify Installation <a class="header-anchor" href="#verify-installation" aria-label="Permalink to "Verify Installation""></a></h2><p>Check version:</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:#6F42C1;--shiki-dark:#B392F0;">shipfe</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --version</span></span></code></pre></div><p>View help:</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:#6F42C1;--shiki-dark:#B392F0;">shipfe</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --help</span></span></code></pre></div>',8)])])}const g=s(n,[["render",l]]);export{k as __pageData,g as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as s,o as i,c as t,ae as e}from"./chunks/framework.BeaujayP.js";const k=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md"}'),n={name:"install.md"};function l(h,a,p,o,r,d){return i(),t("div",null,[...a[0]||(a[0]=[e("",8)])])}const g=s(n,[["render",l]]);export{k as __pageData,g as default};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as o,o as i,c as n,j as e,a as s}from"./chunks/framework.BeaujayP.js";const R=JSON.parse('{"title":"License","description":"","frontmatter":{},"headers":[],"relativePath":"license.md","filePath":"license.md"}'),a={name:"license.md"};function r(l,t,c,T,O,E){return i(),n("div",null,[...t[0]||(t[0]=[e("h1",{id:"license",tabindex:"-1"},[s("License "),e("a",{class:"header-anchor",href:"#license","aria-label":'Permalink to "License"'},"")],-1),e("p",null,"MIT License",-1),e("p",null,"Copyright (c) 2024 Master-Jian",-1),e("p",null,'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:',-1),e("p",null,"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",-1),e("p",null,'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.',-1)])])}const N=o(a,[["render",r]]);export{R as __pageData,N as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as o,o as i,c as n,j as e,a as s}from"./chunks/framework.BeaujayP.js";const R=JSON.parse('{"title":"License","description":"","frontmatter":{},"headers":[],"relativePath":"license.md","filePath":"license.md"}'),a={name:"license.md"};function r(l,t,c,T,O,E){return i(),n("div",null,[...t[0]||(t[0]=[e("h1",{id:"license",tabindex:"-1"},[s("License "),e("a",{class:"header-anchor",href:"#license","aria-label":'Permalink to "License"'},"")],-1),e("p",null,"MIT License",-1),e("p",null,"Copyright (c) 2024 Master-Jian",-1),e("p",null,'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:',-1),e("p",null,"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",-1),e("p",null,'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.',-1)])])}const N=o(a,[["render",r]]);export{R as __pageData,N as default};
|