1. 软件安装要求


SMARTS容器镜像是Docker容器镜像格式。容器镜像发布在Docker Hub上.

支持的操作系统平台是:

Ubuntu amd64


2. 容器部署

2.1镜像类别

SMARTS使用的基础镜像是标准的Microsoft .NET Core Runtime images for Ubuntu.

SMARTS Toronto 发布

· Ubuntu AMD64 Tags: toronto-ubuntu-rc1


2.2容器
如果要从1.x容器迁移到2.x容器,请确保使用的是最新的SDK,以便利用其最新的功能。迁移要进行数据迁移,方法从1.x导出数据,然后将数据导入到2.x容器中。


2.3如何使用镜像


2.3.1启动一个SMARTS服务实例

实例需要指定一个配置值,可以使用Docker环境变量文件来提供这个值。例如创建一个名字叫smarts.env.settings的文件,文件包含如下内容:


SL_INIT
=<Your Init Configuration String>

使用docker run来运行容器


docker run -d -p 443:443 --mount source=/your/host/data,target=/var/opt/sl/data --env-file smarts.env.settings --name "smarts-instance" sparklinglogic/smarts:toronto-ubuntu-rc1

2.3.2配置

可以通过配置各种参数自定义SMARTS服务器容器实例。每个参数可以通过以下任一一种方式提供:

· 配置文件

· 环境变量

· Docker安全设置

· Docker配置


2.3.2.1. 参数


· init(必须)

init配置参数提供了license,该配置是激活SMARTS软件所需要的。

· instance_type(可选,默认为:Primary)

容器实例的类型需要配置,有以下几种类型

· Primary

· Replica

· OnDemand

· PrimaryPrimary

Primary: 是默认实例类型,由本地存储库和所有管理功能组成。

Replica: 副本实例有本地存储库,该存储库是主实例的一个副本拷贝。

OnDemand: OnDemand实例没有本地仓库,它使用的主或者从实例的仓库

PrimaryPrimary: 主主实例将用于于其他主实例之间进行双向复制。如果该实例是位于负载均衡后面的话,使用的时候要特别小心,在使用决策管理功能的时候需要负载均衡开启session的会话保持机制。


· encryption_key(可选,默认没有加密)

可以提供一个加密密钥来启用存储库的加密功能。密钥长度要求是256位并且是加密安全的。对密钥进行base64编码,然后进行使用。

Replica实例的配置参数

· primary_host(必填项)

可以是主节点或其他从节点实例,用于从该节点进行复制。

· primary_host_user(可选项,默认为TenantAdmin)

SMARTS存储库用户,可以在主节点自动注册

· primary_host_password(必填项)

SMARTS存储库密码,可以在主节点自动注册

· primary_host_workspace(可选项)

SMARTS存储库用户的工作区,可以在主节点进行认证

· replica_host(可选项)

默认情况下,副本将使用副本的主机名/容器ID向主实例注册自己。设置此参数,设置值将覆盖默认设置。

· register_replication_retry(可选项)

默认情况下,向主实例注册自己时,副本实例将尝试5次。如果复制副本的dns注册需要更多时间,则可以增加或者减小该值。

· replication_sync_wait(可选项)

等待复制同步完成的时间(秒)


注意:PrimaryPrimary实例需要Replica参数,因为它既是副本又是主实例

OnDemand实例的配置参数

· repository_host(必填项)

值为容器实例,既可以是主节点,也可以是副本节点,OnDemand实例会使用配置实例的存储库。

· disable_ui(可选项,只用于onDemand实例)

禁用OnDemand实例的web的用户界面,只允许决策服务请求。(只有通过environment setting时有效)

PrimaryPrimary实例的配置参数

对于PrimaryPrimary实例,所有主节点和副本节点的配置参数都是可配置的。

2.3.2.2. 环境变量(Environment Variables)

可以通过环境变量来配置实例,在上面列出的配置选项前面加上SL前缀。例如-e SL_INIT=“<your configuration string>”

2.3.2.3. Docker安全设置/配置

有的时候通过环境变量传递敏感信息是不安全的,我们可以将_FILE附加到前面列出的参数中,初始化脚本可以在容器中去加载这些文件,读取相关变量参数。


