shipfe 1.0.4 → 1.1.1

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.
Files changed (170) hide show
  1. package/.github/workflows/deploy.yml +46 -0
  2. package/.github/workflows/release.yml +51 -0
  3. package/README.md +13 -270
  4. package/README_CN.md +6 -263
  5. package/bin/shipfe +0 -0
  6. package/docs/.vitepress/cache/deps/@theme_index.js +275 -0
  7. package/docs/.vitepress/cache/deps/@theme_index.js.map +7 -0
  8. package/docs/.vitepress/cache/deps/_metadata.json +40 -0
  9. package/docs/.vitepress/cache/deps/chunk-BRNHR3LR.js +9719 -0
  10. package/docs/.vitepress/cache/deps/chunk-BRNHR3LR.js.map +7 -0
  11. package/docs/.vitepress/cache/deps/chunk-H6MPEGKE.js +12877 -0
  12. package/docs/.vitepress/cache/deps/chunk-H6MPEGKE.js.map +7 -0
  13. package/docs/.vitepress/cache/deps/package.json +3 -0
  14. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4505 -0
  15. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  16. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +583 -0
  17. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
  18. package/docs/.vitepress/cache/deps/vue.js +347 -0
  19. package/docs/.vitepress/cache/deps/vue.js.map +7 -0
  20. package/docs/.vitepress/config.ts +120 -0
  21. package/docs/.vitepress/dist/404.html +22 -0
  22. package/docs/.vitepress/dist/assets/app.DZUgfPE2.js +1 -0
  23. package/docs/.vitepress/dist/assets/chunks/framework.BeaujayP.js +19 -0
  24. package/docs/.vitepress/dist/assets/chunks/theme.CNyaCki0.js +1 -0
  25. package/docs/.vitepress/dist/assets/commands_deploy.md.cybIRa1n.js +17 -0
  26. package/docs/.vitepress/dist/assets/commands_deploy.md.cybIRa1n.lean.js +1 -0
  27. package/docs/.vitepress/dist/assets/commands_init.md.Da652so5.js +2 -0
  28. package/docs/.vitepress/dist/assets/commands_init.md.Da652so5.lean.js +1 -0
  29. package/docs/.vitepress/dist/assets/commands_rollback.md.C0zKmFtz.js +7 -0
  30. package/docs/.vitepress/dist/assets/commands_rollback.md.C0zKmFtz.lean.js +1 -0
  31. package/docs/.vitepress/dist/assets/config_auth.md.hvDhtWY8.js +56 -0
  32. package/docs/.vitepress/dist/assets/config_auth.md.hvDhtWY8.lean.js +1 -0
  33. package/docs/.vitepress/dist/assets/config_overview.md.DAQclMJL.js +34 -0
  34. package/docs/.vitepress/dist/assets/config_overview.md.DAQclMJL.lean.js +1 -0
  35. package/docs/.vitepress/dist/assets/config_schema.md.Bv5TuD6E.js +1 -0
  36. package/docs/.vitepress/dist/assets/config_schema.md.Bv5TuD6E.lean.js +1 -0
  37. package/docs/.vitepress/dist/assets/config_sub-env.md.DSUt0Nyq.js +26 -0
  38. package/docs/.vitepress/dist/assets/config_sub-env.md.DSUt0Nyq.lean.js +1 -0
  39. package/docs/.vitepress/dist/assets/features_atomic.md.Cszqfb8O.js +22 -0
  40. package/docs/.vitepress/dist/assets/features_atomic.md.Cszqfb8O.lean.js +1 -0
  41. package/docs/.vitepress/dist/assets/features_cleanup.md.D1j3LEm1.js +20 -0
  42. package/docs/.vitepress/dist/assets/features_cleanup.md.D1j3LEm1.lean.js +1 -0
  43. package/docs/.vitepress/dist/assets/features_shared-assets.md.ChpQD81r.js +26 -0
  44. package/docs/.vitepress/dist/assets/features_shared-assets.md.ChpQD81r.lean.js +1 -0
  45. package/docs/.vitepress/dist/assets/features_snapshot.md.Bddk9nNL.js +24 -0
  46. package/docs/.vitepress/dist/assets/features_snapshot.md.Bddk9nNL.lean.js +1 -0
  47. package/docs/.vitepress/dist/assets/index.md.DqmDY2QI.js +1 -0
  48. package/docs/.vitepress/dist/assets/index.md.DqmDY2QI.lean.js +1 -0
  49. package/docs/.vitepress/dist/assets/install.md.CblrJsha.js +1 -0
  50. package/docs/.vitepress/dist/assets/install.md.CblrJsha.lean.js +1 -0
  51. package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  52. package/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  53. package/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  54. package/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  55. package/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  56. package/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  57. package/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  58. package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  59. package/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  60. package/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  61. package/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  62. package/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  63. package/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  64. package/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  65. package/docs/.vitepress/dist/assets/license.md.hVRT8__d.js +1 -0
  66. package/docs/.vitepress/dist/assets/license.md.hVRT8__d.lean.js +1 -0
  67. package/docs/.vitepress/dist/assets/quick-start.md.C06xD920.js +23 -0
  68. package/docs/.vitepress/dist/assets/quick-start.md.C06xD920.lean.js +1 -0
  69. package/docs/.vitepress/dist/assets/style.DES0mfMn.css +1 -0
  70. package/docs/.vitepress/dist/assets/troubleshooting.md.DLP5r-7N.js +1 -0
  71. package/docs/.vitepress/dist/assets/troubleshooting.md.DLP5r-7N.lean.js +1 -0
  72. package/docs/.vitepress/dist/assets/zh_commands_deploy.md.BbKuBIij.js +9 -0
  73. package/docs/.vitepress/dist/assets/zh_commands_deploy.md.BbKuBIij.lean.js +1 -0
  74. package/docs/.vitepress/dist/assets/zh_commands_init.md.Dc_WYD8D.js +18 -0
  75. package/docs/.vitepress/dist/assets/zh_commands_init.md.Dc_WYD8D.lean.js +1 -0
  76. package/docs/.vitepress/dist/assets/zh_commands_rollback.md.Cdvwk1lB.js +6 -0
  77. package/docs/.vitepress/dist/assets/zh_commands_rollback.md.Cdvwk1lB.lean.js +1 -0
  78. package/docs/.vitepress/dist/assets/zh_config_auth.md.BytNcdS4.js +44 -0
  79. package/docs/.vitepress/dist/assets/zh_config_auth.md.BytNcdS4.lean.js +1 -0
  80. package/docs/.vitepress/dist/assets/zh_config_overview.md.CvAKxlb5.js +45 -0
  81. package/docs/.vitepress/dist/assets/zh_config_overview.md.CvAKxlb5.lean.js +1 -0
  82. package/docs/.vitepress/dist/assets/zh_config_schema.md.CTCn0g9X.js +67 -0
  83. package/docs/.vitepress/dist/assets/zh_config_schema.md.CTCn0g9X.lean.js +1 -0
  84. package/docs/.vitepress/dist/assets/zh_config_sub-env.md.Ce3xOEsi.js +167 -0
  85. package/docs/.vitepress/dist/assets/zh_config_sub-env.md.Ce3xOEsi.lean.js +1 -0
  86. package/docs/.vitepress/dist/assets/zh_features_atomic.md.DUhJ_qq0.js +42 -0
  87. package/docs/.vitepress/dist/assets/zh_features_atomic.md.DUhJ_qq0.lean.js +1 -0
  88. package/docs/.vitepress/dist/assets/zh_features_cleanup.md.CEgw587m.js +50 -0
  89. package/docs/.vitepress/dist/assets/zh_features_cleanup.md.CEgw587m.lean.js +1 -0
  90. package/docs/.vitepress/dist/assets/zh_features_shared-assets.md.DZhvWCTp.js +26 -0
  91. package/docs/.vitepress/dist/assets/zh_features_shared-assets.md.DZhvWCTp.lean.js +1 -0
  92. package/docs/.vitepress/dist/assets/zh_features_snapshot.md.Bkqgn7lu.js +39 -0
  93. package/docs/.vitepress/dist/assets/zh_features_snapshot.md.Bkqgn7lu.lean.js +1 -0
  94. package/docs/.vitepress/dist/assets/zh_index.md.DKRf1R-g.js +1 -0
  95. package/docs/.vitepress/dist/assets/zh_index.md.DKRf1R-g.lean.js +1 -0
  96. package/docs/.vitepress/dist/assets/zh_install.md.0LCLPI3L.js +41 -0
  97. package/docs/.vitepress/dist/assets/zh_install.md.0LCLPI3L.lean.js +1 -0
  98. package/docs/.vitepress/dist/assets/zh_license.md.BUZ74dvK.js +1 -0
  99. package/docs/.vitepress/dist/assets/zh_license.md.BUZ74dvK.lean.js +1 -0
  100. package/docs/.vitepress/dist/assets/zh_quick-start.md.Bl-Larcu.js +19 -0
  101. package/docs/.vitepress/dist/assets/zh_quick-start.md.Bl-Larcu.lean.js +1 -0
  102. package/docs/.vitepress/dist/assets/zh_troubleshooting.md.DHyCAfy2.js +1 -0
  103. package/docs/.vitepress/dist/assets/zh_troubleshooting.md.DHyCAfy2.lean.js +1 -0
  104. package/docs/.vitepress/dist/commands/deploy.html +41 -0
  105. package/docs/.vitepress/dist/commands/init.html +26 -0
  106. package/docs/.vitepress/dist/commands/rollback.html +31 -0
  107. package/docs/.vitepress/dist/config/auth.html +80 -0
  108. package/docs/.vitepress/dist/config/overview.html +58 -0
  109. package/docs/.vitepress/dist/config/schema.html +25 -0
  110. package/docs/.vitepress/dist/config/sub-env.html +50 -0
  111. package/docs/.vitepress/dist/features/atomic.html +46 -0
  112. package/docs/.vitepress/dist/features/cleanup.html +44 -0
  113. package/docs/.vitepress/dist/features/shared-assets.html +50 -0
  114. package/docs/.vitepress/dist/features/snapshot.html +48 -0
  115. package/docs/.vitepress/dist/hashmap.json +1 -0
  116. package/docs/.vitepress/dist/index.html +25 -0
  117. package/docs/.vitepress/dist/install.html +25 -0
  118. package/docs/.vitepress/dist/license.html +25 -0
  119. package/docs/.vitepress/dist/quick-start.html +47 -0
  120. package/docs/.vitepress/dist/troubleshooting.html +25 -0
  121. package/docs/.vitepress/dist/vp-icons.css +0 -0
  122. package/docs/.vitepress/dist/zh/commands/deploy.html +33 -0
  123. package/docs/.vitepress/dist/zh/commands/init.html +42 -0
  124. package/docs/.vitepress/dist/zh/commands/rollback.html +30 -0
  125. package/docs/.vitepress/dist/zh/config/auth.html +68 -0
  126. package/docs/.vitepress/dist/zh/config/overview.html +69 -0
  127. package/docs/.vitepress/dist/zh/config/schema.html +91 -0
  128. package/docs/.vitepress/dist/zh/config/sub-env.html +191 -0
  129. package/docs/.vitepress/dist/zh/features/atomic.html +66 -0
  130. package/docs/.vitepress/dist/zh/features/cleanup.html +74 -0
  131. package/docs/.vitepress/dist/zh/features/shared-assets.html +50 -0
  132. package/docs/.vitepress/dist/zh/features/snapshot.html +63 -0
  133. package/docs/.vitepress/dist/zh/index.html +25 -0
  134. package/docs/.vitepress/dist/zh/install.html +65 -0
  135. package/docs/.vitepress/dist/zh/license.html +25 -0
  136. package/docs/.vitepress/dist/zh/quick-start.html +43 -0
  137. package/docs/.vitepress/dist/zh/troubleshooting.html +25 -0
  138. package/docs/commands/deploy.md +46 -0
  139. package/docs/commands/init.md +27 -0
  140. package/docs/commands/rollback.md +45 -0
  141. package/docs/config/auth.md +112 -0
  142. package/docs/config/overview.md +63 -0
  143. package/docs/config/schema.md +52 -0
  144. package/docs/config/sub-env.md +62 -0
  145. package/docs/features/atomic.md +67 -0
  146. package/docs/features/cleanup.md +80 -0
  147. package/docs/features/shared-assets.md +72 -0
  148. package/docs/features/snapshot.md +58 -0
  149. package/docs/index.md +48 -0
  150. package/docs/install.md +21 -0
  151. package/docs/license.md +23 -0
  152. package/docs/quick-start.md +98 -0
  153. package/docs/troubleshooting.md +88 -0
  154. package/docs/zh/commands/deploy.md +127 -0
  155. package/docs/zh/commands/init.md +76 -0
  156. package/docs/zh/commands/rollback.md +115 -0
  157. package/docs/zh/config/auth.md +195 -0
  158. package/docs/zh/config/overview.md +153 -0
  159. package/docs/zh/config/schema.md +253 -0
  160. package/docs/zh/config/sub-env.md +293 -0
  161. package/docs/zh/features/atomic.md +249 -0
  162. package/docs/zh/features/cleanup.md +241 -0
  163. package/docs/zh/features/shared-assets.md +72 -0
  164. package/docs/zh/features/snapshot.md +186 -0
  165. package/docs/zh/index.md +65 -0
  166. package/docs/zh/install.md +160 -0
  167. package/docs/zh/license.md +23 -0
  168. package/docs/zh/quick-start.md +109 -0
  169. package/docs/zh/troubleshooting.md +88 -0
  170. package/package.json +17 -10
