/electron-distribution

Electron build and auto update service, application distribution.(Electron程序自动更新)

Primary LanguageJavaScriptMIT LicenseMIT

Electron Distribution

license GitHub last commit

JavaScript Style Guide

简体中文

Electron build and auto update service, application distribution. Making application distribution easier.

A git repository corresponds to an electron app and an distributed system.

Electron Distribution server-side work in 64 bit Linux OS (required) and MacOS (optional), and build for x64 platform, other platform need to modify the code (It is easy).

Electron Distribution

Quick Setup Guide

In your Linux Server (x64)

Example

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:latest

China user
Aliyun: docker pull registry.cn-shenzhen.aliyuncs.com/yi-ge/electron-distribution:latest

TencentYun: docker pull ccr.ccs.tencentyun.com/yi-ge/electron-distribution:latest

Notice
You need to configure nginx and SSL by yourself. SCHEME only a tip.

Environment

ENV Var Default Description
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 "guest" 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.

Qiniu Object Storage: https://developer.qiniu.com/kodo/sdk/1289/nodejs
Aliyun Object Storage: https://github.com/ali-sdk/ali-oss
Tencent Cloud Object Storage: https://github.com/tencentyun/cos-nodejs-sdk-v5

API Document

Swagger: https://yourdomain/documentation

API token require SHA-512 encrypt.

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

Content type: application/json
Secret: your Token

In your Electron App

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

More about: electron-builder electron-simple-updater

Insert build configuration in your package.json (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 Build And Code Signing

Install Xcode 10.2 \ brew (yarn 1.15.2) \ nvm (node 11.13.0) in the macOS Majave (10.14.4), run the Xcode at least once.

Git and rsync are installed by default.

Start sshd:

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

Adding your server public key to mac ~/.ssh/authorized_keys. Adding your mac public key to server ~/.ssh/authorized_keys.

Run the ssh macName@macIp in the linux server at least once . Run the ssh linux@linuxIp in the mac server at least once.

Install rsync and enable sshd in your Linux Server.

Author

Yi Wang a@wyr.me