$ docker run --name my-smarts -e SL_INIT_FILE="/run/secrets/" -d sparklinglogic/smarts:toronto-ubuntu-rc1


Docker加密通常位于/run/Secrets/<secret_name>中,Docker配置通常安装在/<config name>。

2.3.2.4. 配置文件

可以在json配置文件中设置所有配置项。前面列出的每个参数都可以在配置文件中进行设置。例如:


{
 "init": "<your configuration string>"
}

使用SL_CONFIG_FILE环境变量,可以指定配置文件的位置。

2.3.2.5. SSL安全认证

默认情况下,镜像使用自签名证书。证书位于/var/opt/sl/config目录下。您可以通过以下机制之一配置自己的证书:


2.3.2.5.1. 挂载卷

可以挂载一个卷到/var/opt/sl/config下,然后在这个卷中提供证书。这个挂载必须包含如下内容:

· smarts.cert.pem

· smarts.cert.key


2.3.2.5.2. 配置文件

创建你自己的SSl配置文件,然后把文件拷贝到/opt/sl/config/ssl.conf目录下。

默认的SSL配置文件包含如下的设置:


ssl_certificate    /var/opt/sl/config/smarts.cert.pem;ssl_certificate_key  /var/opt/sl/config/smarts.cert.key;


可以指定任何目录。例如,该目录可以是通过Docker Secrets创建的一个文件,可以安全地将证书添加到容器中。

3. 其他信息


3.1 健康检查

容器镜像运行时会提供健康检查。运行健康检查会对SMARTS服务可用性进行检查。


HEALTHCHECK --interval=60s --timeout=30s --start-period=50s --retries=3 CMD ["/opt/sl/bin/sladmin", "service", "--health", "--liveness"]


高可用性部署,同时配置SMARTS决策服务运行状况检查。可以自动启动由部署管理器管理的所有决策服务。


HEALTHCHECK --interval=60s --timeout=30s --start-period=50s --retries=3 CMD ["/opt/sl/bin/sladmin", "service", "--health", "--liveness", "--deployment", "--appId "]

3.2 入口点(Entrypoint)

镜像可以定义如下的entrypoint:


ENTRYPOINT ["/usr/bin/supervisord", "--nodaemon", "--configuration", "/opt/sl/config/supervisord.conf"]


supervisord配置信息将启动和监视所需的服务,并重定向日志输出。


3.3 暴露端口(Expose)

这个镜像会暴露80和443端口

3.4卷(Volumes)

下面是卷的定义


VOLUME `/var/opt/sl/data`


这个卷可以用于所有的存储库或者数据库文件

当提供了加密密钥时,存储库文件将被加密。也可以将卷放在宿主环境的加密磁盘上。

支持NTFS、ext4文件系统和其他非NFS卷的挂载。

4.管理/诊断


SMARTS提供了几个脚本可以帮助管理容器。使用如下命令执行这些脚本:


docker exec <container id> <command> <arguments>

· 导入/导出存储库内容


The sladmin repository --export [--outDir ]


该命令能够导出本地存储仓库内容到指定文件


sladmin repository --import


该命令可以将指定文件导入到本地存储仓库。导入文件需要通过卷挂载或docker cp 命令拷贝到容器中,这样容器才能够读取到。

· 执行 信息/控制


sladmin service --status


该命令可以查看指定服务的执行状态。


sladmin service --restart


该命令可以重启指定服务。


· 仓库状态


sladmin repository --status

该命令可以查看存储库的状态


sladmin repository --databaseName  --resetIndex

该命令重置或重建索引。重置索引命令并不常用,只有在存储库状态显示严重问题时在使用该命令。

4.1 Linux限制设置

Linux安全限制可能会降低存储库的性能,而对于加密的数据库,即使有很多的物理资源,也有可能会影响其正常工作。

· Soft core unlimited

· Hard core unlimited

· Soft nofile 131070

· Hard nofile 131070

· Soft nproc 131070

· Hard nproc 131070

对于存储仓库加密

· Soft memlock 1000

· Hard memlock 1000

5.相关资源

其他应用类型可以参考下面的资源信息:

· microsoft/aspnetcore for ASP.NET Core applications.