@@ -0,0 +1,46 @@
1
+ name: Deploy VitePress to GitHub Pages
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+ pages: write
11
+ id-token: write
12
+
13
+ concurrency:
14
+ group: pages
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - uses: actions/setup-node@v4
24
+ with:
25
+ node-version: 20
26
+ cache: npm
27
+
28
+ - run: npm ci
29
+ - run: npm run docs:build
30
+
31
+ - uses: actions/configure-pages@v5
32
+ with:
33
+ enablement: true
34
+ - uses: actions/upload-pages-artifact@v3
35
+ with:
36
+ path: docs/.vitepress/dist
37
+
38
+ deploy:
39
+ needs: build
40
+ runs-on: ubuntu-latest
41
+ environment:
42
+ name: github-pages
43
+ url: ${{ steps.deployment.outputs.page_url }}
44
+ steps:
45
+ - id: deployment
46
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,51 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ permissions:
9
+ contents: write
10
+ id-token: write
11
+
12
+ jobs:
13
+ release:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - uses: actions/setup-node@v4
19
+ with:
20
+ node-version: 20
21
+ registry-url: 'https://registry.npmjs.org'
22
+
23
+ - run: npm ci
24
+
25
+ - uses: actions/setup-python@v5
26
+ with:
27
+ python-version: '3.10'
28
+
29
+ - name: Install Rust
30
+ uses: dtolnay/rust-toolchain@stable
31
+
32
+ - run: cargo build --release
33
+
34
+ - run: cp target/release/shipfe bin/shipfe
35
+
36
+ - run: npm publish --provenance
37
+ env:
38
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
39
+
40
+ - name: Create GitHub Release
41
+ uses: softprops/action-gh-release@v1
42
+ with:
43
+ tag_name: ${{ github.ref_name }}
44
+ name: Release ${{ github.ref_name }}
45
+ body: |
46
+ ## Changes
47
+ - Version bump to ${{ github.ref_name }}
48
+ draft: false
49
+ prerelease: false
50
+ env:
51
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
package/README.md CHANGED
@@ -4,295 +4,38 @@
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
  [![GitHub](https://img.shields.io/badge/GitHub-Master--Jian/shipfe--rust-blue.svg)](https://github.com/Master-Jian/shipfe-rust)
6
6
 
7
- A powerful, **free**, **Rust-based** deployment tool for web applications that **never requests network** and enables **one-click static frontend deployment** to servers. Supports multiple environments and sub-environments with zero-downtime atomic deployments.
7
+ 一个强大的、**免费**、**基于 Rust** Web 应用部署工具,**不请求网络**,实现**一键前端静态部署包上传到服务器**。支持多环境和子环境部署,具有零停机原子部署功能。
8
8
 
9
- ## Key Features
10
-
11
- - 🚀 **Free and Open Source**: No hidden costs, MIT licensed
12
- - 🦀 **Built with Rust**: Fast, reliable, and memory-safe
13
- - 🔒 **No Network Requests**: Works completely offline, ensuring security and privacy
14
- - ⚡ **One-Click Deployment**: Upload static frontend packages to servers instantly
15
- - 🔄 **Atomic Deployments**: Zero-downtime deployments with automatic rollback
16
- - 🌍 **Multi-Environment Support**: Configure different environments (dev, staging, prod)
17
- - 📦 **Sub-Environment Support**: Deploy multiple apps to the same server
18
- - 🔑 **Flexible Authentication**: SSH key, password, or environment variable authentication
19
- - 📝 **Detailed Logging**: Comprehensive deployment logs for troubleshooting
20
-
21
- ## Installation
9
+ ## 安装
22
10
 
23
11
  ```bash
24
12
  npm install -g shipfe
25
13
  ```
26
14
 
27
- ## Quick Start
15
+ ## 快速开始
28
16
 
29
- 1. Initialize your project:
17
+ 1. 初始化项目:
30
18
  ```bash
31
19
  shipfe init
32
20
  ```
33
21
 
34
- 2. Configure your deployment in `shipfe.config.json`
22
+ 2. `shipfe.config.json` 中配置部署
35
23
 
36
- 3. Deploy:
24
+ 3. 部署:
37
25
  ```bash
38
26
  shipfe deploy --profile prod
39
27
  ```
40
28
 
41
- ## Usage
42
-
43
- ### Initialize project
44
- ```bash
45
- shipfe init
46
- ```
47
-
48
- ### Deploy to environment
49
- ```bash
50
- # Deploy to default environment
51
- shipfe deploy
52
-
53
- # Deploy to specific environment
54
- shipfe deploy --profile dev
55
-
56
- # Deploy to sub-environment
57
- shipfe deploy --profile dev-admin
58
-
59
- # Deploy to all sub-environments
60
- shipfe deploy --profile dev --all-sub
61
-
62
- # Atomic deployment (creates releases/timestamp and updates current symlink)
63
- shipfe deploy --atomic
64
- ```
65
-
66
- ### Rollback Deployment
67
- ```bash
68
- # Rollback main environment
69
- shipfe rollback --profile prod --to 20260303_034945
70
-
71
- # Rollback sub-environment
72
- shipfe rollback --profile prod-admin --to 20260303_034945
73
- ```
74
-
75
- ### Configuration
76
-
77
- Edit `shipfe.config.json` to configure your deployment settings:
78
-
79
- ```json
80
- {
81
- "environments": {
82
- "dev": {
83
- "build_command": "npm run build",
84
- "local_dist_path": "./dist",
85
- "servers": [
86
- {
87
- "host": "dev.example.com",
88
- "port": 22,
89
- "username": "deploy",
90
- "remote_deploy_path": "/var/www/dev",
91
- "delete_old": false
92
- }
93
- ],
94
- "remote_tmp": "/tmp"
95
- }
96
- }
97
- }
98
- ```
99
-
100
- #### Authentication Options
101
-
102
- Each server can have its own authentication method. Shipfe tries authentication methods in this order:
103
-
104
- 1. **Password** (if `password` is set in server config)
105
- 2. **SSH Private Key from environment** (if `SSH_PRIVATE_KEY` env var is set)
106
- 3. **SSH Key file** (if `key_path` is set in server config)
107
-
108
- **Example with multiple servers using different auth methods:**
109
-
110
- ```json
111
- {
112
- "environments": {
113
- "prod": {
114
- "build_command": "npm run build",
115
- "local_dist_path": "./dist",
116
- "servers": [
117
- {
118
- "host": "web1.prod.com",
119
- "port": 22,
120
- "username": "deploy",
121
- "password": "web1_password",
122
- "remote_deploy_path": "/var/www/prod",
123
- "delete_old": false
124
- },
125
- {
126
- "host": "web2.prod.com",
127
- "port": 22,
128
- "username": "deploy",
129
- "key_path": "/home/user/.ssh/web2_key",
130
- "remote_deploy_path": "/var/www/prod",
131
- "delete_old": false
132
- },
133
- {
134
- "host": "web3.prod.com",
135
- "port": 22,
136
- "username": "deploy",
137
- "key_path": "/home/user/.ssh/web3_key",
138
- "remote_deploy_path": "/var/www/prod",
139
- "delete_old": false
140
- }
141
- ],
142
- "remote_tmp": "/tmp"
143
- }
144
- }
145
- }
146
-
147
- ### Sub-environments
148
-
149
- For deploying multiple applications or different configurations to the same server, use sub-environments:
150
-
151
- ```json
152
- {
153
- "environments": {
154
- "dev": {
155
- "build_command": "npm run build",
156
- "local_dist_path": "./dist",
157
- "servers": [
158
- {
159
- "host": "dev.example.com",
160
- "port": 22,
161
- "username": "deploy",
162
- "remote_deploy_path": "/var/www/dev",
163
- "delete_old": false
164
- }
165
- ],
166
- "remote_tmp": "/tmp",
167
- "sub_environments": {
168
- "admin": {
169
- "build_command": "npm run build:admin",
170
- "remote_deploy_path": "/var/www/dev/admin"
171
- },
172
- "shop": {
173
- "build_command": "npm run build:shop",
174
- "remote_deploy_path": "/var/www/dev/shop"
175
- },
176
- "cu": {
177
- "build_command": "npm run build:cu",
178
- "remote_deploy_path": "/var/www/dev/cu"
179
- }
180
- }
181
- }
182
- }
183
- }
184
- ```
185
-
186
- Deploy to sub-environments:
187
- ```bash
188
- shipfe deploy --profile dev-admin
189
- shipfe deploy --profile dev-shop
190
- shipfe deploy --profile dev-cu
191
-
192
- # Deploy to all sub-environments at once
193
- shipfe deploy --profile dev --all-sub
194
- ```
195
-
196
- ### Deploy all sub-environments at once
197
- ```bash
198
- shipfe deploy --profile dev --all-sub
199
- ```
200
-
201
- This will deploy to all sub-environments (admin, shop, cu) in sequence.
202
-
203
- Sub-environments inherit settings from the parent environment and can override `build_command`, `local_dist_path`, and `remote_deploy_path`.
204
-
205
- ### Atomic Deployment
206
-
207
- Shipfe supports atomic deployment to minimize downtime. When using `--atomic`, the deployment creates a timestamped release directory and updates a `current` symlink for zero-downtime switching.
208
-
209
- ```bash
210
- # Atomic deployment to default environment
211
- shipfe deploy --atomic
212
-
213
- # Atomic deployment to specific environment
214
- shipfe deploy --profile prod --atomic
215
- ```
216
-
217
- **Directory Structure:**
218
- ```
219
- remote_deploy_path/
220
- ├── releases/
221
- │ ├── 20260303_034945/
222
- │ ├── 20260303_035012/
223
- │ └── 20260303_035045/
224
- └── current -> releases/20260303_035045
225
- ```
226
-
227
- Your web server should serve from `remote_deploy_path/current`.
228
-
229
- **Or use environment variable for all servers:**
230
- ```bash
231
- export SSH_PRIVATE_KEY="$(cat ~/.ssh/prod_key)"
232
- shipfe deploy --profile prod
233
- ```
234
-
235
- ### Authentication
236
-
237
- Shipfe supports multiple SSH authentication methods for each server individually. For each server, authentication methods are tried in this order:
238
-
239
- 1. **Password authentication**: If `password` is set in that server's config
240
- 2. **SSH Private Key from environment**: If `SSH_PRIVATE_KEY` environment variable is set (applies to all servers)
241
- 3. **SSH Key file**: If `key_path` is set in that server's config
242
-
243
- #### Usage Examples:
244
-
245
- ```bash
246
- # Each server can use different authentication
247
- shipfe deploy --profile prod
248
-
249
- # Or override with environment variable for all servers
250
- export SSH_PRIVATE_KEY="$(cat ~/.ssh/prod_key)"
251
- shipfe deploy --profile prod
252
- ```
253
-
254
- #### SSH Key Setup for Individual Servers:
255
-
256
- 1. **Generate SSH key pairs** for each server:
257
- ```bash
258
- # For server 1
259
- ssh-keygen -t rsa -b 4096 -f ~/.ssh/server1_key -C "server1"
260
-
261
- # For server 2
262
- ssh-keygen -t rsa -b 4096 -f ~/.ssh/server2_key -C "server2"
263
- ```
264
-
265
- 2. **Copy public keys to respective servers**:
266
- ```bash
267
- ssh-copy-id -i ~/.ssh/server1_key.pub user@server1.com
268
- ssh-copy-id -i ~/.ssh/server2_key.pub user@server2.com
269
- ```
29
+ ## 文档
270
30
 
271
- 3. **Configure shipfe** with server-specific keys:
272
- ```json
273
- {
274
- "servers": [
275
- {
276
- "host": "server1.com",
277
- "key_path": "~/.ssh/server1_key"
278
- },
279
- {
280
- "host": "server2.com",
281
- "key_path": "~/.ssh/server2_key"
282
- }
283
- ]
284
- }
285
- ```
31
+ 📖 [完整文档](https://master-jian.github.io/shipfe-rust/)
286
32
 
287
- ## Features
33
+ ## 常用命令
288
34
 
289
- - Multiple environment support
290
- - Sub-environment configuration
291
- - Custom build commands
292
- - SSH-based deployment
293
- - Automatic backup and rollback
294
- - Detailed logging
35
+ - `shipfe deploy --profile <env>` - 部署到指定环境
36
+ - `shipfe deploy --atomic` - 原子部署
37
+ - `shipfe rollback --profile <env> --to <timestamp>` - 回滚到指定版本
295
38
 
296
- ## License
39
+ ## 许可证
297
40
 
298
41
  MIT
package/README_CN.md CHANGED
@@ -6,18 +6,6 @@
6
6
 
7
7
  一个强大的、**免费**、**基于 Rust** 的 Web 应用部署工具,**不请求网络**,实现**一键前端静态部署包上传到服务器**。支持多环境和子环境部署,具有零停机原子部署功能。
8
8
 
9
- ## 主要特性
10
-
11
- - 🚀 **免费开源**: 无隐藏费用,MIT 许可证
12
- - 🦀 **基于 Rust**: 快速、可靠、内存安全
13
- - 🔒 **不请求网络**: 完全离线工作,确保安全和隐私
14
- - ⚡ **一键部署**: 即时上传静态前端包到服务器
15
- - 🔄 **原子部署**: 零停机部署,自动回滚
16
- - 🌍 **多环境支持**: 配置不同环境(开发、预发布、生产)
17
- - 📦 **子环境支持**: 在同一服务器部署多个应用
18
- - 🔑 **灵活认证**: SSH 密钥、密码或环境变量认证
19
- - 📝 **详细日志**: 全面的部署日志用于故障排除
20
-
21
9
  ## 安装
22
10
 
23
11
  ```bash
@@ -38,260 +26,15 @@ shipfe init
38
26
  shipfe deploy --profile prod
39
27
  ```
40
28
 
41
- ## 使用方法
42
-
43
- ### 初始化项目
44
- ```bash
45
- shipfe init
46
- ```
47
-
48
- ### 部署到环境
49
- ```bash
50
- # 部署到默认环境
51
- shipfe deploy
52
-
53
- # 部署到指定环境
54
- shipfe deploy --profile dev
55
-
56
- # 部署到子环境
57
- shipfe deploy --profile dev-admin
58
-
59
- # 部署到所有子环境
60
- shipfe deploy --profile dev --all-sub
61
-
62
- # 原子部署(创建 releases/时间戳 并更新 current 符号链接)
63
- shipfe deploy --atomic
64
- ```
65
-
66
- ### 回滚部署
67
- ```bash
68
- # 回滚主环境
69
- shipfe rollback --profile prod --to 20260303_034945
70
-
71
- # 回滚子环境
72
- shipfe rollback --profile prod-admin --to 20260303_034945
73
- ```
74
-
75
- ## 配置
76
-
77
- 编辑 `shipfe.config.json` 来配置您的部署设置:
78
-
79
- ```json
80
- {
81
- "environments": {
82
- "dev": {
83
- "build_command": "npm run build",
84
- "local_dist_path": "./dist",
85
- "servers": [
86
- {
87
- "host": "dev.example.com",
88
- "port": 22,
89
- "username": "deploy",
90
- "remote_deploy_path": "/var/www/dev",
91
- "delete_old": false
92
- }
93
- ],
94
- "remote_tmp": "/tmp"
95
- }
96
- }
97
- }
98
- ```
99
-
100
- ### 认证选项
101
-
102
- 每个服务器可以有自己的认证方法。Shipfe 按以下顺序尝试认证方法:
103
-
104
- 1. **密码**(如果在服务器配置中设置了 `password`)
105
- 2. **环境变量中的 SSH 私钥**(如果设置了 `SSH_PRIVATE_KEY` 环境变量)
106
- 3. **SSH 密钥文件**(如果在服务器配置中设置了 `key_path`)
107
-
108
- **使用不同认证方法的多个服务器示例:**
109
-
110
- ```json
111
- {
112
- "environments": {
113
- "prod": {
114
- "build_command": "npm run build",
115
- "local_dist_path": "./dist",
116
- "servers": [
117
- {
118
- "host": "web1.prod.com",
119
- "port": 22,
120
- "username": "deploy",
121
- "password": "web1_password",
122
- "remote_deploy_path": "/var/www/prod",
123
- "delete_old": false
124
- },
125
- {
126
- "host": "web2.prod.com",
127
- "port": 22,
128
- "username": "deploy",
129
- "key_path": "/home/user/.ssh/web2_key",
130
- "remote_deploy_path": "/var/www/prod",
131
- "delete_old": false
132
- },
133
- {
134
- "host": "web3.prod.com",
135
- "port": 22,
136
- "username": "deploy",
137
- "remote_deploy_path": "/var/www/prod",
138
- "delete_old": false
139
- }
140
- ],
141
- "remote_tmp": "/tmp"
142
- }
143
- }
144
- }
145
- ```
146
-
147
- ### 子环境
148
-
149
- 对于在同一服务器部署多个应用或不同配置,使用子环境:
150
-
151
- ```json
152
- {
153
- "environments": {
154
- "dev": {
155
- "build_command": "npm run build",
156
- "local_dist_path": "./dist",
157
- "servers": [
158
- {
159
- "host": "dev.example.com",
160
- "port": 22,
161
- "username": "deploy",
162
- "remote_deploy_path": "/var/www/dev",
163
- "delete_old": false
164
- }
165
- ],
166
- "remote_tmp": "/tmp",
167
- "sub_environments": {
168
- "admin": {
169
- "build_command": "npm run build:admin",
170
- "remote_deploy_path": "/var/www/dev/admin"
171
- },
172
- "shop": {
173
- "build_command": "npm run build:shop",
174
- "remote_deploy_path": "/var/www/dev/shop"
175
- },
176
- "cu": {
177
- "build_command": "npm run build:cu",
178
- "remote_deploy_path": "/var/www/dev/cu"
179
- }
180
- }
181
- }
182
- }
183
- }
184
- ```
185
-
186
- 部署到子环境:
187
- ```bash
188
- shipfe deploy --profile dev-admin
189
- shipfe deploy --profile dev-shop
190
- shipfe deploy --profile dev-cu
191
-
192
- # 一次部署到所有子环境
193
- shipfe deploy --profile dev --all-sub
194
- ```
195
-
196
- ### 一次部署所有子环境
197
- ```bash
198
- shipfe deploy --profile dev --all-sub
199
- ```
200
-
201
- 这将按顺序部署到所有子环境(admin、shop、cu)。
202
-
203
- 子环境继承父环境的设置,可以覆盖 `build_command`、`local_dist_path` 和 `remote_deploy_path`。
204
-
205
- ### 原子部署
206
-
207
- Shipfe 支持原子部署以最小化停机时间。使用 `--atomic` 时,部署会创建一个带时间戳的发布目录,并更新 `current` 符号链接,实现零停机切换。
208
-
209
- ```bash
210
- # 原子部署到默认环境
211
- shipfe deploy --atomic
212
-
213
- # 原子部署到指定环境
214
- shipfe deploy --profile prod --atomic
215
- ```
216
-
217
- **目录结构:**
218
- ```
219
- remote_deploy_path/
220
- ├── releases/
221
- │ ├── 20260303_034945/
222
- │ ├── 20260303_035012/
223
- │ └── 20260303_035045/
224
- └── current -> releases/20260303_035045
225
- ```
226
-
227
- 您的 Web 服务器应从 `remote_deploy_path/current` 提供服务。
228
-
229
- **或为所有服务器使用环境变量:**
230
- ```bash
231
- export SSH_PRIVATE_KEY="$(cat ~/.ssh/prod_key)"
232
- shipfe deploy --profile prod
233
- ```
234
-
235
- ### 认证
236
-
237
- Shipfe 支持为每个服务器单独设置多种 SSH 认证方法。对于每个服务器,按以下顺序尝试认证方法:
238
-
239
- 1. **密码认证**:如果该服务器配置中设置了 `password`
240
- 2. **环境变量中的 SSH 私钥**:如果设置了 `SSH_PRIVATE_KEY` 环境变量(适用于所有服务器)
241
- 3. **SSH 密钥文件**:如果该服务器配置中设置了 `key_path`
242
-
243
- #### 使用示例:
244
-
245
- ```bash
246
- # 每个服务器可以使用不同的认证
247
- shipfe deploy --profile prod
248
-
249
- # 或为所有服务器使用环境变量覆盖
250
- export SSH_PRIVATE_KEY="$(cat ~/.ssh/prod_key)"
251
- shipfe deploy --profile prod
252
- ```
253
-
254
- #### 为单个服务器设置 SSH 密钥:
255
-
256
- 1. **为每个服务器生成 SSH 密钥对**:
257
- ```bash
258
- # 服务器 1
259
- ssh-keygen -t rsa -b 4096 -f ~/.ssh/server1_key -C "server1"
260
-
261
- # 服务器 2
262
- ssh-keygen -t rsa -b 4096 -f ~/.ssh/server2_key -C "server2"
263
- ```
264
-
265
- 2. **将公钥复制到相应服务器**:
266
- ```bash
267
- ssh-copy-id -i ~/.ssh/server1_key.pub user@server1.com
268
- ssh-copy-id -i ~/.ssh/server2_key.pub user@server2.com
269
- ```
29
+ ## 文档
270
30
 
271
- 3. **使用服务器特定密钥配置 shipfe**:
272
- ```json
273
- {
274
- "servers": [
275
- {
276
- "host": "server1.com",
277
- "key_path": "~/.ssh/server1_key"
278
- },
279
- {
280
- "host": "server2.com",
281
- "key_path": "~/.ssh/server2_key"
282
- }
283
- ]
284
- }
285
- ```
31
+ 📖 [完整文档](https://master-jian.github.io/shipfe-rust/)
286
32
 
287
- ## 功能特性
33
+ ## 常用命令
288
34
 
289
- - 多环境支持
290
- - 子环境配置
291
- - 自定义构建命令
292
- - 基于 SSH 的部署
293
- - 自动备份和回滚
294
- - 详细日志记录
35
+ - `shipfe deploy --profile <env>` - 部署到指定环境
36
+ - `shipfe deploy --atomic` - 原子部署
37
+ - `shipfe rollback --profile <env> --to <timestamp>` - 回滚到指定版本
295
38
 
296
39
  ## 许可证
297
40
 
package/bin/shipfe CHANGED
Binary file