App内网分发服务(App Host)搭建

本服务使用开源项目AppHost,地址:

 https://github.com/pluosi/app-host 

  1. 根据官方文档,采用方法2 Docker自己编译。clone项目到本地
git clone https://github.com/pluosi/app-host.git /opt/app-host
cd /opt/app-host
复制代码
  1. 确保docker已安装
 sudo apt install docker.io
复制代码
  1. 如果需要修改端口,在源码里全局搜索“3000”并改成需要的端口。
  2. 编译并启动
./docker/launcher bootstrap -v
./docker/launcher start
复制代码
  1. 如果编译完之后要改端口,需要把docker镜像删除后重新编译。参考 这篇帖子 。删除后重复步骤4。
#列出正在运行的docker容器
docker ps
#移除运行的容器
docker rm -f {容器ID}
#列出编译好的镜像
docker images
#移除镜像
docker rmi -f {镜像ID}
复制代码
  1. iOS安装包需要网站支持https。先在路由dns里面绑定ip和域名。
  2. 安装mkcert,生成自签名证书
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
chmod +x mkcert
mv mkcert /usr/local/bin/ 
复制代码
  1. 生成证书并安装。这一步会在当前文件夹生成2个文件,放在某路径下保管好。
mkcert 192.168.1.251
mkcert -install
复制代码
  1. 生成根证书,同样也放在之前的证书文件夹里方便归类。
mkcert -CAROOT
复制代码
  1. 配置nginx反向代理。确保nginx已安装。nginx反向代理参考 这篇帖子 
apt install nginx -y
复制代码
  1. 创建配置文件
vi /etc/nginx/sites-available/app-host.conf
复制代码
  1. 使用以下配置。server_name,ssl_certificate,ssl_certificate_key,proxy_pass根据实际情况填写。默认的https端口443转发到3001端口。反向代理可以监听80端口,转发到本机的443端口。如果需要有多个url来访问这个服务,最关键的需要把每个ssl端口写成不一样的。在listen 80的时候,rewrite如果写 h o s t host 1,这个$1还是443,默认的https端口。可以写死成示例中的https://172.16.1.23:444。
server {
    listen 443 ssl;
    server_name  192.168.1.251;
    # access_log /var/log/nginx/ota.xxx.com_access.log;
    ssl_certificate      /.../192.168.1.251.pem;
    ssl_certificate_key  /.../192.168.1.251-key.pem;
    ssl on;
    location / {
        proxy_set_header  Host $http_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 https;
        proxy_set_header  X-Forwarded-Port $server_port;
        proxy_pass http://192.168.1.251:3001; #此处改为 docker 服务的地址
    }
}
server {
    listen 80;
    server_name 192.168.1.251;
    rewrite ^(.*)$  https://$host$1 permanent;
}
server {
    listen 444 ssl;
    server_name  172.16.1.23;
    # access_log /var/log/nginx/ota.xxx.com_access.log;
    ssl_certificate      /.../172.16.1.23.pem;
    ssl_certificate_key  /.../172.16.1.23-key.pem;
    ssl on;
    location / {
        proxy_set_header  Host $http_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 https;
        proxy_set_header  X-Forwarded-Port $server_port;
        proxy_pass http://172.16.1.23:3001; #此处改为 docker 服务的地址
    }
}
server {
    listen 80;
    server_name 172.16.1.23;
    rewrite ^(.*)$  https://172.16.1.23:444 permanent;
}
复制代码
  1. 把配置文件链接到相应目录下
ln -s /etc/nginx/sites-available/app-host.conf /etc/nginx/sites-enabled/
复制代码
  1. nginx默认上传文件大小有限制,到/etc/nginx/nginx.conf下http{}段中加入配置
client_max_body_size 1000m;
复制代码
  1. 重启nginx
systemctl restart nginx
复制代码

至此,服务器配置好了。可以先用localhost:3001端口访问网页,根据UI提示,上传一个包尝试一下。打包需要选择adhoc,不能选app store。接下来需要在手机上做一些配置。

  1. 手机必须是测试手机,UDID在ipa profile的设备列表里。
  2. 把配置服务器时候生成的rootCA.pem通过air drop发到手机上,会提示安装证书。照提示安装证书。
  3. 以iOS15举例,收到文件以后进入设置->通用->VPN与设备管理。已下载的描述文件下面点击刚收到的证书,照提示安装成功。
  4. 这一步很关键,刚才描述文件安装成功还需要信任证书。进入设置->通用->关于本机->证书信任设置。把刚才安装的证书打开信任。

猜你喜欢

转载自juejin.im/post/7096318754262351908