单独导出-本地+
私有部署功能概览 更新时间:2023-10-12 12:46:12功能概述
iVX平台提供应用私有导出部署的功能,支持将应用代码导出,部署至自己的服务器。我们可以选择仅导出前端代码,或前后台代码一起导出。应用导出之后,我们可以根据自身的实际需求,将应用部署至一个单独的服务器,或分布式部署至多个自动拓展的服务器或容器(docker),也可以选择性的接入第三方云服务,包括CDN,对象存储(OSS/S3),云数据库(RDS)等等。
无论是纯前端包还是前后端一体包,一旦导出部署之后,应用就完全脱离iVX平台,无论是数据库还是素材资源都和iVX平台无关了。因此,导出部署的应用不会在iVX产生任何服务器计算或流量费用,但需要自行运维自己的服务器。
应用部署架构
一个ivx的应用,在运行时,依赖以下后台模块:
我们来依次介绍一下:
1、网络服务:即反向代理等网络服务程序,当私有部署时,可以使用自行部署的nginx、apache程序,或使用云服务平台的负载均衡服务;
2、计算单元:核心的ivx后台计算程序,该程序的代码包,即我们在应用导出时下载的基座文件(详见下一节),该计算程序,可以部署在一个独立的服务器中,或部署以弹性伸缩的方式部署在多个服务器上,也可以使用容器服务来运行;
3、对象存储:即文件存储服务,可以使用服务器本地的文件存储,也可以使用云平台提供的对象存储服务,比如阿里云的oss,腾讯的cos,亚马逊的s3;
4、MySQL:MySQL关系型数据库,可以是本地安装的Mysql程序,也可以是云平台提供的RDS服务;
5、Redis:Redis缓存数据库,和Mysql一样,支持本地安装与云端资源。
以上的服务模块,是iVX应用运行必备的模块,但iVX并不限制以上服务模块的具体部署方法,我们可以根据自己的实际需求,来选择部署架构。
一个最低成本的部署架构,是将所有的5个模块,全部部署在一台单机服务器上,详见之后的“单机部署”与“反向代理”章节;
如果我们需要进行分布式部署,即支持计算单元的弹性伸缩,则必须将【1】网络服务,与【3】【4】【5】文件与数据库服务进行独立部署,确保多个计算单元访问到的数据服务是统一的。在之后的章节中,我们将以阿里云为例,详细介绍如何将ivx的应用接入第三方的对象存储、负载均衡、Mysql与Redis数据库服务。
应用包结构
通过应用导出界面,我们可以导出当前iVX应用的运行代码:
两种导出包的结构如下:
1、前后端一体包
前后端部署包用于应用的整体打包部署,可以将完整的应用“剥离”出来,部署至自己的服务器。前后端一体包,进一步包含两个部分:
- 基座程序文件,是后台核心系统代码,支持linux、windows、mac以及linux docker镜像格式,根据不同的部署环境,我们需要选择一个对应的基座文件。基座程序运行起来之后,可以支持多个应用的运行,并支持应用版本的无缝更新。因此,除非有重大的系统更新,我们通常不需要更新基座程序,下载一次即可;
- 应用代码包,即当前应用的代码,包含前端与后台部分,应用代码包,不区分操作系统,只要下载至指定的地址(详见后续章节),基座程序就会自动解析,将应用运行起来。当我们的应用更新之后,可以再次下载应用包至指定地址,基座程序会在不中断服务的前提下更新应用。
2、前端HTML包
前端HTML包,是仅将应用的前端部分导出,导出后,我们可以直接在本地电脑通过浏览器打开应用,或者结合自行搭建的网页服务,把前端部分部署至云端服务器。同时,iVX还支持导出facebook、google、穿山甲格式的前端广告,可以直接将导出包上传至相应的广告平台。
前端包的格式是一个包含所有前端代码文件与资源文件的zip包,通过index.html文件可以直接在本地打开应用。这里是一个示例文件包。
关于源代码导出与二次开发
目前iVX导出的应用包,是编译好的部署包,而不是源代码包。这个包可以直接部署运行,但不能通过修改导出源代码的方式进行二次开发。之所以不支持基于源代码的二次开发,是由于源代码一旦修改之后,就无法再次导入进iVX平台进行编辑了,为了保证应用开发流程的一致性,我们强烈建议在iVX平台上进行应用的修改与迭代。
通过自定义函数、自定义组件、API/RPC接口等工具,iVX支持良好的开放性应用开发,开发者可以直接在平台上接入第三方资源库,或者使用代码模式开发,而不需要通过源代码修改的方式进行二次开发。
服务器
一键部署教程 更新时间:2024-07-02 12:31:12相关基础概念请参考文档对应部分内容:https://www.ivx.cn/docview?page=r40136
目标与准备
这一章中,我们将介绍如何配置安装一个自有的服务器;且用配置好的服务器在编辑器实现案例的一键部署,成功后可通过ip+端口或用配置好的域名对案例进行访问;可在服务器部署应用管理中实现对已部署案例的移除。在开始部署之前,我们需要拥有一个服务器的登录权限,且由于我们需要完成安装软件,配置服务操作,如果非root的话,用户需要有不填密码sudo的权限。
在本例中,我们将使用一个腾讯云的服务器(rsa key密钥登录方式安装)和一个阿里云的服务器(root账号密码登录方式安装),操作系统为Linux。另外,windows服务器,不在本教程的覆盖范围。
服务器配置
1、新增服务器,同一IP不可重复创建多个服务器,服务器提供方仅为一个记录信息,不会影响后续部署规则。
2、服务器安装及初始化。创建成功可以从弹窗进行初始化,也可从列表中选中对应服务器进行“初始化配置”。
①、安装客户端程序(两种方式:root账号密码登录、rsa key登录)
端口域名配置:服务器两种安装方式都需要进行端口与域名配置。有需要https访问(可用配置好的域名对部署案例进行访问)和不需要https访问(ip+端口访问部署案例)两种方式。https访问需要提前解析好域名,参考“配置域名”文档:https://www.ivx.cn/docview?page=dns-https#
root账号密码:服务器登录方式为账号密码登录,输入框填入对应的账号密码信息。
rsa key:服务器为密钥方式登录,“校验文件”直接填入密钥(.pem文件)的文本内容。
信息完善开始安装,客户端安装成功之后进入“配置服务器资源”界面。
②、配置服务器资源(关系型数据库、redis、文件存储、访问控制)。
关系型数据库:提供两种安装方式,若没有数据库,自动安装为在本地服务器安装默认数据库;有私有数据库则按要求填写对应信息。
redis:没有redis,自动安装为在本地服务器安装默认redis;有redis则按要求填写对应信息,密码可为空
文件存储:不使用第三方存储和第三方存储两种方式,第三方存储需要按要求填写对应信息。
第三方对象存储弹窗字段对应信息参考如下。更多对象存储详情介绍请参考文档:https://www.ivx.cn/docview?page=oss#%E7%9B%AE%E6%A0%87%E4%B8%8E%E5%87%86%E5%A4%87
访问控制:有初始默认值,也可自己重新填写。
服务器配置完成之后,即可点击下一步。
等待界面提示初始化配置成功,就可在编辑器对案例进行一键部署。
3、案例部署
编辑器中打开需要部署的案例,按如下操作进行部署。部署成功之后,点击部署后应用地址即可成功预览案例。
需要https的访问路径如下,可以带域名访问:
不需要https访问的部署案例需要用ip进行访问:
###
### 部署应用的移除
在服务器列表中,找到案例部署所用的服务器,点击底部“部署应用管理”,进入应用列表页,找到需要移除的应用进行移除操作。
部署应用全部移除后,私有服务器可以删除。
部署失败常见原因
1、 安装失败 超时
大概率是带宽不够,导致初始化下载mysql时候耗时太久超时了,可以调整服务器的网络宽带 调到临时50Mbps以上。
2、 mysql:not config
提示的报错信息为数据库没有配置,请检查数据库配置
3、80端口被占用
80端口被占用,可以修改HTTP端口为其他端口,但需要注意要安全组中开放对应修改后的端口,http才能成功访问。
4、ERROR! MySQL server PID file could not be found!
bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
有些服务器需要先手动安装数据库,之后再进行一键部署流程。
1启动
单机部署一:启动ivx程序 更新时间:2023-04-14 12:17:36目标与准备
在这一章中,我们将把一个完整的ivx应用(包括前端与后台部分)部署至一个自有的服务器,并可以通过ip+端口的方法来访问到应用。在开始部署之前,我们需要拥有一个服务器的登录权限,且由于我们需要完成安装软件,配置服务操作,我们需要sudo权限。
在本章的例子中,我们将使用一个阿里云的ESC云服务器,操作系统为linux centOS。关于服务器的选择,大家使用自有机房内的服务器,也可以使用腾讯云,华为云等公有云上的云服务器,大多数公有云服务器的配置方法都是类似的。
关于操作系统的选择,我们优先建议使用centOS,这也是当前主流商用服务器最常用的linux系统。但其他linux的操作系统,比如debian或者ubuntu,操作流程也基本一致,但部分教程中的指令,可能会有略微的不同,具体可以在网上查一下。另外,windows服务器,不在本系列教程的主体覆盖范围内,请参考本系列“番外篇”windows服务器的部署。
安装mysql和redis
mysql和redis是ivx应用运行所依赖的两个底层数据库,在大规模商业应用中,我们强烈建议使用云服务托管的mysql和redis服务,比如阿里云的RDS和云数据库redis版,具体的接入方法,我们在后面的章节中会详细介绍。在这里,考虑到便捷性和部署成本,我们使用在本地服务器上安装的mysql和redis。注意,mysql也可以用mariaDB来代替,两者基本是等价的。
两个软件的最低版本为:
mysql:5.7.9
redis: 2.8
在centos中,直接使用yum指令安装两个软件即可,如有问题,可以网上搜一下详细步骤。
参考:https://www.yuque.com/docs/share/c7c348a9-6d88-4924-8f60-bc2ae49b8eb3(CentOS7 安装mysql)
https://www.yuque.com/docs/share/d850a2ef-689d-4203-bede-749ba4275316(CENTOS7下安装REDIS)
创建目录,并上传程序文件
- ssh连接至服务器
在终端中输入并执行以下命令链接Linux服务器
ssh
hostname or IP address 为您的 Linux 实例公网 IP 或自定义域名。
如果您的本地电脑为 Mac OS 系统,需先打开系统自带的终端(Terminal),再执行命令。
如果您的本地电脑为 Linux 系统,可直接执行命令。
如果您的本地电脑为 Windows 10 或 Windows Server 2019 系统,需先打开命令提示符(CMD),再执行命令。
输入已获取的密码,按 Enter,即可完成登录。
登陆成功后我们可以发现终端的前缀路径由桌面改成了云服务器的名称
我们可以输入以下指定来查看当前路径下的文件
ls
由于演示的是一个全新的服务器,故在该路径下目前没有任何文件。
Linux是报忧不报喜的,所以只要没有报错,那么指令就是被正确的执行了的。
- 新建一个文件夹
mkdir testA
- 下载基座与一个应用文件
需确保下载好的这俩个包所在的路径无中文,接下来我们会将下载好的这俩个包上传到服务器上。
- 使用scp,将两个文件上传至刚刚新建的文件夹
scp
- 服务器窗口,进入新建的文件夹
cd testA/
再输入ls,查看该路径下的文件,可以发现基座部署包和应用部署包都已经成功上传了。
- 将ivxbase设置为可执行文件
chmod +x ivxbase
再使用ls查看时,可以发现ivxbase变成了绿色,说明成功了
初始化ivxbase
- 运行ivxbase,
./ivxbase
+ 开始填写配置项,注意,这些配置项会记录在config文件中,因此如果填错了也不用紧张,可以之后去改配置文件 + 填写端口,注意,由于之后要配置nginx或负载均衡,不要占用掉80端口,使用一个其他的自定义端口,比如9966;
- 填写redis地址和用户,使用单机部署的话,使用本地安装好的redis即可,全部使用默认选项,Enter即可
- 填写mysql地址、用户和密码,使用单机部署的话,使用本地安装好的mysql/mariadb, 需正确填写用户名和密码,库,可使用默认的h5work,也可自行指定一个,任意填一个方便记忆的英文名称即可
注:本次演示使用的是阿里云的RDS数据库,若使用本地安装的mysql,address处默认即可。
- 运行之后后,命令行中会打印出应用路径,说明已经部署成功,可以用ip+端口的方式来访问案例了,注意当我们自定义路径之后,应用导出时,会保留自定义的路径
我们通过IP+端口+路径(导入成功后path:后的就是路径)的方法就可以访问我们的案例了
http://39.104.21.197:9966/play/n11fB3WO
我们可以在终端点击ctrl+c停止当前进程来停止案例运行
2运行
单机部署二:保持程序在后台运行 更新时间:2022-04-19 19:54:29上篇中的部署方法,在关闭终端窗口之后,程序便无法运行了,我们在这里提供两种方法来解决这个问题。
一、简易方法:screen
screen是一个可以同时开启并管理多个终端窗口的程序,我们可以用screen来保证运行ivxbase程序的程序一直在后台运行。
先使用以下命令查看是否已安装screen
rpm -qa|grep screen
如图,流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以自行安装。
安装screen,可使用以下命令安装
yum install screen
新建screen会话
安装完成后,直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字,实践上推荐为每个screen会话取一个名字,方便分辨:
screen -S
运行成功后,我们就来到了这个会话中
在这里我们使用刚刚讲过的方法运行ivxbase
此时我们关闭终端窗口,我们可以发现,案例还是可以正常访问的。
重新打开终端,登陆服务器
我们可以使用以下命令列出当前所有的会话
screen -ls
我们可以使用以下命令回到yourname这个会话
screen -r
screen -d
此时会话中已无程序运行,但会话仍然存在,我们可以使用screen -ls查看
使用以下命令即可彻底关闭会话
screen -S
关于screen的拓展阅读:https://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html
二、专业方法:service
相比screen方法,service是更专业的方法,后期维护也会相对简单。
首先切换至配置文件目录:cd /etc/systemd/system
创建一个配置文件:sudo vim ivxtest.service
ivxtest是文件名,可自行指定一个,任意填一个方便记忆的英文名称即可,我们会进入到一个全新的vim编辑界面,但是鼠标和输入暂时都是没有用的,我们在键盘中输入i,发现终端左下角出现了一个INSERT标记,此时我们可以使用键盘输入和修改内容了;
将以下内容填入配置文件中(橙色为需替换处,且红色//注释在填写时请删除)
[Unit]
Description=Ivx test // 服务说明
After=network.target redis.service mariadb.service// 如果使用非本机的redis mysql/maria,只填After=network.target
[Service]
Type=simple
User=celveta// 当前用户(请删除本行//以及//后内容)
Group=celveta// 当前用户组(请删除/本行/以及//后内容)
Restart=on-failure
RestartSec=10
WorkingDirectory=/home/celveta/ivxtest// 应用目录,即ivxbase程序所在目录
ExecStart=/home/celveta/ivxtest/ivxbase // 应用路径,ivxbase程序的完整路径
[Install]
WantedBy=multi-user.target
然后点击Esc退出INSERT模式,紧接着在英文输入法下,输入:wq,输入的内容会在终端的左下角显示,点击Enter,即完成了修改和保存。
配置文件创建完成之后,reload配置:sudo systemctl daemon-reload
启动服务:sudo systemctl start ivxtest
将服务设为开机自启动:sudo systemctl enable ivxtest
查看日志:sudo journalctl -u ivxtest -f
3更新
单机部署三:应用更新与多应用部署 更新时间:2023-04-14 12:17:51应用更新
应用代码,重新导出应用包上传至ivxbase所在目录下即可
config文件中,有个loadPackage—period选项
这个选项,是ivxbase检测更新的时长,默认是1s,如果应用文件是放在本机,则1s没有问题,但如果是放在oss等第三方的文件存储服务,则建议把这个时长先调整为很长,比如99999,当需要更新应用时,才调低,这样,可以降低应用程序访问oss的频率,减少网络费用
建议仅更新代码,不要选择更新数据,否则对于运行中的应用,选择覆盖数据,会使用当前应用上中的预览版数据,覆盖掉私有部署数据库中当前的数据
多应用部署
将新的案例导出包上传至服务器ivxbase所在的目录下,在我们第一次运行过ivxbase后,会在同级目录下生成一个config.json文件,我们可以直接去修改配置信息;
在该目录下输入以下指令以开启vim模式修改config文件
vim config.json
我们会进入到vim编辑模式,我们在nids数组中添加新的案例nid后保存并退出vim编辑器。
ivxbase程序正在运行的话,刚刚上传的zip文件就会自动消失,新的案例部署成功。
组应用数据库与账号数据库的引用关系将保留,比如,a应用和b应用,都使用了一个账号数据库,则导出之后,两个应用依然将共享一个账号数据库
微服务暂时不支持私有部署