暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【译】Oracle REST 数据服务 (ORDS):独立模式(ORDS 版本 22.1 及更高版本)

原创 剩余价值 2022-05-10
3166

原文作者:(作者未标注)

原文链接:https://oracle-base.com/articles/misc/oracle-rest-data-services-ords-standalone-mode-22-onward


这些说明适用于 ORDS 22.1 版以后。如果您想使用 ORDS 22.1 之前的版本,请使用此处的说明。

Oracle 支持使用内置 Jetty Web 服务器以独立模式运行的 Oracle REST 数据服务 (ORDS),因此无需担心安装 Tomcat 或 WebLogic,除非您有令人信服的理由。删除这个额外的层意味着要学习的层减少了一层,要修补的层也减少了一层。

相关文章。

安装

无论使用何种应用服务器,ORDS 安装过程都是相似的,因此您应该按照此处描述的安装

在本文中引用路径时,我们将使用以下环境变量。请注意,我们正在将ORDS_HOME/bin目录添加到我们的PATH中,因此我们不必在每次使用ords命令时都明确说明路径。

导出 JAVA_HOME=/u01/java/latest
导出 ORDS_HOME=/u01/ords
导出 ORDS_CONFIG=/u01/config/ords
导出 PATH=${ORDS_HOME}/bin:${PATH}

设置ORDS_CONFIG环境变量意味着我们不需要--config在下面的命令中显式使用参数ords,但我们仍然会包含它。

在独立模式下启动/停止 ORDS

默认的Java堆大小会导致失败,所以我们需要使用_JAVA_OPTIONS环境变量来设置堆大小。然后我们可以使用该serve命令以独立模式启动 ORDS。

导出_JAVA_OPTIONS="-Xms1126M -Xmx1126M"

ords --config ${ORDS_CONFIG} 服务

现在可以从以下 URL 获得资源,并根据需要调整您的主机名。

http://localhost:8080/ords/

独立模式将捕获控制台并将所有日志信息推送到它。我们可以使用 CTRL+C 停止 ORDS。

对于生产部署,我们应该将 ORDS 作为后台进程启动并将输出推送到日志文件。例如,我们可以创建一个名为“~/scripts/start_ords.sh”的文件,其内容如下。请记住根据需要调整路径。

#!/bin/bash
导出 PATH=/usr/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:$PATH
导出 JAVA_HOME=/u01/java/latest
导出 ORDS_HOME=/u01/ords
导出 ORDS_CONFIG=/u01/config/ords
LOGFILE=/home/oracle/scripts/logs/ords-`date +"%Y""%m""%d"`.log
导出_JAVA_OPTIONS="-Xms1126M -Xmx1126M"
nohup ${ORDS_HOME}/bin/ords --config ${ORDS_CONFIG} 服务 >> $LOGFILE 2>&1 &
echo "查看日志文件:tail -f $LOGFILE"

我们可以通过杀死后台进程来杀死 ORDS。我们创建一个名为“~/scripts/stop_ords.sh”的脚本,其内容如下。

#!/bin/bash
导出 PATH=/usr/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:$PATH
杀死`ps -ef | grep [o]rds.war | awk '{打印 $2}'`

我们创建日志目录并使脚本可执行。

