学会部署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)解压并拷贝静态文件
shell
# 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新建的命令和基础设置参考如下:
sql
-- 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.
--------------------------------------------------------------------------------
修改成功类似输出如下【只需要关注笔者标识为<<-- 只有这里输入密码
的地方,其他都可以直接回车】:
sql
-- @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相关用户,以下三个用户比较常用:
sql
-- 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
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
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 静态内容:
SHELL
$ 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端口:
shell
# 开放8080端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 重载防火墙
firewall-cmd --reload
# 查看配置
firewall-cmd --list-all
笔者这里测试环境,没开防火墙:
shell
# firewall-cmd --list-all
FirewallD is not running
所以直接跳过这步。
6)以 Oracle 用户身份在后台运行 ORDS 服务
shell
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资料可直接参考官方文档,一起学起来吧: