termux用手机做一个服务器

758 阅读3分钟
实现要求
  1. 安卓手机一台
  2. 安装termux软件
  3. termux 中安装 ubuntu
  4. ubuntu中用nginx做代理实现前后端通信
  5. 利用花生壳做外网映射
实现
  1. 安卓手机系统版本>5
我用的手机 荣耀9x harmonyOS3 (安卓 > 5就应该没问题)

2.安装termux软件

1. 建议下载 F-Droid, 在这里面下载 Termuxhttps://github.com/f-droid/fdroidclient/releases/tag/1.18.0

2. 安装完成后要做一些初始化操作
[termux 简单初始化操作 - 掘金 (juejin.cn)](https://juejin.cn/post/7332652230711869503)
  1. 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 就可以了
  1. 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
    
    这时应该就能够访问接口了,用手机做一个服务器基本完成了