@opentiny/tiny-toolkit-pro
Version:
TinyPro Vue:开箱即用、前后端分离的 Vue 后台管理模板
241 lines (170 loc) • 7.62 kB
Markdown
# Tiny Pro 快速启动
## 环境准备
请确保您安装了`nodejs`, `npm`, `tiny-cli`
```bash
tiny init pro
```
运行上述代码后按照提示输入配置
```
? 请输入项目名称: tiny-pro
? 请输入项目描述: 基于TinyPro套件创建的中后台系统
* 请选择您希望使用的客户端技术栈: vue
* 请选择您希望使用的服务端技术栈: Nest.js
* 请选择你想要的构建工具: Vite
* 请确保已安装数据库服务(参考文档
https://www.opentiny.design/tiny-cli/docs/toolkits/pro#database):
已完成数据库服务安装,开始配置
* 请选择数据库类型: MySql
* 请输入数据库地址: localhost
* 请输入数据库端口: 3306
* 请输入数据库名称: ospp-nest
* 请输入登录用户名: root
* 请输入密码: [hidden]
```
初始化完成后,项目结构应该为
```
tiny-pro
nestJs # 后端服务
web # 前端服务
```
## 后端启动
后端服务支持`docker启动`与`命令启动`, 执行操作前请先确保所处位置为`tiny-pro/nestJS`
### Docker启动
在运行`docker compose up -d`之前,请先修改`.env`环境变量文件,示例如下
```properties
# 数据库IP
DATABASE_HOST = 'mysql'
# 数据库端口
DATABASE_PORT = 3306
# 数据库用户名
DATABASE_USERNAME = 'root'
# 数据库密码
DATABASE_PASSWORD = 'root'
# 数据库名 (请确保该库存在)
DATABASE_NAME = 'ospp-nest'
# 请阅读: https://www.typeorm.org/migrations
# 线上环境请关闭
DATABASE_SYNCHRONIZE = false
DATABASE_AUTOLOADENTITIES = true
# jwt secret
AUTH_SECRET = 'secret'
REDIS_SECONDS = 7200
# redis ip
REDIS_HOST = 'redis'
# redis 端口
REDIS_PORT = 6379
# token过期时间
EXPIRES_IN = '2h'
# 分页默认起始页 (一般可以不修改)
PAGINATION_PAGE = 1
# 分页默认大小
PAGINATION_LIMIT = 10
```
修改完`.env`文件后,请执行`docker compose up -d`
当执行`docker ps`中`STATUS`列均为`Up`时,表示后端启动成功
```
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b76f3ebebe81 nestjs-back "docker-entrypoint.s…" 12 minutes ago Up 11 minutes 0.0.0.0:3000->3000/tcp nestjs-back-1
32ae9982b96a redis "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 0.0.0.0:6379->6379/tcp nestjs-redis-1
94f3b55b7b2b mysql:8 "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp nestjs-mysql-1
```
### 命令启动
#### 依赖安装
```bash
npm i
```
#### 环境准备
#### 安装MySQL
请参考[MySQL 8.0安装](https://dev.mysql.com/doc/mysql-installation-excerpt/8.0/en/windows-installation.html)
#### 安装Redis服务
请参考[Redis 官方手册](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-windows/)
请确保您的机器已经安装了`Mysql`与`Redis`服务。接下来,我们需要配置`.env`环境变量文件。`.env`文件示例如下
```properties
# 数据库IP
DATABASE_HOST = 'localhost'
# 数据库端口
DATABASE_PORT = 3306
# 数据库用户名
DATABASE_USERNAME = 'root'
# 数据库密码
DATABASE_PASSWORD = 'root'
# 数据库名 (请确保该库存在)
DATABASE_NAME = 'ospp-nest'
# 请阅读: https://www.typeorm.org/migrations
# 线上环境请关闭
DATABASE_SYNCHRONIZE = false
DATABASE_AUTOLOADENTITIES = true
# jwt secret
AUTH_SECRET = 'secret'
REDIS_SECONDS = 7200
# redis ip
REDIS_HOST = 'localhost'
# redis 端口
REDIS_PORT = 6379
# token过期时间
EXPIRES_IN = '2h'
# 分页默认起始页 (一般可以不修改)
PAGINATION_PAGE = 1
# 分页默认大小
PAGINATION_LIMIT = 10
```
#### 启动项目
在启动项目前请您做好如下检查
- [ ] MySQL服务可以正常访问
- [ ] Redis服务可以正常访问
- [ ] MySQL中存在`.env`文件中`DATABASE_NAME`字段定义的数据库,且该数据库为空
- [ ] 您已经运行了 `node migrate.js` 命令且出现了 `Now you can safely launched the project` 字样。
- [ ] `.env`文件中`DATABASE_SYNCHRONIZE`为`false`
- [ ] `tiny-pro`后端依赖已经安装
完成上述检查后,您可以在`tiny-pro/nestJs`下执行`npm run start`.
```
LOG [NestApplication] Nest application successfully started +11ms
Application is running on: http://[::1]:3000
```
当出现上述文本时候即为后端启动成功。
## 前端启动
### 依赖安装
```bash
cd tiny-pro/web
npm i
```
### 项目启动
在项目启动前,请您确保后端服务已经启动成功,且可以正常访问。我们列出了一个启动前检查清单,您可以对照检查清单来进行启动前检查
- [ ] 后端服务启动成功
- [ ] 前端依赖安装完成
- [ ] `npm run mock`启动mock服务
上述列表全部检查完成后,运行 `npm run start` 即可启动前端服务,浏览器会自行打开项目,当出现下图时则代表启动成功。

## 前端打包
对于前端项目打包,只需要执行`npm run build`即可
## 后端打包
### 命令打包
运行`npm run build`即可
### docker打包
> 这里只阐述默认 tiny-pro 后端打包,如果您进行了修改(例如增加了某些node-gyp依赖,请修改`dockerfile`手动安装`node-gyp`系统级前置依赖)
运行 `docker build -t tinypro:latest` 即可
## 遇到困难?
加官方小助手微信 opentiny-official,加入技术交流群
## 常见问题
### 后端docker启动时出现 `Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.`
这是因为宿主机的某些应用占用了`3306`端口, 请先释放宿主机该端口后手动启动MySQL服务
### 后端使用`docker compose up -d`启动时候,出现I/O timeout错误
这主要是因为网络问题,您可以手动执行下述命令
```
docker pull node:alpine
docker pull node:lts
```
输入完上述命令后再次执行`docker compose up -d`即可。
### 提示 `Lock file exists, if you want init agin, please remove dist or dist/lock`
为了避免重复初始化,系统会在第一次初始化的时候在`dist`目录下新建`app/lock`文件,如果您需要再次初始化,那么请您删除`dist/app`或者直接删除`dist`文件夹
### docker 部署时数据库超时
在新版本中我们加入了 `wait4x` 来检查 `mysql` 容器情况。但这并不能完全避免因为 `mysql` 启动过慢而导致的容器启动失败。在业务容器中我们设定的轮询时间为2s, 最多等待60s. 如果超时请按照如下检查表逐一排查
1. MySQL容器是否启动成功?
2. MySQL容器是否初始化成功?
3. 业务容器环境变量是否正确?
### 前端跨域问题如何解决
对于开发环境来说,可以直接修改`dev-server`的`proxy`. 例如`vite`工具的`server.proxy`
### 代码无法提交
您可以选择移除husky或根据[Angular 规范](https://zj-git-guide.readthedocs.io/zh-cn/latest/message/Angular%E6%8F%90%E4%BA%A4%E4%BF%A1%E6%81%AF%E8%A7%84%E8%8C%83/)书写commit信息
### 页面部署后刷新404
请移步[Vue Router服务器部署指南](https://router.vuejs.org/guide/essentials/history-mode.html#Example-Server-Configurations)