因为使用手机登录APEX程序时,每次都要先到手机浏览器的入口感觉不方便且不专业,所以能不能像APP那样直接点击进入呢?

最简单的方式,就是使用PWA来实现类似APP程序一样的移动端登录。

PWA本身配置极其简单,开启就好,但是PWA的前提是,你开发的网站必须要使用https安全访问才可以。

  • 1.搞定https所需证书
  • 2.解决apex测试问题
  • 3.开启PWA功能
  • 4.体验“移动端APP”效果

1.搞定https所需证书

使用 ORDS + Nginx 前端代理 是目前 Oracle APEX 部署中最推荐的模式之一:既安全、灵活又高性能。

下面演示 在 OEL 系统下使用 Certbot + Nginx 为 ORDS 配置免费 HTTPS 的完整方案。

本文假设你申请的域名为yourdomain.com,我所有贴出的配置也都全部替换这个域名方便大家理解。

sudo dnf install epel-release -y
sudo dnf install nginx -y --error,这个在OEL源中没有下面的certbot、python3-certbot-nginx这两个包
--sudo dnf install certbot python3-certbot-nginx -y --改为使用pip安装 Certbot + Nginx 插件
pip3 install certbot certbot-nginx --安装之后,需要确认certbot命令可用(环境变量有效,root用户也可以执行)
$ which certbot
/u01/kbot/anaconda3/bin/certbot
$ sudo ln -s /u01/kbot/anaconda3/bin/certbot /usr/bin/certbot
$ ls -l /usr/bin/certbot
lrwxrwxrwx 1 root root 31 Jun 20 01:58 /usr/bin/certbot -> /u01/kbot/anaconda3/bin/certbot

如果直接使用普通用户执行certbot会报错:

[Errno 13] Permission denied: '/var/log/letsencrypt/.certbot.lock'
Either run as root, or set --config-dir, --work-dir, and --logs-dir to writeable paths.

为了简单,这里直接sudo使用root用户权限来申请证书:

sudo certbot certonly --standalone -d yourdomain.com

生成的证书路径默认在这个路径下:

/etc/letsencrypt/live/yourdomain.com/

你只需把这些证书手动配置进你的 Nginx:

ssl_certificate     /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

创建或编辑 Nginx 配置文件(有些配置是后面遇到实际问题后加上去的):

sudo vi /etc/nginx/conf.d/apex.conf

# 强制 HTTP 跳转到 HTTPS
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://yourdomain.com$request_uri;
} # HTTPS 主站配置
server {
listen 443 ssl;
server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on; location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
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_set_header X-Forwarded-Port 443;
}
} # Unique
server {
listen 443 ssl;
server_name www.yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; return 301 https://yourdomain.com$request_uri;
}

检查配置是否正确(会自动检查配置的Nginx文件),之后重启Nginx:

sudo nginx -t
sudo systemctl restart nginx

配置证书自动续期:

虽然这里我是通过 --standalone 获得证书,但仍然可以自动续期并 reload Nginx。

编辑定时任务:

使用 sudo -s 切换到root用户。

crontab -e

0 3 * * * certbot renew --post-hook "systemctl reload nginx"

注:这里并不需要再执行 certbot --nginx,因为我们已经获得了证书,而且现在的需求是配置好 Nginx 使用已有证书,不必重复申请。

如果你将来更改了域名或 Nginx 配置中想让 Certbot 自动更新文件,那么再用 --nginx 模式也可以,但当前完全没必要。

2.解决apex测试问题

https搞定之后,发现使用https登录apex的workspace还是有问题,报错HTTP 403以及ORDS-13002:

这里需要对ORDS的一些配置文件做修改:

sudo vi $ORDS_CONFIG/global/settings.xml

添加以下内容:(在合适位置,看文件就懂了)

<entry key="security.allow_origin">https://yourdomain.com</entry>

发现还是不行,请教LLM助手给建议,回复说要两个设置:

  <!-- 允许 CORS 来源 -->
<entry key="security.allow_origin">https://yourdomain.com</entry> <!-- 允许跨域 Cookie Session 来源 -->
<entry key="security.externalSessionTrustedOrigins">https://yourdomain.com</entry>

设置好之后,依次重启ORDS和NGINX:

nohup ords serve >> ~/ords.log &
systemctl restart nginx

测试OK,使用之前学习apex期间做的一个DEMO程序,可以正常访问:

https://yourdomain.com/ords/r/ws_whale/whalestudy/home

但是,从APEX run app时:

https://yourdomain.com:80/ords/r/ws_whale/aireport?session=4407332749203

会自动加一个80端口,反而导致问题。这个问题是因为Nginx配置文件问题,加一行(上面配置文件已经是修改过的版本,所以你实际去测试的话,就不会有任何问题):

proxy_set_header X-Forwarded-Port 443;

3.开启PWA功能

在APEX中给已有的APEX应用程序,开启PWA功能,这个操作就非常简单,主要下面配置:

Edit Application Definition

  • Friendly URLs
  • Enable Progressive Web App

这里引用官方apex培训的课程给出的直观截图,一目了然,找不到位置的同学可直接参考这个图示:

4.体验“移动端APP”效果

开启了PWA,就可以实现在手机等移动端有使用APP的效果,还是以之前学习使用的DEMO程序来测试。

我们只需要这样做:

先从apex中直接run你的apex app,复制浏览器地址栏中具体的url地址,复制发给手机。

然后手机复制这个地址,iPhone的话就在自带的Safari浏览器打开(注意不要微信直接打开,要使用手机的浏览器打开)

Safari浏览器网页登录后会发现有下面红框中标识的下载标志:

直接点击它会提示你具体的操作方法,如何添加到手机桌面,如下:

