将亚马逊 s3 与电子制造商的自动更新程序一起使用 [关闭]

Posted

技术标签:

【中文标题】将亚马逊 s3 与电子制造商的自动更新程序一起使用 [关闭]【英文标题】:Use amazon s3 with electron-builder's auto updater [closed] 【发布时间】:2018-11-17 21:39:04 【问题描述】:

如何在我的电子应用程序中使用 electron-builder 的自动更新功能和 Amazon S3?

也许已经实现了它的人,可以提供比电子构建器文档中提供的更多详细信息吗?

【问题讨论】:

【参考方案1】:

是的,我同意你的观点,我最近经历过那里......

即使我迟到了,我也会尽量把我知道的告诉别人!

在我的例子中,我使用 electron-builder 来打包我的 electron/anguler 应用程序。

要使用 electron-builder,我建议你在项目根目录下创建一个名为 electron-builder.json 的文件。

这就是我的内容:


  "productName": "project-name",
  "appId": "org.project.project-name",
  "artifactName": "$productName-setup-$version.$ext", // this will be the output artifact name
  "directories": 
    "output": "builds/"  // The output directory...
  ,
  "files": [ //included/excluded files 
    "dist/",
    "node_modules/",
    "package.json",
    "**/*",
    "!**/*.ts",
    "!*.code-workspace",
    "!package-lock.json",
    "!src/",
    "!e2e/",
    "!hooks/",
    "!angular.json",
    "!_config.yml",
    "!karma.conf.js",
    "!tsconfig.json",
    "!tslint.json"
  ],
  "publish" : 
    "provider": "generic",
    "url": "https://project-release.s3.amazonaws.com",
    "path": "bucket-path"
  ,
  "nsis": 
    "oneClick": false,
    "allowToChangeInstallationDirectory": true
  ,
  "mac": 
    "icon": "src/favicon.ico"
  ,
  "win": 
    "icon": "src/favicon.ico"
  ,
  "linux": 
    "icon": "src/favicon.png"
  

如您所见,如果您想使用 electron-buider 将应用程序自动发布到 s3,则需要添加发布配置。我不喜欢的是,所有工件和文件都位于同一个文件夹中。就我而言,就像您在下面的 package.json 中看到的那样,我决定使用 electron-builder build -p never 手动打包它。这基本上是告诉永远不要发布它,但我需要它,因为没有它,它不会生成 latest.yml 文件。我正在使用 Gitlab-ci 生成人工制品,然后我使用脚本将其发布到 s3 上,但您可以根据需要使用 -p always 选项。

Electron-builder 需要 latest.yml 文件,因为这是他知道 s3 上的人工制品是否更新的方式。

latest.yml 内容示例:

version: 1.0.1
files:
  - url: project-setup-1.0.0.exe
    sha512: blablablablablablablabla==
    size: 72014605
path: project-setup-1.0.0.exe
sha512: blablablablablabla==
releaseDate: '2019-03-10T22:18:19.735Z'

另一件重要的事情是,electron-builder 将尝试从您在 electron-builder.json publish 配置中提供的 url 获取内容,如下所示:

https://project-release.s3.amazonaws.com/latest.yml

https://project-release.s3.amazonaws.com/project-setup-1.0.0.exe

这是默认上传的内容

为此,您需要公开您的 s3 存储桶,以便使用该应用的每个人都可以获取最新版本...

政策如下:


    "Version": "2012-10-17",
    "Statement": [
        
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::your-bucket-name/*",
                "arn:aws:s3:::your-bucket-name"
            ]
        
    ]

替换您的存储桶名称


其次,为了打包应用程序,我在 package.json 中添加了一个脚本。 (“build:prod”仅适用于 Angular)

  "scripts": 
    "build:prod": "npm run build -- -c production",
    "package:linux": "npm run build:prod && electron-builder build --linux -p never",
    "package:windows": "npm run build:prod && electron-builder build --windows -p never",
    "package:mac": "npm run build:prod && electron-builder build --mac -p never",
  ,

最后,这是一篇写得很好的文章here,它与 gitlab-ci 一起使用。

我可能忘记了一些部分,有什么问题可以问!

【讨论】:

嗨弗朗西斯,我也在尝试将电子更新器与亚马逊 s3 一起使用,但是,我收到了拒绝访问错误。我的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 在我的 .env 文件中,但是它们没有在任何地方使用。你知道我需要做什么吗? AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 不应添加到前端 .env 文件中,因为客户端可以访问那些应该保密的变量。你用的是什么后端?通过正确注入环境变量,您应该能够从后端访问您的存储桶。上面有一些教程。 嗨弗朗西斯,我对这些东西不是很熟悉。我有一个 React/Electron 前端,它通过打包在同一个电子版本中的代理快递服务器提供数据,我的电子入口文件启动服务器。那会被认为是我的后端吗?还是客户也可以访问它? 那么 express 将被视为您的后端。此外,Electron 应用程序可以解包,所以是的,这意味着客户端可以访问源代码。这取决于你想要什么样的应用程序。但是为了安全起见,最好单独服务服务器,而不是打包在同一个电子应用中。 这个支持差异下载吗?【参考方案2】:

这是 electron-builder 中 S3 autoUpdater 的文档

https://www.electron.build/configuration/publish#s3options

你把你的配置放在package.json构建标签中,例如:


  "name": "ps-documentation",
  "description": "Provides a design pattern for Precisão Sistemas",
    "build":
      "publish": 
        "provider": "s3",
        "bucket": "your-bucket-name"
      ,
    

【讨论】:

以上是关于将亚马逊 s3 与电子制造商的自动更新程序一起使用 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gitlab 进行电子更新

如何将电子邮件适配器添加到我的亚马逊 EC2 实例以启用我的应用程序的密码重置

如何使用 django (python) 和 s3 上传文件?

将 Amazon S3 存储桶和 Cloudfront 与 SSL Wordpress 站点一起使用不会提供静态文件

您是不是可以在使用 Google App Engine 开发的网站上使用 Amazon 的 s3?

aws s3 如何处理覆盖文件和访问?