electron-updater实现自动更新

electron-updater 是一个专为 Electron 应用设计的自动更新工具,能够帮助开发者轻松实现跨平台的自动更新功能。它支持 Windows、macOS 和 Linux 系统,通过简单的配置即可集成到 Electron 应用中,自动检查应用的最新版本并在后台完成更新。electron-updater 提供了灵活的更新策略,比如自动下载更新、静默安装,以及在下次启动时应用更新,从而确保用户始终使用最新版本的应用程序。

安装依赖

npm install electron-updater --save

配置 package.json

在 package.json 中添加 build 配置,指定更新服务器的地址:

{
  "build": {
    "nsis": {
      "allowElevation": true,
      "oneClick": false,
      "perMachine": true,
      "allowToChangeInstallationDirectory": true,
      "installerIcon": "build/icon.ico",
      "uninstallerIcon": "build/icon.ico",
      "createDesktopShortcut": true,
      "createStartMenuShortcut": true,
      "differentialPackage": false
    },
    "publish": [
      {
        "provider": "generic",
        "url": "http://your-update-server-url/",
        "useMultipleRangeRequest": false
      }
    ]
  }
}

这里的 url 是更新服务器地址,可以是本地服务器或远程服务器。

主进程代码

在主进程中配置 autoUpdater 模块,监听更新事件并处理更新逻辑:

const { app, BrowserWindow } = require('electron');
const { autoUpdater } = require('electron-updater');

let mainWindow;

function createWindow() {
    mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true
        }
    });
    mainWindow.loadURL('http://localhost:9080');
}

autoUpdater.allowPrerelease = true;    //允许更新到预发布版本
autoUpdater.allowDowngrade = true;     //允许应用从高版本降级到低版本
autoUpdater.forceDevUpdateConfig = true;    //强制使用开发环境的更新配置
autoUpdater.useMultipleRangeRequest = false;    //是否使用多个范围请求(Range Requests)来下载更新包
autoUpdater.differentialPackage = false;        //是否使用差异更新包
autoUpdater.setFeedURL({
    provider: 'generic',
    url: 'http://your-update-server-url/'
});

// 配置自动更新
autoUpdater.on('checking-for-update', () => {
    console.log('Checking for updates...');
});

autoUpdater.on('update-available', () => {
    console.log('Update available');
});

autoUpdater.on('update-not-available', () => {
    console.log('No updates available');
});

autoUpdater.on('error', (error) => {
    console.error('Error in auto-updater', error);
});

autoUpdater.on('download-progress', (progressObj) => {
    console.log(`Download progress: ${progressObj.percent}%`);
});

autoUpdater.on('update-downloaded', (info) => {
    console.log('Update downloaded');
    autoUpdater.quitAndInstall();
});

app.whenReady().then(() => {
    createWindow();
    // 检查更新
    autoUpdater.checkForUpdates();
});

打包应用

使用 electron-builder 打包应用:

npm run build
electron-builder

这会生成一个 .exe 安装包以及相关的元数据文件(如 latest.yml),这些文件用于更新检测。

部署更新

将生成的 .exe 文件和 latest.yml 文件上传到更新服务器中。latest.yml 文件中包含版本信息,用于判断是否有新版本可用。

测试更新

安装生成的 .exe 文件后,启动应用。应用会自动检查更新,如果有新版本,会下载并提示用户重启以完成更新。

注意事项

  • 确保更新服务器的地址和配置正确。

  • 如果需要自定义更新逻辑,可以监听 autoUpdater 的事件并实现相应的处理。

  • 在开发环境中,可以通过模拟更新服务器来测试更新流程。

  • 生产环境:保持默认值(allowPrerelease = false,allowDowngrade = false)以确保稳定性。

  • 测试环境:启用 allowPrerelease = true 和 allowDowngrade = true 以方便测试。

  • 开发环境:启用 forceDevUpdateConfig = true 以调试更新流程。

### 使用 Supervisor 和 Gunicorn 部署 Python Web 应用 #### 安装必要的软件包 为了确保环境准备就绪,需先安装 `gunicorn` 及其管理工具 `supervisor`。对于基于 Debian 的 Linux 发行版,可以利用 `apt-get` 来完成此操作: ```bash sudo apt-get update && sudo apt-get install gunicorn supervisor -y ``` 这一步骤会自动处理依赖关系并安装最新版本的应用程序及其服务监控器[^4]。 #### 创建应用程序目录结构 建议为项目建立专门的工作空间,以便更好地管理和维护各个组件之间的关联性。假设工作区位于 `/var/www/myproject/` 下,则应包含如下子文件夹: - **static/** 存储静态资源(CSS, JavaScript 文件) - **media/** 用户上传的内容保存在此处 - **logs/** 日志记录位置 - **venv/** 虚拟环境中存放Python解释器及相关库 此外还需放置源码以及配置文件于根目录下。 #### 编写 WSGI 入口脚本 创建名为 `wsgi.py` 或者其他名称的入口模块来定义 Flask/Django 等框架实例作为可调用对象传递给 Gunicorn: ```python from myapp import create_app # 假设myapp是你的应用名 application = create_app() ``` 该文件应当置于项目的顶层目录内方便后续引用。 #### 设置 Gunicorn 启动参数 通过编写 `.ini` 格式的配置文档指定运行选项,比如监听端口号、进程数量等重要设置项。这里给出一个简单的例子——`gunicorn.conf.ini` : ```ini [program:gunicorn] command=/path/to/gunicorn --workers 3 --bind unix:/tmp/app.sock config.wsgi:application directory=/var/www/myproject/ user=nobody group=nogroup autostart=true autorestart=true stderr_logfile=/var/log/gunicorn/error.log stdout_logfile=/var/log/gunicorn/access.log environment DJANGO_SETTINGS_MODULE="config.settings.production" ``` 注意上述命令中的路径需要根据实际情况调整;同时考虑到安全性因素推荐使用 Unix socket 方式连接 Nginx 服务器而不是公开 IP 地址绑定[^2]。 #### 将任务加入到 Supervisord 中 编辑全局配置文件 `/etc/supervisord.conf` ,添加指向自定义 INI 文件的新条目从而让 supervisord 认识到新注册的服务单元: ```ini [include] files = /etc/supervisor/conf.d/*.conf ``` 接着把之前编写的 Gunicorn 配置复制粘贴至 `/etc/supervisor/conf.d/gunicorn.conf` 并重启守护进程使之生效: ```bash sudo systemctl restart supervisor ``` 此时应该可以通过查看状态得知 Gunicorn 是否成功启动并且处于稳定运行之中了。 #### NGINX反向代理配置 最后一步就是修改Nginx站点可用配置以实现HTTP请求转发功能。打开对应虚拟主机模板后追加类似下面所示片段: ```nginx server { listen 80; server_name example.com www.example.com; location / { proxy_pass http://unix:/tmp/app.sock; # 对应Gunicorn使用的socket地址 include proxy_params; } location /static/ { alias /var/www/myproject/static/; } } ``` 记得执行 `sudo nginx -t` 测试语法无误后再加载更新过的设定表单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值