electron-release-server部署electron自动更新服务器记录
目录
一、前言
环境
二、步骤
1、下载上传electron-release-server到服务器
2、宝塔新建node项目网站
3、安装依赖
①npm install
②安装并配置postgres数据库
③修改项目配置文件
④启动项目
⑤修改postgres的认证方式
⑥Cannot find where you keep your Bower packages.
4、宝塔网站添加网址
5、无法访问
一、前言
electron团队自己维护了一个免费开源的自动更新服务。 update.electronjs.org
但是,需要满足以下条件:
- 应用运行在 macOS 或者 Windows
- 应用有公开的 GitHub 仓库
- 构建需要发布到 GitHub Releases 中
- 构建是经过代码签名的
很明显,我2、3、4条都不符合。那就用electron-release-server部署一个自己的更新服务器。
环境
- 阿里云2核2G 3M CentOS 7.9 64位
- 宝塔面板
- Node14.17.6
二、步骤
1、下载上传electron-release-server到服务器
electron-release-server项目地址:GitHub - ArekSredzki/electron-release-server: A fully featured, self-hosted release server for electron applications, compatible with auto-updater.A fully featured, self-hosted release server for electron applications, compatible with auto-updater. - ArekSredzki/electron-release-server
https://github.com/ArekSredzki/electron-release-server
我上传到了update目录下:

2、宝塔新建node项目网站
宝塔后台:网站 > Node项目 > 添加Node项目,如下图:

网站配置项说明:
- 项目目录:我的是update目录,你可以根据自己的喜好修改。
- 项目名称:随你喜欢。
- 启动选项:宝塔会自动读取package.json的script配置,选择 start 【node app.js】
- 项目端口:这里暂时先填写1337,后面会说到这个端口可以在哪里修改。
- 运行用户:这里必须选择root,否则项目不能启动成功。
- 包管理器:我习惯用npm
- Node版本:我就只装了一个版本,你也可以尝试其他版本。
3、安装依赖
①npm install
这一步咱就不多说了,在宝塔update目录下运行终端。
②安装并配置postgres数据库
# 安装 PostgreSQL
sudo yum install -y postgresql-server postgresql-contrib# 初始化数据库
sudo postgresql-setup initdb# 启动 PostgreSQL 服务
sudo systemctl start postgresql# 开机自启动设置
sudo systemctl enable postgresql# 切换到 postgres 用户
sudo -i -u postgres# 运行 psql shell
psql
在 psql shell 中,执行以下命令:
CREATE ROLE electron_release_server_user ENCRYPTED PASSWORD 'MySecurePassword' LOGIN;
这条 PostgreSQL 的 SQL 命令用于创建一个新的数据库用户(角色),其具体含义如下:
CREATE ROLE:这个命令用来创建一个新的数据库角色。在 PostgreSQL 中,角色可以是用来登录的用户,也可以是代表一组权限的组。
electron_release_server_user:这是新角色的名字,在这个上下文中,它代表的是一个用户账号。
ENCRYPTED PASSWORD 'MySecurePassword':这指定了新用户的密码,并指示 PostgreSQL 使用加密的形式存储密码。'MySecurePassword' 是角色的密码,你应该在实际使用中将其替换为一个强密码。这里electron-release-server作者推荐了一个密码生成网站:GRC | Ultra High Security Password Generator Ultra high security password generator
https://www.grc.com/passwords.htm 使用: 63 random alpha-numeric characters ,每次刷新都会变化。
LOGIN:这个选项允许这个角色被用作登录角色,即它可以用作用户账号登录到数据库。
执行这条命令后,electron_release_server_user 角色将在数据库中被创建,并且可以用指定的密码进行登录。这通常是在刚刚安装完成 PostgreSQL,或者是在设置新的应用程序时需要进行的设定,以便应用程序可以使用这个用户角色连接到数据库并进行操作。
在实际使用中,通常还会授权这个角色访问特定的数据库或进行其他必要的权限设置。这样做可以提高安全性,因为它确保了应用程序仅有足够的权限来完成其需要执行的数据库r操作,而不会有更多过剩的权限。
然后在postgres为刚刚创建的用户创建2个表:
CREATE DATABASE electron_release_server OWNER "electron_release_server_user";
CREATE DATABASE electron_release_server_sessions OWNER "electron_release_server_user";
③修改项目配置文件
在electron-release-server项目下,找到config文件夹下的local.template,这是一个配置模版文件。
修改后的代码如下:
module.exports = {// The full base url at which your site will be primarily available.// Include an http:// prefix// ex. 'http://my-site.com'appUrl: '先不填,后面再搞',auth: {// 后台管理员帐号密码static: {username: 'admin',password: '123456aa'},},//这里不知道是干啥的,就是必须填写一个密钥,还是用上面提到的那个网站,复制一个63位的字符串jwt: {// Recommended: 63 random alpha-numeric characters for secret// Generate using: https://www.grc.com/passwords.htmtoken_secret: 'qHrksXUmZWXQTZpoc9KN3E4TQbfpTFtowp1wpqN9olPh4Cnbt9nnt0wUdzPlF9B'},models: {datastore: 'postgresql',dataEncryptionKeys: {// DEKs should be 32 bytes long, and cryptographically random.// You can generate such a key by running the following:// require('crypto').randomBytes(32).toString('base64')//上面说的很清楚,生成一个32位的字符串,看字面意思,加密数据用的密钥default: 'lp60Yb9wJYx8TgJa+2GmPTngNRIQMXTxlIXicEoYOfs='},},datastores: {postgresql: {adapter: 'sails-postgresql',host: 'localhost',user: 'electron_release_server_user', //这就是上面创建的数据库用户名//数据库密码password: 'IM6WZMxcCyf55lnccZUdvEJ9UggsTUVqGnYHbvWqrGPgfsUs27OUjl2t9kSziJ7',database: 'electron_release_server'//上面创建了2个数据库,这里填第一个数据库名称}},session: {// Recommended: 63 random alpha-numeric characters for secret// Generate using: https://www.grc.com/passwords.htm//还是,还是,还是生成一个63密码secret: '3i0a7ZXMWeb0TjfqkzD09JvlOs4e844FjR0bmlbiJdkASh3JG0BFRxUpAqbe5Vd',database: 'electron_release_server_sessions',//第二个数据库名host: 'localhost',user: 'electron_release_server_user',//数据库用户名//数据库密码password: 'IM6WZMxcCyf55lnccZUdvEJ9UggsTUVqGnYHbvWqrGPgfsUs27OUjl2t9kSziJ7',
//随便填写一个没有被占用的端口,我这里默认了port: 5432},files: {// Folder must exist and user running the server must have adequate permsdirname: 'upload_files',//你的文件上传目录(更新包),这个是我猜的,还没有测试// Maximum allowed file size in bytes// Defaults to 500MB// maxBytes: 524288000 },port: 1337,//项目端口};
④启动项目
执行 npm start
报错:
> node app.jsinfo: ·• Auto-migrating... (alter)info: Hold tight, this could take a moment.
error: A hook (`orm`) failed to load!
error: Failed to lift app: Exception: `getConnection` failed ("failed"). Could not acquire a connection to the database using the specified manager.
Additional data:{error: error: Ident authentication failed for user "electron_release_server_user"at Parser.parseErrorMessage (/www/wwwroot/update/node_modules/pg-protocol/dist/parser.js:287:98)at Parser.handlePacket (/www/wwwroot/update/node_modules/pg-protocol/dist/parser.js:126:29)at Parser.parse (/www/wwwroot/update/node_modules/pg-protocol/dist/parser.js:39:38)at Socket.<anonymous> (/www/wwwroot/update/node_modules/pg-protocol/dist/index.js:11:42)at Socket.emit (events.js:400:28)at addChunk (internal/streams/readable.js:290:12)at readableAddChunk (internal/streams/readable.js:265:9)at Socket.Readable.push (internal/streams/readable.js:204:10)at TCP.onStreamRead (internal/stream_base_commons.js:188:23) {length: 114,severity: 'FATAL',code: '28000',detail: undefined,hint: undefined,position: undefined,internalPosition: undefined,internalQuery: undefined,where: undefined,schema: undefined,table: undefined,column: undefined,dataType: undefined,constraint: undefined,file: 'auth.c',line: '305',routine: 'auth_failed'},meta: undefined
}at validateDatastoreConnectivity (/www/wwwroot/update/node_modules/waterline/lib/waterline/utils/system/validate-datastore-connectivity.js:27:25)at /www/wwwroot/update/node_modules/waterline/lib/waterline.js:722:18at Immediate.done [as _onImmediate] (/www/wwwroot/update/node_modules/sails-postgresql/lib/adapter.js:72:16)at processImmediate (internal/timers.js:464:21)
error: More details (raw): {error: error: Ident authentication failed for user "electron_release_server_user"at Parser.parseErrorMessage (/www/wwwroot/update/node_modules/pg-protocol/dist/parser.js:287:98)at Parser.handlePacket (/www/wwwroot/update/node_modules/pg-protocol/dist/parser.js:126:29)at Parser.parse (/www/wwwroot/update/node_modules/pg-protocol/dist/parser.js:39:38)at Socket.<anonymous> (/www/wwwroot/update/node_modules/pg-protocol/dist/index.js:11:42)at Socket.emit (events.js:400:28)at addChunk (internal/streams/readable.js:290:12)at readableAddChunk (internal/streams/readable.js:265:9)at Socket.Readable.push (internal/streams/readable.js:204:10)at TCP.onStreamRead (internal/stream_base_commons.js:188:23) {length: 114,severity: 'FATAL',code: '28000',detail: undefined,hint: undefined,position: undefined,internalPosition: undefined,internalQuery: undefined,where: undefined,schema: undefined,table: undefined,column: undefined,dataType: undefined,constraint: undefined,file: 'auth.c',line: '305',routine: 'auth_failed'},meta: undefined
}
⑤修改postgres的认证方式
上面的错误就是因为认证方式引起的。
需要更改 PostgreSQL 的 pg_hba.conf 配置文件,将认证方法全部改为password。
pg_hba.conf文件路径:
/var/lib/pgsql/data/pg_hba.conf
如下图所示:

⑥Cannot find where you keep your Bower packages.
Aborted due to warnings.
Running "wiredep:task" (wiredep) task
Warning: Error: Cannot find where you keep your Bower packages.
这个咱就不懂了,问了GPT,回答如下:
安装 Bower 包:确保您已经在项目中安装了 Bower,以及所需的依赖。如果未安装,您可以使用以下命令来安装 Bower:
npm install -g bower然后在项目根目录下运行
bower install来安装项目的前端依赖。
但是我执行bower install时,提示找不到bower命令,这明显是环境变量没有设置。
执行:
export PATH=$PATH:$(npm config get prefix)/bin
4、宝塔网站添加网址
在宝塔网站设置里,添加网址。

然后就访问网址,OK!!!

5、无法访问
去阿里云安全组查看是否放行了80端口
相关文章:
electron-release-server部署electron自动更新服务器记录
目录 一、前言 环境 二、步骤 1、下载上传electron-release-server到服务器 2、宝塔新建node项目网站 3、安装依赖 ①npm install ②安装并配置postgres数据库 ③修改项目配置文件 ④启动项目 ⑤修改postgres的认证方式 ⑥Cannot find where you keep your Bower p…...
贪心(基础算法)--- 区间选点
905. 区间选点 思路 (贪心)O(nlogn) 根据右端点排序 将区间按右端点排序 遍历区间,如果当前区间左端点不包含在前一个区间中,则选取新区间,所选点个数加1,更新当前区间右端点。如果包含,则跳…...
JAVA计算表达式
需求: 1、例如if(score>85){return 1;}else if(score>70){return 2;}else if(score>60){return 3;}else{return 4;}有这一串字符串,要执行这个字符串, 如果score为86分,则能得到1;如果score为30分ÿ…...
【复现】宏景HCM 任意文件读取漏洞_63
目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 宏景HCM 将人才标签技术应用于员工招聘、人才选拔等环节,通过多维度的标签体系,形成不同专业序列的人才画…...
Linux:kubernetes(k8s)搭建mater节点(kubeadm,kubectl,kubelet)(2)
安装k8有多种方式如: minikube kubeadm 二进制安装 命令行工具 我这里就使用kubeadm进行安装 环境 3台centos7 master ip :192.168.113.120 2G运存 2内核 node1 ip :192.168.113.121 2G运存 2内核 node2 ip :192.168.1…...
Web应用安全威胁与防护措施
本文已收录至《全国计算机等级考试——信息 安全技术》专栏 由于极其容易出现漏洞、并引发安全事故,因此数据隐私的保护是目前绝大多数企业不可绕过的运维环节。不过,许多中小型企业往往会错误地认为只有大型企业才会成为黑客的目标。而实际统计数字却截…...
MySQL相关知识汇总
MySQL是一个广泛使用的开源关系型数据库管理系统,它以其高性能、稳定性和易用性而备受开发者喜爱。在软件开发领域,无论是大型项目还是小型应用,MySQL都扮演着重要的角色。本文将对MySQL的一些关键知识点进行汇总,帮助读者更好地了…...
【旧文搬运】为你的 Laravel 应用添加一个基于 Swoole 的 WebSocket 服务
做了一个基于 Swoole 的 WebSocket 扩展包,可以用来做实时状态推送,或者自定义消息处理实现 im,有需要的可以看看: [giorgio-socket] 使用方法 安装 安装扩展包 composer require wu/giorgio-socket发布配置文件 php artisan vendor:pu…...
vue项目从后端下载文件显示进度条或者loading
//API接口 export const exportDownload (params?: Object, peCallback?: Function) > {return new Promise((resolve, reject) > {axios({method: get,url: ,headers: {access_token: ${getToken()},},responseType: blob,params,onDownloadProgress: (pe) > {peC…...
[技巧]Arcgis之图斑四至点批量计算
前言 上一篇介绍了arcgis之图斑四至范围计算,这里介绍的图斑四至点的计算及获取,两者之间还是有差异的。 [技巧]Arcgis之图斑四至范围计算 这里说的四至点指的是图斑最东、最西、最南、最北的四个地理位置点坐标,如下图: 四至点…...
【java】20:枚举
枚举的二种实现方式 1) 自定义类实现枚举 2) 使用 enum 关键字实现枚举 自定义实现枚举: 1.不需要提供setXxx方法,因为枚举对象值通常为只读. 2.对枚举对象/属性使用final static共同修饰,实现底层优化. 3.枚举对象名通常使用全部大写&…...
★【二叉搜索树(中序遍历特性)】【 ★递归+双指针】Leetcode 98. 验证二叉搜索树
★【二叉搜索树(中序遍历特性)】【 ★递归双指针】Leetcode 98. 验证二叉搜索树 二叉搜索树 98. 验证二叉搜索树解法1 笨 中序递归遍历为一个数组 然后判断数组是不是升序排列就可以★解法2 不使用数组 递归法 ---------------🎈Ἰ…...
打造无缝滚动体验:JavaScript中的scrollIntoView()方法实战指南
在现代Web开发中,提升用户体验是至关重要的。通过JavaScript的scrollIntoView()方法,我们可以为用户创造出流畅而令人愉悦的滚动体验。本文将深入研究scrollIntoView()的强大功能,并结合实例演示如何在项目中巧妙应用,以打造出无缝…...
实战:如何将Oracle单实例数据库转换成Oracle RAC数据库
导读 本文介绍如何将Oracle单实例数据库转换成Oracle RAC数据库 环境说明: 数据库节点2上有个单实例数据库zlxdb2,现在要将zlxdb2转换成RAC数据库,RAC数据库的两个实例分别是lzydb1和lzydb2。 以下是详细的操作步骤: 1、查看zlxdb…...
基于华为atlas的分类模型实战
分类模型选用基于imagenet训练的MobileNetV3模型,分类类别为1000类。 pytorch模型导出为onnx: 修改mobilenetv3.py中网络结构,模型选用MobileNetV3_Small模型,网络输出节点增加softmax层,将原始的return self.linear4…...
编程语言:SQL Server数据库使用教程,SQL Server增删改查语句
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全自学教程》 SQL Server是微软提供的一种关系型数据库,…...
【tableau学习笔记】tableau无法连接数据源
【tableau学习笔记】tableau无法连接数据源 背景: 学校讲到Tableau,兴奋下载Kaggle Excel,一看后缀CSV,导入Tableau发现报错“tableau无法连接数据源”,自作聪明改为后缀XLSX,bug依旧。 省流:…...
cetos7 Docker 安装 gitlab
一、gitlab 简单介绍和安装要求 官方文档:https://docs.gitlab.cn/jh/install/docker.html 1.1、gitlab 介绍 gitLab 是一个用于代码仓库管理系统的开源项目,使用git作为代码管理工具,并在此基础上搭建起来的Web服务平台,通过该平…...
无极低码:无极低码部署版操作指南
无极低码 :https://wheart.cn 无极低码是一个面向开发者的工具,旨在为开发者、创业者或研发企业,提供快速,高效,标准化,可定制,私有化部署的平台,在兼顾开发速度的同时,兼…...
C语言实现日本某地发生了一件谋杀案
题目 猜凶手 题目内容: 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话&…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

