实现要求
- 安卓手机一台
- 安装
termux软件 termux中安装ubuntu- 在
ubuntu中用nginx做代理实现前后端通信 - 利用
花生壳做外网映射
实现
- 安卓手机系统版本>5
我用的手机 荣耀9x harmonyOS3 (安卓 > 5就应该没问题)
1. 建议下载 F-Droid, 在这里面下载 Termux: https://github.com/f-droid/fdroidclient/releases/tag/1.18.0
2. 安装完成后要做一些初始化操作
[termux 简单初始化操作 - 掘金 (juejin.cn)](https://juejin.cn/post/7332652230711869503)
termux中安装ubuntu
pkg install proot-distro // 安装已经有的官方版本的纯种Linux了
proot-distro list // 这个会展示你可以安装的列表
proot-distro install <alias> // 安装你想要的系统,我装的是里面最新版的ubuntu 23,
// 安装命令就是: proot-distor install ubuntu
proot-distro login ubuntu //这个命令就是进入ubuntu的系统里面,
// 你可以把它写到一个 .sh 的脚本里面
// vim u23.sh
// 下次运行就是 sh ./u23.sh 就可以了
- 在
ubuntu中用nginx做代理实现前后端通信
- 安装需要的包
apt install node nginx
node : node作为后端,是必不可少的包,在ubuntu中可以安装 nvm
nginx: 做服务代理的
- 前端打包资源以及后端打包资源上传到手机中
建议:上传目录为手机 内部存储 的根目录下,因为这样更方便找到文件,
内部存储更目录 === /storage/shared, 在我的手机上是这样的
-
前后端的打包文件拷贝到 ubuntu中
a.进入 ubuntu 后你会进入到 /root目录中,你可以创建两个目录分别保存前后端的打包项目,
/root/backend(后端)/root/frontend(前端)b. 此时假设你已经把前后端项目上传到手机的内部存储根目录,
backendBuild(后端)frontendBuild(前端包)c. 将
backendBuild(后端包)frontendBuild(前端包) 拷贝到/root/backend(后端)/root/frontend(前端)cp /data/data/com.termux/files/home/stroage/shared/backendBuild /root/backend (拷贝后端) cp /data/data/com.termux/files/home/stroage/shared/frontendBuild /root/frontend (拷贝后端) -
运行
nginx当你运行完后应该会包一个端口占用的错误,nginx 默认端口80,被termux占用了,所以要修改 nginx的配置文件
# user nobody; # 使用 nobody 用户,一般情况下注释掉这一行,除非特定需要 worker_processes 1; # 启动 1 个工作进程,适用于较小的应用 events { worker_connections 1024; # 每个工作进程的最大连接数 } http { include mime.types; # 包含 MIME 类型配置文件 default_type application/octet-stream; # 默认 MIME 类型 sendfile on; # 开启 sendfile,提高文件传输效率 keepalive_timeout 65; # 客户端保持连接的超时时间 server { listen 5000; # 监听端口 5000 这里原本是 80 server_name localhost; # 服务器名 #access_log logs/host.access.log main; # 访问日志,可以根据需要启用 # 前端的静态资源 location / { proxy_set_header Host $host; # 设置代理请求的 Host 头部 root /root/fronten/; # 静态文件根目录<---------这里关乎你的页面是否会展示 proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; try_files $uri $uri/ /index.html; # 尝试查找文件,否则重定向到 index.html index index.html index.htm; # 默认索引文件 } #后端请求代理 location /api/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header Access-Control-Allow-Methods *; # 添加允许的请求方法头部 add_header Access-Control-Allow-Origin $http_origin; # 添加允许的来源头部 proxy_pass http://127.0.0.1:8000; # 代理到本地的 8000 端口<-----这里关乎接口是否通 } error_page 500 502 503 504 /50x.html; # 错误页面配置 location = /50x.html { root html; } } } -
完成nginx的配置,输入以下命令检查是否有错误
nginx -t
- nginx正确
nginx -s reload 重启下nginx
或者
nginx 启动代理,如果没有执行过该命令
- 检查代理是否生效
访问 http://localhost:5000 看页面是否展示出来, 如果展示成功说明前端资源代理成功, 接着调用接口看请求是否成功,这时接口肯定调不通,因为我们没有启动 node 服务
- 启动 node 服务
- 安装 PM2
npm install -g pm2- 验证安装是否成功
pm2 --version // 如果成功安装,它将显示 pm2 的版本号- 使用 pm2 启动应用程序
pm2 start 入口文件- 查看资源状态
这时应该就能够访问接口了,用手机做一个服务器基本完成了pm2 monit