# 解决npm安装electron总失败的问题

总述解决办法

先运行

npm install -g cnpm --registry=https://registry.npmmirror.com

再运行

cnpm install --save-dev electron

解决过程

今天在学习electron的quick start教程时到安装electron的步骤npm install --save-dev electron总是不成功.会卡在reify:lodash: timing reifyNode:node_modules/@types/node Completed in 578ms这里。

百度和谷歌搜索,各种换源加代理都没解决。 最后找到了https://npmmirror.com/这个网站,根据指导,安装定制的cnpm管理工具npm install -g cnpm --registry=https://registry.npmmirror.com

然后执行cnpm install --save-dev electron 成功了。

日志如下:

“`text
F:\learn\my-electron-app<!–autointro–>

python快速把列表所有元素分配给不同变量

你可以使用Python的解包操作符*来快速分配列表中的元素。例如,如果你有一个列表lst,你可以使用以下代码将其所有元素分配给不同的变量:

a, b, c = lst

这将把列表中的第一个元素分配给变量a,第二个元素分配给变量b,第三个元素分配给变量c。如果你想要将剩余的元素分配给一个单独的变量,你可以使用解包操作符*。例如:

a, b, *rest = lst

这将把列表中的前两个元素分配给变量ab,并将剩余的元素作为列表分配给变量rest

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--arg1', type=int)
parser.add_argument('--arg2', type=float)
args = parser.parse_args()
print(args.arg1)
print(args.arg2)

使用argparse模块来定义两个参数arg1arg2,并将它们分别分配给整数和浮点数类型的变量。然后,我们使用parse_args()方法从文件中读取这些参数,并将它们分配给各自的变量。

关于traefik日志

traefik日志类型

注意: 在Traefik-2.X的生态里,将可观测性分为了如下几个部分,并提升到了专门的文档说明中**traefik-observability**.

  • 服务日志: Traefik进程本身相关的操作日志
  • 访问日志: 由Traefik接管的代理服务的访问日志(access.log)
  • Metrics: Traefik提供的自身详细的metrics数据
  • Tracing: Traefik也提供了追踪相关的接口,用来可视化分布式或微服务中的调用情况

服务日志

注意:默认的环境中,Traefik会将日志以text格式写入到stdout中,如果使用docker的方式部署的话,想要查看日志需要使用docker logs container_name方式来查看日志。

  • [docker](http://www.qince.net/docker "docker") logs -f [container_name / container_id]:这是Docker最常用的查看容器日志的命令,其中logs表示查看容器日志,-f表示跟踪最新日志,[container_name / container_id]指定要查看的容器名或ID。<!–autointro–>

多因素认证MFA与其标准

什么是 MFA?

Multi-Factor Authentication (MFA) 是一种简单有效的最佳安全实践方法,它能够在用户名和密码之外再额外增加一层安全保护。

启用 MFA 后,用户登录阿里云网站时,系统将要求输入用户名和密码(第一安全要素),然后要求输入来自其 MFA 设备的动态验证码(第二安全要素),双因素的安全认证将为您的账户提供更高的安全保护

MFA 设备可以基于硬件也可以基于软件,目前阿里云官网支持基于软件的虚拟 MFA。

虚拟 MFA 设备

虚拟 MFA 设备是能产生 6 位数字认证码的应用程序,遵循基于时间的一次性密码 (TOTP)标准(RFC 6238)。此类应用程序可在移动硬件设备(包括智能手机)上运行。使用虚拟 MFA 应用非常方便,但您需要理解虚拟 MFA 应用程序所具有的安全水平与硬件 MFA 设备有所差异,因为虚拟 MFA 应用程序可以在安全性较差的设备上运行(例如智能手机)。

1panel报错flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file解决

1panel安装openresty的时候报错

报错内容如下:

mount /opt/1panel/apps/openresty/openresty/conf/fastcgi-php.conf:/usr/local/openresty/nginx/conf/fastcgi-php.conf (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

解决办法

这是1panel的bug,新版已经修复。
1pctl restart重启1panel,卸载openresty后在应用列表界面点击刷新应用列表后重新安装就正常了,新版修复了这个问题。

探索过程

在找到解决办法前,找出错的原因

分析

这种错误一般由于主机上没有相应的文件,docker在创建的时候把文件路径当成文件夹创建导致docker挂在同步数据的时候文件夹和文件类型对应不上而报错。

所以准备修改文件映射方式

改变成我经常用的文件卷映射方式就可以了

services:
openresty:
container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
hostname: ${CONTAINER_NAME}
image: openresty/openresty:1.21.4.2-0-focal
labels:
createdBy: Apps
network_mode: host
restart: always
volumes:
- openrestyConf:/usr/local/openresty/nginx/conf
- openrestyLog:/var/log/nginx
- openrestyWww:/www
- openrestyHtml:/usr/share/nginx/html
- /etc/localtime:/etc/localtime
volumes:
openrestyConf: null
openrestyHtml: null
openrestyLog: null
openrestyWww: null
version: "3.7"

这种方式docker能正常拷贝文件

这种方式还是有点问题,因为毕竟对默认的方式做了修改,可能影响一些其他功能。

更新之前创建的yml是这样的

version: '3'
services:
openresty:
image: openresty/openresty:1.21.4.2-0-focal
container_name: ${CONTAINER_NAME}
restart: always
network_mode: host
volumes:
- ./conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf
- ./conf/fastcgi_params:/usr/local/openresty/nginx/conf/fastcgi_params
- ./conf/fastcgi-php.conf:/usr/local/openresty/nginx/conf/fastcgi-php.conf
- ./log:/var/log/nginx
- ./conf/conf.d:/usr/local/openresty/nginx/conf/conf.d/
- ./www:/www
- ./root:/usr/share/nginx/html
- /etc/localtime:/etc/localtime
labels:
createdBy: "Apps"

更新之后创建的文件是这样的


services:
openresty:
container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
image: openresty/openresty:1.21.4.2-0-focal
labels:
createdBy: Apps
network_mode: host
restart: always
volumes:
- ./conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf
- ./conf/fastcgi_params:/usr/local/openresty/nginx/conf/fastcgi_params
- ./conf/fastcgi-php.conf:/usr/local/openresty/nginx/conf/fastcgi-php.conf
- ./log:/var/log/nginx
- ./conf/conf.d:/usr/local/openresty/nginx/conf/conf.d/
- ./www:/www
<!--autointro-->

k8s部署学习

说明

下面是我学习搭建k8s的记录,并没有成功,应为我的vps配置太低了。
仅供参考学习,真正部署参考官方文档。

官方文档

https://kubernetes.io/zh-cn/docs/home/
https://github.com/guangzhengli/k8s-tutorials

安装三个组件

设置镜像库

vi /etc/yum.repos.d/kubernetes.repo
内容如下

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

会下载失败

kubelet-1.28.2-0.x86_64: Cannot download, all mirrors were already tried without success

修改镜像地址

[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

安装k8s的三个工具

sudo dnf install -y kubelet kubeadm kubectl

成功,可能是国外的vps应该用国外的镜像地址
已经安装好了三个组件:kubelet kubeadm kubectl

初始化的时候报错

执行master节点初始化的时候报错,有太多不符合项目,所以用不了k8s。


[root@racknerd-d17e8e volumes]# kubeadm init
[init] Using Kubernetes version: v1.28.2
[preflight] Running pre-flight checks
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
[WARNING Swap]: swap is enabled; production deployments should disable swap unless testing the NodeSwap feature gate of the kubelet
[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
[ERROR Mem]: the system RAM (771 MB) is less than the minimum 1700 MB
[ERROR CRI]: container runtime is not running: output: time="2023-09-17T05:08:55-05:00" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this <!--autointro-->

yum和dnf区别

两种不同的包管理工具,用于在Linux上安装、更新和卸载软件包。

区别:

依赖关系解决:二者dnf处理依赖关系的能力更强大
性能:dnf速度更快,dnf支持并行操作,可以同时下载多个软件包
配置文件:dnf使用以.repo为后缀的配置文件;yum使用以.repo为后缀的配置文件和/etc/yum.conf的主配置文件
用户界面:dnf输出信息更清晰明了,提供更多终端输出信息。yum输出信息较少,比较简洁

1panel使用说明

配置网站

1panel要设置网站必须先安装openresty

按照提示安装即可

查看容器运行日志

1panel的容器-编排中可以看到容器运行日志

删除已安装的应用

概览中-已安装的应用里可以删除应用

其他错误解决办法

下面这个错误是因为要用空格缩进,但是出现了tab符

错误: yaml: line 5: found a tab character that violates indentation

下面这个是因为volumes的缩进错误


services.volumes Additional property openrestyLo<!--autointro-->

vs code使用cython生成c代码有错误

用cython生成的c文件有提示错误

static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) {
    const Py_UNICODE *u_end = u;
    while (*u_end++) ;
    return (size_t)(u_end - u - 1);
}

提示标识符size_t不存在,还好有快捷修复选项,点击后出现c++插件设置,都设置成MSVC编译器就可以了。
![](https://easyimage.weiyoun.com/i/2023/04/24/

1panel设置证书账户申请通配符域名

为了能够使用https访问,先开启申请证书的账户

创建Acme 账户

输入邮箱即可创建

在网站-证书中设置dns账户

我用的阿里云的dns,所以选择阿里云。
需要在阿里云控制中心创建api key

创建证书

使用DNS账号创建的好处是可以生成通配符证书

无论是dns还是http解析都会报错

服务内部错误: error: one or more domains had a problem: [panel.weiyoun.com] [panel.weiyoun.com] acme: error presenting token: API call failed: invalid character '<' looking for beginning of value [weiyoun.com] [weiyoun.com] acme: error presenting token: API call failed: invalid character '<' looking for beginning of value

找到出错的原因了

我在截图的时候,不小心把阿里云DNS变成了DNSpod,修改过来就好了。