1 | ## 说明
|
2 |
|
3 | 部署应用工具,部署Web项目到服务器
|
4 |
|
5 | ## 功能特性
|
6 |
|
7 | - ✔︎ 支持本地或远程项目,远程项目需设置仓库地址
|
8 | - ✔︎ 支持前端或Node项目,Node项目部署后运行
|
9 | - ✔︎ 支持上传静态资源到OSS服务器
|
10 | - ✔︎ 支持设置默认的配置,一次配置多次使用,配置可扩展
|
11 |
|
12 | [English Document](https://github.com/weihomechen/deploy-tool/blob/master/README-en.md)
|
13 |
|
14 | ## 安装
|
15 |
|
16 | ```sh
|
17 | npm i @ifun/deploy -g
|
18 | ```
|
19 |
|
20 | ## @2.x
|
21 |
|
22 | - 重构了大部分代码,模块之间的功能划分更加明确,减少耦合,
|
23 | - `bin`作为工具的命令行入口,只负责识别命令、整合参数给具体的执行者
|
24 | - `lib`聚焦于单一功能点,完成具体的功能
|
25 | - `config`存储配置
|
26 | - `sh`放置执行脚本
|
27 | - 变更配置的使用方式,工具不再维护具体项目的配置,由具体项目自己维护
|
28 | - 通过命令行只能配置全局参数,不再提供通过命令行配置项目的参数
|
29 |
|
30 | ## 使用
|
31 |
|
32 | ### 部署项目
|
33 |
|
34 | 通过在项目根目录下新建一个名为`deploy.config.js`的文件,导出项目自己的配置:
|
35 |
|
36 | ```js
|
37 | // deploy.config.js
|
38 | module.exports = {
|
39 | // key即为部署方案名,一个项目可以有多个部署方案,比如部署在多个服务器,或者多个部署模式
|
40 | dev: {
|
41 | web: '192.168.90.78',
|
42 | },
|
43 | prod: {
|
44 | web: '118.25.16.129',
|
45 | }
|
46 | }
|
47 | ```
|
48 |
|
49 | 使用时,在项目根目录下运行:
|
50 |
|
51 | ```sh
|
52 | deploy app <scheme>
|
53 |
|
54 | # 示例
|
55 | deploy app dev
|
56 | ```
|
57 |
|
58 | ### 获取和设置全局参数
|
59 |
|
60 | ```sh
|
61 | # 获取全局配置项web
|
62 | deploy config get web
|
63 |
|
64 | # 设置全局配置项web为88.88.88.88
|
65 | deploy config set web 88.88.88.88
|
66 |
|
67 | ```
|
68 |
|
69 | ### 单纯上传到oss
|
70 |
|
71 | 支持从本地或仓库上传静态资源到OSS,如果是本地项目,则直接上传到oss服务器指定目录。如果是远程仓库,会先`git clone`到本地,如果需要打包,则执行传入的打包命令,然后再上传。
|
72 |
|
73 | ```sh
|
74 | # e.g.
|
75 | deploy oss <scheme> -i <accessKeyId> -s <accessKeySecret>
|
76 | ```
|
77 |
|
78 | ### 帮助
|
79 | ``` sh
|
80 | # for help
|
81 | deploy -h
|
82 |
|
83 | # for more detail
|
84 | deploy <command> -h
|
85 |
|
86 | # e.g
|
87 | deploy app -h
|
88 |
|
89 | ```
|
90 |
|
91 | ## 参数说明
|
92 |
|
93 | 默认的全局配置:
|
94 |
|
95 | ```js
|
96 | {
|
97 | "web": "118.25.16.129", // 服务器ip地址
|
98 | "dir": "/var/proj/", // 服务器部署目录
|
99 | "user": "root", // 用于ssh登录的用户名
|
100 | "type": "0", // 项目类型,0-static,1-node
|
101 | "isNeedBuild": true, // 是否执行打包构建
|
102 | "buildScript": "build", // 构建命令
|
103 | "distDir": "dist", // 构建后静态资源目录
|
104 | "npmRegistry": "http://registry.npmjs.org/" // npm镜像源
|
105 | }
|
106 | ```
|
107 |
|
108 | 可通过命令行传入的参数:
|
109 |
|
110 | ```sh
|
111 | .command('app <name>')
|
112 | .option('-w, --web [web]', 'web服务器')
|
113 | .option('-u, --user [user]', 'web服务器用户名')
|
114 | .option('-d, --dir [dir]', '要部署到web服务器的目录')
|
115 |
|
116 | .command('config <action>')
|
117 | .option('-a, --all', '是否读取全部配置')
|
118 |
|
119 | .command('oss <name>')
|
120 | .option('-i, --accessKeyId <accessKeyId>', 'oss accessKeyId')
|
121 | .option('-s, --accessKeySecret <accessKeySecret>', 'oss accessKeySecret')
|
122 | .option('-p [publicDir]', '项目内要部署到OSS的文件目录')
|
123 | .option('-b [bucket]', 'oss bucket')
|
124 | .option('-r [region]', 'oss region')
|
125 | .option('-a [assets]', 'oss 静态资源目录')
|
126 | ```
|
127 |
|
128 | ## 自定义默认配置
|
129 |
|
130 | ### 通过命令行可以设置全局配置
|
131 |
|
132 | ```sh
|
133 | deploy config set [key] [value]
|
134 | # e.g.
|
135 | deploy config set user yourname
|
136 | ```
|
137 |
|
138 | ### 项目内的配置文件
|
139 |
|
140 | 在项目的根目录下,通过`deploy.config.js`文件,维护项目自己的配置:
|
141 |
|
142 | ```js
|
143 | // deploy.config.js
|
144 | module.exports = {
|
145 | // key即为部署方案名,一个项目可以有多个部署方案,比如部署在多个服务器,或者多个部署模式
|
146 | dev: {
|
147 | web: '192.168.90.78',
|
148 | newkey: 'new value',
|
149 | },
|
150 | prod: {
|
151 | web: '118.25.16.129',
|
152 | }
|
153 | }
|
154 | ```
|
155 |
|
156 | ### 临时修改
|
157 |
|
158 | 临时输入的参数具有最高权级,会覆盖全局和项目的默认配置,仅生效一次
|
159 |
|
160 | ```sh
|
161 | # 通过命令行传递的`web`的参数最终会被使用
|
162 | deploy app [scheme] -w 88.88.88.88
|
163 | ```
|
164 |
|
165 |
|
166 | ## 约定
|
167 |
|
168 | 以下约定是本项目的默认设置
|
169 |
|
170 | ### 前端
|
171 | - 项目生产环境打包命令 `build`
|
172 | - 打包后的文件夹名 `dist`
|
173 |
|
174 | ### 服务端
|
175 | - 服务启动命令 `npm run prod`
|
176 | - 服务停止命令 `npm run stop`
|
177 |
|
178 | ## 实践
|
179 |
|
180 | 以下项目均通过本工具实现部署,线上预览地址在项目的github page:
|
181 |
|
182 | - [blog](https://github.com/weihomechen/blog)
|
183 | - [blog-node](https://github.com/weihomechen/blog-node)
|
184 | - [react-admin](https://github.com/weihomechen/react-admin)
|
185 | - [react-admin-node](https://github.com/weihomechen/react-admin-node)
|
186 | - [vue-mail](https://github.com/weihomechen/vue-mail-front)
|
187 | - [vue-blog](https://github.com/weihomechen/vue-blog)
|
188 | - [ssr-starter](https://github.com/weihomechen/ssr-starter)
|