将亚马逊 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 与电子制造商的自动更新程序一起使用 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何将电子邮件适配器添加到我的亚马逊 EC2 实例以启用我的应用程序的密码重置
如何使用 django (python) 和 s3 上传文件?
将 Amazon S3 存储桶和 Cloudfront 与 SSL Wordpress 站点一起使用不会提供静态文件