按这个方法操作,直接就会添加到你的手机桌面上,类似和手机APP一样的感觉:

点击打开就是这样的效果:

此刻,恍惚间居然有开发出一款手机APP的爽感,虽然它只是PWA(Progressive Web App)...

编者注:

PWA是网页的增强版,优势在于开发效率、跨平台和免安装,适合轻量级场景。

手机APP是原生体验的代表,优势在于性能与功能深度,适合高频复杂需求。

随着Web技术的演进,PWA的能力正在逼近原生应用,但两者仍会根据场景长期共存。

OK,把APEX程序变成“移动端APP”的演示结束,感兴趣的同学自己尝试下吧。

APEX实战第4篇:如何把APEX程序变成“移动端APP”?的更多相关文章

  1. spring boot实战(第十三篇)自动配置原理分析

    前言 spring Boot中引入了自动配置,让开发者利用起来更加的简便.快捷,本篇讲利用RabbitMQ的自动配置为例讲分析下Spring Boot中的自动配置原理. 在上一篇末尾讲述了Spring ...

  2. Sping Boot入门到实战之入门篇(三):Spring Boot属性配置

    该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置.   传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...

  3. Sping Boot入门到实战之入门篇(二):第一个Spring Boot应用

    该篇为Spring Boot入门到实战系列入门篇的第二篇.介绍创建Spring Boot应用的几种方法. Spring Boot应用可以通过如下三种方法创建: 通过 https://start.spr ...

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

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

  5. Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置

    该篇为Sping Boot入门到实战系列入门篇的第四篇.介绍Spring Boot自动化配置的基本原理与实现.   Spring Boot之所以受开发者欢迎, 其中最重要的一个因素就是其自动化配置特性 ...

  6. R实战 第三篇:数据处理(基础)

    数据结构用于存储数据,不同的数据结构对应不同的操作方法,对应不同的分析目的,应选择合适的数据结构.在处理数据时,为了便于检查数据对象,可以通过函数attributes(x)来查看数据对象的属性,str ...

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

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

  8. xgboost入门与实战(原理篇)

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  9. xgboost入门与实战(实战调参篇)

    https://blog.csdn.net/sb19931201/article/details/52577592 xgboost入门与实战(实战调参篇) 前言 前面几篇博文都在学习原理知识,是时候上 ...

  10. HTML5 Canvas(画布)实战编程初级篇:基本介绍和基础画布元素

    欢迎大家阅读HTML5 Canvas(画布)实战编程初级篇系列,在这个系列中,我们将介绍最简单的HTML5画布编程.包括: 画布元素 绘制直线 绘制曲线 绘制路径 绘制图形 绘制颜色,渐变和图案 绘制 ...

随机推荐

  1. 项目管理知识体系指南(PMBOK 指南)

    项目管理知识体系指南(PMBOK 指南) 第6版--笔记项目管理十大知识领域,五大管理过程组,49个过程.如下表格:项目:项目的定义 : (Project Management Institute)项 ...

  2. AI与.NET技术实操系列(九):总结篇 ── 探讨.NET 开发 AI 生态:工具、库与未来趋势

    1. 引言 本文作为本系列的最后一篇,旨在全面探讨 .NET 生态中与 AI 相关的工具.库.框架和资源,帮助开发者了解如何在 .NET 环境中开发 AI 应用.我们将分析 Microsoft 的 A ...

  3. BUUCTF---RSA5(低加密指数广播攻击)

    题目 知识 加密指数e非常小 一份明文使用不同的模数n,相同的加密指数e进行多次加密 可以拿到每一份加密后的密文和对应的模数n.加密指数e 解密 由于模数n只能分解为p和q,所以当n很多时,p或q有相 ...

  4. 【SpringCloud】微服务架构编码构建

    微服务架构编码构建 约定>配置>编码 Mysql的主从 slave会从master读取binlog来进行数据同步 三步骤+原理图 MySQL复制过程分成三步: master将改变记录到二进 ...

  5. 二叉树专题学习(C++版) 基础的上机题

    前言: 由于二叉树这一章的题型比较多,涉及到的递归程序也较多,所以单开一个随笔来记录这个学习过程,希望对读者有帮助. 理论知识基础 在二叉树的选择题中,常常会涉及到对于最多或最少结点.最大或最小高度. ...

  6. 测试工作中用到的Redis命令

    由于项目测试的需要,经常需要连接Redis数据库修改某些键值,无奈最近Redis的客户端连接工具使用不了 只有使用命令行来操作了,现总结如下: 1.远程连接Redis redis-cli -h hos ...

  7. jmeter从csv文件中取数据设置变量的方法

    从csv取数据是参数化方法之一 首先,CSV数据文件设置,选择数据文件,点击http请求,右键-添加-配置元件-csv data set config,添加CSV数据文件设置 添加后可对设置名称进行修 ...

  8. DPDI(Dispatch PDI)kettle调度管理平台升级内容

    DPDI升级内容(20240815版) DPDI online部署方式 定时任务优化(支持轮询机制,Cron可提示近5次运行时间) 运行任务优化(支持多机器分布式运行) 其它小功能优化 1. 首页可手 ...

  9. EF Core 中避免 SQL 注入的三种写法

    SQL 注入攻击可能会对我们的应用程序产生严重影响,导致敏感数据泄露.未经授权的访问和应用程序受损.EF Core 提供了三种内置机制来防止 SQL 注入攻击. 1.利用 LINQ 查询语法和参数化查 ...

  10. Web前端入门第 40 问:CSS float 浮动布局应用场景

    CSS float 浮动属性最早用于文字环绕图片效果,就像传统报纸上的印刷排版一样. CSS2 的规范推动了浮动用于其他元素,float 便被大范围应用于布局,当年常说的 div + css 布局,f ...