electron-distribution/README.zh-CN.md
2020-02-01 17:25:49 +08:00

13 KiB
Raw Permalink Blame History

Electron 应用分发系统

license GitHub last commit

JavaScript Style Guide

简体中文

Electron 应用分发系统提供应用程序编译、自动升级、分发服务。让Electron应用分发变得非常容易。

一个git仓库对应一个Electron应用程序,对应使用一套应用分发系统。

Electron 应用分发系统服务器端工作在 64 位 Linux 操作系统(必须)和 MacOS可选默认编译 x64 应用程序, 其它平台及架构需要修改相应代码(不过这很容易实现).

快速开始

Linux Server (x64) 服务器部署指南

命令运行例子

docker run -itd --name electron-distribution --restart always \
 -e NAME=your-app-name \
 -e SCHEME=https \
 -e DOMAIN=www.example.com \
 -e TOKEN=123456 \
 -e REPOPATH=git@github.com:abc/def.git \
 -e BUILD_TYPE=win,linux,mac \
 -e WORKPATH=/data \
 -e OBJECT_STORAGE_TYPE=cos
 -v /data:/data \
 -p 80:80 \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v /root/.ssh:/root/.ssh \
 -v /data/icon.ico:/project/public/icon.ico \
 wy373226722/electron-distribution

国内用户
阿里云镜像:docker pull registry.cn-shenzhen.aliyuncs.com/yi-ge/electron-distribution:latest

腾讯云镜像:docker pull ccr.ccs.tencentyun.com/yi-ge/electron-distribution:latest

注意
你需要自行安装 Nginx 并配置使其支持 SSL这是必须的否则应用程序自动更新可能会失效。SCHEME只是一个标识。

环境变量

变量名 默认值 描述
NAME "APP" Your app name. Numbers, letters and "-".
SCHEME "https" Production environment only work with SSL.
DOMAIN "www.example.com" Your Electron Distribution server-side domain.
TOKEN "1jH27dJf9s852" Your Electron Distribution API TOKEN.
REPOPATH "git@github.com:yi-ge/electron-distribution.git" Your electron app repository.
BUILD_TYPE "win,linux" win,linux,mac
WORKPATH "/data" -v /data:/data, The two path must be consistent.
DOCKER_SOCKET "/var/run/docker.sock" Docker socket path.
MAC_SERVER_HOST "127.0.0.1" Your macOS server host.
MAC_SERVER_PORT "22" Your macOS server ssh port.
MAC_SERVER_USERNAME "guest" Your macOS server ssh username.
LINUX_SERVER_HOST "127.0.0.1" Only require build mac application. Your linux server host.
LINUX_SERVER_PORT "22" Only require build mac application. Your linux server ssh port.
LINUX_SERVER_USERNAME "root" Only require build mac application. Your linux server ssh username.
GH_TOKEN "" If you set publish option.
CSC_LINK "" https://www.electron.build/code-signing
CSC_KEY_PASSWORD "" https://www.electron.build/code-signing
CSC_NAME, "" https://www.electron.build/code-signing
BUILD_CPU_LIMIT "0" Linux and Windows build cpu limit. CPUs in which to allow execution (e.g., 0-3, 0,1)
BUILD_MEMORY_LIMIT 0 Linux and Windows memory limit in bytes. 1024 * 1024 * 1024 bytes = 1073741824 bytes = 1GB
OBJECT_STORAGE_TYPE "cos" cos: Tencent Cloud Object Storage; oss: Aliyun Object Storage; qiniu: Qiniu Object Storage.
QINIU_ACCESS_KEY "" Qiniu Object Storage, accessKey.
QINIU_SECRET_KEY "" Qiniu Object Storage, secretKey.
QINIU_BUCKET_KEY "" Qiniu Object Storage, bucket.
QINIU_ZONE "Zone_z0" 华东 Zone_z0、华北 Zone_z1、华南 Zone_z2、北美 Zone_na0
QINIU_URL "https://cdn.xxx.com" Qiniu Object Storage CDN url.
OSS_ACCESS_KEY_ID "id" Aliyun accessKeyId.
OSS_ACCESS_SECRET "secret" Aliyun accessKeySecret.
OSS_REGION "oss-cn-qingdao" Aliyun Object Storage, Region.
OSS_BUCKET "bucket" Aliyun Object Storage, Bucket.
OSS_URL "https://cdn.xxx.com" Aliyun Object Storage CDN url.
OSS_INTERNAL false Access aliyun OSS with aliyun internal network or not, default is false. If your servers are running on aliyun too, you can set "true" to save lot of money.
COS_SECRE_ID "" Tencent Cloud Object Storage SecretId.
COS_SECRE_KEY "" SecretKey.
COS_BUCKET "bucketname-12345678" Bucket.
COS_REGION "ap-chengdu" Region.
COS_URL "https://cdn.xxx.com" Object Storage CDN url.

七牛对象存储: https://developer.qiniu.com/kodo/sdk/1289/nodejs
阿里云对象存储: https://github.com/ali-sdk/ali-oss
腾讯云对象存储: https://github.com/tencentyun/cos-nodejs-sdk-v5

API 文档

Swagger: https://yourdomain/documentation

API 中的 token 需要进行SHA-512加密。

Github webhooks: https://yourdomain/build/webhooks

Content type: application/json
Secret: your Token

Electron 应用程序配置指南

yarn add electron-builder electron-simple-updater -D

关于 electron-builder electron-simple-updater

在你的package.json文件中加入build配置信息(https://www.electron.build):

"scripts": {
  "build": "node config/build.js && electron-builder",
  "build:dir": "node config/build.js && electron-builder --dir",
  ...
},
"build": {
  "productName": "Your App Name",
  "appId": "com.appid.abc",
  "directories": {
    "output": "build"
  },
  "files": [
    "dist/electron/**/*"
  ],
  "dmg": {
    "contents": [
      {
        "x": 410,
        "y": 150,
        "type": "link",
        "path": "/Applications"
      },
      {
        "x": 130,
        "y": 150,
        "type": "file"
      }
    ]
  },
  "mac": {
    "icon": "build/icons/icon.icns"
  },
  "win": {
    "icon": "build/icons/icon.ico",
    "target": "squirrel"
  },
  "linux": {
    "artifactName": "${productName}-${version}-${arch}.${ext}",
    "icon": "build/icons"
  },
  "squirrelWindows": {
    "iconUrl": "https://yourServer/app/icon.ico"
  }
},

Mac APP 编译及代码签名

在 macOS Majave (10.14.4)中安装 Xcode 10.2 \ brew (yarn 1.15.2) \ nvm (node 11.13.0), 至少运行一次Xcode

操作系统默认安装了 Git 和 rsync。

开启 sshd:

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

添加你的服务器公钥到 Mac ~/.ssh/authorized_keys。 添加你的 Mac 公钥到服务器 ~/.ssh/authorized_keys

在你的 Linux 服务器中安装rsync,并开启 SSH 服务。