安装配置 APEX(示例 apex20.2)
- 如果英文尚可,可以参考官方文档,我当初就是根据官方文档,配置过PL/SQL getway和ORDS两种web监听方式。
1. 卸载旧版本的APEX
由于Oracle Datebase XE自带了一个旧版本的APEX,在正式安装最新版APEX之前,我们需要将旧版本的卸载掉。
su - oracle
cd /u01/app/oracle/product/19.3.0/db_1/apex --你安装oracle db的地方
sqlplus /nolog
-- 用数据库超级管理员连接数据库
SQL> connect sys as sysdba
-- 卸载原有的旧版本APEX
SQL> @apxremov.sql
-- 退出当前数据库会话
SQL> exit
2. 安装最新版本APEX
确保仍然在oracle
账号下,执行以下命令安装最新版本的APEX。
mkdir -p /u01/apex
unzip apex_18.1.zip -d /u01/
chown -R oracle:dba /u01/apex
mv apex/ /u01/apex202 --重命名为了区分版本
现在新的APEX安装文件已经放在/u01/apex202/
目录下了,登录数据库执行安装。
cd /u01/apex202
-- 以超级管理员身份登录数据库
sqlplus / as sysdba
-- 安装APEX,指定默认表空间和静态文件别名
-- 这时候如果不切换到PDB内,默认是安装在CDB,如果安装CDB中,会默认安装在所有PDB中,我一般装在PDB中。基本上只要重新进都要加一句
SQL>alter session set container=FAPDB1;
SQL> @apexins.sql SYSAUX SYSAUX TEMP /i/ --这一步安装时间会特别长,安装完之后可以看看db里应该有APEX_202000之类的用户
-- 安装完毕后数据库会话会自动断开,再次以超级管理员身份登录数据库
sqlplus / as sysdba
-- 创建APEX实例管理员(Instance Administration)及密码,这个密码必须包含特殊符号,否则设置不上。这个密码很重要,是管理APEX平台的账号密码,以后创建新的应用schema、解锁账号等都靠它,第一次登录APEX时也要用到。
SQL> @apxchpwd.sql
-- 解锁ORDS用户账号
SQL> alter user apex_public_user account unlock;
SQL> alter user apex_public_user identified by "your password";
-- 配置RESTful Services服务
SQL> @apex_rest_config.sql
-- 禁用数据库内置的PL/SQL网关
SQL> exec dbms_xdb.sethttpport(0);
--安装中文版 --所有操作都得在PDB下进行,语言包在 /apex202/builder/ 里,中文在这里zh-ch/load_zh-cn.sql,如果其他语言可以自己找。
-- 先将工作目录切到/u01/apex202/bulider/zh-ch,再用SQLplus进入
SQL> alter session set container=你的PDB;
SQL> @load_zh-cn.sql --这一步静等就好了
-- 断开数据库会话
SQL> exit;
以上APEX就算安装完成了,下面开始配置web监听。这里先验证Tomcat+ords,再验证Tomcat+ords+Nginx方式。
3. 复制APEX静态文件到Tomcat目录
## 切换到root用户
su - root
## 在Tomcat的webapps目录下新建一个名为`i`的文件夹
mkdir -p /u01/tomcat/webapps/i/
## 将APEX静态文件复制过去
cp -a /u01/apex202/images/* /u01/tomcat/webapps/i/
## 重启Tomcat服务
systemctl restart tomcat
安装配置ORDS,压缩包的路径根据你之前上传的路径填写
mkdir -p /u01/ords
unzip /u01/opt/ords.19.2.zip -d /u01/ords/
cd /u01/ords
java -jar ords.war install advanced
根据提示完成ORDS的配置,第一个是让你定义一个ords的配置文件,这个config文件夹待会儿需要授权。
Enter the name of the database server[localhost]:这个根据你监听来定的,可以先用lsnrctl status查看里面的HOST=localhost,一般不修改host文件和主机名,这里应该都是localhost
Enter 1 to specify the database service name,or 2 to specify the database SID[1]:这个是选择PDB还是CDB,service name就是具体的PDB,SID就是CDB
这里面可能会设置好多用户密码,建议都用一样的,做好记录,方便管理。
Enter 1 if you wish to start in standalone mode or 2 to exit[1]:
如果你不想使用Tomcat,只想使用默认的ords,就选1,相当于执行命令:
java -jar ords.war standalone
我记得ords默认的servlet容器是jetty。我们待会儿使用Tomcat,所以这里 2 退出。
为tomcat账号授权(需切换到root用户)
确保tomcat账号(安装Tomcat服务器时自动创建的)可以访问/u01/ords/config
目录。这个目录是你刚才配置ords第一步填的。
su - root
chown -R tomcat:tomcat /u01/ords/config
将 ords.war 部署到 Tomcat
现在我们可以将刚才生成的ords.war
文件部署到Tomcat上了。
cp -a /u01/ords/ords.war /u01/tomcat/webapps/
## 重启Tomcat服务
systemctl restart tomcat
测试 APEX + ORDS + Tomcat 的组合是否正常工作
打开浏览器,访问http://你的IP:8080/ords
,或者http://你的IP:8080/ords/apex_admin
如果一切正常,应该可以访问到APEX的页面了。
- workspace:
INTERNAL
- username:
administrator
- password:
你刚才设置的instance administration的密码
成功登录后界面如下图所示:
4. 配置Nginx,将http请求转发到Tomcat
最后,我们需要配置一下Nginx,让所有的http请求都能自动转发到部署在Tomcat上的ORDS上,完成跟APEX的交互。
Nginx默认配置文件在/etc/nginx/nginx.conf
,我们需要修改这个文件,主要修改server
节点下的内容。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
# 增加了/i/目录的请求转发规则,/i/目录是APEX默认的静态文件目录别名。
location ^~ /i/ {
alias /u01/tomcat/webapps/i/;
}
# 增加/ords/目录的请求转发规则,所有形如http://xxx.xxx.xxx.xxx/ords/的请求都会自动转发到http://xxx.xxx.xxx.xxx:8080/ords/上
# 即APEX请求都会由Tomcat接管
location ^~ /ords/ {
proxy_pass http://localhost:8080/ords/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 20m;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
重启Nginx服务
systemctl restart nginx
验证 APEX + ORDS + Tomcat + Nginx 的组合是否正常工作
打开浏览器,这次直接访问http://你的IP/ords
,如果一切顺利,应该就直接打开APEX的页面了。
5.总结
至此,Oracle XE数据库 + ORDS + Tomcat + Nginx 的完整开发环境就搭建好了。
6. 优化
6.1 优化ords配置
如果你去看Tomcat的启动日志会发现下面几个参数默认值过小,Tomcat启动时已经warning了,虽然不影响使用。
调整/u01/ords/config/ords/defaults.xml
中的参数值,具体如下:
<entry key="jdbc.InitialLimit">10</entry>
<entry key="jdbc.MinLimit">10</entry>
<entry key="jdbc.MaxLimit">60</entry>
重启 tomcat 服务以便使 ORDS 配置生效
systemctl restart tomcat
6.2 优化Nginx
修改/etc/nginx/nginx.conf
,以下是我的nginx.conf
文件内容,仅供参考,关于Nginx配置优化的,网上有很多:
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 开启gzip,减少我们发送的数据量
gzip on;
# 允许压缩的最小字节数
gzip_min_length 1k;
# 4个单位为16k的内存作为压缩结果流缓存
gzip_buffers 4 16k;
# 设置识别HTTP协议版本,默认是1.1
gzip_http_version 1.0;
# gzip压缩比,可在1~9中设置,1压缩比最小,速度最快,9压缩比最大,速度最慢,消耗CPU
gzip_comp_level 3;
# 压缩的类型
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text
/javascript;
# 给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
gzip_vary on;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
# 增加了/i/目录的请求转发规则,/i/目录是APEX默认的静态文件目录别名。
location ^~ /i/ {
alias /u01/tomcat/webapps/i/;
}
# 增加/ords/目录的请求转发规则,所有形如http://xxx.xxx.xxx.xxx/ords/的请求都会自动转发到http://xxx.xxx.xxx.xxx:8080/or
ds/上
# 即APEX请求都会由Tomcat接管
location ^~ /ords/ {
proxy_pass http://localhost:8080/ords/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 20m;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
重启 Nginx 服务
systemctl restart nginx
最终测试 APEX
打开浏览器,再次访问 http://你的IP/ords
,应该可以看到APEX的登录页面了。
大功告成!