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.
Files changed (170) hide show
  1. package/bin/shipfe +0 -0
  2. package/package.json +5 -1
  3. package/.github/workflows/deploy.yml +0 -46
  4. package/.github/workflows/release.yml +0 -51
  5. package/.vscode/settings.json +0 -5
  6. package/README_CN.md +0 -41
  7. package/docs/.vitepress/cache/deps/@theme_index.js +0 -275
  8. package/docs/.vitepress/cache/deps/@theme_index.js.map +0 -7
  9. package/docs/.vitepress/cache/deps/_metadata.json +0 -40
  10. package/docs/.vitepress/cache/deps/chunk-BRNHR3LR.js +0 -9719
  11. package/docs/.vitepress/cache/deps/chunk-BRNHR3LR.js.map +0 -7
  12. package/docs/.vitepress/cache/deps/chunk-H6MPEGKE.js +0 -12877
  13. package/docs/.vitepress/cache/deps/chunk-H6MPEGKE.js.map +0 -7
  14. package/docs/.vitepress/cache/deps/package.json +0 -3
  15. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4505
  16. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
  17. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -583
  18. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
  19. package/docs/.vitepress/cache/deps/vue.js +0 -347
  20. package/docs/.vitepress/cache/deps/vue.js.map +0 -7
  21. package/docs/.vitepress/config.ts +0 -120
  22. package/docs/.vitepress/dist/404.html +0 -22
  23. package/docs/.vitepress/dist/assets/app.DZUgfPE2.js +0 -1
  24. package/docs/.vitepress/dist/assets/chunks/framework.BeaujayP.js +0 -19
  25. package/docs/.vitepress/dist/assets/chunks/theme.CNyaCki0.js +0 -1
  26. package/docs/.vitepress/dist/assets/commands_deploy.md.cybIRa1n.js +0 -17
  27. package/docs/.vitepress/dist/assets/commands_deploy.md.cybIRa1n.lean.js +0 -1
  28. package/docs/.vitepress/dist/assets/commands_init.md.Da652so5.js +0 -2
  29. package/docs/.vitepress/dist/assets/commands_init.md.Da652so5.lean.js +0 -1
  30. package/docs/.vitepress/dist/assets/commands_rollback.md.C0zKmFtz.js +0 -7
  31. package/docs/.vitepress/dist/assets/commands_rollback.md.C0zKmFtz.lean.js +0 -1
  32. package/docs/.vitepress/dist/assets/config_auth.md.hvDhtWY8.js +0 -56
  33. package/docs/.vitepress/dist/assets/config_auth.md.hvDhtWY8.lean.js +0 -1
  34. package/docs/.vitepress/dist/assets/config_overview.md.DAQclMJL.js +0 -34
  35. package/docs/.vitepress/dist/assets/config_overview.md.DAQclMJL.lean.js +0 -1
  36. package/docs/.vitepress/dist/assets/config_schema.md.Bv5TuD6E.js +0 -1
  37. package/docs/.vitepress/dist/assets/config_schema.md.Bv5TuD6E.lean.js +0 -1
  38. package/docs/.vitepress/dist/assets/config_sub-env.md.DSUt0Nyq.js +0 -26
  39. package/docs/.vitepress/dist/assets/config_sub-env.md.DSUt0Nyq.lean.js +0 -1
  40. package/docs/.vitepress/dist/assets/features_atomic.md.Cszqfb8O.js +0 -22
  41. package/docs/.vitepress/dist/assets/features_atomic.md.Cszqfb8O.lean.js +0 -1
  42. package/docs/.vitepress/dist/assets/features_cleanup.md.D1j3LEm1.js +0 -20
  43. package/docs/.vitepress/dist/assets/features_cleanup.md.D1j3LEm1.lean.js +0 -1
  44. package/docs/.vitepress/dist/assets/features_shared-assets.md.ChpQD81r.js +0 -26
  45. package/docs/.vitepress/dist/assets/features_shared-assets.md.ChpQD81r.lean.js +0 -1
  46. package/docs/.vitepress/dist/assets/features_snapshot.md.Bddk9nNL.js +0 -24
  47. package/docs/.vitepress/dist/assets/features_snapshot.md.Bddk9nNL.lean.js +0 -1
  48. package/docs/.vitepress/dist/assets/index.md.DqmDY2QI.js +0 -1
  49. package/docs/.vitepress/dist/assets/index.md.DqmDY2QI.lean.js +0 -1
  50. package/docs/.vitepress/dist/assets/install.md.CblrJsha.js +0 -1
  51. package/docs/.vitepress/dist/assets/install.md.CblrJsha.lean.js +0 -1
  52. package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  53. package/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  54. package/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  55. package/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  56. package/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  57. package/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  58. package/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  59. package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  60. package/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  61. package/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  62. package/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  63. package/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  64. package/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  65. package/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  66. package/docs/.vitepress/dist/assets/license.md.hVRT8__d.js +0 -1
  67. package/docs/.vitepress/dist/assets/license.md.hVRT8__d.lean.js +0 -1
  68. package/docs/.vitepress/dist/assets/quick-start.md.C06xD920.js +0 -23
  69. package/docs/.vitepress/dist/assets/quick-start.md.C06xD920.lean.js +0 -1
  70. package/docs/.vitepress/dist/assets/style.DES0mfMn.css +0 -1
  71. package/docs/.vitepress/dist/assets/troubleshooting.md.DLP5r-7N.js +0 -1
  72. package/docs/.vitepress/dist/assets/troubleshooting.md.DLP5r-7N.lean.js +0 -1
  73. package/docs/.vitepress/dist/assets/zh_commands_deploy.md.BbKuBIij.js +0 -9
  74. package/docs/.vitepress/dist/assets/zh_commands_deploy.md.BbKuBIij.lean.js +0 -1
  75. package/docs/.vitepress/dist/assets/zh_commands_init.md.Dc_WYD8D.js +0 -18
  76. package/docs/.vitepress/dist/assets/zh_commands_init.md.Dc_WYD8D.lean.js +0 -1
  77. package/docs/.vitepress/dist/assets/zh_commands_rollback.md.Cdvwk1lB.js +0 -6
  78. package/docs/.vitepress/dist/assets/zh_commands_rollback.md.Cdvwk1lB.lean.js +0 -1
  79. package/docs/.vitepress/dist/assets/zh_config_auth.md.BytNcdS4.js +0 -44
  80. package/docs/.vitepress/dist/assets/zh_config_auth.md.BytNcdS4.lean.js +0 -1
  81. package/docs/.vitepress/dist/assets/zh_config_overview.md.CvAKxlb5.js +0 -45
  82. package/docs/.vitepress/dist/assets/zh_config_overview.md.CvAKxlb5.lean.js +0 -1
  83. package/docs/.vitepress/dist/assets/zh_config_schema.md.CTCn0g9X.js +0 -67
  84. package/docs/.vitepress/dist/assets/zh_config_schema.md.CTCn0g9X.lean.js +0 -1
  85. package/docs/.vitepress/dist/assets/zh_config_sub-env.md.Ce3xOEsi.js +0 -167
  86. package/docs/.vitepress/dist/assets/zh_config_sub-env.md.Ce3xOEsi.lean.js +0 -1
  87. package/docs/.vitepress/dist/assets/zh_features_atomic.md.DUhJ_qq0.js +0 -42
  88. package/docs/.vitepress/dist/assets/zh_features_atomic.md.DUhJ_qq0.lean.js +0 -1
  89. package/docs/.vitepress/dist/assets/zh_features_cleanup.md.CEgw587m.js +0 -50
  90. package/docs/.vitepress/dist/assets/zh_features_cleanup.md.CEgw587m.lean.js +0 -1
  91. package/docs/.vitepress/dist/assets/zh_features_shared-assets.md.DZhvWCTp.js +0 -26
  92. package/docs/.vitepress/dist/assets/zh_features_shared-assets.md.DZhvWCTp.lean.js +0 -1
  93. package/docs/.vitepress/dist/assets/zh_features_snapshot.md.Bkqgn7lu.js +0 -39
  94. package/docs/.vitepress/dist/assets/zh_features_snapshot.md.Bkqgn7lu.lean.js +0 -1
  95. package/docs/.vitepress/dist/assets/zh_index.md.DKRf1R-g.js +0 -1
  96. package/docs/.vitepress/dist/assets/zh_index.md.DKRf1R-g.lean.js +0 -1
  97. package/docs/.vitepress/dist/assets/zh_install.md.0LCLPI3L.js +0 -41
  98. package/docs/.vitepress/dist/assets/zh_install.md.0LCLPI3L.lean.js +0 -1
  99. package/docs/.vitepress/dist/assets/zh_license.md.BUZ74dvK.js +0 -1
  100. package/docs/.vitepress/dist/assets/zh_license.md.BUZ74dvK.lean.js +0 -1
  101. package/docs/.vitepress/dist/assets/zh_quick-start.md.Bl-Larcu.js +0 -19
  102. package/docs/.vitepress/dist/assets/zh_quick-start.md.Bl-Larcu.lean.js +0 -1
  103. package/docs/.vitepress/dist/assets/zh_troubleshooting.md.DHyCAfy2.js +0 -1
  104. package/docs/.vitepress/dist/assets/zh_troubleshooting.md.DHyCAfy2.lean.js +0 -1
  105. package/docs/.vitepress/dist/commands/deploy.html +0 -41
  106. package/docs/.vitepress/dist/commands/init.html +0 -26
  107. package/docs/.vitepress/dist/commands/rollback.html +0 -31
  108. package/docs/.vitepress/dist/config/auth.html +0 -80
  109. package/docs/.vitepress/dist/config/overview.html +0 -58
  110. package/docs/.vitepress/dist/config/schema.html +0 -25
  111. package/docs/.vitepress/dist/config/sub-env.html +0 -50
  112. package/docs/.vitepress/dist/features/atomic.html +0 -46
  113. package/docs/.vitepress/dist/features/cleanup.html +0 -44
  114. package/docs/.vitepress/dist/features/shared-assets.html +0 -50
  115. package/docs/.vitepress/dist/features/snapshot.html +0 -48
  116. package/docs/.vitepress/dist/hashmap.json +0 -1
  117. package/docs/.vitepress/dist/index.html +0 -25
  118. package/docs/.vitepress/dist/install.html +0 -25
  119. package/docs/.vitepress/dist/license.html +0 -25
  120. package/docs/.vitepress/dist/quick-start.html +0 -47
  121. package/docs/.vitepress/dist/troubleshooting.html +0 -25
  122. package/docs/.vitepress/dist/vp-icons.css +0 -0
  123. package/docs/.vitepress/dist/zh/commands/deploy.html +0 -33
  124. package/docs/.vitepress/dist/zh/commands/init.html +0 -42
  125. package/docs/.vitepress/dist/zh/commands/rollback.html +0 -30
  126. package/docs/.vitepress/dist/zh/config/auth.html +0 -68
  127. package/docs/.vitepress/dist/zh/config/overview.html +0 -69
  128. package/docs/.vitepress/dist/zh/config/schema.html +0 -91
  129. package/docs/.vitepress/dist/zh/config/sub-env.html +0 -191
  130. package/docs/.vitepress/dist/zh/features/atomic.html +0 -66
  131. package/docs/.vitepress/dist/zh/features/cleanup.html +0 -74
  132. package/docs/.vitepress/dist/zh/features/shared-assets.html +0 -50
  133. package/docs/.vitepress/dist/zh/features/snapshot.html +0 -63
  134. package/docs/.vitepress/dist/zh/index.html +0 -25
  135. package/docs/.vitepress/dist/zh/install.html +0 -65
  136. package/docs/.vitepress/dist/zh/license.html +0 -25
  137. package/docs/.vitepress/dist/zh/quick-start.html +0 -43
  138. package/docs/.vitepress/dist/zh/troubleshooting.html +0 -25
  139. package/docs/commands/deploy.md +0 -46
  140. package/docs/commands/init.md +0 -27
  141. package/docs/commands/rollback.md +0 -45
  142. package/docs/config/auth.md +0 -112
  143. package/docs/config/overview.md +0 -63
  144. package/docs/config/schema.md +0 -52
  145. package/docs/config/sub-env.md +0 -62
  146. package/docs/features/atomic.md +0 -67
  147. package/docs/features/cleanup.md +0 -80
  148. package/docs/features/shared-assets.md +0 -72
  149. package/docs/features/snapshot.md +0 -58
  150. package/docs/index.md +0 -48
  151. package/docs/install.md +0 -21
  152. package/docs/license.md +0 -23
  153. package/docs/quick-start.md +0 -98
  154. package/docs/troubleshooting.md +0 -88
  155. package/docs/zh/commands/deploy.md +0 -127
  156. package/docs/zh/commands/init.md +0 -76
  157. package/docs/zh/commands/rollback.md +0 -115
  158. package/docs/zh/config/auth.md +0 -195
  159. package/docs/zh/config/overview.md +0 -153
  160. package/docs/zh/config/schema.md +0 -253
  161. package/docs/zh/config/sub-env.md +0 -293
  162. package/docs/zh/features/atomic.md +0 -249
  163. package/docs/zh/features/cleanup.md +0 -241
  164. package/docs/zh/features/shared-assets.md +0 -72
  165. package/docs/zh/features/snapshot.md +0 -186
  166. package/docs/zh/index.md +0 -65
  167. package/docs/zh/install.md +0 -160
  168. package/docs/zh/license.md +0 -23
  169. package/docs/zh/quick-start.md +0 -109
  170. package/docs/zh/troubleshooting.md +0 -88
