爱速搭介绍
爱速搭是百度智能云推出的低代码开发平台,它灵活性强,对开发者友好,在百度内部大规模使用,有超过 4w 内部页面是基于它制作的,是百度内部中台系统的核心基础设施。
它具备以下功能:
- 页面制作
- 基于 amis 页面可视化编辑,具备超过 120 种内置组件,对于大部分中后台页面可以做到无需了解前端就能制作。
- 支持自定义前端组件,可以通过代码扩充定制组件。
- 支持导出前端项目,可以运行在任意前端框架中。
- 支持页面模板,可以自定义模板,快速搭建公司内常见页面。
- 支持自定义主题,具备 1000+ 细粒度展现控制,可自定义 CSS。
- 自适应移动端布局。
- 数据模型
- 具备数据模型能力,可以直连外部数据库,做到对于简单增删改查需求无需后端。
- 支持所有数据库基础字段,并扩展了十几种高级字段类型,并支持对字段的校验和索引设置。
- 支持软删除、记录操作时间。
- 支持设置数据字段验证。
- 支持设置索引规则。
- 支持批量导入导出数据。
- 支持自动生成基于模型的增删改查页面。
- 支持一对一、多对一、一对多、多对多关联关系。
- 支持通过 SQL 的方式对数据进行处理,灵活实现各种数据操作功能。
- API 对接
- 具备 API 对接能力,可以直连外部接口。
- 支持百度云 BOS、S3、阿里云 OSS 协议的对象存储对接。
- 业务编排
- 支持可视化编辑后端逻辑,可以对多个接口进行组合。
- 支持 HTTP、SQL 方式获取数据。
- 支持并行和串行调用。
- 支持循环、分支进行流程控制。
- 支持脚本进行自定义扩展。
- 业务流程
- 权限控制,可以控制每个节点能查看和编辑哪些数据。
- 支持动态查找处理人,比如上级。
- 流程流转判断、加签、会签。
- 支持打回到上个节点或前面某个节点。
- 流程通知。
- 权限控制
- 具备基于角色的细粒度资源控制。
- 可以针对页面内组件粒度进行控制,比如某个按钮对某些用户不显示。
- 可以对某个页面创建分享链接。
- 所有操作日志,所有操作都会记录,便于后续审计。
- 多环境
- 支持多套环境,相互之间数据隔离,开发时不影响正式版本的使用。
- 支持版本管理,可以通过回滚快速还原。
- 平台升级不会影响应用已发布版本。
- 私有部署
- 支持私有部署,不限制实例数,环境只依赖 Docker、MySQL、Redis,安装简单、运维成本低。
- 支持对接 oauth 2.0,也可以支持自定义登录协议。
- 可以对接自己的组织架构。
- 支持 OpenAPI 对系统进行操作。
爱速搭目前的客户有知名的银行及互联网公司,比如「知乎」
爱速搭私有部署安装
爱速搭支持私有部署,您可以部署在自己的内网,私有部署版本具备 SaaS 版本的所有功能。
文档:私有部署安装 | 爱速搭
安装docker
sudo apt install docker docker-compose
启动docker
service docker start
看看docker的状态:
service docker status
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; >
Active: active (running) since Fri 2024-09-13 09:01:49 UTC; 1>
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 110485 (dockerd)
Tasks: 10
Memory: 25.1M
CPU: 1.855s
CGroup: /system.slice/docker.service
└─110485 /usr/bin/dockerd -H fd:// --containerd=/run/>
Sep 13 09:01:46 ub12 systemd[1]: Starting Docker Application Conta>
创建aisuda目录,并在目录里面创建两个目录
mkdir aisuda
cd aisuda/
mkdir mysql-data
mkdir redis-data
然后创建 docker-compose.yml文件:
version: '3'
services:
web:
image: registry.baidubce.com/aisuda/aisuda:2.3.0
ports:
- '8090:8085'
environment:
# 数据库用户名
ISUDA_DB_USER: root
# 数据库密码,这个密码需要和下面 mysql 镜像里的一致
ISUDA_DB_PASSWORD: 'Q39sTi0i^9'
ISUDA_DB_NAME: aisuda
ISUDA_DB_HOST: db
ISUDA_DB_PORT: 3306
# 如果数据库时区是 utc 需要开启下面这个
# ISUDA_DB_TIMEZONE: utc
# id 加密密钥,建议修改
ISUDA_HASHID_SALT: 'aisuda'
# 数据库加密密钥,建议修改 PS:长度必须为64位
ISUDA_ENCRYPT_KEY: 'B224AD82C6206D4DD0D49B3A17BD894D8EA2DC671372BA6B270D3B3AD599A45C'
# redis 地址和端口
ISUDA_REDIS_HOST: redis
ISUDA_REDIS_PORT: 6379
# redis key 前缀
# ISUDA_REDIS_PREFIX:
# redis 密码
# ISUDA_REDIS_PASSWORD:
# 是否开启 ready check 默认不开
# ISUDA_REDIS_ENABLE_READY_CHECK
# 是否使用 redis cluster
# ISUDA_REDIS_CLUSTER: 1
# 是否使用 redis sentinel
# ISUDA_REDIS_SENTINEL: 1
# 如果开启 redis cluster 或 sentinel,ISUDA_REDIS_HOST 可以填入多个地址及端口,逗号分割
# ISUDA_REDIS_HOST: 'host1:6379,host2:6379'
# 邮件 smtp 地址,用于发验证码
ISUDA_EMAIL_HOST:
# 邮件 smtp 端口,比如 25
ISUDA_EMAIL_PORT:
# 邮件用户名和密码
ISUDA_EMAIL_USER:
ISUDA_EMAIL_PASS:
# 如果是 465 之类的 ssl 端口,请取消下面的注释
# ISUDA_EMAIL_SECURE: 1
# 邮件显示的发件人地址
ISUDA_EMAIL_FROM: 'xxx@xxx.com'
# 如果服务器是 SSLv3,需要注释掉下面这个
# ISUDA_EMAIL_SSLV3: 1
# 邮件 API,如果配置就优先使用,用于没有 smtp 的场景,细节请参考这篇文档后面的介绍
# ISUDA_EMAIL_API: http://xxx.com/emailapi
# 邮件 API 的签名密钥
# ISUDA_EMAIL_API_PASSWORD:
# license(可选,如果不填则需要在安装时提供)
ISUDA_LICENSE:
# 百度统计(可选)
BAIDU_TONGJI_CODE:
# Google Analytics(可选)
GA_MEASUREMENT_ID:
# 文件存储配置(可选)
# DRIVER 支持 bos 或 s3
ISUDA_FILE_STORAGE_DRIVER:
ISUDA_FILE_STORAGE_REGION:
ISUDA_FILE_STORAGE_BUCKET:
ISUDA_FILE_STORAGE_AK:
ISUDA_FILE_STORAGE_SK:
ISUDA_FILE_STORAGE_ENDPOINT:
# s3 专有,使用路径而不是域名来访问 bucket
# ISUDA_FILE_STORAGE_S3FORCEPATHSTYLE:
# ES 操作日志 和 api 转发日志相关
# es 服务地址
# ISUDA_ES_URL: http://localhost:9200'
# es 服务帐号密码
ISUDA_ES_USERNAME:
ISUDA_ES_PASSWORD:
# 如果是集群模式按如下配置
# ISUDA_ES_CLUSTER: true
# ISUDA_ES_URL: 'http://localhost:9200,http://localhost:9201'
# 索引文件名(可选)
# ISUDA_SITE_LOG_INDEX: suda-log-{{date:YYYY-MM}}
# 是否开启站点日志记录
ISUDA_SITE_LOG_ENABLED:
# 默认 api 转发日志不存储 发送体内容,如果开启了,将会存储 json 和 普通表单数据 内容体
ISUDA_SITE_LOG_SAVE_REQUSET_PAYLOAD:
# 平台级别超级管理员邮箱(如果设置为 password 这就是必填的)
ISUDA_PLATFORM_ADMINISTRATORS: aa@aa.com,bb@bb.com
# 登录相关
# 默认的登录方式,加入配置成 oauth 表示只启用 oauth 登录方式,多个登录方式请用逗号隔开如:password,email,weixin,oauth,ldap
AUTH_ENABLED_LIST: password,email
# 普通用户默认登录密码,在开启 password 登录方式的时候有用 ( 密码配置 如有特殊字符需要加 "单引号")
ISUDA_LOGIN_DEFAULT_PASSWORD: aisuda2021
# 管理员默认密码,在开启 password 登录方式的时候有用
ISUDA_PLATFORM_ADMINISTRATOR_DEFAULT_PASSWORD: admin2021
# oauth 登录相关
# oauth 授权接口地址
ISUDA_OAUTH_AUTHORIZE_URL:
# oauth token 获取接口地址
ISUDA_OAUTH_TOKEN_URL:
# oauth clientId
ISUDA_OAUTH_CLIENT_ID:
# oauth clientSecret
ISUDA_OAUTH_CLIENT_SECRET:
# oauth scope 默认为 email
ISUDA_OAUTH_SCOPE:
# oauth 获取 用户 profile 的接口地址
ISUDA_OAUTH_INFO_URL:
# 默认为 id, 假如你的 oauth 返回的 profile 中,id 为 user_id 请填写 user_id
ISUDA_OAUTH_ID_FIELD:
# 默认为 name, 假如你的 oauth 返回的 profile 中,用户名为 user_name 请填写 user_name
ISUDA_OAUTH_NAME_FIELD:
# 邮箱地址字段,如果你的 oauth 中返回了邮箱地址,请配置,如果没有可以不配置
ISUDA_OAUTH_EMAIL_FIELD:
# 邮箱后缀,当你的 oauth 没有返回邮箱地址,同时又不想有绑定邮箱这个动作,可以配置这个比如:baidu.com,这样会自动根据用户名拼接个假邮箱地址。
ISUDA_OAUTH_EMAIL_SUFFIX:
# 默认退出是 爱速搭的退出页,如果配置了,会跳转到对应 oauth 的退出页面。
ISUDA_OAUTH_LOGOUT_URL:
# ldap 相关,请看后面的说明
ISUDA_LDAP_URL:
ISUDA_LDAP_BIND_DN:
ISUDA_LDAP_BIND_CREDENTIALS:
ISUDA_LDAP_SEARCH_BASE:
ISUDA_LDAP_SEARCH_FILTER:
ISUDA_LDAP_EMAIL_ATTRIBUTE:
ISUDA_LDAP_NAME_ATTRIBUTE:
ISUDA_LDAP_NICKNAME_ATTRIBUTE:
# 默认不开启,开启后,应用导出将剔除敏感信息,但是意味着导入的时候你还需要额外去补填这些信息
ISUDA_DISABLE_EXPORT_SENSITIVE_INFO:
# 默认不开启,开启后,应用发布的时候,用开发环境权限覆盖运行态资源权限
ISUDA_OVERWRITE_RUNTIME_ACL:
# 默认不开启,开启后,发布环境的权限通过接口配置的接口返回的权限点进行控制
ISUDA_TAKEOVER_RUNTIME_ACL:
# 开启后编辑器中所有图片上传组件都会由图片管理器接管,同时应用级、组织级、平台级均可统一管理图片资源
ISUDA_ENABLE_IMAGE_MANAGE: 'on'
# 是否是 https,爱速搭的访问地址是 https 需要增加这个配置项
# ISUDA_IS_HTTPS: true
# 下面是自定义组件所需的 npm 本地镜像
# NPM_REGISTRY: https://registry.npm.taobao.org
# NPM_SEARCH: https://www.npmjs.com/search/suggestions
db:
image: registry.baidubce.com/aisuda/mysql:8
command:
[
'mysqld',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
'--skip-character-set-client-handshake',
'--default-authentication-plugin=mysql_native_password',
'--max-allowed-packet=1073741824',
'--sort-buffer-size=512K',
'--max-connections=4096'
]
volumes:
- ./mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 'Q39sTi0i^9'
TZ: 'Asia/Shanghai'
security_opt:
- seccomp:unconfined
redis:
image: registry.baidubce.com/aisuda/redis:5
command: ['redis-server', '--appendonly', 'yes']
volumes:
- ./redis-data:/data
然后使用docker-compose up来启动
docker-compose up
报错:PermissionError
原来是需要用sudo执行:
sudo docker-compose up
启动后报错Error: Unknown database 'aisuda' 。不知道是不是内存啥的不够16G。
然后通过 docker ps
查看 mysql 所在的容器 id,使用 docker exec -it xxx
进入 MySQL 容器。
docker ps
docker exec -it xxx
总结:
现在问题卡在database报错这里。
调试
docker-compose up报错PermissionError
File "/usr/lib/python3/dist-packages/docker/api/client.py", line 221, in _retrieve_server_version
raise DockerException(
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied'))
需要用sudo
sudo docker-compose up
启动后报错Error: Unknown database 'aisuda'
web_1 | Got error, gona retry in 5 seconds.
web_1 | Error: Unknown database 'aisuda'
web_1 | [89.299s][info ][gc,start ] GC(25) Pause Young (Allocation Failure)
web_1 | [89.299s][info ][gc,task ] GC(25) Using 2 workers of 4 for evacuation
不知道是不是内存啥的不够16G。
这时候浏览器打开网页:http://192.168.0.13:8090/install
显示:
Opps 出错了
Error: Unknown database 'aisuda'
at Packet.asError (/app/node_modules/mysql2/lib/packets/packet.js:728:17)
at ClientHandshake.execute (/app/node_modules/mysql2/lib/commands/command.js:29:26)
at PoolConnection.handlePacket (/app/node_modules/mysql2/lib/connection.js:456:32)
at PacketParser.onPacket (/app/node_modules/mysql2/lib/connection.js:85:12)
at PacketParser.executeStart (/app/node_modules/mysql2/lib/packet_parser.js:75:16)
at Socket.<anonymous> (/app/node_modules/mysql2/lib/connection.js:92:25)
at Socket.emit (node:events:390:28)
at Socket.emit (node:domain:537:15)
at addChunk (node:internal/streams/readable:315:12)
at readableAddChunk (node:internal/streams/readable:289:9)
at Socket.Readable.push (node:internal/streams/readable:228:10)
at TCP.onStreamRead (node:internal/stream_base_commons:199:23)
at TCP.callbackTrampoline (node:internal/async_hooks:130:17)
明白了,可能是宿主机里的mysql数据库对aisuda docker里面的数据库造成了干扰。。。。。