· microsoft/dotnet for .NET Core images.


6 许可证(License)

要使用该镜像,你需要签订书面合同,并且拥有一个有效的SMARTS License。

你必须还要遵守以下许可协议:

.NET Core license

6.1 License激活

根据许可协议,实例可能需要额外的License激活。实例运行后,可以使用以下命令创建代理激活请求文件


sladmin activation --request --licenseKey

在收到一个代理激活响应文件后,可以使用以下命令来激活实例。


sladmin activation --proxyActivate --response

可以通过以下命令查看license的激活状态:


sladmin activation --status

7.扩展容器

容器有许多配置选项和参数,可以满足开箱即用的各种部署需求。请检查配置选项可是否满足你的需求。如果您有特殊的需求,也可以使用该容器镜像作为扩展的基础映像。以下文档提供了一些示例。

7.1 IFrame集成扩展

iframe通常被认为是一种安全风险。默认情况下,web应用程序不允许使用iFrames。这样可以保证外部应用不能将自己的程序嵌入到Iframe中,并从中窃取用户敏感信息。如果您的公司允许在web应用程序中使用iFrame,并且你也完全了解了其中的安全风险,并已采取适当措施保护用户不受使用iFrame带来的安全隐患,则可以将容器配置为允许在iFrame内使用。这由以下两个环境变量控制。


· ASPNETCORE_SAMESITE_MODE

· ASPNETCORE_SUPPRESS_X_FRAME_OPTIONS


除了变量之外,还必须更改安全策略配置/opt/sl/config/csp.conf 修改为X-Frame-Options的策略。


iFrame扩展的Dockerfile内容如下:


FROM sparklinglogic/smarts:toronto-ubuntu
ENV ASPNETCORE_SAMESITE_MODE none
ENV ASPNETCORE_SUPPRESS_X_FRAME_OPTIONS true
# Update the content security policy, to allow iframe
RUN sed -i 's/X-Frame-Options DENY/X-Frame-Options \"\"/' /opt/sl/config/csp.conf

8 FAQ


1.可以在哪些平台运行SMARTS实例

2.x版本容器镜像实例可运行在Ubuntu系统。在不久的将来,2.x版本镜像也将用于Nano服务器。基于Window的基础镜像只能使用1.x的版本。

2.一个Replica实例和一个OnDeamnd实例之间有什么差别

这两种实例类型都能够横向扩展SMARTS服务。两者之间的主要区别在于数据的存储位置。Replica实例有自己的本地存储库。优点是可以提供更快的本地数据访问,实例在主实例发生故障时,可以独立继续运行。缺点是Replica实例启动速度很慢,因为它在运行之前会从主实例复制所有数据。OnDemand实例启动非常快,非常适合处理峰值负载。OnDemand实例依赖主实例的运行才能访问数据。通常在高可用性配置中,会配置部署管理器,它将预加载和缓存决策服务。这样只要其缓存是由部署管理器启动,即使主实例关闭,OnDemand实例仍然可以处理决策调用请求。

3. Replica实例和PrimaryPrimary实例之间有什么不同

Replica实例单向复制主实例,而PrimaryPrimay实例是进行的双向复制。Replica实例通常用于从开发环境的主实例中同步数据到生产环境。PrimaryPrimary实例适合用于热备份方案或地理位置分散的环境。这种实例并不常用,需要有更多的技术知识来使用它们。需要注意的是,SMARTS决策管理服务需要会话相关性。这意味着如果在负载均衡器后面配置的是primaryprimary实例,你需要正确配置,开启会话保持特性,服务才能正常工作。

4.可以使用PrimaryPrimary实例创建群集存储库吗?

不能。在primaryprimary实例中,实例之间存在双向复制。如果您有多个实例,那么所有primaryprimary实例都需要向其他所有的实例进行交互,它们不会像真正的集群环境那样直接相互复制信息。一般的集群环境通常有专门的算法来避免重复复制和最短路径。

不要使用他们作为完整的集群,决策管理通常并不需要它。此实例类型主要用于故障切换和地理位置分散的场景

容器镜像2.x


产品
解决方案
学习
上海杨浦区昆明路739号文通大厦9F