@@ -1,253 +0,0 @@
1
- # 配置架构
2
-
3
- 完整的Shipfe配置文件架构说明。
4
-
5
- ## 必需配置
6
-
7
- ### remote_host
8
-
9
- 服务器主机名或IP地址。
10
-
11
- ```json
12
- {
13
- "remote_host": "your-server.com"
14
- }
15
- ```
16
-
17
- ### remote_user
18
-
19
- SSH登录用户名。
20
-
21
- ```json
22
- {
23
- "remote_user": "deploy"
24
- }
25
- ```
26
-
27
- ### remote_path
28
-
29
- 服务器上的部署根目录。
30
-
31
- ```json
32
- {
33
- "remote_path": "/var/www/myapp"
34
- }
35
- ```
36
-
37
- ### local_path
38
-
39
- 本地构建输出目录。
40
-
41
- ```json
42
- {
43
- "local_path": "./dist"
44
- }
45
- ```
46
-
47
- ## 可选配置
48
-
49
- ### build_command
50
-
51
- 部署前执行的构建命令。
52
-
53
- ```json
54
- {
55
- "build_command": "npm run build"
56
- }
57
- ```
58
-
59
- ### keep_releases
60
-
61
- 保留的发布版本数量。默认值:5
62
-
63
- ```json
64
- {
65
- "keep_releases": 10
66
- }
67
- ```
68
-
69
- ### delete_old
70
-
71
- 是否只保留最新版本,删除所有旧版本。默认值:false
72
-
73
- ```json
74
- {
75
- "delete_old": true
76
- }
77
- ```
78
-
79
- ### enable_shared
80
-
81
- 启用共享资源功能。默认值:false
82
-
83
- ```json
84
- {
85
- "enable_shared": true
86
- }
87
- ```
88
-
89
- ### hashed_asset_patterns
90
-
91
- 共享资源的文件匹配模式。默认值:常见的静态资源类型
92
-
93
- ```json
94
- {
95
- "hashed_asset_patterns": [
96
- "**/*.js",
97
- "**/*.css",
98
- "**/*.png",
99
- "**/*.jpg",
100
- "**/*.svg",
101
- "**/*.woff2"
102
- ]
103
- }
104
- ```
105
-
106
- ### exclude_patterns
107
-
108
- 部署时排除的文件模式。
109
-
110
- ```json
111
- {
112
- "exclude_patterns": [
113
- "**/*.map",
114
- "**/*.log",
115
- "**/.DS_Store"
116
- ]
117
- }
118
- ```
119
-
120
- ### ssh_key_path
121
-
122
- SSH私钥路径。默认值:`~/.ssh/id_rsa`
123
-
124
- ```json
125
- {
126
- "ssh_key_path": "~/.ssh/deploy_key"
127
- }
128
- ```
129
-
130
- ### ssh_port
131
-
132
- SSH连接端口。默认值:22
133
-
134
- ```json
135
- {
136
- "ssh_port": 2222
137
- }
138
- ```
139
-
140
- ### pre_deploy_commands
141
-
142
- 部署前在服务器上执行的命令数组。
143
-
144
- ```json
145
- {
146
- "pre_deploy_commands": [
147
- "sudo systemctl stop nginx",
148
- "cd /var/www/myapp && php artisan down"
149
- ]
150
- }
151
- ```
152
-
153
- ### post_deploy_commands
154
-
155
- 部署后在服务器上执行的命令数组。
156
-
157
- ```json
158
- {
159
- "post_deploy_commands": [
160
- "cd /var/www/myapp/current && php artisan migrate",
161
- "sudo systemctl start nginx",
162
- "cd /var/www/myapp/current && php artisan up"
163
- ]
164
- }
165
- ```
166
-
167
- ## 配置类型
168
-
169
- ### 字符串类型
170
-
171
- - `remote_host`
172
- - `remote_user`
173
- - `remote_path`
174
- - `local_path`
175
- - `build_command`
176
- - `ssh_key_path`
177
-
178
- ### 数字类型
179
-
180
- - `keep_releases`
181
- - `ssh_port`
182
-
183
- ### 布尔类型
184
-
185
- - `delete_old`
186
- - `enable_shared`
187
-
188
- ### 数组类型
189
-
190
- - `hashed_asset_patterns`: 字符串数组
191
- - `exclude_patterns`: 字符串数组
192
- - `pre_deploy_commands`: 字符串数组
193
- - `post_deploy_commands`: 字符串数组
194
-
195
- ## 模式语法
196
-
197
- 文件匹配模式使用 glob 语法:
198
-
199
- - `*` - 匹配任意字符(不含路径分隔符)
200
- - `**` - 匹配任意字符(包含路径分隔符)
201
- - `?` - 匹配单个字符
202
- - `[abc]` - 匹配括号内的任意字符
203
- - `{a,b,c}` - 匹配大括号内的任意模式
204
-
205
- ### 示例
206
-
207
- ```json
208
- {
209
- "hashed_asset_patterns": [
210
- "**/*.js", // 所有JS文件
211
- "**/*.css", // 所有CSS文件
212
- "assets/**/*", // assets目录下的所有文件
213
- "**/*.{png,jpg}" // 所有PNG和JPG文件
214
- ],
215
- "exclude_patterns": [
216
- "**/*.map", // 排除源码映射文件
217
- "**/*.log", // 排除日志文件
218
- ".git/**", // 排除Git目录
219
- "node_modules/**" // 排除依赖目录
220
- ]
221
- }
222
- ```
223
-
224
- ## 环境变量
225
-
226
- 配置文件支持环境变量替换:
227
-
228
- ```json
229
- {
230
- "remote_host": "$DEPLOY_HOST",
231
- "remote_user": "$DEPLOY_USER",
232
- "remote_path": "/var/www/$APP_NAME"
233
- }
234
- ```
235
-
236
- 使用时设置环境变量:
237
-
238
- ```bash
239
- export DEPLOY_HOST=production.example.com
240
- export DEPLOY_USER=deploy
241
- export APP_NAME=myapp
242
- shipfe deploy
243
- ```
244
-
245
- ## 验证规则
246
-
247
- Shipfe 会验证配置的正确性:
248
-
249
- - **必需字段**:`remote_host`, `remote_user`, `remote_path`, `local_path`
250
- - **路径存在**:`local_path` 必须存在
251
- - **SSH连接**:能够建立SSH连接
252
- - **权限检查**:服务器目录具有写入权限
253
- - **模式有效性**:glob模式语法正确
@@ -1,293 +0,0 @@
1
- # 子环境配置
2
-
3
- 为不同的部署环境配置Shipfe。
4
-
5
- ## 环境配置文件
6
-
7
- 为每个环境创建单独的配置文件:
8
-
9
- ```
10
- project/
11
- ├── shipfe.config.json # 默认配置
12
- ├── shipfe.staging.json # 预发布环境
13
- ├── shipfe.production.json # 生产环境
14
- └── shipfe.test.json # 测试环境
15
- ```
16
-
17
- ## 环境配置示例
18
-
19
- ### 开发环境
20
-
21
- ```json
22
- // shipfe.dev.json
23
- {
24
- "remote_host": "dev.example.com",
25
- "remote_user": "dev",
26
- "remote_path": "/var/www/dev/myapp",
27
- "local_path": "./dist",
28
- "keep_releases": 3,
29
- "build_command": "npm run build:dev",
30
- "delete_old": false
31
- }
32
- ```
33
-
34
- ### 预发布环境
35
-
36
- ```json
37
- // shipfe.staging.json
38
- {
39
- "remote_host": "staging.example.com",
40
- "remote_user": "deploy",
41
- "remote_path": "/var/www/staging/myapp",
42
- "local_path": "./dist",
43
- "keep_releases": 5,
44
- "build_command": "npm run build:staging",
45
- "enable_shared": true,
46
- "pre_deploy_commands": [
47
- "cd /var/www/staging/myapp && php artisan down"
48
- ],
49
- "post_deploy_commands": [
50
- "cd /var/www/staging/myapp/current && php artisan migrate",
51
- "cd /var/www/staging/myapp/current && php artisan up"
52
- ]
53
- }
54
- ```
55
-
56
- ### 生产环境
57
-
58
- ```json
59
- // shipfe.production.json
60
- {
61
- "remote_host": "production.example.com",
62
- "remote_user": "deploy",
63
- "remote_path": "/var/www/production/myapp",
64
- "local_path": "./dist",
65
- "keep_releases": 10,
66
- "build_command": "npm run build:production",
67
- "enable_shared": true,
68
- "hashed_asset_patterns": [
69
- "**/*.js",
70
- "**/*.css",
71
- "**/*.png",
72
- "**/*.jpg",
73
- "**/*.svg",
74
- "**/*.woff2",
75
- "**/*.woff"
76
- ],
77
- "exclude_patterns": [
78
- "**/*.map",
79
- "**/*.log",
80
- "**/.*"
81
- ],
82
- "pre_deploy_commands": [
83
- "sudo systemctl stop nginx",
84
- "cd /var/www/production/myapp && php artisan down"
85
- ],
86
- "post_deploy_commands": [
87
- "cd /var/www/production/myapp/current && php artisan migrate --force",
88
- "cd /var/www/production/myapp/current && php artisan config:cache",
89
- "cd /var/www/production/myapp/current && php artisan route:cache",
90
- "cd /var/www/production/myapp/current && php artisan view:cache",
91
- "sudo systemctl start nginx",
92
- "cd /var/www/production/myapp/current && php artisan up"
93
- ]
94
- }
95
- ```
96
-
97
- ## 使用环境配置
98
-
99
- ### 指定配置文件
100
-
101
- ```bash
102
- # 部署到预发布环境
103
- shipfe deploy --config shipfe.staging.json
104
-
105
- # 部署到生产环境
106
- shipfe deploy --config shipfe.production.json
107
-
108
- # 回滚预发布环境
109
- shipfe rollback --config shipfe.staging.json
110
- ```
111
-
112
- ### 环境变量
113
-
114
- 使用环境变量简化配置:
115
-
116
- ```json
117
- // shipfe.config.json
118
- {
119
- "remote_host": "$DEPLOY_HOST",
120
- "remote_user": "$DEPLOY_USER",
121
- "remote_path": "$DEPLOY_PATH",
122
- "build_command": "$BUILD_COMMAND"
123
- }
124
- ```
125
-
126
- ```bash
127
- # 设置环境变量
128
- export DEPLOY_HOST=staging.example.com
129
- export DEPLOY_USER=deploy
130
- export DEPLOY_PATH=/var/www/staging/myapp
131
- export BUILD_COMMAND="npm run build:staging"
132
-
133
- shipfe deploy
134
- ```
135
-
136
- ### npm脚本
137
-
138
- 在 `package.json` 中定义部署脚本:
139
-
140
- ```json
141
- {
142
- "scripts": {
143
- "deploy:dev": "shipfe deploy --config shipfe.dev.json",
144
- "deploy:staging": "shipfe deploy --config shipfe.staging.json",
145
- "deploy:prod": "shipfe deploy --config shipfe.production.json",
146
- "rollback:staging": "shipfe rollback --config shipfe.staging.json",
147
- "rollback:prod": "shipfe rollback --config shipfe.production.json"
148
- }
149
- }
150
- ```
151
-
152
- 使用:
153
-
154
- ```bash
155
- npm run deploy:staging
156
- npm run deploy:prod
157
- ```
158
-
159
- ## 环境差异配置
160
-
161
- ### 构建命令差异
162
-
163
- 不同环境可能需要不同的构建配置:
164
-
165
- ```json
166
- // 开发环境 - 快速构建,无优化
167
- {
168
- "build_command": "npm run build:dev"
169
- }
170
-
171
- // 生产环境 - 完整构建,优化
172
- {
173
- "build_command": "npm run build:production"
174
- }
175
- ```
176
-
177
- ### 资源处理差异
178
-
179
- ```json
180
- // 预发布环境 - 启用源码映射
181
- {
182
- "exclude_patterns": []
183
- }
184
-
185
- // 生产环境 - 排除源码映射
186
- {
187
- "exclude_patterns": [
188
- "**/*.map"
189
- ]
190
- }
191
- ```
192
-
193
- ### 部署钩子差异
194
-
195
- ```json
196
- // 开发环境 - 简单重启
197
- {
198
- "post_deploy_commands": [
199
- "touch current/tmp/restart.txt"
200
- ]
201
- }
202
-
203
- // 生产环境 - 完整部署流程
204
- {
205
- "pre_deploy_commands": [
206
- "sudo systemctl stop nginx"
207
- ],
208
- "post_deploy_commands": [
209
- "sudo systemctl start nginx"
210
- ]
211
- }
212
- ```
213
-
214
- ## 配置继承
215
-
216
- 使用配置继承减少重复:
217
-
218
- ```javascript
219
- // config.js
220
- const baseConfig = {
221
- local_path: "./dist",
222
- keep_releases: 5,
223
- enable_shared: true
224
- };
225
-
226
- const environments = {
227
- dev: {
228
- ...baseConfig,
229
- remote_host: "dev.example.com",
230
- build_command: "npm run build:dev"
231
- },
232
- staging: {
233
- ...baseConfig,
234
- remote_host: "staging.example.com",
235
- build_command: "npm run build:staging"
236
- },
237
- production: {
238
- ...baseConfig,
239
- remote_host: "production.example.com",
240
- build_command: "npm run build:production",
241
- keep_releases: 10
242
- }
243
- };
244
-
245
- module.exports = environments;
246
- ```
247
-
248
- 然后生成JSON配置文件:
249
-
250
- ```bash
251
- node -e "console.log(JSON.stringify(require('./config.js').production, null, 2))" > shipfe.production.json
252
- ```
253
-
254
- ## 安全考虑
255
-
256
- ### 敏感信息
257
-
258
- 不要在配置文件中存储敏感信息:
259
-
260
- ```json
261
- // ❌ 不安全
262
- {
263
- "database_password": "secret123"
264
- }
265
-
266
- // ✅ 使用环境变量
267
- {
268
- "database_password": "$DB_PASSWORD"
269
- }
270
- ```
271
-
272
- ### 权限控制
273
-
274
- 为配置文件设置适当权限:
275
-
276
- ```bash
277
- # 配置文件权限
278
- chmod 600 shipfe.*.json
279
-
280
- # 环境变量文件权限
281
- chmod 600 .env
282
- ```
283
-
284
- ### 密钥管理
285
-
286
- 为不同环境使用不同的SSH密钥:
287
-
288
- ```json
289
- // 生产环境使用专用密钥
290
- {
291
- "ssh_key_path": "~/.ssh/production_deploy_key"
292
- }
293
- ```