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 仅建议在测试环境下使用。