Personal Blog

轶哥

轶哥的头像

妄图改变世界的全栈程序员。

Latest Stories

最新文章 · 第 11 页

记录技术实践、产品思考,以及持续探索世界的过程。

CentOS8卸载podman安装docker

由于CentOS8默认安装了podman,因此在CentOS8中安装docker会导致冲突引发如下异常。

Error: 
 Problem 1: problem with installed package podman-2.0.5-5.module_el8.3.0+512+b3b58dca.x86_64
  - package podman-2.0.5-5.module_el8.3.0+512+b3b58dca.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
  - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
  - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
  - cannot install the best candidate for the job
  - package runc-1.0.0-64.rc10.module_el8.3.0+479+69e2ae26.x86_64 is filtered out by modular filtering
 Problem 2: problem with installed package buildah-1.15.1-2.module_el8.3.0+475+c50ce30b.x86_64
  - package buildah-1.15.1-2.module_el8.3.0+475+c50ce30b.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
  - package docker-ce-3:20.10.1-3.el8.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installed
  - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
  - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
  - package containerd.io-1.4.1-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
  - package containerd.io-1.4.1-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
  - package containerd.io-1.4.3-3.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
  - package containerd.io-1.4.3-3.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
  - cannot install the best candidate for the job
  - package runc-1.0.0-56.rc5.dev.git2abd837.module_el8.3.0+569+1bada2e4.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-64.rc10.module_el8.3.0+479+69e2ae26.x86_64 is filtered out by modular filtering

在部分场景中却不得不使用docker,因为podman是新东西,即便命令和docker及其相似,也因为生态原因,各类API还无法完全兼容。例如《【视频教程】Electron自动编译及自动更新、分发》就对这个情况进行过说明,在使用Electron 应用分发系统的时候,由于使用了开源项目dockerode对docker进行控制,因此需要卸载podman改用docker

Electron 应用分发系统(Electron自动更新)

Electron 应用分发系统提供应用程序编译(支持Windows、Linux、MacOS)、自动升级、分发服务。让Electron应用分发变得非常容易。

Electron Distribution

开源地址:https://github.com/yi-ge/electron-distribution

使用时需要注意,一个git仓库需对应一个Electron应用程序,一个Electron应用程序对应需要部署一套应用分发系统。

Electron 应用分发系统服务器端工作在64位Linux操作系统(必须)和MacOS(可选),默认编译x64应用程序, 其它平台及架构需要修改相应代码(不过这很容易实现)。

【视频教程】Electron自动编译及自动更新、分发

为了实现Electron的自动更新,曾撰文《Electron 应用分发系统(Electron自动更新)》,不少小伙伴反应说不知道正确的操作姿势。仔细想来,这个部署确实不简单,因此特意录制此视频。

视频从头开始讲解了如何搭建一个Electron官方示例,配置并实现push到git仓库后服务器端自动编译、自动上传编译后的文件到七牛对象存储、客户端捕获更新信息并且后台静默更新的配置全过程。

需要特别留意的是,每次发布新版本之前都需要修改package.json里面的version版本号,否则自动更新分发会失效。

OpenWRT 设置桥接交换机模式(AP模式)

OpenWRT / LEDE 设置桥接模式作为交换机,能够将路由器当无线AP使,同时有线网口作为交换机使用。

openwrtlan.png

先将原有的wan口删除,然后进入lan口设置页面物理接口选项,勾选桥接接口选项,将未勾选的/之前用于wan口的以太网适配器: "eth0.x"勾选桥接。

image.png

勾选lanDHCP服务器忽略此接口选项。设置完成后,所有的接口都可以作为交换机LAN口使用。无线设置不变。

路由器当交换机/AP用

所有的路由器都可以当做交换机使用。在现今WIFI6大放异彩的时代,家里可能淘汰了一些旧路由,同时又新增了一些网络设备。可以通过简单设置,将闲置路由器作为交换机使用。

进入路由器管理后台设置界面

将网线连接到路由器任意LAN口,或通过WIFI连接到路由器网络中。在电脑浏览器上通过192.168.1.1进入路由器管理后台,如果无法访问,可以查看网络设置属性中的网关地址,网关地址即为路由器设置界面的访问地址。

Redash导出仪表盘中所有数据为Excel文件

在《Redash刷新整个仪表盘API》一文中,提到了导出仪表盘中所有的Widget数据为Excel文件的需求。

实现该需求只需要调用官方的API,但是官方API文档对于使用的描述基本没有。

第一步:获取仪表盘数据,得到QueryID

通过请求

GET /api/dashboards/<dashboard_slug>?api_key=<API_KEY>

获取仪表盘数据。

Redash刷新整个仪表盘API

转眼间使用Redash已经两年多了,redash给我的感觉就是省心省事。基础需求都能实现,用户体验很好,升级版本也容易,二次开发也方便简单。

只不过有两个需求redash没有实现:

  • API刷新整个仪表盘
  • 导出仪表盘中所有的Widget数据为Excel文件

第二个需求,我在《Redash导出仪表盘中所有数据为Excel文件》一文进行了实现说明。

Poetry快速安装教程

Poetry是一个Python的依赖管理工具。设计思路比较先进,运行速度非常快。非常类似于Node.js里面的yarn

Poetry在国内的安装速度比较慢。好在安装脚本提供了--file参数,可以指定安装包。我们可以通过这个方法进行快速安装。

关于Poetry

Poetry是用于处理依赖项安装以及Python程序包构建和打包的工具。只需一个文件即可完成所有工作:标准化的 pyproject.toml

换句话说,用pyproject.toml来代替setup.pyrequirements.txtsetup.cfgMANIFEST.in和新加入的Pipfile

  • 将尝试将语义版本控制作为版本命名的最佳实践。
  • 可以指定自述文件,included 和 excluded 文件:no more MANIFEST.inpoetry还将使用VCS忽略文件(如.gitignore)填充该exclude部分。
  • 可以指定关键字(最多5个),并在包发布站点上用作标签。
  • 依赖项部分支持插入符号,波浪号,通配符,不等式和多重依赖。
  • 您必须指定与您的软件包兼容的python版本。

poetry还将检测您是否在virtualenv中,并相应地安装软件包。因此,poetry可以在全球范围内安装并在任何地方使用。

poetry 还带有完整的依赖关系解析库。

更多内容不再赘述,参考peotry官网:https://python-poetry.org/

使用方法参考 peotry开源地址:https://github.com/python-poetry/poetry

Nginx通过域名进行TCP反向代理

使用Nginx可以实现根据域名进行TCP反向代理到不同的内网服务器。

应用场景

一家公司购买了很多服务器,为了节约成本,使用了阿里云/腾讯云的NAT网关,通过几台网关服务器进行NAT出口,通过大量内网服务器进行数据计算,节约公网带宽费用且确保了内网服务器不因公网IP泄露导致被攻击。

aliyun.png

(上图来自阿里云)

但是在用作网关的出口服务器上,需要配置SSL域名证书。如果在网关配置域名证书,各个业务对证书的要求不一样,网关服务器管理员疲于运维。因此,通过TCP反向代理到内网服务器,让内网服务器管理员自行配置SSL证书。

  上一页 下一页