APEX实战第4篇:如何把APEX程序变成“移动端APP”?
因为使用手机登录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”?的更多相关文章
- spring boot实战(第十三篇)自动配置原理分析
前言 spring Boot中引入了自动配置,让开发者利用起来更加的简便.快捷,本篇讲利用RabbitMQ的自动配置为例讲分析下Spring Boot中的自动配置原理. 在上一篇末尾讲述了Spring ...
- Sping Boot入门到实战之入门篇(三):Spring Boot属性配置
该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置. 传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...
- Sping Boot入门到实战之入门篇(二):第一个Spring Boot应用
该篇为Spring Boot入门到实战系列入门篇的第二篇.介绍创建Spring Boot应用的几种方法. Spring Boot应用可以通过如下三种方法创建: 通过 https://start.spr ...
- Sping Boot入门到实战之入门篇(一):Spring Boot简介
该篇为Spring Boot入门到实战系列入门篇的第一篇.对Spring Boot做一个大致的介绍. 传统的基于Spring的Java Web应用,需要配置web.xml, applicationCo ...
- Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置
该篇为Sping Boot入门到实战系列入门篇的第四篇.介绍Spring Boot自动化配置的基本原理与实现. Spring Boot之所以受开发者欢迎, 其中最重要的一个因素就是其自动化配置特性 ...
- R实战 第三篇:数据处理(基础)
数据结构用于存储数据,不同的数据结构对应不同的操作方法,对应不同的分析目的,应选择合适的数据结构.在处理数据时,为了便于检查数据对象,可以通过函数attributes(x)来查看数据对象的属性,str ...
- Docker虚拟化实战学习——基础篇(转)
Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...
- xgboost入门与实战(原理篇)
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
- xgboost入门与实战(实战调参篇)
https://blog.csdn.net/sb19931201/article/details/52577592 xgboost入门与实战(实战调参篇) 前言 前面几篇博文都在学习原理知识,是时候上 ...
- HTML5 Canvas(画布)实战编程初级篇:基本介绍和基础画布元素
欢迎大家阅读HTML5 Canvas(画布)实战编程初级篇系列,在这个系列中,我们将介绍最简单的HTML5画布编程.包括: 画布元素 绘制直线 绘制曲线 绘制路径 绘制图形 绘制颜色,渐变和图案 绘制 ...
随机推荐
- 项目管理知识体系指南(PMBOK 指南)
项目管理知识体系指南(PMBOK 指南) 第6版--笔记项目管理十大知识领域,五大管理过程组,49个过程.如下表格:项目:项目的定义 : (Project Management Institute)项 ...
- AI与.NET技术实操系列(九):总结篇 ── 探讨.NET 开发 AI 生态:工具、库与未来趋势
1. 引言 本文作为本系列的最后一篇,旨在全面探讨 .NET 生态中与 AI 相关的工具.库.框架和资源,帮助开发者了解如何在 .NET 环境中开发 AI 应用.我们将分析 Microsoft 的 A ...
- BUUCTF---RSA5(低加密指数广播攻击)
题目 知识 加密指数e非常小 一份明文使用不同的模数n,相同的加密指数e进行多次加密 可以拿到每一份加密后的密文和对应的模数n.加密指数e 解密 由于模数n只能分解为p和q,所以当n很多时,p或q有相 ...
- 【SpringCloud】微服务架构编码构建
微服务架构编码构建 约定>配置>编码 Mysql的主从 slave会从master读取binlog来进行数据同步 三步骤+原理图 MySQL复制过程分成三步: master将改变记录到二进 ...
- 二叉树专题学习(C++版) 基础的上机题
前言: 由于二叉树这一章的题型比较多,涉及到的递归程序也较多,所以单开一个随笔来记录这个学习过程,希望对读者有帮助. 理论知识基础 在二叉树的选择题中,常常会涉及到对于最多或最少结点.最大或最小高度. ...
- 测试工作中用到的Redis命令
由于项目测试的需要,经常需要连接Redis数据库修改某些键值,无奈最近Redis的客户端连接工具使用不了 只有使用命令行来操作了,现总结如下: 1.远程连接Redis redis-cli -h hos ...
- jmeter从csv文件中取数据设置变量的方法
从csv取数据是参数化方法之一 首先,CSV数据文件设置,选择数据文件,点击http请求,右键-添加-配置元件-csv data set config,添加CSV数据文件设置 添加后可对设置名称进行修 ...
- DPDI(Dispatch PDI)kettle调度管理平台升级内容
DPDI升级内容(20240815版) DPDI online部署方式 定时任务优化(支持轮询机制,Cron可提示近5次运行时间) 运行任务优化(支持多机器分布式运行) 其它小功能优化 1. 首页可手 ...
- EF Core 中避免 SQL 注入的三种写法
SQL 注入攻击可能会对我们的应用程序产生严重影响,导致敏感数据泄露.未经授权的访问和应用程序受损.EF Core 提供了三种内置机制来防止 SQL 注入攻击. 1.利用 LINQ 查询语法和参数化查 ...
- Web前端入门第 40 问:CSS float 浮动布局应用场景
CSS float 浮动属性最早用于文字环绕图片效果,就像传统报纸上的印刷排版一样. CSS2 的规范推动了浮动用于其他元素,float 便被大范围应用于布局,当年常说的 div + css 布局,f ...