云开发应用可以理解为运行在云开发环境的应用,例如一个包含前后端、数据库等能力等服务,可以通过一键部署,直接部署在云开发环境中,使用云开发底层的各项 Serverless 资源,享受弹性免运维的优势。
一个云开发应用可以拆解为三个部分,包括代码、声明式配置和环境变量信息。
下面我们会演示如何将一个开源的容器化的项目快速打造为可以一键部署的云开发应用。
Nextcloud 是一套个人云存储解决方案,内置了图片相册、日历联系人、文件管理、RSS 阅读等丰富的应用,这个应用本身是开源的,同时提供了部署的 Docker 镜像,需要搭配 MySQL 数据库,下面会演示如何实现这个应用的一键部署。
通过云开发一键部署,可以部署在用户的云开发环境中,无需关心服务器管理和运维。
https://fx-1259727701.ap-shanghai.service.tcloudbase.com/
点击下方的部署按钮来一键部署 NextCloud 应用
点击上方按钮之后会跳转腾讯云开发控制台进入快速安装部署流程。
第一步我们可以选择云开发环境(注意:这个应用我们需要选择一个 HTTP 访问路径的根路径未被占用的环境)。
第二步,可以进行网络配置、标签配置,以及关联或者创建云上的资源,比如这个应用依赖了 CFS 来实现容器的文件存储,使用了 CynosDB for MySQL ( Serverless 版本)来作为数据库依赖。
点击 完成 ,等待安装完成之后即可在控制台打开应用的访问地址来进行访问。
那么我们如何打造这样一个可以一键部署的云开发应用呢?
整体的步骤分为 3 步,主要分为开发、配置和部署验证三个环节。这篇文档会主要介绍配置和部署验证两个环节。
开发环节的部分不重点介绍,可以通过获取源码来了解具体的实现。
本项目项目的源码可以在 Github 中查看和获取:
https://github.com/TencentCloudBase-Marketplace/nextcloud
Nextcloud 官方开源仓库
https://github.com/nextcloud/server
云开发的云托管服务:使用云托管来部署应用的后端服务
CynosDB:使用 CynosDB 数据库存储数据
CFS:使用 CFS 持久化存储数据
有了项目的代码之后,如何把这个应用打造成为可以一键部署的云开发应用呢?
下面会分步骤介绍如何通过配置来打造云开发应用。
首先创建一个 cloudbaserc.json
配置文件,文件的内容如下。
{
"envId": "{{env.ENV_ID}}",
"version": "2.0",
"$schema": "https://framework-1258016615.tcloudbaseapp.com/schema/latest.json",
"framework": {
"name": "nextcloud",
"plugins": {}
}
}
envId
指定应用部署在哪个环境下,这里我们用模板变量env.ENV_ID
表示读取 ENV_ID
环境变量framework.name
是应用的英文名,只支持 A-Z a-z 0-9 - 和 _,长度 1-32 位framework.plugins
是应用用到的插件信息,这里先留空,下面我们根据资源和应用类型来填写这一步我们需要使用云托管插件,来自动化地部署容器服务到云开发的云托管上。
在 framework.plugins
下增加一个字段 server
,字段的值是一个 JSON 对象。
{
"server": {
"use": "@cloudbase/framework-plugin-container",
"inputs": {
"cpu": 0.5,
"mem": 1,
"serviceName": "nextcloud",
"servicePath": "/",
"uploadType": "image",
"containerPort": 80,
"imageInfo": {
"imageUrl": "nextcloud:20"
},
"envVariables": {
"MYSQL_HOST": "{{env.DB_IP}}:{{env.DB_PORT}}",
"MYSQL_DATABASE": "nextcloud"
},
"volumeMounts": {
"/var/www/html": "nextcloud-cfs"
}
}
}
}
server
的名字可以自定义,只起到别名的作用,下同"use": "@cloudbase/framework-plugin-container”
表示这里使用了 @cloudbase/framework-plugin-contaienr
这个云托管插件,用来部署镜像和服务到云托管上。inputs
用来设置插件接收的参数,上面的配置部分做了如下的事情:nextcloud:20
envVariables
部分,我们指定了要为容器运行时注入的环境变量,MYSQL_HOST
是 NextCloud 这个程序支持的一个环境变量,可以用来配置应用的数据库连接信息,我们使用{{env.DB_IP}}:{{env.DB_PORT}}
作为模板变量来生成连接地址,具体的 IP 和端口会在构建时根据关联的数据库真实的 IP 和端口来填充。volumeMounts
部分,我们声明了将在容器内的 "/var/www/html” 路径上挂载一个名称为 "nextcloud-cfs” 的 CFS 持久化存储的实例。在部署应用时,还可能需要用户来输入一些自定义的参数,或者配置像上文提到的云上外部资源。
这些都可以在framework.requirement
中进行配置
字段 | 描述 | 类型 |
---|---|---|
addons |
应用部署过程中用到的外部云上资源,包括 cfs 、cynosdb 、redis 等 | AddonsConfig |
environment |
应用在构建时和运行时的环境变量配置声明,默认注入计算环境中(云函数、云应用),也会在云端构建时作为构建部署的环境变量,可以在 cloudbaserc.json 中通过 env.ENV_NAME 引用 |
EnvironmentConfig |
接下来我们在 framework.requirement
中添加如下 JSON 配置。
{
"requirement": {
"addons": [
{
"type": "CFS",
"name": "nextcloud-cfs"
},
{
"type": "CynosDB",
"name": "nextcloud",
"envMap": {
"IP": "DB_IP",
"PORT": "DB_PORT",
"USERNAME": "MYSQL_USER",
"PASSWORD": "MYSQL_PASSWORD"
}
}
]
}
}
addons
里面我们可以声明依赖的云上资源。CFS
,名称为 nextcloud-cfs
,这个名称和上面云托管插件里面挂载的需要对应起来。CynosDB
,这里只需要关注 envMap
的配置,在数据库实例创建成功之后,会把数据库的 IP 、PORT 、USERNAME 和 PASSWORD 写入应用的全局环境变量中,这里我们可以把这些连接信息映射为我们需要的环境变量名,比如密码信息我们就配置了可以映射为 MYSQL_PASSWORD
, 在容器中可以直接获取到这个环境变量。接下里我们就可以上传代码到 Git,来生成一个一键部署按钮了。首先打开一键部署按钮生成地址:
https://docs.cloudbase.net/framework/deploy-button.html
在页面当中输入项目的 Git 地址,配置文件所在目录以及分支信息,就可以自动生成下面的部署按钮代码片段。
这里会生成部署按钮的几种格式的代码片段,可以在不同的场景下嵌入部署按钮来让用户部署你的应用
生成完部署按钮之后,可以按照云开发应用模板来编写 README 文档,提交应用到云开发应用中心。
应用模板地址
https://github.com/TencentCloudBase-Marketplace/app-template
在这篇文章中,我们了解了什么是云开发应用,以开源项目 Nextcloud 为例,介绍了如何将开源的容器化的项目,快速打造为可以一键部署的云开发应用。
通过实战,我们也了解了云开发以及 CloudBase Framework 的使用。只需要完成开发、配置以及部署验证,就可以快速将应用变为可以快速分发的程序,用户无需手动搭建环境和配置,即可自动化部署应用。
1
dorothyREN 2021-01-19 14:42:05 +08:00
0 回复惨案
|
2
676529483 2021-01-19 15:51:46 +08:00
只支持 Nextcloud 吗?是否有部署到其他云呢?
|
3
binggg OP @dorothyREN 感谢消灭
|
4
binggg OP @676529483 Nextcloud 只是举了个一个例子🌰,哈哈哈
其他 Docker 应用也是可以的,比如 WordPress 、DiscuzQ 都已经支持了 部署到其他云暂时还不支持,需要适配其他云的 API |
5
wq2016 2021-01-21 09:45:28 +08:00
低代码的,好像复杂一点。。。
|
6
huyujievip 2021-01-21 10:39:46 +08:00 via Android
支持,学习了
|
8
binggg OP @huyujievip 感谢,近期正在搞应用征集,还可以报名搞件 T 恤
|