Docker部署Oracle-xe Apex Ords

github地址:https://github.com/fuzziebrain/docker-apex-stack.git

  • 准备:
curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo

yum makecache fast

yum install -y curl git docker-ce

systemctl enable docker && systemctl start docker
  • 克隆仓库:
cd /home

git clone https://github.com/fuzziebrain/docker-apex-stack.git
  • 下载缺少组件:
Oracle Database 18c XE
Oracle APEX 20.2
Oracle ORDS 20.2.1
Oracle JDK 8u271

链接:

# Oracle Database 18c XE
https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm

# Oracle APEX
http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html

# Oracle ORDS
https://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html

# JDK
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
cd docker-apex-stack/files/

ls

apex_20.2.zip  jdk-8u271-linux-x64.tar.gz  oracle-database-xe-18c-1.0-1.x86_64.rpm  ords-20.2.1.227.0350.zip

将所有下载的文件放到files目录下。

  • 自定义配置:
cd ..

cp settings.env.sample settings.env

vim settings.env
ORACLE_SID=XE
ORACLE_PDB=XEPDB1
ORACLE_PWD=Lzxlinux2021
[email protected]
APEX_ADMIN_PWD=Lzxlinux_2021
APEX_PUBLIC_USER_PWD=Lzxlinux2021
APEX_LISTENER_PWD=Lzxlinux2021
APEX_REST_PUBLIC_USER_PWD=Lzxlinux2021
ORDS_PUBLIC_USER_PWD=Lzxlinux2021
INSTALL_FILE_APEX=apex_20.2.zip
INSTALL_FILE_ORDS=ords-20.2.1.227.0350.zip
INSTALL_FILE_JAVA=jdk-8u271-linux-x64.tar.gz
DOCKER_ORDS_PORT=8080
DOCKER_EM_PORT=5500
DOCKER_DB_PORT=1521
DB_VERSION=18.4.0
DB_EDITION=xe
DOCKER_NETWORK_NAME=oracle_apex
ALLOW_DB_PATCHING=N
OML4R_SUPPORT=N
REST_ENABLED_SQL=Y
RTU_ENABLED=N
SQLDEVWEB=Y
DATABASEAPI=Y

参数说明:

DOCKER_NETWORK_NAME     指定 docker 网络,需要提前创建好

RTU_ENABLED             指定是否允许用户创建容器,用于通过 docker commit 创建镜像

FILES_DIR               指定所有必需安装文件的本地路径,例如 /path/to/my/downloads

ALLOW_DB_PATCHING       指定是否允许保存使用 OPatch 成功修复数据库软件所需的文件

OML4R_SUPPORT           指定是否安装数据库支持以运行嵌入式 R脚本

REST_ENABLED_SQL        指定是否支持 REST 的 SQL 特性

SQLDEVWEB               指定是否启用 SQL Developer Web,默认情况下启用。如果启用,则 REST_ENABLED_SQL 参数会被忽略

DATABASEAPI             指定是否启用对 19.x 和更高版本的 ORDS 的数据库API支持
  • 构建镜像:
docker pull oraclelinux:7-slim

bash 01-build.sh settings.env
  • 启动容器:
docker network create oracle_apex

bash 02-run.sh apex settings.env &

docker ps

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                    PORTS                                                                    NAMES
b665f95f0891        oracle/database:18.4.0-xe   "/bin/sh -c 'exec $O…"   18 minutes ago      Up 18 minutes (healthy)   0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp, 0.0.0.0:8080->8080/tcp   apex

oracle-xe 数据库的存储路径是 /home/docker-apex-stack/<docker name>-oradata/,此处是/home/docker-apex-stack/apex-oradata/。在升级版本或迁移时,注意备份该目录。

ls /home/docker-apex-stack/apex-oradata/

dbconfig  ordsconfig  XE
  • 访问:

打开浏览器,访问 ip:8080/ords

在这里插入图片描述

workspace:INTERNAL、username:ADMIN、password: Lzxlinux_2021 登录,

在这里插入图片描述

  • nginx代理:
yum install -y nginx

vim /etc/nginx/conf.d/apex.conf
server {
    
    
    listen 80;
    server_name apex.lzxlinux.com;
    
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Headers X-Requested-With;
    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    
    location / {
    
    
        proxy_pass http://localhost:8080;
        proxy_set_header Origin "" ;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 120s;
        proxy_read_timeout    120s;
        proxy_send_timeout    120s;
    }
}
nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

systemctl enable nginx && systemctl start nginx

添加hosts:192.168.30.135 apex.lzxlinux.com,访问 apex.lzxlinux.com/ords

在这里插入图片描述

  • 汉化:
docker exec -it apex bash

su - oracle

cd /opt/oracle/product/apex/builder/zh-cn/

echo 'export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE' >> ~/.bash_profile

echo 'export ORACLE_SID=XE' >> !$

echo 'export PATH=$PATH:/opt/oracle/product/18c/dbhomeXE/bin' >> !$

echo 'export NLS_LANG=American_America.AL32UTF8' >> !$

source !$

sqlplus / as sysdba

SQL> alter session set container = XEPDB1;

SQL> @load_zh-cn.sql

等待sql脚本执行完成,刷新网页,

在这里插入图片描述

  • 时区修改:

修改oracle所在服务器时区

docker exec -it apex bash

su - oracle

echo "export TZ='Asia/Shanghai'" >> ~/.bashrc && source ~/.bashrc

sqlplus / as sysdba

查看当前 session container

SQL> select sys_context('userenv','con_name') from dual;

SYS_CONTEXT('USERENV','CON_NAME')
--------------------------------------------------------------------------------
CDB$ROOT

CDB$ROOT 更改时区

SQL> select dbtimezone from dual;

SQL> alter database set time_zone='08:00';

SQL> shutdown immediate;

SQL> startup;

XEPDB1 更改时区

SQL> alter session set container = XEPDB1;

SQL> select dbtimezone from dual;

SQL> alter database set time_zone='08:00';

SQL> shutdown immediate;

SQL> startup;

查看数据库当前时间

SQL> select sysdate from dual;
  • 授权用户使用 dbms_crypto 加密包:
SQL> alter session set container = XEPDB1;

SQL> grant execute on sys.dbms_crypto to "<USERNAME>";

至此,docker部署 Oracle-xe Apex Ords 完成。

最后需要注意的是,Oracle-xe(18c) 数据库空间大小不得超过 12G,否则在重启容器时会失败。此外,如果想在同一台服务器上启动多个 apex 容器,即使容器名、映射端口和 docker network 全部区分,在新建容器时旧的容器会直接报错:TNS-12514: TNS:listener does not currently know of service requested in connect descriptor,此时旧的容器重启无效,容器内不再监听 5500 端口,具体原因未知。因此,Oracle-xe 仅建议在测试环境下使用。


猜你喜欢

转载自blog.csdn.net/miss1181248983/article/details/113949998