学会部署APEX是为了更好构建企业级AI应用打基础,比如企业级的知识平台、智能报表等。

先前在《手把手教你喂养 DeepSeek 本地模型》,使用AnythingLLM方式,虽然操作上已经非常方便,但更多偏向于个人使用。

虽然直接使用现成的APEX云服务很方便,但现实中“本地部署”能匹配到更多场景,大家可自行脑补。

这里的“本地部署”是广义的,对应所有你需要自己动手搭建APEX环境的情形,即便你的环境是在云上。

关键点:

手工部署最新版 APEX 及 ORDS,为后续学习 APEX 奠定环境基础。

特别说明:

这里仅供大家学习测试使用,重在体验把AI带入应用开发的APEX,因此暂不考虑高可用等极致要求。

  • 1.安装环境准备
  • 2.APEX安装
  • 3.ORDS安装
  • 4.搞定收工

1.安装环境准备

安装前提:

已安装好23ai数据库环境,确认系统JDK版本在JDK17或以上,提前下载好最新版APEX和ORDS。

安装之前我们先看下APEX的架构图,图中的Web Server就是指ORDS:

APEX下载地址:【目前最新版是Application Express (APEX) 24.2,今年1月15号刚刚发布】

ORDS下载地址:【目前最新版是Oracle REST Data Services 24.4

附:Oracle软件下载总入口【Oracle旗下软件缺啥找不到都可以来这里搜】:

温馨提示:

  • 1)如果数据库安装部署有疑问,可参考Oracle安装部署,版本升级,应用补丁快速参考
  • 2)没有Oracle 23ai介质的同学们,别折腾,可以先使用23ai Free版,完全免费提供。
  • 3)截止目前最新版APEX是24.2,就算之前没听过APEX也没关系,你很幸运,这一版本APEX非常强大,可以深度结合AI,包括最近大火的 DeepSeek,能够真正实现低代码甚至无代码开发企业级AI应用。
  • 4)如果过程中系统遇到缺少依赖包情况可以使用DNF快速安装,DNF本地源配置可参考:YUM退役了?DNF本地源配置
  • 5)笔者这里的测试操作系统是Oracle Linux 8.10,不踩坑建议直接相同版本,同源的RHEL和CentOS原则上问题也不大。

2.APEX安装

注:以下操作均使用oracle用户操作,笔者这里因为目前测试资源严重不足,因此目录选择比较特殊,千万不要模仿。

建议你可以选择比较常规的目录,比如/u01/app/apex/opt/app/apex之类。

1)解压并拷贝静态文件

# 1.解压APEX 24.2的安装包:
[oracle@23ai-primary app]$ unzip apex_24.2.zip # 2.查看apex目录下的image目录,大小约550M+,同时确认下空间够用:
[oracle@23ai-primary apex]$ pwd
/var/oled/app/apex
[oracle@23ai-primary apex]$ du -sh images/
554M images/ # 3.官方建议将新版本的静态文件(如图片、CSS、JS)放置到独立的新目录
# 因此笔者这里创建新目录:/var/oled/app/apex/apex_images,并拷贝静态文件到新目录,后面会用到
[oracle@23ai-primary apex]$ mkdir apex_images
[oracle@23ai-primary apex]$ cp -r /var/oled/app/apex/images/* /var/oled/app/apex/apex_images/

2)在PDB下安装最新版APEX

这里为了保持测试环境干净,笔者选择在自己新建的一个PDB下安装最新版APEX。

PDB是alfred,新建表空间是tbs_alfred,新建应用用户是app1

PDB新建的命令和基础设置参考如下:

-- 1. Create a new PDB with specified parameters
CREATE PLUGGABLE DATABASE alfred
ADMIN USER pdbadmin IDENTIFIED BY "alfredzhao"
STORAGE (MAXSIZE 10G)
PATH_PREFIX = '/u01/app/oracle/oradata/alfred/'; -- 2. Open PDB and configure auto-start
ALTER PLUGGABLE DATABASE alfred OPEN;
ALTER PLUGGABLE DATABASE alfred SAVE STATE; -- 3. Switch to PDB container context
ALTER SESSION SET CONTAINER = alfred; -- 4. Create tablespace for application data
CREATE TABLESPACE tbs_alfred
DATAFILE '/u01/app/oracle/oradata/alfred/tbs_alfred01.dbf'
SIZE 100M AUTOEXTEND ON; -- 5. Create application user with privileges
CREATE USER app1 IDENTIFIED BY app1;
GRANT DB_DEVELOPER_ROLE TO app1;
ALTER USER app1 QUOTA UNLIMITED ON tbs_alfred; -- 6. Configure default tablespace and verify
ALTER USER app1 DEFAULT TABLESPACE tbs_alfred; SELECT username,
default_tablespace,
temporary_tablespace
FROM dba_users
WHERE username = 'APP1';

确认在apex目录中,然后进入sqlplus,切换到刚刚新建的PDBalfred下,调用SQL脚本安装APEX:

[oracle@23ai-primary apex]$ pwd
/var/oled/app/apex
[oracle@23ai-primary apex]$ sqlplus / as sysdba
08:08:36 PRIMARY @ORCL -> SYS @CDB$ROOT> ALTER SESSION SET CONTAINER = alfred;
08:08:54 PRIMARY @ORCL -> SYS @CDB$ROOT> @apexins.sql SYSAUX SYSAUX TEMP /i/

大概5分钟安装结束,关键显示如下:

Thank you for installing Oracle APEX 24.2.0
Oracle APEX is installed in the APEX_240200 schema.

3)APEX相关用户修改密码、按需解锁用户

修改APEX相关用户密码,因为密码强度有要求,这里演示均按 Apex_Test@2025设置来演示。

确认是在APEX安装目录下:

[oracle@23ai-primary ~]$ cd /var/oled/app/apex/
[oracle@23ai-primary apex]$ sqlplus / as sysdba

确认在pdb下面执行:

SQL>
ALTER SESSION SET CONTAINER = alfred;
@apxchpwd.sql
@apex_rest_config.sql

注意:这里的密码要求非常复杂,如果设置简单就会提示类似这样的提示:

--------------------------------------------------------------------------------
Password does not conform to this site's password complexity rules.
* Password must contain at least one numeric character (0123456789).
* Password must contain at least one upper-case alphabetic character.
--------------------------------------------------------------------------------

修改成功类似输出如下【只需要关注笔者标识为<<-- 只有这里输入密码的地方,其他都可以直接回车】:

-- @apxchpwd.sql
@apxchpwd.sql
...set_appun.sql
Elapsed: 00:00:00.00
================================================================================
This script can be used to change the password of an Oracle APEX
instance administrator. If the user does not yet exist, a user record will be
created.
================================================================================
Enter the administrator's username [ADMIN]
User "ADMIN" does not yet exist and will be created.
Elapsed: 00:00:00.00
Enter ADMIN's email [ADMIN]
Enter ADMIN's password [] <<-- 只有这里输入密码
... -- @apex_rest_config.sql
@apex_rest_config.sql
...
Enter a password for the APEX_LISTENER user [] <<-- 只有这里输入密码
Enter a password for the APEX_REST_PUBLIC_USER user [] <<-- 只有这里输入密码
...

然后按需解锁APEX相关用户,以下三个用户比较常用:

-- 1. 解锁 APEX 核心服务账户并重置密码(建议使用独立密码)
ALTER USER APEX_PUBLIC_USER
IDENTIFIED BY "Apex_Test@2025" -- 生产环境应为唯一强密码
ACCOUNT UNLOCK; ALTER USER APEX_LISTENER
IDENTIFIED BY "Apex_Test@2025" -- 不同账户建议设置不同密码
ACCOUNT UNLOCK; -- 2. 按需解锁 REST 服务账户(无 REST 需求时可跳过)
ALTER USER APEX_REST_PUBLIC_USER
IDENTIFIED BY "Apex_Test@2025"
ACCOUNT UNLOCK; -- 3. 创建专用密码策略并应用(生产环境慎用 UNLIMITED)
CREATE PROFILE PASSWORD_UNLIMITED LIMIT
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED; ALTER USER APEX_PUBLIC_USER
PROFILE PASSWORD_UNLIMITED;

说明:

  • APEX_PUBLIC_USER - 核心服务账户,用于处理 APEX 应用的 HTTP 请求(通过 ORDS 连接数据库)。若未解锁,所有 APEX 应用将无法访问。
  • APEX_LISTENER - 用于监听 APEX 的工作请求(如邮件发送、Web 服务调用)。若未解锁,部分后台作业和服务可能无法正常运行。
  • APEX_REST_PUBLIC_USER - 仅在使用 APEX REST 数据服务时需解锁。若您的应用未使用 REST 功能,可保持锁定以降低安全风险。

另外笔者这里测试这几个用户解锁操作是在CDB下执行的,在PDB中执行会提示报错:ORA-65066: The specified changes must apply to all containers,这里没深入研究,最终不影响测试。

4)禁用DB内置的PL/SQL网关,并检查端口状态

因为我们要用ORDS实现Web Server的功能,所以这里需要禁用DB内置的PL/SQL网关避免冲突:

SQL>
-- 禁用DB内置的PL/SQL网关
exec dbms_xdb.sethttpport(0);
exec dbms_xdb.setftpport(0); -- 检查 HTTP 端口状态(0 表示已禁用)
SELECT DBMS_XDB.GETHTTPPORT() FROM DUAL; -- 检查 FTP 端口状态(0 表示已禁用)
SELECT DBMS_XDB.GETFTPPORT() FROM DUAL;

5)中文包安装

SQL>
@builder/zh-cn/load_zh-cn.sql

6)开放用户外网访问权限

SQL>
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => '*', -- 允许访问所有主机(生产环境建议替换为具体域名或IP)
ace => xs$ace_type(
privilege_list => xs$name_list('connect'), -- 授予连接权限
principal_name => 'APEX_PUBLIC_USER', -- 授权给APEX公共用户
principal_type => xs_acl.ptype_db -- 指定主体类型为数据库用户
)
);
END;
/

3.ORDS安装

1)解压ORDS安装包

这里测试,和数据库部署在一起,另外因为空间有限,依然借用下这个目录:

[oracle@23ai-primary app]$ pwd
/var/oled/app
[oracle@23ai-primary app]$ mkdir ords
[oracle@23ai-primary app]$ unzip ords-latest.zip -d /var/oled/app/ords

2)创建ORDS配置目录

这里新建的目录和ords目录同级,即/var/oled/app/ords_config

mkdir ords_config

3)配置环境变量

$ vi ~/.bash_profile
-- 增加下面两个环境变量
export PATH=$PATH:/var/oled/app/ords/bin
export ORDS_CONFIG=/var/oled/app/ords_config $ source ~/.bash_profile

4)安装ORDS

输入命令ords install然后按照交互提示选择适合自己环境的选项:

[oracle@23ai-primary app]$ ords install
ORDS: Release 24.4 Production on Tue Feb 18 09:07:58 2025
...
Oracle REST Data Services - Interactive Install Cannot get the entries in tnsnames.ora located in /u01/oracle/product/23ai/dbhome/network/admin/tnsnames.ora. TNS-04610: No literals left, reached end of NV pair
Enter a number to select the database connection type to use
[1] Basic (host name, port, service name)
[2] TNS (TNS alias, TNS directory)
[3] Custom database URL
Choose [1]:

这里默认1回车继续..

Retrieving information.
ORDS is not installed in the database. ORDS installation is required. Enter a number to update the value or select option A to Accept and Continue
[1] Connection Type: Basic
[2] Basic Connection: HOST=localhost PORT=1521 SERVICE_NAME=alfred.***
Administrator User: SYS AS SYSDBA
[3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): <generate>
[4] ORDS runtime user and schema tablespaces: Default: SYSAUX Temporary TEMP
[5] Additional Feature: Database Actions
[6] Configure and start ORDS in Standalone Mode: Yes
[7] Protocol: HTTP
[8] HTTP Port: 8080
[9] APEX static resources location:
[A] Accept and Continue - Create configuration and Install ORDS in the database
[Q] Quit - Do not proceed. No changes
Choose [A]: A

输入A回车继续..

2025-02-18T09:11:33.600Z INFO        Oracle REST Data Services initialized
Oracle REST Data Services version : 24.4.0.r3451601
Oracle REST Data Services server info: jetty/12.0.13
Oracle REST Data Services java info: Java HotSpot(TM) 64-Bit Server VM (build: 17.0.12+8-LTS-286 mixed mode, sharing)

ORDS安装成功。

5)配置APEX静态内容

使用 Ctrl+C 终止 ORDS 服务的运行状态,然后配置 APEX 静态内容:

$ ords config set --global standalone.static.context.path /i 

# 下面 /var/oled/app/apex/apex_images 这个是Apex的静态资源目录,之前在APEX安装前拷贝过的
$ ords config set --global standalone.static.path /var/oled/app/apex/apex_images # 配置JDBC 连接池(按需设置、可选)
$ ords config set jdbc.MaxLimit 90
$ ords config set jdbc.InitialLimit 90

6)防火墙策略放开8080端口

如果你配置开启了防火墙,需要放开8080端口:

# 开放8080端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 重载防火墙
firewall-cmd --reload
# 查看配置
firewall-cmd --list-all

笔者这里测试环境,没开防火墙:

# firewall-cmd --list-all
FirewallD is not running

所以直接跳过这步。

6)以 Oracle 用户身份在后台运行 ORDS 服务

nohup ords serve &

4.搞定收工

1)通过浏览器访问 ORDS 主页

确认ORDS所在机器的IP地址:xxx.xxx.xxx.xxx <<-- 替换为你真实的IP地址

默认主页地址:http://<ip_address>:8080/ords

使用浏览器访问:

可以看到界面了:

Oracle REST Data Services (ORDS) 是用于 Oracle 数据库的 HTTPS Web 网关。功能包括 SQL Developer Web、Oracle APEX 访问、用于数据和数据库的 REST API 以及 Oracle Database API for MongoDB 等。

2)在中间的APEX部分,直接点击开始

这里 Workspace,填写输入internal,首次登录必须使用 INTERNAL 工作区,这是 APEX 安装时自动创建的管理入口。

用户名:ADMIN(默认管理员账户)

初始密码:在安装 APEX 时通过脚本 apxchpwd.sql 设置的密码。

3)创建普通工作区,切换到新工作区进行日常操作

上步登录成功后,就会来到这个界面:

这里选择Create Workspace,创建普通工作区apex-demo

这里选择之前已经创建的app1用户,点击Next:

为这个普通工作区指定一个管理员密码,这个密码没啥强度要求。

然后指定一个email地址,这个email地址是我按blog地址随便编的:

继续下一步,确认信息没问题:

直接点击Create Workspace

创建完成,点击Done,然后退出管理员界面:

退出成功,点击返回登录页面

然后使用新建的普通工作区apex-demo,使用刚刚创建的admin用户和密码登录:

第一次登录会提示你修改密码,重新输入然后点击Change Password

终于,进入了自己的普通工作区:

至此,已完成本地部署拥有AI能力的APEX。

什么?你说AI能力在哪里?别急哈,我们先把这个环境给搭好,一步步来!

记住最后的登录界面,下次计划会基于此环境,利用AI演示开发一个简单的 APEX 程序,敬请期待。

此外,更多APEX 24.2资料可直接参考官方文档,一起学起来吧:

APEX实战第1篇:本地部署拥有AI能力的APEX的更多相关文章

  1. GitHub实战系列汇总篇

    基础: 1.GitHub实战系列~1.环境部署+创建第一个文件 2015-12-9 http://www.cnblogs.com/dunitian/p/5034624.html 2.GitHub实战系 ...

  2. Docker虚拟化实战学习——基础篇(转)

    Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker   Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...

  3. Docker实战 | 第四篇:Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结

    一. 前言 在之前的文章中 IDEA集成Docker插件实现一键自动打包部署微服务项目,其中开放了服务器2375端口监听,此做法却引发出来一个安全问题,在上篇文章评论也有好心的童鞋提示,但自己心存侥幸 ...

  4. Spring Cloud实战 | 第十篇 :Spring Cloud + Seata 1.4.1 + Nacos1.4.0 整合实现微服务架构中逃不掉的话题分布式事务

    Seata分布式事务在线体验地址:https://www.youlai.store 本篇完整源码地址:https://github.com/hxrui/youlai-mall 有想加入开源项目开发的童 ...

  5. Spring Cloud实战 | 第十一篇:Spring Cloud Gateway 网关实现对RESTful接口权限控制和按钮权限控制

    一. 前言 hi,大家好,这应该是农历年前的关于开源项目 的最后一篇文章了. 有来商城 是基于 Spring Cloud OAuth2 + Spring Cloud Gateway + JWT实现的统 ...

  6. Exceptionless 本地部署

    免费开源分布式系统日志收集框架 Exceptionless 前两天看到了这篇文章,亲身体会了下,确实不错,按照官方的文档试了试本地部署,折腾一番后终于成功,记下心得在此,不敢独享. 本地部署官方wik ...

  7. Sping Boot入门到实战之入门篇(一):Spring Boot简介

    该篇为Spring Boot入门到实战系列入门篇的第一篇.对Spring Boot做一个大致的介绍. 传统的基于Spring的Java Web应用,需要配置web.xml, applicationCo ...

  8. ArcGIS API for JavaScript 4.x 本地部署之Apache(含Apache官方下载方法)

    IIS.Nginx都说了,老牌的Apache和Tomcat也得说一说(如果喜欢用XAMPP另算) 本篇先说Apache. 安装Apache 这个...说实话,比Nginx难找,Apache最近的版本都 ...

  9. ArcGIS API for JavaScript 4.x 本地部署之Nginx法

    上篇ArcGIS API for JavaScript 4.x 离线配置之IIS法提到,如何用IIS配置ArcGIS jsAPI: 本篇则使用http下的Nginx配置,其原理基本一致.https的部 ...

  10. 升级本地部署的CRM到Dynamics 365及部分新特性介绍。

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复241或者20161226可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

随机推荐

  1. GObject学习笔记(二)类型创建与注册

    前言 本文可在https://paw5zx.github.io/GObject-tutorial-beginner-02/中阅读,体验更加 在上一节中我们介绍了GObject类型的类和实例变量的创建和 ...

  2. R数据分析:网状meta分析的理解与实操

    meta分析之前有给大家写过,但是meta分析只能比较两个方法.经常是被用来证明在现有研究中显示矛盾结果的干预方法到底有没有效的时候使用,通过证据综合得到某种干预到底有没有用的结论.但是如果我要证明好 ...

  3. Python 证件照换底色

    # -*- coding: utf-8 -*- ''' @Time : 2021/4/12 19:06 @Author : 水一RAR ''' import numpy as np import cv ...

  4. 升级到 .NET Core 3.1

    微软升级的频率有点快,转眼 .NET Core 升级到 3.1 版了,这是一个长期支持版本,意味着 .NET Core 正式进入成熟期. 不过,对于开发人员来说,你的项目又需要迁移了. 升级项目文件 ...

  5. 龙哥量化:期货交易软件:文华、博易大师闪电手、快期,同花顺期货通,金字塔,MC,MT5,TB交易开拓者横向对比分析

    如果您需要代写公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 此文档做对比分析, 我有空后给详细分析

  6. Soulmate

    理想之所以是理想,也就是因为它只能存在于脑海中,天上月是天上月,水中花是水中花.但我们仍可以怀揣着对乌托邦的向往,所以,我对理想中的对象设想如下: 原来形容一个女子的眉眼,我总喜欢说眉眼如黛,眉如远山 ...

  7. [转]Visual Studio调试模式下添加命令行参数的方法

    在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击:添加参数的工程-->属性-->配置属性-->调试,在右侧"命令参数"栏输入要添加的参数, ...

  8. [转]点云库PCL从入门到精通 随书源码(百度网盘下载)

    分享给需要的人. 这里有你想要的东西-暗号-pdx6 相关链接: PCL点云数据处理基础️️️目录

  9. 大型IM稳定性监测实践:手Q客户端性能防劣化系统的建设之路

    本文来自腾讯手Q基础架构团队杨萧玉.邱少雄.张自蹊.王褚重天.姚伟斌的分享,原题"QQ 客户端性能稳定性防劣化系统 Hodor 技术方案",下文进行了排版和内容优化. 1.引言 接 ...

  10. 整理ML&AI学习路径图

    干货分享: 下面给出一个笔者自己整理的GitHub仓库:https://github.com/isLinXu/awesome-road-map 里面包含了一些可供参考的学习路径和思维导图,并整理微软. ...