From 76da57b39ca074118a7e7e860e492823f3fb39f3 Mon Sep 17 00:00:00 2001 From: chenruilong Date: Mon, 3 Jun 2024 20:17:04 +0800 Subject: [PATCH] update: unicloud-private-env.md --- docs/unicloud-private-env.md | 299 +++++++++++++++++++++++++---------- 1 file changed, 215 insertions(+), 84 deletions(-) diff --git a/docs/unicloud-private-env.md b/docs/unicloud-private-env.md index f0dd20d..3b20c8d 100644 --- a/docs/unicloud-private-env.md +++ b/docs/unicloud-private-env.md @@ -13,6 +13,7 @@ 从开发工具、API、生态各维度,软件版和serverless版没有差别。开发者基于serverless版编写的uniCloud项目源码,可以平滑部署到软件版,前端uni-app代码、后端云函数、云对象等代码,均无需修改。 相比serverless版,`软件版`最主要的差别如下: + - 开发者需要单独购买服务器,自己安装操作系统(目前仅支持`linux`操作系统); - 开发者自己购买云存储、开通CDN加速产品; - 开发者自己安装数据库,或者购买mongodb实例; @@ -29,6 +30,7 @@ uniCloud软件版,作为一个开发框架,仅负责云函数、云对象的执行,支持在云函数中连接开发者自己的对象存储和数据库。而这些对象存储和数据库,需要开发者自己去购买开通,uniCloud软件版本身没有内置。 存储方面,uniCloud软件版目前支持如下3种存储方案: + - 本地存储:文件存储和uniCloud软件版在同一台服务器上; - 阿里云OSS - 腾讯云COS @@ -38,11 +40,11 @@ uniCloud软件版,作为一个开发框架,仅负责云函数、云对象的 ## 安装指南 ::: warning 注意 + 1. 为了与serverless版保持一致,软件版目前仅支持`mongo 4.0` 版本 2. uniCloud软件版内置的定制`node.js`版本为`16.20.2` ::: - ### 系统要求 **系统最低配置** @@ -63,7 +65,7 @@ Ubuntu >= 20.04 或更高版本 CentOS >= 8.5 或更高版本 (官方已停止维护,不推荐作为生成环境使用) -银河麒麟高级服务器操作系统V10 +银河麒麟高级服务器操作系统V10 **Linux 安装先决条件** @@ -74,11 +76,53 @@ CentOS >= 8.5 或更高版本 (官方已停止维护,不推荐作为生成环 - CentOS、RHEL: `sudo yum install gcc` - Ubuntu: `sudo apt-get install gcc` +**环境检测** + +可以逐步运行一下命令来确认服务器配置 + +``` +uname -r // 查看内核发行版本号 +cat /etc/os-release | grep -E "^NAME=|^VERSION=" // 查看系统版本号 +ldd --version // 查看 glibc 版本号 +gcc --version // 查看 GCC 版本号 +cat /proc/cpuinfo| grep "processor" // 查看CPU信息 +free -h // 查看内存信息 +df -h // 查看磁盘信息 +``` + ### 获取安装软件 -uniCloud软件版是付费软件,你需要先发邮件到`bd@dcloud.io`,通过商务采购后才能获得。 +uniCloud软件版是付费软件,根据服务器数量及应用数量进行收费。 + +登录uniCloud控制台,按图所示进入uniCloud软件版页面 + +![](https://web-ext-storage.dcloud.net.cn/unicloud/docs202406031627806.png) + +初次使用需在uniCloud控制台进行申请开通,开通后可以创建集群后获取uniCloud安装包。 -获得安装软件后,你需要将安装包上传到自己的服务器,然后登录服务器,进行文件解压; +![](https://web-ext-storage.dcloud.net.cn/unicloud/docs202406031634663.png) + +同意开通后进入uniCloud软件版集群列表 + +![](https://web-ext-storage.dcloud.net.cn/unicloud/docs202406031639818.png) + +目前创建集群数量暂无限制,您可以根据部署的业务来创建不同的集群。 + +> 什么是集群? +> +> 集群的作用是基于不同的业务划分一组服务器来进行部署,并且同一集群下的应用是共享的。 +> +> 如果业务需要分布式运行可以在同一集群下添加多台服务器实现,而不需要创建新的集群。 + +集群创建后,需要稍等片刻,后台会在10分钟内构建最新版本的uniCloud软件版安装包。 + +![](https://web-ext-storage.dcloud.net.cn/unicloud/docs202406031626507.png) + +安装软件构建成功后,你需要将安装包上传到自己的服务器,可以通过网页下载后手动上传,也可以复制`wget`命令在服务器执行并下载安装包 + +![](https://web-ext-storage.dcloud.net.cn/unicloud/docs202406031644365.png) + +将安装包下载到服务后运行以下命令进行解压操作,并移动到合适的文件夹内 (推荐文件夹`/uniCloud`) ``` # 创建uniCloud目录,需要root用户权限 @@ -87,20 +131,70 @@ mkdir /uniCloud tar -zxvf [version].tar.gz -C /uniCloud ``` +**离线集群版本** + +如果您有内网部署需求(服务器不允许连接外网),可以发邮件到`bd@dcloud.io`,通过商务采购方式申请开通离线集群进行部署安装使用。 + +### 注册 uniCloud软件版 -### 获取激活license +uniCloud软件版安装完成后,需要像DCloud注册您的uniCloud软件版,注册成功后才可以正常运行。 -uniCloud软件版的license是和服务器硬件绑定的,激活软件之前需要先执行扫描操作: -- 下载[uniCloud-scan](https://web-ext-storage.dcloud.net.cn/unicloud/private/tools/uniCloud-scan) -- 上传 uniCloud-scan到服务器 -- 在服务器上执行`./uniCloud-scan` -- 将扫描结果发给DCoud商务经理,由DCloud侧生成`LICENSE`文件 -- 将`LICENSE`文件上传至`/uniCloud/`目录下 +每个账号每年(自然年)可以有5次注册试用版机会,单次试用时长为14天。 -### 软件操作命令 +在试用版中可以体验完整的uniCloud软件版服务,并且不限制应用数量。 +试用到期后如uniCloud软件版还在运行,接收到请求后将统一返回试用过期信息,请勿将试用版用于生产环境。 + +如需生产环境部署,请购买uniCloud软件版服务器授权。 + +在uniCloud软件版安装目录下运行以下命令进行激活 + +- `./unicloud register` 注册uniCloud软件版 +- `./unicloud regsiter --trial` 注册试用uniCloud软件版 + +**离线集群uniCloud软件版注册方式** + +由于离线uniCloud软件版没有网络连接,需要在uniCloud软件版安装目录下运行 `./uniCloud scan` 命令,会检测服务器环境信息及注册状态,如未注册状态,会在最后生成一个硬件ID + +![](https://web-ext-storage.dcloud.net.cn/unicloud/docs202406031715273.png) + +你需要登录uniCloud控制台-集群详情页面,在服务器授权处点击添加授权,输入服务器名称(用于备注服务器)和硬件ID保存,添加完成后点击"下载授权",将会生成`[servername].LICENSE`文件并下载。 + +![](https://web-ext-storage.dcloud.net.cn/unicloud/docs202406031924263.png) + +将下载的授权文件上传uniCloud软件版安装根目录下,并重命名为`LICENSE`,即可完成注册。 + +### 添加应用授权 + +应用授权即授权哪些uni-app客户端可以访问uniCloud软件版,应用授权需要单独购买, +未授权的应用访问uniCloud软件版将会返回`403`错误码。 + +添加应用授权有两种方式,一种是在购买授权时,同时绑定应用,另外一种是只购买授权次数,在之后再绑定应用,根据实际情况选择。 + +添加完应用之后需要重新启动uniCloud软件版服务后生效。 + +**离线集群uniCloud软件版更新应用授权** + +在添加应用之后,点击对应的AppId的下载授权按钮,将会生成`[AppId].LICENSE`文件并下载。 + +![](https://web-ext-storage.dcloud.net.cn/unicloud/docs202406031923255.png) + +如果是首次添加应用,请检查uniCloud软件版安装根目录下是否存在`app-license`文件夹,如不存在,请先创建。 + +将下载的授权文件上传uniCloud软件版安装根目录`app-license`文件夹内即可。 + +添加完应用之后需要重新启动uniCloud软件版服务后生效。 + +### uniCloud软件版操作命令 > 所有命令请在软件版环境根目录运行 +注册uniCloud软件版 + +``` +./unicloud register // 注册 +./unicloud register --trial // 注册试用 +``` + 启动 `./unicloud start -s [服务空间ID]` @@ -113,16 +207,29 @@ uniCloud软件版的license是和服务器硬件绑定的,激活软件之前 `./unicloud install -s [服务空间ID]` +初始化数据库 + +`./unicloud init-database -s [服务空间ID]` + +扫描服务器、服务空间、注册状态等信息 + +`./unicloud scan` ## 开发指南 ### 创建服务空间 为了和serverless版保持一致的开发体验,你需要创建服务空间: -- 登录[uniCloud控制台](https://unicloud.dcloud.net.cn/) 创建DCloud服务空间,复制新建空间的SpaceId -- 登录部署uniCloud软件版的服务器,创建空间目录: + +登录[uniCloud控制台](https://unicloud.dcloud.net.cn/) 新建服务空间,版本选择 uniCloud软件版,绑定集群后即可开通。 + +![](https://web-ext-storage.dcloud.net.cn/unicloud/docs202406031939942.png) + +服务空间创建成功后,复制服务空间ID,在uniCloud软件版根目录按照以下命令创建服务空间目录 + ``` -cd /uniCloud/spaces/ +mkdir spaces // 如果spaces目录不存在先创建 +cd spaces mkdir [SpaceId] ``` @@ -145,9 +252,9 @@ mkdir [SpaceId] "minPoolSize": 10 //最小连接数 }, "storage": {//存储服务配置,如项目未使用存储服务可不配置此项 - "provider": "local",//服务商 支持local:本地存储 aliyun: 阿里云存储服务 tencent:腾讯云存储服务 + "provider": "local",//服务商 支持local:本地存储 aliyun: 阿里云存储服务 tencent:腾讯云存储服务 qiniu:七牛云 "dir": "file/upload", //文件上传目录 - "bucket": "",//存储桶名称,本地存储无需配置此项 + "bucket": "",//存储桶名称,本地存储无需配置此项 "cdnProtocol": "http://",//cdn协议 支持 http https "cdnDomain": "127.0.0.1:7001",//cdn域名 "cdnRootPath": "/storage/file/",//cdn根目录 @@ -162,8 +269,8 @@ mkdir [SpaceId] "password": ""//密码 }, "spaceSecret": { //服务空间通讯配置 - "secretKeyId": "xxxx", //SpaceKeyID,可在uniCloud控制台查看 - "secretKey": "xxx" //SpaceSecret ,可在uniCloud控制台查看 + "secretKeyId": "xxxx", //SpaceKeyID,可在uniCloud控制台查看 + "secretKey": "xxx" //SpaceSecret ,可在uniCloud控制台查看 } } ``` @@ -182,42 +289,29 @@ mkdir [SpaceId] } ``` - ### 使用HBuilerX开发调试 -> 软件版暂不支持`oss`、`cos`等存储服务的本地调试。 +#### 安装uniCloud软件版插件 -#### 安装override插件包 +在插件市场中下载[uniCloud软件版插件](https://ext.dcloud.net.cn/plugin?id=18520),并在HBuilderX中安装。 -软件版环境的`mongo`、`redis`等数据库是由开发者自行购买或安装的,因此要想在`HBuilderX`中连接这些服务,需安装相关的插件包和npm依赖,并为项目添加数据库等服务的配置文件。 +uniCloud软件版插件支持以下功能: -1. 下载并解压`override插件包`,插件包可联系`DCloud`工作人员获取。 +- 创建本地调试配置文件 +- 创建本地存储调试配置文件 +- 打包uniCloud资源 -2. 将`override插件包`目录内的文件,移至`HBuilderX安装目录/plugins/unicloud/override`目录下。 +#### 关联服务空间 -3. 安装`mongo`、`redis`数据库依赖:在`HBuilderX安装目录/plugins/unicloud`目录下,分别执行 `npm install mongodb@3.6.3` 和 `npm install redis@3.1.2`。 +> HBuilderX > 4.19 (暂定) +uniCloud软件版服务空间使用 `dcloud` 标识 -#### 关联服务空间 +如果项目内不存在`dcloud`服务空间,请在项目根目录右键-创建uniCloud环境,选择 `DCloud`创建即可。 -`HBuilderX`中运行`uniCloud项目`,必须关联服务空间,但HBuilderX暂不支持关联DCloud服务空间,此时你需要按照如下操作进行: -- 创建一个免费的serverless版服务空间,仅做为关联使用,无需担心费用; -- 修改配置文件:`vue2项目`的配置文件为:`vue.config.js`,`vue3项目`的配置文件为:`vite.config.js`,内容如下: - -```js -//客户端DCloud服务空间连接配置示例 -process.env.UNI_CLOUD_PROVIDER = JSON.stringify([{ - provider: 'dcloud',//声明为DCloud服务空间 - spaceName: 'private-space',//服务空间名称 - spaceId: 'pvt-xxx', //服务空间编号 - clientSecret: 'ba461799-fde8-429f-8cc4-4b6d306e2339',//客户端通讯密钥 - endpoint: 'http://127.0.0.1:7001'//DCloud服务空间的访问地址 -}]) -``` +`dcloud`服务空间文件夹全名为`uniCloud-dcloud` -关于spaceId、clientSecret等DCloud服务空间相关信息,可在[uniCloud控制台](https://unicloud.dcloud.net.cn/)查看。 - -HBuilderX会尽快发版,支持关联DCloud服务空间。 +在 `uniCloud-dcloud` 目录右键即可关联`dcloud`服务空间。 #### 配置数据库链接 @@ -226,21 +320,62 @@ HBuilderX会尽快发版,支持关联DCloud服务空间。 ```json //下方为配置示例,如拷贝此内容切记去除注释 { - "mongodb": { //mongo库连接配置 - "url": "mongodb://username:password@127.0.0.1:7001",//mongo库连接地址 - "database": "unicloud" //数据库名称 - }, - "redis": {//redis库连接配置,项目中不使用redis服务可不配置此项 - "host": "127.0.0.1",//host - "port": 6379, //端口号 - "password": "password"//密码 - } + "mongodb": { //mongo库连接配置 + "url": "mongodb://username:password@127.0.0.1:7001",//mongo库连接地址 + "database": "unicloud" //数据库名称 + }, + "redis": {//redis库连接配置,项目中不使用redis服务可不配置此项 + "host": "127.0.0.1",//host + "port": 6379, //端口号 + "password": "password"//密码 + } +} +``` + +#### 配置文件存储 + +本地调试支持本地存储、OSS、COS、七牛云存储, +参考以下示例配置存储调试。 + +```json +//下方为配置示例,如拷贝此内容切记去除注释 +{ + "storage": {//存储服务配置,如项目未使用存储服务可不配置此项 + "provider": "local",//服务商 支持local:本地存储 aliyun: 阿里云存储服务 tencent:腾讯云存储服务 qiniu:七牛云 + "dir": "file/upload", //文件上传目录 + "bucket": "",//存储桶名称,本地存储无需配置此项 + "cdnProtocol": "http://",//cdn协议 支持 http https + "cdnDomain": "127.0.0.1:7001",//cdn域名 + "cdnRootPath": "/storage/file/",//cdn根目录 + "storageSecret": "xxxxxxxxxx",//本地存储服务访问密钥 + }, } ``` -#### 重启HBuilderX +#### 运行项目 + +以上步骤完成后,运行项目即可。 + +切换云端云函数时,需部署到服务器后才可调用云端云函数。 + +### 部署 + +由于有uni_modules插件内包含uniCloud云函数等,需要进行uniCloud打包操作,将uni_modules插件内的云函数及数据库schema抽离出来。 + +在 `uniCloud-dcloud`目录右键“uniCloud软件版”-“打包uniCloud资源”,将会在`uniCloud-dcloud`服务空间目录下生成`dist`目录。 + +可以使用git/svn等版本管理工具进行管理,将代码上传至git/svn,在服务器拉取代码,在服务器上将`uniCloud-dcloud/dist`同步到对应服务空间目录下即可。 + +也可以单独对`dist`目录打包zip并上传到服务器对应的服务空间目录下解压即可。 -以上步骤完成后,需重启`HBuilderX`后方可生效。 +上传代码之后需要重新启动服务空间,在uniCloud软件版根目录执行以下命令进行重启操作 + +``` +./unicloud stop -s [服务空间ID] +./unicloud start -s [服务空间ID] +``` + +建议部署时采用分布式部署方案,即使用2台以上服务器部署可以保证服务的稳定性,在服务重启时也不会中断服务。 ## 运维指南 @@ -252,40 +387,39 @@ HBuilderX会尽快发版,支持关联DCloud服务空间。 ```conf server { - listen 80; - server_name test.pvtcloud.com; - root D:/www/test.pvtcloud.com; - location / { - try_files $uri $uri/ /index.html; - } - location ~ (/client|/http/) { - proxy_http_version 1.1; - proxy_set_header Connection "keep-alive"; - proxy_set_header X-Real-IP $clientRealIp; - proxy_set_header X-Real-PORT $remote_port; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header Host $http_host; - proxy_set_header Scheme $scheme; - proxy_set_header Server-Protocol $server_protocol; - proxy_set_header Server-Name $server_name; - proxy_set_header Server-Addr $server_addr; - proxy_set_header Server-Port $server_port; - proxy_pass http://127.0.0.1:7001; - } + listen 80; + server_name test.pvtcloud.com; + root D:/www/test.pvtcloud.com; + location / { + try_files $uri $uri/ /index.html; + } + location ~ (/client|/http/) { + proxy_http_version 1.1; + proxy_set_header Connection "keep-alive"; + proxy_set_header X-Real-IP $clientRealIp; + proxy_set_header X-Real-PORT $remote_port; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header Scheme $scheme; + proxy_set_header Server-Protocol $server_protocol; + proxy_set_header Server-Name $server_name; + proxy_set_header Server-Addr $server_addr; + proxy_set_header Server-Port $server_port; + proxy_pass http://127.0.0.1:7001; + } } //注意,上述配置中用到的$clientRealIp变量并非是内置变量,需在nginx.conf文件的http模块定义后才可使用,以下为配置示例: http { - ## Get Client Real IP - map $http_x_forwarded_for $clientRealIp { - "" $remote_addr; - ~^(?P[0-9\.]+),?.*$ $firstAddr; - } + ## Get Client Real IP + map $http_x_forwarded_for $clientRealIp { + "" $remote_addr; + ~^(?P[0-9\.]+),?.*$ $firstAddr; + } } ``` - ### 防火墙白名单配置 若你的服务器开启了防火墙功能,且需要访问如:`uniCloud软件版(联网版)`、`短信`、`一键登录`、`uni-ai`、`实人认证`、`uni-push`等在线业务,则需要将这些业务的API域名,添加到防火墙白名单中。 @@ -304,7 +438,6 @@ sudo firewall-cmd --reload ``` - #### 各业务API域名 - uniCloud软件版(联网版)及付费业务API域名 @@ -315,7 +448,6 @@ sudo firewall-cmd --reload - uni-push业务API域名 - - restapi.getui.com - ### 日志 uniCloud 私有云内置了完善的日志服务支持,日志分为启动日志与运行日志。 @@ -360,4 +492,3 @@ uniCloud 私有云内置了完善的日志服务支持,日志分为启动日 启动日志按照每次启动进行自动切割。 运行日志是按天切割,在每日`00:00`按照`.log.YYYY-MM-DD`文件名进行切割。 - -- GitLab