mkdir -p ~/脚本/日志
chmod u+x ~/scripts/*.sh

然后,我们可以使用脚本轻松停止和启动 ORDS。

~/scripts/stop_ords.sh
~/scripts/start_ords.sh

自动 SSL (HTTPS)

默认情况下,ORDS 在端口 8080 上使用 HTTP。我们可以使用--port参数更改端口。我们可以通过添加参数使 ORDS 使用 HTTPS --secure,这会将端口默认为 8443,但我们可以使用--port参数来更改它。在此示例中,我们将端口显式设置为默认 HTTPS 值。

导出_JAVA_OPTIONS="-Xms1126M -Xmx1126M"

ords --config ${ORDS_CONFIG} 服务 --secure --port 8443

如果您未指定有效的证书和密钥,ORDS 将自动创建用于 SSL 的自签名证书。证书和密钥存储在“$ORDS_CONFIG/global/standalone”目录中。现在可以从以下 URL 获得资源,并根据需要调整您的主机名。

https://localhost:8443/ords/

我们可以使用以下命令将其设置为默认操作。HTTPS 端口的存在意味着 ORDS 正在安全模式下运行。

ords --config ${ORDS_CONFIG} 配置设置独立.https.port 8443

这些设置被添加到“$ORDS_CONFIG/global/settings.xml”文件中。

我们现在可以通过以下命令使用 HTTPS 运行 ORDS。

导出_JAVA_OPTIONS="-Xms1126M -Xmx1126M"

ords --config ${ORDS_CONFIG} 服务

如果您使用命令行参数,请记住修改您的“start_ords.sh”脚本。

SSL 配置 (HTTPS)

您可能应该在 ORDS 前面使用反向代理或负载均衡器,这是您的证书颁发机构 (CA) 证书所在的位置。即便如此,您可能还希望您的内部流量也使用 HTTPS,因此您需要将 Jetty 配置为使用 HTTPS。如果您有正确的 CA 证书和密钥,请确保它们是 DER 格式。在这种情况下,我们将手动创建一个新的自签名证书并将其用于 HTTPS 配置。请记住根据需要调整“dname”和密码。

mkdir ~/keystore
cd ~/密钥库

# 在 JKS 密钥库中创建自签名证书。
$ JAVA_HOME/bin/keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks \
   -dname "CN=`hostname`, OU=Example Department, O=Example Company, L=Birmingham, ST=West Midlands, C=GB" \
   -storepass password1 -validity 3600 -keysize 2048 -keypass password1

# 从 JKS 密钥库创建一个 PKCS12 密钥库。
$JAVA_HOME/bin/keytool -importkeystore -srckeystore keystore.jks -srcalias selfsigned -srcstorepass password1 \
   -destkeystore keystore.p12 -destkeystore PKCS12 -deststorepass 密码1 -destkeypass 密码1

# 提取PEM格式的密钥和证书。
openssl pkcs12 -in keystore.p12 -nodes -nocerts -out `hostname`-key.pem
openssl pkcs12 -in keystore.p12 -nokeys -out `hostname`.pem

# 将它们转换为 DER 格式。
openssl pkcs8 -topk8 -inform PEM -outform DER -in `hostname`-key.pem -out `hostname`-key.der -nocrypt
openssl x509 -inform PEM -outform DER -in `hostname`.pem -out `hostname`.der

如果一切顺利,您现在拥有 DER 格式的密钥和证书。该文件名基于您的主机名,因此它们可能看起来不同。

$ ls *.der
localhost.localdomain.der localhost.localdomain-key.der
$

我们现在可以使用此证书和密钥启动 ORDS,如下所示。

导出_JAVA_OPTIONS="-Xms1126M -Xmx1126M"

ords --config ${ORDS_CONFIG} 服务 --certificate ~/keystore/localhost.localdomain.der --key ~/keystore/localhost.localdomain-key.der

--secure和设置是隐含的--port,因为我们使用的是证书,但我们可以显式设置它们并获得相同的结果。

导出_JAVA_OPTIONS="-Xms1126M -Xmx1126M"

ords --config ${ORDS_CONFIG} 服务 --secure --port 8443 --certificate ~/keystore/localhost.localdomain.der --key ~/keystore/localhost.localdomain-key.der

现在可以从以下 URL 获得资源,并根据需要调整您的主机名。

https://localhost:8443/ords/

我们可以使用以下命令将其设置为默认值。HTTPS 端口的存在意味着 ORDS 正在安全模式下运行。

ords --config ${ORDS_CONFIG} 配置设置独立.https.port 8443
ords --config ${ORDS_CONFIG} 配置设置独立.https.cert ~/keystore/localhost.localdomain.der
ords --config ${ORDS_CONFIG} 配置设置独立.https.cert.key ~/keystore/localhost.localdomain-key.der

这些设置被添加到“$ORDS_CONFIG/global/settings.xml”文件中。

我们现在可以使用 HTTPS 和我们的证书使用以下命令运行 ORDS。

导出_JAVA_OPTIONS="-Xms1126M -Xmx1126M"

ords --config ${ORDS_CONFIG} 服务

如果您使用命令行参数,请记住修改您的“start_ords.sh”脚本。

APEX 静态图像

将 ORDS 用于前端 APEX 应用程序时,应将 ORDS 配置为提供 APEX 静态文件。

导出 APEX_IMAGES=/u01/software/apex/images

ords --config ${ORDS_CONFIG} 配置集standalone.static.path ${APEX_IMAGES}

这些设置被添加到“$ORDS_CONFIG/global/settings.xml”文件中。

我们必须重新启动 ORDS 才能使更改生效。

~/scripts/stop_ords.sh
~/scripts/start_ords.sh

静态资源(文档根目录)

ORDS 可用于像常规 Web 服务器一样提供静态内容。默认位置需要以下路径。

mkdir -p ${ORDS_CONFIG}/global/doc_root

--document-root可以使用命令行上的参数或修改以下默认设置来更改默认位置。

ords --config ${ORDS_CONFIG} 配置集standalone.doc.root ${ORDS_CONFIG}/global/doc_root

如果您更改了默认设置,则需要重新启动 ORDS 才能使其生效。

~/scripts/stop_ords.sh
~/scripts/start_ords.sh

自定义错误页面

ORDS 将自动处理典型的 HTTP 错误。如果您在 ORDS 前面使用负载均衡器,您可能希望使用它来处理自定义错误消息,而不是更改 ORDS 配置。如果您需要,ORDS 可以处理自定义错误页面。error.externalPath使用自定义错误页面的位置修改设置。

ords --config ${ORDS_CONFIG} 配置设置 error.externalPath ~/error-pages

创建所需的自定义错误文件。我刚刚创建了一些简单的测试。

mkdir -p ~/error-pages
回声“404 错误:哎呀”> ~/error-pages/404.html
回声“500 错误:哎呀”> ~/error-pages/500.html

重新启动 ORDS。

~/scripts/stop_ords.sh
~/scripts/start_ords.sh

访问日志

如果您想知道谁在访问您的 Web 服务器,访问日志非常重要。我们使用该standalone.access.log设置来确定 ORDS 将访问日志写入的位置。

ords --config ${ORDS_CONFIG} 配置集standalone.access.log ${ORDS_CONFIG}/logs

重启 ORDS 使设置生效。

~/scripts/stop_ords.sh
~/scripts/start_ords.sh

一旦我们访问 ORDS,我们将看到在我们指定的目录中创建了一个访问日志。访问日志的名称格式为“ords_YYYY_MM_DD.log”。

所有设置

可以使用以下命令显示完整的设置列表。

$ ords 配置信息

ORDS:2022 年 4 月 22 日星期五 10:16:02 发布 22.1 生产

版权所有 (c) 2010、2022,甲骨文。

配置:
  /u01/config/ords/

设置:

apex.security.administrator.roles逗号分隔列表
                                 要分配的其他角色
                                 认证的 APEX
                                 管理员类型的用户。

apex.security.developer.roles 逗号分隔列表
                                 要分配的其他角色
                                 经过身份验证的 APEX 开发人员
                                 键入用户。

apex.security.user.roles 逗号分隔列表
                                 要分配的其他角色
                                 经过身份验证的常规 APEX
                                 用户。

autoupgrade.api.aulocation 的配置设置
                                 AutoUpgrade.jar 位置。

autoupgrade.api.enabled 配置设置
                                 启用自动升级 REST API
                                 特征。

autoupgrade.api.jvmlocation 的配置设置
                                 自动升级 REST API JVM
                                 地点。

autoupgrade.api.loglocation 的配置设置
                                 自动升级 REST API 日志
                                 地点。

cache.metadata.enabled 指定设置为
                                 启用或禁用元数据
                                 缓存。

cache.metadata.timeout 指定设置为
                                 确定一个多长时间
                                 元数据记录保留在
                                 缓存。持续时间更长
                                 意味着,需要更长的时间
                                 查看应用的更改。这
                                 接受的格式是基于
                                 ISO-8601 持续时间格式。

database.api.enabled 启用数据库 API 功能。

database.api.management.services.disabled禁用数据库 API
                                 行政相关
                                 服务。仅适用
                                 启用数据库 API 时。

db.adminUser 数据库的用户名
                                 ORDS 将使用的帐户
                                 用于行政操作
                                 在数据库中。

db.adminUser.password 数据库的密码
                                 ORDS 将使用的帐户
                                 用于行政操作
                                 在数据库中。

db.cdb.adminUser 数据库的用户名
                                 ORDS 将使用的帐户
                                 用于可插拔数据库
                                 生命周期管理。

db.cdb.adminUser.password 数据库的密码
                                 ORDS 将使用的帐户
                                 用于可插拔数据库
                                 生命周期管理。

db.connectionType 数据库连接类型。
                                 指定值之一:
                                 基本,tns,customurl。

db.credentialsSource 指定源
                                 数据库凭据何时
                                 创建直接连接
                                 用于运行 SQL 语句。
                                 值可以是以下之一:池或
                                 要求。如果使用池,则
                                 在此定义的凭据
                                 池将用于创建一个
                                 JDBC 连接。如果要求
                                 使用时,凭据在
                                 该请求将用于
                                 创建一个 JDBC 连接和
                                 如果成功授予
                                 请求者 SQL Developer 角色。
                                 默认值为池。

db.customURL JDBC URL 连接到
                                 连接到数据库。

db.hostname 数据库的主机名
                                 服务器。

db.invalidPoolTimeout 指定等待多长时间
                                 在重试无效之前
                                 水池。

db.password 数据库密码。

db.poolDestroyTimeout 表示等待多长时间
                                 优雅地摧毁一个水池,
                                 在强行移动之前
                                 销毁所有连接
                                 包括借来的。

db.port 数据库的端口
                                 服务器监听器。

db.serviceNameSuffix 的服务名称后缀
                                 连接到 CDB 的 PDB。

db.servicename 数据库服务名称。

db.tnsAliasName TNS 别名
                                 匹配中的名称
                                 tnsnames.ora 文件。

db.tnsDirectory 的目录位置
                                 您的 tnsnames.ora 文件。

db.username 数据库用户名。

db.wallet.zip 钱包存档(提供
                                 在 BASE64 编码中)
                                 包含连接详细信息
                                 为游泳池。

db.wallet.zip.path 钱包存档的路径
                                 包含连接详细信息
                                 为游泳池。

db.wallet.zip.service 指定服务名称
                                 钱包存档
                                 水池。

debug.printDebugToScreen 指定是否显示
                                 浏览器中的错误消息。

debug.trackResources 启用 JDBC 跟踪
                                 如果没有资源
                                 释放会导致资源
                                 泄漏/耗尽
                                 数据库。跟踪强加了一个
                                 性能开销。

error.externalPath 外部路径
                                 错误页面。

error.responseFormat 指定什么格式
                                 错误响应应该是
                                 呈现。可能的值:
                                 HTTP、JSON、自动。默认为
                                 汽车。

feature.openservicebroker.exclude 禁用开放服务
                                 经纪人服务可用于
                                 游泳池。

feature.sdw 启用数据库操作
                                 特征。

http.cookie.filter 一个逗号分隔的列表
                                 要排除的 HTTP Cookies
                                 初始化 Oracle Web
                                 代理环境。

icap.port 指定 Internet
                                 内容适配协议
                                 (ICAP) 端口进行病毒扫描
                                 文件。icap.port 或
                                 icap.secure.port 是必需的
                                 有值时
                                 icap.server 已设置。

icap.secure.port 指定 Internet
                                 内容适配协议
                                 (ICAP) 病毒安全端口
                                 扫描文件。无论是 icap.port
                                 或 icap.secure.port 是
                                 需要有一个值时
                                 icap.server 已设置。

icap.server 指定 Internet
                                 内容适配协议
                                 (ICAP) 服务器名称或 IP
                                 病毒扫描文件的地址。

jdbc.DriverType Oracle JDBC URL 子类型
                                 可以有一个
                                 值:薄,oci8。默认值
                                 瘦。

jdbc.InactivityTimeout 指定可用多长时间
                                 连接可以保持空闲
                                 在它关闭之前。这
                                 不活动连接超时
                                 以秒为单位。默认为
                                 1800.

jdbc.InitialLimit 的初始大小
                                 连接数
                                 将被创建。默认为
                                 10.

jdbc.MaxConnectionReuseCount 指定最大数量
                                 重用连接的次数
                                 在它被丢弃之前
                                 换成新的
                                 联系。

jdbc.MaxLimit 最大数量
                                 连接。默认为 10。

jdbc.MaxStatementsLimit 最大数量
                                 要为每个缓存的语句
                                 联系。默认为 10。

jdbc.MinLimit 最小数量
                                 连接。默认为 2。

jdbc.auth.admin.role 标识数据库角色
                                 表示数据库
                                 用户应该得到 SQL
                                 管理员角色。

jdbc.auth.enabled 指定 PL/SQL
                                 网关调用可以
                                 使用数据库进行身份验证
                                 用户。默认为假。放
                                 为 true 以启用功能。
                                 Oracle 建议不要使用
                                 此功能。此功能
                                 仅用于方便
                                 客户迁出
                                 mod_plsql。

jdbc.cleanup.mode 指定池化 JDBC 的方式
                                 连接,并对应
                                 数据库会话,被释放
                                 当一个请求被
                                 处理。

jdbc.driverName JDBC 驱动程序的名称
                                 使用。

jdbc.statementTimeout 指定借用多长时间
                                 (使用中)连接可以
                                 在未使用之前保持未使用状态
                                 被视为被遗弃和
                                 回收。被遗弃的
                                 连接超时在
                                 秒。

json.sdo.geometry.output.geojson 指定 SDO 几何
                                 数据应返回
                                 GeoJSON 格式。

misc.defaultPage 默认页面(PL/SQL
                                 过程)调用,如果
                                 URL 指向上下文
                                 数据库池的根。
                                 默认值为顶点。

misc.pagination.maxRows 指定最大数量
                                 将返回的行数
                                 处理时来自查询
                                 一个 RESTful 服务和那个
                                 将从一个返回
                                 结果中的嵌套游标
                                 放。影响所有 RESTful
                                 通过 a 产生的服务
                                 SQL查询,不管
                                 资源是否
                                 分页。默认为 10000。

owa.trace.sql 布尔属性,如果为真
                                 导致 SQL 的跟踪
                                 执行的语句
                                 要响应的 Oracle Web 代理
                                 到日志。

plsql.gateway.mode 指示 PL/SQL
                                 网关功能应该
                                 可用于游泳池或
                                 不是。值可以是以下之一:
                                 禁用,直接或代理。
                                 如果使用直接,则池
                                 将服务于 PL/SQL 网关
                                 直接请求。如果被代理
                                 使用,PLSQL_GATEWAY_CONFIG
                                 视图用于确定
                                 要代理的用户。

procedure.rest.preHook 存储的 PL/SQL 的名称
                                 应该是的功能
                                 在调度之前调用
                                 任何 REST 请求。

request.traceHeaderName 表示 HTTP 的名称
                                 唯一的请求标头
                                 标识请求结束
                                 当它通过时结束
                                 的各个层次
                                 应用程序堆栈。在甲骨文中
                                 这个标题通常是
                                 简称ECID
                                 (实体上下文 ID)。

resource.templates.enabled 已弃用。配置
                                 属性指示是否
                                 旧资源模板
                                 (基于 APEX 的 REST)应该是
                                 启用与否。假的
                                 默认。这
                                 资源模板代码库
                                 不兼容
                                 单池
                                 (ORDS_PUBLIC_USER)
                                 建筑必须如此
                                 禁用。

restEnabledSql.active 启用支持 REST 的 SQL
                                 特征。

security.credentials.attempts 的最大数量
                                 密码失败
                                 允许尝试。启用者
                                 设置一个正整数
                                 价值。默认为 -1。

security.credentials.file 凭据所在的文件
                                 被存储。

security.credentials.lock.time 锁定账户的时间
                                 已超过最大值
                                 尝试。默认为 10
                                 分钟。

security.requestValidationFunction 指定一个验证
                                 函数来判断是否
                                 中要求的程序
                                 应允许 URL 或
                                 不允许处理。
                                 该函数应该返回
                                 如果程序是,则为真
                                 允许;否则,返回
                                 错误的。

security.validationFunctionType 表示什么类型
                                 security.requestValidationFunc
                                 离子是:javascript或plsql。
                                 默认为 plsql。

security.verifySSL 表示HTTPS是否为
                                 在您的环境中可用。

Standalone.access.log 要存储的文件夹路径
                                 HTTP 请求访问日志。如果
                                 未指定则无法访问
                                 将生成日志。

Standalone.binds 逗号分隔的主机列表
                                 名称或 IP 地址
                                 识别特定网络
                                 监听的界面,
                                 默认 0.0.0.0。

Standalone.context.path {0} 所在的上下文路径
                                 位于,默认为 /ords

Standalone.doc.root 指向的位置
                                 静态资源
                                 在 / 根下服务
                                 服务器路径位于。

Standalone.http.port HTTP 监听端口,默认 8080

Standalone.https.cert SSL 证书路径。如果你
                                 正在提供 SSL
                                 证书,您必须指定
                                 证书位置。

Standalone.https.cert.key SSL 证书密钥路径。如果
                                 您正在提供 SSL
                                 证书,您必须指定
                                 证书密钥位置。

Standalone.https.host SSL 证书主机名

Standalone.https.port HTTPS 监听端口,默认
                                 8443

Standalone.static.context.path 上下文路径,其中
                                 Application Express 静态
                                 资源位于,
                                 默认为 /i

Standalone.static.path 包含的文件夹的路径
                                 所需的静态资源
                                 顶尖

Standalone.stop.timeout Standalone 的时间段
                                 优雅等待模式
                                 关闭。
$
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论