/server

Primary LanguageGoMIT LicenseMIT

微信公众号:gopher云原生

go、云原生技术 ...... 来者不拒,欢迎关注

gopher云原生

起源

每个客户端开发者都会想独立开发一款自己的 APP 。 但 iOS 不像 Android 那样可以自由的分享应用给其他人安装 (Android 只要把 apk 甩出去就行了)

对于 iOS 开发者来说,苹果开发者账号几乎人手必备(这里只讨论个人账号), 而苹果公司允许我们添加 100 台设备(udid)绑定到账号上,这 100 台设备可以自由安装由账号签名且使用 Ad Hoc 方式打包出的 .ipa

本项目就是利用这个规则,来简化 iOS APP 的分享流程。当你开发一款 APP 的过程中,想要给身边的小伙伴体验一下,只需要使用本项目上传你的 IPA 并生成一个二维码链接,扫一扫,即可全程自动绑定设备并签名安装 APP

注意事项

本项目核心功能调用 zsignApp Store Connect API 实现

本项目开源免费,纯技术分享,不提供任何平台支持,仅作为给个人开发者分享自己的测试 APP 使用,严禁使用本项目进行任何商业盈利、损害官方利益、分享任何违法违规的 APP 等行为

本项目添加开发者账号后会占用账号的一个 iOS Development certificate 名额(每个账号最多只能创建两个),所以你可能得预留一个

其中添加开发者账号所需的 iss、kid、P8 文件需要在 https://appstoreconnect.apple.com/access/api 创建

image

部分效果预览

login developer
后台管理登录 开发者账号管理
ipalist keylist
应用管理 密钥管理
oss mobileconfig
阿里云 OSS 设置 描述文件签名
pw image
更改用户名密码 安装 APP

Railway 部署

使用 Railway 一键部署,每月有 5 美元的免费额度可以白嫖:

Deploy on Railway

Docker 部署:

提供了多种部署方案供参考,不同方案的区别仅在于 docker-compose.yml 的配置不同,部署时根据实际情况选择其中任意一种即可

配置 1

需要准备的东西:

  1. 一个域名,并解析到你的服务器IP地址上,例如:example.com
  2. 服务器开放 80443 端口,并确保没有被其它程序占用
  3. 一个邮箱地址,用于自动向 Let's Encrypt 申请免费SSL证书,例如:foo@qq.com

创建 docker-compose.yml ,内容如下:

version: '3'
services:
  server:
    image: togettoyou/ipashare:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - $PWD/data:/root/togettoyou/data
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    environment:
      - SERVER_URL=https://example.com
      - SERVER_TLS=true
      - SERVER_AUTOTLS=true
      - SERVER_ACMEEMAIL=foo@qq.com
      - SERVER_MAXJOB=10
      - SERVER_RUNMODE=release
      - LOG_LEVEL=info

优点:快速部署,自动配置SSL证书

缺点:需要占用 80443 端口

配置 2

需要准备的东西:

  1. 一个域名,并解析到你的服务器IP地址上,例如:example.com
  2. 服务器开放 80443 端口,并确保没有被其它程序占用
  3. 自行准备域名的SSL证书,例如:ssl.crtssl.key

创建 docker-compose.yml ,内容如下:

version: '3'
services:
  server:
    image: togettoyou/ipashare:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - $PWD/data:/root/togettoyou/data
      - $PWD/ssl.crt:/root/togettoyou/ssl.crt
      - $PWD/ssl.key:/root/togettoyou/ssl.key
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    environment:
      - SERVER_URL=https://example.com
      - SERVER_TLS=true
      - SERVER_AUTOTLS=false
      - SERVER_CRT=ssl.crt
      - SERVER_KEY=ssl.key
      - SERVER_MAXJOB=10
      - SERVER_RUNMODE=release
      - LOG_LEVEL=info

优点:快速部署

缺点:需要占用 80443 端口,需要自己准备SSL证书

配置 3

需要准备的东西:

  1. 一个域名,并解析到你的服务器IP地址上,例如:example.com
  2. 指定一个任意空闲端口,例如:8888
  3. 服务器需要部署其它能够支持反向代理和SSL的网关服务,例如:Nginx

创建 docker-compose.yml ,内容如下:

version: '3'
services:
  server:
    image: togettoyou/ipashare:latest
    ports:
      - "8888:8888"
    volumes:
      - $PWD/data:/root/togettoyou/data
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    environment:
      - SERVER_URL=https://example.com
      - SERVER_HTTPPORT=8888
      - SERVER_MAXJOB=10
      - SERVER_RUNMODE=release
      - LOG_LEVEL=info

此方案需要你额外在网关服务上配置反向代理以及SSL证书,以 Nginx 配置为例:

server {
    listen 80;
    server_name example.com;
    rewrite ^(.*)$ https://$host$1 permanent;
}

server {
    listen 443 ssl;
    server_name example.com;
    client_max_body_size 300m;
    client_body_buffer_size 50m;
    location / {
        proxy_pass http://127.0.0.1:8888;
        proxy_http_version 1.1;
        proxy_set_header Host $proxy_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    ssl on;
    ssl_certificate /etc/nginx/ssl/domain.crt;
    ssl_certificate_key /etc/nginx/ssl/domain.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
    ssl_prefer_server_ciphers on;
}

优点:不需要占用 80443 端口、可利用网关强大的能力(上传大小限制等)

启动和停止

# 前台运行服务
docker-compose up
# 后台运行服务
docker-compose up -d
# 查看服务日志
docker-compose logs -f --tail 100
# 停止服务
docker-compose stop
# 启动服务
docker-compose start
# 重启服务
docker-compose restart
# 删除服务
docker-compose down -v

启动成功后可通过 域名/admin 例如 https://example.com/admin 访问后台管理

持久化

项目启动后所有文件保存在 data 目录,请妥善保管

  • apple_developer : 苹果开发者账号相关证书
  • temporary_file_path : 临时文件存放路径(打包后的 IPA,1小时后会自动删除)
  • upload_file_path : 文件上传路径(上传的 IPA)
  • sqlite.db : 默认的sqlite数据库文件

数据库支持更换为 MySQL ,在 docker-compose.yml 加入以下环境变量 :

- MYSQL_ENABLE=true
- MYSQL_DSN=root:123456@tcp(127.0.0.1:3306)/db_default?charset=utf8mb4&parseTime=True&loc=Local

更多环境变量可参考:server/conf/default.yaml ,变量层级使用 _ 连接,如 MYSQL_MAXIDLE 代表 mysql 配置中的空闲连接池中连接的最大数量

宝塔部署

使用宝塔部署,本质上是使用 Docker + Nginx,即 Docker 部署中的配置 3 方式,区别只是在于提供了一种可视化的操作。

软件商店搜索安装 Docker管理器

image

进入 Docker管理器-镜像管理-获取镜像 togettoyou/ipashare:latest

image

如果下载较慢,可以试试镜像加速

进入 Docker管理器-容器列表-创建容器

image

其中具体的配置可以参考配置 3

配置反向代理以及 SSL 证书

网站-添加站点-纯静态即可

image

创建反向代理

image

开启 SSL ,根据自己需求申请,需要开启强制 HTTPS

image

启动成功后同样通过 域名/admin 例如 https://example.com/admin 访问后台管理

JetBrains 开源证书支持

本项目使用 GoLand 开发,感谢 JetBrains 提供的免费授权

喝杯奶茶

如有帮助,可以打赏支持,一分也是爱!

微信打赏 支付宝打赏
微信 支付宝