当前位置: 首页 > news >正文

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-servericon-default.png?t=N7T8https://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 generatoricon-default.png?t=N7T8https://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. 区间选点 思路 &#xff08;贪心&#xff09;O(nlogn) 根据右端点排序 将区间按右端点排序 遍历区间&#xff0c;如果当前区间左端点不包含在前一个区间中&#xff0c;则选取新区间&#xff0c;所选点个数加1&#xff0c;更新当前区间右端点。如果包含&#xff0c;则跳…...

JAVA计算表达式

需求&#xff1a; 1、例如if(score>85){return 1;}else if(score>70){return 2;}else if(score>60){return 3;}else{return 4;}有这一串字符串&#xff0c;要执行这个字符串&#xff0c; 如果score为86分&#xff0c;则能得到1&#xff1b;如果score为30分&#xff…...

【复现】宏景HCM 任意文件读取漏洞_63

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 宏景HCM 将人才标签技术应用于员工招聘、人才选拔等环节&#xff0c;通过多维度的标签体系&#xff0c;形成不同专业序列的人才画…...

Linux:kubernetes(k8s)搭建mater节点(kubeadm,kubectl,kubelet)(2)

安装k8有多种方式如&#xff1a; minikube kubeadm 二进制安装 命令行工具 我这里就使用kubeadm进行安装 环境 3台centos7 master ip &#xff1a;192.168.113.120 2G运存 2内核 node1 ip &#xff1a;192.168.113.121 2G运存 2内核 node2 ip &#xff1a;192.168.1…...

Web应用安全威胁与防护措施

本文已收录至《全国计算机等级考试——信息 安全技术》专栏 由于极其容易出现漏洞、并引发安全事故&#xff0c;因此数据隐私的保护是目前绝大多数企业不可绕过的运维环节。不过&#xff0c;许多中小型企业往往会错误地认为只有大型企业才会成为黑客的目标。而实际统计数字却截…...

MySQL相关知识汇总

MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;它以其高性能、稳定性和易用性而备受开发者喜爱。在软件开发领域&#xff0c;无论是大型项目还是小型应用&#xff0c;MySQL都扮演着重要的角色。本文将对MySQL的一些关键知识点进行汇总&#xff0c;帮助读者更好地了…...

【旧文搬运】为你的 Laravel 应用添加一个基于 Swoole 的 WebSocket 服务

做了一个基于 Swoole 的 WebSocket 扩展包&#xff0c;可以用来做实时状态推送&#xff0c;或者自定义消息处理实现 im&#xff0c;有需要的可以看看: [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之图斑四至范围计算&#xff0c;这里介绍的图斑四至点的计算及获取&#xff0c;两者之间还是有差异的。 [技巧]Arcgis之图斑四至范围计算 这里说的四至点指的是图斑最东、最西、最南、最北的四个地理位置点坐标&#xff0c;如下图&#xff1a; 四至点…...

【java】20:枚举

枚举的二种实现方式 1) 自定义类实现枚举 2) 使用 enum 关键字实现枚举 自定义实现枚举&#xff1a; 1.不需要提供setXxx方法&#xff0c;因为枚举对象值通常为只读. 2.对枚举对象/属性使用final static共同修饰&#xff0c;实现底层优化. 3.枚举对象名通常使用全部大写&…...

★【二叉搜索树(中序遍历特性)】【 ★递归+双指针】Leetcode 98. 验证二叉搜索树

★【二叉搜索树&#xff08;中序遍历特性&#xff09;】【 ★递归双指针】Leetcode 98. 验证二叉搜索树 二叉搜索树 98. 验证二叉搜索树解法1 笨 中序递归遍历为一个数组 然后判断数组是不是升序排列就可以★解法2 不使用数组 递归法 ---------------&#x1f388;&#x1f38…...

打造无缝滚动体验:JavaScript中的scrollIntoView()方法实战指南

在现代Web开发中&#xff0c;提升用户体验是至关重要的。通过JavaScript的scrollIntoView()方法&#xff0c;我们可以为用户创造出流畅而令人愉悦的滚动体验。本文将深入研究scrollIntoView()的强大功能&#xff0c;并结合实例演示如何在项目中巧妙应用&#xff0c;以打造出无缝…...

实战:如何将Oracle单实例数据库转换成Oracle RAC数据库

导读 本文介绍如何将Oracle单实例数据库转换成Oracle RAC数据库 环境说明&#xff1a; 数据库节点2上有个单实例数据库zlxdb2&#xff0c;现在要将zlxdb2转换成RAC数据库&#xff0c;RAC数据库的两个实例分别是lzydb1和lzydb2。 以下是详细的操作步骤&#xff1a; 1、查看zlxdb…...

基于华为atlas的分类模型实战

分类模型选用基于imagenet训练的MobileNetV3模型&#xff0c;分类类别为1000类。 pytorch模型导出为onnx&#xff1a; 修改mobilenetv3.py中网络结构&#xff0c;模型选用MobileNetV3_Small模型&#xff0c;网络输出节点增加softmax层&#xff0c;将原始的return self.linear4…...

编程语言:SQL Server数据库使用教程,SQL Server增删改查语句

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全自学教程》 SQL Server是微软提供的一种关系型数据库&#xff0c…...

【tableau学习笔记】tableau无法连接数据源

【tableau学习笔记】tableau无法连接数据源 背景&#xff1a; 学校讲到Tableau&#xff0c;兴奋下载Kaggle Excel&#xff0c;一看后缀CSV&#xff0c;导入Tableau发现报错“tableau无法连接数据源”&#xff0c;自作聪明改为后缀XLSX&#xff0c;bug依旧。 省流&#xff1a…...

cetos7 Docker 安装 gitlab

一、gitlab 简单介绍和安装要求 官方文档&#xff1a;https://docs.gitlab.cn/jh/install/docker.html 1.1、gitlab 介绍 gitLab 是一个用于代码仓库管理系统的开源项目&#xff0c;使用git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务平台&#xff0c;通过该平…...

无极低码:无极低码部署版操作指南

无极低码 &#xff1a;https://wheart.cn 无极低码是一个面向开发者的工具&#xff0c;旨在为开发者、创业者或研发企业&#xff0c;提供快速&#xff0c;高效&#xff0c;标准化&#xff0c;可定制&#xff0c;私有化部署的平台&#xff0c;在兼顾开发速度的同时&#xff0c;兼…...

C语言实现日本某地发生了一件谋杀案

题目 猜凶手 题目内容&#xff1a; 日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff1a;C在胡说 已知3个人说了真话&…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...